diff --git a/.hgtags b/.hgtags index fd9cacb7c88..ee8e1c5db34 100644 --- a/.hgtags +++ b/.hgtags @@ -160,3 +160,14 @@ f151d5833912a82cd4f203944da0305c3be83ecc jdk8-b35 98ce9816ae089c959ba1e70fba98423a31c4e9fa jdk8-b36 b3a91113026c99b0da010d41055719ab0d8938f0 jdk8-b37 4cc5610a6dd6227da766ebf9742eb11ff5ded6c0 jdk8-b38 +35a5397278779a2f8f3013f81586dc8f30cb149d jdk8-b39 +6e4e654931b976304bf6e7b4d0d6db8f75bac5d9 jdk8-b40 +c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41 +5c5a64ec0839df5affe9394b99ff338c363acbca jdk8-b42 +69d8a827cdf9236be9694a46d75c710d71dac7d7 jdk8-b43 +7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44 +9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45 +600c9a1feb01633cbcf2341a43d1d21e6497ecd0 jdk8-b46 +b820143a6f1ce993c6e6f31db4d64de990f42654 jdk8-b47 +086271e35b0a419b38e8bda9bebd70693811df0a jdk8-b48 +cecd7026f30cbd83b0601925a7a5e059aec98138 jdk8-b49 diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 7c912d85790..c47986f8eda 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -160,3 +160,14 @@ cc771d92284f71765eca14d6d08703c4af254c04 jdk8-b21 6a6ba0a07f33d37a2f97b1107e60c6a9a69ec84d jdk8-b36 b2972095a4b1e2a97409b7c3df61f3b263a5ce14 jdk8-b37 d939bd0ab13c16647ffa38cc4b64fb31b7d44e10 jdk8-b38 +8927dd68aee3fa54a1a698e2980e1b2f6c7c12c1 jdk8-b39 +a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40 +1a8c7c530f8a9b7f5bdb9b0693b2f5435ca5205e jdk8-b41 +1ce5dc16416611c58b7480ca67a2eee5153498a6 jdk8-b42 +661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43 +e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44 +633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45 +27fa766a2298ba8347dc198f0cf85ba6618e17db jdk8-b46 +1dcb4b7b9373e64e135c12fe1f8699f1f80e51e8 jdk8-b47 +3f6c72d1c2a6e5c9e7d81c3dc984886678a128ad jdk8-b48 +c97b99424815c43818e3cc3ffcdd1a60f3198b52 jdk8-b49 diff --git a/README-builds.html b/README-builds.html index 5e8d86af449..57ded784f9a 100644 --- a/README-builds.html +++ b/README-builds.html @@ -108,6 +108,7 @@
  • Testing the Build
  • Environment/Make Variables
  • Troubleshooting
  • +
  • The New Build
  • @@ -2120,6 +2121,16 @@ + +
    +

    The New Build

    +
    + The + Build Infrastructure project is working on a new + build. For information on how to try it out, please see the + + Build Infra User Guide +

    diff --git a/THIRD_PARTY_README b/THIRD_PARTY_README index ee5463a922e..759733bfceb 100644 --- a/THIRD_PARTY_README +++ b/THIRD_PARTY_README @@ -3383,3 +3383,397 @@ included with JRE 7, JDK 7, and OpenJDK 7, except where noted: ------------------------------------------------------------------------------- +%% This notice is provided with respect to Mozilla Network Security +Services (NSS), which is supplied with the JDK test suite in the OpenJDK +source code repository. It is licensed under Mozilla Public License (MPL), +version 2.0. + +The NSS libraries are supplied in executable form, built from unmodified +NSS source code labeled with the "NSS_3.13.1_RTM" release tag. + +The NSS source code is available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/src + +The NSS libraries are available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/lib + +--- begin of LICENSE --- + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + diff --git a/common/autoconf/autogen.sh b/common/autoconf/autogen.sh index 7e4c3b0ea57..ce56d2719d6 100644 --- a/common/autoconf/autogen.sh +++ b/common/autoconf/autogen.sh @@ -22,5 +22,19 @@ # questions. # -autoconf configure.ac > configure -rm -rf config.status config.log autom4te.cache +script_dir=`dirname $0` +closed_script_dir="$script_dir/../../jdk/make/closed/autoconf" + +# Create a timestamp as seconds since epoch +TIMESTAMP=`date +%s` + +cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | autoconf -W all -I$script_dir - > $script_dir/generated-configure.sh +rm -rf autom4te.cache + +if test -e $closed_script_dir/closed-hook.m4; then + # We have closed sources available; also generate configure script + # with closed hooks compiled in. + cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | \ + sed -e "s|AC_DEFUN_ONCE(\[CLOSED_HOOK\])|m4_include([$closed_script_dir/closed-hook.m4])|" | autoconf -W all -I$script_dir - > $closed_script_dir/generated-configure.sh + rm -rf autom4te.cache +fi diff --git a/common/autoconf/basics.m4 b/common/autoconf/basics.m4 new file mode 100644 index 00000000000..370854d45fc --- /dev/null +++ b/common/autoconf/basics.m4 @@ -0,0 +1,485 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN([ADD_JVM_ARG_IF_OK], +[ + # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) + # If so, then append $1 to $2 + FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + $2="[$]$2 $1" + fi +]) + +AC_DEFUN([WHICHCMD], +[ + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="[$]$1" + car="${tmp%% *}" + tmp="[$]$1 EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + WHICHCMD_SPACESAFE(car) + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + $1="$car ${cdr% *}" + else + $1="$car" + fi +]) + +AC_DEFUN([SPACESAFE], +[ + # Fail with message $2 if var $1 contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "[$]$1" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + $1=`$CYGPATH -s -m -a "[$]$1"` + $1=`$CYGPATH -u "[$]$1"` + else + AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) + fi + fi +]) + +AC_DEFUN([WHICHCMD_SPACESAFE], +[ + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="[$]$1" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "[$]$1"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + $1="$tmp" +]) + +AC_DEFUN([REMOVE_SYMBOLIC_LINKS], +[ + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + AC_PATH_PROG(READLINK, readlink) + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + $1=`$READLINK -f [$]$1` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname [$]$1` + FIL=`basename [$]$1` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + $1=$DIR/$FIL + fi + fi +]) + +AC_DEFUN_ONCE([BASIC_INIT], +[ +# Save the original command line. This is passed to us by the wrapper configure script. +AC_SUBST(CONFIGURE_COMMAND_LINE) +DATE_WHEN_CONFIGURED=`LANG=C date` +AC_SUBST(DATE_WHEN_CONFIGURED) + +# Locate the directory of this script. +SCRIPT="[$]0" +REMOVE_SYMBOLIC_LINKS(SCRIPT) +AUTOCONF_DIR=`dirname [$]0` +]) + +AC_DEFUN_ONCE([BASIC_SETUP_PATHS], +[ +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT_LENGTH=`pwd|wc -m` + if test $SRC_ROOT_LENGTH -gt 100; then + AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported]) + fi +fi +AC_SUBST(SRC_ROOT) +cd "$CURDIR" + +SPACESAFE(SRC_ROOT,[the path to the source root]) +SPACESAFE(CURDIR,[the path to the current directory]) +]) + +AC_DEFUN_ONCE([BASIC_SETUP_SEARCHPATH], +[ +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi +]) + +AC_DEFUN_ONCE([BASIC_SETUP_PATH_SEP], +[ +# For cygwin we need cygpath first, since it is used everywhere. +AC_PATH_PROG(CYGPATH, cygpath) +PATH_SEP=":" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$CYGPATH" = x; then + AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) + fi + PATH_SEP=";" +fi +AC_SUBST(PATH_SEP) +]) + +AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR], +[ + +AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name], + [use this as the name of the configuration, overriding the generated default])], + [ CONF_NAME=${with_conf_name} ]) + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + mkdir -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" +fi + +SPACESAFE(OUTPUT_ROOT,[the path to the output root]) + +AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) +AC_SUBST(CONF_NAME, $CONF_NAME) +AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT) + +# Most of the probed defines are put into config.h +AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in]) +# The spec.gmk file contains all variables for the make system. +AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in]) +# The spec.sh file contains variables for compare{images|-objects}.sh scrips. +AC_CONFIG_FILES([$OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in]) +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in]) + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments +]) + +AC_DEFUN_ONCE([BASIC_SETUP_LOGGING], +[ +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' +AC_SUBST(BUILD_LOG) +AC_SUBST(BUILD_LOG_PREVIOUS) +AC_SUBST(BUILD_LOG_WRAPPER) +]) + + +#%%% Simple tools %%% + +AC_DEFUN([BASIC_CHECK_FIND_DELETE], +[ + # Test if find supports -delete + AC_MSG_CHECKING([if find supports -delete]) + FIND_DELETE="-delete" + + DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + rmdir $DELETEDIR +]) + +AC_DEFUN([CHECK_NONEMPTY], +[ + # Test that variable $1 is not empty. + if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi +]) + +AC_DEFUN_ONCE([BASIC_SETUP_TOOLS], +[ +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. +AC_PROG_AWK +CHECK_NONEMPTY(AWK) +AC_PATH_PROG(CAT, cat) +CHECK_NONEMPTY(CAT) +AC_PATH_PROG(CHMOD, chmod) +CHECK_NONEMPTY(CHMOD) +AC_PATH_PROG(CP, cp) +CHECK_NONEMPTY(CP) +AC_PATH_PROG(CPIO, cpio) +CHECK_NONEMPTY(CPIO) +AC_PATH_PROG(CUT, cut) +CHECK_NONEMPTY(CUT) +AC_PATH_PROG(DATE, date) +CHECK_NONEMPTY(DATE) +AC_PATH_PROG(DF, df) +CHECK_NONEMPTY(DF) +AC_PATH_PROG(DIFF, diff) +CHECK_NONEMPTY(DIFF) +# Warning echo is really, really unportable!!!!! Different +# behaviour in bash and dash and in a lot of other shells! +# Use printf for serious work! +AC_PATH_PROG(ECHO, echo) +CHECK_NONEMPTY(ECHO) +AC_PROG_EGREP +CHECK_NONEMPTY(EGREP) +AC_PROG_FGREP +CHECK_NONEMPTY(FGREP) + +AC_PATH_PROG(FIND, find) +CHECK_NONEMPTY(FIND) +BASIC_CHECK_FIND_DELETE +AC_SUBST(FIND_DELETE) + +AC_PROG_GREP +CHECK_NONEMPTY(GREP) +AC_PATH_PROG(HEAD, head) +CHECK_NONEMPTY(HEAD) +AC_PATH_PROG(LN, ln) +CHECK_NONEMPTY(LN) +AC_PATH_PROG(LS, ls) +CHECK_NONEMPTY(LS) +AC_PATH_PROGS(MAKE, [gmake make]) +CHECK_NONEMPTY(MAKE) +MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'` +if test "x$MAKE_VERSION" = x; then + AC_MSG_ERROR([You must use GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure.]) +fi +AC_PATH_PROG(MKDIR, mkdir) +CHECK_NONEMPTY(MKDIR) +AC_PATH_PROG(MV, mv) +CHECK_NONEMPTY(MV) +AC_PATH_PROGS(NAWK, [nawk gawk awk]) +CHECK_NONEMPTY(NAWK) +AC_PATH_PROG(PRINTF, printf) +CHECK_NONEMPTY(PRINTF) +AC_PATH_PROG(THEPWDCMD, pwd) +AC_PATH_PROG(RM, rm) +CHECK_NONEMPTY(RM) +RM="$RM -f" +AC_PROG_SED +CHECK_NONEMPTY(SED) +AC_PATH_PROG(SH, sh) +CHECK_NONEMPTY(SH) +AC_PATH_PROG(SORT, sort) +CHECK_NONEMPTY(SORT) +AC_PATH_PROG(TAR, tar) +CHECK_NONEMPTY(TAR) +AC_PATH_PROG(TAIL, tail) +CHECK_NONEMPTY(TAIL) +AC_PATH_PROG(TEE, tee) +CHECK_NONEMPTY(TEE) +AC_PATH_PROG(TR, tr) +CHECK_NONEMPTY(TR) +AC_PATH_PROG(TOUCH, touch) +CHECK_NONEMPTY(TOUCH) +AC_PATH_PROG(WC, wc) +CHECK_NONEMPTY(WC) +AC_PATH_PROG(XARGS, xargs) +CHECK_NONEMPTY(XARGS) +AC_PATH_PROG(ZIP, zip) +CHECK_NONEMPTY(ZIP) +AC_PATH_PROG(UNZIP, unzip) +CHECK_NONEMPTY(UNZIP) +AC_PATH_PROG(LDD, ldd) +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +AC_PATH_PROG(OTOOL, otool) +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +AC_PATH_PROG(READELF, readelf) +AC_PATH_PROG(EXPR, expr) +CHECK_NONEMPTY(EXPR) +AC_PATH_PROG(FILE, file) +CHECK_NONEMPTY(FILE) +AC_PATH_PROG(HG, hg) +]) + + + +AC_DEFUN_ONCE([BASIC_COMPILE_UNCYGDRIVE], +[ +# When using cygwin, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called uncygdrive.exe. +UNCYGDRIVE= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + AC_MSG_CHECKING([if uncygdrive can be created]) + UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` + rm -f $OUTPUT_ROOT/uncygdrive* + UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` + cd $OUTPUT_ROOT + $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/uncygdrive1.log + AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) + fi + AC_MSG_RESULT([$UNCYGDRIVE]) + AC_MSG_CHECKING([if uncygdrive.exe works]) + cd $OUTPUT_ROOT + $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/uncygdrive2.log + AC_MSG_ERROR([Uncygdrive did not work!]) + fi + AC_MSG_RESULT([yes]) + rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj +fi + +AC_SUBST(UNCYGDRIVE) +]) + + +# Check if build directory is on local disk. +# Argument 1: directory to test +# Argument 2: what to do if it is on local disk +# Argument 3: what to do otherwise (remote disk or failure) +AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK], +[ + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + if $DF -l $1 > /dev/null 2>&1; then + $2 + else + $3 + fi +]) + +AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], +[ + +AC_MSG_CHECKING([if build directory is on local disk]) +BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUT_ROOT, + [OUTPUT_DIR_IS_LOCAL="yes"], + [OUTPUT_DIR_IS_LOCAL="no"]) +AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL) + +# Check if the user has any old-style ALT_ variables set. +FOUND_ALT_VARIABLES=`env | grep ^ALT_` + +# Before generating output files, test if they exist. If they do, this is a reconfigure. +# Since we can't properly handle the dependencies for this, warn the user about the situation +if test -e $OUTPUT_ROOT/spec.gmk; then + IS_RECONFIGURE=yes +else + IS_RECONFIGURE=no +fi + +if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then + HIDE_PERFORMANCE_HINTS=yes +else + HIDE_PERFORMANCE_HINTS=no + # Hide it the next time around... + $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 +fi + +]) diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 new file mode 100644 index 00000000000..f8204f9c2d2 --- /dev/null +++ b/common/autoconf/boot-jdk.m4 @@ -0,0 +1,295 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Fixes paths on windows to be mixed mode short. +AC_DEFUN([BOOTJDK_WIN_FIX_PATH], +[ + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + AC_PATH_PROG(CYGPATH, cygpath) + tmp="[$]$1" + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + $1="$tmp" + fi +]) + +AC_DEFUN([BOOTJDK_MISSING_ERROR], +[ + AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk]) + AC_MSG_ERROR([Cannot continue]) +]) + +############################################################################### +# +# We need a Boot JDK to bootstrap the build. +# + +AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], +[ +BOOT_JDK_FOUND=no +AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk], + [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])]) + +if test "x$with_boot_jdk" != x; then + BOOT_JDK=$with_boot_jdk + BOOT_JDK_FOUND=yes +fi +if test "x$BOOT_JDK_FOUND" = xno; then + BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + if test "x$JAVA_HOME" != x; then + if test ! -d "$JAVA_HOME"; then + AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!]) + BOOTJDK_MISSING_ERROR + fi + # Aha, the user has set a JAVA_HOME + # let us use that as the Boot JDK. + BOOT_JDK="$JAVA_HOME" + BOOT_JDK_FOUND=yes + # To be on the safe side, lets check that it is a JDK. + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" + BOOT_JDK_FOUND=yes + else + AC_MSG_NOTICE([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=[$]JAVA_HOME]) + BOOTJDK_MISSING_ERROR + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + AC_PATH_PROG(JAVAC_CHECK, javac) + AC_PATH_PROG(JAVA_CHECK, java) + BINARY="$JAVAC_CHECK" + if test "x$JAVAC_CHECK" = x; then + BINARY="$JAVA_CHECK" + fi + if test "x$BINARY" != x; then + # So there is a java(c) binary, it might be part of a JDK. + # Lets find the JDK/JRE directory by following symbolic links. + # Linux/GNU systems often have links from /usr/bin/java to + # /etc/alternatives/java to the real JDK binary. + WHICHCMD_SPACESAFE(BINARY,[path to javac]) + REMOVE_SYMBOLIC_LINKS(BINARY) + BOOT_JDK=`dirname $BINARY` + BOOT_JDK=`cd $BOOT_JDK/..; pwd` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Try the MacOSX way. + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + AC_PATH_PROG(JAVA_CHECK, java) + if test "x$JAVA_CHECK" != x; then + # There is a java in the path. But apparently we have not found a javac + # in the path, since that would have been tested earlier. + if test "x$OPENJDK_TARGET_OS" = xwindows; then + # Now if this is a windows platform. The default installation of a JDK + # actually puts the JRE in the path and keeps the JDK out of the path! + # Go look in the default installation location. + BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=yes + fi + fi + if test "x$BOOT_JDK_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) + BOOTJDK_MISSING_ERROR + fi + else + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Could not find a JDK. $HELP_MSG]) + BOOTJDK_MISSING_ERROR + fi +fi + +BOOTJDK_WIN_FIX_PATH(BOOT_JDK) + +# Now see if we can find the rt.jar, or its nearest equivalent. +BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" +SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)]) + +BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" +SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)]) + +if test ! -f $BOOT_RTJAR; then + # On MacOSX it is called classes.jar + BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar + if test ! -f $BOOT_RTJAR; then + AC_MSG_NOTICE([Cannot find the rt.jar or its equivalent!]) + AC_MSG_NOTICE([This typically means that configure failed to automatically find a suitable Boot JDK]) + BOOTJDK_MISSING_ERROR + fi + # Remove the .. + BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" + # The tools.jar is part of classes.jar + BOOT_TOOLSJAR="$BOOT_RTJAR" +fi + +AC_SUBST(BOOT_JDK) +AC_SUBST(BOOT_RTJAR) +AC_SUBST(BOOT_TOOLSJAR) +AC_MSG_CHECKING([for Boot JDK]) +AC_MSG_RESULT([$BOOT_JDK]) +AC_MSG_CHECKING([for Boot rt.jar]) +AC_MSG_RESULT([$BOOT_RTJAR]) +AC_MSG_CHECKING([for Boot tools.jar]) +AC_MSG_RESULT([$BOOT_TOOLSJAR]) + +# Use the java tool from the Boot JDK. +AC_MSG_CHECKING([for java in Boot JDK]) +JAVA=$BOOT_JDK/bin/java +if test ! -x $JAVA; then + AC_MSG_NOTICE([Could not find a working java]) + BOOTJDK_MISSING_ERROR +fi +BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` +AC_MSG_RESULT([yes $BOOT_JDK_VERSION]) +AC_SUBST(JAVA) + +# Extra M4 quote needed to protect [] in grep expression. +[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] +if test "x$FOUND_VERSION_78" = x; then + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Your boot-jdk must be version 7 or 8. $HELP_MSG]) + BOOTJDK_MISSING_ERROR +fi + +# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. +BOOT_JDK_SOURCETARGET="-source 7 -target 7" +AC_SUBST(BOOT_JDK_SOURCETARGET) + +# Use the javac tool from the Boot JDK. +AC_MSG_CHECKING([for javac in Boot JDK]) +JAVAC=$BOOT_JDK/bin/javac +if test ! -x $JAVAC; then + AC_MSG_ERROR([Could not find a working javac]) +fi +AC_MSG_RESULT(yes) +AC_SUBST(JAVAC) +AC_SUBST(JAVAC_FLAGS) + +# Use the javah tool from the Boot JDK. +AC_MSG_CHECKING([for javah in Boot JDK]) +JAVAH=$BOOT_JDK/bin/javah +if test ! -x $JAVAH; then + AC_MSG_NOTICE([Could not find a working javah]) + BOOTJDK_MISSING_ERROR +fi +AC_MSG_RESULT(yes) +AC_SUBST(JAVAH) + +# Use the jar tool from the Boot JDK. +AC_MSG_CHECKING([for jar in Boot JDK]) +JAR=$BOOT_JDK/bin/jar +if test ! -x $JAR; then + AC_MSG_NOTICE([Could not find a working jar]) + BOOTJDK_MISSING_ERROR +fi +AC_SUBST(JAR) +AC_MSG_RESULT(yes) + +# Use the rmic tool from the Boot JDK. +AC_MSG_CHECKING([for rmic in Boot JDK]) +RMIC=$BOOT_JDK/bin/rmic +if test ! -x $RMIC; then + AC_MSG_NOTICE([Could not find a working rmic]) + BOOTJDK_MISSING_ERROR +fi +AC_SUBST(RMIC) +AC_MSG_RESULT(yes) + +# Use the native2ascii tool from the Boot JDK. +AC_MSG_CHECKING([for native2ascii in Boot JDK]) +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + AC_MSG_NOTICE([Could not find a working native2ascii]) + BOOTJDK_MISSING_ERROR +fi +AC_MSG_RESULT(yes) +AC_SUBST(NATIVE2ASCII) +]) + +AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], +[ +############################################################################## +# +# Specify options for anything that is run with the Boot JDK. +# +AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], + [specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values, + e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])]) + +if test "x$with_boot_jdk_jvmargs" = x; then + # Not all JVM:s accept the same arguments on the command line. + # OpenJDK specific increase in thread stack for JDK build, + # well more specifically, when running javac. + if test "x$BUILD_NUM_BITS" = x32; then + STACK_SIZE=768 + else + # Running Javac on a JVM on a 64-bit machine, the stack takes more space + # since 64-bit pointers are pushed on the stach. Apparently, we need + # to increase the stack space when javacing the JDK.... + STACK_SIZE=1536 + fi + + # Minimum amount of heap memory. + ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + # Why does macosx need more heap? Its the huge JDK batch. + ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) + else + ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA]) + fi + # When is adding -client something that speeds up the JVM? + # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA]) + # Disable special log output when a debug build is used as Boot JDK... + ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) +fi + +AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs) +]) diff --git a/common/autoconf/build-aux/autoconf-config.guess b/common/autoconf/build-aux/autoconf-config.guess new file mode 100644 index 00000000000..e69905d5201 --- /dev/null +++ b/common/autoconf/build-aux/autoconf-config.guess @@ -0,0 +1,1531 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + echo "int main(){}" > $dummy.c + if test "`$CC_FOR_BUILD -o $dummy $dummy.c; file $dummy | grep -c x86_64`" = 1 ; then + UNAME_PROCESSOR=x86_64 + fi + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/common/autoconf/build-aux/config.guess b/common/autoconf/build-aux/config.guess index e69905d5201..389eedfc1d1 100644 --- a/common/autoconf/build-aux/config.guess +++ b/common/autoconf/build-aux/config.guess @@ -1,1531 +1,38 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. - -timestamp='2008-01-23' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. +#!/bin/sh # -# This program 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 for more details. +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. +# 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. # -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# 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). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. -me=`echo "$0" | sed -e 's,.*/,,'` +# This is a wrapper for the config.guess from autoconf. The latter does not properly +# detect amd64 systems, since that require isainfo instead of uname. Instead of patching +# the autoconf system (which might easily get lost in a future update), we wrap it and +# fix the broken property, if needed. -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 +DIR=`dirname $0` +OUT=`. $DIR/autoconf-config.guess` +echo $OUT | grep i386-pc-solaris > /dev/null 2> /dev/null +if test $? = 0; then + # isainfo -n returns either i386 or amd64 on Intel systems + REAL_CPU=`isainfo -n` + OUT=$REAL_CPU`echo $OUT | sed -e 's/[^-]*//'` fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - echo "int main(){}" > $dummy.c - if test "`$CC_FOR_BUILD -o $dummy $dummy.c; file $dummy | grep -c x86_64`" = 1 ; then - UNAME_PROCESSOR=x86_64 - fi - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: +echo $OUT diff --git a/common/autoconf/build-performance.m4 b/common/autoconf/build-performance.m4 new file mode 100644 index 00000000000..964f890b792 --- /dev/null +++ b/common/autoconf/build-performance.m4 @@ -0,0 +1,378 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN([BPERF_CHECK_CORES], +[ + AC_MSG_CHECKING([for number of cores]) + NUM_CORES=1 + FOUND_CORES=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + NUM_CORES=`cat /proc/cpuinfo | grep -c processor` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/psrinfo; then + # Looks like a Solaris system + NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` + FOUND_CORES=yes + fi + + if test "x$build_os" = xwindows; then + NUM_CORES=4 + fi + + # For c/c++ code we run twice as many concurrent build + # jobs than we have cores, otherwise we will stall on io. + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` + + if test "x$FOUND_CORES" = xyes; then + AC_MSG_RESULT([$NUM_CORES]) + else + AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) + fi + +]) + +AC_DEFUN([BPERF_CHECK_MEMORY_SIZE], +[ + AC_MSG_CHECKING([for memory size]) + # Default to 1024MB + MEMORY_SIZE=1024 + FOUND_MEM=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/prtconf; then + # Looks like a Solaris system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + FOUND_MEM=yes + fi + + if test "x$build_os" = xwindows; then + MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` + FOUND_MEM=yes + fi + + if test "x$FOUND_MEM" = xyes; then + AC_MSG_RESULT([$MEMORY_SIZE MB]) + else + AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!]) + fi +]) + +AC_DEFUN_ONCE([BPERF_SETUP_BUILD_CORES], +[ +# How many cores do we have on this build system? +AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores], + [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])]) +if test "x$with_num_cores" = x; then + # The number of cores were not specified, try to probe them. + BPERF_CHECK_CORES +else + NUM_CORES=$with_num_cores + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` +fi +AC_SUBST(NUM_CORES) +AC_SUBST(CONCURRENT_BUILD_JOBS) +]) + +AC_DEFUN_ONCE([BPERF_SETUP_BUILD_MEMORY], +[ +# How much memory do we have on this build system? +AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size], + [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])]) +if test "x$with_memory_size" = x; then + # The memory size was not specified, try to probe it. + BPERF_CHECK_MEMORY_SIZE +else + MEMORY_SIZE=$with_memory_size +fi +AC_SUBST(MEMORY_SIZE) +]) + +AC_DEFUN([BPERF_SETUP_CCACHE], +[ + AC_ARG_ENABLE([ccache], + [AS_HELP_STRING([--disable-ccache], + [use ccache to speed up recompilations @<:@enabled@:>@])], + [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) + if test "x$ENABLE_CCACHE" = xyes; then + AC_PATH_PROG(CCACHE, ccache) + else + AC_MSG_CHECKING([for ccache]) + AC_MSG_RESULT([explicitly disabled]) + CCACHE= + fi + AC_SUBST(CCACHE) + + AC_ARG_WITH([ccache-dir], + [AS_HELP_STRING([--with-ccache-dir], + [where to store ccache files @<:@~/.ccache@:>@])]) + + if test "x$with_ccache_dir" != x; then + # When using a non home ccache directory, assume the use is to share ccache files + # with other users. Thus change the umask. + SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + fi + CCACHE_FOUND="" + if test "x$CCACHE" != x; then + BPERF_SETUP_CCACHE_USAGE + fi +]) + +AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], +[ + if test "x$CCACHE" != x; then + CCACHE_FOUND="true" + # Only use ccache if it is 3.1.4 or later, which supports + # precompiled headers. + AC_MSG_CHECKING([if ccache supports precompiled headers]) + HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` + if test "x$HAS_GOOD_CCACHE" = x; then + AC_MSG_RESULT([no, disabling ccache]) + CCACHE= + else + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) + PUSHED_FLAGS="$CXXFLAGS" + CXXFLAGS="-fpch-preprocess $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) + CXXFLAGS="$PUSHED_FLAGS" + if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) + CCACHE= + fi + fi + fi + + if test "x$CCACHE" != x; then + CCACHE_SLOPPINESS=time_macros + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" + CCACHE_FLAGS=-fpch-preprocess + + if test "x$SET_CCACHE_DIR" != x; then + mkdir -p $CCACHE_DIR > /dev/null 2>&1 + chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 + fi + fi +]) + +AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS], +[ + +############################################################################### +# +# Can the C/C++ compiler use precompiled headers? +# +AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], + [use precompiled headers when compiling C++ @<:@enabled@:>@])], + [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) + +USE_PRECOMPILED_HEADER=1 +if test "x$ENABLE_PRECOMPH" = xno; then + USE_PRECOMPILED_HEADER=0 +fi + +if test "x$ENABLE_PRECOMPH" = xyes; then + # Check that the compiler actually supports precomp headers. + if test "x$GCC" = xyes; then + AC_MSG_CHECKING([that precompiled headers work]) + echo "int alfa();" > conftest.h + $CXX -x c++-header conftest.h -o conftest.hpp.gch + if test ! -f conftest.hpp.gch; then + echo Precompiled header is not working! + USE_PRECOMPILED_HEADER=0 + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + rm -f conftest.h + fi +fi + +AC_SUBST(USE_PRECOMPILED_HEADER) +]) + + +AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC], +[ +AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java], + [use this java binary for running the javac background server and other long running java tasks in the build process, + e.g. ---with-server-java="/opt/jrockit/bin/java -server"])]) + +if test "x$with_server_java" != x; then + SERVER_JAVA="$with_server_java" + FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" = x; then + AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA]) + fi +else + SERVER_JAVA="" + # Hotspot specific options. + ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA]) + ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA]) + # JRockit specific options. + ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA]) + SERVER_JAVA="$JAVA $SERVER_JAVA" +fi +AC_SUBST(SERVER_JAVA) + +AC_MSG_CHECKING([whether to use shared server for javac]) +AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server], + [enable the shared javac server during the build process @<:@disabled@:>@])], + [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_SERVER]) +if test "x$ENABLE_JAVAC_SERVER" = xyes; then + JAVAC_USE_REMOTE=true + JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" +else + JAVAC_USE_REMOTE=false + JAVAC_SERVERS= +fi +AC_SUBST(JAVAC_USE_REMOTE) +AC_SUBST(JAVAC_SERVERS) + +AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores], + [use at most this number of concurrent threads on the javac server @<:@probed@:>@])]) +if test "x$with_javac_server_cores" != x; then + JAVAC_SERVER_CORES="$with_javac_server_cores" +else + if test "$NUM_CORES" -gt 16; then + # We set this arbitrary limit because we want to limit the heap + # size of the javac server. + # In the future we will make the javac compilers in the server + # share more and more state, thus enabling us to use more and + # more concurrent threads in the server. + JAVAC_SERVER_CORES="16" + else + JAVAC_SERVER_CORES="$NUM_CORES" + fi + + if test "$MEMORY_SIZE" -gt "17000"; then + MAX_HEAP_MEM=10000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "10000"; then + MAX_HEAP_MEM=6000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "5000"; then + MAX_HEAP_MEM=3000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "3800"; then + MAX_HEAP_MEM=2500 + ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "1900"; then + MAX_HEAP_MEM=1200 + ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "1000"; then + MAX_HEAP_MEM=900 + ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) + else + MAX_HEAP_MEM=512 + ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) + fi + + MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` + if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then + AC_MSG_CHECKING([if number of server cores must be reduced]) + JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" + AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB]) + fi +fi +AC_SUBST(JAVAC_SERVER_CORES) + +AC_MSG_CHECKING([whether to track dependencies between Java packages]) +AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps], + [enable the dependency tracking between Java packages @<:@disabled@:>@])], + [ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_DEPS]) +if test "x$ENABLE_JAVAC_DEPS" = xyes; then + JAVAC_USE_DEPS=true +else + JAVAC_USE_DEPS=false +fi +AC_SUBST(JAVAC_USE_DEPS) + +AC_MSG_CHECKING([whether to use multiple cores for javac compilation]) +AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core], + [compile Java packages concurrently @<:@disabled@:>@])], + [ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE]) +if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then + JAVAC_USE_MODE=MULTI_CORE_CONCURRENT +else + JAVAC_USE_MODE=SINGLE_THREADED_BATCH + if test "x$ENABLE_JAVAC_DEPS" = xyes; then + AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.]) + AC_MSG_WARN([Disabling dependency tracking for you now.]) + JAVAC_USE_DEPS=false + fi + if test "x$ENABLE_JAVAC_SERVER" = xyes; then + AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.]) + AC_MSG_WARN([Disabling javac server for you now.]) + JAVAC_USE_REMOTE=false + fi +fi +AC_SUBST(JAVAC_USE_MODE) + +AC_MSG_CHECKING([whether to use sjavac]) +AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac], + [use sjavac to do fast incremental compiles @<:@disabled@:>@])], + [ENABLE_SJAVAC="${enableval}"], [ENABLE_SJAVAC='no']) +AC_MSG_RESULT([$ENABLE_SJAVAC]) +AC_SUBST(ENABLE_SJAVAC) + +]) diff --git a/common/autoconf/builddeps.conf.example b/common/autoconf/builddeps.conf.example index f285ffb4a29..d97033611f7 100644 --- a/common/autoconf/builddeps.conf.example +++ b/common/autoconf/builddeps.conf.example @@ -31,11 +31,11 @@ # Translate a configuration triplet/quadruplet into something # known by this configuration file. -# If no rewrite was found, then rewritten_host=${host} +# If no rewrite was found, then rewritten_target=${OPENJDK_TARGET_SYSTEM} REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10 -# The needed cups builddeps are host independent header files. +# The needed cups builddeps are platform independent header files. # I.e. they need not be part of the devkit. builddep_cups=lib/cups_1_3_9.zip builddep_cups_CFLAGS=-I${depdir} @@ -44,10 +44,10 @@ builddep_cups_CFLAGS=-I${depdir} # for the build platform. builddep_devkit=sdk/sdk-${rewritten_build}-20110921.tar.gz -# The freetype dependency is partyl host dependent. +# The freetype dependency is partly platform dependent. # It is stored inside the sys-root. builddep_freetype2=sdk/sdk-${rewritten_build}-20110921.tar.gz -builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_host}/sys-root/usr/include/freetype2 +builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_target}/sys-root/usr/include/freetype2 builddep_freetype2_LIBS=-lfreetype # There are many other build dependencies, but they are implicitly diff --git a/common/autoconf/builddeps.m4 b/common/autoconf/builddeps.m4 index 55e132e1c8b..31797070da1 100644 --- a/common/autoconf/builddeps.m4 +++ b/common/autoconf/builddeps.m4 @@ -23,7 +23,7 @@ # questions. # -AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS], +AC_DEFUN_ONCE([BDEPS_SCAN_FOR_BUILDDEPS], [ define(LIST_OF_BUILD_DEPENDENCIES,) if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then @@ -34,7 +34,7 @@ AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS], . $builddepsfile AC_MSG_RESULT([loaded!]) else - AC_ERROR([The given builddeps conf file $with_builddeps_conf could not be loaded!]) + AC_MSG_ERROR([The given builddeps conf file $with_builddeps_conf could not be loaded!]) fi else AC_MSG_CHECKING([for builddeps.conf files in sources...]) @@ -47,30 +47,30 @@ AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS], . $builddepsfile AC_MSG_RESULT([found at least one!]) else - AC_ERROR([Could not find any builddeps.conf at all!]) + AC_MSG_ERROR([Could not find any builddeps.conf at all!]) fi fi - # Create build and host names that use _ instead of "-" and ".". + # Create build and target names that use _ instead of "-" and ".". # This is necessary to use them in variable names. - build_var=`echo ${build} | tr '-' '_' | tr '.' '_'` - host_var=`echo ${host} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and host + build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target eval rewritten_build=\${REWRITE_${build_var}} if test "x$rewritten_build" = x; then - rewritten_build=${build} + rewritten_build=${OPENJDK_BUILD_SYSTEM} echo Build stays the same $rewritten_build else echo Rewriting build for builddeps into $rewritten_build fi - eval rewritten_host=\${REWRITE_${host_var}} - if test "x$rewritten_host" = x; then - rewritten_host=${host} - echo Host stays the same $rewritten_host + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_SYSTEM} + echo Target stays the same $rewritten_target else - echo Rewriting host for builddeps into $rewritten_host + echo Rewriting target for builddeps into $rewritten_target fi rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` fi AC_CHECK_PROGS(BDEPS_UNZIP, [7z unzip]) if test "x$BDEPS_UNZIP" = x7z; then @@ -117,7 +117,7 @@ AC_DEFUN([BDEPS_FTPGET], ) | ftp -in $FTPSERVER fi if test "x$VALID_TOOL" != xyes; then - AC_ERROR([I do not know how to use the tool: $BDEPS_FTP]) + AC_MSG_ERROR([I do not know how to use the tool: $BDEPS_FTP]) fi ]) @@ -127,11 +127,11 @@ AC_DEFUN([BDEPS_CHECK_MODULE], if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then # Source the builddeps file again, to make sure it uses the latest variables! . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} + # Look for a target and build machine specific resource! + eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_$2_HOST_${rewritten_host_var}} + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_$2_TARGET_${rewritten_target_var}} fi if test "x$resource" = x; then # Ok, lets instead look for a build specific resource @@ -159,7 +159,7 @@ AC_DEFUN([BDEPS_CHECK_MODULE], thecflags=${builddep_$2_CFLAGS} thelibs=${builddep_$2_LIBS} if test "x$depdir" = x; then - AC_ERROR([Could not download build dependency $2]) + AC_MSG_ERROR([Could not download build dependency $2]) fi $1=$depdir if test "x$theroot" != x; then @@ -198,17 +198,17 @@ AC_DEFUN([BDEPS_FETCH], mkdir -p $installdir fi if test ! -d $installdir; then - AC_ERROR([Could not create directory $installdir]) + AC_MSG_ERROR([Could not create directory $installdir]) fi tmpfile=`mktemp $installdir/$1.XXXXXXXXX` touch $tmpfile if test ! -f $tmpfile; then - AC_ERROR([Could not create files in directory $installdir]) + AC_MSG_ERROR([Could not create files in directory $installdir]) fi BDEPS_FTPGET([$3/$2] , [$tmpfile]) mv $tmpfile $installdir/$filename if test ! -s $installdir/$filename; then - AC_ERROR([Could not download $3/$2]) + AC_MSG_ERROR([Could not download $3/$2]) fi case "$extension" in zip) echo "Unzipping $installdir/$filename..." @@ -220,7 +220,7 @@ AC_DEFUN([BDEPS_FETCH], tgz) echo "Untaring $installdir/$filename..." (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) ;; - *) AC_ERROR([Cannot handle build depency archive with extension $extension]) + *) AC_MSG_ERROR([Cannot handle build depency archive with extension $extension]) ;; esac fi @@ -229,3 +229,32 @@ AC_DEFUN([BDEPS_FETCH], fi ]) +AC_DEFUN_ONCE([BDEPS_CONFIGURE_BUILDDEPS], +[ +AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf], + [use this configuration file for the builddeps])]) + +AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], + [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) + +AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], + [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], + [], + [with_builddeps_dir=/localhome/builddeps]) + +AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], + [chgrp the downloaded build dependencies to this group])]) + +AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], + [list all build dependencies known to the configure script])], + [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) + +if test "x$LIST_BUILDDEPS" = xyes; then + echo + echo List of build dependencies known to the configure script, + echo that can be used in builddeps.conf files: + cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODUL[E]\( | cut -f 2 -d ',' | tr -d ' ' | sort + echo + exit 1 +fi +]) diff --git a/common/autoconf/configure b/common/autoconf/configure index 13630cca07d..85861c9ce1b 100644 --- a/common/autoconf/configure +++ b/common/autoconf/configure @@ -1,16395 +1,121 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for openjdk version-0.1. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## +#!/bin/sh -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: build-infra-dev@openjdk.java.net about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='openjdk' -PACKAGE_TARNAME='openjdk' -PACKAGE_VERSION='version-0.1' -PACKAGE_STRING='openjdk version-0.1' -PACKAGE_BUGREPORT='build-infra-dev@openjdk.java.net' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -TEST_IN_BUILD -LIBCXX -LDFLAGS_JDKEXE_SUFFIX -LDFLAGS_JDKLIB_SUFFIX -LDFLAGS_JDKEXE -LDFLAGS_JDKLIB -CXXFLAGS_JDKEXE -CXXFLAGS_JDKLIB -CFLAGS_JDKEXE -CFLAGS_JDKLIB -PACKAGE_PATH -IMAGES_MAKE_ARGS -IMAGES_OUTPUTDIR -JDK_MAKE_ARGS -JDK_OUTPUTDIR -HOTSPOT_MAKE_ARGS -HOTSPOT_DIST -HOTSPOT_OUTPUTDIR -JAXWS_MAKE_ARGS -JAXWS_DIST -JAXWS_OUTPUTDIR -JAXP_MAKE_ARGS -JAXP_DIST -JAXP_OUTPUTDIR -CORBA_MAKE_ARGS -CORBA_DIST -CORBA_OUTPUTDIR -LANGTOOLS_MAKE_ARGS -LANGTOOLS_DIST -LANGTOOLS_OUTPUTDIR -CXX_O_FLAG_NONE -CXX_O_FLAG_NORM -CXX_O_FLAG_HI -C_O_FLAG_NONE -C_O_FLAG_NORM -C_O_FLAG_HI -DISABLE_NIMBUS -GENERATE_DOCS -ENABLE_DOCS -LIBM -USE_EXTERNAL_LIBZ -USE_EXTERNAL_LIBGIF -USE_EXTERNAL_LIBJPEG -PULSE_LIBS -PULSE_CFLAGS -LIBPULSE_LIBS -LIBPULSE_CFLAGS -ALSA_LIBS -ALSA_CFLAGS -FREETYPE2_LIB_PATH -USING_SYSTEM_FT_LIB -FREETYPE2_LIBS -FREETYPE2_CFLAGS -CUPS_LIBS -CUPS_CFLAGS -OPENWIN_HOME -X_EXTRA_LIBS -X_LIBS -X_PRE_LIBS -X_CFLAGS -XMKMF -JAVAC_USE_MODE -JAVAC_USE_DEPS -JAVAC_SERVER_CORES -JAVAC_SERVERS -JAVAC_USE_REMOTE -SERVER_JAVA -BOOT_JDK_JVMARGS -OVERRIDE_SRC_ROOT -ADD_SRC_ROOT -RMIC -JAR -JAVAH -JAVAC_FLAGS -JAVAC -BOOT_JDK_SOURCETARGET -JAVA -BOOT_TOOLSJAR -BOOT_RTJAR -BOOT_JDK -JAVA_CHECK -JAVAC_CHECK -ENDIAN -SET_SHARED_LIBRARY_ORIGIN -SET_SHARED_LIBRARY_MAPFILE -SET_SHARED_LIBRARY_NAME -SHARED_LIBRARY_FLAGS -EXE_SUFFIX -STATIC_LIBRARY_SUFFIX -SHARED_LIBRARY_SUFFIX -LIBRARY_PREFIX -STATIC_LIBRARY -SHARED_LIBRARY -OBJ_SUFFIX -USE_PRECOMPILED_HEADER -ARCH_DATA_MODEL -LP64 -BUILD_LOG_WRAPPER -BUILD_LOG -CCACHE -UNCYGDRIVE -MCS -STRIP -NM -ASFLAGS -AS -CXXCPP -CPP -COMPILER_TYPE -RC_FLAGS -DUMPBIN -WINAR -RC -MT -WINLD -ARFLAGS -AR -LDEXECXX -LDCXX -LDEXE -LD -ac_ct_OBJC -OBJCFLAGS -OBJC -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -HOSTCXX -HOSTCC -HOST_CXX -HOST_CC -DEFINE_CROSS_COMPILE_ARCH -AR_OUT_OPTION -LD_OUT_OPTION -EXE_OUT_OPTION -CC_OUT_OPTION -SYS_ROOT -BDEPS_FTP -BDEPS_UNZIP -PKG_CONFIG -JDK_TOPDIR -HOTSPOT_TOPDIR -JAXWS_TOPDIR -JAXP_TOPDIR -CORBA_TOPDIR -LANGTOOLS_TOPDIR -OUTPUT_ROOT -SPEC -MSVCR100DLL -CHECK_FOR_VCINSTALLDIR -SETUPDEVENV -COOKED_BUILD_NUMBER -FULL_VERSION -RELEASE -JDK_VERSION -RUNTIME_NAME -COPYRIGHT_YEAR -COMPANY_NAME -JDK_RC_PLATFORM_NAME -PRODUCT_SUFFIX -PRODUCT_NAME -LAUNCHER_NAME -MILESTONE -JDK_BUILD_NUMBER -JDK_UPDATE_VERSION -JDK_MICRO_VERSION -JDK_MINOR_VERSION -JDK_MAJOR_VERSION -BUILD_VARIANT_RELEASE -DEBUG_CLASSFILES -FASTDEBUG -VARIANT -DEBUG_LEVEL -JVM_VARIANT_ZEROSHARK -JVM_VARIANT_ZERO -JVM_VARIANT_KERNEL -JVM_VARIANT_CLIENT -JVM_VARIANT_SERVER -JVM_VARIANTS -BUILD_HEADLESS_ONLY -BUILD_HEADLESS -SUPPORT_HEADFUL -SUPPORT_HEADLESS -JDK_VARIANT -MINIMIZE_RAM_USAGE -JAVASE_EMBEDDED -JIGSAW -SET_OPENJDK -PATH_SEP -CYGPATH -SRC_ROOT -MEMORY_SIZE -CONCURRENT_BUILD_JOBS -NUM_CORES -DATE_WHEN_CONFIGURED -LEGACY_BUILD_CPU3 -LEGACY_BUILD_CPU2 -LEGACY_BUILD_CPU1 -BUILD_CPU_ENDIAN -BUILD_CPU_BITS -BUILD_CPU_ARCH -BUILD_CPU -LEGACY_BUILD_OS_API -BUILD_OS_API -BUILD_OS_FAMILY -BUILD_OS -LEGACY_HOST_CPU3 -LEGACY_HOST_CPU2 -LEGACY_HOST_CPU1 -HOST_CPU_ENDIAN -HOST_CPU_BITS -HOST_CPU_ARCH -HOST_CPU -LEGACY_HOST_OS_API -HOST_OS_API -HOST_OS_FAMILY -HOST_OS -BUILD -HOST -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -FILE -EXPR -READELF -OTOOL -LDD -UNZIP -ZIP -XARGS -WC -TOUCH -TR -TEE -TAIL -TAR -SORT -SH -SED -RM -THEPWDCMD -PRINTF -NAWK -MV -MKDIR -MAKE -LS -LN -HEAD -FIND_DELETE -FIND -FGREP -EGREP -GREP -ECHO -DIFF -DF -DATE -CUT -CPIO -CP -CHMOD -CAT -AWK -READLINK -CONFIGURE_COMMAND_LINE -PKGHANDLER -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -with_data_model -with_num_cores -with_memory_size -enable_openjdk -enable_jigsaw -with_jdk_variant -enable_headful -with_jvm_variants -enable_debug -with_debug_level -with_msvcr100dll -with_builddeps_conf -with_builddeps_server -with_builddeps_dir -with_builddeps_group -enable_list_builddeps -with_sys_root -enable_ccache -with_ccache_dir -enable_precompiled_headers -with_boot_jdk -with_add_source_root -with_override_source_root -with_adds_and_overrides -with_override_langtools -with_override_corba -with_override_jaxp -with_override_jaxws -with_override_hotspot -with_override_jdk -with_boot_jdk_jvmargs -with_server_java -enable_javac_server -with_javac_server_cores -enable_javac_deps -enable_javac_multi_core -enable_macosx_runtime_support -with_x -with_cups -with_cups_include -with_cups_lib -with_freetype -with_alsa -with_alsa_include -with_alsa_lib -with_pulse -with_pulse_include -with_pulse_lib -enable_docs -enable_nimbus -enable_static_link_stdc__ -enable_hotspot_test_in_build -' - ac_precious_vars='build_alias -host_alias -target_alias -PKG_CONFIG -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -OBJC -OBJCFLAGS -CPP -CXXCPP -XMKMF -FREETYPE2_CFLAGS -FREETYPE2_LIBS -ALSA_CFLAGS -ALSA_LIBS -LIBPULSE_CFLAGS -LIBPULSE_LIBS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures openjdk version-0.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/openjdk] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -X features: - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of openjdk version-0.1:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-openjdk build OpenJDK regardless of the presence of closed - repositories [disabled] - --enable-jigsaw build Jigsaw images (not yet available) [disabled] - --disable-headful build headful support (graphical UI support) - [enabled] - --enable-debug set the debug level to fastdebug (shorthand for - --with-debug-level=fastdebug) [disabled] - --enable-list-builddeps list all build dependencies known to the configure - script - --disable-ccache use ccache to speed up recompilations [enabled] - --disable-precompiled-headers - use precompiled headers when compiling C++ [enabled] - --enable-javac-server enable the shared javac server during the build - process [disabled] - --enable-javac-deps enable the dependency tracking between Java packages - [disabled] - --enable-javac-multi-core - compile Java packages concurrently [disabled] - --disable-macosx-runtime-support - disable the use of MacOSX Java runtime support - framework [enabled] - --enable-docs enable generation of Javadoc documentation - [disabled] - --disable-nimbus disable Nimbus L&F [enabled] - --disable-static-link-stdc++ - disable static linking of the C++ runtime on Linux - [enabled] - --enable-hotspot-test-in-build - enable running of Queens test after Hotspot build - (not yet available) [disabled] - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-data-model build 32-bit or 64-bit binaries (for platforms that - support it), e.g. --with-data-model=32 [guessed] - --with-num-cores number of cores in the build system, e.g. - --with-num-cores=8 [probed] - --with-memory-size memory (in MB) available in the build system, e.g. - --with-memory-size=1024 [probed] - --with-jdk-variant JDK variant to build (normal, embedded) [normal] - --with-jvm-variants JVM variants (separated by commas) to build (server, - client, kernel, zero, zeroshark) [server] - --with-debug-level set the debug level (release, fastdebug, slowdebug) - [release] - --with-msvcr100dll copy this msvcr100.dll into the built JDK - --with-builddeps-conf use this configuration file for the builddeps - --with-builddeps-server download and use build dependencies from this server - url, e.g. - --with-builddeps-server=ftp://example.com/dir - --with-builddeps-dir store downloaded build dependencies here - [d/localhome/builddeps] - --with-builddeps-group chgrp the downloaded build dependencies to this - group - --with-sys-root pass this sys-root to the compilers and linker - (useful if the sys-root encoded in the cross - compiler tools is incorrect) - --with-ccache-dir where to store ccache files [~/.ccache] - --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] - --with-add-source-root for each and every source directory, look in this - additional source root for the same directory; if it - exists and have files in it, include it in the build - --with-override-source-root - for each and every source directory, look in this - override source root for the same directory; if it - exists, use that directory instead and ignore the - directory in the original source root - --with-adds-and-overrides - use the subdirs 'adds' and 'overrides' in the - specified directory as add-source-root and - override-source-root - --with-override-langtools - use this langtools dir for the build - --with-override-corba use this corba dir for the build - --with-override-jaxp use this jaxp dir for the build - --with-override-jaxws use this jaxws dir for the build - --with-override-hotspot use this hotspot dir for the build - --with-override-jdk use this jdk dir for the build - --with-boot-jdk-jvmargs specify JVM arguments to be passed to all - invocations of the Boot JDK, overriding the default - values, e.g --with-boot-jdk-jvmargs="-Xmx8G - -enableassertions" - --with-server-java use this java binary for running the javac - background server and other long running java tasks - in the build process, e.g. - ---with-server-java="/opt/jrockit/bin/java -server" - --with-javac-server-cores - use at most this number of concurrent threads on the - javac server [probed] - --with-x use the X Window System - --with-cups specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-cups-include specify directory for the cups include files - --with-cups-lib specify directory for the cups library - --with-freetype specify prefix directory for the freetype2 package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-alsa specify prefix directory for the alsa package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-alsa-include specify directory for the alsa include files - --with-alsa-lib specify directory for the alsa library - --with-pulse specify prefix directory for the pulseaudio package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-pulse-include specify directory for the pulseaudio include files - --with-pulse-lib specify directory for the pulseaudio library - -Some influential environment variables: - PKG_CONFIG path to pkg-config utility - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - OBJC Objective C compiler command - OBJCFLAGS Objective C compiler flags - CPP C preprocessor - CXXCPP C++ preprocessor - XMKMF Path to xmkmf, Makefile generator for X Window System - FREETYPE2_CFLAGS - C compiler flags for FREETYPE2, overriding pkg-config - FREETYPE2_LIBS - linker flags for FREETYPE2, overriding pkg-config - ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config - ALSA_LIBS linker flags for ALSA, overriding pkg-config - LIBPULSE_CFLAGS - C compiler flags for LIBPULSE, overriding pkg-config - LIBPULSE_LIBS - linker flags for LIBPULSE, overriding pkg-config - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -openjdk configure version-0.1 -generated by GNU Autoconf 2.67 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_objc_try_compile LINENO -# ----------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_objc_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_objc_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_objc_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_cxx_try_run LINENO -# ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_cxx_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_run - -# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES -# ---------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_cxx_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_compile - -# ac_fn_cxx_check_func LINENO FUNC VAR -# ------------------------------------ -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_cxx_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_func - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to build-infra-dev@openjdk.java.net ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to build-infra-dev@openjdk.java.net ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by openjdk $as_me version-0.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5 ; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_aux_dir= -for ac_dir in build-aux "$srcdir"/build-aux; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# -# Similar to PKG_CHECK_MODULES, make sure that the first instance of -# this or PKG_CHECK_MODULES is called, or make sure to call -# PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- - - - -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- -# PKG_CHECK_MODULES - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - - - - - - - - - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Fixes paths on windows hosts to be mixed mode short. - - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - - - - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -function help_on_build_dependency { - # Print a helpful message on how to acquire the necessary build dependency. - # $1 is the help tag: freetyp2, cups, pulse, alsa etc - MISSING_DEPENDENCY=$1 - PKGHANDLER_COMMAND= - - for ac_prog in apt-get yum port pkgutil pkgadd -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PKGHANDLER"; then - ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PKGHANDLER="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PKGHANDLER=$ac_cv_prog_PKGHANDLER -if test -n "$PKGHANDLER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 -$as_echo "$PKGHANDLER" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PKGHANDLER" && break -done - - - 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="Try running '$PKGHANDLER_COMMAND'." - fi -} - -function apt_help { - case $1 in - devkit) - PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; - openjdk) - PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;; - alsa) - PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;; - cups) - PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;; - freetype2) - PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;; - pulse) - PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;; - x11) - PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;; - ccache) - PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; - * ) - break ;; - esac -} - -function yum_help { - case $1 in - devkit) - PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; - openjdk) - PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;; - alsa) - PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;; - cups) - PKGHANDLER_COMMAND="sudo yum install cups-devel" ;; - freetype2) - PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;; - pulse) - PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;; - x11) - PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;; - ccache) - PKGHANDLER_COMMAND="sudo yum install ccache" ;; - * ) - break ;; - esac -} - -function port_help { - PKGHANDLER_COMMAND="" -} - -function pkgutil_help { - PKGHANDLER_COMMAND="" -} - -function pkgadd_help { - PKGHANDLER_COMMAND="" -} - - -# Save the command line. Do this very early, before it is lost by calling autoconf macros. CONFIGURE_COMMAND_LINE="$@" +conf_script_dir=`dirname $0` +conf_closed_script_dir="$conf_script_dir/../../jdk/make/closed/autoconf" +### +### Test that the generated configure is up-to-date +### -# Locate the directory of this script. -SCRIPT="$0" +# On Solaris /bin/sh doesn't support test -nt but /usr/bin/test does. +TEST=`which test` - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +print_error_not_up_to_date() { + echo "Error: The configure source files is newer than the generated files." + echo "Please run 'sh autogen.sh' to update the generated files." +} - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - SCRIPT=`$READLINK -f $SCRIPT` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $SCRIPT` - FIL=`basename $SCRIPT` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - SCRIPT=$DIR/$FIL - fi - fi - -AUTOCONF_DIR=`dirname $0` - -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - - - # Test that variable AWK is not empty. - if test "" = "$AWK"; then as_fn_error $? "Could not find awk !" "$LINENO" 5 ; fi - -# Extract the first word of "cat", so it can be a program name with args. -set dummy cat; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CAT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CAT in - [\\/]* | ?:[\\/]*) - ac_cv_path_CAT="$CAT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CAT=$ac_cv_path_CAT -if test -n "$CAT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 -$as_echo "$CAT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CAT is not empty. - if test "" = "$CAT"; then as_fn_error $? "Could not find cat !" "$LINENO" 5 ; fi - -# Extract the first word of "chmod", so it can be a program name with args. -set dummy chmod; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHMOD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHMOD in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHMOD=$ac_cv_path_CHMOD -if test -n "$CHMOD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 -$as_echo "$CHMOD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CHMOD is not empty. - if test "" = "$CHMOD"; then as_fn_error $? "Could not find chmod !" "$LINENO" 5 ; fi - -# Extract the first word of "cp", so it can be a program name with args. -set dummy cp; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CP in - [\\/]* | ?:[\\/]*) - ac_cv_path_CP="$CP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CP=$ac_cv_path_CP -if test -n "$CP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 -$as_echo "$CP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CP is not empty. - if test "" = "$CP"; then as_fn_error $? "Could not find cp !" "$LINENO" 5 ; fi - -# Extract the first word of "cpio", so it can be a program name with args. -set dummy cpio; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CPIO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CPIO in - [\\/]* | ?:[\\/]*) - ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CPIO=$ac_cv_path_CPIO -if test -n "$CPIO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 -$as_echo "$CPIO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CPIO is not empty. - if test "" = "$CPIO"; then as_fn_error $? "Could not find cpio !" "$LINENO" 5 ; fi - -# Extract the first word of "cut", so it can be a program name with args. -set dummy cut; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CUT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CUT in - [\\/]* | ?:[\\/]*) - ac_cv_path_CUT="$CUT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CUT=$ac_cv_path_CUT -if test -n "$CUT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 -$as_echo "$CUT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CUT is not empty. - if test "" = "$CUT"; then as_fn_error $? "Could not find cut !" "$LINENO" 5 ; fi - -# Extract the first word of "date", so it can be a program name with args. -set dummy date; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DATE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DATE in - [\\/]* | ?:[\\/]*) - ac_cv_path_DATE="$DATE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DATE=$ac_cv_path_DATE -if test -n "$DATE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 -$as_echo "$DATE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DATE is not empty. - if test "" = "$DATE"; then as_fn_error $? "Could not find date !" "$LINENO" 5 ; fi - -# Extract the first word of "df", so it can be a program name with args. -set dummy df; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DF="$DF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DF=$ac_cv_path_DF -if test -n "$DF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 -$as_echo "$DF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DF is not empty. - if test "" = "$DF"; then as_fn_error $? "Could not find df !" "$LINENO" 5 ; fi - -# Extract the first word of "diff", so it can be a program name with args. -set dummy diff; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DIFF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DIFF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DIFF=$ac_cv_path_DIFF -if test -n "$DIFF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 -$as_echo "$DIFF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DIFF is not empty. - if test "" = "$DIFF"; then as_fn_error $? "Could not find diff !" "$LINENO" 5 ; fi - -# Warning echo is really, really unportable!!!!! Different -# behaviour in bash and dash and in a lot of other shells! -# Use printf for serious work! -# Extract the first word of "echo", so it can be a program name with args. -set dummy echo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ECHO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ECHO in - [\\/]* | ?:[\\/]*) - ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ECHO=$ac_cv_path_ECHO -if test -n "$ECHO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 -$as_echo "$ECHO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable ECHO is not empty. - if test "" = "$ECHO"; then as_fn_error $? "Could not find echo !" "$LINENO" 5 ; fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - - # Test that variable EGREP is not empty. - if test "" = "$EGREP"; then as_fn_error $? "Could not find egrep !" "$LINENO" 5 ; fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - - - # Test that variable FGREP is not empty. - if test "" = "$FGREP"; then as_fn_error $? "Could not find fgrep !" "$LINENO" 5 ; fi - - -# Extract the first word of "find", so it can be a program name with args. -set dummy find; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_FIND+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $FIND in - [\\/]* | ?:[\\/]*) - ac_cv_path_FIND="$FIND" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -FIND=$ac_cv_path_FIND -if test -n "$FIND"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 -$as_echo "$FIND" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable FIND is not empty. - if test "" = "$FIND"; then as_fn_error $? "Could not find find !" "$LINENO" 5 ; fi - - - # Test if find supports -delete - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 -$as_echo_n "checking if find supports -delete... " >&6; } - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rmdir $DELETEDIR - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - - - # Test that variable GREP is not empty. - if test "" = "$GREP"; then as_fn_error $? "Could not find grep !" "$LINENO" 5 ; fi - -# Extract the first word of "head", so it can be a program name with args. -set dummy head; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HEAD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HEAD in - [\\/]* | ?:[\\/]*) - ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HEAD=$ac_cv_path_HEAD -if test -n "$HEAD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 -$as_echo "$HEAD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable HEAD is not empty. - if test "" = "$HEAD"; then as_fn_error $? "Could not find head !" "$LINENO" 5 ; fi - -# Extract the first word of "ln", so it can be a program name with args. -set dummy ln; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LN in - [\\/]* | ?:[\\/]*) - ac_cv_path_LN="$LN" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LN=$ac_cv_path_LN -if test -n "$LN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 -$as_echo "$LN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable LN is not empty. - if test "" = "$LN"; then as_fn_error $? "Could not find ln !" "$LINENO" 5 ; fi - -# Extract the first word of "ls", so it can be a program name with args. -set dummy ls; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LS in - [\\/]* | ?:[\\/]*) - ac_cv_path_LS="$LS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LS=$ac_cv_path_LS -if test -n "$LS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 -$as_echo "$LS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable LS is not empty. - if test "" = "$LS"; then as_fn_error $? "Could not find ls !" "$LINENO" 5 ; fi - -for ac_prog in gmake make -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_MAKE="$MAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MAKE=$ac_cv_path_MAKE -if test -n "$MAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5 -$as_echo "$MAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$MAKE" && break -done - - - # Test that variable MAKE is not empty. - if test "" = "$MAKE"; then as_fn_error $? "Could not find make !" "$LINENO" 5 ; fi - -MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[12346789]'` -if test "x$MAKE_VERSION" = x; then - as_fn_error $? "You must use GNU make 3.81 or newer! Please put it in the path." "$LINENO" 5 -fi -# Extract the first word of "mkdir", so it can be a program name with args. -set dummy mkdir; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MKDIR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MKDIR in - [\\/]* | ?:[\\/]*) - ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MKDIR=$ac_cv_path_MKDIR -if test -n "$MKDIR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 -$as_echo "$MKDIR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable MKDIR is not empty. - if test "" = "$MKDIR"; then as_fn_error $? "Could not find mkdir !" "$LINENO" 5 ; fi - -# Extract the first word of "mv", so it can be a program name with args. -set dummy mv; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MV+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MV in - [\\/]* | ?:[\\/]*) - ac_cv_path_MV="$MV" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MV=$ac_cv_path_MV -if test -n "$MV"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 -$as_echo "$MV" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable MV is not empty. - if test "" = "$MV"; then as_fn_error $? "Could not find mv !" "$LINENO" 5 ; fi - -for ac_prog in nawk gawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_NAWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $NAWK in - [\\/]* | ?:[\\/]*) - ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NAWK=$ac_cv_path_NAWK -if test -n "$NAWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 -$as_echo "$NAWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$NAWK" && break -done - - - # Test that variable NAWK is not empty. - if test "" = "$NAWK"; then as_fn_error $? "Could not find nawk !" "$LINENO" 5 ; fi - -# Extract the first word of "printf", so it can be a program name with args. -set dummy printf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PRINTF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PRINTF in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PRINTF=$ac_cv_path_PRINTF -if test -n "$PRINTF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 -$as_echo "$PRINTF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable PRINTF is not empty. - if test "" = "$PRINTF"; then as_fn_error $? "Could not find printf !" "$LINENO" 5 ; fi - -# Extract the first word of "pwd", so it can be a program name with args. -set dummy pwd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_THEPWDCMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $THEPWDCMD in - [\\/]* | ?:[\\/]*) - ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -THEPWDCMD=$ac_cv_path_THEPWDCMD -if test -n "$THEPWDCMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 -$as_echo "$THEPWDCMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "rm", so it can be a program name with args. -set dummy rm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_RM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $RM in - [\\/]* | ?:[\\/]*) - ac_cv_path_RM="$RM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -RM=$ac_cv_path_RM -if test -n "$RM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 -$as_echo "$RM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable RM is not empty. - if test "" = "$RM"; then as_fn_error $? "Could not find rm !" "$LINENO" 5 ; fi - -RM="$RM -f" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - - # Test that variable SED is not empty. - if test "" = "$SED"; then as_fn_error $? "Could not find sed !" "$LINENO" 5 ; fi - -# Extract the first word of "sh", so it can be a program name with args. -set dummy sh; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $SH in - [\\/]* | ?:[\\/]*) - ac_cv_path_SH="$SH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -SH=$ac_cv_path_SH -if test -n "$SH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 -$as_echo "$SH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable SH is not empty. - if test "" = "$SH"; then as_fn_error $? "Could not find sh !" "$LINENO" 5 ; fi - -# Extract the first word of "sort", so it can be a program name with args. -set dummy sort; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SORT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $SORT in - [\\/]* | ?:[\\/]*) - ac_cv_path_SORT="$SORT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -SORT=$ac_cv_path_SORT -if test -n "$SORT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 -$as_echo "$SORT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable SORT is not empty. - if test "" = "$SORT"; then as_fn_error $? "Could not find sort !" "$LINENO" 5 ; fi - -# Extract the first word of "tar", so it can be a program name with args. -set dummy tar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TAR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TAR in - [\\/]* | ?:[\\/]*) - ac_cv_path_TAR="$TAR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TAR=$ac_cv_path_TAR -if test -n "$TAR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 -$as_echo "$TAR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TAR is not empty. - if test "" = "$TAR"; then as_fn_error $? "Could not find tar !" "$LINENO" 5 ; fi - -# Extract the first word of "tail", so it can be a program name with args. -set dummy tail; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TAIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TAIL in - [\\/]* | ?:[\\/]*) - ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TAIL=$ac_cv_path_TAIL -if test -n "$TAIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 -$as_echo "$TAIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TAIL is not empty. - if test "" = "$TAIL"; then as_fn_error $? "Could not find tail !" "$LINENO" 5 ; fi - -# Extract the first word of "tee", so it can be a program name with args. -set dummy tee; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TEE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TEE in - [\\/]* | ?:[\\/]*) - ac_cv_path_TEE="$TEE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TEE=$ac_cv_path_TEE -if test -n "$TEE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 -$as_echo "$TEE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TEE is not empty. - if test "" = "$TEE"; then as_fn_error $? "Could not find tee !" "$LINENO" 5 ; fi - -# Extract the first word of "tr", so it can be a program name with args. -set dummy tr; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TR in - [\\/]* | ?:[\\/]*) - ac_cv_path_TR="$TR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TR=$ac_cv_path_TR -if test -n "$TR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 -$as_echo "$TR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TR is not empty. - if test "" = "$TR"; then as_fn_error $? "Could not find tr !" "$LINENO" 5 ; fi - -# Extract the first word of "touch", so it can be a program name with args. -set dummy touch; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TOUCH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TOUCH in - [\\/]* | ?:[\\/]*) - ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TOUCH=$ac_cv_path_TOUCH -if test -n "$TOUCH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 -$as_echo "$TOUCH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TOUCH is not empty. - if test "" = "$TOUCH"; then as_fn_error $? "Could not find touch !" "$LINENO" 5 ; fi - -# Extract the first word of "wc", so it can be a program name with args. -set dummy wc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_WC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $WC in - [\\/]* | ?:[\\/]*) - ac_cv_path_WC="$WC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -WC=$ac_cv_path_WC -if test -n "$WC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 -$as_echo "$WC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable WC is not empty. - if test "" = "$WC"; then as_fn_error $? "Could not find wc !" "$LINENO" 5 ; fi - -# Extract the first word of "xargs", so it can be a program name with args. -set dummy xargs; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XARGS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $XARGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -XARGS=$ac_cv_path_XARGS -if test -n "$XARGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 -$as_echo "$XARGS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable XARGS is not empty. - if test "" = "$XARGS"; then as_fn_error $? "Could not find xargs !" "$LINENO" 5 ; fi - -# Extract the first word of "zip", so it can be a program name with args. -set dummy zip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ZIP=$ac_cv_path_ZIP -if test -n "$ZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 -$as_echo "$ZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable ZIP is not empty. - if test "" = "$ZIP"; then as_fn_error $? "Could not find zip !" "$LINENO" 5 ; fi - -# Extract the first word of "unzip", so it can be a program name with args. -set dummy unzip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $UNZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -UNZIP=$ac_cv_path_UNZIP -if test -n "$UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 -$as_echo "$UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable UNZIP is not empty. - if test "" = "$UNZIP"; then as_fn_error $? "Could not find unzip !" "$LINENO" 5 ; fi - -# Extract the first word of "ldd", so it can be a program name with args. -set dummy ldd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LDD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LDD in - [\\/]* | ?:[\\/]*) - ac_cv_path_LDD="$LDD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LDD=$ac_cv_path_LDD -if test -n "$LDD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 -$as_echo "$LDD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -# Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OTOOL in - [\\/]* | ?:[\\/]*) - ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OTOOL=$ac_cv_path_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -# Extract the first word of "readelf", so it can be a program name with args. -set dummy readelf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READELF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READELF in - [\\/]* | ?:[\\/]*) - ac_cv_path_READELF="$READELF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READELF=$ac_cv_path_READELF -if test -n "$READELF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 -$as_echo "$READELF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "expr", so it can be a program name with args. -set dummy expr; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_EXPR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $EXPR in - [\\/]* | ?:[\\/]*) - ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -EXPR=$ac_cv_path_EXPR -if test -n "$EXPR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 -$as_echo "$EXPR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable EXPR is not empty. - if test "" = "$EXPR"; then as_fn_error $? "Could not find expr !" "$LINENO" 5 ; fi - -# Extract the first word of "file", so it can be a program name with args. -set dummy file; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_FILE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $FILE in - [\\/]* | ?:[\\/]*) - ac_cv_path_FILE="$FILE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -FILE=$ac_cv_path_FILE -if test -n "$FILE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 -$as_echo "$FILE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable FILE is not empty. - if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi - -# Figure out the build and host system. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - - -# Check whether --with-data-model was given. -if test "${with_data_model+set}" = set; then : - withval=$with_data_model; -fi - - -if test "x$with_data_model" != x && \ - test "x$with_data_model" != x32 && \ - test "x$with_data_model" != x64 ; then - as_fn_error $? "The data model can only be 32 or 64!" "$LINENO" 5 -fi -# Translate the standard cpu-vendor-kernel-os quadruplets into -# the new HOST_.... and BUILD_... and the legacy names used by -# the openjdk build. -# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model - - # Expects $host_os $host_cpu $build_os and $build_cpu - # and $with_data_model to have been setup! - # - # Translate the standard triplet(quadruplet) definition - # of the host/build system into - # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows - # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince - # HOST_OS_API=posix,winapi - # - # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 - # HOST_CPU_ARCH=x86,sparc,pcc,arm - # HOST_CPU_BITS=32,64 - # HOST_CPU_ENDIAN=big,little - # - # The same values are setup for BUILD_... - # - # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) - # LEGACY_HOST_OS_API=solaris,windows - # - # We also copy the autoconf trip/quadruplet - # verbatim to HOST and BUILD - HOST=${host} - - BUILD=${build} - - - - - case "$host_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - VAR_OS_FAMILY=gnu - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_FAMILY=sysv - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - VAR_OS_FAMILY=windows - ;; - *) - as_fn_error $? "unsupported host operating system $host_os" "$LINENO" 5 - ;; - esac - - HOST_OS="$VAR_OS" - HOST_OS_FAMILY="$VAR_OS_FAMILY" - HOST_OS_API="$VAR_OS_API" - - - - - - if test "x$HOST_OS_API" = xposix; then - LEGACY_HOST_OS_API="solaris" - fi - if test "x$HOST_OS_API" = xwinapi; then - LEGACY_HOST_OS_API="windows" - fi - - - - - # First argument is the cpu name from the trip/quad - case "$host_cpu" in - x86_64) - VAR_CPU=x64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=amd64 - ;; - i?86) - VAR_CPU=ia32 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=i586 - ;; - alpha*) - VAR_CPU=alpha - VAR_CPU_ARCH=alpha - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=alpha - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=arm - ;; - mips) - VAR_CPU=mips - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mips - ;; - mipsel) - VAR_CPU=mipsel - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mipsel - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=ppc - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 - VAR_LEGACY_CPU=ppc64 - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc - ;; - sparc64) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 - ;; - s390) - VAR_CPU=s390 - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390 - VAR_LEGACY_CPU=s390 - ;; - s390x) - VAR_CPU=s390x - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390x - ;; - *) - as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 - ;; - esac - - # Workaround cygwin not knowing about 64 bit. - if test "x$VAR_OS" = "xwindows"; then - if test "x$PROCESSOR_IDENTIFIER" != "x"; then - PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` - case "$PROC_ARCH" in - intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - ;; - esac - fi - fi - - if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - fi - if test "x$with_data_model" = "x32"; then - VAR_CPU=ia32 - VAR_CPU_BITS=32 - VAR_LEGACY_CPU=i586 - fi - fi - - HOST_CPU="$VAR_CPU" - HOST_CPU_ARCH="$VAR_CPU_ARCH" - HOST_CPU_BITS="$VAR_CPU_BITS" - HOST_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of ia32 and x64 - LEGACY_HOST_CPU1="$VAR_LEGACY_CPU" - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of ia32 and x64. - LEGACY_HOST_CPU2="$LEGACY_HOST_CPU1" - if test "x$LEGACY_HOST_CPU1" = xi586; then - LEGACY_HOST_CPU2=i386 - fi - - - # And the third legacy naming of the cpu. - # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. - LEGACY_HOST_CPU3="" - if test "x$HOST_CPU" = xx64; then - LEGACY_HOST_CPU3=amd64 - fi - if test "x$HOST_CPU" = xsparcv9; then - LEGACY_HOST_CPU3=sparvc9 - fi - - - - - - case "$build_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - VAR_OS_FAMILY=gnu - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_FAMILY=sysv - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - VAR_OS_FAMILY=windows - ;; - *) - as_fn_error $? "unsupported host operating system $build_os" "$LINENO" 5 - ;; - esac - - BUILD_OS="$VAR_OS" - BUILD_OS_FAMILY="$VAR_OS_FAMILY" - BUILD_OS_API="$VAR_OS_API" - - - - - - if test "x$BUILD_OS_API" = xposix; then - LEGACY_BUILD_OS_API="solaris" - fi - if test "x$BUILD_OS_API" = xwinapi; then - LEGACY_BUILD_OS_API="windows" - fi - - - - - # First argument is the cpu name from the trip/quad - case "$build_cpu" in - x86_64) - VAR_CPU=x64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=amd64 - ;; - i?86) - VAR_CPU=ia32 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=i586 - ;; - alpha*) - VAR_CPU=alpha - VAR_CPU_ARCH=alpha - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=alpha - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=arm - ;; - mips) - VAR_CPU=mips - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mips - ;; - mipsel) - VAR_CPU=mipsel - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mipsel - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=ppc - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 - VAR_LEGACY_CPU=ppc64 - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc - ;; - sparc64) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 - ;; - s390) - VAR_CPU=s390 - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390 - VAR_LEGACY_CPU=s390 - ;; - s390x) - VAR_CPU=s390x - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390x - ;; - *) - as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 - ;; - esac - - # Workaround cygwin not knowing about 64 bit. - if test "x$VAR_OS" = "xwindows"; then - if test "x$PROCESSOR_IDENTIFIER" != "x"; then - PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` - case "$PROC_ARCH" in - intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - ;; - esac - fi - fi - - if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - fi - if test "x$with_data_model" = "x32"; then - VAR_CPU=ia32 - VAR_CPU_BITS=32 - VAR_LEGACY_CPU=i586 - fi - fi - - BUILD_CPU="$VAR_CPU" - BUILD_CPU_ARCH="$VAR_CPU_ARCH" - BUILD_CPU_BITS="$VAR_CPU_BITS" - BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of ia32 and x64 - LEGACY_BUILD_CPU1="$VAR_LEGACY_CPU" - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of ia32 and x64. - LEGACY_BUILD_CPU2="$LEGACY_BUILD_CPU1" - if test "x$LEGACY_BUILD_CPU1" = xi586; then - LEGACY_BUILD_CPU2=i386 - fi - - - # And the third legacy naming of the cpu. - # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. - LEGACY_BUILD_CPU3="" - if test "x$BUILD_CPU" = xx64; then - LEGACY_BUILD_CPU3=amd64 - fi - if test "x$BUILD_CPU" = xsparcv9; then - LEGACY_BUILD_CPU3=sparvc9 - fi - - - - if test "x$HOST_OS" != xsolaris; then - LEGACY_HOST_CPU3="" - LEGACY_BUILD_CPU3="" - fi - -# Now the following vars are defined. -# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows -# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince -# HOST_OS_API=posix,winapi -# -# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 -# HOST_CPU_ARCH=x86,sparc,pcc,arm -# HOST_CPU_BITS=32,64 -# HOST_CPU_ENDIAN=big,little -# -# There is also a: -# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH -# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH -# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris -# There was also a BUILDARCH that had i486,amd64,... but we do not use that -# in the new build. -# LEGACY_HOST_OS_API=solaris,windows # used to select source roots - -DATE_WHEN_CONFIGURED=`LANG=C date` - - -# How many cores do we have on this build system? - -# Check whether --with-num-cores was given. -if test "${with_num_cores+set}" = set; then : - withval=$with_num_cores; -fi - -if test "x$with_num_cores" = x; then - # The number of cores were not specified, try to probe them. - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5 -$as_echo_n "checking for number of cores... " >&6; } - NUM_CORES=1 - FOUND_CORES=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - NUM_CORES=`cat /proc/cpuinfo | grep -c processor` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/psrinfo; then - # Looks like a Solaris system - NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` - FOUND_CORES=yes - fi - - if test "x$build_os" = xwindows; then - NUM_CORES=4 - fi - - # For c/c++ code we run twice as many concurrent build - # jobs than we have cores, otherwise we will stall on io. - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` - - if test "x$FOUND_CORES" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 -$as_echo "$NUM_CORES" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 -$as_echo "could not detect number of cores, defaulting to 1!" >&6; } - fi - - -else - NUM_CORES=$with_num_cores - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` -fi - - - -# How many cores do we have on this build system? - -# Check whether --with-memory-size was given. -if test "${with_memory_size+set}" = set; then : - withval=$with_memory_size; -fi - -if test "x$with_memory_size" = x; then - # The memory size was not specified, try to probe it. - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5 -$as_echo_n "checking for memory size... " >&6; } - # Default to 1024MB - MEMORY_SIZE=1024 - FOUND_MEM=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` - FOUND_MEM=yes - fi - - if test "x$build_os" = xwindows; then - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` - FOUND_MEM=yes - fi - - if test "x$FOUND_MEM" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 -$as_echo "$MEMORY_SIZE MB" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024MB!" >&5 -$as_echo "could not detect memory size defaulting to 1024MB!" >&6; } - fi - -else - MEMORY_SIZE=$with_memory_size -fi - - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" - -cd "$CURDIR" - -# For cygwin we need cygpath first, since it is used everywhere. -# Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -PATH_SEP=":" -if test "x$BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 - fi - PATH_SEP=";" -fi - - - - # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$SRC_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` - SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 - fi - fi - - - # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$CURDIR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - CURDIR=`$CYGPATH -s -m -a "$CURDIR"` - CURDIR=`$CYGPATH -u "$CURDIR"` - else - as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 - fi - fi - - -if test "x$BUILD_OS" = "xsolaris"; then - # Also search in /usr/ccs/bin for utilities like ar and as. - PATH="/usr/ccs/bin:$PATH" -fi - -############################################################################### -# -# OpenJDK or closed -# -# Check whether --enable-openjdk was given. -if test "${enable_openjdk+set}" = set; then : - enableval=$enable_openjdk; -fi - - -if test "x$enable_openjdk" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true -fi - -if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true -fi - - - -############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -# Check whether --enable-jigsaw was given. -if test "${enable_jigsaw+set}" = set; then : - enableval=$enable_jigsaw; -fi - - -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi - - -############################################################################### -# -# Check which variant of the JDK that we want to build. -# Currently we have: -# normal: standard edition -# embedded: cut down to a smaller footprint -# -# Effectively the JDK variant gives a name to a specific set of -# modules to compile into the JDK. In the future, these modules -# might even be Jigsaw modules. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of the JDK to build" >&5 -$as_echo_n "checking which variant of the JDK to build... " >&6; } - -# Check whether --with-jdk-variant was given. -if test "${with_jdk_variant+set}" = set; then : - withval=$with_jdk_variant; -fi - - -if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then - JAVASE_EMBEDDED="" - MINIMIZE_RAM_USAGE="" - JDK_VARIANT="normal" -elif test "x$with_jdk_variant" = xembedded; then - JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" - MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" - JDK_VARIANT="embedded" -else - as_fn_error $? "The available JDK variants are: normal, embedded" "$LINENO" 5 -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JDK_VARIANT" >&5 -$as_echo "$JDK_VARIANT" >&6; } - -############################################################################### -# -# Should we build a JDK/JVM with head support (ie a graphical ui)? -# We always build headless support. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking headful support" >&5 -$as_echo_n "checking headful support... " >&6; } -# Check whether --enable-headful was given. -if test "${enable_headful+set}" = set; then : - enableval=$enable_headful; SUPPORT_HEADFUL=${enable_headful} -else - SUPPORT_HEADFUL=yes -fi - - -SUPPORT_HEADLESS=yes -BUILD_HEADLESS="BUILD_HEADLESS:=true" - -if test "x$SUPPORT_HEADFUL" = xyes; then - # We are building both headful and headless. - BUILD_HEADLESS_ONLY="" - headful_msg="inlude support for both headful and headless" -fi - -if test "x$SUPPORT_HEADFUL" = xno; then - # Thus we are building headless only. - BUILD_HEADLESS="BUILD_HEADLESS:=true" - BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" - headful_msg="headless only" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $headful_msg" >&5 -$as_echo "$headful_msg" >&6; } - - - - - - -############################################################################### -# -# Check which variants of the JVM that we want to build. -# Currently we have: -# server: normal interpreter and a tiered C1/C2 compiler -# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) -# kernel: kernel footprint JVM that passes the TCK without major performance problems, -# ie normal interpreter and C1, only the serial GC, kernel jvmti etc -# zero: no machine code interpreter, no compiler -# zeroshark: zero interpreter and shark/llvm compiler backend -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 -$as_echo_n "checking which variants of the JVM that should be built... " >&6; } - -# Check whether --with-jvm-variants was given. -if test "${with_jvm_variants+set}" = set; then : - withval=$with_jvm_variants; -fi - - -if test "x$with_jvm_variants" = x; then - if test "x$JDK_VARIANT" = xembedded; then - with_jvm_variants="kernel" - elif test "x$HOST_CPU_BITS" = x64; then - with_jvm_variants="server" - else - # Yes, on 32-bit machines, the same source (almost) is compiled twice - # to generate two libjvm.so files. Fun, fun. - with_jvm_variants="client,server" - fi -fi - -JVM_VARIANTS=",$with_jvm_variants," -TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` - -if test "x$TEST_VARIANTS" != "x,"; then - as_fn_error $? "The available JVM variants are: server, client, kernel, zero, zeroshark" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 -$as_echo "$with_jvm_variants" >&6; } - -JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` -JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` -JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` -JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` -JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - as_fn_error $? "You cannot build a client JVM for a 64-bit machine." "$LINENO" 5 - fi -fi -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - as_fn_error $? "You cannot build a kernel JVM for a 64-bit machine." "$LINENO" 5 - fi -fi - -COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` -# Replace the commas with AND for use in the build directory name. -ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` -if test "x$COUNT_VARIANTS" != "x,1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&5 -$as_echo "$as_me: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&6;} -fi - - - - - - - - -############################################################################### -# -# Set the debug level -# release: no debug information, all optimizations, no asserts. -# fastdebug: debug information (-g), all optimizations, all asserts -# slowdebug: debug information (-g), no optimizations, all asserts -# -DEBUG_LEVEL="release" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level to use" >&5 -$as_echo_n "checking which debug level to use... " >&6; } -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; - ENABLE_DEBUG="${enableval}" - DEBUG_LEVEL="fastdebug" - -else - ENABLE_DEBUG="no" -fi - - - -# Check whether --with-debug-level was given. -if test "${with_debug_level+set}" = set; then : - withval=$with_debug_level; - DEBUG_LEVEL="${withval}" - if test "x$ENABLE_DEBUG" = xyes; then - as_fn_error $? "You cannot use both --enable-debug and --with-debug-level at the same time." "$LINENO" 5 - fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_LEVEL" >&5 -$as_echo "$DEBUG_LEVEL" >&6; } - -if test "x$DEBUG_LEVEL" != xrelease && \ - test "x$DEBUG_LEVEL" != xfastdebug && \ - test "x$DEBUG_LEVEL" != xslowdebug; then - as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5 -fi - -case $DEBUG_LEVEL in - release ) - VARIANT="OPT" - FASTDEBUG="false" - DEBUG_CLASSFILES="false" - BUILD_VARIANT_RELEASE="" - ;; - fastdebug ) - VARIANT="DBG" - FASTDEBUG="true" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-fastdebug" - ;; - slowdebug ) - VARIANT="DBG" - FASTDEBUG="false" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-debug" - ;; -esac - - - - - - - -# Source the version numbers -. $AUTOCONF_DIR/version.numbers -if test "x$OPENJDK" = "xfalse"; then - . $AUTOCONF_DIR/closed.version.numbers -fi -# Now set the JDK version, milestone, build number etc. - - - - - - - - - - - - -COPYRIGHT_YEAR=`date +'%Y'` - - -RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" - - -if test "x$JDK_UPDATE_VERSION" != x; then - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" -else - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" -fi - - -if test "x$MILESTONE" != x; then - RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" -else - RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" -fi - - -if test "x$JDK_BUILD_NUMBER" != x; then - FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" -else - JDK_BUILD_NUMBER=b00 - BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" -fi - -COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` - - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/host-variant-debuglevel output root. - OUTPUT_ROOT="$SRC_ROOT/build/${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - OUTPUT_ROOT="$CURDIR" -fi - - - # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` - OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 - fi - fi - - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$BUILD_OS" = "xwindows"; then - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 -$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - case "$LEGACY_HOST_CPU1" in - i?86) - VARSBAT_ARCH=x86 - ;; - *) - VARSBAT_ARCH=$LEGACY_HOST_CPU1 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 -$as_echo_n "checking if we can extract the needed env variables... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - if test "x$VCINSTALLDIR" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 -$as_echo "$VCINSTALLDIR" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 -$as_echo_n "checking for msvcr100.dll... " >&6; } - -# Check whether --with-msvcr100dll was given. -if test "${with_msvcr100dll+set}" = set; then : - withval=$with_msvcr100dll; -fi - - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$HOST_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 -$as_echo "$MSVCR100DLL" >&6; } - - # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` - MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` - else - as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 - fi - fi - - fi -fi - - - - -# Most of the probed defines are put into config.h -ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" - -# The spec.gmk file contains all variables for the make system. -ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" - -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT. If you have only -# one configured host, then you can also run make from the SRC_ROOT, -# since it will go look for a single spec.gmk file. Or perhaps it -# should instead make all configured hosts it can find? -ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" - - -SPEC=$OUTPUT_ROOT/spec.gmk - -OUTPUT_ROOT=$OUTPUT_ROOT - - -# Where are the sources. Any of these can be overridden -# using --with-override-corba and the likes. -LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" -CORBA_TOPDIR="$SRC_ROOT/corba" -JAXP_TOPDIR="$SRC_ROOT/jaxp" -JAXWS_TOPDIR="$SRC_ROOT/jaxws" -HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" -JDK_TOPDIR="$SRC_ROOT/jdk" - - - - - - - -# Check if pkg-config is available. - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi - -fi - - -# Check whether --with-builddeps-conf was given. -if test "${with_builddeps_conf+set}" = set; then : - withval=$with_builddeps_conf; -fi - - - -# Check whether --with-builddeps-server was given. -if test "${with_builddeps_server+set}" = set; then : - withval=$with_builddeps_server; -fi - - - -# Check whether --with-builddeps-dir was given. -if test "${with_builddeps_dir+set}" = set; then : - withval=$with_builddeps_dir; -else - with_builddeps_dir=/localhome/builddeps -fi - - - -# Check whether --with-builddeps-group was given. -if test "${with_builddeps_group+set}" = set; then : - withval=$with_builddeps_group; -fi - - -# Check whether --enable-list-builddeps was given. -if test "${enable_list_builddeps+set}" = set; then : - enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" -else - LIST_BUILDDEPS='no' -fi - - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort - echo +for file in configure.ac *.m4 ; do + if $TEST $file -nt generated-configure.sh; then + print_error_not_up_to_date exit 1 -fi - -# If builddeps server or conf file is given. Setup buildeps usage. - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - if test "x$with_builddeps_conf" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 -$as_echo_n "checking for supplied builddeps configuration file... " >&6; } - builddepsfile=$with_builddeps_conf - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 -$as_echo "loaded!" >&6; } - else - as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 -$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } - builddepsfile=`mktemp` - touch $builddepsfile - # Put all found confs into a single file. - find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile - # Source the file to acquire the variables - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 -$as_echo "found at least one!" >&6; } - else - as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 - fi - fi - # Create build and host names that use _ instead of "-" and ".". - # This is necessary to use them in variable names. - build_var=`echo ${build} | tr '-' '_' | tr '.' '_'` - host_var=`echo ${host} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and host - eval rewritten_build=\${REWRITE_${build_var}} - if test "x$rewritten_build" = x; then - rewritten_build=${build} - echo Build stays the same $rewritten_build - else - echo Rewriting build for builddeps into $rewritten_build - fi - eval rewritten_host=\${REWRITE_${host_var}} - if test "x$rewritten_host" = x; then - rewritten_host=${host} - echo Host stays the same $rewritten_host - else - echo Rewriting host for builddeps into $rewritten_host - fi - rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'` - fi - for ac_prog in 7z unzip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_UNZIP"; then - ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_UNZIP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 fi done - done -IFS=$as_save_IFS -fi -fi -BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP -if test -n "$BDEPS_UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 -$as_echo "$BDEPS_UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$BDEPS_UNZIP" && break -done - - if test "x$BDEPS_UNZIP" = x7z; then - BDEPS_UNZIP="7z x" +if $TEST -e $conf_closed_script_dir/generated-configure.sh; then + # If closed source configure is available, make sure it is up-to-date as well. + for file in configure.ac *.m4 $conf_closed_script_dir/*.m4; do + if $TEST $file -nt $conf_closed_script_dir/generated-configure.sh; then + print_error_not_up_to_date + exit 1 fi - - for ac_prog in wget lftp ftp -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_FTP"; then - ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_FTP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done done -IFS=$as_save_IFS -fi -fi -BDEPS_FTP=$ac_cv_prog_BDEPS_FTP -if test -n "$BDEPS_FTP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 -$as_echo "$BDEPS_FTP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + # Test if open configure is newer than closed configure, if so, closed needs to + # be regenerated. + conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_script_dir/generated-configure.sh | cut -d" " -f 3` + conf_closed_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_closed_script_dir/generated-configure.sh | cut -d" " -f 3` + if $TEST $conf_open_configure_timestamp -gt $conf_closed_configure_timestamp; then + print_error_not_up_to_date + exit 1 + fi + fi +### +### Process command-line arguments +### +conf_processed_arguments= +conf_openjdk_target= +conf_extra_cflags= +conf_extra_cxxflags= - test -n "$BDEPS_FTP" && break -done - - - -############################################################################### -# -# Configure the development tool paths and potential sysroot. -# -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -DEVKIT= -SYS_ROOT=/ - - -# The option used to specify the target .o,.a or .so file. -# When compiling, how to specify the to be created object file. -CC_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created executable. -EXE_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created dynamically linkable library. -LD_OUT_OPTION='-o$(SPACE)' -# When archiving, how to specify the to be create static archive for object files. -AR_OUT_OPTION='rcs$(SPACE)' - - - - - -# If --build AND --host is set, then the configure script will find any -# cross compilation tools in the PATH. Cross compilation tools -# follows the cross compilation standard where they are prefixed with ${host}. -# For example the binary i686-sun-solaris2.10-gcc -# will cross compile for i686-sun-solaris2.10 -# If neither of build and host is not set, then build=host and the -# default compiler found in the path will be used. -# Setting only --host, does not seem to be really supported. -# Please set both --build and --host if you want to cross compile. - -DEFINE_CROSS_COMPILE_ARCH="" -HOSTCC="" -HOSTCXX="" - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a cross compile" >&5 -$as_echo_n "checking if this is a cross compile... " >&6; } -if test "x$build_var" != "x$host_var"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, from $build_var to $host_var" >&5 -$as_echo "yes, from $build_var to $host_var" >&6; } - # We have detected a cross compile! - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1" - # Now we to find a C/C++ compiler that can build executables for the build - # platform. We can't use the AC_PROG_CC macro, since it can only be used - # once. - for ac_prog in cl cc gcc +for conf_option do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HOSTCC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HOSTCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_HOSTCC="$HOSTCC" # Let the user override the test with a path. - ;; + case $conf_option in + --openjdk-target=*) + conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; + --with-extra-cflags=*) + conf_extra_cflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; + --with-extra-cxxflags=*) + conf_extra_cxxflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HOSTCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HOSTCC=$ac_cv_path_HOSTCC -if test -n "$HOSTCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCC" >&5 -$as_echo "$HOSTCC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$HOSTCC" && break -done - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$HOSTCC" - car="${tmp%% *}" - tmp="$HOSTCC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - HOSTCC="$car ${cdr% *}" - else - HOSTCC="$car" - fi - - for ac_prog in cl CC g++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HOSTCXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HOSTCXX in - [\\/]* | ?:[\\/]*) - ac_cv_path_HOSTCXX="$HOSTCXX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HOSTCXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HOSTCXX=$ac_cv_path_HOSTCXX -if test -n "$HOSTCXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCXX" >&5 -$as_echo "$HOSTCXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$HOSTCXX" && break -done - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$HOSTCXX" - car="${tmp%% *}" - tmp="$HOSTCXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - HOSTCXX="$car ${cdr% *}" - else - HOSTCXX="$car" - fi - - # Building for the build platform should be easy. Therefore - # we do not need any linkers or assemblers etc. -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. - -# Check whether --with-sys-root was given. -if test "${with_sys_root+set}" = set; then : - withval=$with_sys_root; -fi - - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -fi - -# If a devkit is found on the builddeps server, then prepend its path to the -# PATH variable. If there are cross compilers available in the devkit, these -# will be found by AC_PROG_CC et al. - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_devkit_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The devkit comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_devkit} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for devkit" >&5 -$as_echo "$as_me: Using builddeps $resource for devkit" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# devkit is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/devkit.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_devkit_ROOT} - thecflags=${builddep_devkit_CFLAGS} - thelibs=${builddep_devkit_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency devkit" "$LINENO" 5 - fi - DEVKIT=$depdir - if test "x$theroot" != x; then - DEVKIT="$theroot" - fi - if test "x$thecflags" != x; then - DEVKIT_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - DEVKIT_LIBS="$thelibs" - fi - # Found devkit - PATH="$DEVKIT/bin:$PATH" - SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root" - if test "x$x_includes" = "xNONE"; then - x_includes="$SYS_ROOT/usr/include/X11" - fi - if test "x$x_libraries" = "xNONE"; then - x_libraries="$SYS_ROOT/usr/lib" - fi - - - fi - - fi - - -if test "x$SYS_ROOT" != "x/" ; then - CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" - CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" - OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" - LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" -fi - -# Store the CFLAGS etal passed to the configure script. -ORG_CFLAGS="$CFLAGS" -ORG_CXXFLAGS="$CXXFLAGS" -ORG_OBJCFLAGS="$OBJCFLAGS" - -# gcc is almost always present, but on Windows we -# prefer cl.exe and on Solaris we prefer CC. -# Thus test for them in this order. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in cl cc gcc - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl cc gcc -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5 ; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5 ; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5 ; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -if test "x$CC" = x; then - help_on_build_dependency devkit - as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 -fi -if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CC" - car="${tmp%% *}" - tmp="$CC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CC="$car ${cdr% *}" - else - CC="$car" - fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in cl CC g++ - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in cl CC g++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXX" - car="${tmp%% *}" - tmp="$CXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXX="$car ${cdr% *}" - else - CXX="$car" - fi - - -if test "x$CXX" = x || test "x$CC" = x; then - help_on_build_dependency devkit - as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 -fi - -if test "x$BUILD_OS" != xwindows; then - ac_ext=m -ac_cpp='$OBJCPP $CPPFLAGS' -ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_objc_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in gcc objcc objc cc CC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJC"; then - ac_cv_prog_OBJC="$OBJC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJC=$ac_cv_prog_OBJC -if test -n "$OBJC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 -$as_echo "$OBJC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$OBJC" && break - done -fi -if test -z "$OBJC"; then - ac_ct_OBJC=$OBJC - for ac_prog in gcc objcc objc cc CC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJC"; then - ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC -if test -n "$ac_ct_OBJC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 -$as_echo "$ac_ct_OBJC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_OBJC" && break -done - - if test "x$ac_ct_OBJC" = x; then - OBJC="gcc" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJC=$ac_ct_OBJC - fi -fi - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 -$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } -if test "${ac_cv_objc_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_objc_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 -$as_echo "$ac_cv_objc_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GOBJC=yes -else - GOBJC= -fi -ac_test_OBJCFLAGS=${OBJCFLAGS+set} -ac_save_OBJCFLAGS=$OBJCFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 -$as_echo_n "checking whether $OBJC accepts -g... " >&6; } -if test "${ac_cv_prog_objc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_objc_werror_flag=$ac_objc_werror_flag - ac_objc_werror_flag=yes - ac_cv_prog_objc_g=no - OBJCFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_cv_prog_objc_g=yes -else - OBJCFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - -else - ac_objc_werror_flag=$ac_save_objc_werror_flag - OBJCFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_cv_prog_objc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_objc_werror_flag=$ac_save_objc_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 -$as_echo "$ac_cv_prog_objc_g" >&6; } -if test "$ac_test_OBJCFLAGS" = set; then - OBJCFLAGS=$ac_save_OBJCFLAGS -elif test $ac_cv_prog_objc_g = yes; then - if test "$GOBJC" = yes; then - OBJCFLAGS="-g -O2" - else - OBJCFLAGS="-g" - fi -else - if test "$GOBJC" = yes; then - OBJCFLAGS="-O2" - else - OBJCFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$OBJC" - car="${tmp%% *}" - tmp="$OBJC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - OBJC="$car ${cdr% *}" - else - OBJC="$car" - fi - -else - OBJC= -fi - -# Restore the flags to the user specified values. -# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" -CFLAGS="$ORG_CFLAGS" -CXXFLAGS="$ORG_CXXFLAGS" -OBJCFLAGS="$ORG_OBJCFLAGS" - -# If we are not cross compiling, use the same compilers for -# building the build platform executables. -if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then - HOSTCC="$CC" - HOSTCXX="$CXX" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. -set dummy ${ac_tool_prefix}ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LD"; then - ac_cv_prog_LD="$LD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LD="${ac_tool_prefix}ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LD=$ac_cv_prog_LD -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LD"; then - ac_ct_LD=$LD - # Extract the first word of "ld", so it can be a program name with args. -set dummy ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LD"; then - ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LD="ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LD=$ac_cv_prog_ac_ct_LD -if test -n "$ac_ct_LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 -$as_echo "$ac_ct_LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LD" = x; then - LD="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LD=$ac_ct_LD - fi -else - LD="$ac_cv_prog_LD" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$LD" - car="${tmp%% *}" - tmp="$LD EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - LD="$car ${cdr% *}" - else - LD="$car" - fi - -LDEXE="$LD" -LDCXX="$LD" -LDEXECXX="$LD" -# LDEXE is the linker to use, when creating executables. - -# Linking C++ libraries. - -# Linking C++ executables. - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AR" - car="${tmp%% *}" - tmp="$AR EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AR="$car ${cdr% *}" - else - AR="$car" - fi - -if test "x$BUILD_OS" = xmacosx; then - ARFLAGS="-r" -else - ARFLAGS="" -fi - - -COMPILER_NAME=gcc -COMPILER_TYPE=CC -if test "x$BUILD_OS" = xwindows; then : - - # For now, assume that we are always compiling using cl.exe. - CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-Fe - LD_OUT_OPTION=-out: - AR_OUT_OPTION=-out: - # On Windows, reject /usr/bin/link, which is a cygwin - # program for something completely different. - # Extract the first word of "link", so it can be a program name with args. -set dummy link; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_WINLD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$WINLD"; then - ac_cv_prog_WINLD="$WINLD" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/link"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_WINLD="link" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_WINLD - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set WINLD to just the basename; use the full file name. - shift - ac_cv_prog_WINLD="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -WINLD=$ac_cv_prog_WINLD -if test -n "$WINLD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINLD" >&5 -$as_echo "$WINLD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Since we must ignore the first found link, WINLD will contain - # the full path to the link.exe program. - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINLD" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINLD"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINLD="$tmp" - - LD="$WINLD" - # However creating executables can only be done with cl.exe. - LDEXE="$CC" - LDCXX="$WINLD" - LDEXECXX="$CC" - - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_MT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MT"; then - ac_cv_prog_MT="$MT" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/mt"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_MT="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_MT - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set MT to just the basename; use the full file name. - shift - ac_cv_prog_MT="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -MT=$ac_cv_prog_MT -if test -n "$MT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MT" >&5 -$as_echo "$MT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$MT" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$MT"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - MT="$tmp" - - # The resource compiler - # Extract the first word of "rc", so it can be a program name with args. -set dummy rc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RC"; then - ac_cv_prog_RC="$RC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/rc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_RC="rc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_RC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set RC to just the basename; use the full file name. - shift - ac_cv_prog_RC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -RC=$ac_cv_prog_RC -if test -n "$RC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 -$as_echo "$RC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$RC" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$RC"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - RC="$tmp" - - - RC_FLAGS="/l 0x409 /r" - if test "x$VARIANT" = xOPT; then : - - RC_FLAGS="$RC_FLAGS -d NDEBUG" - -fi - JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION - if test "x$JDK_UPDATE_VERSION" = x; then : - - JDK_UPDATE_VERSION_NOTNULL=0 - -fi - RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" - - # lib.exe is used to create static libraries. - # Extract the first word of "lib", so it can be a program name with args. -set dummy lib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_WINAR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$WINAR"; then - ac_cv_prog_WINAR="$WINAR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_WINAR="lib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -WINAR=$ac_cv_prog_WINAR -if test -n "$WINAR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINAR" >&5 -$as_echo "$WINAR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINAR" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINAR"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINAR="$tmp" - - AR="$WINAR" - ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" - - # Extract the first word of "dumpbin", so it can be a program name with args. -set dummy dumpbin; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="dumpbin" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$DUMPBIN" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$DUMPBIN"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - DUMPBIN="$tmp" - - - COMPILER_TYPE=CL - CFLAGS="$CFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -dll -opt:ref -incremental:no " - if test "x$LEGACY_HOST_CPU1" = xi586; then - LDFLAGS="$LDFLAGS -safeseh" - fi - if test "x$DEBUG_LEVEL" != xrelease; then - LDFLAGS="$LDFLAGS -debug" - fi - -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CPP" - car="${tmp%% *}" - tmp="$CPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CPP="$car ${cdr% *}" - else - CPP="$car" - fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXXCPP" - car="${tmp%% *}" - tmp="$CXXCPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXXCPP="$car ${cdr% *}" - else - CXXCPP="$car" - fi - - -# Find the right assembler. -if test "x$BUILD_OS" = xsolaris; then - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_AS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $AS in - [\\/]* | ?:[\\/]*) - ac_cv_path_AS="$AS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -AS=$ac_cv_path_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AS" - car="${tmp%% *}" - tmp="$AS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AS="$car ${cdr% *}" - else - AS="$car" - fi - - ASFLAGS=" " -else - AS="$CC -c" - ASFLAGS=" " -fi - - - -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = macosx; then - # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. - # While waiting for a better solution, the current workaround is to use -mstackrealign. - CFLAGS="$CFLAGS -mstackrealign" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 32-bit compiler supports -mstackrealign" >&5 -$as_echo_n "checking if 32-bit compiler supports -mstackrealign... " >&6; } - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main() { return 0; } -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path." "$LINENO" 5 - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$BUILD_OS" = xsolaris; then - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $NM in - [\\/]* | ?:[\\/]*) - ac_cv_path_NM="$NM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NM=$ac_cv_path_NM -if test -n "$NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 -$as_echo "$NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi - - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $STRIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -STRIP=$ac_cv_path_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi - - # Extract the first word of "mcs", so it can be a program name with args. -set dummy mcs; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MCS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MCS in - [\\/]* | ?:[\\/]*) - ac_cv_path_MCS="$MCS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MCS=$ac_cv_path_MCS -if test -n "$MCS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 -$as_echo "$MCS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MCS" - car="${tmp%% *}" - tmp="$MCS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MCS="$car ${cdr% *}" - else - MCS="$car" - fi - -else - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. -set dummy ${ac_tool_prefix}nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - ac_cv_prog_NM="$NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NM="${ac_tool_prefix}nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NM=$ac_cv_prog_NM -if test -n "$NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 -$as_echo "$NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NM"; then - ac_ct_NM=$NM - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NM"; then - ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NM="nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NM=$ac_cv_prog_ac_ct_NM -if test -n "$ac_ct_NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 -$as_echo "$ac_ct_NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NM" = x; then - NM="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NM=$ac_ct_NM - fi -else - NM="$ac_cv_prog_NM" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi - -fi - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$BUILD_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 -$as_echo_n "checking if uncygdrive can be created... " >&6; } - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive1.log - as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 -$as_echo "$UNCYGDRIVE" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 -$as_echo_n "checking if uncygdrive.exe works... " >&6; } - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive2.log - as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj -fi - - - - - # Check whether --enable-ccache was given. -if test "${enable_ccache+set}" = set; then : - enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} -else - ENABLE_CCACHE=yes -fi - - if test "x$ENABLE_CCACHE" = xyes; then - # Extract the first word of "ccache", so it can be a program name with args. -set dummy ccache; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CCACHE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CCACHE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CCACHE=$ac_cv_path_CCACHE -if test -n "$CCACHE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 -$as_echo "$CCACHE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 -$as_echo_n "checking for ccache... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 -$as_echo "explicitly disabled" >&6; } - CCACHE= - fi - - - -# Check whether --with-ccache-dir was given. -if test "${with_ccache_dir+set}" = set; then : - withval=$with_ccache_dir; -fi - - - if test "x$with_ccache_dir" != x; then - # When using a non home ccache directory, assume the use is to share ccache files - # with other users. Thus change the umask. - SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" - fi - CCACHE_FOUND="" - if test "x$CCACHE" != x; then - - if test "x$CCACHE" != x; then - CCACHE_FOUND="true" - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 -$as_echo_n "checking if ccache supports precompiled headers... " >&6; } - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 -$as_echo "no, disabling ccache" >&6; } - CCACHE= - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5 -$as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; } - PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - CC_KNOWS_CCACHE_TRICK=yes -else - CC_KNOWS_CCACHE_TRICK=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXXFLAGS="$PUSHED_FLAGS" - if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 -$as_echo "no, disabling ccaching of precompiled headers" >&6; } - CCACHE= - fi - fi - fi - - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess - - if test "x$SET_CCACHE_DIR" != x; then - mkdir -p $CCACHE_DIR > /dev/null 2>&1 - chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 - fi - fi - - fi - - -# Used on GNU/Linux systems, can be empty... -#AC_PATH_PROG(ELFDUMP, elfdump) - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' - - - -############################################################################### -# -# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. -# (The JVM can use 32 or 64 bit Java pointers but that decision -# is made at runtime.) -# - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 -$as_echo_n "checking size of int *... " >&6; } -if test "${ac_cv_sizeof_int_p+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (int *) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_int_p=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 -$as_echo "$ac_cv_sizeof_int_p" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT_P $ac_cv_sizeof_int_p -_ACEOF - - -if test "x$ac_cv_sizeof_int_p" = x0; then - # The test failed, lets pick the assumed value. - ARCH_DATA_MODEL=$HOST_CPU_BITS -else - ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` -fi - -if test "x$ARCH_DATA_MODEL" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for host address size" >&5 -$as_echo_n "checking for host address size... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH_DATA_MODEL bits" >&5 -$as_echo "$ARCH_DATA_MODEL bits" >&6; } -LP64=$A_LP64 - - - -if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then - as_fn_error $? "The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)" "$LINENO" 5 -fi - -############################################################################### -# -# Can the C/C++ compiler use precompiled headers? -# -# Check whether --enable-precompiled-headers was given. -if test "${enable_precompiled_headers+set}" = set; then : - enableval=$enable_precompiled_headers; ENABLE_PRECOMPH=${enable_precompiled-headers} -else - ENABLE_PRECOMPH=yes -fi - - -USE_PRECOMPILED_HEADER=1 -if test "x$ENABLE_PRECOMPH" = xno; then - USE_PRECOMPILED_HEADER=0 -fi - -if test "x$ENABLE_PRECOMPH" = xyes; then - # Check that the compiler actually supports precomp headers. - if test "x$GCC" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking that precompiled headers work" >&5 -$as_echo_n "checking that precompiled headers work... " >&6; } - echo "int alfa();" > conftest.h - $CXX -x c++-header conftest.h -o conftest.hpp.gch - if test ! -f conftest.hpp.gch; then - echo Precompiled header is not working! - USE_PRECOMPILED_HEADER=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rm -f conftest.h - fi -fi - - - -############################################################################### -# -# How to compile shared libraries. -# - -if test "x$GCC" = xyes; then - COMPILER_NAME=gcc - PICFLAG="-fPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-shared" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$(JDK_TOPDIR)/$1' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' - LD="$CC" - LDEXE="$CC" - LDCXX="$CXX" - LDEXECXX="$CXX" - - # Linking is different on MacOSX - if test "x$BUILD_OS" = xmacosx; then - # Might change in the future to clang. - COMPILER_NAME=gcc - SHARED_LIBRARY='lib$1.dylib' - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" - SHARED_LIBRARY_SUFFIX='.dylib' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' - fi -else - if test "x$BUILD_OS" = xsolaris; then - # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler - COMPILER_NAME=ossc - PICFLAG="-KPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-G" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $(JDK_TOPDIR)/$1' - SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' - CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' - fi - if test "x$BUILD_OS" = xwindows; then - # If it is not gcc, then assume it is the MS Visual Studio compiler - COMPILER_NAME=cl - PICFLAG="" - LIBRARY_PREFIX= - SHARED_LIBRARY='$1.dll' - STATIC_LIBRARY='$1.lib' - SHARED_LIBRARY_FLAGS="-LD" - SHARED_LIBRARY_SUFFIX='.dll' - STATIC_LIBRARY_SUFFIX='.lib' - OBJ_SUFFIX='.obj' - EXE_SUFFIX='.exe' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='' - fi -fi - - - - - - - - - - - - - -# The (cross) compiler is now configured, we can now test capabilities -# of the host platform. - -############################################################################### -# -# Is the host little of big endian? -# - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - ENDIAN="big";; #( - no) - ENDIAN="little" ;; #( - universal) - ENDIAN="universal" - ;; #( - *) - ENDIAN="unknown" ;; - esac - - -if test "x$ENDIAN" = xuniversal; then - as_fn_error $? "It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?" "$LINENO" 5 -fi -if test "x$ENDIAN" = xunknown; then - ENDIAN="$HOST_CPU_ENDIAN" -fi -if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&5 -$as_echo "$as_me: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&2;} - ENDIAN="$HOST_CPU_ENDIAN" -fi - - -############################################################################### -# -# We need a Boot JDK to bootstrap the build. -# -BOOT_JDK_FOUND=no - -# Check whether --with-boot-jdk was given. -if test "${with_boot_jdk+set}" = set; then : - withval=$with_boot_jdk; -fi - - -if test "x$with_boot_jdk" != x; then - BOOT_JDK=$with_boot_jdk - BOOT_JDK_FOUND=yes -fi -if test "x$BOOT_JDK_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_bootjdk_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_bootjdk_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_bootjdk_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The bootjdk comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_bootjdk} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for bootjdk" >&5 -$as_echo "$as_me: Using builddeps $resource for bootjdk" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# bootjdk is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency bootjdk from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency bootjdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/bootjdk.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_bootjdk_ROOT} - thecflags=${builddep_bootjdk_CFLAGS} - thelibs=${builddep_bootjdk_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency bootjdk" "$LINENO" 5 - fi - BOOT_JDK=$depdir - if test "x$theroot" != x; then - BOOT_JDK="$theroot" - fi - if test "x$thecflags" != x; then - BOOT_JDK_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - BOOT_JDK_LIBS="$thelibs" - fi - BOOT_JDK_FOUND=yes - else BOOT_JDK_FOUND=no - - fi - else BOOT_JDK_FOUND=no - - fi - -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - if test "x$JAVA_HOME" != x; then - if test ! -d "$JAVA_HOME"; then - as_fn_error $? "Your JAVA_HOME points to a non-existing directory!" "$LINENO" 5 - fi - # Aha, the user has set a JAVA_HOME - # let us use that as the Boot JDK. - BOOT_JDK=$JAVA_HOME - BOOT_JDK_FOUND=yes - # To be on the safe side, lets check that it is a JDK. - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - else - as_fn_error $? "Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK." "$LINENO" 5 - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Extract the first word of "javac", so it can be a program name with args. -set dummy javac; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVAC_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVAC_CHECK="$JAVAC_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVAC_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVAC_CHECK=$ac_cv_path_JAVAC_CHECK -if test -n "$JAVAC_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC_CHECK" >&5 -$as_echo "$JAVAC_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Extract the first word of "java", so it can be a program name with args. -set dummy java; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVA_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVA_CHECK=$ac_cv_path_JAVA_CHECK -if test -n "$JAVA_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 -$as_echo "$JAVA_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - BINARY="$JAVAC_CHECK" - if test "x$JAVAC_CHECK" = x; then - BINARY="$JAVA_CHECK" - fi - if test "x$BINARY" != x; then - # So there is a java(c) binary, it might be part of a JDK. - # Lets find the JDK/JRE directory by following symbolic links. - # Linux/GNU systems often have links from /usr/bin/java to - # /etc/alternatives/java to the real JDK binary. - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$BINARY" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$BINARY"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - BINARY="$tmp" - - - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - BINARY=`$READLINK -f $BINARY` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $BINARY` - FIL=`basename $BINARY` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - BINARY=$DIR/$FIL - fi - fi - - BOOT_JDK=`dirname $BINARY` - BOOT_JDK=`cd $BOOT_JDK/..; pwd` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Try the MacOSX way. - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Extract the first word of "java", so it can be a program name with args. -set dummy java; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVA_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVA_CHECK=$ac_cv_path_JAVA_CHECK -if test -n "$JAVA_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 -$as_echo "$JAVA_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$JAVA_CHECK" != x; then - # There is a java in the path. But apparently we have not found a javac - # in the path, since that would have been tested earlier. - if test "x$HOST_OS" = xwindows; then - # Now if this is a windows platform. The default installation of a JDK - # actually puts the JRE in the path and keeps the JDK out of the path! - # Go look in the default installation location. - BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=yes - fi - fi - if test "x$BOOT_JDK_FOUND" = xno; then - help_on_build_dependency openjdk - as_fn_error $? "Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" "$LINENO" 5 - fi - else - help_on_build_dependency openjdk - as_fn_error $? "Could not find a JDK. $HELP_MSG" "$LINENO" 5 - fi -fi - - - if test "x$BUILD_OS" = "xwindows"; then - # Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - tmp="$BOOT_JDK" - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - BOOT_JDK="$tmp" - fi - - -# Now see if we can find the rt.jar, or its nearest equivalent. -BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" - - # Fail with message the path to the Boot JDK rt.jar (or nearest equivalent) if var BOOT_RTJAR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_RTJAR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - BOOT_RTJAR=`$CYGPATH -s -m -a "$BOOT_RTJAR"` - BOOT_RTJAR=`$CYGPATH -u "$BOOT_RTJAR"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK rt.jar (or nearest equivalent)! \"$BOOT_RTJAR\"" "$LINENO" 5 - fi - fi - - -BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" - - # Fail with message the path to the Boot JDK tools.jar (or nearest equivalent) if var BOOT_TOOLSJAR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_TOOLSJAR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - BOOT_TOOLSJAR=`$CYGPATH -s -m -a "$BOOT_TOOLSJAR"` - BOOT_TOOLSJAR=`$CYGPATH -u "$BOOT_TOOLSJAR"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK tools.jar (or nearest equivalent)! \"$BOOT_TOOLSJAR\"" "$LINENO" 5 - fi - fi - - -if test ! -f $BOOT_RTJAR; then - # On MacOSX it is called classes.jar - BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar - if test ! -f $BOOT_RTJAR; then - as_fn_error $? "Cannot find the rt.jar or its equivalent!" "$LINENO" 5 - fi - # Remove the .. - BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" - # The tools.jar is part of classes.jar - BOOT_TOOLSJAR="$BOOT_RTJAR" -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 -$as_echo_n "checking for Boot JDK... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 -$as_echo "$BOOT_JDK" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot rt.jar" >&5 -$as_echo_n "checking for Boot rt.jar... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_RTJAR" >&5 -$as_echo "$BOOT_RTJAR" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot tools.jar" >&5 -$as_echo_n "checking for Boot tools.jar... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_TOOLSJAR" >&5 -$as_echo "$BOOT_TOOLSJAR" >&6; } - -# Use the java tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 -$as_echo_n "checking for java in Boot JDK... " >&6; } -JAVA=$BOOT_JDK/bin/java -if test ! -x $JAVA; then - as_fn_error $? "Could not find a working java" "$LINENO" 5 -fi -BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes $BOOT_JDK_VERSION" >&5 -$as_echo "yes $BOOT_JDK_VERSION" >&6; } - - -# Extra M4 quote needed to protect [] in grep expression. -FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` -if test "x$FOUND_VERSION_78" = x; then - help_on_build_dependency openjdk - as_fn_error $? "Your bootjdk must be version 7 or 8. $HELP_MSG" "$LINENO" 5 -fi - -# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. -BOOT_JDK_SOURCETARGET="-source 7 -target 7" - - -# Use the javac tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 -$as_echo_n "checking for javac in Boot JDK... " >&6; } -JAVAC=$BOOT_JDK/bin/javac -if test ! -x $JAVAC; then - as_fn_error $? "Could not find a working javac" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - - -# Use the javac tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 -$as_echo_n "checking for javah in Boot JDK... " >&6; } -JAVAH=$BOOT_JDK/bin/javah -if test ! -x $JAVAH; then - as_fn_error $? "Could not find a working javah" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -# Use the jar tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 -$as_echo_n "checking for jar in Boot JDK... " >&6; } -JAR=$BOOT_JDK/bin/jar -if test ! -x $JAR; then - as_fn_error $? "Could not find a working jar" "$LINENO" 5 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -# Use the rmic tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 -$as_echo_n "checking for rmic in Boot JDK... " >&6; } -RMIC=$BOOT_JDK/bin/rmic -if test ! -x $RMIC; then - as_fn_error $? "Could not find a working rmic" "$LINENO" 5 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -############################################################################### -# -# Pickup additional source for a component from outside of the source root -# or override source for a component. -# - -# Check whether --with-add-source-root was given. -if test "${with_add_source_root+set}" = set; then : - withval=$with_add_source_root; -fi - - - -# Check whether --with-override-source-root was given. -if test "${with_override_source_root+set}" = set; then : - withval=$with_override_source_root; -fi - - - -# Check whether --with-adds-and-overrides was given. -if test "${with_adds_and_overrides+set}" = set; then : - withval=$with_adds_and_overrides; -fi - - -if test "x$with_adds_and_overrides" != x; then - with_add_source_root="$with_adds_and_overrides/adds" - with_override_source_root="$with_adds_and_overrides/overrides" -fi - -if test "x$with_add_source_root" != x; then - if ! test -d $with_add_source_root; then - as_fn_error $? "Trying to use a non-existant add-source-root $with_add_source_root" "$LINENO" 5 - fi - CURDIR="$PWD" - cd "$with_add_source_root" - ADD_SRC_ROOT="`pwd`" - cd "$CURDIR" - # Verify that the addon source root does not have any root makefiles. - # If it does, then it is usually an error, prevent this. - if test -f $with_add_source_root/langtools/makefiles/Makefile || \ - test -f $with_add_source_root/langtools/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/corba/makefiles/Makefile || \ - test -f $with_add_source_root/corba/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full corba repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ - test -f $with_add_source_root/jaxp/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ - test -f $with_add_source_root/jaxws/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ - test -f $with_add_source_root/hotspot/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jdk/makefiles/Makefile || \ - test -f $with_add_source_root/jdk/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources." "$LINENO" 5 - fi -fi - - -if test "x$with_override_source_root" != x; then - if ! test -d $with_override_source_root; then - as_fn_error $? "Trying to use a non-existant override-source-root $with_override_source_root" "$LINENO" 5 - fi - CURDIR="$PWD" - cd "$with_override_source_root" - OVERRIDE_SRC_ROOT="`pwd`" - cd "$CURDIR" - if test -f $with_override_source_root/langtools/makefiles/Makefile || \ - test -f $with_override_source_root/langtools/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/corba/makefiles/Makefile || \ - test -f $with_override_source_root/corba/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full corba repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ - test -f $with_override_source_root/jaxp/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ - test -f $with_override_source_root/jaxws/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ - test -f $with_override_source_root/hotspot/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jdk/makefiles/Makefile || \ - test -f $with_override_source_root/jdk/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override." "$LINENO" 5 - fi -fi - - -############################################################################### -# -# Override a repo completely, this is used for example when you have 3 small -# development sandboxes of the langtools sources and want to avoid having 3 full -# OpenJDK sources checked out on disk. -# -# Assuming that the 3 langtools sandboxes are located here: -# /home/fredrik/sandbox1/langtools -# /home/fredrik/sandbox2/langtools -# /home/fredrik/sandbox3/langtools -# -# From the source root you create build subdirs manually: -# mkdir -p build1 build2 build3 -# in each build directory run: -# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) -# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) -# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) -# - - -# Check whether --with-override-langtools was given. -if test "${with_override_langtools+set}" = set; then : - withval=$with_override_langtools; -fi - - - -# Check whether --with-override-corba was given. -if test "${with_override_corba+set}" = set; then : - withval=$with_override_corba; -fi - - - -# Check whether --with-override-jaxp was given. -if test "${with_override_jaxp+set}" = set; then : - withval=$with_override_jaxp; -fi - - - -# Check whether --with-override-jaxws was given. -if test "${with_override_jaxws+set}" = set; then : - withval=$with_override_jaxws; -fi - - - -# Check whether --with-override-hotspot was given. -if test "${with_override_hotspot+set}" = set; then : - withval=$with_override_hotspot; -fi - - - -# Check whether --with-override-jdk was given. -if test "${with_override_jdk+set}" = set; then : - withval=$with_override_jdk; -fi - - -if test "x$with_override_langtools" != x; then - CURDIR="$PWD" - cd "$with_override_langtools" - LANGTOOLS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override langtools with a full langtools repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if langtools should be overridden" >&5 -$as_echo_n "checking if langtools should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $LANGTOOLS_TOPDIR" >&5 -$as_echo "yes with $LANGTOOLS_TOPDIR" >&6; } -fi -if test "x$with_override_corba" != x; then - CURDIR="$PWD" - cd "$with_override_corba" - CORBA_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override corba with a full corba repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if corba should be overridden" >&5 -$as_echo_n "checking if corba should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $CORBA_TOPDIR" >&5 -$as_echo "yes with $CORBA_TOPDIR" >&6; } -fi -if test "x$with_override_jaxp" != x; then - CURDIR="$PWD" - cd "$with_override_jaxp" - JAXP_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override jaxp with a full jaxp repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxp should be overridden" >&5 -$as_echo_n "checking if jaxp should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXP_TOPDIR" >&5 -$as_echo "yes with $JAXP_TOPDIR" >&6; } -fi -if test "x$with_override_jaxws" != x; then - CURDIR="$PWD" - cd "$with_override_jaxws" - JAXWS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override jaxws with a full jaxws repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxws should be overridden" >&5 -$as_echo_n "checking if jaxws should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXWS_TOPDIR" >&5 -$as_echo "yes with $JAXWS_TOPDIR" >&6; } -fi -if test "x$with_override_hotspot" != x; then - CURDIR="$PWD" - cd "$with_override_hotspot" - HOTSPOT_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ - ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override hotspot with a full hotspot repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if hotspot should be overridden" >&5 -$as_echo_n "checking if hotspot should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $HOTSPOT_TOPDIR" >&5 -$as_echo "yes with $HOTSPOT_TOPDIR" >&6; } -fi -if test "x$with_override_jdk" != x; then - CURDIR="$PWD" - cd "$with_override_jdk" - JDK_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JDK_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override JDK with a full JDK repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JDK should be overridden" >&5 -$as_echo_n "checking if JDK should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JDK_TOPDIR" >&5 -$as_echo "yes with $JDK_TOPDIR" >&6; } -fi - -############################################################################### -# -# Specify options for anything that is run with the Boot JDK. -# - -# Check whether --with-boot-jdk-jvmargs was given. -if test "${with_boot_jdk_jvmargs+set}" = set; then : - withval=$with_boot_jdk_jvmargs; -fi - - -if test "x$with_boot_jdk_jvmargs" = x; then - # Not all JVM:s accept the same arguments on the command line. - # OpenJDK specific increase in thread stack for JDK build, - # well more specifically, when running javac. - if test "x$BUILD_NUM_BITS" = x32; then - STACK_SIZE=768 - else - # Running Javac on a JVM on a 64-bit machine, the stack takes more space - # since 64-bit pointers are pushed on the stach. Apparently, we need - # to increase the stack space when javacing the JDK.... - STACK_SIZE=1536 - fi - - # Minimum amount of heap memory. - - # Test if -Xms64M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xms64M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xms64M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xms64M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M" - fi - - if test "x$HOST_OS" = "xmacosx"; then - # Why does macosx need more heap? Its the huge JDK batch. - - # Test if -Xmx1600M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xmx1600M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xmx1600M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xmx1600M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1600M" - fi - - else - - # Test if -Xmx1100M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xmx1100M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xmx1100M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xmx1100M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1100M" - fi - - fi - # When is adding -client something that speeds up the JVM? - # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) - - # Test if -XX:PermSize=32m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:PermSize=32m to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:PermSize=32m -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:PermSize=32m -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:PermSize=32m" - fi - - - # Test if -XX:MaxPermSize=160m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:MaxPermSize=160m to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:MaxPermSize=160m" - fi - - - # Test if -XX:ThreadStackSize=$STACK_SIZE is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:ThreadStackSize=$STACK_SIZE to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE" - fi - - # Disable special log output when a debug build is used as Boot JDK... - - # Test if -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput" - fi - -fi - -BOOT_JDK_JVMARGS=$boot_jdk_jvmargs - - - -# Check whether --with-server-java was given. -if test "${with_server_java+set}" = set; then : - withval=$with_server_java; -fi - - -if test "x$with_server_java" != x; then - SERVER_JAVA="$with_server_java" - FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" = x; then - as_fn_error $? "Could not execute server java: $SERVER_JAVA" "$LINENO" 5 - fi -else - SERVER_JAVA="" - # Hotspot specific options. - - # Test if -XX:+UseParallelOldGC is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:+UseParallelOldGC to SERVER_JAVA - FOUND_WARN=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -XX:+UseParallelOldGC" - fi - - - # Test if -verbosegc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -verbosegc to SERVER_JAVA - FOUND_WARN=`$JAVA -verbosegc -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -verbosegc -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -verbosegc" - fi - - # JRockit specific options. - - # Test if -Xverbose:gc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xverbose:gc to SERVER_JAVA - FOUND_WARN=`$JAVA -Xverbose:gc -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xverbose:gc -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xverbose:gc" - fi - - SERVER_JAVA="$JAVA $SERVER_JAVA" -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use shared server for javac" >&5 -$as_echo_n "checking whether to use shared server for javac... " >&6; } -# Check whether --enable-javac-server was given. -if test "${enable_javac_server+set}" = set; then : - enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}" -else - ENABLE_JAVAC_SERVER='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_SERVER" >&5 -$as_echo "$ENABLE_JAVAC_SERVER" >&6; } -if test "x$ENABLE_JAVAC_SERVER" = xyes; then - JAVAC_USE_REMOTE=true - JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" -else - JAVAC_USE_REMOTE=false - JAVAC_SERVERS= -fi - - - - -# Check whether --with-javac-server-cores was given. -if test "${with_javac_server_cores+set}" = set; then : - withval=$with_javac_server_cores; -fi - -if test "x$with_javac_server_cores" != x; then - JAVAC_SERVER_CORES="$with_javac_server_cores" -else - if test "$NUM_CORES" -gt 16; then - # We set this arbitrary limit because we want to limit the heap - # size of the javac server. - # In the future we will make the javac compilers in the server - # share more and more state, thus enabling us to use more and - # more concurrent threads in the server. - JAVAC_SERVER_CORES="16" - else - JAVAC_SERVER_CORES="$NUM_CORES" - fi - - if test "$MEMORY_SIZE" -gt "17000"; then - MAX_HEAP_MEM=10000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms10G -Xmx10G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms10G -Xmx10G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms10G -Xmx10G" - fi - - - # Test if -Xmn2G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn2G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn2G" - fi - - elif test "$MEMORY_SIZE" -gt "10000"; then - MAX_HEAP_MEM=6000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms6G -Xmx6G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms6G -Xmx6G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms6G -Xmx6G" - fi - - - # Test if -Xmn1G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn1G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn1G" - fi - - elif test "$MEMORY_SIZE" -gt "5000"; then - MAX_HEAP_MEM=3000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms1G -Xmx3G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms1G -Xmx3G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx3G" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "3800"; then - MAX_HEAP_MEM=2500 - - # Test if -Xms1G -Xmx2500M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms1G -Xmx2500M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx2500M" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "1900"; then - MAX_HEAP_MEM=1200 - - # Test if -Xms700M -Xmx1200M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms700M -Xmx1200M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms700M -Xmx1200M" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "1000"; then - MAX_HEAP_MEM=900 - - # Test if -Xms400M -Xmx900M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms400M -Xmx900M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms400M -Xmx900M" - fi - - - # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn128M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn128M" - fi - - else - MAX_HEAP_MEM=512 - - # Test if -Xms256M -Xmx512M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms256M -Xmx512M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms256M -Xmx512M" - fi - - - # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn128M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn128M" - fi - - fi - - MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` - if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if number of server cores must be reduced" >&5 -$as_echo_n "checking if number of server cores must be reduced... " >&6; } - JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&5 -$as_echo "yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&6; } - fi -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to track dependencies between Java packages" >&5 -$as_echo_n "checking whether to track dependencies between Java packages... " >&6; } -# Check whether --enable-javac-deps was given. -if test "${enable_javac_deps+set}" = set; then : - enableval=$enable_javac_deps; ENABLE_JAVAC_DEPS="${enableval}" -else - ENABLE_JAVAC_DEPS='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_DEPS" >&5 -$as_echo "$ENABLE_JAVAC_DEPS" >&6; } -if test "x$ENABLE_JAVAC_DEPS" = xyes; then - JAVAC_USE_DEPS=true -else - JAVAC_USE_DEPS=false -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use multiple cores for javac compilation" >&5 -$as_echo_n "checking whether to use multiple cores for javac compilation... " >&6; } -# Check whether --enable-javac-multi-core was given. -if test "${enable_javac_multi_core+set}" = set; then : - enableval=$enable_javac_multi_core; ENABLE_JAVAC_MULTICORE="${enableval}" -else - ENABLE_JAVAC_MULTICORE='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_MULTICORE" >&5 -$as_echo "$ENABLE_JAVAC_MULTICORE" >&6; } -if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then - JAVAC_USE_MODE=MULTI_CORE_CONCURRENT -else - JAVAC_USE_MODE=SINGLE_THREADED_BATCH - if test "x$ENABLE_JAVAC_DEPS" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&5 -$as_echo "$as_me: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling dependency tracking for you now." >&5 -$as_echo "$as_me: WARNING: Disabling dependency tracking for you now." >&2;} - JAVAC_USE_DEPS=false - fi - if test "x$ENABLE_JAVAC_SERVER" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&5 -$as_echo "$as_me: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling javac server for you now." >&5 -$as_echo "$as_me: WARNING: Disabling javac server for you now." >&2;} - JAVAC_USE_REMOTE=false - fi -fi - - -############################################################################### -# -# OS specific settings that we never will need to probe. -# -if test "x$HOST_OS" = xlinux; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Linux?" >&5 -$as_echo_n "checking what is not needed on Linux?... " >&6; } - PULSE_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: pulse" >&5 -$as_echo "pulse" >&6; } -fi - -if test "x$HOST_OS" = xsolaris; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Solaris?" >&5 -$as_echo_n "checking what is not needed on Solaris?... " >&6; } - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 -$as_echo "alsa pulse" >&6; } -fi - -if test "x$HOST_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 -$as_echo_n "checking what is not needed on Windows?... " >&6; } - CUPS_NOT_NEEDED=yes - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa cups pulse x11" >&5 -$as_echo "alsa cups pulse x11" >&6; } -fi - -if test "x$HOST_OS" = xmacosx; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on MacOSX?" >&5 -$as_echo_n "checking what is not needed on MacOSX?... " >&6; } - 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. - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse x11" >&5 -$as_echo "alsa pulse x11" >&6; } -fi - -if test "x$HOST_OS" = xbsd; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on bsd?" >&5 -$as_echo_n "checking what is not needed on bsd?... " >&6; } - ALSA_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa" >&5 -$as_echo "alsa" >&6; } -fi - -############################################################################### -# -# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM -# that uses this API. -# -# Check whether --enable-macosx-runtime-support was given. -if test "${enable_macosx_runtime_support+set}" = set; then : - enableval=$enable_macosx_runtime_support; MACOSX_RUNTIME_SUPPORT="${enableval}" -else - MACOSX_RUNTIME_SUPPORT="no" -fi - - -USE_MACOSX_RUNTIME_SUPPORT=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit Java runtime support in the OS" >&5 -$as_echo_n "checking for explicit Java runtime support in the OS... " >&6; } -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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, does not need alsa freetype2 pulse and X11" >&5 -$as_echo "yes, does not need alsa freetype2 pulse and X11" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, but explicitly disabled." >&5 -$as_echo "yes, but explicitly disabled." >&6; } - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -if test "x$HOST_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on an X11 build on MacOSX?" >&5 -$as_echo_n "checking what is not needed on an X11 build on MacOSX?... " >&6; } - X11_NOT_NEEDED= - FREETYPE2_NOT_NEEDED= - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 -$as_echo "alsa pulse" >&6; } -fi - -############################################################################### -# -# Check for X Windows -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 -$as_echo_n "checking for X... " >&6; } - - -# Check whether --with-x was given. -if test "${with_x+set}" = set; then : - withval=$with_x; -fi - -# $have_x is `yes', `no', `disabled', or empty when we do not yet know. -if test "x$with_x" = xno; then - # The user explicitly disabled X. - have_x=disabled -else - case $x_includes,$x_libraries in #( - *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #( - *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # One or both of the vars are not set, and there is no cached value. -ac_x_includes=no ac_x_libraries=no -rm -f -r conftest.dir -if mkdir conftest.dir; then - cd conftest.dir - cat >Imakefile <<'_ACEOF' -incroot: - @echo incroot='${INCROOT}' -usrlibdir: - @echo usrlibdir='${USRLIBDIR}' -libdir: - @echo libdir='${LIBDIR}' -_ACEOF - if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then - # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. - for ac_var in incroot usrlibdir libdir; do - eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" - done - # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. - for ac_extension in a so sl dylib la dll; do - if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && - test -f "$ac_im_libdir/libX11.$ac_extension"; then - ac_im_usrlibdir=$ac_im_libdir; break - fi - done - # Screen out bogus values from the imake configuration. They are - # bogus both because they are the default anyway, and because - # using them would break gcc on systems where it needs fixed includes. - case $ac_im_incroot in - /usr/include) ac_x_includes= ;; - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; - esac - case $ac_im_usrlibdir in - /usr/lib | /usr/lib64 | /lib | /lib64) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; - esac - fi - cd .. - rm -f -r conftest.dir -fi - -# Standard set of common directories for X headers. -# Check X11 before X11Rn because it is often a symlink to the current release. -ac_x_header_dirs=' -/usr/X11/include -/usr/X11R7/include -/usr/X11R6/include -/usr/X11R5/include -/usr/X11R4/include - -/usr/include/X11 -/usr/include/X11R7 -/usr/include/X11R6 -/usr/include/X11R5 -/usr/include/X11R4 - -/usr/local/X11/include -/usr/local/X11R7/include -/usr/local/X11R6/include -/usr/local/X11R5/include -/usr/local/X11R4/include - -/usr/local/include/X11 -/usr/local/include/X11R7 -/usr/local/include/X11R6 -/usr/local/include/X11R5 -/usr/local/include/X11R4 - -/usr/X386/include -/usr/x386/include -/usr/XFree86/include/X11 - -/usr/include -/usr/local/include -/usr/unsupported/include -/usr/athena/include -/usr/local/x11r5/include -/usr/lpp/Xamples/include - -/usr/openwin/include -/usr/openwin/share/include' - -if test "$ac_x_includes" = no; then - # Guess where to find include files, by looking for Xlib.h. - # First, try using that file with no special directory specified. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # We can compile using X headers with no special include directory. -ac_x_includes= -else - for ac_dir in $ac_x_header_dirs; do - if test -r "$ac_dir/X11/Xlib.h"; then - ac_x_includes=$ac_dir - break - fi -done -fi -rm -f conftest.err conftest.i conftest.$ac_ext -fi # $ac_x_includes = no - -if test "$ac_x_libraries" = no; then - # Check for the libraries. - # See if we find them without any special options. - # Don't add to $LIBS permanently. - ac_save_LIBS=$LIBS - LIBS="-lX11 $LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -XrmInitialize () - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - LIBS=$ac_save_LIBS -# We can link X programs with no special library path. -ac_x_libraries= -else - LIBS=$ac_save_LIBS -for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` -do - # Don't even attempt the hair of trying to link an X program! - for ac_extension in a so sl dylib la dll; do - if test -r "$ac_dir/libX11.$ac_extension"; then - ac_x_libraries=$ac_dir - break 2 - fi - done -done -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi # $ac_x_libraries = no - -case $ac_x_includes,$ac_x_libraries in #( - no,* | *,no | *\'*) - # Didn't find X, or a directory has "'" in its name. - ac_cv_have_x="have_x=no";; #( - *) - # Record where we found X for the cache. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$ac_x_includes'\ - ac_x_libraries='$ac_x_libraries'" -esac -fi -;; #( - *) have_x=yes;; - esac - eval "$ac_cv_have_x" -fi # $with_x != no - -if test "$have_x" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 -$as_echo "$have_x" >&6; } - no_x=yes -else - # If each of the values was on the command line, it overrides each guess. - test "x$x_includes" = xNONE && x_includes=$ac_x_includes - test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries - # Update the cache value to reflect the command line values. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$x_includes'\ - ac_x_libraries='$x_libraries'" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 -$as_echo "libraries $x_libraries, headers $x_includes" >&6; } -fi - -if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. - -$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h - - X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= -else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - # For Solaris; some versions of Sun CC require a space after -R and - # others require no space. Words are not sufficient . . . . - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 -$as_echo_n "checking whether -R must be followed by a space... " >&6; } - ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" - ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - X_LIBS="$X_LIBS -R$x_libraries" -else - LIBS="$ac_xsave_LIBS -R $x_libraries" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - X_LIBS="$X_LIBS -R $x_libraries" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 -$as_echo "neither works" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag - LIBS=$ac_xsave_LIBS - fi - - # Check for system-dependent libraries X programs must link with. - # Do this before checking for the system-independent R6 libraries - # (-lICE), since we may need -lsocket or whatever for X linking. - - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn Johnson says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And Karl Berry says - # the Alpha needs dnet_stub (dnet does not exist). - ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XOpenDisplay (); -int -main () -{ -return XOpenDisplay (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } -if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dnet_dnet_ntoa=yes -else - ac_cv_lib_dnet_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" -fi - - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } -if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet_stub $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dnet_stub_dnet_ntoa=yes -else - ac_cv_lib_dnet_stub_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" -fi - - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$ac_xsave_LIBS" - - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) - # needs -lnsl. - # The nsl library prevents programs from opening the X display - # on Irix 5.2, according to T.E. Dickey. - # The functions gethostbyname, getservbyname, and inet_addr are - # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. - ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = x""yes; then : - -fi - - if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 -$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyname=yes -else - ac_cv_lib_nsl_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" -fi - - if test $ac_cv_lib_nsl_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_bsd_gethostbyname=yes -else - ac_cv_lib_bsd_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - - fi - fi - - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT - # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary - # on later versions), says Simon Leinen: it contains gethostby* - # variants that don't use the name server (or something). -lsocket - # must be given before -lnsl if both are needed. We assume that - # if connect needs -lnsl, so does gethostbyname. - ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect" -if test "x$ac_cv_func_connect" = x""yes; then : - -fi - - if test $ac_cv_func_connect = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 -$as_echo_n "checking for connect in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_connect+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char connect (); -int -main () -{ -return connect (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_socket_connect=yes -else - ac_cv_lib_socket_connect=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 -$as_echo "$ac_cv_lib_socket_connect" >&6; } -if test "x$ac_cv_lib_socket_connect" = x""yes; then : - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" -fi - - fi - - # Guillermo Gomez says -lposix is necessary on A/UX. - ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove" -if test "x$ac_cv_func_remove" = x""yes; then : - -fi - - if test $ac_cv_func_remove = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 -$as_echo_n "checking for remove in -lposix... " >&6; } -if test "${ac_cv_lib_posix_remove+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char remove (); -int -main () -{ -return remove (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_posix_remove=yes -else - ac_cv_lib_posix_remove=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 -$as_echo "$ac_cv_lib_posix_remove" >&6; } -if test "x$ac_cv_lib_posix_remove" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" -fi - - fi - - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = x""yes; then : - -fi - - if test $ac_cv_func_shmat = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 -$as_echo_n "checking for shmat in -lipc... " >&6; } -if test "${ac_cv_lib_ipc_shmat+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lipc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shmat (); -int -main () -{ -return shmat (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_ipc_shmat=yes -else - ac_cv_lib_ipc_shmat=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 -$as_echo "$ac_cv_lib_ipc_shmat" >&6; } -if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" -fi - - fi - fi - - # Check for libraries that X11R6 Xt/Xaw programs need. - ac_save_LDFLAGS=$LDFLAGS - test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # John Interrante, Karl Berry - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 -$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } -if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lICE $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char IceConnectionNumber (); -int -main () -{ -return IceConnectionNumber (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_ICE_IceConnectionNumber=yes -else - ac_cv_lib_ICE_IceConnectionNumber=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } -if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : - X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" -fi - - LDFLAGS=$ac_save_LDFLAGS - -fi - - -if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5 -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$HOST_OS" = xlinux; then - if test -d "$SYS_ROOT/usr/X11R6"; then - OPENWIN_HOME="$SYS_ROOT/usr/X11R6" - fi - if test -d "$SYS_ROOT/usr/include/X11"; then - OPENWIN_HOME="$SYS_ROOT/usr" - fi -fi -if test "x$HOST_OS" = xsolaris; then - OPENWIN_HOME="/usr/openwin" -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $X_CFLAGS" - - -for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - X11_A_OK=yes -else - X11_A_OK=no -fi - -done - -CFLAGS="$OLD_CFLAGS" -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5 -fi - -############################################################################### -# -# The common unix printing system cups is used to print from java. -# - -# Check whether --with-cups was given. -if test "${with_cups+set}" = set; then : - withval=$with_cups; -fi - - -# Check whether --with-cups-include was given. -if test "${with_cups_include+set}" = set; then : - withval=$with_cups_include; -fi - - -# Check whether --with-cups-lib was given. -if test "${with_cups_lib+set}" = set; then : - withval=$with_cups_lib; -fi - - -if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x$with_cups" != x || test "x$with_cups-include" != x || test "x$with_cups-lib" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 -$as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} - fi - CUPS_CFLAGS= - CUPS_LIBS= -else - CUPS_FOUND=no - - if test "x$with_cups" = xno || test "x$with_cups-include" = xno || test "x$with_cups-lib" = xno; then - as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 - fi - - if test "x$with_cups" != x; then - CUPS_LIBS="-L$with_cups/lib -lcups" - CUPS_CFLAGS="-I$with_cups/include" - CUPS_FOUND=yes - fi - if test "x$with_cups-include" != x; then - CUPS_CFLAGS="-I$with_cups-include" - CUPS_FOUND=yes - fi - if test "x$with_cups-lib" != x; then - CUPS_LIBS="-L$with_cups-lib -lcups" - CUPS_FOUND=yes - fi - if test "x$CUPS_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_cups_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_cups_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_cups_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The cups comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_cups} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for cups" >&5 -$as_echo "$as_me: Using builddeps $resource for cups" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# cups is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/cups.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_cups_ROOT} - thecflags=${builddep_cups_CFLAGS} - thelibs=${builddep_cups_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency cups" "$LINENO" 5 - fi - CUPS=$depdir - if test "x$theroot" != x; then - CUPS="$theroot" - fi - if test "x$thecflags" != x; then - CUPS_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - CUPS_LIBS="$thelibs" - fi - CUPS_FOUND=yes - - fi - - fi - - fi - if test "x$CUPS_FOUND" = xno; then - # Are the cups headers installed in the default /usr/include location? - for ac_header in cups/cups.h cups/ppd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - CUPS_FOUND=yes - CUPS_CFLAGS= - CUPS_LIBS="-lcups" - DEFAULT_CUPS=yes -fi - -done - - fi - if test "x$CUPS_FOUND" = xno; then - # Getting nervous now? Lets poke around for standard Solaris third-party - # package installation locations. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 -$as_echo_n "checking for cups headers and libs... " >&6; } - if test -s /opt/sfw/cups/include/cups/cups.h; then - # An SFW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" - elif test -s /opt/csw/include/cups/cups.h; then - # A CSW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 -$as_echo "$CUPS_FOUND" >&6; } - fi - if test "x$CUPS_FOUND" = xno; then - help_on_build_dependency cups - as_fn_error $? "Could not find cups! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - -############################################################################### -# -# The ubiquitous freetype2 library is used to render fonts. -# - -# Check whether --with-freetype was given. -if test "${with_freetype+set}" = set; then : - withval=$with_freetype; -fi - - -# 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 - -if test "x$FREETYPE2_NOT_NEEDED" = xyes; then - if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype not used, so --with-freetype is ignored" >&5 -$as_echo "$as_me: WARNING: freetype not used, so --with-freetype is ignored" >&2;} - fi - FREETYPE2_CFLAGS= - FREETYPE2_LIBS= - FREETYPE2_LIB_PATH= -else - FREETYPE2_FOUND=no - - if test "x$with_freetype" != x; then - - # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$with_freetype" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - with_freetype=`$CYGPATH -s -m -a "$with_freetype"` - with_freetype=`$CYGPATH -u "$with_freetype"` - else - as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 - fi - fi - - FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" - if test "x$HOST_OS" = xwindows; then - FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" - fi - FREETYPE2_LIB_PATH="$with_freetype/lib" - 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 - as_fn_error $? "Could not find the expected directories $with_freetype/lib and $with_freetype/include" "$LINENO" 5 - 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 - as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 - fi - # Check one h-file - if ! test -s "$with_freetype/include/ft2build.h"; then - as_fn_error $? "Could not find $with_freetype/include/ft2build.h" "$LINENO" 5 - fi - fi - fi - if test "x$FREETYPE2_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_freetype2_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The freetype2 comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_freetype2} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for freetype2" >&5 -$as_echo "$as_me: Using builddeps $resource for freetype2" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# freetype2 is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/freetype2.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_freetype2_ROOT} - thecflags=${builddep_freetype2_CFLAGS} - thelibs=${builddep_freetype2_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency freetype2" "$LINENO" 5 - fi - FREETYPE2=$depdir - if test "x$theroot" != x; then - FREETYPE2="$theroot" - fi - if test "x$thecflags" != x; then - FREETYPE2_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - FREETYPE2_LIBS="$thelibs" - fi - FREETYPE2_FOUND=yes - else FREETYPE2_FOUND=no - - fi - else FREETYPE2_FOUND=no - - fi - - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE2" >&5 -$as_echo_n "checking for FREETYPE2... " >&6; } - -if test -n "$FREETYPE2_CFLAGS"; then - pkg_cv_FREETYPE2_CFLAGS="$FREETYPE2_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FREETYPE2_LIBS"; then - pkg_cv_FREETYPE2_LIBS="$FREETYPE2_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` - else - FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FREETYPE2_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - FREETYPE2_FOUND=no -elif test $pkg_failed = untried; then - FREETYPE2_FOUND=no -else - FREETYPE2_CFLAGS=$pkg_cv_FREETYPE2_CFLAGS - FREETYPE2_LIBS=$pkg_cv_FREETYPE2_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - FREETYPE2_FOUND=yes -fi - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 -$as_echo_n "checking for freetype in some standard locations... " >&6; } - - if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" - DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" - fi - if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" - DEFAULT_FREETYPE_LIBS="-lfreetype" - fi - - PREV_CXXCFLAGS="$CXXFLAGS" - PREV_LDFLAGS="$LDFLAGS" - CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" - LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include FT_FREETYPE_H - int main() { return 0; } - -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - # Yes, the default cflags and libs did the trick. - FREETYPE2_FOUND=yes - FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" - FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" - -else - - FREETYPE2_FOUND=no - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CXXCFLAGS="$PREV_CXXFLAGS" - LDFLAGS="$PREV_LDFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 -$as_echo "$FREETYPE2_FOUND" >&6; } - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - help_on_build_dependency freetype2 - as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - - - -############################################################################### -# -# Check for alsa headers and libraries. Used on Linux/GNU systems. -# - -# Check whether --with-alsa was given. -if test "${with_alsa+set}" = set; then : - withval=$with_alsa; -fi - - -# Check whether --with-alsa-include was given. -if test "${with_alsa_include+set}" = set; then : - withval=$with_alsa_include; -fi - - -# Check whether --with-alsa-lib was given. -if test "${with_alsa_lib+set}" = set; then : - withval=$with_alsa_lib; -fi - - -if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x$with_alsa" != x || test "x$with_alsa-include" != x || test "x$with_alsa-lib" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5 -$as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;} - fi - ALSA_CFLAGS= - ALSA_LIBS= -else - ALSA_FOUND=no - - if test "x$with_alsa" = xno || test "x$with_alsa-include" = xno || test "x$with_alsa-lib" = xno; then - as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5 - fi - - if test "x$with_alsa" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" - ALSA_CFLAGS="-I$with_alsa/include" - ALSA_FOUND=yes - fi - if test "x$with_alsa-include" != x; then - ALSA_CFLAGS="-I$with_alsa/include" - ALSA_FOUND=yes - fi - if test "x$with_alsa-lib" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" - ALSA_FOUND=yes - fi - if test "x$ALSA_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_alsa_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The alsa comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_alsa} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for alsa" >&5 -$as_echo "$as_me: Using builddeps $resource for alsa" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# alsa is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/alsa.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_alsa_ROOT} - thecflags=${builddep_alsa_CFLAGS} - thelibs=${builddep_alsa_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency alsa" "$LINENO" 5 - fi - ALSA=$depdir - if test "x$theroot" != x; then - ALSA="$theroot" - fi - if test "x$thecflags" != x; then - ALSA_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - ALSA_LIBS="$thelibs" - fi - ALSA_FOUND=yes - else ALSA_FOUND=no - - fi - else ALSA_FOUND=no - - fi - - fi - if test "x$ALSA_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5 -$as_echo_n "checking for ALSA... " >&6; } - -if test -n "$ALSA_CFLAGS"; then - pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$ALSA_LIBS"; then - pkg_cv_ALSA_LIBS="$ALSA_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa" 2>&1` - else - ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$ALSA_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ALSA_FOUND=no -elif test $pkg_failed = untried; then - ALSA_FOUND=no -else - ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS - ALSA_LIBS=$pkg_cv_ALSA_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ALSA_FOUND=yes -fi - fi - if test "x$ALSA_FOUND" = xno; then - for ac_header in alsa/asoundlib.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" -if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ALSA_ASOUNDLIB_H 1 -_ACEOF - ALSA_FOUND=yes - ALSA_CFLAGS=-Iignoreme - ALSA_LIBS=-lasound - DEFAULT_ALSA=yes -else - ALSA_FOUND=no -fi - -done - - fi - if test "x$ALSA_FOUND" = xno; then - help_on_build_dependency alsa - as_fn_error $? "Could not find alsa! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - -############################################################################### -# -# Check for pulse audio headers and libraries. -# -PULSE_FOUND=no - -# Check whether --with-pulse was given. -if test "${with_pulse+set}" = set; then : - withval=$with_pulse; -fi - - -# Check whether --with-pulse-include was given. -if test "${with_pulse_include+set}" = set; then : - withval=$with_pulse_include; -fi - - -# Check whether --with-pulse-lib was given. -if test "${with_pulse_lib+set}" = set; then : - withval=$with_pulse_lib; -fi - - -if test "x$with_pulse" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" - PULSE_CFLAGS="-I$with_pulse/include" - PULSE_FOUND=yes -fi -if test "x$with_pulse-include" != x; then - PULSE_CFLAGS="-I$with_pulse/include" - PULSE_FOUND=yes -fi -if test "x$with_pulse-lib" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" - PULSE_FOUND=yes -fi -if test "x$PULSE_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_pulse_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The pulse comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_pulse} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for pulse" >&5 -$as_echo "$as_me: Using builddeps $resource for pulse" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# pulse is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/pulse.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_pulse_ROOT} - thecflags=${builddep_pulse_CFLAGS} - thelibs=${builddep_pulse_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency pulse" "$LINENO" 5 - fi - PULSE=$depdir - if test "x$theroot" != x; then - PULSE="$theroot" - fi - if test "x$thecflags" != x; then - PULSE_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - PULSE_LIBS="$thelibs" - fi - PULSE_FOUND=yes - else PULSE_FOUND=no - - fi - else PULSE_FOUND=no - - fi - -fi -if test "x$PULSE_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPULSE" >&5 -$as_echo_n "checking for LIBPULSE... " >&6; } - -if test -n "$LIBPULSE_CFLAGS"; then - pkg_cv_LIBPULSE_CFLAGS="$LIBPULSE_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse >= 0.9.11" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LIBPULSE_LIBS"; then - pkg_cv_LIBPULSE_LIBS="$LIBPULSE_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPULSE_LIBS=`$PKG_CONFIG --libs "libpulse >= 0.9.11" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libpulse >= 0.9.11" 2>&1` - else - LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libpulse >= 0.9.11" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LIBPULSE_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PULSE_FOUND=no -elif test $pkg_failed = untried; then - PULSE_FOUND=no -else - LIBPULSE_CFLAGS=$pkg_cv_LIBPULSE_CFLAGS - LIBPULSE_LIBS=$pkg_cv_LIBPULSE_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PULSE_FOUND=yes -fi -fi -if test "x$PULSE_FOUND" = xno; then - for ac_header in pulse/pulseaudio.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "pulse/pulseaudio.h" "ac_cv_header_pulse_pulseaudio_h" "$ac_includes_default" -if test "x$ac_cv_header_pulse_pulseaudio_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PULSE_PULSEAUDIO_H 1 -_ACEOF - PULSE_FOUND=yes - PULSE_CFLAGS=-Iignoreme - PULSE_LIBS= - DEFAULT_PULSE=yes -else - PULSE_FOUND=no -fi - -done - -fi - -if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then - help_on_build_dependency pulse - as_fn_error $? "Could not find pulse audio libraries. $HELP_MSG " "$LINENO" 5 -fi - - - - -############################################################################### -# -# Check for the jpeg library -# - -USE_EXTERNAL_LIBJPEG=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 -$as_echo_n "checking for main in -ljpeg... " >&6; } -if test "${ac_cv_lib_jpeg_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ljpeg $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_jpeg_main=yes -else - ac_cv_lib_jpeg_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 -$as_echo "$ac_cv_lib_jpeg_main" >&6; } -if test "x$ac_cv_lib_jpeg_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBJPEG 1 -_ACEOF - - LIBS="-ljpeg $LIBS" - -else - USE_EXTERNAL_LIBJPEG=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use jpeg decoder bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use jpeg decoder bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check for the gif library -# - -USE_EXTERNAL_LIBJPEG=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 -$as_echo_n "checking for main in -lgif... " >&6; } -if test "${ac_cv_lib_gif_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgif $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_gif_main=yes -else - ac_cv_lib_gif_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 -$as_echo "$ac_cv_lib_gif_main" >&6; } -if test "x$ac_cv_lib_gif_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBGIF 1 -_ACEOF - - LIBS="-lgif $LIBS" - -else - USE_EXTERNAL_LIBGIF=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use gif decoder bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use gif decoder bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check for the zlib library -# - -USE_EXTERNAL_LIBZ=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5 -$as_echo_n "checking for main in -lz... " >&6; } -if test "${ac_cv_lib_z_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lz $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_z_main=yes -else - ac_cv_lib_z_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_main" >&5 -$as_echo "$ac_cv_lib_z_main" >&6; } -if test "x$ac_cv_lib_z_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF - - LIBS="-lz $LIBS" - -else - USE_EXTERNAL_LIBZ=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use zlib bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use zlib bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check if altzone exists in time.h -# - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -return (int)altzone; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_altzone=yes -else - has_altzone=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "x$has_altzone" = xyes; then - -$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h - -fi - -############################################################################### -# -# Check the maths library -# - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 -$as_echo_n "checking for main in -lm... " >&6; } -if test "${ac_cv_lib_m_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_m_main=yes -else - ac_cv_lib_m_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5 -$as_echo "$ac_cv_lib_m_main" >&6; } -if test "x$ac_cv_lib_m_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: Maths library was not found" >&5 -$as_echo "$as_me: Maths library was not found" >&6;} - -fi - - - -############################################################################### -# -# Should we run the painfully slow javadoc tool? -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 -$as_echo_n "checking whether to build documentation... " >&6; } -# Check whether --enable-docs was given. -if test "${enable_docs+set}" = set; then : - enableval=$enable_docs; ENABLE_DOCS="${enableval}" -else - ENABLE_DOCS='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DOCS" >&5 -$as_echo "$ENABLE_DOCS" >&6; } - -GENERATE_DOCS=false -if test "x$ENABLE_DOCS" = xyes; then - GENERATE_DOCS=true -fi - - -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 -$as_echo_n "checking whether to build nimbus L&F... " >&6; } -# Check whether --enable-nimbus was given. -if test "${enable_nimbus+set}" = set; then : - enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" -else - ENABLE_NIMBUS='yes' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 -$as_echo "$ENABLE_NIMBUS" >&6; } -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi - - -############################################################################### -# -# Setup the opt flags for different compilers -# and different operating systems. -# -case $COMPILER_TYPE in - CC ) - D_FLAG="-g" - case $COMPILER_NAME in - gcc ) - case $PLATFORM in - macosx ) - # On MacOSX we optimize for size, something - # we should do for all platforms? - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="-O0" - ;; - *) - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="-O0" - ;; - esac - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; - ossc ) - case $LEGACY_HOST_CPU1 in - i586) - C_O_FLAG_HI="-xO4 -Wu,-O4~yz" - C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" - C_O_FLAG_NONE="" - CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" - CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" - CXX_O_FLAG_NONE="" - ;; - sparc) - C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NONE="" - CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NONE="" - ;; - esac - esac - ;; - CL ) - D_FLAG= - C_O_FLAG_HI="-O2" - C_O_FLAG_NORM="-O1" - C_O_FLAG_NONE="-Od" - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; -esac - - - - - - - - -############################################################################### -# -# Setup legacy vars/targets and new vars to deal with different debug levels. -# -case $DEBUG_LEVEL in - release ) - HOTSPOT_DEBUG_LEVEL="product" - HOTSPOT_EXPORT="product" - ;; - fastdebug ) - HOTSPOT_DEBUG_LEVEL="fastdebug" - HOTSPOT_EXPORT="fastdebug" - CFLAGS="$CFLAGS $D_FLAG" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; - slowdebug ) - HOTSPOT_DEBUG_LEVEL="jvmg" - HOTSPOT_EXPORT="debug" - CFLAGS="$CFLAGS $D_FLAG" - C_O_FLAG_HI="$C_O_FLAG_NONE" - C_O_FLAG_NORM="$C_O_FLAG_NONE" - CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; -esac - -############################################################################### -# -# Generate the legacy makefile targets for hotspot. -# The hotspot api for selecting the build artifacts, really, needs to be improved. -# -HOTSPOT_TARGET="" - -if test "x$JVM_VARIANT_SERVER" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " -fi - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " -fi - -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " -fi - -if test "x$JVM_VARIANT_ZERO" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " -fi - -if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " -fi - -HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" - -############################################################################### -# -# Setup all directories for the subrepoes and the arguments to the sub makes. -# -LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" -LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" -LANGTOOLS_MAKE_ARGS="" - - - - -CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" -CORBA_DIST="$OUTPUT_ROOT/corba/dist" -CORBA_MAKE_ARGS="" - - - - -JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" -JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" -JAXP_MAKE_ARGS="" - - - - -JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" -JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" -JAXWS_MAKE_ARGS="" - - - - -HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" -HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" -HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" - - - - -JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" -JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\"" - - - -IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images -IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \ - SHARE_SRC=$JDK_TOPDIR/src/share \ - PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \ - TEMPDIR=$IMAGES_OUTPUTDIR/tmp \ - ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp " - - - -############################################################################### -# -# Now setup the CFLAGS and LDFLAGS for the JDK build. -# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. -# -case $COMPILER_NAME in - gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer \ - -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" - CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" - ;; - ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa REQUIRED -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt REQUIRED -features=no%except -DCC_NOEX" - ;; - cl ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ - -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ - -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ - -DWIN32 -DIAL" - case $LEGACY_HOST_CPU1 in - i?86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" - ;; - amd64 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" - ;; - esac - ;; -esac - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" - -# The package path is used only on macosx? -PACKAGE_PATH=/opt/local - - -# Sometimes we use a cpu dir (.../lib/amd64/server) -# Sometimes not (.../lib/server) -LIBARCHDIR="$LEGACY_HOST_CPU2/" -if test "x$ENDIAN" = xlittle; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" -fi -if test "x$HOST_OS" = xlinux; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" -fi -if test "x$HOST_OS" = xwindows; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" -fi -if test "x$HOST_OS" = xsolaris; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" -fi -if test "x$HOST_OS" = xmacosx; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" - LIBARCHDIR="" -fi -if test "x$HOST_OS" = xbsd; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" -fi -if test "x$DEBUG_LEVEL" = xrelease; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" -fi - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1" -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ - -I${JDK_OUTPUTDIR}/include \ - -I${JDK_OUTPUTDIR}/include/$PLATFORM \ - -I${JDK_TOPDIR}/src/share/javavm/export \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \ - -I${JDK_TOPDIR}/src/share/native/common \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common" - -# The shared libraries are compiled using the picflag. -CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" -CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG" - -# Executable flags -CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" -CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" - -# Now this is odd. The JDK native libraries have to link against libjvm.so -# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. -# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library -# is identical for client and server? Yes. Which is picked at runtime (client or server)? -# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following -# libraries will link to whatever is in memory. Yuck. -# -# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -libpath:${JDK_OUTPUTDIR}/lib jvm.lib java.lib" - LDFLAGS_JDKLIB_SUFFIX="" - if test "x$HOST_CPU_BITS" = "x64"; then - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj64/jli.lib" - else - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj/jli.lib" - fi - LDFLAGS_JDKEXE_SUFFIX="" -else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS="$LDFLAGS -Xlinker -O1" - fi - fi - - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" - LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" - if test "x$COMPILER_NAME" = xossc; then - LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" - fi - - # Only the jli library is explicitly linked when the launchers are built. - # The libjvm is then dynamically loaded/linked by the launcher. - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" -fi - - - - - - - - - - - - - - -############################################################################### -# -# statically link libstdc++ before C++ ABI is stablized on Linux unless -# dynamic build is configured on command line. -# -# Check whether --enable-static-link-stdc++ was given. -if test "${enable_static_link_stdc__+set}" = set; then : - enableval=$enable_static_link_stdc__; -else - - enable_static_link_stdc__=yes - -fi - - -if test "x$HOST_OS" = xlinux; then - # Test if -lstdc++ works. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic link of stdc++ is possible" >&5 -$as_echo_n "checking if dynamic link of stdc++ is possible... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - OLD_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -lstdc++" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_dynamic_libstdcxx=yes -else - has_dynamic_libstdcxx=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CXXFLAGS="$OLD_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_dynamic_libstdcxx" >&5 -$as_echo "$has_dynamic_libstdcxx" >&6; } - - # Test if stdc++ can be linked statically. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static link of stdc++ is possible" >&5 -$as_echo_n "checking if static link of stdc++ is possible... " >&6; } - STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - OLD_LIBS="$LIBS" - OLD_CXX="$CXX" - LIBS="$STATIC_STDCXX_FLAGS" - CXX="$CC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_static_libstdcxx=yes -else - has_static_libstdcxx=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$OLD_LIBS" - CXX="$OLD_CXX" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_static_libstdcxx" >&5 -$as_echo "$has_static_libstdcxx" >&6; } - - if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then - as_fn_error $? "I cannot link to stdc++! Neither dynamically nor statically." "$LINENO" 5 - fi - - if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Static linking of libstdc++ was not possible reverting to dynamic linking." >&5 -$as_echo "$as_me: Static linking of libstdc++ was not possible reverting to dynamic linking." >&6;} - enable_static_link_stdc__=no - fi - - if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic linking of libstdc++ was not possible reverting to static linking." >&5 -$as_echo "$as_me: Dynamic linking of libstdc++ was not possible reverting to static linking." >&6;} - enable_static_link_stdc__=yes - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libstdc++" >&5 -$as_echo_n "checking how to link with libstdc++... " >&6; } - if test "x$enable_static_link_stdc__" = xyes; then - LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" - LDCXX="$CC" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 -$as_echo "static" >&6; } - else - LIBCXX="$LIBCXX -lstdc++" - LDCXX="$CXX" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 -$as_echo "dynamic" >&6; } - fi -fi - -############################################################################### -# -# Could someone enlighten this configure script with a comment about libCrun? -# The LEGACY_HOST_CPU3 is the setting for ISA_DIR. -# -if test "x$HOST_OS" = xsolaris; then - LIBCXX="$LIBCXX /usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" -fi - - - -############################################################################### -# -# Misc -# - -# Control wether Hotspot runs Queens test after build. -# Check whether --enable-hotspot-test-in-build was given. -if test "${enable_hotspot_test_in_build+set}" = set; then : - enableval=$enable_hotspot_test_in_build; -else - enable_hotspot_test_in_build=no -fi - -if test "x$enable_hotspot_test_in_build" = "xyes"; then - TEST_IN_BUILD=true -else - TEST_IN_BUILD=false -fi - - -############################################################################### -# -# A helpful message at the end of the configure run. -# -if test "x$CCACHE_FOUND" = x && test "x$GCC" = xyes; then - help_on_build_dependency ccache - - printf "\nTip of the day:\nYou should really install ccache version 3.1.4 or newer.\n" - printf "It gives a tremendous speedup for C++ recompilations with precompiled headers!\n" -fi - -if test "x$CCACHE_FOUND" != x && test "x$HAS_GOOD_CCACHE" = x; then - printf "You have a ccache installed, but it is a version prior to 3.1.4. Try upgrading.\n" -fi - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by openjdk $as_me version-0.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -openjdk config.status version-0.1 -configured by $0, generated by GNU Autoconf 2.67, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; + conf_processed_arguments="$conf_processed_arguments $conf_option" ;; esac - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "$OUTPUT_ROOT/config.h") CONFIG_HEADERS="$CONFIG_HEADERS $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" ;; - "$OUTPUT_ROOT/spec.gmk") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" ;; - "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + case $conf_option in + -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; esac done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +if $TEST "x$conf_legacy_crosscompile" != "x"; then + if $TEST "x$conf_openjdk_target" != "x"; then + echo "Error: Specifying --openjdk-target together with autoconf" + echo "legacy cross-compilation flags is not supported." + echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." + echo "The recommended use is just --openjdk-target." + exit 1 + else + echo "Warning: You are using legacy autoconf cross-compilation flags." + echo "It is recommended that you use --openjdk-target instead." + echo "" + fi fi -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' +if $TEST "x$conf_openjdk_target" != "x"; then + conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` + conf_processed_arguments="--build=$conf_build_platform --host=$conf_openjdk_target --target=$conf_openjdk_target $conf_processed_arguments" fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' + +# Make configure exit with error on invalid options as default. +# Can be overridden by --disable-option-checking, since we prepend our argument +# and later options override earlier. +conf_processed_arguments="--enable-option-checking=fatal $conf_processed_arguments" + +### +### Call the configure script +### +if $TEST -e $conf_closed_script_dir/generated-configure.sh; then + # Closed source configure available; run that instead + . $conf_closed_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" else - ac_cs_awk_cr=$ac_cr + . $conf_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" fi -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF +### +### Post-processing +### - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' +# Move the log file to the output root, if this was successfully created +if $TEST -d "$OUTPUT_ROOT"; then + mv -f config.log "$OUTPUT_ROOT" 2> /dev/null fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index 4c6b326ecaf..df8c5f1bcb5 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -23,2629 +23,204 @@ # questions. # +############################################################################### +# +# Includes and boilerplate +# +############################################################################### + + AC_PREREQ([2.61]) -AC_INIT(openjdk, version-0.1, build-infra-dev@openjdk.java.net) +AC_INIT(openjdk, jdk8, build-dev@openjdk.java.net) + +# Do not change or remove the following line, it is needed for consistency checks: +# DATE_WHEN_GENERATED: @DATE_WHEN_GENERATED@ AC_CONFIG_AUX_DIR([build-aux]) - m4_include([build-aux/pkg.m4]) + +# Include these first... +m4_include([basics.m4]) m4_include([builddeps.m4]) -m4_include([platform.m4]) -m4_include([cores.m4]) +# ... then the rest +m4_include([boot-jdk.m4]) +m4_include([build-performance.m4]) m4_include([help.m4]) +m4_include([jdk-options.m4]) +m4_include([libraries.m4]) +m4_include([platform.m4]) +m4_include([source-dirs.m4]) +m4_include([toolchain.m4]) -# Save the command line. Do this very early, before it is lost by calling autoconf macros. -CONFIGURE_COMMAND_LINE="$@" -AC_SUBST(CONFIGURE_COMMAND_LINE) - -# Locate the directory of this script. -SCRIPT="[$]0" -REMOVE_SYMBOLIC_LINKS(SCRIPT) -AUTOCONF_DIR=`dirname [$]0` - -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. -AC_PROG_AWK -CHECK_NONEMPTY(AWK) -AC_PATH_PROG(CAT, cat) -CHECK_NONEMPTY(CAT) -AC_PATH_PROG(CHMOD, chmod) -CHECK_NONEMPTY(CHMOD) -AC_PATH_PROG(CP, cp) -CHECK_NONEMPTY(CP) -AC_PATH_PROG(CPIO, cpio) -CHECK_NONEMPTY(CPIO) -AC_PATH_PROG(CUT, cut) -CHECK_NONEMPTY(CUT) -AC_PATH_PROG(DATE, date) -CHECK_NONEMPTY(DATE) -AC_PATH_PROG(DF, df) -CHECK_NONEMPTY(DF) -AC_PATH_PROG(DIFF, diff) -CHECK_NONEMPTY(DIFF) -# Warning echo is really, really unportable!!!!! Different -# behaviour in bash and dash and in a lot of other shells! -# Use printf for serious work! -AC_PATH_PROG(ECHO, echo) -CHECK_NONEMPTY(ECHO) -AC_PROG_EGREP -CHECK_NONEMPTY(EGREP) -AC_PROG_FGREP -CHECK_NONEMPTY(FGREP) - -AC_PATH_PROG(FIND, find) -CHECK_NONEMPTY(FIND) -CHECK_FIND_DELETE -AC_SUBST(FIND_DELETE) - -AC_PROG_GREP -CHECK_NONEMPTY(GREP) -AC_PATH_PROG(HEAD, head) -CHECK_NONEMPTY(HEAD) -AC_PATH_PROG(LN, ln) -CHECK_NONEMPTY(LN) -AC_PATH_PROG(LS, ls) -CHECK_NONEMPTY(LS) -AC_PATH_PROGS(MAKE, [gmake make]) -CHECK_NONEMPTY(MAKE) -MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'` -if test "x$MAKE_VERSION" = x; then - AC_ERROR([You must use GNU make 3.81 or newer! Please put it in the path.]) -fi -AC_PATH_PROG(MKDIR, mkdir) -CHECK_NONEMPTY(MKDIR) -AC_PATH_PROG(MV, mv) -CHECK_NONEMPTY(MV) -AC_PATH_PROGS(NAWK, [nawk gawk awk]) -CHECK_NONEMPTY(NAWK) -AC_PATH_PROG(PRINTF, printf) -CHECK_NONEMPTY(PRINTF) -AC_PATH_PROG(THEPWDCMD, pwd) -AC_PATH_PROG(RM, rm) -CHECK_NONEMPTY(RM) -RM="$RM -f" -AC_PROG_SED -CHECK_NONEMPTY(SED) -AC_PATH_PROG(SH, sh) -CHECK_NONEMPTY(SH) -AC_PATH_PROG(SORT, sort) -CHECK_NONEMPTY(SORT) -AC_PATH_PROG(TAR, tar) -CHECK_NONEMPTY(TAR) -AC_PATH_PROG(TAIL, tail) -CHECK_NONEMPTY(TAIL) -AC_PATH_PROG(TEE, tee) -CHECK_NONEMPTY(TEE) -AC_PATH_PROG(TR, tr) -CHECK_NONEMPTY(TR) -AC_PATH_PROG(TOUCH, touch) -CHECK_NONEMPTY(TOUCH) -AC_PATH_PROG(WC, wc) -CHECK_NONEMPTY(WC) -AC_PATH_PROG(XARGS, xargs) -CHECK_NONEMPTY(XARGS) -AC_PATH_PROG(ZIP, zip) -CHECK_NONEMPTY(ZIP) -AC_PATH_PROG(UNZIP, unzip) -CHECK_NONEMPTY(UNZIP) -AC_PATH_PROG(LDD, ldd) -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -AC_PATH_PROG(OTOOL, otool) -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -AC_PATH_PROG(READELF, readelf) -AC_PATH_PROG(EXPR, expr) -CHECK_NONEMPTY(EXPR) -AC_PATH_PROG(FILE, file) -CHECK_NONEMPTY(FILE) -# Figure out the build and host system. -AC_CANONICAL_BUILD -AC_CANONICAL_HOST - -AC_ARG_WITH(data-model, [AS_HELP_STRING([--with-data-model], - [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-data-model=32 @<:@guessed@:>@])]) - -if test "x$with_data_model" != x && \ - test "x$with_data_model" != x32 && \ - test "x$with_data_model" != x64 ; then - AC_ERROR([The data model can only be 32 or 64!]) -fi -# Translate the standard cpu-vendor-kernel-os quadruplets into -# the new HOST_.... and BUILD_... and the legacy names used by -# the openjdk build. -# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model -EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS -# Now the following vars are defined. -# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows -# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince -# HOST_OS_API=posix,winapi -# -# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 -# HOST_CPU_ARCH=x86,sparc,pcc,arm -# HOST_CPU_BITS=32,64 -# HOST_CPU_ENDIAN=big,little -# -# There is also a: -# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH -# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH -# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris -# There was also a BUILDARCH that had i486,amd64,... but we do not use that -# in the new build. -# LEGACY_HOST_OS_API=solaris,windows # used to select source roots - -DATE_WHEN_CONFIGURED=`LANG=C date` -AC_SUBST(DATE_WHEN_CONFIGURED) - -# How many cores do we have on this build system? -AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores], - [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])]) -if test "x$with_num_cores" = x; then - # The number of cores were not specified, try to probe them. - CHECK_CORES -else - NUM_CORES=$with_num_cores - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` -fi -AC_SUBST(NUM_CORES) -AC_SUBST(CONCURRENT_BUILD_JOBS) - -# How many cores do we have on this build system? -AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size], - [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])]) -if test "x$with_memory_size" = x; then - # The memory size was not specified, try to probe it. - CHECK_MEMORY_SIZE -else - MEMORY_SIZE=$with_memory_size -fi -AC_SUBST(MEMORY_SIZE) - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" -AC_SUBST(SRC_ROOT) -cd "$CURDIR" - -# For cygwin we need cygpath first, since it is used everywhere. -AC_PATH_PROG(CYGPATH, cygpath) -PATH_SEP=":" -if test "x$BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - AC_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) - fi - PATH_SEP=";" -fi -AC_SUBST(PATH_SEP) - -SPACESAFE(SRC_ROOT,[the path to the source root]) -SPACESAFE(CURDIR,[the path to the current directory]) - -if test "x$BUILD_OS" = "xsolaris"; then - # Also search in /usr/ccs/bin for utilities like ar and as. - PATH="/usr/ccs/bin:$PATH" -fi +# This line needs to be here, verbatim, after all includes. +# It is replaced with closed functionality when building +# closed sources. +AC_DEFUN_ONCE([CLOSED_HOOK]) ############################################################################### # -# OpenJDK or closed +# Initialization # -AC_ARG_ENABLE([openjdk], [AS_HELP_STRING([--enable-openjdk], - [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) - -if test "x$enable_openjdk" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true -fi - -if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true -fi - -AC_SUBST(SET_OPENJDK) - ############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], - [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi -AC_SUBST(JIGSAW) +# Basic initialization that must happen first of all +BASIC_INIT +BASIC_SETUP_PATHS +BASIC_SETUP_LOGGING -############################################################################### -# -# Check which variant of the JDK that we want to build. -# Currently we have: -# normal: standard edition -# embedded: cut down to a smaller footprint -# -# Effectively the JDK variant gives a name to a specific set of -# modules to compile into the JDK. In the future, these modules -# might even be Jigsaw modules. -# -AC_MSG_CHECKING([which variant of the JDK to build]) -AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant], - [JDK variant to build (normal, embedded) @<:@normal@:>@])]) +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. +HELP_SETUP_DEPENDENCY_HELP -if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then - JAVASE_EMBEDDED="" - MINIMIZE_RAM_USAGE="" - JDK_VARIANT="normal" -elif test "x$with_jdk_variant" = xembedded; then - JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" - MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" - JDK_VARIANT="embedded" -else - AC_ERROR([The available JDK variants are: normal, embedded]) -fi - -AC_SUBST(JAVASE_EMBEDDED) -AC_SUBST(MINIMIZE_RAM_USAGE) -AC_SUBST(JDK_VARIANT) +# Setup simple tools, that do not need have cross compilation support. +# Without these, we can't properly run the rest of the configure script. +BASIC_SETUP_TOOLS -AC_MSG_RESULT([$JDK_VARIANT]) - -############################################################################### -# -# Should we build a JDK/JVM with head support (ie a graphical ui)? -# We always build headless support. -# -AC_MSG_CHECKING([headful support]) -AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], - [build headful support (graphical UI support) @<:@enabled@:>@])], - [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) - -SUPPORT_HEADLESS=yes -BUILD_HEADLESS="BUILD_HEADLESS:=true" - -if test "x$SUPPORT_HEADFUL" = xyes; then - # We are building both headful and headless. - BUILD_HEADLESS_ONLY="" - headful_msg="inlude support for both headful and headless" -fi - -if test "x$SUPPORT_HEADFUL" = xno; then - # Thus we are building headless only. - BUILD_HEADLESS="BUILD_HEADLESS:=true" - BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" - headful_msg="headless only" -fi - -AC_MSG_RESULT([$headful_msg]) - -AC_SUBST(SUPPORT_HEADLESS) -AC_SUBST(SUPPORT_HEADFUL) -AC_SUBST(BUILD_HEADLESS) -AC_SUBST(BUILD_HEADLESS_ONLY) - -############################################################################### -# -# Check which variants of the JVM that we want to build. -# Currently we have: -# server: normal interpreter and a tiered C1/C2 compiler -# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) -# kernel: kernel footprint JVM that passes the TCK without major performance problems, -# ie normal interpreter and C1, only the serial GC, kernel jvmti etc -# zero: no machine code interpreter, no compiler -# zeroshark: zero interpreter and shark/llvm compiler backend -AC_MSG_CHECKING([which variants of the JVM that should be built]) -AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], - [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) - -if test "x$with_jvm_variants" = x; then - if test "x$JDK_VARIANT" = xembedded; then - with_jvm_variants="kernel" - elif test "x$HOST_CPU_BITS" = x64; then - with_jvm_variants="server" - else - # Yes, on 32-bit machines, the same source (almost) is compiled twice - # to generate two libjvm.so files. Fun, fun. - with_jvm_variants="client,server" - fi -fi - -JVM_VARIANTS=",$with_jvm_variants," -TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` - -if test "x$TEST_VARIANTS" != "x,"; then - AC_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) -fi -AC_MSG_RESULT([$with_jvm_variants]) - -JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` -JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` -JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` -JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` -JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - AC_ERROR([You cannot build a client JVM for a 64-bit machine.]) - fi -fi -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - AC_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) - fi -fi - -COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` -# Replace the commas with AND for use in the build directory name. -ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` -if test "x$COUNT_VARIANTS" != "x,1"; then - AC_MSG_NOTICE([NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants]) -fi - -AC_SUBST(JVM_VARIANTS) -AC_SUBST(JVM_VARIANT_SERVER) -AC_SUBST(JVM_VARIANT_CLIENT) -AC_SUBST(JVM_VARIANT_KERNEL) -AC_SUBST(JVM_VARIANT_ZERO) -AC_SUBST(JVM_VARIANT_ZEROSHARK) - -############################################################################### -# -# Set the debug level -# release: no debug information, all optimizations, no asserts. -# fastdebug: debug information (-g), all optimizations, all asserts -# slowdebug: debug information (-g), no optimizations, all asserts -# -DEBUG_LEVEL="release" -AC_MSG_CHECKING([which debug level to use]) -AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], - [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])], - [ - ENABLE_DEBUG="${enableval}" - DEBUG_LEVEL="fastdebug" - ], [ENABLE_DEBUG="no"]) - -AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level], - [set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])], - [ - DEBUG_LEVEL="${withval}" - if test "x$ENABLE_DEBUG" = xyes; then - AC_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) - fi - ]) -AC_MSG_RESULT([$DEBUG_LEVEL]) - -if test "x$DEBUG_LEVEL" != xrelease && \ - test "x$DEBUG_LEVEL" != xfastdebug && \ - test "x$DEBUG_LEVEL" != xslowdebug; then - AC_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) -fi - -case $DEBUG_LEVEL in - release ) - VARIANT="OPT" - FASTDEBUG="false" - DEBUG_CLASSFILES="false" - BUILD_VARIANT_RELEASE="" - ;; - fastdebug ) - VARIANT="DBG" - FASTDEBUG="true" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-fastdebug" - ;; - slowdebug ) - VARIANT="DBG" - FASTDEBUG="false" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-debug" - ;; -esac - -AC_SUBST(DEBUG_LEVEL) -AC_SUBST(VARIANT) -AC_SUBST(FASTDEBUG) -AC_SUBST(DEBUG_CLASSFILES) -AC_SUBST(BUILD_VARIANT_RELEASE) - -# Source the version numbers -. $AUTOCONF_DIR/version.numbers -if test "x$OPENJDK" = "xfalse"; then - . $AUTOCONF_DIR/closed.version.numbers -fi -# Now set the JDK version, milestone, build number etc. -AC_SUBST(JDK_MAJOR_VERSION) -AC_SUBST(JDK_MINOR_VERSION) -AC_SUBST(JDK_MICRO_VERSION) -AC_SUBST(JDK_UPDATE_VERSION) -AC_SUBST(JDK_BUILD_NUMBER) -AC_SUBST(MILESTONE) -AC_SUBST(LAUNCHER_NAME) -AC_SUBST(PRODUCT_NAME) -AC_SUBST(PRODUCT_SUFFIX) -AC_SUBST(JDK_RC_PLATFORM_NAME) -AC_SUBST(COMPANY_NAME) - -COPYRIGHT_YEAR=`date +'%Y'` -AC_SUBST(COPYRIGHT_YEAR) - -RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" -AC_SUBST(RUNTIME_NAME) - -if test "x$JDK_UPDATE_VERSION" != x; then - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" -else - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" -fi -AC_SUBST(JDK_VERSION) - -if test "x$MILESTONE" != x; then - RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" -else - RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" -fi -AC_SUBST(RELEASE) - -if test "x$JDK_BUILD_NUMBER" != x; then - FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" -else - JDK_BUILD_NUMBER=b00 - BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" -fi -AC_SUBST(FULL_VERSION) -COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` -AC_SUBST(COOKED_BUILD_NUMBER) - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/host-variant-debuglevel output root. - OUTPUT_ROOT="$SRC_ROOT/build/${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - AC_ERROR([Could not create build directory $OUTPUT_ROOT]) - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - OUTPUT_ROOT="$CURDIR" -fi - -SPACESAFE(OUTPUT_ROOT,[the path to the output root]) - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$BUILD_OS" = "xwindows"; then - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - AC_MSG_CHECKING([if you are running from within a VS command prompt]) - AC_MSG_RESULT([yes]) - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - AC_MSG_CHECKING([if we can find the VS installation]) - AC_MSG_RESULT([no]) - AC_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - case "$LEGACY_HOST_CPU1" in - i?86) - VARSBAT_ARCH=x86 - ;; - *) - VARSBAT_ARCH=$LEGACY_HOST_CPU1 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - AC_MSG_CHECKING([if we can extract the needed env variables]) - AC_MSG_RESULT([no]) - AC_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - AC_MSG_CHECKING([if we can find the VS installation]) - if test "x$VCINSTALLDIR" != x; then - AC_MSG_RESULT([$VCINSTALLDIR]) - else - AC_MSG_RESULT([no]) - AC_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" - - AC_MSG_CHECKING([for msvcr100.dll]) - AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], - [copy this msvcr100.dll into the built JDK])]) - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$HOST_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - AC_MSG_RESULT([no]) - AC_ERROR([Could not find msvcr100.dll !]) - fi - AC_MSG_RESULT([$MSVCR100DLL]) - SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) - fi -fi -AC_SUBST(SETUPDEVENV) -AC_SUBST(CHECK_FOR_VCINSTALLDIR) -AC_SUBST(MSVCR100DLL) - -# Most of the probed defines are put into config.h -AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in]) -# The spec.gmk file contains all variables for the make system. -AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in]) -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT. If you have only -# one configured host, then you can also run make from the SRC_ROOT, -# since it will go look for a single spec.gmk file. Or perhaps it -# should instead make all configured hosts it can find? -AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in]) - -AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) -AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT) - -# Where are the sources. Any of these can be overridden -# using --with-override-corba and the likes. -LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" -CORBA_TOPDIR="$SRC_ROOT/corba" -JAXP_TOPDIR="$SRC_ROOT/jaxp" -JAXWS_TOPDIR="$SRC_ROOT/jaxws" -HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" -JDK_TOPDIR="$SRC_ROOT/jdk" -AC_SUBST(LANGTOOLS_TOPDIR) -AC_SUBST(CORBA_TOPDIR) -AC_SUBST(JAXP_TOPDIR) -AC_SUBST(JAXWS_TOPDIR) -AC_SUBST(HOTSPOT_TOPDIR) -AC_SUBST(JDK_TOPDIR) +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. +BDEPS_CONFIGURE_BUILDDEPS +BDEPS_SCAN_FOR_BUILDDEPS # Check if pkg-config is available. PKG_PROG_PKG_CONFIG -AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf], - [use this configuration file for the builddeps])]) +############################################################################### +# +# Determine OpenJDK build and target platforms. +# +############################################################################### -AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], - [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) +PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET +PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION -AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], - [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], - [], - [with_builddeps_dir=/localhome/builddeps]) - -AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], - [chgrp the downloaded build dependencies to this group])]) - -AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], - [list all build dependencies known to the configure script])], - [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort - echo - exit 1 -fi - -# If builddeps server or conf file is given. Setup buildeps usage. -BDEPS_SCAN_FOR_BUILDDEPS +# With knowledge of the build platform, setup more basic things. +BASIC_SETUP_PATH_SEP +BASIC_SETUP_SEARCHPATH ############################################################################### # -# Configure the development tool paths and potential sysroot. +# Determine OpenJDK variants, options and version numbers. # -AC_LANG(C++) -DEVKIT= -SYS_ROOT=/ -AC_SUBST(SYS_ROOT) +############################################################################### -# The option used to specify the target .o,.a or .so file. -# When compiling, how to specify the to be created object file. -CC_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created executable. -EXE_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created dynamically linkable library. -LD_OUT_OPTION='-o$(SPACE)' -# When archiving, how to specify the to be create static archive for object files. -AR_OUT_OPTION='rcs$(SPACE)' -AC_SUBST(CC_OUT_OPTION) -AC_SUBST(EXE_OUT_OPTION) -AC_SUBST(LD_OUT_OPTION) -AC_SUBST(AR_OUT_OPTION) +# We need build & target for this. +JDKOPT_SETUP_JDK_VARIANT +JDKOPT_SETUP_JVM_VARIANTS +JDKOPT_SETUP_DEBUG_LEVEL +JDKOPT_SETUP_JDK_OPTIONS +JDKOPT_SETUP_JDK_VERSION_NUMBERS -# If --build AND --host is set, then the configure script will find any -# cross compilation tools in the PATH. Cross compilation tools -# follows the cross compilation standard where they are prefixed with ${host}. -# For example the binary i686-sun-solaris2.10-gcc -# will cross compile for i686-sun-solaris2.10 -# If neither of build and host is not set, then build=host and the -# default compiler found in the path will be used. -# Setting only --host, does not seem to be really supported. -# Please set both --build and --host if you want to cross compile. - -DEFINE_CROSS_COMPILE_ARCH="" -HOSTCC="" -HOSTCXX="" -AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) -AC_SUBST(HOST_CC) -AC_SUBST(HOST_CXX) -AC_MSG_CHECKING([if this is a cross compile]) -if test "x$build_var" != "x$host_var"; then - AC_MSG_RESULT([yes, from $build_var to $host_var]) - # We have detected a cross compile! - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1" - # Now we to find a C/C++ compiler that can build executables for the build - # platform. We can't use the AC_PROG_CC macro, since it can only be used - # once. - AC_PATH_PROGS(HOSTCC, [cl cc gcc]) - WHICHCMD(HOSTCC) - AC_PATH_PROGS(HOSTCXX, [cl CC g++]) - WHICHCMD(HOSTCXX) - # Building for the build platform should be easy. Therefore - # we do not need any linkers or assemblers etc. -else - AC_MSG_RESULT([no]) -fi - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. -AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], - [pass this sys-root to the compilers and linker (useful if the sys-root encoded in - the cross compiler tools is incorrect)])]) - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -fi - -# If a devkit is found on the builddeps server, then prepend its path to the -# PATH variable. If there are cross compilers available in the devkit, these -# will be found by AC_PROG_CC et al. -BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, - [# Found devkit - PATH="$DEVKIT/bin:$PATH" - SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root" - if test "x$x_includes" = "xNONE"; then - x_includes="$SYS_ROOT/usr/include/X11" - fi - if test "x$x_libraries" = "xNONE"; then - x_libraries="$SYS_ROOT/usr/lib" - fi - ], - []) - -if test "x$SYS_ROOT" != "x/" ; then - CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" - CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" - OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" - LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" -fi - -# Store the CFLAGS etal passed to the configure script. -ORG_CFLAGS="$CFLAGS" -ORG_CXXFLAGS="$CXXFLAGS" -ORG_OBJCFLAGS="$OBJCFLAGS" - -# gcc is almost always present, but on Windows we -# prefer cl.exe and on Solaris we prefer CC. -# Thus test for them in this order. -AC_PROG_CC([cl cc gcc]) -if test "x$CC" = x; then - help_on_build_dependency devkit - AC_ERROR([Could not find a compiler. $HELP_MSG]) -fi -if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi -WHICHCMD(CC) - -AC_PROG_CXX([cl CC g++]) -if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi -WHICHCMD(CXX) - -if test "x$CXX" = x || test "x$CC" = x; then - help_on_build_dependency devkit - AC_ERROR([Could not find the needed compilers! $HELP_MSG ]) -fi - -if test "x$BUILD_OS" != xwindows; then - AC_PROG_OBJC - WHICHCMD(OBJC) -else - OBJC= -fi - -# Restore the flags to the user specified values. -# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" -CFLAGS="$ORG_CFLAGS" -CXXFLAGS="$ORG_CXXFLAGS" -OBJCFLAGS="$ORG_OBJCFLAGS" - -# If we are not cross compiling, use the same compilers for -# building the build platform executables. -if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then - HOSTCC="$CC" - HOSTCXX="$CXX" -fi - -AC_CHECK_TOOL(LD, ld) -WHICHCMD(LD) -LDEXE="$LD" -LDCXX="$LD" -LDEXECXX="$LD" -# LDEXE is the linker to use, when creating executables. -AC_SUBST(LDEXE) -# Linking C++ libraries. -AC_SUBST(LDCXX) -# Linking C++ executables. -AC_SUBST(LDEXECXX) - -AC_CHECK_TOOL(AR, ar) -WHICHCMD(AR) -if test "x$BUILD_OS" = xmacosx; then - ARFLAGS="-r" -else - ARFLAGS="" -fi -AC_SUBST(ARFLAGS) - -COMPILER_NAME=gcc -COMPILER_TYPE=CC -AS_IF([test "x$BUILD_OS" = xwindows], [ - # For now, assume that we are always compiling using cl.exe. - CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-Fe - LD_OUT_OPTION=-out: - AR_OUT_OPTION=-out: - # On Windows, reject /usr/bin/link, which is a cygwin - # program for something completely different. - AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) - # Since we must ignore the first found link, WINLD will contain - # the full path to the link.exe program. - WHICHCMD_SPACESAFE([WINLD]) - LD="$WINLD" - # However creating executables can only be done with cl.exe. - LDEXE="$CC" - LDCXX="$WINLD" - LDEXECXX="$CC" - - AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) - WHICHCMD_SPACESAFE([MT]) - # The resource compiler - AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) - WHICHCMD_SPACESAFE([RC]) - - RC_FLAGS="/l 0x409 /r" - AS_IF([test "x$VARIANT" = xOPT], [ - RC_FLAGS="$RC_FLAGS -d NDEBUG" - ]) - JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION - AS_IF([test "x$JDK_UPDATE_VERSION" = x], [ - JDK_UPDATE_VERSION_NOTNULL=0 - ]) - RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" - - # lib.exe is used to create static libraries. - AC_CHECK_PROG([WINAR], [lib],[lib],,,) - WHICHCMD_SPACESAFE([WINAR]) - AR="$WINAR" - ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" - - AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) - WHICHCMD_SPACESAFE([DUMPBIN]) - - COMPILER_TYPE=CL - CFLAGS="$CFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -dll -opt:ref -incremental:no " - if test "x$LEGACY_HOST_CPU1" = xi586; then - LDFLAGS="$LDFLAGS -safeseh" - fi - if test "x$DEBUG_LEVEL" != xrelease; then - LDFLAGS="$LDFLAGS -debug" - fi -]) -AC_SUBST(RC_FLAGS) -AC_SUBST(COMPILER_TYPE) - -AC_PROG_CPP -WHICHCMD(CPP) - -AC_PROG_CXXCPP -WHICHCMD(CXXCPP) - -# Find the right assembler. -if test "x$BUILD_OS" = xsolaris; then - AC_PATH_PROG(AS, as) - WHICHCMD(AS) - ASFLAGS=" " -else - AS="$CC -c" - ASFLAGS=" " -fi -AC_SUBST(AS) -AC_SUBST(ASFLAGS) - -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = macosx; then - # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. - # While waiting for a better solution, the current workaround is to use -mstackrealign. - CFLAGS="$CFLAGS -mstackrealign" - AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) - AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], - [ - AC_MSG_RESULT([yes]) - ], - [ - AC_MSG_RESULT([no]) - AC_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) - ]) -fi - -if test "x$BUILD_OS" = xsolaris; then - AC_PATH_PROG(NM, nm) - WHICHCMD(NM) - AC_PATH_PROG(STRIP, strip) - WHICHCMD(STRIP) - AC_PATH_PROG(MCS, mcs) - WHICHCMD(MCS) -else - AC_CHECK_TOOL(NM, nm) - WHICHCMD(NM) - AC_CHECK_TOOL(STRIP, strip) - WHICHCMD(STRIP) -fi - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$BUILD_OS" = xwindows; then - AC_MSG_CHECKING([if uncygdrive can be created]) - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive1.log - AC_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) - fi - AC_MSG_RESULT([$UNCYGDRIVE]) - AC_MSG_CHECKING([if uncygdrive.exe works]) - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive2.log - AC_ERROR([Uncygdrive did not work!]) - fi - AC_MSG_RESULT([yes]) - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj -fi - -AC_SUBST(UNCYGDRIVE) - -TESTFOR_PROG_CCACHE - -# Used on GNU/Linux systems, can be empty... -#AC_PATH_PROG(ELFDUMP, elfdump) - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' -AC_SUBST(BUILD_LOG) -AC_SUBST(BUILD_LOG_WRAPPER) +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. +BASIC_SETUP_OUTPUT_DIR ############################################################################### # -# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. -# (The JVM can use 32 or 64 bit Java pointers but that decision -# is made at runtime.) +# Setup BootJDK, used to bootstrap the build. # -AC_CHECK_SIZEOF([int *], [1111]) -if test "x$ac_cv_sizeof_int_p" = x0; then - # The test failed, lets pick the assumed value. - ARCH_DATA_MODEL=$HOST_CPU_BITS -else - ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` -fi +############################################################################### -if test "x$ARCH_DATA_MODEL" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" -fi -AC_MSG_CHECKING([for host address size]) -AC_MSG_RESULT([$ARCH_DATA_MODEL bits]) -AC_SUBST(LP64,$A_LP64) -AC_SUBST(ARCH_DATA_MODEL) - -if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then - AC_ERROR([The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)]) -fi +BOOTJDK_SETUP_BOOT_JDK +BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS ############################################################################### # +# Configure the sources to use. We can add or override individual directories. +# +############################################################################### + +SRCDIRS_SETUP_TOPDIRS +SRCDIRS_SETUP_ALTERNATIVE_TOPDIRS +SRCDIRS_SETUP_OUTPUT_DIRS + +############################################################################### +# +# Setup the toolchain (compilers etc), i.e. the tools that need to be +# cross-compilation aware. +# +############################################################################### + +TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS +TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV +# Locate the actual tools +TOOLCHAIN_SETUP_PATHS + +# FIXME: Currently we must test this after paths but before flags. Fix! + +# And we can test some aspects on the target using configure macros. +PLATFORM_TEST_OPENJDK_TARGET_BITS +PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS + +# Configure flags for the tools +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK + +# After we have toolchain, we can compile the uncygdrive helper +BASIC_COMPILE_UNCYGDRIVE + + +# Setup debug symbols (need objcopy from the toolchain for that) +JDKOPT_SETUP_DEBUG_SYMBOLS + +############################################################################### +# +# Check dependencies for external and internal libraries. +# +############################################################################### + +LIB_SETUP_INIT +LIB_SETUP_X11 +LIB_SETUP_CUPS +LIB_SETUP_FREETYPE +LIB_SETUP_ALSA +LIB_SETUP_MISC_LIBS +LIB_SETUP_STATIC_LINK_LIBSTDCPP + +############################################################################### +# +# We need to do some final tweaking, when everything else is done. +# +############################################################################### + +JDKOPT_SETUP_BUILD_TWEAKS + +############################################################################### +# +# Configure parts of the build that only affect the build performance, +# not the result. +# +############################################################################### + +BPERF_SETUP_BUILD_CORES +BPERF_SETUP_BUILD_MEMORY + +# Setup smart javac (after cores and memory have been setup) +BPERF_SETUP_SMART_JAVAC + # Can the C/C++ compiler use precompiled headers? -# -AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], - [use precompiled headers when compiling C++ @<:@enabled@:>@])], - [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) +BPERF_SETUP_PRECOMPILED_HEADERS -USE_PRECOMPILED_HEADER=1 -if test "x$ENABLE_PRECOMPH" = xno; then - USE_PRECOMPILED_HEADER=0 -fi - -if test "x$ENABLE_PRECOMPH" = xyes; then - # Check that the compiler actually supports precomp headers. - if test "x$GCC" = xyes; then - AC_MSG_CHECKING([that precompiled headers work]) - echo "int alfa();" > conftest.h - $CXX -x c++-header conftest.h -o conftest.hpp.gch - if test ! -f conftest.hpp.gch; then - echo Precompiled header is not working! - USE_PRECOMPILED_HEADER=0 - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - rm -f conftest.h - fi -fi - -AC_SUBST(USE_PRECOMPILED_HEADER) +# Setup use of ccache, if available +BPERF_SETUP_CCACHE ############################################################################### # -# How to compile shared libraries. +# And now the finish... # - -if test "x$GCC" = xyes; then - COMPILER_NAME=gcc - PICFLAG="-fPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-shared" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$(JDK_TOPDIR)/$1' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' - LD="$CC" - LDEXE="$CC" - LDCXX="$CXX" - LDEXECXX="$CXX" - - # Linking is different on MacOSX - if test "x$BUILD_OS" = xmacosx; then - # Might change in the future to clang. - COMPILER_NAME=gcc - SHARED_LIBRARY='lib$1.dylib' - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" - SHARED_LIBRARY_SUFFIX='.dylib' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' - fi -else - if test "x$BUILD_OS" = xsolaris; then - # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler - COMPILER_NAME=ossc - PICFLAG="-KPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-G" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $(JDK_TOPDIR)/$1' - SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' - CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' - fi - if test "x$BUILD_OS" = xwindows; then - # If it is not gcc, then assume it is the MS Visual Studio compiler - COMPILER_NAME=cl - PICFLAG="" - LIBRARY_PREFIX= - SHARED_LIBRARY='$1.dll' - STATIC_LIBRARY='$1.lib' - SHARED_LIBRARY_FLAGS="-LD" - SHARED_LIBRARY_SUFFIX='.dll' - STATIC_LIBRARY_SUFFIX='.lib' - OBJ_SUFFIX='.obj' - EXE_SUFFIX='.exe' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='' - fi -fi - -AC_SUBST(OBJ_SUFFIX) -AC_SUBST(SHARED_LIBRARY) -AC_SUBST(STATIC_LIBRARY) -AC_SUBST(LIBRARY_PREFIX) -AC_SUBST(SHARED_LIBRARY_SUFFIX) -AC_SUBST(STATIC_LIBRARY_SUFFIX) -AC_SUBST(EXE_SUFFIX) -AC_SUBST(SHARED_LIBRARY_FLAGS) -AC_SUBST(SET_SHARED_LIBRARY_NAME) -AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) -AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) - -# The (cross) compiler is now configured, we can now test capabilities -# of the host platform. - ############################################################################### -# -# Is the host little of big endian? -# -AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal"]) -if test "x$ENDIAN" = xuniversal; then - AC_ERROR([It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?]) -fi -if test "x$ENDIAN" = xunknown; then - ENDIAN="$HOST_CPU_ENDIAN" -fi -if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then - AC_WARN([The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)]) - ENDIAN="$HOST_CPU_ENDIAN" -fi -AC_SUBST(ENDIAN) +# Check for some common pitfalls +BASIC_TEST_USABILITY_ISSUES -############################################################################### -# -# We need a Boot JDK to bootstrap the build. -# -BOOT_JDK_FOUND=no -AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk], - [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])]) - -if test "x$with_boot_jdk" != x; then - BOOT_JDK=$with_boot_jdk - BOOT_JDK_FOUND=yes -fi -if test "x$BOOT_JDK_FOUND" = xno; then - BDEPS_CHECK_MODULE(BOOT_JDK, bootjdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - if test "x$JAVA_HOME" != x; then - if test ! -d "$JAVA_HOME"; then - AC_ERROR([Your JAVA_HOME points to a non-existing directory!]) - fi - # Aha, the user has set a JAVA_HOME - # let us use that as the Boot JDK. - BOOT_JDK=$JAVA_HOME - BOOT_JDK_FOUND=yes - # To be on the safe side, lets check that it is a JDK. - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - else - AC_ERROR([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK.]) - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - AC_PATH_PROG(JAVAC_CHECK, javac) - AC_PATH_PROG(JAVA_CHECK, java) - BINARY="$JAVAC_CHECK" - if test "x$JAVAC_CHECK" = x; then - BINARY="$JAVA_CHECK" - fi - if test "x$BINARY" != x; then - # So there is a java(c) binary, it might be part of a JDK. - # Lets find the JDK/JRE directory by following symbolic links. - # Linux/GNU systems often have links from /usr/bin/java to - # /etc/alternatives/java to the real JDK binary. - WHICHCMD_SPACESAFE(BINARY,[path to javac]) - REMOVE_SYMBOLIC_LINKS(BINARY) - BOOT_JDK=`dirname $BINARY` - BOOT_JDK=`cd $BOOT_JDK/..; pwd` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Try the MacOSX way. - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - AC_PATH_PROG(JAVA_CHECK, java) - if test "x$JAVA_CHECK" != x; then - # There is a java in the path. But apparently we have not found a javac - # in the path, since that would have been tested earlier. - if test "x$HOST_OS" = xwindows; then - # Now if this is a windows platform. The default installation of a JDK - # actually puts the JRE in the path and keeps the JDK out of the path! - # Go look in the default installation location. - BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=yes - fi - fi - if test "x$BOOT_JDK_FOUND" = xno; then - help_on_build_dependency openjdk - AC_ERROR([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) - fi - else - help_on_build_dependency openjdk - AC_ERROR([Could not find a JDK. $HELP_MSG]) - fi -fi - -WIN_FIX_PATH(BOOT_JDK) - -# Now see if we can find the rt.jar, or its nearest equivalent. -BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" -SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)]) - -BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" -SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)]) - -if test ! -f $BOOT_RTJAR; then - # On MacOSX it is called classes.jar - BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar - if test ! -f $BOOT_RTJAR; then - AC_ERROR([Cannot find the rt.jar or its equivalent!]) - fi - # Remove the .. - BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" - # The tools.jar is part of classes.jar - BOOT_TOOLSJAR="$BOOT_RTJAR" -fi - -AC_SUBST(BOOT_JDK) -AC_SUBST(BOOT_RTJAR) -AC_SUBST(BOOT_TOOLSJAR) -AC_MSG_CHECKING([for Boot JDK]) -AC_MSG_RESULT([$BOOT_JDK]) -AC_MSG_CHECKING([for Boot rt.jar]) -AC_MSG_RESULT([$BOOT_RTJAR]) -AC_MSG_CHECKING([for Boot tools.jar]) -AC_MSG_RESULT([$BOOT_TOOLSJAR]) - -# Use the java tool from the Boot JDK. -AC_MSG_CHECKING([for java in Boot JDK]) -JAVA=$BOOT_JDK/bin/java -if test ! -x $JAVA; then - AC_ERROR([Could not find a working java]) -fi -BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` -AC_MSG_RESULT([yes $BOOT_JDK_VERSION]) -AC_SUBST(JAVA) - -# Extra M4 quote needed to protect [] in grep expression. -[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] -if test "x$FOUND_VERSION_78" = x; then - help_on_build_dependency openjdk - AC_ERROR([Your bootjdk must be version 7 or 8. $HELP_MSG]) -fi - -# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. -BOOT_JDK_SOURCETARGET="-source 7 -target 7" -AC_SUBST(BOOT_JDK_SOURCETARGET) - -# Use the javac tool from the Boot JDK. -AC_MSG_CHECKING([for javac in Boot JDK]) -JAVAC=$BOOT_JDK/bin/javac -if test ! -x $JAVAC; then - AC_ERROR([Could not find a working javac]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(JAVAC) -AC_SUBST(JAVAC_FLAGS) - -# Use the javac tool from the Boot JDK. -AC_MSG_CHECKING([for javah in Boot JDK]) -JAVAH=$BOOT_JDK/bin/javah -if test ! -x $JAVAH; then - AC_ERROR([Could not find a working javah]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(JAVAH) - -# Use the jar tool from the Boot JDK. -AC_MSG_CHECKING([for jar in Boot JDK]) -JAR=$BOOT_JDK/bin/jar -if test ! -x $JAR; then - AC_ERROR([Could not find a working jar]) -fi -AC_SUBST(JAR) -AC_MSG_RESULT(yes) - -# Use the rmic tool from the Boot JDK. -AC_MSG_CHECKING([for rmic in Boot JDK]) -RMIC=$BOOT_JDK/bin/rmic -if test ! -x $RMIC; then - AC_ERROR([Could not find a working rmic]) -fi -AC_SUBST(RMIC) -AC_MSG_RESULT(yes) - -############################################################################### -# -# Pickup additional source for a component from outside of the source root -# or override source for a component. -# -AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root], - [for each and every source directory, look in this additional source root for - the same directory; if it exists and have files in it, include it in the build])]) - -AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root], - [for each and every source directory, look in this override source root for - the same directory; if it exists, use that directory instead and - ignore the directory in the original source root])]) - -AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides], - [use the subdirs 'adds' and 'overrides' in the specified directory as - add-source-root and override-source-root])]) - -if test "x$with_adds_and_overrides" != x; then - with_add_source_root="$with_adds_and_overrides/adds" - with_override_source_root="$with_adds_and_overrides/overrides" -fi - -if test "x$with_add_source_root" != x; then - if ! test -d $with_add_source_root; then - AC_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) - fi - CURDIR="$PWD" - cd "$with_add_source_root" - ADD_SRC_ROOT="`pwd`" - cd "$CURDIR" - # Verify that the addon source root does not have any root makefiles. - # If it does, then it is usually an error, prevent this. - if test -f $with_add_source_root/langtools/makefiles/Makefile || \ - test -f $with_add_source_root/langtools/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/corba/makefiles/Makefile || \ - test -f $with_add_source_root/corba/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ - test -f $with_add_source_root/jaxp/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ - test -f $with_add_source_root/jaxws/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ - test -f $with_add_source_root/hotspot/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jdk/makefiles/Makefile || \ - test -f $with_add_source_root/jdk/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) - fi -fi -AC_SUBST(ADD_SRC_ROOT) - -if test "x$with_override_source_root" != x; then - if ! test -d $with_override_source_root; then - AC_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) - fi - CURDIR="$PWD" - cd "$with_override_source_root" - OVERRIDE_SRC_ROOT="`pwd`" - cd "$CURDIR" - if test -f $with_override_source_root/langtools/makefiles/Makefile || \ - test -f $with_override_source_root/langtools/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/corba/makefiles/Makefile || \ - test -f $with_override_source_root/corba/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ - test -f $with_override_source_root/jaxp/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ - test -f $with_override_source_root/jaxws/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ - test -f $with_override_source_root/hotspot/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jdk/makefiles/Makefile || \ - test -f $with_override_source_root/jdk/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) - fi -fi -AC_SUBST(OVERRIDE_SRC_ROOT) - -############################################################################### -# -# Override a repo completely, this is used for example when you have 3 small -# development sandboxes of the langtools sources and want to avoid having 3 full -# OpenJDK sources checked out on disk. -# -# Assuming that the 3 langtools sandboxes are located here: -# /home/fredrik/sandbox1/langtools -# /home/fredrik/sandbox2/langtools -# /home/fredrik/sandbox3/langtools -# -# From the source root you create build subdirs manually: -# mkdir -p build1 build2 build3 -# in each build directory run: -# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) -# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) -# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) -# - -AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools], - [use this langtools dir for the build])]) - -AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba], - [use this corba dir for the build])]) - -AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp], - [use this jaxp dir for the build])]) - -AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws], - [use this jaxws dir for the build])]) - -AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot], - [use this hotspot dir for the build])]) - -AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk], - [use this jdk dir for the build])]) - -if test "x$with_override_langtools" != x; then - CURDIR="$PWD" - cd "$with_override_langtools" - LANGTOOLS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override langtools with a full langtools repo!]) - fi - AC_MSG_CHECKING([if langtools should be overridden]) - AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR]) -fi -if test "x$with_override_corba" != x; then - CURDIR="$PWD" - cd "$with_override_corba" - CORBA_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override corba with a full corba repo!]) - fi - AC_MSG_CHECKING([if corba should be overridden]) - AC_MSG_RESULT([yes with $CORBA_TOPDIR]) -fi -if test "x$with_override_jaxp" != x; then - CURDIR="$PWD" - cd "$with_override_jaxp" - JAXP_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override jaxp with a full jaxp repo!]) - fi - AC_MSG_CHECKING([if jaxp should be overridden]) - AC_MSG_RESULT([yes with $JAXP_TOPDIR]) -fi -if test "x$with_override_jaxws" != x; then - CURDIR="$PWD" - cd "$with_override_jaxws" - JAXWS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override jaxws with a full jaxws repo!]) - fi - AC_MSG_CHECKING([if jaxws should be overridden]) - AC_MSG_RESULT([yes with $JAXWS_TOPDIR]) -fi -if test "x$with_override_hotspot" != x; then - CURDIR="$PWD" - cd "$with_override_hotspot" - HOTSPOT_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ - ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override hotspot with a full hotspot repo!]) - fi - AC_MSG_CHECKING([if hotspot should be overridden]) - AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR]) -fi -if test "x$with_override_jdk" != x; then - CURDIR="$PWD" - cd "$with_override_jdk" - JDK_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JDK_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override JDK with a full JDK repo!]) - fi - AC_MSG_CHECKING([if JDK should be overridden]) - AC_MSG_RESULT([yes with $JDK_TOPDIR]) -fi - -############################################################################### -# -# Specify options for anything that is run with the Boot JDK. -# -AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], - [specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values, - e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])]) - -if test "x$with_boot_jdk_jvmargs" = x; then - # Not all JVM:s accept the same arguments on the command line. - # OpenJDK specific increase in thread stack for JDK build, - # well more specifically, when running javac. - if test "x$BUILD_NUM_BITS" = x32; then - STACK_SIZE=768 - else - # Running Javac on a JVM on a 64-bit machine, the stack takes more space - # since 64-bit pointers are pushed on the stach. Apparently, we need - # to increase the stack space when javacing the JDK.... - STACK_SIZE=1536 - fi - - # Minimum amount of heap memory. - ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) - if test "x$HOST_OS" = "xmacosx"; then - # Why does macosx need more heap? Its the huge JDK batch. - ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) - else - ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA]) - fi - # When is adding -client something that speeds up the JVM? - # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA]) - # Disable special log output when a debug build is used as Boot JDK... - ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) -fi - -AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs) - -AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java], - [use this java binary for running the javac background server and other long running java tasks in the build process, - e.g. ---with-server-java="/opt/jrockit/bin/java -server"])]) - -if test "x$with_server_java" != x; then - SERVER_JAVA="$with_server_java" - FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" = x; then - AC_ERROR([Could not execute server java: $SERVER_JAVA]) - fi -else - SERVER_JAVA="" - # Hotspot specific options. - ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA]) - ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA]) - # JRockit specific options. - ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA]) - SERVER_JAVA="$JAVA $SERVER_JAVA" -fi -AC_SUBST(SERVER_JAVA) - -AC_MSG_CHECKING([whether to use shared server for javac]) -AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server], - [enable the shared javac server during the build process @<:@disabled@:>@])], - [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_SERVER]) -if test "x$ENABLE_JAVAC_SERVER" = xyes; then - JAVAC_USE_REMOTE=true - JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" -else - JAVAC_USE_REMOTE=false - JAVAC_SERVERS= -fi -AC_SUBST(JAVAC_USE_REMOTE) -AC_SUBST(JAVAC_SERVERS) - -AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores], - [use at most this number of concurrent threads on the javac server @<:@probed@:>@])]) -if test "x$with_javac_server_cores" != x; then - JAVAC_SERVER_CORES="$with_javac_server_cores" -else - if test "$NUM_CORES" -gt 16; then - # We set this arbitrary limit because we want to limit the heap - # size of the javac server. - # In the future we will make the javac compilers in the server - # share more and more state, thus enabling us to use more and - # more concurrent threads in the server. - JAVAC_SERVER_CORES="16" - else - JAVAC_SERVER_CORES="$NUM_CORES" - fi - - if test "$MEMORY_SIZE" -gt "17000"; then - MAX_HEAP_MEM=10000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "10000"; then - MAX_HEAP_MEM=6000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "5000"; then - MAX_HEAP_MEM=3000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "3800"; then - MAX_HEAP_MEM=2500 - ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "1900"; then - MAX_HEAP_MEM=1200 - ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "1000"; then - MAX_HEAP_MEM=900 - ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) - else - MAX_HEAP_MEM=512 - ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) - fi - - MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` - if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then - AC_MSG_CHECKING([if number of server cores must be reduced]) - JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" - AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB]) - fi -fi -AC_SUBST(JAVAC_SERVER_CORES) - -AC_MSG_CHECKING([whether to track dependencies between Java packages]) -AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps], - [enable the dependency tracking between Java packages @<:@disabled@:>@])], - [ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_DEPS]) -if test "x$ENABLE_JAVAC_DEPS" = xyes; then - JAVAC_USE_DEPS=true -else - JAVAC_USE_DEPS=false -fi -AC_SUBST(JAVAC_USE_DEPS) - -AC_MSG_CHECKING([whether to use multiple cores for javac compilation]) -AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core], - [compile Java packages concurrently @<:@disabled@:>@])], - [ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE]) -if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then - JAVAC_USE_MODE=MULTI_CORE_CONCURRENT -else - JAVAC_USE_MODE=SINGLE_THREADED_BATCH - if test "x$ENABLE_JAVAC_DEPS" = xyes; then - AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.]) - AC_MSG_WARN([Disabling dependency tracking for you now.]) - JAVAC_USE_DEPS=false - fi - if test "x$ENABLE_JAVAC_SERVER" = xyes; then - AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.]) - AC_MSG_WARN([Disabling javac server for you now.]) - JAVAC_USE_REMOTE=false - fi -fi -AC_SUBST(JAVAC_USE_MODE) - -############################################################################### -# -# OS specific settings that we never will need to probe. -# -if test "x$HOST_OS" = xlinux; then - AC_MSG_CHECKING([what is not needed on Linux?]) - PULSE_NOT_NEEDED=yes - AC_MSG_RESULT([pulse]) -fi - -if test "x$HOST_OS" = xsolaris; then - AC_MSG_CHECKING([what is not needed on Solaris?]) - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - AC_MSG_RESULT([alsa pulse]) -fi - -if test "x$HOST_OS" = xwindows; then - AC_MSG_CHECKING([what is not needed on Windows?]) - CUPS_NOT_NEEDED=yes - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - AC_MSG_RESULT([alsa cups pulse x11]) -fi - -if test "x$HOST_OS" = xmacosx; then - AC_MSG_CHECKING([what is not needed on MacOSX?]) - 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]) -fi - -if test "x$HOST_OS" = xbsd; then - AC_MSG_CHECKING([what is not needed on bsd?]) - ALSA_NOT_NEEDED=yes - AC_MSG_RESULT([alsa]) -fi - -############################################################################### -# -# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM -# that uses this API. -# -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]) -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 -else - AC_MSG_RESULT([no]) -fi - -if test "x$HOST_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 - -############################################################################### -# -# Check for X Windows -# -AC_PATH_XTRA - -if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - AC_ERROR([Could not find X11 libraries. $HELP_MSG]) -fi - -AC_SUBST(X_CFLAGS) -AC_SUBST(X_LIBS) - -# 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$HOST_OS" = xlinux; then - if test -d "$SYS_ROOT/usr/X11R6"; then - OPENWIN_HOME="$SYS_ROOT/usr/X11R6" - fi - if test -d "$SYS_ROOT/usr/include/X11"; then - OPENWIN_HOME="$SYS_ROOT/usr" - fi -fi -if test "x$HOST_OS" = xsolaris; then - OPENWIN_HOME="/usr/openwin" -fi -AC_SUBST(OPENWIN_HOME) - -AC_LANG_PUSH(C) -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $X_CFLAGS" -AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], - [X11_A_OK=yes], - [X11_A_OK=no]) -CFLAGS="$OLD_CFLAGS" -AC_LANG_POP(C) - -if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - AC_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) -fi - -############################################################################### -# -# The common unix printing system cups is used to print from java. -# -AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], - [specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], - [specify directory for the cups include files])]) -AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], - [specify directory for the cups library])]) - -if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x$with_cups" != x || test "x$with_cups-include" != x || test "x$with_cups-lib" != x; then - AC_MSG_WARN([cups not used, so --with-cups is ignored]) - fi - CUPS_CFLAGS= - CUPS_LIBS= -else - CUPS_FOUND=no - - if test "x$with_cups" = xno || test "x$with_cups-include" = xno || test "x$with_cups-lib" = xno; then - AC_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) - fi - - if test "x$with_cups" != x; then - CUPS_LIBS="-L$with_cups/lib -lcups" - CUPS_CFLAGS="-I$with_cups/include" - CUPS_FOUND=yes - fi - if test "x$with_cups-include" != x; then - CUPS_CFLAGS="-I$with_cups-include" - CUPS_FOUND=yes - fi - if test "x$with_cups-lib" != x; then - CUPS_LIBS="-L$with_cups-lib -lcups" - CUPS_FOUND=yes - fi - if test "x$CUPS_FOUND" = xno; then - BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) - fi - if test "x$CUPS_FOUND" = xno; then - # Are the cups headers installed in the default /usr/include location? - AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], - [CUPS_FOUND=yes - CUPS_CFLAGS= - CUPS_LIBS="-lcups" - DEFAULT_CUPS=yes]) - fi - if test "x$CUPS_FOUND" = xno; then - # Getting nervous now? Lets poke around for standard Solaris third-party - # package installation locations. - AC_MSG_CHECKING([for cups headers and libs]) - if test -s /opt/sfw/cups/include/cups/cups.h; then - # An SFW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" - elif test -s /opt/csw/include/cups/cups.h; then - # A CSW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" - fi - AC_MSG_RESULT([$CUPS_FOUND]) - fi - if test "x$CUPS_FOUND" = xno; then - help_on_build_dependency cups - AC_ERROR([Could not find cups! $HELP_MSG ]) - fi -fi - -AC_SUBST(CUPS_CFLAGS) -AC_SUBST(CUPS_LIBS) - -############################################################################### -# -# The ubiquitous freetype2 library is used to render fonts. -# -AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype], - [specify prefix directory for the freetype2 package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) - -# 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 - -if test "x$FREETYPE2_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= -else - FREETYPE2_FOUND=no - - if test "x$with_freetype" != x; then - SPACESAFE(with_freetype,[the path to freetype]) - FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" - if test "x$HOST_OS" = xwindows; then - FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" - fi - FREETYPE2_LIB_PATH="$with_freetype/lib" - 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_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_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) - fi - # Check one h-file - if ! test -s "$with_freetype/include/ft2build.h"; then - AC_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; then - PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - AC_MSG_CHECKING([for freetype in some standard locations]) - - if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" - DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" - fi - if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/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 - #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_on_build_dependency freetype2 - AC_ERROR([Could not find freetype2! $HELP_MSG ]) - fi -fi - -AC_SUBST(USING_SYSTEM_FT_LIB) -AC_SUBST(FREETYPE2_LIB_PATH) -AC_SUBST(FREETYPE2_CFLAGS) -AC_SUBST(FREETYPE2_LIBS) - -############################################################################### -# -# Check for alsa headers and libraries. Used on Linux/GNU systems. -# -AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa], - [specify prefix directory for the alsa package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include], - [specify directory for the alsa include files])]) -AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib], - [specify directory for the alsa library])]) - -if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x$with_alsa" != x || test "x$with_alsa-include" != x || test "x$with_alsa-lib" != x; then - AC_MSG_WARN([alsa not used, so --with-alsa is ignored]) - fi - ALSA_CFLAGS= - ALSA_LIBS= -else - ALSA_FOUND=no - - if test "x$with_alsa" = xno || test "x$with_alsa-include" = xno || test "x$with_alsa-lib" = xno; then - AC_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) - fi - - if test "x$with_alsa" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" - ALSA_CFLAGS="-I$with_alsa/include" - ALSA_FOUND=yes - fi - if test "x$with_alsa-include" != x; then - ALSA_CFLAGS="-I$with_alsa/include" - ALSA_FOUND=yes - fi - if test "x$with_alsa-lib" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" - ALSA_FOUND=yes - fi - if test "x$ALSA_FOUND" = xno; then - BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - AC_CHECK_HEADERS([alsa/asoundlib.h], - [ALSA_FOUND=yes - ALSA_CFLAGS=-Iignoreme - ALSA_LIBS=-lasound - DEFAULT_ALSA=yes], - [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - help_on_build_dependency alsa - AC_ERROR([Could not find alsa! $HELP_MSG ]) - fi -fi - -AC_SUBST(ALSA_CFLAGS) -AC_SUBST(ALSA_LIBS) - -############################################################################### -# -# Check for pulse audio headers and libraries. -# -PULSE_FOUND=no -AC_ARG_WITH(pulse, [AS_HELP_STRING([--with-pulse], - [specify prefix directory for the pulseaudio package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(pulse-include, [AS_HELP_STRING([--with-pulse-include], - [specify directory for the pulseaudio include files])]) -AC_ARG_WITH(pulse-lib, [AS_HELP_STRING([--with-pulse-lib], - [specify directory for the pulseaudio library])]) - -if test "x$with_pulse" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" - PULSE_CFLAGS="-I$with_pulse/include" - PULSE_FOUND=yes -fi -if test "x$with_pulse-include" != x; then - PULSE_CFLAGS="-I$with_pulse/include" - PULSE_FOUND=yes -fi -if test "x$with_pulse-lib" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" - PULSE_FOUND=yes -fi -if test "x$PULSE_FOUND" = xno; then - BDEPS_CHECK_MODULE(PULSE, pulse, xxx, [PULSE_FOUND=yes], [PULSE_FOUND=no]) -fi -if test "x$PULSE_FOUND" = xno; then - PKG_CHECK_MODULES(LIBPULSE,[libpulse >= 0.9.11],[PULSE_FOUND=yes],[PULSE_FOUND=no]) -fi -if test "x$PULSE_FOUND" = xno; then - AC_CHECK_HEADERS([pulse/pulseaudio.h], - [PULSE_FOUND=yes - PULSE_CFLAGS=-Iignoreme - PULSE_LIBS= - DEFAULT_PULSE=yes], - [PULSE_FOUND=no]) -fi - -if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then - help_on_build_dependency pulse - AC_ERROR([Could not find pulse audio libraries. $HELP_MSG ]) -fi - -AC_SUBST(PULSE_CFLAGS) -AC_SUBST(PULSE_LIBS) - -############################################################################### -# -# Check for the jpeg library -# - -USE_EXTERNAL_LIBJPEG=true -AC_CHECK_LIB(jpeg, main, [], - [ USE_EXTERNAL_LIBJPEG=false - AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBJPEG) - -############################################################################### -# -# Check for the gif library -# - -USE_EXTERNAL_LIBJPEG=true -AC_CHECK_LIB(gif, main, [], - [ USE_EXTERNAL_LIBGIF=false - AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBGIF) - -############################################################################### -# -# Check for the zlib library -# - -USE_EXTERNAL_LIBZ=true -AC_CHECK_LIB(z, main, [], - [ USE_EXTERNAL_LIBZ=false - AC_MSG_NOTICE([Will use zlib bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBZ) - -############################################################################### -# -# Check if altzone exists in time.h -# - -AC_TRY_LINK([#include ], [return (int)altzone;], - has_altzone=yes, - has_altzone=no) -if test "x$has_altzone" = xyes; then - AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h]) -fi - -############################################################################### -# -# Check the maths library -# - -AC_CHECK_LIB(m, main, [], - [ - AC_MSG_NOTICE([Maths library was not found]) - ]) -AC_SUBST(LIBM) - -############################################################################### -# -# Should we run the painfully slow javadoc tool? -# -AC_MSG_CHECKING([whether to build documentation]) -AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs], - [enable generation of Javadoc documentation @<:@disabled@:>@])], - [ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no']) -AC_MSG_RESULT([$ENABLE_DOCS]) -AC_SUBST(ENABLE_DOCS) -GENERATE_DOCS=false -if test "x$ENABLE_DOCS" = xyes; then - GENERATE_DOCS=true -fi -AC_SUBST(GENERATE_DOCS) - -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -AC_MSG_CHECKING([whether to build nimbus L&F]) -AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], - [disable Nimbus L&F @<:@enabled@:>@])], - [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) -AC_MSG_RESULT([$ENABLE_NIMBUS]) -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi -AC_SUBST(DISABLE_NIMBUS) - -############################################################################### -# -# Setup the opt flags for different compilers -# and different operating systems. -# -case $COMPILER_TYPE in - CC ) - D_FLAG="-g" - case $COMPILER_NAME in - gcc ) - case $PLATFORM in - macosx ) - # On MacOSX we optimize for size, something - # we should do for all platforms? - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="-O0" - ;; - *) - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="-O0" - ;; - esac - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; - ossc ) - case $LEGACY_HOST_CPU1 in - i586) - C_O_FLAG_HI="-xO4 -Wu,-O4~yz" - C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" - C_O_FLAG_NONE="" - CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" - CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" - CXX_O_FLAG_NONE="" - ;; - sparc) - C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NONE="" - CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NONE="" - ;; - esac - esac - ;; - CL ) - D_FLAG= - C_O_FLAG_HI="-O2" - C_O_FLAG_NORM="-O1" - C_O_FLAG_NONE="-Od" - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; -esac - -AC_SUBST(C_O_FLAG_HI) -AC_SUBST(C_O_FLAG_NORM) -AC_SUBST(C_O_FLAG_NONE) -AC_SUBST(CXX_O_FLAG_HI) -AC_SUBST(CXX_O_FLAG_NORM) -AC_SUBST(CXX_O_FLAG_NONE) - -############################################################################### -# -# Setup legacy vars/targets and new vars to deal with different debug levels. -# -case $DEBUG_LEVEL in - release ) - HOTSPOT_DEBUG_LEVEL="product" - HOTSPOT_EXPORT="product" - ;; - fastdebug ) - HOTSPOT_DEBUG_LEVEL="fastdebug" - HOTSPOT_EXPORT="fastdebug" - CFLAGS="$CFLAGS $D_FLAG" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; - slowdebug ) - HOTSPOT_DEBUG_LEVEL="jvmg" - HOTSPOT_EXPORT="debug" - CFLAGS="$CFLAGS $D_FLAG" - C_O_FLAG_HI="$C_O_FLAG_NONE" - C_O_FLAG_NORM="$C_O_FLAG_NONE" - CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; -esac - -############################################################################### -# -# Generate the legacy makefile targets for hotspot. -# The hotspot api for selecting the build artifacts, really, needs to be improved. -# -HOTSPOT_TARGET="" - -if test "x$JVM_VARIANT_SERVER" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " -fi - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " -fi - -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " -fi - -if test "x$JVM_VARIANT_ZERO" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " -fi - -if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " -fi - -HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" - -############################################################################### -# -# Setup all directories for the subrepoes and the arguments to the sub makes. -# -LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" -LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" -LANGTOOLS_MAKE_ARGS="" -AC_SUBST(LANGTOOLS_OUTPUTDIR) -AC_SUBST(LANGTOOLS_DIST) -AC_SUBST(LANGTOOLS_MAKE_ARGS) - -CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" -CORBA_DIST="$OUTPUT_ROOT/corba/dist" -CORBA_MAKE_ARGS="" -AC_SUBST(CORBA_OUTPUTDIR) -AC_SUBST(CORBA_DIST) -AC_SUBST(CORBA_MAKE_ARGS) - -JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" -JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" -JAXP_MAKE_ARGS="" -AC_SUBST(JAXP_OUTPUTDIR) -AC_SUBST(JAXP_DIST) -AC_SUBST(JAXP_MAKE_ARGS) - -JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" -JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" -JAXWS_MAKE_ARGS="" -AC_SUBST(JAXWS_OUTPUTDIR) -AC_SUBST(JAXWS_DIST) -AC_SUBST(JAXWS_MAKE_ARGS) - -HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" -HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" -HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" -AC_SUBST(HOTSPOT_OUTPUTDIR) -AC_SUBST(HOTSPOT_DIST) -AC_SUBST(HOTSPOT_MAKE_ARGS) - -JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" -JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\"" -AC_SUBST(JDK_OUTPUTDIR) -AC_SUBST(JDK_MAKE_ARGS) - -IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images -IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \ - SHARE_SRC=$JDK_TOPDIR/src/share \ - PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \ - TEMPDIR=$IMAGES_OUTPUTDIR/tmp \ - ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp " -AC_SUBST(IMAGES_OUTPUTDIR) -AC_SUBST(IMAGES_MAKE_ARGS) - -############################################################################### -# -# Now setup the CFLAGS and LDFLAGS for the JDK build. -# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. -# -case $COMPILER_NAME in - gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer \ - -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" - CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" - ;; - ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa REQUIRED -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt REQUIRED -features=no%except -DCC_NOEX" - ;; - cl ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ - -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ - -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ - -DWIN32 -DIAL" - case $LEGACY_HOST_CPU1 in - i?86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" - ;; - amd64 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" - ;; - esac - ;; -esac - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" - -# The package path is used only on macosx? -PACKAGE_PATH=/opt/local -AC_SUBST(PACKAGE_PATH) - -# Sometimes we use a cpu dir (.../lib/amd64/server) -# Sometimes not (.../lib/server) -LIBARCHDIR="$LEGACY_HOST_CPU2/" -if test "x$ENDIAN" = xlittle; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" -fi -if test "x$HOST_OS" = xlinux; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" -fi -if test "x$HOST_OS" = xwindows; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" -fi -if test "x$HOST_OS" = xsolaris; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" -fi -if test "x$HOST_OS" = xmacosx; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" - LIBARCHDIR="" -fi -if test "x$HOST_OS" = xbsd; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" -fi -if test "x$DEBUG_LEVEL" = xrelease; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" -fi - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1" -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ - -I${JDK_OUTPUTDIR}/include \ - -I${JDK_OUTPUTDIR}/include/$PLATFORM \ - -I${JDK_TOPDIR}/src/share/javavm/export \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \ - -I${JDK_TOPDIR}/src/share/native/common \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common" - -# The shared libraries are compiled using the picflag. -CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" -CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG" - -# Executable flags -CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" -CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" - -# Now this is odd. The JDK native libraries have to link against libjvm.so -# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. -# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library -# is identical for client and server? Yes. Which is picked at runtime (client or server)? -# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following -# libraries will link to whatever is in memory. Yuck. -# -# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -libpath:${JDK_OUTPUTDIR}/lib jvm.lib java.lib" - LDFLAGS_JDKLIB_SUFFIX="" - if test "x$HOST_CPU_BITS" = "x64"; then - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj64/jli.lib" - else - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj/jli.lib" - fi - LDFLAGS_JDKEXE_SUFFIX="" -else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS="$LDFLAGS -Xlinker -O1" - fi - fi - - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" - LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" - if test "x$COMPILER_NAME" = xossc; then - LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" - fi - - # Only the jli library is explicitly linked when the launchers are built. - # The libjvm is then dynamically loaded/linked by the launcher. - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" -fi - - -AC_SUBST(CFLAGS_JDKLIB) -AC_SUBST(CFLAGS_JDKEXE) - -AC_SUBST(CXXFLAGS_JDKLIB) -AC_SUBST(CXXFLAGS_JDKEXE) - -AC_SUBST(LDFLAGS_JDKLIB) -AC_SUBST(LDFLAGS_JDKEXE) -AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) -AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) - - -############################################################################### -# -# statically link libstdc++ before C++ ABI is stablized on Linux unless -# dynamic build is configured on command line. -# -AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++], - [disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],, - [ - enable_static_link_stdc__=yes - ]) - -if test "x$HOST_OS" = xlinux; then - # Test if -lstdc++ works. - AC_MSG_CHECKING([if dynamic link of stdc++ is possible]) - AC_LANG_PUSH(C++) - OLD_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -lstdc++" - AC_TRY_LINK([], [return 0;], - has_dynamic_libstdcxx=yes, - has_dynamic_libstdcxx=no) - CXXFLAGS="$OLD_CXXFLAGS" - AC_LANG_POP(C++) - AC_MSG_RESULT([$has_dynamic_libstdcxx]) - - # Test if stdc++ can be linked statically. - AC_MSG_CHECKING([if static link of stdc++ is possible]) - STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" - AC_LANG_PUSH(C++) - OLD_LIBS="$LIBS" - OLD_CXX="$CXX" - LIBS="$STATIC_STDCXX_FLAGS" - CXX="$CC" - AC_TRY_LINK([], [return 0;], - has_static_libstdcxx=yes, - has_static_libstdcxx=no) - LIBS="$OLD_LIBS" - CXX="$OLD_CXX" - AC_LANG_POP(C++) - AC_MSG_RESULT([$has_static_libstdcxx]) - - if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then - AC_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) - fi - - if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then - AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.]) - enable_static_link_stdc__=no - fi - - if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then - AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.]) - enable_static_link_stdc__=yes - fi - - AC_MSG_CHECKING([how to link with libstdc++]) - if test "x$enable_static_link_stdc__" = xyes; then - LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" - LDCXX="$CC" - AC_MSG_RESULT([static]) - else - LIBCXX="$LIBCXX -lstdc++" - LDCXX="$CXX" - AC_MSG_RESULT([dynamic]) - fi -fi - -############################################################################### -# -# Could someone enlighten this configure script with a comment about libCrun? -# The LEGACY_HOST_CPU3 is the setting for ISA_DIR. -# -if test "x$HOST_OS" = xsolaris; then - LIBCXX="$LIBCXX /usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" -fi - -AC_SUBST(LIBCXX) - -############################################################################### -# -# Misc -# - -# Control wether Hotspot runs Queens test after build. -AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], - [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, - [enable_hotspot_test_in_build=no]) -if test "x$enable_hotspot_test_in_build" = "xyes"; then - TEST_IN_BUILD=true -else - TEST_IN_BUILD=false -fi -AC_SUBST(TEST_IN_BUILD) - -############################################################################### -# -# A helpful message at the end of the configure run. -# -if test "x$CCACHE_FOUND" = x && test "x$GCC" = xyes; then - help_on_build_dependency ccache - - printf "\nTip of the day:\nYou should really install ccache version 3.1.4 or newer.\n" - printf "It gives a tremendous speedup for C++ recompilations with precompiled headers!\n" -fi - -if test "x$CCACHE_FOUND" != x && test "x$HAS_GOOD_CCACHE" = x; then - printf "You have a ccache installed, but it is a version prior to 3.1.4. Try upgrading.\n" -fi +# At the end, call the closed hook. (Dummy macro if no closed sources available) +CLOSED_HOOK +# We're messing a bit with internal autoconf variables to put the config.status +# in the output directory instead of the current directory. +CONFIG_STATUS="$OUTPUT_ROOT/config.status" +# Create the actual output files. Now the main work of configure is done. AC_OUTPUT + +# Finally output some useful information to the user +HELP_PRINT_SUMMARY_AND_WARNINGS diff --git a/common/autoconf/cores.m4 b/common/autoconf/cores.m4 deleted file mode 100644 index f48887d36be..00000000000 --- a/common/autoconf/cores.m4 +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -AC_DEFUN([CHECK_CORES], -[ - AC_MSG_CHECKING([for number of cores]) - NUM_CORES=1 - FOUND_CORES=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - NUM_CORES=`cat /proc/cpuinfo | grep -c processor` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/psrinfo; then - # Looks like a Solaris system - NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` - FOUND_CORES=yes - fi - - if test "x$build_os" = xwindows; then - NUM_CORES=4 - fi - - # For c/c++ code we run twice as many concurrent build - # jobs than we have cores, otherwise we will stall on io. - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` - - if test "x$FOUND_CORES" = xyes; then - AC_MSG_RESULT([$NUM_CORES]) - else - AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) - fi - -]) - -AC_DEFUN([CHECK_MEMORY_SIZE], -[ - AC_MSG_CHECKING([for memory size]) - # Default to 1024MB - MEMORY_SIZE=1024 - FOUND_MEM=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` - FOUND_MEM=yes - fi - - if test "x$build_os" = xwindows; then - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` - FOUND_MEM=yes - fi - - if test "x$FOUND_MEM" = xyes; then - AC_MSG_RESULT([$MEMORY_SIZE MB]) - else - AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!]) - fi -]) diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh new file mode 100644 index 00000000000..5f7058f9300 --- /dev/null +++ b/common/autoconf/generated-configure.sh @@ -0,0 +1,18054 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.67 for openjdk jdk8. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: build-dev@openjdk.java.net about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='openjdk' +PACKAGE_TARNAME='openjdk' +PACKAGE_VERSION='jdk8' +PACKAGE_STRING='openjdk jdk8' +PACKAGE_BUGREPORT='build-dev@openjdk.java.net' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='LTLIBOBJS +LIBOBJS +CCACHE +USE_PRECOMPILED_HEADER +ENABLE_SJAVAC +JAVAC_USE_MODE +JAVAC_USE_DEPS +JAVAC_SERVER_CORES +JAVAC_SERVERS +JAVAC_USE_REMOTE +SERVER_JAVA +MEMORY_SIZE +CONCURRENT_BUILD_JOBS +NUM_CORES +SALIB_NAME +HOTSPOT_MAKE_ARGS +LIBCXX +LIBDL +LIBM +LIBZIP_CAN_USE_MMAP +USE_EXTERNAL_LIBZ +USE_EXTERNAL_LIBGIF +USE_EXTERNAL_LIBJPEG +ALSA_LIBS +ALSA_CFLAGS +FREETYPE2_LIB_PATH +USING_SYSTEM_FT_LIB +FREETYPE2_LIBS +FREETYPE2_CFLAGS +CUPS_LIBS +CUPS_CFLAGS +OPENWIN_HOME +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +CXXFLAGS_DEBUG_SYMBOLS +CFLAGS_DEBUG_SYMBOLS +ZIP_DEBUGINFO_FILES +ENABLE_DEBUG_SYMBOLS +UNCYGDRIVE +LDFLAGS_JDKEXE_SUFFIX +LDFLAGS_JDKLIB_SUFFIX +LDFLAGS_JDKEXE +LDFLAGS_JDKLIB +CXXFLAGS_JDKEXE +CXXFLAGS_JDKLIB +CFLAGS_JDKEXE +CFLAGS_JDKLIB +PACKAGE_PATH +CXX_FLAG_DEPS +C_FLAG_DEPS +CXX_O_FLAG_NONE +CXX_O_FLAG_NORM +CXX_O_FLAG_HI +CXX_O_FLAG_HIGHEST +C_O_FLAG_NONE +C_O_FLAG_NORM +C_O_FLAG_HI +C_O_FLAG_HIGHEST +POST_MCS_CMD +POST_STRIP_CMD +SET_SHARED_LIBRARY_ORIGIN +CXX_FLAG_REORDER +C_FLAG_REORDER +SET_SHARED_LIBRARY_MAPFILE +SET_SHARED_LIBRARY_NAME +SHARED_LIBRARY_FLAGS +EXE_SUFFIX +STATIC_LIBRARY_SUFFIX +SHARED_LIBRARY_SUFFIX +LIBRARY_PREFIX +STATIC_LIBRARY +SHARED_LIBRARY +OBJ_SUFFIX +ENDIAN +ARCH_DATA_MODEL +LP64 +OBJCOPY +MCS +STRIP +NM +ASFLAGS +AS +CXXCPP +CPP +COMPILER_TYPE +RC_FLAGS +DUMPBIN +WINAR +RC +MT +WINLD +ARFLAGS +AR +LDEXECXX +LDCXX +LDEXE +LD +ac_ct_OBJC +OBJCFLAGS +OBJC +ac_ct_CXX +CXXFLAGS +CXX +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +HOSTLD +HOSTCXX +HOSTCC +DEFINE_CROSS_COMPILE_ARCH +MSVCR100DLL +CHECK_FOR_VCINSTALLDIR +SETUPDEVENV +AR_OUT_OPTION +LD_OUT_OPTION +EXE_OUT_OPTION +CC_OUT_OPTION +SYS_ROOT +HOTSPOT_DIST +JAXWS_DIST +JAXP_DIST +CORBA_DIST +LANGTOOLS_DIST +IMAGES_OUTPUTDIR +JDK_OUTPUTDIR +HOTSPOT_OUTPUTDIR +JAXWS_OUTPUTDIR +JAXP_OUTPUTDIR +CORBA_OUTPUTDIR +LANGTOOLS_OUTPUTDIR +OVERRIDE_SRC_ROOT +ADD_SRC_ROOT +JDK_TOPDIR +HOTSPOT_TOPDIR +JAXWS_TOPDIR +JAXP_TOPDIR +CORBA_TOPDIR +LANGTOOLS_TOPDIR +BOOT_JDK_JVMARGS +NATIVE2ASCII +RMIC +JAR +JAVAH +JAVAC_FLAGS +JAVAC +BOOT_JDK_SOURCETARGET +JAVA +BOOT_TOOLSJAR +BOOT_RTJAR +BOOT_JDK +JAVA_CHECK +JAVAC_CHECK +OUTPUT_ROOT +CONF_NAME +SPEC +COOKED_BUILD_NUMBER +FULL_VERSION +RELEASE +JDK_VERSION +RUNTIME_NAME +COPYRIGHT_YEAR +COMPANY_NAME +JDK_RC_PLATFORM_NAME +PRODUCT_SUFFIX +PRODUCT_NAME +LAUNCHER_NAME +MILESTONE +JDK_BUILD_NUMBER +JDK_UPDATE_VERSION +JDK_MICRO_VERSION +JDK_MINOR_VERSION +JDK_MAJOR_VERSION +ENABLE_JFR +COMPRESS_JARS +CACERTS_FILE +TEST_IN_BUILD +DISABLE_NIMBUS +GENERATE_DOCS +ENABLE_DOCS +BUILD_HEADLESS_ONLY +BUILD_HEADLESS +SUPPORT_HEADFUL +SUPPORT_HEADLESS +JIGSAW +SET_OPENJDK +BUILD_VARIANT_RELEASE +DEBUG_CLASSFILES +FASTDEBUG +VARIANT +DEBUG_LEVEL +JVM_VARIANT_ZEROSHARK +JVM_VARIANT_ZERO +JVM_VARIANT_KERNEL +JVM_VARIANT_CLIENT +JVM_VARIANT_SERVER +JVM_VARIANTS +JDK_VARIANT +MINIMIZE_RAM_USAGE +JAVASE_EMBEDDED +PATH_SEP +CYGPATH +OS_VERSION_MICRO +OS_VERSION_MINOR +OS_VERSION_MAJOR +REQUIRED_OS_VERSION +REQUIRED_OS_NAME +LEGACY_OPENJDK_BUILD_CPU3 +LEGACY_OPENJDK_BUILD_CPU2 +LEGACY_OPENJDK_BUILD_CPU1 +OPENJDK_BUILD_CPU_ENDIAN +OPENJDK_BUILD_CPU_BITS +OPENJDK_BUILD_CPU_ARCH +OPENJDK_BUILD_CPU +LEGACY_OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS_FAMILY +OPENJDK_BUILD_OS +LEGACY_OPENJDK_TARGET_CPU3 +LEGACY_OPENJDK_TARGET_CPU2 +LEGACY_OPENJDK_TARGET_CPU1 +OPENJDK_TARGET_CPU_ENDIAN +OPENJDK_TARGET_CPU_BITS +OPENJDK_TARGET_CPU_ARCH +OPENJDK_TARGET_CPU +LEGACY_OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS_FAMILY +OPENJDK_TARGET_OS +OPENJDK_BUILD_SYSTEM +OPENJDK_TARGET_SYSTEM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +PKG_CONFIG +BDEPS_FTP +BDEPS_UNZIP +HG +FILE +EXPR +READELF +OTOOL +LDD +UNZIP +ZIP +XARGS +WC +TOUCH +TR +TEE +TAIL +TAR +SORT +SH +SED +RM +THEPWDCMD +PRINTF +NAWK +MV +MKDIR +MAKE +LS +LN +HEAD +FIND_DELETE +FIND +FGREP +EGREP +GREP +ECHO +DIFF +DF +DATE +CUT +CPIO +CP +CHMOD +CAT +AWK +PKGHANDLER +BUILD_LOG_WRAPPER +BUILD_LOG_PREVIOUS +BUILD_LOG +SRC_ROOT +READLINK +DATE_WHEN_CONFIGURED +CONFIGURE_COMMAND_LINE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_builddeps_conf +with_builddeps_server +with_builddeps_dir +with_builddeps_group +enable_list_builddeps +with_target_bits +with_jdk_variant +with_jvm_variants +enable_debug +with_debug_level +enable_openjdk_only +enable_jigsaw +enable_headful +enable_docs +enable_nimbus +enable_hotspot_test_in_build +with_cacerts_file +enable_jfr +with_conf_name +with_boot_jdk +with_boot_jdk_jvmargs +with_add_source_root +with_override_source_root +with_adds_and_overrides +with_override_langtools +with_override_corba +with_override_jaxp +with_override_jaxws +with_override_hotspot +with_override_jdk +with_msvcr100dll +with_sys_root +with_tools_dir +with_devkit +with_extra_cflags +with_extra_cxxflags +with_extra_ldflags +enable_debug_symbols +enable_zip_debug_info +enable_macosx_runtime_support +with_x +with_cups +with_cups_include +with_cups_lib +with_freetype +with_alsa +with_alsa_include +with_alsa_lib +with_zlib +enable_static_link_stdc__ +with_num_cores +with_memory_size +with_server_java +enable_javac_server +with_javac_server_cores +enable_javac_deps +enable_javac_multi_core +enable_sjavac +enable_precompiled_headers +enable_ccache +with_ccache_dir +' + ac_precious_vars='build_alias +host_alias +target_alias +PKG_CONFIG +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +OBJC +OBJCFLAGS +CPP +CXXCPP +XMKMF +FREETYPE2_CFLAGS +FREETYPE2_LIBS +ALSA_CFLAGS +ALSA_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures openjdk jdk8 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/openjdk] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of openjdk jdk8:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-list-builddeps list all build dependencies known to the configure + script + --enable-debug set the debug level to fastdebug (shorthand for + --with-debug-level=fastdebug) [disabled] + --enable-openjdk-only build OpenJDK regardless of the presence of closed + repositories [disabled] + --enable-jigsaw build Jigsaw images (not yet available) [disabled] + --disable-headful build headful support (graphical UI support) + [enabled] + --enable-docs enable generation of Javadoc documentation + [disabled] + --disable-nimbus disable Nimbus L&F [enabled] + --enable-hotspot-test-in-build + enable running of Queens test after Hotspot build + (not yet available) [disabled] + --enable-jfr enable jfr (default is no) + ENABLE_JFR="${enableval}" + --disable-debug-symbols disable generation of debug symbols ([enabled]) + --disable-zip-debug-info + don't zip debug-info files ([enabled@:@) + --disable-macosx-runtime-support + disable the use of MacOSX Java runtime support + framework [enabled] + --disable-static-link-stdc++ + disable static linking of the C++ runtime on Linux + [enabled] + --enable-javac-server enable the shared javac server during the build + process [disabled] + --enable-javac-deps enable the dependency tracking between Java packages + [disabled] + --enable-javac-multi-core + compile Java packages concurrently [disabled] + --enable-sjavac use sjavac to do fast incremental compiles + [disabled] + --disable-precompiled-headers + use precompiled headers when compiling C++ [enabled] + --disable-ccache use ccache to speed up recompilations [enabled] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-builddeps-conf use this configuration file for the builddeps + --with-builddeps-server download and use build dependencies from this server + url, e.g. + --with-builddeps-server=ftp://example.com/dir + --with-builddeps-dir store downloaded build dependencies here + [d/localhome/builddeps] + --with-builddeps-group chgrp the downloaded build dependencies to this + group + --with-target-bits build 32-bit or 64-bit binaries (for platforms that + support it), e.g. --with-target-bits=32 [guessed] + --with-jdk-variant JDK variant to build (normal, embedded) [normal] + --with-jvm-variants JVM variants (separated by commas) to build (server, + client, kernel, zero, zeroshark) [server] + --with-debug-level set the debug level (release, fastdebug, slowdebug) + [release] + --with-cacerts-file specify alternative cacerts file + --with-conf-name use this as the name of the configuration, + overriding the generated default + --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] + --with-boot-jdk-jvmargs specify JVM arguments to be passed to all + invocations of the Boot JDK, overriding the default + values, e.g --with-boot-jdk-jvmargs="-Xmx8G + -enableassertions" + --with-add-source-root for each and every source directory, look in this + additional source root for the same directory; if it + exists and have files in it, include it in the build + --with-override-source-root + for each and every source directory, look in this + override source root for the same directory; if it + exists, use that directory instead and ignore the + directory in the original source root + --with-adds-and-overrides + use the subdirs 'adds' and 'overrides' in the + specified directory as add-source-root and + override-source-root + --with-override-langtools + use this langtools dir for the build + --with-override-corba use this corba dir for the build + --with-override-jaxp use this jaxp dir for the build + --with-override-jaxws use this jaxws dir for the build + --with-override-hotspot use this hotspot dir for the build + --with-override-jdk use this jdk dir for the build + --with-msvcr100dll copy this msvcr100.dll into the built JDK + --with-sys-root pass this sys-root to the compilers and linker + (useful if the sys-root encoded in the cross + compiler tools is incorrect) + --with-tools-dir search this directory for compilers and tools + --with-devkit use this directory as base for tools-dir and + sys-root + --with-extra-cflags extra flags to be used when compiling jdk c-files + --with-extra-cxxflags extra flags to be used when compiling jdk c++-files + --with-extra-ldflags extra flags to be used when linking jdk + --with-x use the X Window System + --with-cups specify prefix directory for the cups package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-cups-include specify directory for the cups include files + --with-cups-lib specify directory for the cups library + --with-freetype specify prefix directory for the freetype2 package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-alsa specify prefix directory for the alsa package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-alsa-include specify directory for the alsa include files + --with-alsa-lib specify directory for the alsa library + --with-zlib use zlib from build system or OpenJDK source + (system, bundled) [bundled] + --with-num-cores number of cores in the build system, e.g. + --with-num-cores=8 [probed] + --with-memory-size memory (in MB) available in the build system, e.g. + --with-memory-size=1024 [probed] + --with-server-java use this java binary for running the javac + background server and other long running java tasks + in the build process, e.g. + ---with-server-java="/opt/jrockit/bin/java -server" + --with-javac-server-cores + use at most this number of concurrent threads on the + javac server [probed] + --with-ccache-dir where to store ccache files [~/.ccache] + +Some influential environment variables: + PKG_CONFIG path to pkg-config utility + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + OBJC Objective C compiler command + OBJCFLAGS Objective C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + XMKMF Path to xmkmf, Makefile generator for X Window System + FREETYPE2_CFLAGS + C compiler flags for FREETYPE2, overriding pkg-config + FREETYPE2_LIBS + linker flags for FREETYPE2, overriding pkg-config + ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config + ALSA_LIBS linker flags for ALSA, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +openjdk configure jdk8 +generated by GNU Autoconf 2.67 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_objc_try_compile LINENO +# ----------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_objc_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_objc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_objc_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_run LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_run + +# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES +# ---------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_cxx_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_header_compile + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------------- ## +## Report this to build-dev@openjdk.java.net ## +## ----------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------------- ## +## Report this to build-dev@openjdk.java.net ## +## ----------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by openjdk $as_me jdk8, which was +generated by GNU Autoconf 2.67. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Do not change or remove the following line, it is needed for consistency checks: +# DATE_WHEN_GENERATED: 1341161875 + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- + + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +# PKG_CHECK_MODULES + + +# Include these first... +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + + + + + + + + + + +#%%% Simple tools %%% + + + + + + + + + + + + +# Check if build directory is on local disk. +# Argument 1: directory to test +# Argument 2: what to do if it is on local disk +# Argument 3: what to do otherwise (remote disk or failure) + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + +# ... then the rest +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Fixes paths on windows to be mixed mode short. + + + + +############################################################################### +# +# We need a Boot JDK to bootstrap the build. +# + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + +apt_help() { + case $1 in + devkit) + PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; + openjdk) + PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;; + alsa) + PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;; + cups) + PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;; + freetype2) + PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;; + pulse) + PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;; + x11) + PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;; + ccache) + PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; + * ) + break ;; + esac +} + +yum_help() { + case $1 in + devkit) + PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; + openjdk) + PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;; + alsa) + PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;; + cups) + PKGHANDLER_COMMAND="sudo yum install cups-devel" ;; + freetype2) + PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;; + pulse) + PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;; + x11) + PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;; + ccache) + PKGHANDLER_COMMAND="sudo yum install ccache" ;; + * ) + break ;; + esac +} + +port_help() { + PKGHANDLER_COMMAND="" +} + +pkgutil_help() { + PKGHANDLER_COMMAND="" +} + +pkgadd_help() { + PKGHANDLER_COMMAND="" +} + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + +#%%% Build and target systems %%% + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + +# This line needs to be here, verbatim, after all includes. +# It is replaced with closed functionality when building +# closed sources. + + +############################################################################### +# +# Initialization +# +############################################################################### + +# Basic initialization that must happen first of all + +# Save the original command line. This is passed to us by the wrapper configure script. + +DATE_WHEN_CONFIGURED=`LANG=C date` + + +# Locate the directory of this script. +SCRIPT="$0" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + # Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READLINK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + SCRIPT=`$READLINK -f $SCRIPT` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname $SCRIPT` + FIL=`basename $SCRIPT` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + SCRIPT=$DIR/$FIL + fi + fi + +AUTOCONF_DIR=`dirname $0` + + +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT_LENGTH=`pwd|wc -m` + if test $SRC_ROOT_LENGTH -gt 100; then + as_fn_error $? "Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported" "$LINENO" 5 + fi +fi + +cd "$CURDIR" + + + # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$SRC_ROOT" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` + SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` + else + as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 + fi + fi + + + # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$CURDIR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + CURDIR=`$CYGPATH -s -m -a "$CURDIR"` + CURDIR=`$CYGPATH -u "$CURDIR"` + else + as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 + fi + fi + + + +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' + + + + + +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. + + for ac_prog in apt-get yum port pkgutil pkgadd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PKGHANDLER"; then + ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PKGHANDLER="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PKGHANDLER=$ac_cv_prog_PKGHANDLER +if test -n "$PKGHANDLER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 +$as_echo "$PKGHANDLER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PKGHANDLER" && break +done + + + +# Setup simple tools, that do not need have cross compilation support. +# Without these, we can't properly run the rest of the configure script. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + # Test that variable AWK is not empty. + if test "" = "$AWK"; then as_fn_error $? "Could not find awk !" "$LINENO" 5 ; fi + +# Extract the first word of "cat", so it can be a program name with args. +set dummy cat; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CAT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CAT="$CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CAT=$ac_cv_path_CAT +if test -n "$CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 +$as_echo "$CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CAT is not empty. + if test "" = "$CAT"; then as_fn_error $? "Could not find cat !" "$LINENO" 5 ; fi + +# Extract the first word of "chmod", so it can be a program name with args. +set dummy chmod; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHMOD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CHMOD is not empty. + if test "" = "$CHMOD"; then as_fn_error $? "Could not find chmod !" "$LINENO" 5 ; fi + +# Extract the first word of "cp", so it can be a program name with args. +set dummy cp; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CP is not empty. + if test "" = "$CP"; then as_fn_error $? "Could not find cp !" "$LINENO" 5 ; fi + +# Extract the first word of "cpio", so it can be a program name with args. +set dummy cpio; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CPIO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CPIO=$ac_cv_path_CPIO +if test -n "$CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 +$as_echo "$CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CPIO is not empty. + if test "" = "$CPIO"; then as_fn_error $? "Could not find cpio !" "$LINENO" 5 ; fi + +# Extract the first word of "cut", so it can be a program name with args. +set dummy cut; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CUT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CUT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUT="$CUT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUT=$ac_cv_path_CUT +if test -n "$CUT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 +$as_echo "$CUT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CUT is not empty. + if test "" = "$CUT"; then as_fn_error $? "Could not find cut !" "$LINENO" 5 ; fi + +# Extract the first word of "date", so it can be a program name with args. +set dummy date; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DATE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DATE="$DATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DATE=$ac_cv_path_DATE +if test -n "$DATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 +$as_echo "$DATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DATE is not empty. + if test "" = "$DATE"; then as_fn_error $? "Could not find date !" "$LINENO" 5 ; fi + +# Extract the first word of "df", so it can be a program name with args. +set dummy df; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DF is not empty. + if test "" = "$DF"; then as_fn_error $? "Could not find df !" "$LINENO" 5 ; fi + +# Extract the first word of "diff", so it can be a program name with args. +set dummy diff; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DIFF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DIFF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIFF=$ac_cv_path_DIFF +if test -n "$DIFF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +$as_echo "$DIFF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DIFF is not empty. + if test "" = "$DIFF"; then as_fn_error $? "Could not find diff !" "$LINENO" 5 ; fi + +# Warning echo is really, really unportable!!!!! Different +# behaviour in bash and dash and in a lot of other shells! +# Use printf for serious work! +# Extract the first word of "echo", so it can be a program name with args. +set dummy echo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ECHO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ECHO in + [\\/]* | ?:[\\/]*) + ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ECHO=$ac_cv_path_ECHO +if test -n "$ECHO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 +$as_echo "$ECHO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable ECHO is not empty. + if test "" = "$ECHO"; then as_fn_error $? "Could not find echo !" "$LINENO" 5 ; fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + + # Test that variable EGREP is not empty. + if test "" = "$EGREP"; then as_fn_error $? "Could not find egrep !" "$LINENO" 5 ; fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + + + # Test that variable FGREP is not empty. + if test "" = "$FGREP"; then as_fn_error $? "Could not find fgrep !" "$LINENO" 5 ; fi + + +# Extract the first word of "find", so it can be a program name with args. +set dummy find; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FIND+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +$as_echo "$FIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable FIND is not empty. + if test "" = "$FIND"; then as_fn_error $? "Could not find find !" "$LINENO" 5 ; fi + + + # Test if find supports -delete + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 +$as_echo_n "checking if find supports -delete... " >&6; } + FIND_DELETE="-delete" + + DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rmdir $DELETEDIR + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + + # Test that variable GREP is not empty. + if test "" = "$GREP"; then as_fn_error $? "Could not find grep !" "$LINENO" 5 ; fi + +# Extract the first word of "head", so it can be a program name with args. +set dummy head; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HEAD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HEAD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HEAD=$ac_cv_path_HEAD +if test -n "$HEAD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 +$as_echo "$HEAD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable HEAD is not empty. + if test "" = "$HEAD"; then as_fn_error $? "Could not find head !" "$LINENO" 5 ; fi + +# Extract the first word of "ln", so it can be a program name with args. +set dummy ln; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable LN is not empty. + if test "" = "$LN"; then as_fn_error $? "Could not find ln !" "$LINENO" 5 ; fi + +# Extract the first word of "ls", so it can be a program name with args. +set dummy ls; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LS in + [\\/]* | ?:[\\/]*) + ac_cv_path_LS="$LS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LS=$ac_cv_path_LS +if test -n "$LS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 +$as_echo "$LS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable LS is not empty. + if test "" = "$LS"; then as_fn_error $? "Could not find ls !" "$LINENO" 5 ; fi + +for ac_prog in gmake make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_MAKE="$MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MAKE=$ac_cv_path_MAKE +if test -n "$MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5 +$as_echo "$MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MAKE" && break +done + + + # Test that variable MAKE is not empty. + if test "" = "$MAKE"; then as_fn_error $? "Could not find make !" "$LINENO" 5 ; fi + +MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[12346789]'` +if test "x$MAKE_VERSION" = x; then + as_fn_error $? "You must use GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure." "$LINENO" 5 +fi +# Extract the first word of "mkdir", so it can be a program name with args. +set dummy mkdir; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MKDIR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable MKDIR is not empty. + if test "" = "$MKDIR"; then as_fn_error $? "Could not find mkdir !" "$LINENO" 5 ; fi + +# Extract the first word of "mv", so it can be a program name with args. +set dummy mv; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MV+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable MV is not empty. + if test "" = "$MV"; then as_fn_error $? "Could not find mv !" "$LINENO" 5 ; fi + +for ac_prog in nawk gawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_NAWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NAWK" && break +done + + + # Test that variable NAWK is not empty. + if test "" = "$NAWK"; then as_fn_error $? "Could not find nawk !" "$LINENO" 5 ; fi + +# Extract the first word of "printf", so it can be a program name with args. +set dummy printf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PRINTF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PRINTF in + [\\/]* | ?:[\\/]*) + ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PRINTF=$ac_cv_path_PRINTF +if test -n "$PRINTF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 +$as_echo "$PRINTF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable PRINTF is not empty. + if test "" = "$PRINTF"; then as_fn_error $? "Could not find printf !" "$LINENO" 5 ; fi + +# Extract the first word of "pwd", so it can be a program name with args. +set dummy pwd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_THEPWDCMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $THEPWDCMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +THEPWDCMD=$ac_cv_path_THEPWDCMD +if test -n "$THEPWDCMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 +$as_echo "$THEPWDCMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "rm", so it can be a program name with args. +set dummy rm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable RM is not empty. + if test "" = "$RM"; then as_fn_error $? "Could not find rm !" "$LINENO" 5 ; fi + +RM="$RM -f" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + # Test that variable SED is not empty. + if test "" = "$SED"; then as_fn_error $? "Could not find sed !" "$LINENO" 5 ; fi + +# Extract the first word of "sh", so it can be a program name with args. +set dummy sh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $SH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SH="$SH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SH=$ac_cv_path_SH +if test -n "$SH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 +$as_echo "$SH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable SH is not empty. + if test "" = "$SH"; then as_fn_error $? "Could not find sh !" "$LINENO" 5 ; fi + +# Extract the first word of "sort", so it can be a program name with args. +set dummy sort; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SORT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $SORT in + [\\/]* | ?:[\\/]*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SORT=$ac_cv_path_SORT +if test -n "$SORT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 +$as_echo "$SORT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable SORT is not empty. + if test "" = "$SORT"; then as_fn_error $? "Could not find sort !" "$LINENO" 5 ; fi + +# Extract the first word of "tar", so it can be a program name with args. +set dummy tar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TAR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAR="$TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAR=$ac_cv_path_TAR +if test -n "$TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 +$as_echo "$TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TAR is not empty. + if test "" = "$TAR"; then as_fn_error $? "Could not find tar !" "$LINENO" 5 ; fi + +# Extract the first word of "tail", so it can be a program name with args. +set dummy tail; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TAIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TAIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAIL=$ac_cv_path_TAIL +if test -n "$TAIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 +$as_echo "$TAIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TAIL is not empty. + if test "" = "$TAIL"; then as_fn_error $? "Could not find tail !" "$LINENO" 5 ; fi + +# Extract the first word of "tee", so it can be a program name with args. +set dummy tee; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TEE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TEE in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEE="$TEE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TEE=$ac_cv_path_TEE +if test -n "$TEE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 +$as_echo "$TEE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TEE is not empty. + if test "" = "$TEE"; then as_fn_error $? "Could not find tee !" "$LINENO" 5 ; fi + +# Extract the first word of "tr", so it can be a program name with args. +set dummy tr; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TR="$TR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TR=$ac_cv_path_TR +if test -n "$TR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 +$as_echo "$TR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TR is not empty. + if test "" = "$TR"; then as_fn_error $? "Could not find tr !" "$LINENO" 5 ; fi + +# Extract the first word of "touch", so it can be a program name with args. +set dummy touch; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TOUCH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TOUCH in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TOUCH=$ac_cv_path_TOUCH +if test -n "$TOUCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 +$as_echo "$TOUCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TOUCH is not empty. + if test "" = "$TOUCH"; then as_fn_error $? "Could not find touch !" "$LINENO" 5 ; fi + +# Extract the first word of "wc", so it can be a program name with args. +set dummy wc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_WC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $WC in + [\\/]* | ?:[\\/]*) + ac_cv_path_WC="$WC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WC=$ac_cv_path_WC +if test -n "$WC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 +$as_echo "$WC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable WC is not empty. + if test "" = "$WC"; then as_fn_error $? "Could not find wc !" "$LINENO" 5 ; fi + +# Extract the first word of "xargs", so it can be a program name with args. +set dummy xargs; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XARGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $XARGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XARGS=$ac_cv_path_XARGS +if test -n "$XARGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 +$as_echo "$XARGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable XARGS is not empty. + if test "" = "$XARGS"; then as_fn_error $? "Could not find xargs !" "$LINENO" 5 ; fi + +# Extract the first word of "zip", so it can be a program name with args. +set dummy zip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable ZIP is not empty. + if test "" = "$ZIP"; then as_fn_error $? "Could not find zip !" "$LINENO" 5 ; fi + +# Extract the first word of "unzip", so it can be a program name with args. +set dummy unzip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable UNZIP is not empty. + if test "" = "$UNZIP"; then as_fn_error $? "Could not find unzip !" "$LINENO" 5 ; fi + +# Extract the first word of "ldd", so it can be a program name with args. +set dummy ldd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LDD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +# Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +# Extract the first word of "readelf", so it can be a program name with args. +set dummy readelf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READELF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "expr", so it can be a program name with args. +set dummy expr; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_EXPR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $EXPR in + [\\/]* | ?:[\\/]*) + ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EXPR=$ac_cv_path_EXPR +if test -n "$EXPR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 +$as_echo "$EXPR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable EXPR is not empty. + if test "" = "$EXPR"; then as_fn_error $? "Could not find expr !" "$LINENO" 5 ; fi + +# Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FILE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_FILE="$FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FILE=$ac_cv_path_FILE +if test -n "$FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 +$as_echo "$FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable FILE is not empty. + if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi + +# Extract the first word of "hg", so it can be a program name with args. +set dummy hg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. + + +# Check whether --with-builddeps-conf was given. +if test "${with_builddeps_conf+set}" = set; then : + withval=$with_builddeps_conf; +fi + + + +# Check whether --with-builddeps-server was given. +if test "${with_builddeps_server+set}" = set; then : + withval=$with_builddeps_server; +fi + + + +# Check whether --with-builddeps-dir was given. +if test "${with_builddeps_dir+set}" = set; then : + withval=$with_builddeps_dir; +else + with_builddeps_dir=/localhome/builddeps +fi + + + +# Check whether --with-builddeps-group was given. +if test "${with_builddeps_group+set}" = set; then : + withval=$with_builddeps_group; +fi + + +# Check whether --enable-list-builddeps was given. +if test "${enable_list_builddeps+set}" = set; then : + enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" +else + LIST_BUILDDEPS='no' +fi + + +if test "x$LIST_BUILDDEPS" = xyes; then + echo + echo List of build dependencies known to the configure script, + echo that can be used in builddeps.conf files: + cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODULE\( | cut -f 2 -d ',' | tr -d ' ' | sort + echo + exit 1 +fi + + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + if test "x$with_builddeps_conf" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 +$as_echo_n "checking for supplied builddeps configuration file... " >&6; } + builddepsfile=$with_builddeps_conf + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 +$as_echo "loaded!" >&6; } + else + as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 +$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } + builddepsfile=`mktemp` + touch $builddepsfile + # Put all found confs into a single file. + find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile + # Source the file to acquire the variables + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 +$as_echo "found at least one!" >&6; } + else + as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 + fi + fi + # Create build and target names that use _ instead of "-" and ".". + # This is necessary to use them in variable names. + build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target + eval rewritten_build=\${REWRITE_${build_var}} + if test "x$rewritten_build" = x; then + rewritten_build=${OPENJDK_BUILD_SYSTEM} + echo Build stays the same $rewritten_build + else + echo Rewriting build for builddeps into $rewritten_build + fi + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_SYSTEM} + echo Target stays the same $rewritten_target + else + echo Rewriting target for builddeps into $rewritten_target + fi + rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` + fi + for ac_prog in 7z unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_UNZIP"; then + ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_UNZIP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP +if test -n "$BDEPS_UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 +$as_echo "$BDEPS_UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_UNZIP" && break +done + + if test "x$BDEPS_UNZIP" = x7z; then + BDEPS_UNZIP="7z x" + fi + + for ac_prog in wget lftp ftp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_FTP"; then + ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_FTP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_FTP=$ac_cv_prog_BDEPS_FTP +if test -n "$BDEPS_FTP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 +$as_echo "$BDEPS_FTP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_FTP" && break +done + + + +# Check if pkg-config is available. + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +############################################################################### +# +# Determine OpenJDK build and target platforms. +# +############################################################################### + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. + + + + + +# Check whether --with-target-bits was given. +if test "${with_target_bits+set}" = set; then : + withval=$with_target_bits; +fi + + +if test "x$with_target_bits" != x && \ + test "x$with_target_bits" != x32 && \ + test "x$with_target_bits" != x64 ; then + as_fn_error $? "--with-target-bits can only be 32 or 64, you specified $with_target_bits!" "$LINENO" 5 +fi +# Translate the standard cpu-vendor-kernel-os quadruplets into +# the new TARGET_.... and BUILD_... and the legacy names used by +# the openjdk build. +# It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits + + # Expects $host_os $host_cpu $build_os and $build_cpu + # and $with_target_bits to have been setup! + # + # Translate the standard triplet(quadruplet) definition + # of the target/build system into + # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows + # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince + # OPENJDK_TARGET_OS_API=posix,winapi + # + # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 + # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm + # OPENJDK_TARGET_CPU_BITS=32,64 + # OPENJDK_TARGET_CPU_ENDIAN=big,little + # + # The same values are setup for BUILD_... + # + # And the legacy variables, for controlling the old makefiles. + # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris) + # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows + # + # We also copy the autoconf trip/quadruplet + # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM + OPENJDK_TARGET_SYSTEM="$host" + OPENJDK_BUILD_SYSTEM="$build" + + + + + + case "$host_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_FAMILY=gnu + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_FAMILY=sysv + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *cygwin*|*windows*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_FAMILY=windows + ;; + *) + as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 + ;; + esac + + OPENJDK_TARGET_OS="$VAR_OS" + OPENJDK_TARGET_OS_FAMILY="$VAR_OS_FAMILY" + OPENJDK_TARGET_OS_API="$VAR_OS_API" + + + + + + if test "x$OPENJDK_TARGET_OS_API" = xposix; then + LEGACY_OPENJDK_TARGET_OS_API="solaris" + fi + if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then + LEGACY_OPENJDK_TARGET_OS_API="windows" + fi + + + + + # First argument is the cpu name from the trip/quad + case "$host_cpu" in + x86_64) + VAR_CPU=x64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=amd64 + ;; + i?86) + VAR_CPU=ia32 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=i586 + ;; + alpha*) + VAR_CPU=alpha + VAR_CPU_ARCH=alpha + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=alpha + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=arm + ;; + mips) + VAR_CPU=mips + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mips + ;; + mipsel) + VAR_CPU=mipsel + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mipsel + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc64 + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparc + ;; + sparc64) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparcv9 + ;; + s390) + VAR_CPU=s390 + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390 + VAR_LEGACY_CPU=s390 + ;; + s390x) + VAR_CPU=s390x + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390x + ;; + *) + as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 + ;; + esac + + # Workaround cygwin not knowing about 64 bit. + if test "x$VAR_OS" = "xwindows"; then + if test "x$PROCESSOR_IDENTIFIER" != "x"; then + PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` + case "$PROC_ARCH" in + intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + ;; + esac + fi + fi + + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + + if test "x$VAR_CPU_ARCH" = "xx86"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + fi + if test "x$with_target_bits" = "x32"; then + VAR_CPU=ia32 + VAR_CPU_BITS=32 + VAR_LEGACY_CPU=i586 + fi + fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi + + OPENJDK_TARGET_CPU="$VAR_CPU" + OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of ia32 and x64 + LEGACY_OPENJDK_TARGET_CPU1="$VAR_LEGACY_CPU" + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of ia32 and x64. + LEGACY_OPENJDK_TARGET_CPU2="$LEGACY_OPENJDK_TARGET_CPU1" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LEGACY_OPENJDK_TARGET_CPU2=i386 + fi + + + # And the third legacy naming of the cpu. + # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. + LEGACY_OPENJDK_TARGET_CPU3="" + if test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU3=amd64 + fi + if test "x$OPENJDK_TARGET_CPU" = xsparcv9; then + LEGACY_OPENJDK_TARGET_CPU3=sparcv9 + fi + + + + + + case "$build_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_FAMILY=gnu + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_FAMILY=sysv + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *cygwin*|*windows*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_FAMILY=windows + ;; + *) + as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 + ;; + esac + + OPENJDK_BUILD_OS="$VAR_OS" + OPENJDK_BUILD_OS_FAMILY="$VAR_OS_FAMILY" + OPENJDK_BUILD_OS_API="$VAR_OS_API" + + + + + + if test "x$OPENJDK_BUILD_OS_API" = xposix; then + LEGACY_OPENJDK_BUILD_OS_API="solaris" + fi + if test "x$OPENJDK_BUILD_OS_API" = xwinapi; then + LEGACY_OPENJDK_BUILD_OS_API="windows" + fi + + + + + # First argument is the cpu name from the trip/quad + case "$build_cpu" in + x86_64) + VAR_CPU=x64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=amd64 + ;; + i?86) + VAR_CPU=ia32 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=i586 + ;; + alpha*) + VAR_CPU=alpha + VAR_CPU_ARCH=alpha + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=alpha + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=arm + ;; + mips) + VAR_CPU=mips + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mips + ;; + mipsel) + VAR_CPU=mipsel + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mipsel + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc64 + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparc + ;; + sparc64) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparcv9 + ;; + s390) + VAR_CPU=s390 + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390 + VAR_LEGACY_CPU=s390 + ;; + s390x) + VAR_CPU=s390x + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390x + ;; + *) + as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 + ;; + esac + + # Workaround cygwin not knowing about 64 bit. + if test "x$VAR_OS" = "xwindows"; then + if test "x$PROCESSOR_IDENTIFIER" != "x"; then + PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` + case "$PROC_ARCH" in + intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + ;; + esac + fi + fi + + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + + if test "x$VAR_CPU_ARCH" = "xx86"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + fi + if test "x$with_target_bits" = "x32"; then + VAR_CPU=ia32 + VAR_CPU_BITS=32 + VAR_LEGACY_CPU=i586 + fi + fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi + + OPENJDK_BUILD_CPU="$VAR_CPU" + OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of ia32 and x64 + LEGACY_OPENJDK_BUILD_CPU1="$VAR_LEGACY_CPU" + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of ia32 and x64. + LEGACY_OPENJDK_BUILD_CPU2="$LEGACY_OPENJDK_BUILD_CPU1" + if test "x$LEGACY_OPENJDK_BUILD_CPU1" = xi586; then + LEGACY_OPENJDK_BUILD_CPU2=i386 + fi + + + # And the third legacy naming of the cpu. + # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. + LEGACY_OPENJDK_BUILD_CPU3="" + if test "x$OPENJDK_BUILD_CPU" = xx64; then + LEGACY_OPENJDK_BUILD_CPU3=amd64 + fi + if test "x$OPENJDK_BUILD_CPU" = xsparcv9; then + LEGACY_OPENJDK_BUILD_CPU3=sparcv9 + fi + + + + if test "x$OPENJDK_TARGET_OS" != xsolaris; then + LEGACY_OPENJDK_TARGET_CPU3="" + LEGACY_OPENJDK_BUILD_CPU3="" + fi + + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ... + if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU1="x86_64" + fi + + + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 + fi + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + REQUIRED_OS_VERSION=5.1 + fi + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + + + + + +# The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR. +if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then + LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}" +fi + +# Now the following vars are defined. +# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows +# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince +# OPENJDK_TARGET_OS_API=posix,winapi +# +# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 +# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm +# OPENJDK_TARGET_CPU_BITS=32,64 +# OPENJDK_TARGET_CPU_ENDIAN=big,little +# +# There is also a: +# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH +# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH +# LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris +# There was also a BUILDARCH that had i486,amd64,... but we do not use that +# in the new build. +# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots + + +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" + + + + + +# With knowledge of the build platform, setup more basic things. + +# For cygwin we need cygpath first, since it is used everywhere. +# Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CYGPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +PATH_SEP=":" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$CYGPATH" = x; then + as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 + fi + PATH_SEP=";" +fi + + + +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi + + +############################################################################### +# +# Determine OpenJDK variants, options and version numbers. +# +############################################################################### + +# We need build & target for this. + +############################################################################### +# +# Check which variant of the JDK that we want to build. +# Currently we have: +# normal: standard edition +# embedded: cut down to a smaller footprint +# +# Effectively the JDK variant gives a name to a specific set of +# modules to compile into the JDK. In the future, these modules +# might even be Jigsaw modules. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of the JDK to build" >&5 +$as_echo_n "checking which variant of the JDK to build... " >&6; } + +# Check whether --with-jdk-variant was given. +if test "${with_jdk_variant+set}" = set; then : + withval=$with_jdk_variant; +fi + + +if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then + JAVASE_EMBEDDED="" + MINIMIZE_RAM_USAGE="" + JDK_VARIANT="normal" +elif test "x$with_jdk_variant" = xembedded; then + JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" + MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" + JDK_VARIANT="embedded" +else + as_fn_error $? "The available JDK variants are: normal, embedded" "$LINENO" 5 +fi + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JDK_VARIANT" >&5 +$as_echo "$JDK_VARIANT" >&6; } + + + +############################################################################### +# +# Check which variants of the JVM that we want to build. +# Currently we have: +# server: normal interpreter and a tiered C1/C2 compiler +# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) +# kernel: kernel footprint JVM that passes the TCK without major performance problems, +# ie normal interpreter and C1, only the serial GC, kernel jvmti etc +# zero: no machine code interpreter, no compiler +# zeroshark: zero interpreter and shark/llvm compiler backend +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 +$as_echo_n "checking which variants of the JVM that should be built... " >&6; } + +# Check whether --with-jvm-variants was given. +if test "${with_jvm_variants+set}" = set; then : + withval=$with_jvm_variants; +fi + + +if test "x$with_jvm_variants" = x; then + if test "x$JDK_VARIANT" = xembedded; then + with_jvm_variants="client" + else + with_jvm_variants="server" + fi +fi + +JVM_VARIANTS=",$with_jvm_variants," +TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + +if test "x$TEST_VARIANTS" != "x,"; then + as_fn_error $? "The available JVM variants are: server, client, kernel, zero, zeroshark" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 +$as_echo "$with_jvm_variants" >&6; } + +JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` +JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` +JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` +JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` +JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + as_fn_error $? "You cannot build a client JVM for a 64-bit machine." "$LINENO" 5 + fi +fi +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + as_fn_error $? "You cannot build a kernel JVM for a 64-bit machine." "$LINENO" 5 + fi +fi + +# Replace the commas with AND for use in the build directory name. +ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` +COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` +if test "x$COUNT_VARIANTS" != "x,1"; then + BUILDING_MULTIPLE_JVM_VARIANTS=yes +else + BUILDING_MULTIPLE_JVM_VARIANTS=no +fi + + + + + + + + + + + +############################################################################### +# +# Set the debug level +# release: no debug information, all optimizations, no asserts. +# fastdebug: debug information (-g), all optimizations, all asserts +# slowdebug: debug information (-g), no optimizations, all asserts +# +DEBUG_LEVEL="release" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level to use" >&5 +$as_echo_n "checking which debug level to use... " >&6; } +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + ENABLE_DEBUG="${enableval}" + DEBUG_LEVEL="fastdebug" + +else + ENABLE_DEBUG="no" +fi + + + +# Check whether --with-debug-level was given. +if test "${with_debug_level+set}" = set; then : + withval=$with_debug_level; + DEBUG_LEVEL="${withval}" + if test "x$ENABLE_DEBUG" = xyes; then + as_fn_error $? "You cannot use both --enable-debug and --with-debug-level at the same time." "$LINENO" 5 + fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_LEVEL" >&5 +$as_echo "$DEBUG_LEVEL" >&6; } + +if test "x$DEBUG_LEVEL" != xrelease && \ + test "x$DEBUG_LEVEL" != xfastdebug && \ + test "x$DEBUG_LEVEL" != xslowdebug; then + as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5 +fi + + +############################################################################### +# +# Setup legacy vars/targets and new vars to deal with different debug levels. +# + +case $DEBUG_LEVEL in + release ) + VARIANT="OPT" + FASTDEBUG="false" + DEBUG_CLASSFILES="false" + BUILD_VARIANT_RELEASE="" + HOTSPOT_DEBUG_LEVEL="product" + HOTSPOT_EXPORT="product" + ;; + fastdebug ) + VARIANT="DBG" + FASTDEBUG="true" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-fastdebug" + HOTSPOT_DEBUG_LEVEL="fastdebug" + HOTSPOT_EXPORT="fastdebug" + ;; + slowdebug ) + VARIANT="DBG" + FASTDEBUG="false" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-debug" + HOTSPOT_DEBUG_LEVEL="jvmg" + HOTSPOT_EXPORT="debug" + ;; +esac + +##### +# Generate the legacy makefile targets for hotspot. +# The hotspot api for selecting the build artifacts, really, needs to be improved. +# +HOTSPOT_TARGET="" + +if test "x$JVM_VARIANT_SERVER" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " +fi + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " +fi + +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " +fi + +if test "x$JVM_VARIANT_ZERO" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " +fi + +if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " +fi + +HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" + +##### + + + + + + + + + +############################################################################### +# +# Should we build only OpenJDK even if closed sources are present? +# +# Check whether --enable-openjdk-only was given. +if test "${enable_openjdk_only+set}" = set; then : + enableval=$enable_openjdk_only; +fi + + +if test "x$enable_openjdk_only" = "xyes"; then + OPENJDK=true +elif test "x$enable_openjdk_only" = "xno"; then + OPENJDK=false +elif test -d "$SRC_ROOT/jdk/src/closed"; then + OPENJDK=false +else + OPENJDK=true +fi + +if test "x$OPENJDK" = "xtrue"; then + SET_OPENJDK=OPENJDK=true +fi + + + +############################################################################### +# +# JIGSAW or not. The JIGSAW variable is used during the intermediate +# stage when we are building both the old style JDK and the new style modularized JDK. +# When the modularized JDK is finalized, this option will go away. +# +# Check whether --enable-jigsaw was given. +if test "${enable_jigsaw+set}" = set; then : + enableval=$enable_jigsaw; +fi + + +if test "x$enable_jigsaw" = "xyes"; then + JIGSAW=true +else + JIGSAW=false +fi + + +############################################################################### +# +# Should we build a JDK/JVM with headful support (ie a graphical ui)? +# We always build headless support. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking headful support" >&5 +$as_echo_n "checking headful support... " >&6; } +# Check whether --enable-headful was given. +if test "${enable_headful+set}" = set; then : + enableval=$enable_headful; SUPPORT_HEADFUL=${enable_headful} +else + SUPPORT_HEADFUL=yes +fi + + +SUPPORT_HEADLESS=yes +BUILD_HEADLESS="BUILD_HEADLESS:=true" + +if test "x$SUPPORT_HEADFUL" = xyes; then + # We are building both headful and headless. + BUILD_HEADLESS_ONLY="" + headful_msg="inlude support for both headful and headless" +fi + +if test "x$SUPPORT_HEADFUL" = xno; then + # Thus we are building headless only. + BUILD_HEADLESS="BUILD_HEADLESS:=true" + BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" + headful_msg="headless only" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $headful_msg" >&5 +$as_echo "$headful_msg" >&6; } + + + + + + +############################################################################### +# +# Should we run the painfully slow javadoc tool? +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 +$as_echo_n "checking whether to build documentation... " >&6; } +# Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; ENABLE_DOCS="${enableval}" +else + ENABLE_DOCS='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DOCS" >&5 +$as_echo "$ENABLE_DOCS" >&6; } + +GENERATE_DOCS=false +if test "x$ENABLE_DOCS" = xyes; then + GENERATE_DOCS=true +fi + + +############################################################################### +# +# Should we compile nimbus swing L&F? We can probably remove this option +# since nimbus is officially part of javax now. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 +$as_echo_n "checking whether to build nimbus L&F... " >&6; } +# Check whether --enable-nimbus was given. +if test "${enable_nimbus+set}" = set; then : + enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" +else + ENABLE_NIMBUS='yes' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 +$as_echo "$ENABLE_NIMBUS" >&6; } +DISABLE_NIMBUS= +if test "x$ENABLE_NIMBUS" = xno; then + DISABLE_NIMBUS=true +fi + + +# Control wether Hotspot runs Queens test after build. +# Check whether --enable-hotspot-test-in-build was given. +if test "${enable_hotspot_test_in_build+set}" = set; then : + enableval=$enable_hotspot_test_in_build; +else + enable_hotspot_test_in_build=no +fi + +if test "x$enable_hotspot_test_in_build" = "xyes"; then + TEST_IN_BUILD=true +else + TEST_IN_BUILD=false +fi + + +############################################################################### +# +# Choose cacerts source file +# + +# Check whether --with-cacerts-file was given. +if test "${with_cacerts_file+set}" = set; then : + withval=$with_cacerts_file; +fi + +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi + + +############################################################################### +# +# Compress jars +# +COMPRESS_JARS=false + +# default for embedded is yes... +if test "x$JDK_VARIANT" = "xembedded"; then + COMPRESS_JARS=true +fi + + +############################################################################### +# +# Should we compile JFR +# default no, except for on closed-jdk and !embedded +# +ENABLE_JFR=no + +# Is the JFR source present + +# +# For closed && !embedded default is yes if the source is present +# +if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then + ENABLE_JFR=yes +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build jfr" >&5 +$as_echo_n "checking whether to build jfr... " >&6; } +# Check whether --enable-jfr was given. +if test "${enable_jfr+set}" = set; then : + enableval=$enable_jfr; +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ENABLE_JFR}" >&5 +$as_echo "${ENABLE_JFR}" >&6; } + +if test "x$ENABLE_JFR" = "xyes"; then + ENABLE_JFR=true +elif test "x$ENABLE_JFR" = "xno"; then + ENABLE_JFR=false +else + as_fn_error $? "Invalid argument to --enable-jfr" "$LINENO" 5 +fi + + + + +# Source the version numbers +. $AUTOCONF_DIR/version.numbers +if test "x$OPENJDK" = "xfalse"; then + . $AUTOCONF_DIR/closed.version.numbers +fi +# Now set the JDK version, milestone, build number etc. + + + + + + + + + + + + +COPYRIGHT_YEAR=`date +'%Y'` + + +RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" + + +if test "x$JDK_UPDATE_VERSION" != x; then + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" +else + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" +fi + + +if test "x$MILESTONE" != x; then + RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" +else + RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" +fi + + +if test "x$JDK_BUILD_NUMBER" != x; then + FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" +else + JDK_BUILD_NUMBER=b00 + BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` + # Avoid [:alnum:] since it depends on the locale. + CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" +fi + +COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` + + + +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. + + + +# Check whether --with-conf-name was given. +if test "${with_conf_name+set}" = set; then : + withval=$with_conf_name; CONF_NAME=${with_conf_name} +fi + + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + mkdir -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" +fi + + + # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` + OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` + else + as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 + fi + fi + + +SPEC=$OUTPUT_ROOT/spec.gmk + +CONF_NAME=$CONF_NAME + +OUTPUT_ROOT=$OUTPUT_ROOT + + +# Most of the probed defines are put into config.h +ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" + +# The spec.gmk file contains all variables for the make system. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" + +# The spec.sh file contains variables for compare{images|-objects}.sh scrips. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" + +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" + + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments + + +############################################################################### +# +# Setup BootJDK, used to bootstrap the build. +# +############################################################################### + + +BOOT_JDK_FOUND=no + +# Check whether --with-boot-jdk was given. +if test "${with_boot_jdk+set}" = set; then : + withval=$with_boot_jdk; +fi + + +if test "x$with_boot_jdk" != x; then + BOOT_JDK=$with_boot_jdk + BOOT_JDK_FOUND=yes +fi +if test "x$BOOT_JDK_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_boot-jdk_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The boot-jdk comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_boot-jdk} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for boot-jdk" >&5 +$as_echo "$as_me: Using builddeps $resource for boot-jdk" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# boot-jdk is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/boot-jdk.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_boot-jdk_ROOT} + thecflags=${builddep_boot-jdk_CFLAGS} + thelibs=${builddep_boot-jdk_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency boot-jdk" "$LINENO" 5 + fi + BOOT_JDK=$depdir + if test "x$theroot" != x; then + BOOT_JDK="$theroot" + fi + if test "x$thecflags" != x; then + BOOT_JDK_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + BOOT_JDK_LIBS="$thelibs" + fi + BOOT_JDK_FOUND=yes + else BOOT_JDK_FOUND=no + + fi + else BOOT_JDK_FOUND=no + + fi + +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + if test "x$JAVA_HOME" != x; then + if test ! -d "$JAVA_HOME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a non-existing directory!" >&5 +$as_echo "$as_me: Your JAVA_HOME points to a non-existing directory!" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + # Aha, the user has set a JAVA_HOME + # let us use that as the Boot JDK. + BOOT_JDK="$JAVA_HOME" + BOOT_JDK_FOUND=yes + # To be on the safe side, lets check that it is a JDK. + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" + BOOT_JDK_FOUND=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" >&5 +$as_echo "$as_me: Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Extract the first word of "javac", so it can be a program name with args. +set dummy javac; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVAC_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVAC_CHECK="$JAVAC_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVAC_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVAC_CHECK=$ac_cv_path_JAVAC_CHECK +if test -n "$JAVAC_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC_CHECK" >&5 +$as_echo "$JAVAC_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "java", so it can be a program name with args. +set dummy java; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA_CHECK=$ac_cv_path_JAVA_CHECK +if test -n "$JAVA_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 +$as_echo "$JAVA_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + BINARY="$JAVAC_CHECK" + if test "x$JAVAC_CHECK" = x; then + BINARY="$JAVA_CHECK" + fi + if test "x$BINARY" != x; then + # So there is a java(c) binary, it might be part of a JDK. + # Lets find the JDK/JRE directory by following symbolic links. + # Linux/GNU systems often have links from /usr/bin/java to + # /etc/alternatives/java to the real JDK binary. + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$BINARY" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$BINARY"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + BINARY="$tmp" + + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + # Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READLINK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + BINARY=`$READLINK -f $BINARY` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname $BINARY` + FIL=`basename $BINARY` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + BINARY=$DIR/$FIL + fi + fi + + BOOT_JDK=`dirname $BINARY` + BOOT_JDK=`cd $BOOT_JDK/..; pwd` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Try the MacOSX way. + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Extract the first word of "java", so it can be a program name with args. +set dummy java; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA_CHECK=$ac_cv_path_JAVA_CHECK +if test -n "$JAVA_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 +$as_echo "$JAVA_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVA_CHECK" != x; then + # There is a java in the path. But apparently we have not found a javac + # in the path, since that would have been tested earlier. + if test "x$OPENJDK_TARGET_OS" = xwindows; then + # Now if this is a windows platform. The default installation of a JDK + # actually puts the JRE in the path and keeps the JDK out of the path! + # Go look in the default installation location. + BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=yes + fi + fi + if test "x$BOOT_JDK_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + 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 + + { $as_echo "$as_me:${as_lineno-$LINENO}: Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" >&5 +$as_echo "$as_me: Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + else + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + 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 + + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a JDK. $HELP_MSG" >&5 +$as_echo "$as_me: Could not find a JDK. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi +fi + + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CYGPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + tmp="$BOOT_JDK" + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + BOOT_JDK="$tmp" + fi + + +# Now see if we can find the rt.jar, or its nearest equivalent. +BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" + + # Fail with message the path to the Boot JDK rt.jar (or nearest equivalent) if var BOOT_RTJAR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$BOOT_RTJAR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + BOOT_RTJAR=`$CYGPATH -s -m -a "$BOOT_RTJAR"` + BOOT_RTJAR=`$CYGPATH -u "$BOOT_RTJAR"` + else + as_fn_error $? "You cannot have spaces in the path to the Boot JDK rt.jar (or nearest equivalent)! \"$BOOT_RTJAR\"" "$LINENO" 5 + fi + fi + + +BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" + + # Fail with message the path to the Boot JDK tools.jar (or nearest equivalent) if var BOOT_TOOLSJAR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$BOOT_TOOLSJAR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + BOOT_TOOLSJAR=`$CYGPATH -s -m -a "$BOOT_TOOLSJAR"` + BOOT_TOOLSJAR=`$CYGPATH -u "$BOOT_TOOLSJAR"` + else + as_fn_error $? "You cannot have spaces in the path to the Boot JDK tools.jar (or nearest equivalent)! \"$BOOT_TOOLSJAR\"" "$LINENO" 5 + fi + fi + + +if test ! -f $BOOT_RTJAR; then + # On MacOSX it is called classes.jar + BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar + if test ! -f $BOOT_RTJAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Cannot find the rt.jar or its equivalent!" >&5 +$as_echo "$as_me: Cannot find the rt.jar or its equivalent!" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: This typically means that configure failed to automatically find a suitable Boot JDK" >&5 +$as_echo "$as_me: This typically means that configure failed to automatically find a suitable Boot JDK" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + # Remove the .. + BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" + # The tools.jar is part of classes.jar + BOOT_TOOLSJAR="$BOOT_RTJAR" +fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot rt.jar" >&5 +$as_echo_n "checking for Boot rt.jar... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_RTJAR" >&5 +$as_echo "$BOOT_RTJAR" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot tools.jar" >&5 +$as_echo_n "checking for Boot tools.jar... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_TOOLSJAR" >&5 +$as_echo "$BOOT_TOOLSJAR" >&6; } + +# Use the java tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 +$as_echo_n "checking for java in Boot JDK... " >&6; } +JAVA=$BOOT_JDK/bin/java +if test ! -x $JAVA; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working java" >&5 +$as_echo "$as_me: Could not find a working java" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes $BOOT_JDK_VERSION" >&5 +$as_echo "yes $BOOT_JDK_VERSION" >&6; } + + +# Extra M4 quote needed to protect [] in grep expression. +FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` +if test "x$FOUND_VERSION_78" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + 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 + + { $as_echo "$as_me:${as_lineno-$LINENO}: Your boot-jdk must be version 7 or 8. $HELP_MSG" >&5 +$as_echo "$as_me: Your boot-jdk must be version 7 or 8. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. +BOOT_JDK_SOURCETARGET="-source 7 -target 7" + + +# Use the javac tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 +$as_echo_n "checking for javac in Boot JDK... " >&6; } +JAVAC=$BOOT_JDK/bin/javac +if test ! -x $JAVAC; then + as_fn_error $? "Could not find a working javac" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + + +# Use the javah tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 +$as_echo_n "checking for javah in Boot JDK... " >&6; } +JAVAH=$BOOT_JDK/bin/javah +if test ! -x $JAVAH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working javah" >&5 +$as_echo "$as_me: Could not find a working javah" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# Use the jar tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 +$as_echo_n "checking for jar in Boot JDK... " >&6; } +JAR=$BOOT_JDK/bin/jar +if test ! -x $JAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working jar" >&5 +$as_echo "$as_me: Could not find a working jar" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +# Use the rmic tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 +$as_echo_n "checking for rmic in Boot JDK... " >&6; } +RMIC=$BOOT_JDK/bin/rmic +if test ! -x $RMIC; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working rmic" >&5 +$as_echo "$as_me: Could not find a working rmic" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +# Use the native2ascii tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 +$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working native2ascii" >&5 +$as_echo "$as_me: Could not find a working native2ascii" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + + +############################################################################## +# +# Specify options for anything that is run with the Boot JDK. +# + +# Check whether --with-boot-jdk-jvmargs was given. +if test "${with_boot_jdk_jvmargs+set}" = set; then : + withval=$with_boot_jdk_jvmargs; +fi + + +if test "x$with_boot_jdk_jvmargs" = x; then + # Not all JVM:s accept the same arguments on the command line. + # OpenJDK specific increase in thread stack for JDK build, + # well more specifically, when running javac. + if test "x$BUILD_NUM_BITS" = x32; then + STACK_SIZE=768 + else + # Running Javac on a JVM on a 64-bit machine, the stack takes more space + # since 64-bit pointers are pushed on the stach. Apparently, we need + # to increase the stack space when javacing the JDK.... + STACK_SIZE=1536 + fi + + # Minimum amount of heap memory. + + # Test if -Xms64M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xms64M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xms64M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xms64M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M" + fi + + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + # Why does macosx need more heap? Its the huge JDK batch. + + # Test if -Xmx1600M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xmx1600M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xmx1600M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xmx1600M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1600M" + fi + + else + + # Test if -Xmx1100M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xmx1100M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xmx1100M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xmx1100M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1100M" + fi + + fi + # When is adding -client something that speeds up the JVM? + # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) + + # Test if -XX:PermSize=32m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:PermSize=32m to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:PermSize=32m -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:PermSize=32m -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:PermSize=32m" + fi + + + # Test if -XX:MaxPermSize=160m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:MaxPermSize=160m to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:MaxPermSize=160m" + fi + + + # Test if -XX:ThreadStackSize=$STACK_SIZE is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:ThreadStackSize=$STACK_SIZE to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE" + fi + + # Disable special log output when a debug build is used as Boot JDK... + + # Test if -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput" + fi + +fi + +BOOT_JDK_JVMARGS=$boot_jdk_jvmargs + + + +############################################################################### +# +# Configure the sources to use. We can add or override individual directories. +# +############################################################################### + + + +# Where are the sources. Any of these can be overridden +# using --with-override-corba and the likes. +LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" +CORBA_TOPDIR="$SRC_ROOT/corba" +JAXP_TOPDIR="$SRC_ROOT/jaxp" +JAXWS_TOPDIR="$SRC_ROOT/jaxws" +HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" +JDK_TOPDIR="$SRC_ROOT/jdk" + + + + + + + + + +############################################################################### +# +# Pickup additional source for a component from outside of the source root +# or override source for a component. +# + +# Check whether --with-add-source-root was given. +if test "${with_add_source_root+set}" = set; then : + withval=$with_add_source_root; +fi + + + +# Check whether --with-override-source-root was given. +if test "${with_override_source_root+set}" = set; then : + withval=$with_override_source_root; +fi + + + +# Check whether --with-adds-and-overrides was given. +if test "${with_adds_and_overrides+set}" = set; then : + withval=$with_adds_and_overrides; +fi + + +if test "x$with_adds_and_overrides" != x; then + with_add_source_root="$with_adds_and_overrides/adds" + with_override_source_root="$with_adds_and_overrides/overrides" +fi + +if test "x$with_add_source_root" != x; then + if ! test -d $with_add_source_root; then + as_fn_error $? "Trying to use a non-existant add-source-root $with_add_source_root" "$LINENO" 5 + fi + CURDIR="$PWD" + cd "$with_add_source_root" + ADD_SRC_ROOT="`pwd`" + cd "$CURDIR" + # Verify that the addon source root does not have any root makefiles. + # If it does, then it is usually an error, prevent this. + if test -f $with_add_source_root/langtools/makefiles/Makefile || \ + test -f $with_add_source_root/langtools/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/corba/makefiles/Makefile || \ + test -f $with_add_source_root/corba/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full corba repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ + test -f $with_add_source_root/jaxp/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ + test -f $with_add_source_root/jaxws/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ + test -f $with_add_source_root/hotspot/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jdk/makefiles/Makefile || \ + test -f $with_add_source_root/jdk/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources." "$LINENO" 5 + fi +fi + + +if test "x$with_override_source_root" != x; then + if ! test -d $with_override_source_root; then + as_fn_error $? "Trying to use a non-existant override-source-root $with_override_source_root" "$LINENO" 5 + fi + CURDIR="$PWD" + cd "$with_override_source_root" + OVERRIDE_SRC_ROOT="`pwd`" + cd "$CURDIR" + if test -f $with_override_source_root/langtools/makefiles/Makefile || \ + test -f $with_override_source_root/langtools/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/corba/makefiles/Makefile || \ + test -f $with_override_source_root/corba/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full corba repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ + test -f $with_override_source_root/jaxp/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ + test -f $with_override_source_root/jaxws/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ + test -f $with_override_source_root/hotspot/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jdk/makefiles/Makefile || \ + test -f $with_override_source_root/jdk/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override." "$LINENO" 5 + fi +fi + + +############################################################################### +# +# Override a repo completely, this is used for example when you have 3 small +# development sandboxes of the langtools sources and want to avoid having 3 full +# OpenJDK sources checked out on disk. +# +# Assuming that the 3 langtools sandboxes are located here: +# /home/fredrik/sandbox1/langtools +# /home/fredrik/sandbox2/langtools +# /home/fredrik/sandbox3/langtools +# +# From the source root you create build subdirs manually: +# mkdir -p build1 build2 build3 +# in each build directory run: +# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) +# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) +# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) +# + + +# Check whether --with-override-langtools was given. +if test "${with_override_langtools+set}" = set; then : + withval=$with_override_langtools; +fi + + + +# Check whether --with-override-corba was given. +if test "${with_override_corba+set}" = set; then : + withval=$with_override_corba; +fi + + + +# Check whether --with-override-jaxp was given. +if test "${with_override_jaxp+set}" = set; then : + withval=$with_override_jaxp; +fi + + + +# Check whether --with-override-jaxws was given. +if test "${with_override_jaxws+set}" = set; then : + withval=$with_override_jaxws; +fi + + + +# Check whether --with-override-hotspot was given. +if test "${with_override_hotspot+set}" = set; then : + withval=$with_override_hotspot; +fi + + + +# Check whether --with-override-jdk was given. +if test "${with_override_jdk+set}" = set; then : + withval=$with_override_jdk; +fi + + +if test "x$with_override_langtools" != x; then + CURDIR="$PWD" + cd "$with_override_langtools" + LANGTOOLS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override langtools with a full langtools repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if langtools should be overridden" >&5 +$as_echo_n "checking if langtools should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $LANGTOOLS_TOPDIR" >&5 +$as_echo "yes with $LANGTOOLS_TOPDIR" >&6; } +fi +if test "x$with_override_corba" != x; then + CURDIR="$PWD" + cd "$with_override_corba" + CORBA_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override corba with a full corba repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if corba should be overridden" >&5 +$as_echo_n "checking if corba should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $CORBA_TOPDIR" >&5 +$as_echo "yes with $CORBA_TOPDIR" >&6; } +fi +if test "x$with_override_jaxp" != x; then + CURDIR="$PWD" + cd "$with_override_jaxp" + JAXP_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override jaxp with a full jaxp repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxp should be overridden" >&5 +$as_echo_n "checking if jaxp should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXP_TOPDIR" >&5 +$as_echo "yes with $JAXP_TOPDIR" >&6; } +fi +if test "x$with_override_jaxws" != x; then + CURDIR="$PWD" + cd "$with_override_jaxws" + JAXWS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override jaxws with a full jaxws repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxws should be overridden" >&5 +$as_echo_n "checking if jaxws should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXWS_TOPDIR" >&5 +$as_echo "yes with $JAXWS_TOPDIR" >&6; } +fi +if test "x$with_override_hotspot" != x; then + CURDIR="$PWD" + cd "$with_override_hotspot" + HOTSPOT_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ + ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override hotspot with a full hotspot repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if hotspot should be overridden" >&5 +$as_echo_n "checking if hotspot should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $HOTSPOT_TOPDIR" >&5 +$as_echo "yes with $HOTSPOT_TOPDIR" >&6; } +fi +if test "x$with_override_jdk" != x; then + CURDIR="$PWD" + cd "$with_override_jdk" + JDK_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JDK_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override JDK with a full JDK repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JDK should be overridden" >&5 +$as_echo_n "checking if JDK should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JDK_TOPDIR" >&5 +$as_echo "yes with $JDK_TOPDIR" >&6; } +fi + + + +LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" +CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" +JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" +JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" +HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" +JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" +IMAGES_OUTPUTDIR="$OUTPUT_ROOT/images" + + + + + + + + + +LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" +CORBA_DIST="$OUTPUT_ROOT/corba/dist" +JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" +JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" +HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" + + + + + + + + +############################################################################### +# +# Setup the toolchain (compilers etc), i.e. the tools that need to be +# cross-compilation aware. +# +############################################################################### + + +############################################################################### +# +# Configure the development tool paths and potential sysroot. +# +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +DEVKIT= +SYS_ROOT=/ + + +# The option used to specify the target .o,.a or .so file. +# When compiling, how to specify the to be created object file. +CC_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created executable. +EXE_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created dynamically linkable library. +LD_OUT_OPTION='-o$(SPACE)' +# When archiving, how to specify the to be create static archive for object files. +AR_OUT_OPTION='rcs$(SPACE)' + + + + + + + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +SETUPDEVENV="# No special vars" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # If vcvarsall.bat has been run, then VCINSTALLDIR is set. + if test "x$VCINSTALLDIR" != x; then + # No further setup is needed. The build will happen from this kind + # of shell. + SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." + # Make sure to remind you, if you forget to run make from a cygwin bash shell + # that is spawned "bash -l" from a VS command prompt. + CHECK_FOR_VCINSTALLDIR=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 +$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. + if test "x$VS100COMNTOOLS" != x; then + VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` + SEARCH_ROOT="$VS100COMNTOOLS" + else + VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` + SEARCH_ROOT="$PROGRAMFILES" + fi + VCPATH=`dirname "$VARSBAT"` + VCPATH=`cygpath -w "$VCPATH"` + if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 +$as_echo_n "checking if we can find the VS installation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + case "$LEGACY_OPENJDK_TARGET_CPU1" in + i?86) + VARSBAT_ARCH=x86 + ;; + *) + VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 + ;; + esac + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + cd $OUTPUT_ROOT + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 +$as_echo_n "checking if we can extract the needed env variables... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + . $OUTPUT_ROOT/localdevenv.sh + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 +$as_echo_n "checking if we can find the VS installation... " >&6; } + if test "x$VCINSTALLDIR" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 +$as_echo "$VCINSTALLDIR" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + CHECK_FOR_VCINSTALLDIR=no + SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 +$as_echo_n "checking for msvcr100.dll... " >&6; } + +# Check whether --with-msvcr100dll was given. +if test "${with_msvcr100dll+set}" = set; then : + withval=$with_msvcr100dll; +fi + + if test "x$with_msvcr100dll" != x; then + MSVCR100DLL="$with_msvcr100dll" + else + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR100DLL" = x; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` + fi + fi + fi + if test "x$MSVCR100DLL" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 +$as_echo "$MSVCR100DLL" >&6; } + + # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` + MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` + else + as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 + fi + fi + + fi +fi + + + + +# Locate the actual tools + +# If --build AND --host is set, then the configure script will find any +# cross compilation tools in the PATH. Cross compilation tools +# follows the cross compilation standard where they are prefixed with ${host}. +# For example the binary i686-sun-solaris2.10-gcc +# will cross compile for i686-sun-solaris2.10 +# If neither of build and host is not set, then build=host and the +# default compiler found in the path will be used. +# Setting only --host, does not seem to be really supported. +# Please set both --build and --host if you want to cross compile. + +DEFINE_CROSS_COMPILE_ARCH="" +HOSTCC="" +HOSTCXX="" +HOSTLD="" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a cross compile" >&5 +$as_echo_n "checking if this is a cross compile... " >&6; } +if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM" >&5 +$as_echo "yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM" >&6; } + # We have detected a cross compile! + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" + # Now we to find a C/C++ compiler that can build executables for the build + # platform. We can't use the AC_PROG_CC macro, since it can only be used + # once. + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTCC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTCC="$HOSTCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTCC=$ac_cv_path_HOSTCC +if test -n "$HOSTCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCC" >&5 +$as_echo "$HOSTCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HOSTCC" && break +done + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTCC" + car="${tmp%% *}" + tmp="$HOSTCC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTCC="$car ${cdr% *}" + else + HOSTCC="$car" + fi + + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTCXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTCXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTCXX="$HOSTCXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTCXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTCXX=$ac_cv_path_HOSTCXX +if test -n "$HOSTCXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCXX" >&5 +$as_echo "$HOSTCXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HOSTCXX" && break +done + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTCXX" + car="${tmp%% *}" + tmp="$HOSTCXX EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTCXX="$car ${cdr% *}" + else + HOSTCXX="$car" + fi + + # Extract the first word of "ld", so it can be a program name with args. +set dummy ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTLD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTLD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTLD="$HOSTLD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTLD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTLD=$ac_cv_path_HOSTLD +if test -n "$HOSTLD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTLD" >&5 +$as_echo "$HOSTLD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTLD" + car="${tmp%% *}" + tmp="$HOSTLD EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTLD="$car ${cdr% *}" + else + HOSTLD="$car" + fi + + # Building for the build platform should be easy. Therefore + # we do not need any linkers or assemblers etc. +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. + +# Check whether --with-sys-root was given. +if test "${with_sys_root+set}" = set; then : + withval=$with_sys_root; +fi + + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +fi + +# If a devkit is found on the builddeps server, then prepend its path to the +# PATH variable. If there are cross compilers available in the devkit, these +# will be found by AC_PROG_CC et al. + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_devkit_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The devkit comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_devkit} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for devkit" >&5 +$as_echo "$as_me: Using builddeps $resource for devkit" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# devkit is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/devkit.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_devkit_ROOT} + thecflags=${builddep_devkit_CFLAGS} + thelibs=${builddep_devkit_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency devkit" "$LINENO" 5 + fi + DEVKIT=$depdir + if test "x$theroot" != x; then + DEVKIT="$theroot" + fi + if test "x$thecflags" != x; then + DEVKIT_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + DEVKIT_LIBS="$thelibs" + fi + # Found devkit + PATH="$DEVKIT/bin:$PATH" + SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" + if test "x$x_includes" = "xNONE"; then + x_includes="$SYS_ROOT/usr/include/X11" + fi + if test "x$x_libraries" = "xNONE"; then + x_libraries="$SYS_ROOT/usr/lib" + fi + + + fi + + fi + + +if test "x$SYS_ROOT" != "x/" ; then + CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" + CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" + OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" + LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" +fi + +# Store the CFLAGS etal passed to the configure script. +ORG_CFLAGS="$CFLAGS" +ORG_CXXFLAGS="$CXXFLAGS" +ORG_OBJCFLAGS="$OBJCFLAGS" + + +# Check whether --with-tools-dir was given. +if test "${with_tools_dir+set}" = set; then : + withval=$with_tools_dir; TOOLS_DIR=$with_tools_dir +fi + + + +# Check whether --with-devkit was given. +if test "${with_devkit+set}" = set; then : + withval=$with_devkit; + if test "x$with_sys_root" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-sys-root at the same time" "$LINENO" 5 + fi + if test "x$with_tools_dir" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-tools-dir at the same time" "$LINENO" 5 + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + +fi + + +# autoconf magic only relies on PATH, so update it if tools dir is specified +OLD_PATH="$PATH" +if test "x$TOOLS_DIR" != x; then + PATH=$TOOLS_DIR:$PATH +fi + +# gcc is almost always present, but on Windows we +# prefer cl.exe and on Solaris we prefer CC. +# Thus test for them in this order. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in cl cc gcc + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +if test "x$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + 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 + + as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 +fi +if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Do not use cc on MacOSX use gcc instead. + CC="gcc" +fi + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CC" + car="${tmp%% *}" + tmp="$CC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CC="$car ${cdr% *}" + else + CC="$car" + fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in cl CC g++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # The found CC, even though it seems to be a g++ derivate, cannot compile + # c++ code. Override. + CXX="g++" +fi + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CXX" + car="${tmp%% *}" + tmp="$CXX EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CXX="$car ${cdr% *}" + else + CXX="$car" + fi + + +if test "x$CXX" = x || test "x$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + 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 + + as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 +fi + +if test "x$OPENJDK_BUILD_OS" != xwindows; then + ac_ext=m +ac_cpp='$OBJCPP $CPPFLAGS' +ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_objc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in gcc objcc objc cc CC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJC"; then + ac_cv_prog_OBJC="$OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJC=$ac_cv_prog_OBJC +if test -n "$OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 +$as_echo "$OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJC" && break + done +fi +if test -z "$OBJC"; then + ac_ct_OBJC=$OBJC + for ac_prog in gcc objcc objc cc CC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJC"; then + ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC +if test -n "$ac_ct_OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 +$as_echo "$ac_ct_OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJC" && break +done + + if test "x$ac_ct_OBJC" = x; then + OBJC="gcc" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJC=$ac_ct_OBJC + fi +fi + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 +$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } +if test "${ac_cv_objc_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_objc_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 +$as_echo "$ac_cv_objc_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GOBJC=yes +else + GOBJC= +fi +ac_test_OBJCFLAGS=${OBJCFLAGS+set} +ac_save_OBJCFLAGS=$OBJCFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 +$as_echo_n "checking whether $OBJC accepts -g... " >&6; } +if test "${ac_cv_prog_objc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_objc_werror_flag=$ac_objc_werror_flag + ac_objc_werror_flag=yes + ac_cv_prog_objc_g=no + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +else + OBJCFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + +else + ac_objc_werror_flag=$ac_save_objc_werror_flag + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_objc_werror_flag=$ac_save_objc_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 +$as_echo "$ac_cv_prog_objc_g" >&6; } +if test "$ac_test_OBJCFLAGS" = set; then + OBJCFLAGS=$ac_save_OBJCFLAGS +elif test $ac_cv_prog_objc_g = yes; then + if test "$GOBJC" = yes; then + OBJCFLAGS="-g -O2" + else + OBJCFLAGS="-g" + fi +else + if test "$GOBJC" = yes; then + OBJCFLAGS="-O2" + else + OBJCFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$OBJC" + car="${tmp%% *}" + tmp="$OBJC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + OBJC="$car ${cdr% *}" + else + OBJC="$car" + fi + +else + OBJC= +fi + +# Restore the flags to the user specified values. +# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" +CFLAGS="$ORG_CFLAGS" +CXXFLAGS="$ORG_CXXFLAGS" +OBJCFLAGS="$ORG_OBJCFLAGS" + +# If we are not cross compiling, use the same compilers for +# building the build platform executables. +if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then + HOSTCC="$CC" + HOSTCXX="$CXX" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. +set dummy ${ac_tool_prefix}ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LD"; then + ac_cv_prog_LD="$LD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LD="${ac_tool_prefix}ld" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LD=$ac_cv_prog_LD +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LD"; then + ac_ct_LD=$LD + # Extract the first word of "ld", so it can be a program name with args. +set dummy ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LD"; then + ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LD="ld" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LD=$ac_cv_prog_ac_ct_LD +if test -n "$ac_ct_LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 +$as_echo "$ac_ct_LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LD" = x; then + LD="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LD=$ac_ct_LD + fi +else + LD="$ac_cv_prog_LD" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$LD" + car="${tmp%% *}" + tmp="$LD EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + LD="$car ${cdr% *}" + else + LD="$car" + fi + +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" +# LDEXE is the linker to use, when creating executables. + +# Linking C++ libraries. + +# Linking C++ executables. + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$AR" + car="${tmp%% *}" + tmp="$AR EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + AR="$car ${cdr% *}" + else + AR="$car" + fi + +if test "x$OPENJDK_BUILD_OS" = xmacosx; then + ARFLAGS="-r" +else + ARFLAGS="" +fi + + +COMPILER_NAME=gcc +COMPILER_TYPE=CC +if test "x$OPENJDK_BUILD_OS" = xwindows; then : + + # For now, assume that we are always compiling using cl.exe. + CC_OUT_OPTION=-Fo + EXE_OUT_OPTION=-out: + LD_OUT_OPTION=-out: + AR_OUT_OPTION=-out: + # On Windows, reject /usr/bin/link, which is a cygwin + # program for something completely different. + # Extract the first word of "link", so it can be a program name with args. +set dummy link; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINLD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINLD"; then + ac_cv_prog_WINLD="$WINLD" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/link"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_WINLD="link" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_WINLD + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set WINLD to just the basename; use the full file name. + shift + ac_cv_prog_WINLD="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +WINLD=$ac_cv_prog_WINLD +if test -n "$WINLD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINLD" >&5 +$as_echo "$WINLD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Since we must ignore the first found link, WINLD will contain + # the full path to the link.exe program. + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$WINLD" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$WINLD"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + WINLD="$tmp" + + LD="$WINLD" + LDEXE="$WINLD" + LDCXX="$WINLD" + LDEXECXX="$WINLD" + # Set HOSTLD to same as LD until we fully support cross compilation + # on windows. + HOSTLD="$WINLD" + + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_MT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MT"; then + ac_cv_prog_MT="$MT" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/mt"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_MT="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_MT + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set MT to just the basename; use the full file name. + shift + ac_cv_prog_MT="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +MT=$ac_cv_prog_MT +if test -n "$MT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MT" >&5 +$as_echo "$MT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$MT" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$MT"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + MT="$tmp" + + # The resource compiler + # Extract the first word of "rc", so it can be a program name with args. +set dummy rc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/rc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_RC="rc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_RC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set RC to just the basename; use the full file name. + shift + ac_cv_prog_RC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +RC=$ac_cv_prog_RC +if test -n "$RC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 +$as_echo "$RC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$RC" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$RC"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + RC="$tmp" + + + RC_FLAGS="-nologo /l 0x409 /r" + if test "x$VARIANT" = xOPT; then : + + RC_FLAGS="$RC_FLAGS -d NDEBUG" + +fi + JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION + if test "x$JDK_UPDATE_VERSION" = x; then : + + JDK_UPDATE_VERSION_NOTNULL=0 + +fi + RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" + + # lib.exe is used to create static libraries. + # Extract the first word of "lib", so it can be a program name with args. +set dummy lib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINAR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINAR"; then + ac_cv_prog_WINAR="$WINAR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WINAR="lib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WINAR=$ac_cv_prog_WINAR +if test -n "$WINAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINAR" >&5 +$as_echo "$WINAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$WINAR" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$WINAR"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + WINAR="$tmp" + + AR="$WINAR" + ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" + + # Extract the first word of "dumpbin", so it can be a program name with args. +set dummy dumpbin; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="dumpbin" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$DUMPBIN" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$DUMPBIN"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + DUMPBIN="$tmp" + + + COMPILER_TYPE=CL + CCXXFLAGS="$CCXXFLAGS -nologo" + +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CPP" + car="${tmp%% *}" + tmp="$CPP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CPP="$car ${cdr% *}" + else + CPP="$car" + fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CXXCPP" + car="${tmp%% *}" + tmp="$CXXCPP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CXXCPP="$car ${cdr% *}" + else + CXXCPP="$car" + fi + + +# for solaris we really need solaris tools, and not gnu equivalent +# these seems to normally reside in /usr/ccs/bin so add that to path before +# starting to probe +# +# NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH +# so that it can be overriden --with-tools-dir +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" +fi + +# Find the right assembler. +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $AS in + [\\/]* | ?:[\\/]*) + ac_cv_path_AS="$AS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AS=$ac_cv_path_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$AS" + car="${tmp%% *}" + tmp="$AS EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + AS="$car ${cdr% *}" + else + AS="$car" + fi + + ASFLAGS=" " +else + AS="$CC -c" + ASFLAGS=" " +fi + + + +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$NM" + car="${tmp%% *}" + tmp="$NM EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + NM="$car ${cdr% *}" + else + NM="$car" + fi + + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$STRIP" + car="${tmp%% *}" + tmp="$STRIP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + STRIP="$car ${cdr% *}" + else + STRIP="$car" + fi + + # Extract the first word of "mcs", so it can be a program name with args. +set dummy mcs; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MCS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$MCS" + car="${tmp%% *}" + tmp="$MCS EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + MCS="$car ${cdr% *}" + else + MCS="$car" + fi + +else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. +set dummy ${ac_tool_prefix}nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NM="${ac_tool_prefix}nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NM"; then + ac_ct_NM=$NM + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NM="nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +else + NM="$ac_cv_prog_NM" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$NM" + car="${tmp%% *}" + tmp="$NM EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + NM="$car ${cdr% *}" + else + NM="$car" + fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$STRIP" + car="${tmp%% *}" + tmp="$STRIP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + STRIP="$car ${cdr% *}" + else + STRIP="$car" + fi + +fi + +### +# +# Check for objcopy +# +# but search for gobjcopy first... +# since I on solaris found a broken objcopy...buhh +# +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gobjcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}gobjcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OBJCOPY"; then + ac_pt_OBJCOPY=$OBJCOPY + # Extract the first word of "gobjcopy", so it can be a program name with args. +set dummy gobjcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY +if test -n "$ac_pt_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 +$as_echo "$ac_pt_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_pt_OBJCOPY + fi +else + OBJCOPY="$ac_cv_path_OBJCOPY" +fi + +if test "x$OBJCOPY" = x; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OBJCOPY"; then + ac_pt_OBJCOPY=$OBJCOPY + # Extract the first word of "objcopy", so it can be a program name with args. +set dummy objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY +if test -n "$ac_pt_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 +$as_echo "$ac_pt_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_pt_OBJCOPY + fi +else + OBJCOPY="$ac_cv_path_OBJCOPY" +fi + +fi + +# Restore old path without tools dir +PATH="$OLD_PATH" + + +# FIXME: Currently we must test this after paths but before flags. Fix! + +# And we can test some aspects on the target using configure macros. + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +############################################################################### +# +# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. +# (The JVM can use 32 or 64 bit Java pointers but that decision +# is made at runtime.) +# +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + CXXFLAGS="-m${with_target_bits} $CXXFLAGS" +fi +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 +$as_echo_n "checking size of int *... " >&6; } +if test "${ac_cv_sizeof_int_p+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int *) +See \`config.log' for more details" "$LINENO" 5 ; } + else + ac_cv_sizeof_int_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 +$as_echo "$ac_cv_sizeof_int_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT_P $ac_cv_sizeof_int_p +_ACEOF + + +CXXFLAGS="$OLD_CXXFLAGS" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +# keep track of c/cxx flags that we added outselves... +# to prevent emitting warning... +ADDED_CFLAGS= +ADDED_CXXFLAGS= +ADDED_LDFLAGS= + +if test "x$ac_cv_sizeof_int_p" = x0; then + # The test failed, lets pick the assumed value. + ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS +else + ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + ADDED_CFLAGS=" -m${with_target_bits}" + ADDED_CXXFLAGS=" -m${with_target_bits}" + ADDED_LDFLAGS=" -m${with_target_bits}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + fi +fi + +if test "x$ARCH_DATA_MODEL" = x64; then + A_LP64="LP64:=" + ADD_LP64="-D_LP64=1" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for target address size" >&5 +$as_echo_n "checking for target address size... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH_DATA_MODEL bits" >&5 +$as_echo "$ARCH_DATA_MODEL bits" >&6; } +LP64=$A_LP64 + + + +if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then + as_fn_error $? "The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 +fi + +# +# NOTE: check for -mstackrealign needs to be below potential addition of -m32 +# +if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. + # While waiting for a better solution, the current workaround is to use -mstackrealign. + CFLAGS="$CFLAGS -mstackrealign" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 32-bit compiler supports -mstackrealign" >&5 +$as_echo_n "checking if 32-bit compiler supports -mstackrealign... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main() { return 0; } +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path." "$LINENO" 5 + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +############################################################################### +# +# Is the target little of big endian? +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + ENDIAN="big";; #( + no) + ENDIAN="little" ;; #( + universal) + ENDIAN="universal_endianness" + ;; #( + *) + ENDIAN="unknown" ;; + esac + + +if test "x$ENDIAN" = xuniversal_endianness; then + as_fn_error $? "Building with both big and little endianness is not supported" "$LINENO" 5 +fi +if test "x$ENDIAN" = xunknown; then + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)" >&5 +$as_echo "$as_me: WARNING: The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)" >&2;} + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi + + + +# Configure flags for the tools + + +############################################################################### +# +# How to compile shared libraries. +# + +if test "x$GCC" = xyes; then + COMPILER_NAME=gcc + PICFLAG="-fPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-shared" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' + LD="$CC" + LDEXE="$CC" + LDCXX="$CXX" + LDEXECXX="$CXX" + POST_STRIP_CMD="$STRIP -g" + if test "x$JDK_VARIANT" = xembedded; then + POST_STRIP_CMD="$STRIP --strip-unneeded" + fi + + # Linking is different on MacOSX + if test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Might change in the future to clang. + COMPILER_NAME=gcc + SHARED_LIBRARY='lib$1.dylib' + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SHARED_LIBRARY_SUFFIX='.dylib' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" + fi +else + if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler + COMPILER_NAME=ossc + PICFLAG="-KPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='-M$1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' + SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' + CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" + CFLAGS_JDKLIB_EXTRA='-xstrconst' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" + fi + if test "x$OPENJDK_BUILD_OS" = xwindows; then + # If it is not gcc, then assume it is the MS Visual Studio compiler + COMPILER_NAME=cl + PICFLAG="" + LIBRARY_PREFIX= + SHARED_LIBRARY='$1.dll' + STATIC_LIBRARY='$1.lib' + SHARED_LIBRARY_FLAGS="-LD" + SHARED_LIBRARY_SUFFIX='.dll' + STATIC_LIBRARY_SUFFIX='.lib' + OBJ_SUFFIX='.obj' + EXE_SUFFIX='.exe' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='' + fi +fi + + + + + + + + + + + + + + + + + +# The (cross) compiler is now configured, we can now test capabilities +# of the target platform. + + + +############################################################################### +# +# Setup the opt flags for different compilers +# and different operating systems. +# +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + +case $COMPILER_TYPE in + CC ) + D_FLAG="-g" + case $COMPILER_NAME in + gcc ) + case $OPENJDK_TARGET_OS in + macosx ) + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + ;; + *) + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then + CFLAGS_DEBUG_SYMBOLS="-g1" + CXXFLAGS_DEBUG_SYMBOLSG="-g1" + fi + ;; + esac + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; + ossc ) + # + # Forte has different names for this with their C++ compiler... + # + C_FLAG_DEPS="-xMMD -xMF" + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + + case $LEGACY_OPENJDK_TARGET_CPU1 in + i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" + C_O_FLAG_HI="-xO4 -Wu,-O4~yz" + C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" + CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" + CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" + CXX_O_FLAG_NONE="" + ;; + sparc) + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NONE="" + ;; + esac + + CFLAGS_DEBUG_SYMBOLS="-g -xs" + CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + esac + ;; + CL ) + D_FLAG= + C_O_FLAG_HI="-O2" + C_O_FLAG_NORM="-O1" + C_O_FLAG_NONE="-Od" + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; +esac + +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +fi + + + + + + + + + + + + + + +if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags\"" >&5 +$as_echo "$as_me: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags\"" >&2;} +fi + +if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags\"" >&5 +$as_echo "$as_me: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags\"" >&2;} +fi + +if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags\"" >&5 +$as_echo "$as_me: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags\"" >&2;} +fi + + +# Check whether --with-extra-cflags was given. +if test "${with_extra_cflags+set}" = set; then : + withval=$with_extra_cflags; +fi + + + +# Check whether --with-extra-cxxflags was given. +if test "${with_extra_cxxflags+set}" = set; then : + withval=$with_extra_cxxflags; +fi + + + +# Check whether --with-extra-ldflags was given. +if test "${with_extra_ldflags+set}" = set; then : + withval=$with_extra_ldflags; +fi + + +CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" +CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" +LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" + +############################################################################### +# +# Now setup the CFLAGS and LDFLAGS for the JDK build. +# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. +# +case $COMPILER_NAME in + gcc ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + ppc ) + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac + ;; + ossc ) + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" + ;; + cl ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $LEGACY_OPENJDK_TARGET_CPU1 in + i?86 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + amd64 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +esac + +############################################################################### +# +# Cross-compile arch specific flags + +# +if test "x$JDK_VARIANT" = "xembedded"; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" +fi + +case $OPENJDK_TARGET_CPU_ARCH in +arm ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +ppc ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +esac + +############################################################################### + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" + +# The package path is used only on macosx? +PACKAGE_PATH=/opt/local + + +# Sometimes we use a cpu dir (.../lib/amd64/server) +# Sometimes not (.../lib/server) +LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" +if test "x$ENDIAN" = xlittle; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" +fi +if test "x$OPENJDK_TARGET_OS" = xlinux; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" +fi +if test "x$OPENJDK_TARGET_OS" = xwindows; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" +fi +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" + LIBARCHDIR="" +fi +if test "x$OPENJDK_TARGET_OS" = xbsd; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" +fi +if test "x$DEBUG_LEVEL" = xrelease; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" +fi + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ + -I${JDK_TOPDIR}/src/share/native/common \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" + +# The shared libraries are compiled using the picflag. +CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + +# Executable flags +CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" + +# Now this is odd. The JDK native libraries have to link against libjvm.so +# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library +# is identical for client and server? Yes. Which is picked at runtime (client or server)? +# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following +# libraries will link to whatever is in memory. Yuck. +# +# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. +if test "x$COMPILER_TYPE" = xCL; then + LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" + fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS_JDK="$LDFLAGS_JDK -debug" + LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" + LDFLAGS_JDKLIB_SUFFIX="" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + LDFLAGS_STACK_SIZE=1048576 + else + LDFLAGS_STACK_SIZE=327680 + fi + LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" +else + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" == "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi + fi + + LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" + LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" + if test "x$COMPILER_NAME" = xossc; then + LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" + fi + + # Only the jli library is explicitly linked when the launchers are built. + # The libjvm is then dynamically loaded/linked by the launcher. + LDFLAGS_JDKEXE="${LDFLAGS_JDK}" + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi +fi + +# Adjust flags according to debug level. +case $DEBUG_LEVEL in + fastdebug ) + CFLAGS="$CFLAGS $D_FLAG" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; + slowdebug ) + CFLAGS="$CFLAGS $D_FLAG" + C_O_FLAG_HI="$C_O_FLAG_NONE" + C_O_FLAG_NORM="$C_O_FLAG_NONE" + CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" + CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; +esac + + + + + + + + + + + + + + +# After we have toolchain, we can compile the uncygdrive helper + +# When using cygwin, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called uncygdrive.exe. +UNCYGDRIVE= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 +$as_echo_n "checking if uncygdrive can be created... " >&6; } + UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` + rm -f $OUTPUT_ROOT/uncygdrive* + UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` + cd $OUTPUT_ROOT + $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/uncygdrive1.log + as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 +$as_echo "$UNCYGDRIVE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 +$as_echo_n "checking if uncygdrive.exe works... " >&6; } + cd $OUTPUT_ROOT + $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/uncygdrive2.log + as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj +fi + + + + + +# Setup debug symbols (need objcopy from the toolchain for that) + +# +# ENABLE_DEBUG_SYMBOLS +# This must be done after the toolchain is setup, since we're looking at objcopy. +# +ENABLE_DEBUG_SYMBOLS=default + +# default on macosx is no... +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# default for embedded is no... +if test "x$JDK_VARIANT" = "xembedded"; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# Check whether --enable-debug-symbols was given. +if test "${enable_debug_symbols+set}" = set; then : + enableval=$enable_debug_symbols; ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols} +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should generate debug symbols" >&5 +$as_echo_n "checking if we should generate debug symbols... " >&6; } + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xyes" && test "x$OBJCOPY" = x; then + # explicit enabling of enable-debug-symbols and can't find objcopy + # this is an error + as_fn_error $? "Unable to find objcopy, cannot enable debug-symbols" "$LINENO" 5 +fi + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then + # Default is on if objcopy is found, otherwise off + if test "x$OBJCOPY" != x; then + ENABLE_DEBUG_SYMBOLS=yes + else + ENABLE_DEBUG_SYMBOLS=no + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DEBUG_SYMBOLS" >&5 +$as_echo "$ENABLE_DEBUG_SYMBOLS" >&6; } + +# +# ZIP_DEBUGINFO_FILES +# +ZIP_DEBUGINFO_FILES=yes + +# Check whether --enable-zip-debug-info was given. +if test "${enable_zip_debug_info+set}" = set; then : + enableval=$enable_zip_debug_info; ZIP_DEBUGINFO_FILES=${enable_zip_debug_info} +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should zip debug-info files" >&5 +$as_echo_n "checking if we should zip debug-info files... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP_DEBUGINFO_FILES" >&5 +$as_echo "$ZIP_DEBUGINFO_FILES" >&6; } + +# Hotspot wants ZIP_DEBUGINFO_FILES to be 1 for yes +# use that... +if test "x$ZIP_DEBUGINFO_FILES" = "xyes"; then + ZIP_DEBUGINFO_FILES=1 +else + ZIP_DEBUGINFO_FILES=0 +fi + + + + + + + +############################################################################### +# +# Check dependencies for external and internal libraries. +# +############################################################################### + + + +############################################################################### +# +# OS specific settings that we never will need to probe. +# +if test "x$OPENJDK_TARGET_OS" = xlinux; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Linux?" >&5 +$as_echo_n "checking what is not needed on Linux?... " >&6; } + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pulse" >&5 +$as_echo "pulse" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Solaris?" >&5 +$as_echo_n "checking what is not needed on Solaris?... " >&6; } + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 +$as_echo_n "checking what is not needed on Windows?... " >&6; } + CUPS_NOT_NEEDED=yes + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa cups pulse x11" >&5 +$as_echo "alsa cups pulse x11" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on MacOSX?" >&5 +$as_echo_n "checking what is not needed on MacOSX?... " >&6; } + 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. + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse x11" >&5 +$as_echo "alsa pulse x11" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xbsd; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on bsd?" >&5 +$as_echo_n "checking what is not needed on bsd?... " >&6; } + ALSA_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa" >&5 +$as_echo "alsa" >&6; } +fi + +if test "x$OPENJDK" = "xfalse"; then + FREETYPE2_NOT_NEEDED=yes +fi + +############################################################################### +# +# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM +# that uses this API. +# +# Check whether --enable-macosx-runtime-support was given. +if test "${enable_macosx_runtime_support+set}" = set; then : + enableval=$enable_macosx_runtime_support; MACOSX_RUNTIME_SUPPORT="${enableval}" +else + MACOSX_RUNTIME_SUPPORT="no" +fi + + +USE_MACOSX_RUNTIME_SUPPORT=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit Java runtime support in the OS" >&5 +$as_echo_n "checking for explicit Java runtime support in the OS... " >&6; } +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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, does not need alsa freetype2 pulse and X11" >&5 +$as_echo "yes, does not need alsa freetype2 pulse and X11" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, but explicitly disabled." >&5 +$as_echo "yes, but explicitly disabled." >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on an X11 build on MacOSX?" >&5 +$as_echo_n "checking what is not needed on an X11 build on MacOSX?... " >&6; } + X11_NOT_NEEDED= + FREETYPE2_NOT_NEEDED= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } +fi + + + + + +############################################################################### +# +# Check for X Windows +# + +# Check if the user has specified sysroot, but not --x-includes or --x-libraries. +# Make a simple check for the libraries at the sysroot, and setup --x-includes and +# --x-libraries for the sysroot, if that seems to be correct. +if test "x$SYS_ROOT" != "x/"; then + if test "x$x_includes" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/include/X11/Xlib.h"; then + x_includes="$SYS_ROOT/usr/X11R6/include" + fi + fi + if test "x$x_libraries" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/lib/libX11.so"; then + x_libraries="$SYS_ROOT/usr/X11R6/lib" + fi + fi +fi + +# Now let autoconf do it's magic +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + + +if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then + + # Print a helpful message on how to acquire the necessary build dependency. + # x11 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=x11 + 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 + + as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5 +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" + fi + if 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 + + + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${OPENJDK_TARGET_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $X_CFLAGS" +for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + X11_A_OK=yes +else + X11_A_OK=no +fi + +done + +CFLAGS="$OLD_CFLAGS" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then + + # Print a helpful message on how to acquire the necessary build dependency. + # x11 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=x11 + 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 + + as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5 +fi + + + + + + +############################################################################### +# +# The common unix printing system cups is used to print from java. +# + +# Check whether --with-cups was given. +if test "${with_cups+set}" = set; then : + withval=$with_cups; +fi + + +# Check whether --with-cups-include was given. +if test "${with_cups_include+set}" = set; then : + withval=$with_cups_include; +fi + + +# Check whether --with-cups-lib was given. +if test "${with_cups_lib+set}" = set; then : + withval=$with_cups_lib; +fi + + +if test "x$CUPS_NOT_NEEDED" = xyes; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 +$as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} + fi + CUPS_CFLAGS= + CUPS_LIBS= +else + CUPS_FOUND=no + + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 + fi + + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" + CUPS_FOUND=yes + fi + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" + CUPS_FOUND=yes + fi + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" + CUPS_FOUND=yes + fi + if test "x$CUPS_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_cups_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_cups_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_cups_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The cups comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_cups} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for cups" >&5 +$as_echo "$as_me: Using builddeps $resource for cups" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# cups is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/cups.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_cups_ROOT} + thecflags=${builddep_cups_CFLAGS} + thelibs=${builddep_cups_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency cups" "$LINENO" 5 + fi + CUPS=$depdir + if test "x$theroot" != x; then + CUPS="$theroot" + fi + if test "x$thecflags" != x; then + CUPS_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + CUPS_LIBS="$thelibs" + fi + CUPS_FOUND=yes + + fi + + fi + + fi + if test "x$CUPS_FOUND" = xno; then + # Are the cups headers installed in the default /usr/include location? + for ac_header in cups/cups.h cups/ppd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + CUPS_FOUND=yes + CUPS_CFLAGS= + CUPS_LIBS="-lcups" + DEFAULT_CUPS=yes +fi + +done + + fi + if test "x$CUPS_FOUND" = xno; then + # Getting nervous now? Lets poke around for standard Solaris third-party + # package installation locations. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 +$as_echo_n "checking for cups headers and libs... " >&6; } + if test -s /opt/sfw/cups/include/cups/cups.h; then + # An SFW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/sfw/cups/include" + CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" + elif test -s /opt/csw/include/cups/cups.h; then + # A CSW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/csw/include" + CUPS_LIBS="-L/opt/csw/lib -lcups" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 +$as_echo "$CUPS_FOUND" >&6; } + fi + if test "x$CUPS_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # cups is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=cups + 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 + + as_fn_error $? "Could not find cups! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + +############################################################################### +# +# The ubiquitous freetype2 library is used to render fonts. +# + +# Check whether --with-freetype was given. +if test "${with_freetype+set}" = set; then : + withval=$with_freetype; +fi + + +# 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 + +if test "x$FREETYPE2_NOT_NEEDED" = xyes; then + if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype not used, so --with-freetype is ignored" >&5 +$as_echo "$as_me: WARNING: freetype not used, so --with-freetype is ignored" >&2;} + fi + FREETYPE2_CFLAGS= + FREETYPE2_LIBS= + FREETYPE2_LIB_PATH= +else + FREETYPE2_FOUND=no + + if test "x$with_freetype" != x; then + + # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$with_freetype" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + with_freetype=`$CYGPATH -s -m -a "$with_freetype"` + with_freetype=`$CYGPATH -u "$with_freetype"` + else + as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 + fi + fi + + FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + if test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" + fi + FREETYPE2_LIB_PATH="$with_freetype/lib" + 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 + as_fn_error $? "Could not find the expected directories $with_freetype/lib and $with_freetype/include" "$LINENO" 5 + 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 + as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 + fi + # Check one h-file + if ! test -s "$with_freetype/include/ft2build.h"; then + as_fn_error $? "Could not find $with_freetype/include/ft2build.h" "$LINENO" 5 + fi + fi + fi + if test "x$FREETYPE2_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_freetype2_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The freetype2 comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_freetype2} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for freetype2" >&5 +$as_echo "$as_me: Using builddeps $resource for freetype2" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# freetype2 is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/freetype2.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_freetype2_ROOT} + thecflags=${builddep_freetype2_CFLAGS} + thelibs=${builddep_freetype2_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency freetype2" "$LINENO" 5 + fi + FREETYPE2=$depdir + if test "x$theroot" != x; then + FREETYPE2="$theroot" + fi + if test "x$thecflags" != x; then + FREETYPE2_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + FREETYPE2_LIBS="$thelibs" + fi + FREETYPE2_FOUND=yes + else FREETYPE2_FOUND=no + + fi + else FREETYPE2_FOUND=no + + fi + + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE2" >&5 +$as_echo_n "checking for FREETYPE2... " >&6; } + +if test -n "$FREETYPE2_CFLAGS"; then + pkg_cv_FREETYPE2_CFLAGS="$FREETYPE2_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$FREETYPE2_LIBS"; then + pkg_cv_FREETYPE2_LIBS="$FREETYPE2_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` + else + FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$FREETYPE2_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + FREETYPE2_FOUND=no +elif test $pkg_failed = untried; then + FREETYPE2_FOUND=no +else + FREETYPE2_CFLAGS=$pkg_cv_FREETYPE2_CFLAGS + FREETYPE2_LIBS=$pkg_cv_FREETYPE2_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FREETYPE2_FOUND=yes +fi + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 +$as_echo_n "checking for freetype in some standard locations... " >&6; } + + if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" + DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" + fi + if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" + DEFAULT_FREETYPE_LIBS="-lfreetype" + fi + + PREV_CXXCFLAGS="$CXXFLAGS" + PREV_LDFLAGS="$LDFLAGS" + CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" + LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include FT_FREETYPE_H + int main() { return 0; } + +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + # Yes, the default cflags and libs did the trick. + FREETYPE2_FOUND=yes + FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" + FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" + +else + + FREETYPE2_FOUND=no + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CXXCFLAGS="$PREV_CXXFLAGS" + LDFLAGS="$PREV_LDFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 +$as_echo "$FREETYPE2_FOUND" >&6; } + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # freetype2 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=freetype2 + 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 + + as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + + + +############################################################################### +# +# Check for alsa headers and libraries. Used on Linux/GNU systems. +# + +# Check whether --with-alsa was given. +if test "${with_alsa+set}" = set; then : + withval=$with_alsa; +fi + + +# Check whether --with-alsa-include was given. +if test "${with_alsa_include+set}" = set; then : + withval=$with_alsa_include; +fi + + +# Check whether --with-alsa-lib was given. +if test "${with_alsa_lib+set}" = set; then : + withval=$with_alsa_lib; +fi + + +if test "x$ALSA_NOT_NEEDED" = xyes; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5 +$as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;} + fi + ALSA_CFLAGS= + ALSA_LIBS= +else + ALSA_FOUND=no + + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then + as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5 + fi + + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" + ALSA_FOUND=yes + fi + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" + ALSA_FOUND=yes + fi + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" + ALSA_FOUND=yes + fi + if test "x$ALSA_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_alsa_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The alsa comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_alsa} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for alsa" >&5 +$as_echo "$as_me: Using builddeps $resource for alsa" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# alsa is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/alsa.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_alsa_ROOT} + thecflags=${builddep_alsa_CFLAGS} + thelibs=${builddep_alsa_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency alsa" "$LINENO" 5 + fi + ALSA=$depdir + if test "x$theroot" != x; then + ALSA="$theroot" + fi + if test "x$thecflags" != x; then + ALSA_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + ALSA_LIBS="$thelibs" + fi + ALSA_FOUND=yes + else ALSA_FOUND=no + + fi + else ALSA_FOUND=no + + fi + + fi + if test "x$ALSA_FOUND" = xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5 +$as_echo_n "checking for ALSA... " >&6; } + +if test -n "$ALSA_CFLAGS"; then + pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$ALSA_LIBS"; then + pkg_cv_ALSA_LIBS="$ALSA_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa" 2>&1` + else + ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$ALSA_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ALSA_FOUND=no +elif test $pkg_failed = untried; then + ALSA_FOUND=no +else + ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS + ALSA_LIBS=$pkg_cv_ALSA_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + ALSA_FOUND=yes +fi + fi + if test "x$ALSA_FOUND" = xno; then + for ac_header in alsa/asoundlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" +if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ALSA_ASOUNDLIB_H 1 +_ACEOF + ALSA_FOUND=yes + ALSA_CFLAGS=-Iignoreme + ALSA_LIBS=-lasound + DEFAULT_ALSA=yes +else + ALSA_FOUND=no +fi + +done + + fi + if test "x$ALSA_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # alsa is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=alsa + 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 + + as_fn_error $? "Could not find alsa! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + +############################################################################### +# +# Check for the jpeg library +# + +USE_EXTERNAL_LIBJPEG=true +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 +$as_echo_n "checking for main in -ljpeg... " >&6; } +if test "${ac_cv_lib_jpeg_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_jpeg_main=yes +else + ac_cv_lib_jpeg_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 +$as_echo "$ac_cv_lib_jpeg_main" >&6; } +if test "x$ac_cv_lib_jpeg_main" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBJPEG 1 +_ACEOF + + LIBS="-ljpeg $LIBS" + +else + USE_EXTERNAL_LIBJPEG=false + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use jpeg decoder bundled with the OpenJDK source" >&5 +$as_echo "$as_me: Will use jpeg decoder bundled with the OpenJDK source" >&6;} + +fi + + + +############################################################################### +# +# Check for the gif library +# + +USE_EXTERNAL_LIBJPEG=true +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 +$as_echo_n "checking for main in -lgif... " >&6; } +if test "${ac_cv_lib_gif_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgif $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_gif_main=yes +else + ac_cv_lib_gif_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 +$as_echo "$ac_cv_lib_gif_main" >&6; } +if test "x$ac_cv_lib_gif_main" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGIF 1 +_ACEOF + + LIBS="-lgif $LIBS" + +else + USE_EXTERNAL_LIBGIF=false + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use gif decoder bundled with the OpenJDK source" >&5 +$as_echo "$as_me: Will use gif decoder bundled with the OpenJDK source" >&6;} + +fi + + + +############################################################################### +# +# Check for the zlib library +# + + +# Check whether --with-zlib was given. +if test "${with_zlib+set}" = set; then : + withval=$with_zlib; +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5 +$as_echo_n "checking for compress in -lz... " >&6; } +if test "${ac_cv_lib_z_compress+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress (); +int +main () +{ +return compress (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_z_compress=yes +else + ac_cv_lib_z_compress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 +$as_echo "$ac_cv_lib_z_compress" >&6; } +if test "x$ac_cv_lib_z_compress" = x""yes; then : + ZLIB_FOUND=yes +else + ZLIB_FOUND=no +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for which zlib to use" >&5 +$as_echo_n "checking for which zlib to use... " >&6; } + +DEFAULT_ZLIB=bundled +if test "x$OPENJDK_TARGET_OS" = xmacosx; then +# +# On macosx default is system...on others default is +# + DEFAULT_ZLIB=system +fi + +if test "x${ZLIB_FOUND}" != "xyes"; then +# +# If we don't find any system...set default to bundled +# + DEFAULT_ZLIB=bundled +fi + +# +# If user didn't specify, use DEFAULT_ZLIB +# +if test "x${with_zlib}" = "x"; then + with_zlib=${DEFAULT_ZLIB} +fi + +if test "x${with_zlib}" = "xbundled"; then + USE_EXTERNAL_LIBZ=false + { $as_echo "$as_me:${as_lineno-$LINENO}: result: bundled" >&5 +$as_echo "bundled" >&6; } +elif test "x${with_zlib}" = "xsystem"; then + if test "x${ZLIB_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBZ=true + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system" >&5 +$as_echo "system" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system not found" >&5 +$as_echo "system not found" >&6; } + as_fn_error $? "--with-zlib=system specified, but no zlib found!" "$LINENO" 5 + fi +else + as_fn_error $? "Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled'" "$LINENO" 5 +fi + + + +############################################################################### +LIBZIP_CAN_USE_MMAP=true +if test "x$JDK_VARIANT" = "xembedded"; then + LIBZIP_CAN_USE_MMAP=false +fi + + +############################################################################### +# +# Check if altzone exists in time.h +# + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +return (int)altzone; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_altzone=yes +else + has_altzone=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test "x$has_altzone" = xyes; then + +$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h + +fi + +############################################################################### +# +# Check the maths library +# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 +$as_echo_n "checking for cos in -lm... " >&6; } +if test "${ac_cv_lib_m_cos+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cos (); +int +main () +{ +return cos (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_m_cos=yes +else + ac_cv_lib_m_cos=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 +$as_echo "$ac_cv_lib_m_cos" >&6; } +if test "x$ac_cv_lib_m_cos" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Maths library was not found" >&5 +$as_echo "$as_me: Maths library was not found" >&6;} + +fi + + + +############################################################################### +# +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +LIBDL="$LIBS" + +LIBS="$save_LIBS" + + + +############################################################################### +# +# statically link libstdc++ before C++ ABI is stablized on Linux unless +# dynamic build is configured on command line. +# +# Check whether --enable-static-link-stdc++ was given. +if test "${enable_static_link_stdc__+set}" = set; then : + enableval=$enable_static_link_stdc__; +else + + enable_static_link_stdc__=yes + +fi + + +if test "x$OPENJDK_TARGET_OS" = xlinux; then + # Test if -lstdc++ works. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic link of stdc++ is possible" >&5 +$as_echo_n "checking if dynamic link of stdc++ is possible... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + OLD_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -lstdc++" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_dynamic_libstdcxx=yes +else + has_dynamic_libstdcxx=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$OLD_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_dynamic_libstdcxx" >&5 +$as_echo "$has_dynamic_libstdcxx" >&6; } + + # Test if stdc++ can be linked statically. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static link of stdc++ is possible" >&5 +$as_echo_n "checking if static link of stdc++ is possible... " >&6; } + STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + OLD_LIBS="$LIBS" + OLD_CXX="$CXX" + LIBS="$STATIC_STDCXX_FLAGS" + CXX="$CC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_static_libstdcxx=yes +else + has_static_libstdcxx=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$OLD_LIBS" + CXX="$OLD_CXX" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_static_libstdcxx" >&5 +$as_echo "$has_static_libstdcxx" >&6; } + + if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then + as_fn_error $? "I cannot link to stdc++! Neither dynamically nor statically." "$LINENO" 5 + fi + + if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Static linking of libstdc++ was not possible reverting to dynamic linking." >&5 +$as_echo "$as_me: Static linking of libstdc++ was not possible reverting to dynamic linking." >&6;} + enable_static_link_stdc__=no + fi + + if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic linking of libstdc++ was not possible reverting to static linking." >&5 +$as_echo "$as_me: Dynamic linking of libstdc++ was not possible reverting to static linking." >&6;} + enable_static_link_stdc__=yes + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libstdc++" >&5 +$as_echo_n "checking how to link with libstdc++... " >&6; } + if test "x$enable_static_link_stdc__" = xyes; then + LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" + LDCXX="$CC" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 +$as_echo "static" >&6; } + else + LIBCXX="$LIBCXX -lstdc++" + LDCXX="$CXX" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 +$as_echo "dynamic" >&6; } + fi +fi + +# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) +if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_OPENJDK_TARGET_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" +fi + + + + + +############################################################################### +# +# We need to do some final tweaking, when everything else is done. +# +############################################################################### + + +HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" + + +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi + + + + +############################################################################### +# +# Configure parts of the build that only affect the build performance, +# not the result. +# +############################################################################### + + +# How many cores do we have on this build system? + +# Check whether --with-num-cores was given. +if test "${with_num_cores+set}" = set; then : + withval=$with_num_cores; +fi + +if test "x$with_num_cores" = x; then + # The number of cores were not specified, try to probe them. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5 +$as_echo_n "checking for number of cores... " >&6; } + NUM_CORES=1 + FOUND_CORES=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + NUM_CORES=`cat /proc/cpuinfo | grep -c processor` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/psrinfo; then + # Looks like a Solaris system + NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` + FOUND_CORES=yes + fi + + if test "x$build_os" = xwindows; then + NUM_CORES=4 + fi + + # For c/c++ code we run twice as many concurrent build + # jobs than we have cores, otherwise we will stall on io. + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` + + if test "x$FOUND_CORES" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 +$as_echo "$NUM_CORES" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 +$as_echo "could not detect number of cores, defaulting to 1!" >&6; } + fi + + +else + NUM_CORES=$with_num_cores + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` +fi + + + + +# How much memory do we have on this build system? + +# Check whether --with-memory-size was given. +if test "${with_memory_size+set}" = set; then : + withval=$with_memory_size; +fi + +if test "x$with_memory_size" = x; then + # The memory size was not specified, try to probe it. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5 +$as_echo_n "checking for memory size... " >&6; } + # Default to 1024MB + MEMORY_SIZE=1024 + FOUND_MEM=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/prtconf; then + # Looks like a Solaris system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + FOUND_MEM=yes + fi + + if test "x$build_os" = xwindows; then + MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` + FOUND_MEM=yes + fi + + if test "x$FOUND_MEM" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 +$as_echo "$MEMORY_SIZE MB" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024MB!" >&5 +$as_echo "could not detect memory size defaulting to 1024MB!" >&6; } + fi + +else + MEMORY_SIZE=$with_memory_size +fi + + + +# Setup smart javac (after cores and memory have been setup) + + +# Check whether --with-server-java was given. +if test "${with_server_java+set}" = set; then : + withval=$with_server_java; +fi + + +if test "x$with_server_java" != x; then + SERVER_JAVA="$with_server_java" + FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" = x; then + as_fn_error $? "Could not execute server java: $SERVER_JAVA" "$LINENO" 5 + fi +else + SERVER_JAVA="" + # Hotspot specific options. + + # Test if -XX:+UseParallelOldGC is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:+UseParallelOldGC to SERVER_JAVA + FOUND_WARN=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -XX:+UseParallelOldGC" + fi + + + # Test if -verbosegc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -verbosegc to SERVER_JAVA + FOUND_WARN=`$JAVA -verbosegc -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -verbosegc -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -verbosegc" + fi + + # JRockit specific options. + + # Test if -Xverbose:gc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xverbose:gc to SERVER_JAVA + FOUND_WARN=`$JAVA -Xverbose:gc -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xverbose:gc -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xverbose:gc" + fi + + SERVER_JAVA="$JAVA $SERVER_JAVA" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use shared server for javac" >&5 +$as_echo_n "checking whether to use shared server for javac... " >&6; } +# Check whether --enable-javac-server was given. +if test "${enable_javac_server+set}" = set; then : + enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}" +else + ENABLE_JAVAC_SERVER='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_SERVER" >&5 +$as_echo "$ENABLE_JAVAC_SERVER" >&6; } +if test "x$ENABLE_JAVAC_SERVER" = xyes; then + JAVAC_USE_REMOTE=true + JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" +else + JAVAC_USE_REMOTE=false + JAVAC_SERVERS= +fi + + + + +# Check whether --with-javac-server-cores was given. +if test "${with_javac_server_cores+set}" = set; then : + withval=$with_javac_server_cores; +fi + +if test "x$with_javac_server_cores" != x; then + JAVAC_SERVER_CORES="$with_javac_server_cores" +else + if test "$NUM_CORES" -gt 16; then + # We set this arbitrary limit because we want to limit the heap + # size of the javac server. + # In the future we will make the javac compilers in the server + # share more and more state, thus enabling us to use more and + # more concurrent threads in the server. + JAVAC_SERVER_CORES="16" + else + JAVAC_SERVER_CORES="$NUM_CORES" + fi + + if test "$MEMORY_SIZE" -gt "17000"; then + MAX_HEAP_MEM=10000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms10G -Xmx10G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms10G -Xmx10G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms10G -Xmx10G" + fi + + + # Test if -Xmn2G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn2G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn2G" + fi + + elif test "$MEMORY_SIZE" -gt "10000"; then + MAX_HEAP_MEM=6000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms6G -Xmx6G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms6G -Xmx6G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms6G -Xmx6G" + fi + + + # Test if -Xmn1G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn1G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn1G" + fi + + elif test "$MEMORY_SIZE" -gt "5000"; then + MAX_HEAP_MEM=3000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms1G -Xmx3G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms1G -Xmx3G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx3G" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "3800"; then + MAX_HEAP_MEM=2500 + + # Test if -Xms1G -Xmx2500M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms1G -Xmx2500M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx2500M" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "1900"; then + MAX_HEAP_MEM=1200 + + # Test if -Xms700M -Xmx1200M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms700M -Xmx1200M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms700M -Xmx1200M" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "1000"; then + MAX_HEAP_MEM=900 + + # Test if -Xms400M -Xmx900M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms400M -Xmx900M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms400M -Xmx900M" + fi + + + # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn128M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn128M" + fi + + else + MAX_HEAP_MEM=512 + + # Test if -Xms256M -Xmx512M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms256M -Xmx512M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms256M -Xmx512M" + fi + + + # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn128M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn128M" + fi + + fi + + MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` + if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if number of server cores must be reduced" >&5 +$as_echo_n "checking if number of server cores must be reduced... " >&6; } + JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&5 +$as_echo "yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&6; } + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to track dependencies between Java packages" >&5 +$as_echo_n "checking whether to track dependencies between Java packages... " >&6; } +# Check whether --enable-javac-deps was given. +if test "${enable_javac_deps+set}" = set; then : + enableval=$enable_javac_deps; ENABLE_JAVAC_DEPS="${enableval}" +else + ENABLE_JAVAC_DEPS='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_DEPS" >&5 +$as_echo "$ENABLE_JAVAC_DEPS" >&6; } +if test "x$ENABLE_JAVAC_DEPS" = xyes; then + JAVAC_USE_DEPS=true +else + JAVAC_USE_DEPS=false +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use multiple cores for javac compilation" >&5 +$as_echo_n "checking whether to use multiple cores for javac compilation... " >&6; } +# Check whether --enable-javac-multi-core was given. +if test "${enable_javac_multi_core+set}" = set; then : + enableval=$enable_javac_multi_core; ENABLE_JAVAC_MULTICORE="${enableval}" +else + ENABLE_JAVAC_MULTICORE='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_MULTICORE" >&5 +$as_echo "$ENABLE_JAVAC_MULTICORE" >&6; } +if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then + JAVAC_USE_MODE=MULTI_CORE_CONCURRENT +else + JAVAC_USE_MODE=SINGLE_THREADED_BATCH + if test "x$ENABLE_JAVAC_DEPS" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&5 +$as_echo "$as_me: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling dependency tracking for you now." >&5 +$as_echo "$as_me: WARNING: Disabling dependency tracking for you now." >&2;} + JAVAC_USE_DEPS=false + fi + if test "x$ENABLE_JAVAC_SERVER" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&5 +$as_echo "$as_me: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling javac server for you now." >&5 +$as_echo "$as_me: WARNING: Disabling javac server for you now." >&2;} + JAVAC_USE_REMOTE=false + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use sjavac" >&5 +$as_echo_n "checking whether to use sjavac... " >&6; } +# Check whether --enable-sjavac was given. +if test "${enable_sjavac+set}" = set; then : + enableval=$enable_sjavac; ENABLE_SJAVAC="${enableval}" +else + ENABLE_SJAVAC='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_SJAVAC" >&5 +$as_echo "$ENABLE_SJAVAC" >&6; } + + + + +# Can the C/C++ compiler use precompiled headers? + + +############################################################################### +# +# Can the C/C++ compiler use precompiled headers? +# +# Check whether --enable-precompiled-headers was given. +if test "${enable_precompiled_headers+set}" = set; then : + enableval=$enable_precompiled_headers; ENABLE_PRECOMPH=${enable_precompiled-headers} +else + ENABLE_PRECOMPH=yes +fi + + +USE_PRECOMPILED_HEADER=1 +if test "x$ENABLE_PRECOMPH" = xno; then + USE_PRECOMPILED_HEADER=0 +fi + +if test "x$ENABLE_PRECOMPH" = xyes; then + # Check that the compiler actually supports precomp headers. + if test "x$GCC" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking that precompiled headers work" >&5 +$as_echo_n "checking that precompiled headers work... " >&6; } + echo "int alfa();" > conftest.h + $CXX -x c++-header conftest.h -o conftest.hpp.gch + if test ! -f conftest.hpp.gch; then + echo Precompiled header is not working! + USE_PRECOMPILED_HEADER=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rm -f conftest.h + fi +fi + + + + +# Setup use of ccache, if available + + # Check whether --enable-ccache was given. +if test "${enable_ccache+set}" = set; then : + enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} +else + ENABLE_CCACHE=yes +fi + + if test "x$ENABLE_CCACHE" = xyes; then + # Extract the first word of "ccache", so it can be a program name with args. +set dummy ccache; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CCACHE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CCACHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CCACHE=$ac_cv_path_CCACHE +if test -n "$CCACHE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 +$as_echo "$CCACHE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 +$as_echo_n "checking for ccache... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 +$as_echo "explicitly disabled" >&6; } + CCACHE= + fi + + + +# Check whether --with-ccache-dir was given. +if test "${with_ccache_dir+set}" = set; then : + withval=$with_ccache_dir; +fi + + + if test "x$with_ccache_dir" != x; then + # When using a non home ccache directory, assume the use is to share ccache files + # with other users. Thus change the umask. + SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + fi + CCACHE_FOUND="" + if test "x$CCACHE" != x; then + + if test "x$CCACHE" != x; then + CCACHE_FOUND="true" + # Only use ccache if it is 3.1.4 or later, which supports + # precompiled headers. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 +$as_echo_n "checking if ccache supports precompiled headers... " >&6; } + HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null` + if test "x$HAS_GOOD_CCACHE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 +$as_echo "no, disabling ccache" >&6; } + CCACHE= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5 +$as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; } + PUSHED_FLAGS="$CXXFLAGS" + CXXFLAGS="-fpch-preprocess $CXXFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + CC_KNOWS_CCACHE_TRICK=yes +else + CC_KNOWS_CCACHE_TRICK=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$PUSHED_FLAGS" + if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 +$as_echo "no, disabling ccaching of precompiled headers" >&6; } + CCACHE= + fi + fi + fi + + if test "x$CCACHE" != x; then + CCACHE_SLOPPINESS=time_macros + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" + CCACHE_FLAGS=-fpch-preprocess + + if test "x$SET_CCACHE_DIR" != x; then + mkdir -p $CCACHE_DIR > /dev/null 2>&1 + chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 + fi + fi + + fi + + +############################################################################### +# +# And now the finish... +# +############################################################################### + +# Check for some common pitfalls + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 +$as_echo_n "checking if build directory is on local disk... " >&6; } + + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + if $DF -l $OUTPUT_ROOT > /dev/null 2>&1; then + OUTPUT_DIR_IS_LOCAL="yes" + else + OUTPUT_DIR_IS_LOCAL="no" + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 +$as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } + +# Check if the user has any old-style ALT_ variables set. +FOUND_ALT_VARIABLES=`env | grep ^ALT_` + +# Before generating output files, test if they exist. If they do, this is a reconfigure. +# Since we can't properly handle the dependencies for this, warn the user about the situation +if test -e $OUTPUT_ROOT/spec.gmk; then + IS_RECONFIGURE=yes +else + IS_RECONFIGURE=no +fi + +if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then + HIDE_PERFORMANCE_HINTS=yes +else + HIDE_PERFORMANCE_HINTS=no + # Hide it the next time around... + $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 +fi + + + +# At the end, call the closed hook. (Dummy macro if no closed sources available) + + +# We're messing a bit with internal autoconf variables to put the config.status +# in the output directory instead of the current directory. +CONFIG_STATUS="$OUTPUT_ROOT/config.status" +# Create the actual output files. Now the main work of configure is done. +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by openjdk $as_me jdk8, which was +generated by GNU Autoconf 2.67. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +openjdk config.status jdk8 +configured by $0, generated by GNU Autoconf 2.67, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "$OUTPUT_ROOT/config.h") CONFIG_HEADERS="$CONFIG_HEADERS $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" ;; + "$OUTPUT_ROOT/spec.gmk") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" ;; + "$OUTPUT_ROOT/spec.sh") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" ;; + "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +# Finally output some useful information to the user + +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi +fi + +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" +printf "\n" + +if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + + # Print a helpful message on how to acquire the necessary build dependency. + # ccache is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=ccache + 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 + + printf "$HELP_MSG\n" + printf "\n" +fi + +if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then + printf "NOTE: You have requested to build more than one version of the JVM, which\n" + printf "will result in longer build times.\n" + printf "\n" +fi + +if test "x$FOUND_ALT_VARIABLES" != "x"; then + printf "WARNING: You have old-style ALT_ environment variables set.\n" + printf "These are not respected, and will be ignored. It is recommended\n" + printf "that you clean your environment. The following variables are set:\n" + printf "$FOUND_ALT_VARIABLES\n" + printf "\n" +fi + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" + printf "\n" +fi + +if test "x$IS_RECONFIGURE" = "xyes"; then + printf "WARNING: The result of this configuration has overridden an older\n" + printf "configuration. You *should* run 'make clean' to make sure you get a\n" + printf "proper build. Failure to do so might result in strange build problems.\n" + printf "\n" +fi + diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index 16aef9fb33c..01b48172dae 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -23,18 +23,22 @@ # questions. # -function help_on_build_dependency { +AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP], +[ + AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd) +]) + +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 MISSING_DEPENDENCY=$1 PKGHANDLER_COMMAND= - AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd) - case $PKGHANDLER in apt-get) apt_help $MISSING_DEPENDENCY ;; - yum) + yum) yum_help $MISSING_DEPENDENCY ;; port) port_help $MISSING_DEPENDENCY ;; @@ -47,11 +51,11 @@ function help_on_build_dependency { esac if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="Try running '$PKGHANDLER_COMMAND'." + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." fi -} +]) -function apt_help { +apt_help() { case $1 in devkit) PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; @@ -74,7 +78,7 @@ function apt_help { esac } -function yum_help { +yum_help() { case $1 in devkit) PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; @@ -97,14 +101,97 @@ function yum_help { esac } -function port_help { +port_help() { PKGHANDLER_COMMAND="" } -function pkgutil_help { +pkgutil_help() { PKGHANDLER_COMMAND="" } -function pkgadd_help { +pkgadd_help() { PKGHANDLER_COMMAND="" } + +AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS], +[ +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi +fi + +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" +printf "\n" + +if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + HELP_MSG_MISSING_DEPENDENCY([ccache]) + printf "$HELP_MSG\n" + printf "\n" +fi + +if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then + printf "NOTE: You have requested to build more than one version of the JVM, which\n" + printf "will result in longer build times.\n" + printf "\n" +fi + +if test "x$FOUND_ALT_VARIABLES" != "x"; then + printf "WARNING: You have old-style ALT_ environment variables set.\n" + printf "These are not respected, and will be ignored. It is recommended\n" + printf "that you clean your environment. The following variables are set:\n" + printf "$FOUND_ALT_VARIABLES\n" + printf "\n" +fi + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" + printf "\n" +fi + +if test "x$IS_RECONFIGURE" = "xyes"; then + printf "WARNING: The result of this configuration has overridden an older\n" + printf "configuration. You *should* run 'make clean' to make sure you get a\n" + printf "proper build. Failure to do so might result in strange build problems.\n" + printf "\n" +fi +]) diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4 new file mode 100644 index 00000000000..28266251f99 --- /dev/null +++ b/common/autoconf/jdk-options.m4 @@ -0,0 +1,551 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT], +[ +############################################################################### +# +# Check which variant of the JDK that we want to build. +# Currently we have: +# normal: standard edition +# embedded: cut down to a smaller footprint +# +# Effectively the JDK variant gives a name to a specific set of +# modules to compile into the JDK. In the future, these modules +# might even be Jigsaw modules. +# +AC_MSG_CHECKING([which variant of the JDK to build]) +AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant], + [JDK variant to build (normal, embedded) @<:@normal@:>@])]) + +if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then + JAVASE_EMBEDDED="" + MINIMIZE_RAM_USAGE="" + JDK_VARIANT="normal" +elif test "x$with_jdk_variant" = xembedded; then + JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" + MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" + JDK_VARIANT="embedded" +else + AC_MSG_ERROR([The available JDK variants are: normal, embedded]) +fi + +AC_SUBST(JAVASE_EMBEDDED) +AC_SUBST(MINIMIZE_RAM_USAGE) +AC_SUBST(JDK_VARIANT) + +AC_MSG_RESULT([$JDK_VARIANT]) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], +[ + +############################################################################### +# +# Check which variants of the JVM that we want to build. +# Currently we have: +# server: normal interpreter and a tiered C1/C2 compiler +# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) +# kernel: kernel footprint JVM that passes the TCK without major performance problems, +# ie normal interpreter and C1, only the serial GC, kernel jvmti etc +# zero: no machine code interpreter, no compiler +# zeroshark: zero interpreter and shark/llvm compiler backend +AC_MSG_CHECKING([which variants of the JVM that should be built]) +AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], + [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) + +if test "x$with_jvm_variants" = x; then + if test "x$JDK_VARIANT" = xembedded; then + with_jvm_variants="client" + else + with_jvm_variants="server" + fi +fi + +JVM_VARIANTS=",$with_jvm_variants," +TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + +if test "x$TEST_VARIANTS" != "x,"; then + AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) +fi +AC_MSG_RESULT([$with_jvm_variants]) + +JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` +JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` +JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` +JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` +JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.]) + fi +fi +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) + fi +fi + +# Replace the commas with AND for use in the build directory name. +ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` +COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` +if test "x$COUNT_VARIANTS" != "x,1"; then + BUILDING_MULTIPLE_JVM_VARIANTS=yes +else + BUILDING_MULTIPLE_JVM_VARIANTS=no +fi + +AC_SUBST(JVM_VARIANTS) +AC_SUBST(JVM_VARIANT_SERVER) +AC_SUBST(JVM_VARIANT_CLIENT) +AC_SUBST(JVM_VARIANT_KERNEL) +AC_SUBST(JVM_VARIANT_ZERO) +AC_SUBST(JVM_VARIANT_ZEROSHARK) + + +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL], +[ +############################################################################### +# +# Set the debug level +# release: no debug information, all optimizations, no asserts. +# fastdebug: debug information (-g), all optimizations, all asserts +# slowdebug: debug information (-g), no optimizations, all asserts +# +DEBUG_LEVEL="release" +AC_MSG_CHECKING([which debug level to use]) +AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], + [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])], + [ + ENABLE_DEBUG="${enableval}" + DEBUG_LEVEL="fastdebug" + ], [ENABLE_DEBUG="no"]) + +AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level], + [set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])], + [ + DEBUG_LEVEL="${withval}" + if test "x$ENABLE_DEBUG" = xyes; then + AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) + fi + ]) +AC_MSG_RESULT([$DEBUG_LEVEL]) + +if test "x$DEBUG_LEVEL" != xrelease && \ + test "x$DEBUG_LEVEL" != xfastdebug && \ + test "x$DEBUG_LEVEL" != xslowdebug; then + AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) +fi + + +############################################################################### +# +# Setup legacy vars/targets and new vars to deal with different debug levels. +# + +case $DEBUG_LEVEL in + release ) + VARIANT="OPT" + FASTDEBUG="false" + DEBUG_CLASSFILES="false" + BUILD_VARIANT_RELEASE="" + HOTSPOT_DEBUG_LEVEL="product" + HOTSPOT_EXPORT="product" + ;; + fastdebug ) + VARIANT="DBG" + FASTDEBUG="true" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-fastdebug" + HOTSPOT_DEBUG_LEVEL="fastdebug" + HOTSPOT_EXPORT="fastdebug" + ;; + slowdebug ) + VARIANT="DBG" + FASTDEBUG="false" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-debug" + HOTSPOT_DEBUG_LEVEL="jvmg" + HOTSPOT_EXPORT="debug" + ;; +esac + +##### +# Generate the legacy makefile targets for hotspot. +# The hotspot api for selecting the build artifacts, really, needs to be improved. +# +HOTSPOT_TARGET="" + +if test "x$JVM_VARIANT_SERVER" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " +fi + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " +fi + +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " +fi + +if test "x$JVM_VARIANT_ZERO" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " +fi + +if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " +fi + +HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" + +##### + +AC_SUBST(DEBUG_LEVEL) +AC_SUBST(VARIANT) +AC_SUBST(FASTDEBUG) +AC_SUBST(DEBUG_CLASSFILES) +AC_SUBST(BUILD_VARIANT_RELEASE) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS], +[ + +############################################################################### +# +# Should we build only OpenJDK even if closed sources are present? +# +AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], + [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) + +if test "x$enable_openjdk_only" = "xyes"; then + OPENJDK=true +elif test "x$enable_openjdk_only" = "xno"; then + OPENJDK=false +elif test -d "$SRC_ROOT/jdk/src/closed"; then + OPENJDK=false +else + OPENJDK=true +fi + +if test "x$OPENJDK" = "xtrue"; then + SET_OPENJDK=OPENJDK=true +fi + +AC_SUBST(SET_OPENJDK) + +############################################################################### +# +# JIGSAW or not. The JIGSAW variable is used during the intermediate +# stage when we are building both the old style JDK and the new style modularized JDK. +# When the modularized JDK is finalized, this option will go away. +# +AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], + [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) + +if test "x$enable_jigsaw" = "xyes"; then + JIGSAW=true +else + JIGSAW=false +fi +AC_SUBST(JIGSAW) + +############################################################################### +# +# Should we build a JDK/JVM with headful support (ie a graphical ui)? +# We always build headless support. +# +AC_MSG_CHECKING([headful support]) +AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], + [build headful support (graphical UI support) @<:@enabled@:>@])], + [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) + +SUPPORT_HEADLESS=yes +BUILD_HEADLESS="BUILD_HEADLESS:=true" + +if test "x$SUPPORT_HEADFUL" = xyes; then + # We are building both headful and headless. + BUILD_HEADLESS_ONLY="" + headful_msg="inlude support for both headful and headless" +fi + +if test "x$SUPPORT_HEADFUL" = xno; then + # Thus we are building headless only. + BUILD_HEADLESS="BUILD_HEADLESS:=true" + BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" + headful_msg="headless only" +fi + +AC_MSG_RESULT([$headful_msg]) + +AC_SUBST(SUPPORT_HEADLESS) +AC_SUBST(SUPPORT_HEADFUL) +AC_SUBST(BUILD_HEADLESS) +AC_SUBST(BUILD_HEADLESS_ONLY) + +############################################################################### +# +# Should we run the painfully slow javadoc tool? +# +AC_MSG_CHECKING([whether to build documentation]) +AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs], + [enable generation of Javadoc documentation @<:@disabled@:>@])], + [ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no']) +AC_MSG_RESULT([$ENABLE_DOCS]) +AC_SUBST(ENABLE_DOCS) +GENERATE_DOCS=false +if test "x$ENABLE_DOCS" = xyes; then + GENERATE_DOCS=true +fi +AC_SUBST(GENERATE_DOCS) + +############################################################################### +# +# Should we compile nimbus swing L&F? We can probably remove this option +# since nimbus is officially part of javax now. +# +AC_MSG_CHECKING([whether to build nimbus L&F]) +AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], + [disable Nimbus L&F @<:@enabled@:>@])], + [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) +AC_MSG_RESULT([$ENABLE_NIMBUS]) +DISABLE_NIMBUS= +if test "x$ENABLE_NIMBUS" = xno; then + DISABLE_NIMBUS=true +fi +AC_SUBST(DISABLE_NIMBUS) + +# Control wether Hotspot runs Queens test after build. +AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], + [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, + [enable_hotspot_test_in_build=no]) +if test "x$enable_hotspot_test_in_build" = "xyes"; then + TEST_IN_BUILD=true +else + TEST_IN_BUILD=false +fi +AC_SUBST(TEST_IN_BUILD) + +############################################################################### +# +# Choose cacerts source file +# +AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file], + [specify alternative cacerts file])]) +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi +AC_SUBST(CACERTS_FILE) + +############################################################################### +# +# Compress jars +# +COMPRESS_JARS=false + +# default for embedded is yes... +if test "x$JDK_VARIANT" = "xembedded"; then + COMPRESS_JARS=true +fi +AC_SUBST(COMPRESS_JARS) + +############################################################################### +# +# Should we compile JFR +# default no, except for on closed-jdk and !embedded +# +ENABLE_JFR=no + +# Is the JFR source present + +# +# For closed && !embedded default is yes if the source is present +# +if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then + ENABLE_JFR=yes +fi + +AC_MSG_CHECKING([whether to build jfr]) +AC_ARG_ENABLE([jfr], [AS_HELP_STRING([--enable-jfr], + [enable jfr (default is no)])] + [ENABLE_JFR="${enableval}"]) +AC_MSG_RESULT([${ENABLE_JFR}]) + +if test "x$ENABLE_JFR" = "xyes"; then + ENABLE_JFR=true +elif test "x$ENABLE_JFR" = "xno"; then + ENABLE_JFR=false +else + AC_MSG_ERROR([Invalid argument to --enable-jfr]) +fi + +AC_SUBST(ENABLE_JFR) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VERSION_NUMBERS], +[ +# Source the version numbers +. $AUTOCONF_DIR/version.numbers +if test "x$OPENJDK" = "xfalse"; then + . $AUTOCONF_DIR/closed.version.numbers +fi +# Now set the JDK version, milestone, build number etc. +AC_SUBST(JDK_MAJOR_VERSION) +AC_SUBST(JDK_MINOR_VERSION) +AC_SUBST(JDK_MICRO_VERSION) +AC_SUBST(JDK_UPDATE_VERSION) +AC_SUBST(JDK_BUILD_NUMBER) +AC_SUBST(MILESTONE) +AC_SUBST(LAUNCHER_NAME) +AC_SUBST(PRODUCT_NAME) +AC_SUBST(PRODUCT_SUFFIX) +AC_SUBST(JDK_RC_PLATFORM_NAME) +AC_SUBST(COMPANY_NAME) + +COPYRIGHT_YEAR=`date +'%Y'` +AC_SUBST(COPYRIGHT_YEAR) + +RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" +AC_SUBST(RUNTIME_NAME) + +if test "x$JDK_UPDATE_VERSION" != x; then + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" +else + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" +fi +AC_SUBST(JDK_VERSION) + +if test "x$MILESTONE" != x; then + RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" +else + RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" +fi +AC_SUBST(RELEASE) + +if test "x$JDK_BUILD_NUMBER" != x; then + FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" +else + JDK_BUILD_NUMBER=b00 + BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` + # Avoid [:alnum:] since it depends on the locale. + CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" +fi +AC_SUBST(FULL_VERSION) +COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` +AC_SUBST(COOKED_BUILD_NUMBER) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_BUILD_TWEAKS], +[ +HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" +AC_SUBST(HOTSPOT_MAKE_ARGS) + +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi +AC_SUBST(SALIB_NAME) + +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS], +[ +# +# ENABLE_DEBUG_SYMBOLS +# This must be done after the toolchain is setup, since we're looking at objcopy. +# +ENABLE_DEBUG_SYMBOLS=default + +# default on macosx is no... +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# default for embedded is no... +if test "x$JDK_VARIANT" = "xembedded"; then + ENABLE_DEBUG_SYMBOLS=no +fi + +AC_ARG_ENABLE([debug-symbols], + [AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols (@<:@enabled@:>@)])], + [ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols}], +) + +AC_MSG_CHECKING([if we should generate debug symbols]) + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xyes" && test "x$OBJCOPY" = x; then + # explicit enabling of enable-debug-symbols and can't find objcopy + # this is an error + AC_MSG_ERROR([Unable to find objcopy, cannot enable debug-symbols]) +fi + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then + # Default is on if objcopy is found, otherwise off + if test "x$OBJCOPY" != x; then + ENABLE_DEBUG_SYMBOLS=yes + else + ENABLE_DEBUG_SYMBOLS=no + fi +fi + +AC_MSG_RESULT([$ENABLE_DEBUG_SYMBOLS]) + +# +# ZIP_DEBUGINFO_FILES +# +ZIP_DEBUGINFO_FILES=yes + +AC_ARG_ENABLE([zip-debug-info], + [AS_HELP_STRING([--disable-zip-debug-info],[don't zip debug-info files (@<:@enabled@:@)])], + [ZIP_DEBUGINFO_FILES=${enable_zip_debug_info}], +) + +AC_MSG_CHECKING([if we should zip debug-info files]) +AC_MSG_RESULT([$ZIP_DEBUGINFO_FILES]) + +# Hotspot wants ZIP_DEBUGINFO_FILES to be 1 for yes +# use that... +if test "x$ZIP_DEBUGINFO_FILES" = "xyes"; then + ZIP_DEBUGINFO_FILES=1 +else + ZIP_DEBUGINFO_FILES=0 +fi + +AC_SUBST(ENABLE_DEBUG_SYMBOLS) +AC_SUBST(ZIP_DEBUGINFO_FILES) +AC_SUBST(CFLAGS_DEBUG_SYMBOLS) +AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) +]) diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4 new file mode 100644 index 00000000000..e6364a6dc9d --- /dev/null +++ b/common/autoconf/libraries.m4 @@ -0,0 +1,642 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([LIB_SETUP_INIT], +[ + +############################################################################### +# +# OS specific settings that we never will need to probe. +# +if test "x$OPENJDK_TARGET_OS" = xlinux; then + AC_MSG_CHECKING([what is not needed on Linux?]) + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([pulse]) +fi + +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + AC_MSG_CHECKING([what is not needed on Solaris?]) + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([alsa pulse]) +fi + +if test "x$OPENJDK_TARGET_OS" = xwindows; then + AC_MSG_CHECKING([what is not needed on Windows?]) + CUPS_NOT_NEEDED=yes + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + AC_MSG_RESULT([alsa cups pulse x11]) +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + AC_MSG_CHECKING([what is not needed on MacOSX?]) + 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]) +fi + +if test "x$OPENJDK_TARGET_OS" = xbsd; then + AC_MSG_CHECKING([what is not needed on bsd?]) + ALSA_NOT_NEEDED=yes + AC_MSG_RESULT([alsa]) +fi + +if test "x$OPENJDK" = "xfalse"; then + FREETYPE2_NOT_NEEDED=yes +fi + +############################################################################### +# +# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM +# that uses this API. +# +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]) +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 +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], +[ + +############################################################################### +# +# Check for X Windows +# + +# Check if the user has specified sysroot, but not --x-includes or --x-libraries. +# Make a simple check for the libraries at the sysroot, and setup --x-includes and +# --x-libraries for the sysroot, if that seems to be correct. +if test "x$SYS_ROOT" != "x/"; then + if test "x$x_includes" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/include/X11/Xlib.h"; then + x_includes="$SYS_ROOT/usr/X11R6/include" + fi + fi + if test "x$x_libraries" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/lib/libX11.so"; then + x_libraries="$SYS_ROOT/usr/X11R6/lib" + fi + fi +fi + +# Now let autoconf do it's magic +AC_PATH_X +AC_PATH_XTRA + +if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then + HELP_MSG_MISSING_DEPENDENCY([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" + fi + if 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 +AC_SUBST(OPENWIN_HOME) + + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${OPENJDK_TARGET_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + +AC_LANG_PUSH(C) +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $X_CFLAGS" +AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], + [X11_A_OK=yes], + [X11_A_OK=no]) +CFLAGS="$OLD_CFLAGS" +AC_LANG_POP(C) + +if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then + HELP_MSG_MISSING_DEPENDENCY([x11]) + AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) +fi + +AC_SUBST(X_CFLAGS) +AC_SUBST(X_LIBS) +]) + +AC_DEFUN_ONCE([LIB_SETUP_CUPS], +[ + +############################################################################### +# +# The common unix printing system cups is used to print from java. +# +AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], + [specify prefix directory for the cups package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) +AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], + [specify directory for the cups include files])]) +AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], + [specify directory for the cups library])]) + +if test "x$CUPS_NOT_NEEDED" = xyes; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + AC_MSG_WARN([cups not used, so --with-cups is ignored]) + fi + CUPS_CFLAGS= + CUPS_LIBS= +else + CUPS_FOUND=no + + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) + fi + + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" + CUPS_FOUND=yes + fi + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" + CUPS_FOUND=yes + fi + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" + CUPS_FOUND=yes + fi + if test "x$CUPS_FOUND" = xno; then + BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) + fi + if test "x$CUPS_FOUND" = xno; then + # Are the cups headers installed in the default /usr/include location? + AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], + [CUPS_FOUND=yes + CUPS_CFLAGS= + CUPS_LIBS="-lcups" + DEFAULT_CUPS=yes]) + fi + if test "x$CUPS_FOUND" = xno; then + # Getting nervous now? Lets poke around for standard Solaris third-party + # package installation locations. + AC_MSG_CHECKING([for cups headers and libs]) + if test -s /opt/sfw/cups/include/cups/cups.h; then + # An SFW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/sfw/cups/include" + CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" + elif test -s /opt/csw/include/cups/cups.h; then + # A CSW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/csw/include" + CUPS_LIBS="-L/opt/csw/lib -lcups" + fi + AC_MSG_RESULT([$CUPS_FOUND]) + fi + if test "x$CUPS_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([cups]) + AC_MSG_ERROR([Could not find cups! $HELP_MSG ]) + fi +fi + +AC_SUBST(CUPS_CFLAGS) +AC_SUBST(CUPS_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_FREETYPE], +[ + +############################################################################### +# +# The ubiquitous freetype2 library is used to render fonts. +# +AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype], + [specify prefix directory for the freetype2 package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) + +# 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 + +if test "x$FREETYPE2_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= +else + FREETYPE2_FOUND=no + + if test "x$with_freetype" != x; then + SPACESAFE(with_freetype,[the path to freetype]) + FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + if test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" + fi + FREETYPE2_LIB_PATH="$with_freetype/lib" + 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.se 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; then + PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + AC_MSG_CHECKING([for freetype in some standard locations]) + + if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" + DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" + fi + if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/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 + #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 +fi + +AC_SUBST(USING_SYSTEM_FT_LIB) +AC_SUBST(FREETYPE2_LIB_PATH) +AC_SUBST(FREETYPE2_CFLAGS) +AC_SUBST(FREETYPE2_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_ALSA], +[ + +############################################################################### +# +# Check for alsa headers and libraries. Used on Linux/GNU systems. +# +AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa], + [specify prefix directory for the alsa package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) +AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include], + [specify directory for the alsa include files])]) +AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib], + [specify directory for the alsa library])]) + +if test "x$ALSA_NOT_NEEDED" = xyes; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then + AC_MSG_WARN([alsa not used, so --with-alsa is ignored]) + fi + ALSA_CFLAGS= + ALSA_LIBS= +else + ALSA_FOUND=no + + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) + fi + + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" + ALSA_FOUND=yes + fi + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" + ALSA_FOUND=yes + fi + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" + ALSA_FOUND=yes + fi + if test "x$ALSA_FOUND" = xno; then + BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + AC_CHECK_HEADERS([alsa/asoundlib.h], + [ALSA_FOUND=yes + ALSA_CFLAGS=-Iignoreme + ALSA_LIBS=-lasound + DEFAULT_ALSA=yes], + [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([alsa]) + AC_MSG_ERROR([Could not find alsa! $HELP_MSG ]) + fi +fi + +AC_SUBST(ALSA_CFLAGS) +AC_SUBST(ALSA_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS], +[ + +############################################################################### +# +# Check for the jpeg library +# + +USE_EXTERNAL_LIBJPEG=true +AC_CHECK_LIB(jpeg, main, [], + [ USE_EXTERNAL_LIBJPEG=false + AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source]) + ]) +AC_SUBST(USE_EXTERNAL_LIBJPEG) + +############################################################################### +# +# Check for the gif library +# + +USE_EXTERNAL_LIBJPEG=true +AC_CHECK_LIB(gif, main, [], + [ USE_EXTERNAL_LIBGIF=false + AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source]) + ]) +AC_SUBST(USE_EXTERNAL_LIBGIF) + +############################################################################### +# +# Check for the zlib library +# + +AC_ARG_WITH(zlib, [AS_HELP_STRING([--with-zlib], + [use zlib from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])]) + +AC_CHECK_LIB(z, compress, + [ ZLIB_FOUND=yes ], + [ ZLIB_FOUND=no ]) + +AC_MSG_CHECKING([for which zlib to use]) + +DEFAULT_ZLIB=bundled +if test "x$OPENJDK_TARGET_OS" = xmacosx; then +# +# On macosx default is system...on others default is +# + DEFAULT_ZLIB=system +fi + +if test "x${ZLIB_FOUND}" != "xyes"; then +# +# If we don't find any system...set default to bundled +# + DEFAULT_ZLIB=bundled +fi + +# +# If user didn't specify, use DEFAULT_ZLIB +# +if test "x${with_zlib}" = "x"; then + with_zlib=${DEFAULT_ZLIB} +fi + +if test "x${with_zlib}" = "xbundled"; then + USE_EXTERNAL_LIBZ=false + AC_MSG_RESULT([bundled]) +elif test "x${with_zlib}" = "xsystem"; then + if test "x${ZLIB_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBZ=true + AC_MSG_RESULT([system]) + else + AC_MSG_RESULT([system not found]) + AC_MSG_ERROR([--with-zlib=system specified, but no zlib found!]) + fi +else + AC_MSG_ERROR([Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled']) +fi + +AC_SUBST(USE_EXTERNAL_LIBZ) + +############################################################################### +LIBZIP_CAN_USE_MMAP=true +if test "x$JDK_VARIANT" = "xembedded"; then + LIBZIP_CAN_USE_MMAP=false +fi +AC_SUBST(LIBZIP_CAN_USE_MMAP) + +############################################################################### +# +# Check if altzone exists in time.h +# + +AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [return (int)altzone;])], + [has_altzone=yes], + [has_altzone=no]) +if test "x$has_altzone" = xyes; then + AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h]) +fi + +############################################################################### +# +# Check the maths library +# + +AC_CHECK_LIB(m, cos, [], + [ + AC_MSG_NOTICE([Maths library was not found]) + ]) +AC_SUBST(LIBM) + +############################################################################### +# +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +AC_CHECK_LIB(dl,dlopen) +LIBDL="$LIBS" +AC_SUBST(LIBDL) +LIBS="$save_LIBS" + +]) + +AC_DEFUN_ONCE([LIB_SETUP_STATIC_LINK_LIBSTDCPP], +[ +############################################################################### +# +# statically link libstdc++ before C++ ABI is stablized on Linux unless +# dynamic build is configured on command line. +# +AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++], + [disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],, + [ + enable_static_link_stdc__=yes + ]) + +if test "x$OPENJDK_TARGET_OS" = xlinux; then + # Test if -lstdc++ works. + AC_MSG_CHECKING([if dynamic link of stdc++ is possible]) + AC_LANG_PUSH(C++) + OLD_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -lstdc++" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_dynamic_libstdcxx=yes], + [has_dynamic_libstdcxx=no]) + CXXFLAGS="$OLD_CXXFLAGS" + AC_LANG_POP(C++) + AC_MSG_RESULT([$has_dynamic_libstdcxx]) + + # Test if stdc++ can be linked statically. + AC_MSG_CHECKING([if static link of stdc++ is possible]) + STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" + AC_LANG_PUSH(C++) + OLD_LIBS="$LIBS" + OLD_CXX="$CXX" + LIBS="$STATIC_STDCXX_FLAGS" + CXX="$CC" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_static_libstdcxx=yes], + [has_static_libstdcxx=no]) + LIBS="$OLD_LIBS" + CXX="$OLD_CXX" + AC_LANG_POP(C++) + AC_MSG_RESULT([$has_static_libstdcxx]) + + if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then + AC_MSG_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) + fi + + if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then + AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.]) + enable_static_link_stdc__=no + fi + + if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then + AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.]) + enable_static_link_stdc__=yes + fi + + AC_MSG_CHECKING([how to link with libstdc++]) + if test "x$enable_static_link_stdc__" = xyes; then + LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" + LDCXX="$CC" + AC_MSG_RESULT([static]) + else + LIBCXX="$LIBCXX -lstdc++" + LDCXX="$CXX" + AC_MSG_RESULT([dynamic]) + fi +fi + +# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) +if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_OPENJDK_TARGET_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" +fi + +AC_SUBST(LIBCXX) + +]) diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4 index 364b371ab7e..5135c7c6a61 100644 --- a/common/autoconf/platform.m4 +++ b/common/autoconf/platform.m4 @@ -23,265 +23,59 @@ # questions. # -AC_DEFUN([CHECK_FIND_DELETE], -[ - # Test if find supports -delete - AC_MSG_CHECKING([if find supports -delete]) - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - rmdir $DELETEDIR -]) - -AC_DEFUN([CHECK_NONEMPTY], -[ - # Test that variable $1 is not empty. - if test "" = "[$]$1"; then AC_ERROR(Could not find translit($1,A-Z,a-z) !); fi -]) - -AC_DEFUN([ADD_JVM_ARG_IF_OK], -[ - # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) - # If so, then append $1 to $2 - FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - $2="[$]$2 $1" - fi -]) - -AC_DEFUN([WHICHCMD], -[ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="[$]$1" - car="${tmp%% *}" - tmp="[$]$1 EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - WHICHCMD_SPACESAFE(car) - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - $1="$car ${cdr% *}" - else - $1="$car" - fi -]) - -AC_DEFUN([SPACESAFE], -[ - # Fail with message $2 if var $1 contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "[$]$1" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - $1=`$CYGPATH -s -m -a "[$]$1"` - $1=`$CYGPATH -u "[$]$1"` - else - AC_ERROR([You cannot have spaces in $2! "[$]$1"]) - fi - fi -]) - -AC_DEFUN([WHICHCMD_SPACESAFE], -[ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="[$]$1" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "[$]$1"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - $1="$tmp" -]) - -AC_DEFUN([REMOVE_SYMBOLIC_LINKS], -[ - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - AC_PATH_PROG(READLINK, readlink) - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - $1=`$READLINK -f [$]$1` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname [$]$1` - FIL=`basename [$]$1` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - $1=$DIR/$FIL - fi - fi -]) - -AC_DEFUN([TESTFOR_PROG_CCACHE], -[ - AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--disable-ccache], - [use ccache to speed up recompilations @<:@enabled@:>@])], - [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) - if test "x$ENABLE_CCACHE" = xyes; then - AC_PATH_PROG(CCACHE, ccache) - else - AC_MSG_CHECKING([for ccache]) - AC_MSG_RESULT([explicitly disabled]) - CCACHE= - fi - AC_SUBST(CCACHE) - - AC_ARG_WITH([ccache-dir], - [AS_HELP_STRING([--with-ccache-dir], - [where to store ccache files @<:@~/.ccache@:>@])]) - - if test "x$with_ccache_dir" != x; then - # When using a non home ccache directory, assume the use is to share ccache files - # with other users. Thus change the umask. - SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" - fi - CCACHE_FOUND="" - if test "x$CCACHE" != x; then - SETUP_CCACHE_USAGE - fi -]) - -AC_DEFUN([SETUP_CCACHE_USAGE], -[ - if test "x$CCACHE" != x; then - CCACHE_FOUND="true" - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - AC_MSG_CHECKING([if ccache supports precompiled headers]) - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - AC_MSG_RESULT([no, disabling ccache]) - CCACHE= - else - AC_MSG_RESULT([yes]) - AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) - PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" - AC_TRY_COMPILE([], [], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) - CXXFLAGS="$PUSHED_FLAGS" - if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) - CCACHE= - fi - fi - fi - - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess - - if test "x$SET_CCACHE_DIR" != x; then - mkdir -p $CCACHE_DIR > /dev/null 2>&1 - chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 - fi - fi -]) - -AC_DEFUN([EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS], +AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS], [ # Expects $host_os $host_cpu $build_os and $build_cpu - # and $with_data_model to have been setup! + # and $with_target_bits to have been setup! # # Translate the standard triplet(quadruplet) definition - # of the host/build system into - # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows - # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince - # HOST_OS_API=posix,winapi + # of the target/build system into + # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows + # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince + # OPENJDK_TARGET_OS_API=posix,winapi # - # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 - # HOST_CPU_ARCH=x86,sparc,pcc,arm - # HOST_CPU_BITS=32,64 - # HOST_CPU_ENDIAN=big,little + # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 + # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm + # OPENJDK_TARGET_CPU_BITS=32,64 + # OPENJDK_TARGET_CPU_ENDIAN=big,little # # The same values are setup for BUILD_... # # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) - # LEGACY_HOST_OS_API=solaris,windows + # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris) + # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # # We also copy the autoconf trip/quadruplet - # verbatim to HOST and BUILD - AC_SUBST(HOST, ${host}) - AC_SUBST(BUILD, ${build}) + # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM + OPENJDK_TARGET_SYSTEM="$host" + OPENJDK_BUILD_SYSTEM="$build" + AC_SUBST(OPENJDK_TARGET_SYSTEM) + AC_SUBST(OPENJDK_BUILD_SYSTEM) - EXTRACT_VARS_FROM_OS_TO(HOST,$host_os) - EXTRACT_VARS_FROM_CPU_TO(HOST,$host_cpu) + PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_TARGET,$host_os) + PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_TARGET,$host_cpu) - EXTRACT_VARS_FROM_OS_TO(BUILD,$build_os) - EXTRACT_VARS_FROM_CPU_TO(BUILD,$build_cpu) + PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_BUILD,$build_os) + PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_BUILD,$build_cpu) - if test "x$HOST_OS" != xsolaris; then - LEGACY_HOST_CPU3="" - LEGACY_BUILD_CPU3="" - fi + if test "x$OPENJDK_TARGET_OS" != xsolaris; then + LEGACY_OPENJDK_TARGET_CPU3="" + LEGACY_OPENJDK_BUILD_CPU3="" + fi + + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ... + if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU1="x86_64" + fi + + PLATFORM_SET_RELEASE_FILE_OS_VALUES ]) -AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS_TO], [ - EXTRACT_VARS_FROM_OS($2) + PLATFORM_EXTRACT_VARS_FROM_OS($2) $1_OS="$VAR_OS" $1_OS_FAMILY="$VAR_OS_FAMILY" $1_OS_API="$VAR_OS_API" @@ -299,9 +93,9 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], AC_SUBST(LEGACY_$1_OS_API) ]) -AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU_TO], [ - EXTRACT_VARS_FROM_CPU($2) + PLATFORM_EXTRACT_VARS_FROM_CPU($2) $1_CPU="$VAR_CPU" $1_CPU_ARCH="$VAR_CPU_ARCH" $1_CPU_BITS="$VAR_CPU_BITS" @@ -332,12 +126,12 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO], LEGACY_$1_CPU3=amd64 fi if test "x$$1_CPU" = xsparcv9; then - LEGACY_$1_CPU3=sparvc9 + LEGACY_$1_CPU3=sparcv9 fi AC_SUBST(LEGACY_$1_CPU3) ]) -AC_DEFUN([EXTRACT_VARS_FROM_CPU], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU], [ # First argument is the cpu name from the trip/quad case "$1" in @@ -365,8 +159,8 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], arm*) VAR_CPU=arm VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little VAR_LEGACY_CPU=arm ;; mips) @@ -394,7 +188,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], VAR_CPU=ppc64 VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 + VAR_CPU_ENDIAN=big VAR_LEGACY_CPU=ppc64 ;; sparc) @@ -409,7 +203,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], VAR_CPU_ARCH=sparc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 + VAR_LEGACY_CPU=sparcv9 ;; s390) VAR_CPU=s390 @@ -427,7 +221,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], VAR_LEGACY_CPU=s390x ;; *) - AC_ERROR([unsupported cpu $1]) + AC_MSG_ERROR([unsupported cpu $1]) ;; esac @@ -445,21 +239,37 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], fi fi + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then + if test "x$with_target_bits" = "x64"; then VAR_CPU=x64 VAR_CPU_BITS=64 VAR_LEGACY_CPU=amd64 fi - if test "x$with_data_model" = "x32"; then + if test "x$with_target_bits" = "x32"; then VAR_CPU=ia32 VAR_CPU_BITS=32 VAR_LEGACY_CPU=i586 fi fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi ]) -AC_DEFUN([EXTRACT_VARS_FROM_OS], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], [ case "$1" in *linux*) @@ -488,30 +298,201 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS], VAR_OS_FAMILY=windows ;; *) - AC_MSG_ERROR([unsupported host operating system $1]) + AC_MSG_ERROR([unsupported operating system $1]) ;; esac ]) -AC_DEFUN([CHECK_COMPILER_VERSION], +AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES], [ - # Test the compilers that their versions are new enough. -# AC_MSG_CHECKING([version of GCC]) - gcc_ver=`${CC} -dumpversion` - gcc_major_ver=`echo ${gcc_ver}|cut -d'.' -f1` - gcc_minor_ver=`echo ${gcc_ver}|cut -d'.' -f2` -# AM_CONDITIONAL(GCC_OLD, test ! ${gcc_major_ver} -ge 4 -a ${gcc_minor_ver} -ge 3) -# AC_MSG_RESULT([${gcc_ver} (major version ${gcc_major_ver}, minor version ${gcc_minor_ver})]) -]) - -# Fixes paths on windows hosts to be mixed mode short. -AC_DEFUN([WIN_FIX_PATH], -[ - if test "x$BUILD_OS" = "xwindows"; then - AC_PATH_PROG(CYGPATH, cygpath) - tmp="[$]$1" - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - $1="$tmp" + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 fi + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + REQUIRED_OS_VERSION=5.1 + fi + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + AC_SUBST(REQUIRED_OS_NAME) + AC_SUBST(REQUIRED_OS_VERSION) +]) + +#%%% Build and target systems %%% +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET], +[ +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AC_ARG_WITH(target-bits, [AS_HELP_STRING([--with-target-bits], + [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 @<:@guessed@:>@])]) + +if test "x$with_target_bits" != x && \ + test "x$with_target_bits" != x32 && \ + test "x$with_target_bits" != x64 ; then + AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!]) +fi +# Translate the standard cpu-vendor-kernel-os quadruplets into +# the new TARGET_.... and BUILD_... and the legacy names used by +# the openjdk build. +# It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits +PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS + +# The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR. +if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then + LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}" +fi + +# Now the following vars are defined. +# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows +# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince +# OPENJDK_TARGET_OS_API=posix,winapi +# +# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 +# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm +# OPENJDK_TARGET_CPU_BITS=32,64 +# OPENJDK_TARGET_CPU_ENDIAN=big,little +# +# There is also a: +# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH +# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH +# LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris +# There was also a BUILDARCH that had i486,amd64,... but we do not use that +# in the new build. +# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION], +[ +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" +AC_SUBST(OS_VERSION_MAJOR) +AC_SUBST(OS_VERSION_MINOR) +AC_SUBST(OS_VERSION_MICRO) +]) + +AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS], +[ +############################################################################### +# +# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. +# (The JVM can use 32 or 64 bit Java pointers but that decision +# is made at runtime.) +# +AC_LANG_PUSH(C++) +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + CXXFLAGS="-m${with_target_bits} $CXXFLAGS" +fi +AC_CHECK_SIZEOF([int *], [1111]) +CXXFLAGS="$OLD_CXXFLAGS" +AC_LANG_POP(C++) + +# keep track of c/cxx flags that we added outselves... +# to prevent emitting warning... +ADDED_CFLAGS= +ADDED_CXXFLAGS= +ADDED_LDFLAGS= + +if test "x$ac_cv_sizeof_int_p" = x0; then + # The test failed, lets pick the assumed value. + ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS +else + ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + ADDED_CFLAGS=" -m${with_target_bits}" + ADDED_CXXFLAGS=" -m${with_target_bits}" + ADDED_LDFLAGS=" -m${with_target_bits}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + fi +fi + +if test "x$ARCH_DATA_MODEL" = x64; then + A_LP64="LP64:=" + ADD_LP64="-D_LP64=1" +fi +AC_MSG_CHECKING([for target address size]) +AC_MSG_RESULT([$ARCH_DATA_MODEL bits]) +AC_SUBST(LP64,$A_LP64) +AC_SUBST(ARCH_DATA_MODEL) + +if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then + AC_MSG_ERROR([The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) +fi + +# +# NOTE: check for -mstackrealign needs to be below potential addition of -m32 +# +if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. + # While waiting for a better solution, the current workaround is to use -mstackrealign. + CFLAGS="$CFLAGS -mstackrealign" + AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) + ]) +fi +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS], +[ +############################################################################### +# +# Is the target little of big endian? +# +AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal_endianness"]) + +if test "x$ENDIAN" = xuniversal_endianness; then + AC_MSG_ERROR([Building with both big and little endianness is not supported]) +fi +if test "x$ENDIAN" = xunknown; then + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then + AC_MSG_WARN([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)]) + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +AC_SUBST(ENDIAN) +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ISADIR], +[ +############################################################################### +# +# Could someone enlighten this configure script with a comment about libCrun? +# +# ]) diff --git a/common/autoconf/source-dirs.m4 b/common/autoconf/source-dirs.m4 new file mode 100644 index 00000000000..2eeb3831176 --- /dev/null +++ b/common/autoconf/source-dirs.m4 @@ -0,0 +1,280 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([SRCDIRS_SETUP_TOPDIRS], +[ + +# Where are the sources. Any of these can be overridden +# using --with-override-corba and the likes. +LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" +CORBA_TOPDIR="$SRC_ROOT/corba" +JAXP_TOPDIR="$SRC_ROOT/jaxp" +JAXWS_TOPDIR="$SRC_ROOT/jaxws" +HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" +JDK_TOPDIR="$SRC_ROOT/jdk" +AC_SUBST(LANGTOOLS_TOPDIR) +AC_SUBST(CORBA_TOPDIR) +AC_SUBST(JAXP_TOPDIR) +AC_SUBST(JAXWS_TOPDIR) +AC_SUBST(HOTSPOT_TOPDIR) +AC_SUBST(JDK_TOPDIR) +]) + + +AC_DEFUN_ONCE([SRCDIRS_SETUP_ALTERNATIVE_TOPDIRS], +[ + +############################################################################### +# +# Pickup additional source for a component from outside of the source root +# or override source for a component. +# +AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root], + [for each and every source directory, look in this additional source root for + the same directory; if it exists and have files in it, include it in the build])]) + +AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root], + [for each and every source directory, look in this override source root for + the same directory; if it exists, use that directory instead and + ignore the directory in the original source root])]) + +AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides], + [use the subdirs 'adds' and 'overrides' in the specified directory as + add-source-root and override-source-root])]) + +if test "x$with_adds_and_overrides" != x; then + with_add_source_root="$with_adds_and_overrides/adds" + with_override_source_root="$with_adds_and_overrides/overrides" +fi + +if test "x$with_add_source_root" != x; then + if ! test -d $with_add_source_root; then + AC_MSG_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) + fi + CURDIR="$PWD" + cd "$with_add_source_root" + ADD_SRC_ROOT="`pwd`" + cd "$CURDIR" + # Verify that the addon source root does not have any root makefiles. + # If it does, then it is usually an error, prevent this. + if test -f $with_add_source_root/langtools/makefiles/Makefile || \ + test -f $with_add_source_root/langtools/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/corba/makefiles/Makefile || \ + test -f $with_add_source_root/corba/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ + test -f $with_add_source_root/jaxp/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ + test -f $with_add_source_root/jaxws/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ + test -f $with_add_source_root/hotspot/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jdk/makefiles/Makefile || \ + test -f $with_add_source_root/jdk/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) + fi +fi +AC_SUBST(ADD_SRC_ROOT) + +if test "x$with_override_source_root" != x; then + if ! test -d $with_override_source_root; then + AC_MSG_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) + fi + CURDIR="$PWD" + cd "$with_override_source_root" + OVERRIDE_SRC_ROOT="`pwd`" + cd "$CURDIR" + if test -f $with_override_source_root/langtools/makefiles/Makefile || \ + test -f $with_override_source_root/langtools/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/corba/makefiles/Makefile || \ + test -f $with_override_source_root/corba/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ + test -f $with_override_source_root/jaxp/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ + test -f $with_override_source_root/jaxws/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ + test -f $with_override_source_root/hotspot/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jdk/makefiles/Makefile || \ + test -f $with_override_source_root/jdk/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) + fi +fi +AC_SUBST(OVERRIDE_SRC_ROOT) + +############################################################################### +# +# Override a repo completely, this is used for example when you have 3 small +# development sandboxes of the langtools sources and want to avoid having 3 full +# OpenJDK sources checked out on disk. +# +# Assuming that the 3 langtools sandboxes are located here: +# /home/fredrik/sandbox1/langtools +# /home/fredrik/sandbox2/langtools +# /home/fredrik/sandbox3/langtools +# +# From the source root you create build subdirs manually: +# mkdir -p build1 build2 build3 +# in each build directory run: +# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) +# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) +# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) +# + +AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools], + [use this langtools dir for the build])]) + +AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba], + [use this corba dir for the build])]) + +AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp], + [use this jaxp dir for the build])]) + +AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws], + [use this jaxws dir for the build])]) + +AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot], + [use this hotspot dir for the build])]) + +AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk], + [use this jdk dir for the build])]) + +if test "x$with_override_langtools" != x; then + CURDIR="$PWD" + cd "$with_override_langtools" + LANGTOOLS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override langtools with a full langtools repo!]) + fi + AC_MSG_CHECKING([if langtools should be overridden]) + AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR]) +fi +if test "x$with_override_corba" != x; then + CURDIR="$PWD" + cd "$with_override_corba" + CORBA_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override corba with a full corba repo!]) + fi + AC_MSG_CHECKING([if corba should be overridden]) + AC_MSG_RESULT([yes with $CORBA_TOPDIR]) +fi +if test "x$with_override_jaxp" != x; then + CURDIR="$PWD" + cd "$with_override_jaxp" + JAXP_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override jaxp with a full jaxp repo!]) + fi + AC_MSG_CHECKING([if jaxp should be overridden]) + AC_MSG_RESULT([yes with $JAXP_TOPDIR]) +fi +if test "x$with_override_jaxws" != x; then + CURDIR="$PWD" + cd "$with_override_jaxws" + JAXWS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override jaxws with a full jaxws repo!]) + fi + AC_MSG_CHECKING([if jaxws should be overridden]) + AC_MSG_RESULT([yes with $JAXWS_TOPDIR]) +fi +if test "x$with_override_hotspot" != x; then + CURDIR="$PWD" + cd "$with_override_hotspot" + HOTSPOT_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ + ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override hotspot with a full hotspot repo!]) + fi + AC_MSG_CHECKING([if hotspot should be overridden]) + AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR]) +fi +if test "x$with_override_jdk" != x; then + CURDIR="$PWD" + cd "$with_override_jdk" + JDK_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JDK_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override JDK with a full JDK repo!]) + fi + AC_MSG_CHECKING([if JDK should be overridden]) + AC_MSG_RESULT([yes with $JDK_TOPDIR]) +fi + +]) + +AC_DEFUN_ONCE([SRCDIRS_SETUP_OUTPUT_DIRS], +[ +LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" +CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" +JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" +JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" +HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" +JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" +IMAGES_OUTPUTDIR="$OUTPUT_ROOT/images" + +AC_SUBST(LANGTOOLS_OUTPUTDIR) +AC_SUBST(CORBA_OUTPUTDIR) +AC_SUBST(JAXP_OUTPUTDIR) +AC_SUBST(JAXWS_OUTPUTDIR) +AC_SUBST(HOTSPOT_OUTPUTDIR) +AC_SUBST(JDK_OUTPUTDIR) +AC_SUBST(IMAGES_OUTPUTDIR) + +LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" +CORBA_DIST="$OUTPUT_ROOT/corba/dist" +JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" +JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" +HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" + +AC_SUBST(LANGTOOLS_DIST) +AC_SUBST(CORBA_DIST) +AC_SUBST(JAXP_DIST) +AC_SUBST(JAXWS_DIST) +AC_SUBST(HOTSPOT_DIST) +]) diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 4d5b841ea8a..5c2e43c2fed 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -23,8 +23,8 @@ # questions. # -# Configured @DATE_WHEN_CONFIGURED@ to build for a @HOST@ system, -# using ./configure @CONFIGURE_COMMAND_LINE@ +# Configured @DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system, +# using 'configure @CONFIGURE_COMMAND_LINE@' # When calling macros, the spaces between arguments are # often semantically important! Sometimes we need to subst @@ -64,47 +64,57 @@ endif # A self-referential reference to this file. SPEC:=@SPEC@ -# The built jdk will run in this host system. -HOST:=@HOST@ -HOST_OS:=@HOST_OS@ -HOST_OS_FAMILY:=@HOST_OS_FAMILY@ -HOST_OS_API:=@HOST_OS_API@ +# The "human readable" name of this configuration +CONF_NAME:=@CONF_NAME@ -HOST_CPU:=@HOST_CPU@ -HOST_CPU_ARCH:=@HOST_CPU_ARCH@ -HOST_CPU_BITS:=@HOST_CPU_BITS@ -HOST_CPU_ENDIAN:=@HOST_CPU_ENDIAN@ +# The built jdk will run in this target system. +OPENJDK_TARGET_SYSTEM:=@OPENJDK_TARGET_SYSTEM@ + +OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@ +OPENJDK_TARGET_OS_FAMILY:=@OPENJDK_TARGET_OS_FAMILY@ +OPENJDK_TARGET_OS_API:=@OPENJDK_TARGET_OS_API@ + +OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@ +OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@ +OPENJDK_TARGET_CPU_BITS:=@OPENJDK_TARGET_CPU_BITS@ +OPENJDK_TARGET_CPU_ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@ # We are building on this build system. -# When not cross-compiling, it is the same as the host. -BUILD:=@BUILD@ -BUILD_OS:=@BUILD_OS@ -BUILD_OS_FAMILY:=@BUILD_OS_FAMILY@ -BUILD_OS_API:=@BUILD_OS_API@ +# When not cross-compiling, it is the same as the target. +OPENJDK_BUILD_SYSTEM:=@OPENJDK_BUILD_SYSTEM@ -BUILD_CPU:=@BUILD_CPU@ -BUILD_CPU_ARCH:=@BUILD_CPU_ARCH@ -BUILD_CPU_BITS:=@BUILD_CPU_BITS@ -BUILD_CPU_ENDIAN:=@BUILD_CPU_ENDIAN@ +OPENJDK_BUILD_OS:=@OPENJDK_BUILD_OS@ +OPENJDK_BUILD_OS_FAMILY:=@OPENJDK_BUILD_OS_FAMILY@ +OPENJDK_BUILD_OS_API:=@OPENJDK_BUILD_OS_API@ -# Old name for HOST_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) -PLATFORM:=@HOST_OS@ -# Old name for HOST_CPU, uses i586 and amd64, instead of ia32 and x64. -ARCH:=@LEGACY_HOST_CPU1@ +OPENJDK_BUILD_CPU:=@OPENJDK_BUILD_CPU@ +OPENJDK_BUILD_CPU_ARCH:=@OPENJDK_BUILD_CPU_ARCH@ +OPENJDK_BUILD_CPU_BITS:=@OPENJDK_BUILD_CPU_BITS@ +OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@ + +# Legacy OS values for use in release file. +REQUIRED_OS_NAME:=@REQUIRED_OS_NAME@ +REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@ + +# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) +PLATFORM:=@OPENJDK_TARGET_OS@ +# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64. +ARCH:=@LEGACY_OPENJDK_TARGET_CPU1@ # Yet another name for arch used for an extra subdir below the jvm lib. # Uses i386 and amd64, instead of ia32 and x64. -LIBARCH:=@LEGACY_HOST_CPU2@ +LIBARCH:=@LEGACY_OPENJDK_TARGET_CPU2@ # Use to switch between solaris and windows subdirs in the jdk. -LEGACY_HOST_OS_API:=@LEGACY_HOST_OS_API@ +LEGACY_OPENJDK_TARGET_OS_API:=@LEGACY_OPENJDK_TARGET_OS_API@ # 32 or 64 bit -ARCH_DATA_MODEL:=@HOST_CPU_BITS@ +ARCH_DATA_MODEL:=@OPENJDK_TARGET_CPU_BITS@ # Legacy setting for building for a 64 bit machine. # If yes then this expands to _LP64:=1 @LP64@ -ENDIAN:=@HOST_CPU_ENDIAN@ +ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@ @SET_OPENJDK@ JIGSAW:=@JIGSAW@ LIBM:=-lm +LIBDL:=@LIBDL@ # colon or semicolon PATH_SEP:=@PATH_SEP@ @@ -177,7 +187,6 @@ SUPPORT_HEADLESS:=@SUPPORT_HEADLESS@ # The java launcher uses the default. # The other can be selected by specifying -client -server -kernel -zero or -zeroshark # on the java launcher command line. -DEFAULT_JVM_VARIANT:=@DEFAULT_JVM_VARIANT@ JVM_VARIANTS:=@JVM_VARIANTS@ JVM_VARIANT_SERVER:=@JVM_VARIANT_SERVER@ JVM_VARIANT_CLIENT:=@JVM_VARIANT_CLIENT@ @@ -194,53 +203,42 @@ DEBUG_CLASSFILES:=@DEBUG_CLASSFILES@ # Legacy setting: -debug or -fastdebug BUILD_VARIANT_RELEASE:=@BUILD_VARIANT_RELEASE@ -LANGTOOLS_OUTPUTDIR:=@OUTPUT_ROOT@/langtools -LANGTOOLS_DIST:=@OUTPUT_ROOT@/langtools/dist -LANGTOOLS_MAKE_ARGS:=@LANGTOOLS_MAKE_ARGS@ - -CORBA_OUTPUTDIR:=@OUTPUT_ROOT@/corba -CORBA_DIST:=@OUTPUT_ROOT@/corba/dist -CORBA_MAKE_ARGS:=@CORBA_MAKE_ARGS@ - -JAXP_OUTPUTDIR:=@OUTPUT_ROOT@/jaxp -JAXP_DIST:=@OUTPUT_ROOT@/jaxp/dist -JAXP_MAKE_ARGS:=@JAXP_MAKE_ARGS@ - -JAXWS_OUTPUTDIR:=@OUTPUT_ROOT@/jaxws -JAXWS_DIST:=@OUTPUT_ROOT@/jaxws/dist -JAXWS_MAKE_ARGS:=@JAXWS_MAKE_ARGS@ - -HOTSPOT_OUTPUTDIR:=@OUTPUT_ROOT@/hotspot -HOTSPOT_DIST:=@OUTPUT_ROOT@/hotspot/dist -HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +LANGTOOLS_OUTPUTDIR:=@LANGTOOLS_OUTPUTDIR@ +CORBA_OUTPUTDIR:=@CORBA_OUTPUTDIR@ +JAXP_OUTPUTDIR:=@JAXP_OUTPUTDIR@ +JAXWS_OUTPUTDIR:=@JAXWS_OUTPUTDIR@ +HOTSPOT_OUTPUTDIR:=@HOTSPOT_OUTPUTDIR@ # This where a working jvm is built. # You can run $(JDK_OUTPUTDIR)/bin/java # Though the layout of the contents of $(JDK_OUTPUTDIR) is not # yet the same as a default installation. -HOTSPOT_IMPORT_PATH:=@OUTPUT_ROOT@/hotspot/dist JDK_OUTPUTDIR:=@OUTPUT_ROOT@/jdk -JDK_MAKE_ARGS:=@JDK_MAKE_ARGS@ # When you run "make install" it will create the standardized # layout for the jdk and the jre inside the images subdir. # Then it will copy the contents of the jdk into the installation # directory. IMAGES_OUTPUTDIR:=@OUTPUT_ROOT@/images -IMAGES_MAKE_ARGS:=@IMAGES_MAKE_ARGS@ + +LANGTOOLS_DIST:=@LANGTOOLS_DIST@ +CORBA_DIST:=@CORBA_DIST@ +JAXP_DIST:=@JAXP_DIST@ +JAXWS_DIST:=@JAXWS_DIST@ +HOTSPOT_DIST:=@HOTSPOT_DIST@ + # Legacy variables used by Release.gmk JDK_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2sdk-image JRE_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2re-image # Can be /sparcv9 or /amd64 on Solaris -ISA_DIR:=@LEGACY_HOST_CPU3@ +ISA_DIR:=@LEGACY_OPENJDK_TARGET_CPU3@ BINDIR:=$(JDK_OUTPUTDIR)/bin$(ISA_DIR) # The boot jdk to use ALT_BOOTDIR:=@BOOT_JDK@ BOOT_JDK:=@BOOT_JDK@ BOOT_JDK_JVMARGS:=@BOOT_JDK_JVMARGS@ -BOOT_JAVAC_ARGS:=@BOOT_JAVAC_ARGS@ BOOT_RTJAR:=@BOOT_RTJAR@ BOOT_TOOLSJAR:=@BOOT_TOOLSJAR@ @@ -250,8 +248,6 @@ BOOT_JDK_SOURCETARGET:=@BOOT_JDK_SOURCETARGET@ # Information about the build system NUM_CORES:=@NUM_CORES@ -# This is used from the libjvm build for C/C++ code. -HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ # This is used from the jdk build for C/C++ code. PARALLEL_COMPILE_JOBS:=@CONCURRENT_BUILD_JOBS@ # Store javac server synchronization files here, and @@ -274,6 +270,8 @@ JAVAC_SERVER_CORES:=@JAVAC_SERVER_CORES@ JAVAC_USE_DEPS:=@JAVAC_USE_DEPS@ # We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT JAVAC_USE_MODE:=@JAVAC_USE_MODE@ +# Enable not yet complete sjavac support. +ENABLE_SJAVAC:=@ENABLE_SJAVAC@ # The OpenJDK makefiles should be changed to using the standard # configure output ..._CFLAGS and ..._LIBS. In the meantime we @@ -287,8 +285,8 @@ CUPS_CFLAGS:=@CUPS_CFLAGS@ PACKAGE_PATH=@PACKAGE_PATH@ -CACERTS_FILE:=$(SRC_ROOT)/jdk/src/share/lib/security/cacerts -#CACERTS_INT=$(CLOSED_SHARE_SRC)/lib/security/cacerts.internal +# Source file for cacerts +CACERTS_FILE=@CACERTS_FILE@ #MOZILLA_HEADERS_PATH:= @@ -308,13 +306,18 @@ LD_OUT_OPTION:=@LD_OUT_OPTION@ AR_OUT_OPTION:=@AR_OUT_OPTION@ # Flags used for overriding the default opt setting for a C/C++ source file. +C_O_FLAG_HIGHEST:=@C_O_FLAG_HIGHEST@ C_O_FLAG_HI:=@C_O_FLAG_HI@ C_O_FLAG_NORM:=@C_O_FLAG_NORM@ C_O_FLAG_NONE:=@C_O_FLAG_NONE@ +CXX_O_FLAG_HIGHEST:=@CXX_O_FLAG_HIGHEST@ CXX_O_FLAG_HI:=@CXX_O_FLAG_HI@ CXX_O_FLAG_NORM:=@CXX_O_FLAG_NORM@ CXX_O_FLAG_NONE:=@CXX_O_FLAG_NONE@ +C_FLAG_DEPS:=@C_FLAG_DEPS@ +CXX_FLAG_DEPS:=@CXX_FLAG_DEPS@ + # Tools that potentially need to be cross compilation aware. CC:=@UNCYGDRIVE@ @CCACHE@ @CC@ @@ -362,22 +365,24 @@ LDEXECXX:=@UNCYGDRIVE@ @LDEXECXX@ @DEFINE_CROSS_COMPILE_ARCH@ # The HOSTCC should really be named BUILDCC, ie build executable for # the build platform. Same as CC when not cross compiling. -HOSTCC:=@HOSTCC@ -HOSTCXX:=@HOSTCXX@ +HOSTCC:=@UNCYGDRIVE@ @HOSTCC@ +HOSTCXX:=@UNCYGDRIVE@ @HOSTCXX@ # And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC -HOST_CC:=@HOSTCC@ -NIO_CC:=@HOSTCC@ +HOST_CC:=@UNCYGDRIVE@ @HOSTCC@ +NIO_CC:=@UNCYGDRIVE@ @HOSTCC@ -AS:=@AS@ +HOST_LD:=@UNCYGDRIVE@ @HOSTLD@ + +AS:=@UNCYGDRIVE@ @AS@ ASFLAGS:=@ASFLAGS@ # AR is used to create a static library (is ar in posix, lib.exe in winapi) AR:=@UNCYGDRIVE@ @AR@ ARFLAGS:=@ARFLAGS@ -NM:=@NM@ -STRIP:=@STRIP@ -MCS:=@MCS@ +NM:=@UNCYGDRIVE@ @NM@ +STRIP:=@UNCYGDRIVE@ @STRIP@ +MCS:=@UNCYGDRIVE@ @MCS@ # Command to create a shared library SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@ @@ -386,6 +391,22 @@ SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@ # (Note absence of := assignment, because we do not want to evaluate the macro body here) SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@ +# Options for C/CXX compiler to be used if linking is performed +# using reorder file +C_FLAG_REORDER:=@C_FLAG_REORDER@ +CXX_FLAG_REORDER:=@CXX_FLAG_REORDER@ + +# +# Options for generating debug symbols +ENABLE_DEBUG_SYMBOLS:=@ENABLE_DEBUG_SYMBOLS@ +CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@ +CXXFLAGS_DEBUG_SYMBOLS:=@CXXFLAGS_DEBUG_SYMBOLS@ +ZIP_DEBUGINFO_FILES:=@ZIP_DEBUGINFO_FILES@ + +# +# Compress (or not) jars +COMPRESS_JARS=@COMPRESS_JARS@ + # Options to linker to specify the library name. # (Note absence of := assignment, because we do not want to evaluate the macro body here) SET_SHARED_LIBRARY_NAME=@SET_SHARED_LIBRARY_NAME@ @@ -406,6 +427,9 @@ STATIC_LIBRARY_SUFFIX:=@STATIC_LIBRARY_SUFFIX@ EXE_SUFFIX:=@EXE_SUFFIX@ OBJ_SUFFIX:=@OBJ_SUFFIX@ +POST_STRIP_CMD:=@POST_STRIP_CMD@ +POST_MCS_CMD:=@POST_MCS_CMD@ + JAVA_FLAGS:=@BOOT_JDK_JVMARGS@ JAVA=@UNCYGDRIVE@ @JAVA@ $(JAVA_FLAGS) @@ -419,6 +443,8 @@ JAR:=@UNCYGDRIVE@ @JAR@ RMIC:=@UNCYGDRIVE@ @RMIC@ +NATIVE2ASCII:=@UNCYGDRIVE@ @NATIVE2ASCII@ + BOOT_JAR_CMD:=@UNCYGDRIVE@ @JAR@ BOOT_JAR_JFLAGS:= @@ -483,23 +509,29 @@ OTOOL:=@OTOOL@ READELF:=@READELF@ EXPR:=@EXPR@ FILE:=@FILE@ +HG:=@HG@ +OBJCOPY:=@OBJCOPY@ UNCYGDRIVE:=@UNCYGDRIVE@ # Where the build output is stored for your convenience. BUILD_LOG:=@BUILD_LOG@ +BUILD_LOG_PREVIOUS:=@BUILD_LOG_PREVIOUS@ BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@ # Build setup ENABLE_DOCS:=@ENABLE_DOCS@ GENERATE_DOCS:=@ENABLE_DOCS@ DISABLE_NIMBUS:=@DISABLE_NIMBUS@ +ENABLE_JFR=@ENABLE_JFR@ USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@ USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@ USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@ +LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@ CHECK_FOR_VCINSTALLDIR=@CHECK_FOR_VCINSTALLDIR@ MSVCRNN_DLL:=@MSVCR100DLL@ + # ADD_SRCS takes a single argument with source roots # and appends any corresponding source roots found # below --with-add-source-root and below @@ -527,6 +559,17 @@ else OVR_SRCS:= endif +#################################################### +# +# Legacy Hotspot support + +HOTSPOT_DIST:=@HOTSPOT_DIST@ +HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +# This is used from the libjvm build for C/C++ code. +HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ +# Control wether Hotspot runs Queens test after building +TEST_IN_BUILD=@TEST_IN_BUILD@ + #################################################### # # INSTALLATION @@ -584,5 +627,12 @@ INSTALL_SYSCONFDIR=@sysconfdir@ # Misc # -# Control wether Hotspot runs Queens test after building -TEST_IN_BUILD=@TEST_IN_BUILD@ +# Name of Service Agent library +SALIB_NAME=@SALIB_NAME@ + +OS_VERSION_MAJOR:=@OS_VERSION_MAJOR@ +OS_VERSION_MINOR:=@OS_VERSION_MINOR@ +OS_VERSION_MICRO:=@OS_VERSION_MICRO@ + +# Include the closed-spec.gmk file if it exists +-include $(dir @SPEC@)/closed-spec.gmk diff --git a/common/autoconf/spec.sh.in b/common/autoconf/spec.sh.in new file mode 100644 index 00000000000..a1d1c07ef1b --- /dev/null +++ b/common/autoconf/spec.sh.in @@ -0,0 +1,527 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Configured"@DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system, +# using 'configure @CONFIGURE_COMMAND_LINE@' + +# The "human readable" name of this configuration +CONF_NAME="@CONF_NAME@" + +# The built jdk will run in this target system. +OPENJDK_TARGET_SYSTEM="@OPENJDK_TARGET_SYSTEM@" + +OPENJDK_TARGET_OS="@OPENJDK_TARGET_OS@" +OPENJDK_TARGET_OS_FAMILY="@OPENJDK_TARGET_OS_FAMILY@" +OPENJDK_TARGET_OS_API="@OPENJDK_TARGET_OS_API@" + +OPENJDK_TARGET_CPU="@OPENJDK_TARGET_CPU@" +OPENJDK_TARGET_CPU_ARCH="@OPENJDK_TARGET_CPU_ARCH@" +OPENJDK_TARGET_CPU_BITS="@OPENJDK_TARGET_CPU_BITS@" +OPENJDK_TARGET_CPU_ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@" + +# We are building on this build system. +# When not cross-compiling, it is the same as the target. +OPENJDK_BUILD_SYSTEM="@OPENJDK_BUILD_SYSTEM@" + +OPENJDK_BUILD_OS="@OPENJDK_BUILD_OS@" +OPENJDK_BUILD_OS_FAMILY="@OPENJDK_BUILD_OS_FAMILY@" +OPENJDK_BUILD_OS_API="@OPENJDK_BUILD_OS_API@" + +OPENJDK_BUILD_CPU="@OPENJDK_BUILD_CPU@" +OPENJDK_BUILD_CPU_ARCH="@OPENJDK_BUILD_CPU_ARCH@" +OPENJDK_BUILD_CPU_BITS="@OPENJDK_BUILD_CPU_BITS@" +OPENJDK_BUILD_CPU_ENDIAN="@OPENJDK_BUILD_CPU_ENDIAN@" + +# Legacy OS values for use in release file. +REQUIRED_OS_NAME="@REQUIRED_OS_NAME@" +REQUIRED_OS_VERSION="@REQUIRED_OS_VERSION@" + +# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) +PLATFORM="@OPENJDK_TARGET_OS@" +# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64. +ARCH="@LEGACY_OPENJDK_TARGET_CPU1@" +# Yet another name for arch used for an extra subdir below the jvm lib. +# Uses i386 and amd64, instead of ia32 and x64. +LIBARCH="@LEGACY_OPENJDK_TARGET_CPU2@" +# Use to switch between solaris and windows subdirs in the jdk. +LEGACY_OPENJDK_TARGET_OS_API="@LEGACY_OPENJDK_TARGET_OS_API@" +# 32 or 64 bit +ARCH_DATA_MODEL="@OPENJDK_TARGET_CPU_BITS@" +# Legacy setting for building for a 64 bit machine. +# If yes then this expands to _LP64=1 +ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@" +JIGSAW="@JIGSAW@" +LIBM=-lm +LIBDL="@LIBDL@" + +# colon or semicolon +PATH_SEP="@PATH_SEP@" + +# The sys root where standard headers and libraries are found. +# Usually not needed since the configure script should have +# taken it into account already when setting CFLAGS et al. +SYS_ROOT="@SYS_ROOT@" + +# Paths to the source code +SRC_ROOT="@SRC_ROOT@" +ADD_SRC_ROOT="@ADD_SRC_ROOT@" +OVERRIDE_SRC_ROOT="@OVERRIDE_SRC_ROOT@" +TOPDIR="@SRC_ROOT@" +OUTPUT_ROOT="@OUTPUT_ROOT@" +JDK_MAKE_SHARED_DIR="@JDK_TOPDIR@"/makefiles/common/shared +JDK_TOPDIR="@JDK_TOPDIR@" +LANGTOOLS_TOPDIR="@LANGTOOLS_TOPDIR@" +CORBA_TOPDIR="@CORBA_TOPDIR@" +JAXP_TOPDIR="@JAXP_TOPDIR@" +JAXWS_TOPDIR="@JAXWS_TOPDIR@" +HOTSPOT_TOPDIR="@HOTSPOT_TOPDIR@" +COPYRIGHT_YEAR="@COPYRIGHT_YEAR@" + +# Information gathered from the version.numbers file. +JDK_MAJOR_VERSION="@JDK_MAJOR_VERSION@" +JDK_MINOR_VERSION="@JDK_MINOR_VERSION@" +JDK_MICRO_VERSION="@JDK_MICRO_VERSION@" +JDK_UPDATE_VERSION="@JDK_UPDATE_VERSION@" +JDK_BUILD_NUMBER="@JDK_BUILD_NUMBER@" +MILESTONE="@MILESTONE@" +LAUNCHER_NAME="@LAUNCHER_NAME@" +PRODUCT_NAME="@PRODUCT_NAME@" +PRODUCT_SUFFIX="@PRODUCT_SUFFIX@" +JDK_RC_PLATFORM_NAME="@JDK_RC_PLATFORM_NAME@" +COMPANY_NAME="@COMPANY_NAME@" + +# Different version strings generated from the above information. +JDK_VERSION="@JDK_VERSION@" +RUNTIME_NAME="@RUNTIME_NAME@" +FULL_VERSION="@FULL_VERSION@" +JRE_RELEASE_VERSION="@FULL_VERSION@" +RELEASE="@RELEASE@" +COOKED_BUILD_NUMBER="@COOKED_BUILD_NUMBER@" + +# How to compile the code: release, fastdebug or slowdebug +DEBUG_LEVEL="@DEBUG_LEVEL@" + +# This is the JDK variant to build. +# The JDK variant is a name for a specific set of modules to be compiled for the JDK. +JDK_VARIANT="@JDK_VARIANT@" + +# Should we compile support for running with a graphical UI? (ie headful) +# Should we compile support for running without? (ie headless) +SUPPORT_HEADFUL="@SUPPORT_HEADFUL@" +SUPPORT_HEADLESS="@SUPPORT_HEADLESS@" + +# These are the libjvms that we want to build. +# The java launcher uses the default. +# The other can be selected by specifying -client -server -kernel -zero or -zeroshark +# on the java launcher command line. +JVM_VARIANTS="@JVM_VARIANTS@" +JVM_VARIANT_SERVER="@JVM_VARIANT_SERVER@" +JVM_VARIANT_CLIENT="@JVM_VARIANT_CLIENT@" +JVM_VARIANT_KERNEL="@JVM_VARIANT_KERNEL@" +JVM_VARIANT_ZERO="@JVM_VARIANT_ZERO@" +JVM_VARIANT_ZEROSHARK="@JVM_VARIANT_ZEROSHARK@" + +# Legacy setting: OPT or DBG +VARIANT="@VARIANT@" +# Legacy setting: true or false +FASTDEBUG="@FASTDEBUG@" +# Legacy setting: debugging the class files? +DEBUG_CLASSFILES="@DEBUG_CLASSFILES@" +# Legacy setting: -debug or -fastdebug +BUILD_VARIANT_RELEASE="@BUILD_VARIANT_RELEASE@" + +LANGTOOLS_OUTPUTDIR="@LANGTOOLS_OUTPUTDIR@" +CORBA_OUTPUTDIR="@CORBA_OUTPUTDIR@" +JAXP_OUTPUTDIR="@JAXP_OUTPUTDIR@" +JAXWS_OUTPUTDIR="@JAXWS_OUTPUTDIR@" +HOTSPOT_OUTPUTDIR="@HOTSPOT_OUTPUTDIR@" + +# This where a working jvm is built. +# You can run ${JDK_OUTPUTDIR}/bin/java +# Though the layout of the contents of ${JDK_OUTPUTDIR} is not +# yet the same as a default installation. +JDK_OUTPUTDIR="@OUTPUT_ROOT@"/jdk + +# When you run "make install" it will create the standardized +# layout for the jdk and the jre inside the images subdir. +# Then it will copy the contents of the jdk into the installation +# directory. +IMAGES_OUTPUTDIR="@OUTPUT_ROOT@"/images + +LANGTOOLS_DIST="@LANGTOOLS_DIST@" +CORBA_DIST="@CORBA_DIST@" +JAXP_DIST="@JAXP_DIST@" +JAXWS_DIST="@JAXWS_DIST@" +HOTSPOT_DIST="@HOTSPOT_DIST@" + +# Legacy variables used by Release.gmk +JDK_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2sdk-image +JRE_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2re-image + +# Can be /sparcv9 or /amd64 on Solaris +ISA_DIR="@LEGACY_OPENJDK_TARGET_CPU3@" +BINDIR="${JDK_OUTPUTDIR}/bin${ISA_DIR}" + +# The boot jdk to use +ALT_BOOTDIR="@BOOT_JDK@" +BOOT_JDK="@BOOT_JDK@" +BOOT_JDK_JVMARGS="@BOOT_JDK_JVMARGS@" +BOOT_RTJAR="@BOOT_RTJAR@" +BOOT_TOOLSJAR="@BOOT_TOOLSJAR@" + +# When compiling Java source to be run by the boot jdk +# use these extra flags, eg -source 6 -target 6 +BOOT_JDK_SOURCETARGET="@BOOT_JDK_SOURCETARGET@" + +# Information about the build system +NUM_CORES="@NUM_CORES@" +# This is used from the jdk build for C/C++ code. +PARALLEL_COMPILE_JOBS="@CONCURRENT_BUILD_JOBS@" +# Store javac server synchronization files here, and +# the javac server log files. +JAVAC_SERVERS="@JAVAC_SERVERS@" +# Should we use a javac server or not? The javac server gives +# an enormous performance improvement since it reduces the +# startup costs of javac and reuses as much as possible of intermediate +# compilation work. But if we want to compile with a non-Java +# javac compiler, like gcj. Then we cannot use javac server and +# this variable is set to false. +JAVAC_USE_REMOTE="@JAVAC_USE_REMOTE@" +# We can block the Javac server to never use more cores than this. +# This is not for performance reasons, but for memory usage, since each +# core requires its own JavaCompiler. We might have 64 cores and 4GB +# of memory, 64 JavaCompilers will currently not fit in a 3GB heap. +# Since there is no sharing of data between the JavaCompilers. +JAVAC_SERVER_CORES="@JAVAC_SERVER_CORES@" +# Should we use dependency tracking between Java packages? true or false. +JAVAC_USE_DEPS="@JAVAC_USE_DEPS@" +# We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT +JAVAC_USE_MODE="@JAVAC_USE_MODE@" +# Enable not yet complete sjavac support. +ENABLE_SJAVAC="@ENABLE_SJAVAC@" + +# 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@" +CUPS_CFLAGS="@CUPS_CFLAGS@" + +PACKAGE_PATH="@PACKAGE_PATH@" + +# Source file for cacerts +CACERTS_FILE="@CACERTS_FILE@" + +#MOZILLA_HEADERS_PATH= + +# Necessary additional compiler flags to compile X11 +X_CFLAGS="@X_CFLAGS@" +X_LIBS="@X_LIBS@" +OPENWIN_HOME="@OPENWIN_HOME@" + +# There are two types: CC or CL +# CC is gcc and others behaving reasonably similar. +# CL is cl.exe only. +COMPILER_TYPE="@COMPILER_TYPE@" + +# Flags used for overriding the default opt setting for a C/C++ source file. +C_O_FLAG_HIGHEST="@C_O_FLAG_HIGHEST@" +C_O_FLAG_HI="@C_O_FLAG_HI@" +C_O_FLAG_NORM="@C_O_FLAG_NORM@" +C_O_FLAG_NONE="@C_O_FLAG_NONE@" +CXX_O_FLAG_HIGHEST="@CXX_O_FLAG_HIGHEST@" +CXX_O_FLAG_HI="@CXX_O_FLAG_HI@" +CXX_O_FLAG_NORM="@CXX_O_FLAG_NORM@" +CXX_O_FLAG_NONE="@CXX_O_FLAG_NONE@" + +C_FLAG_DEPS="@C_FLAG_DEPS@" +CXX_FLAG_DEPS="@CXX_FLAG_DEPS@" + +# Tools that potentially need to be cross compilation aware. +CC="@UNCYGDRIVE@ @CCACHE@ @CC@" + +# CFLAGS used to compile the jdk native libraries (C-code) +CFLAGS_JDKLIB="@CFLAGS_JDKLIB@" +CXXFLAGS_JDKLIB="@CXXFLAGS_JDKLIB@" + +# CFLAGS used to compile the jdk native launchers (C-code) +CFLAGS_JDKEXE="@CFLAGS_JDKEXE@" +CXXFLAGS_JDKEXE="@CXXFLAGS_JDKEXE@" + +CXX="@UNCYGDRIVE@ @CCACHE@ @CXX@" +#CXXFLAGS="@CXXFLAGS@" + +OBJC="@CCACHE@ @OBJC@" +#OBJCFLAGS="@OBJCFLAGS@" + +CPP="@UNCYGDRIVE@ @CPP@" +#CPPFLAGS="@CPPFLAGS@" + +# The linker can be gcc or ld on posix systems, or link.exe on winapi systems. +LD="@UNCYGDRIVE@ @LD@" + +# LDFLAGS used to link the jdk native libraries (C-code) +LDFLAGS_JDKLIB="@LDFLAGS_JDKLIB@" +LDFLAGS_JDKLIB_SUFFIX="@LDFLAGS_JDKLIB_SUFFIX@" + +# On some platforms the linker cannot be used to create executables, thus +# the need for a separate LDEXE command. +LDEXE="@UNCYGDRIVE@ @LDEXE@" + +# LDFLAGS used to link the jdk native launchers (C-code) +LDFLAGS_JDKEXE="@LDFLAGS_JDKEXE@" +LDFLAGS_JDKEXE_SUFFIX="@LDFLAGS_JDKEXE_SUFFIX@" + +# Sometimes a different linker is needed for c++ libs +LDCXX="@UNCYGDRIVE@ @LDCXX@" +# The flags for linking libstdc++ linker. +LIBCXX="@LIBCXX@" + +# Sometimes a different linker is needed for c++ executables +LDEXECXX="@UNCYGDRIVE@ @LDEXECXX@" + +# If cross compiling, then define CROSS_COMPILE_ARCH=cpu_name here. +# The HOSTCC should really be named BUILDCC, ie build executable for +# the build platform. Same as CC when not cross compiling. +HOSTCC="@HOSTCC@" +HOSTCXX="@HOSTCXX@" +# And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC +HOST_CC="@HOSTCC@" +NIO_CC="@HOSTCC@" + +AS="@AS@" +ASFLAGS="@ASFLAGS@" + +# AR is used to create a static library (is ar in posix, lib.exe in winapi) +AR="@UNCYGDRIVE@ @AR@" +ARFLAGS="@ARFLAGS@" + +NM="@NM@" +STRIP="@STRIP@" +MCS="@MCS@" + +# Command to create a shared library +SHARED_LIBRARY_FLAGS="@SHARED_LIBRARY_FLAGS@" + +# Options to linker to specify a mapfile. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_MAPFILE="@SET_SHARED_LIBRARY_MAPFILE@" + +# Options for C/CXX compiler to be used if linking is performed +# using reorder file +C_FLAG_REORDER="@C_FLAG_REORDER@" +CXX_FLAG_REORDER="@CXX_FLAG_REORDER@" + +# +# Options for generating debug symbols +ENABLE_DEBUG_SYMBOLS="@ENABLE_DEBUG_SYMBOLS@" +CFLAGS_DEBUG_SYMBOLS="@CFLAGS_DEBUG_SYMBOLS@" +CXXFLAGS_DEBUG_SYMBOLS="@CXXFLAGS_DEBUG_SYMBOLS@" +ZIP_DEBUGINFO_FILES="@ZIP_DEBUGINFO_FILES@" + +# Options to linker to specify the library name. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_NAME="@SET_SHARED_LIBRARY_NAME@" + +# Set origin using the linker, ie use the relative path to the dependent library to find the dependees. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_ORIGIN="@SET_SHARED_LIBRARY_ORIGIN@" + +# Different OS:es have different ways of naming shared libraries. +# The SHARED_LIBRARY macro takes "verify" as and argument and returns: +# "libverify.so" or "libverify.dylib" or "verify.dll" depending on platform. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SHARED_LIBRARY="@SHARED_LIBRARY@" +STATIC_LIBRARY="@STATIC_LIBRARY@" +LIBRARY_PREFIX="@LIBRARY_PREFIX@" +SHARED_LIBRARY_SUFFIX="@SHARED_LIBRARY_SUFFIX@" +STATIC_LIBRARY_SUFFIX="@STATIC_LIBRARY_SUFFIX@" +EXE_SUFFIX="@EXE_SUFFIX@" +OBJ_SUFFIX="@OBJ_SUFFIX@" + +POST_STRIP_CMD="@POST_STRIP_CMD@" +POST_MCS_CMD='@POST_MCS_CMD@' + +JAVA_FLAGS="@BOOT_JDK_JVMARGS@" + +JAVA="@UNCYGDRIVE@ @JAVA@ ${JAVA_FLAGS}" + +JAVAC="@UNCYGDRIVE@ @JAVAC@" +JAVAC_FLAGS="@JAVAC_FLAGS@" + +JAVAH="@UNCYGDRIVE@ @JAVAH@" + +JAR="@UNCYGDRIVE@ @JAR@" + +RMIC="@UNCYGDRIVE@ @RMIC@" + +NATIVE2ASCII="@UNCYGDRIVE@ @NATIVE2ASCII@" + +BOOT_JAR_CMD="@UNCYGDRIVE@ @JAR@" +BOOT_JAR_JFLAGS= + +# Tools adhering to a minimal and common standard of posix compliance. +AWK="@AWK@" +CAT="@CAT@" +CCACHE="@CCACHE@" +# CD is going away, but remains to cater for legacy makefiles. +CD=cd +CHMOD="@CHMOD@" +CP="@CP@" +CPIO="@CPIO@" +CUT="@CUT@" +DATE="@DATE@" +DF="@DF@" +DIFF="@DIFF@" +FIND="@FIND@" +FIND_DELETE="@FIND_DELETE@" +ECHO="@ECHO@" +EGREP="@EGREP@" +FGREP="@FGREP@" +GREP="@GREP@" +HEAD="@HEAD@" +LS="@LS@" +LN="@LN@" +MKDIR="@MKDIR@" +MV="@MV@" +NAWK="@NAWK@" +PRINTF="@PRINTF@" +PWD="@THEPWDCMD@" +RM="@RM@" +SED="@SED@" +SH="@SH@" +SORT="@SORT@" +TAR="@TAR@" +TAIL="@TAIL@" +TEE="@TEE@" +TR="@TR@" +TOUCH="@TOUCH@" +WC="@WC@" +XARGS="@XARGS@" +ZIPEXE="@ZIP@" +ZIP="@ZIP@" +UNZIP="@UNZIP@" +MT="@UNCYGDRIVE@ @MT@" +RC="@UNCYGDRIVE@ @RC@" +DUMPBIN="@UNCYGDRIVE@ @DUMPBIN@" +CYGPATH="@CYGPATH@" +LDD="@LDD@" +OTOOL="@OTOOL@" +READELF="@READELF@" +EXPR="@EXPR@" +FILE="@FILE@" +HG="@HG@" +OBJCOPY="@OBJCOPY@" + +UNCYGDRIVE="@UNCYGDRIVE@" + +# Build setup +ENABLE_DOCS="@ENABLE_DOCS@" +GENERATE_DOCS="@ENABLE_DOCS@" +DISABLE_NIMBUS="@DISABLE_NIMBUS@" +USE_EXTERNAL_LIBJPEG="@USE_EXTERNAL_LIBJPEG@" +USE_EXTERNAL_LIBGIF="@USE_EXTERNAL_LIBGIF@" +USE_EXTERNAL_LIBZ="@USE_EXTERNAL_LIBZ@" +LIBZIP_CAN_USE_MMAP="@LIBZIP_CAN_USE_MMAP@" +CHECK_FOR_VCINSTALLDIR="@CHECK_FOR_VCINSTALLDIR@" +MSVCRNN_DLL="@MSVCR100DLL@" + + +#################################################### +# +# Legacy Hotspot support + +HOTSPOT_DIST="@HOTSPOT_DIST@" +HOTSPOT_MAKE_ARGS="@HOTSPOT_MAKE_ARGS@" +# This is used from the libjvm build for C/C++ code. +HOTSPOT_BUILD_JOBS="@CONCURRENT_BUILD_JOBS@" +# Control wether Hotspot runs Queens test after building +TEST_IN_BUILD="@TEST_IN_BUILD@" + +#################################################### +# +# INSTALLATION +# + +# Common prefix for all installed files. Defaults to /usr/local, +# but /opt/myjdk is another common version. +INSTALL_PREFIX="@prefix@" + +# Directories containing architecture-dependent files should be relative to exec_prefix +INSTALL_EXECPREFIX="@exec_prefix@" + +# java,javac,javah,javap etc are installed here. +INSTALL_BINDIR="@bindir@" + +# Read only architecture-independent data +INSTALL_DATADIR="@datadir@" + +# Root of above. +INSTALL_DATAROOTDIR="@datarootdir@" + +# Doc files, other than info and man. +INSTALL_DOCDIR="@docdir@" + +# Html documentation +INSTALL_HTMLDIR="@htmldir@" + +# Installing C header files, JNI headers for example. +INSTALL_INCLUDEDIR="@includedir@" + +# Installing library files.... +INSTALL_INCLUDEDIR="@libdir@" + +# Executables that other programs run. +INSTALL_LIBEXECDIR="@libexecdir@" + +# Locale-dependent but architecture-independent data, such as message catalogs. +INSTALL_LOCALEDIR="@localedir@" + +# Modifiable single-machine data +INSTALL_LOCALSTATEDIR="@localstatedir@" + +# Man pages +INSTALL_MANDIR="@mandir@" + +# Modifiable architecture-independent data. +INSTALL_SHAREDSTATEDIR="@sharedstatedir@" + +# Read-only single-machine data +INSTALL_SYSCONFDIR="@sysconfdir@" + + +#################################################### +# +# Misc +# + +# Name of Service Agent library +SALIB_NAME="@SALIB_NAME@" + +OS_VERSION_MAJOR="@OS_VERSION_MAJOR@" +OS_VERSION_MINOR="@OS_VERSION_MINOR@" +OS_VERSION_MICRO="@OS_VERSION_MICRO@" diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 new file mode 100644 index 00000000000..252e06af4d0 --- /dev/null +++ b/common/autoconf/toolchain.m4 @@ -0,0 +1,908 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], +[ + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +SETUPDEVENV="# No special vars" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # If vcvarsall.bat has been run, then VCINSTALLDIR is set. + if test "x$VCINSTALLDIR" != x; then + # No further setup is needed. The build will happen from this kind + # of shell. + SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." + # Make sure to remind you, if you forget to run make from a cygwin bash shell + # that is spawned "bash -l" from a VS command prompt. + CHECK_FOR_VCINSTALLDIR=yes + AC_MSG_CHECKING([if you are running from within a VS command prompt]) + AC_MSG_RESULT([yes]) + else + # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. + if test "x$VS100COMNTOOLS" != x; then + VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` + SEARCH_ROOT="$VS100COMNTOOLS" + else + VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` + SEARCH_ROOT="$PROGRAMFILES" + fi + VCPATH=`dirname "$VARSBAT"` + VCPATH=`cygpath -w "$VCPATH"` + if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then + AC_MSG_CHECKING([if we can find the VS installation]) + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + case "$LEGACY_OPENJDK_TARGET_CPU1" in + i?86) + VARSBAT_ARCH=x86 + ;; + *) + VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 + ;; + esac + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + cd $OUTPUT_ROOT + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then + AC_MSG_CHECKING([if we can extract the needed env variables]) + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + . $OUTPUT_ROOT/localdevenv.sh + AC_MSG_CHECKING([if we can find the VS installation]) + if test "x$VCINSTALLDIR" != x; then + AC_MSG_RESULT([$VCINSTALLDIR]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + CHECK_FOR_VCINSTALLDIR=no + SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + + AC_MSG_CHECKING([for msvcr100.dll]) + AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], + [copy this msvcr100.dll into the built JDK])]) + if test "x$with_msvcr100dll" != x; then + MSVCR100DLL="$with_msvcr100dll" + else + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR100DLL" = x; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` + fi + fi + fi + if test "x$MSVCR100DLL" = x; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find msvcr100.dll !]) + fi + AC_MSG_RESULT([$MSVCR100DLL]) + SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) + fi +fi +AC_SUBST(SETUPDEVENV) +AC_SUBST(CHECK_FOR_VCINSTALLDIR) +AC_SUBST(MSVCR100DLL) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], +[ +############################################################################### +# +# Configure the development tool paths and potential sysroot. +# +AC_LANG(C++) +DEVKIT= +SYS_ROOT=/ +AC_SUBST(SYS_ROOT) + +# The option used to specify the target .o,.a or .so file. +# When compiling, how to specify the to be created object file. +CC_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created executable. +EXE_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created dynamically linkable library. +LD_OUT_OPTION='-o$(SPACE)' +# When archiving, how to specify the to be create static archive for object files. +AR_OUT_OPTION='rcs$(SPACE)' +AC_SUBST(CC_OUT_OPTION) +AC_SUBST(EXE_OUT_OPTION) +AC_SUBST(LD_OUT_OPTION) +AC_SUBST(AR_OUT_OPTION) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_PATHS], +[ +# If --build AND --host is set, then the configure script will find any +# cross compilation tools in the PATH. Cross compilation tools +# follows the cross compilation standard where they are prefixed with ${host}. +# For example the binary i686-sun-solaris2.10-gcc +# will cross compile for i686-sun-solaris2.10 +# If neither of build and host is not set, then build=host and the +# default compiler found in the path will be used. +# Setting only --host, does not seem to be really supported. +# Please set both --build and --host if you want to cross compile. + +DEFINE_CROSS_COMPILE_ARCH="" +HOSTCC="" +HOSTCXX="" +HOSTLD="" +AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) +AC_MSG_CHECKING([if this is a cross compile]) +if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then + AC_MSG_RESULT([yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM]) + # We have detected a cross compile! + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" + # Now we to find a C/C++ compiler that can build executables for the build + # platform. We can't use the AC_PROG_CC macro, since it can only be used + # once. + AC_PATH_PROGS(HOSTCC, [cl cc gcc]) + WHICHCMD(HOSTCC) + AC_PATH_PROGS(HOSTCXX, [cl CC g++]) + WHICHCMD(HOSTCXX) + AC_PATH_PROG(HOSTLD, ld) + WHICHCMD(HOSTLD) + # Building for the build platform should be easy. Therefore + # we do not need any linkers or assemblers etc. +else + AC_MSG_RESULT([no]) +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. +AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], + [pass this sys-root to the compilers and linker (useful if the sys-root encoded in + the cross compiler tools is incorrect)])]) + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +fi + +# If a devkit is found on the builddeps server, then prepend its path to the +# PATH variable. If there are cross compilers available in the devkit, these +# will be found by AC_PROG_CC et al. +BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, + [# Found devkit + PATH="$DEVKIT/bin:$PATH" + SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" + if test "x$x_includes" = "xNONE"; then + x_includes="$SYS_ROOT/usr/include/X11" + fi + if test "x$x_libraries" = "xNONE"; then + x_libraries="$SYS_ROOT/usr/lib" + fi + ], + []) + +if test "x$SYS_ROOT" != "x/" ; then + CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" + CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" + OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" + LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" +fi + +# Store the CFLAGS etal passed to the configure script. +ORG_CFLAGS="$CFLAGS" +ORG_CXXFLAGS="$CXXFLAGS" +ORG_OBJCFLAGS="$OBJCFLAGS" + +AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir], + [search this directory for compilers and tools])], [TOOLS_DIR=$with_tools_dir]) + +AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit], + [use this directory as base for tools-dir and sys-root])], [ + if test "x$with_sys_root" != x; then + AC_MSG_ERROR([Cannot specify both --with-devkit and --with-sys-root at the same time]) + fi + if test "x$with_tools_dir" != x; then + AC_MSG_ERROR([Cannot specify both --with-devkit and --with-tools-dir at the same time]) + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + ]) + +# autoconf magic only relies on PATH, so update it if tools dir is specified +OLD_PATH="$PATH" +if test "x$TOOLS_DIR" != x; then + PATH=$TOOLS_DIR:$PATH +fi + +# gcc is almost always present, but on Windows we +# prefer cl.exe and on Solaris we prefer CC. +# Thus test for them in this order. +AC_PROG_CC([cl cc gcc]) +if test "x$CC" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) +fi +if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Do not use cc on MacOSX use gcc instead. + CC="gcc" +fi +WHICHCMD(CC) + +AC_PROG_CXX([cl CC g++]) +if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # The found CC, even though it seems to be a g++ derivate, cannot compile + # c++ code. Override. + CXX="g++" +fi +WHICHCMD(CXX) + +if test "x$CXX" = x || test "x$CC" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) +fi + +if test "x$OPENJDK_BUILD_OS" != xwindows; then + AC_PROG_OBJC + WHICHCMD(OBJC) +else + OBJC= +fi + +# Restore the flags to the user specified values. +# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" +CFLAGS="$ORG_CFLAGS" +CXXFLAGS="$ORG_CXXFLAGS" +OBJCFLAGS="$ORG_OBJCFLAGS" + +# If we are not cross compiling, use the same compilers for +# building the build platform executables. +if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then + HOSTCC="$CC" + HOSTCXX="$CXX" +fi + +AC_CHECK_TOOL(LD, ld) +WHICHCMD(LD) +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" +# LDEXE is the linker to use, when creating executables. +AC_SUBST(LDEXE) +# Linking C++ libraries. +AC_SUBST(LDCXX) +# Linking C++ executables. +AC_SUBST(LDEXECXX) + +AC_CHECK_TOOL(AR, ar) +WHICHCMD(AR) +if test "x$OPENJDK_BUILD_OS" = xmacosx; then + ARFLAGS="-r" +else + ARFLAGS="" +fi +AC_SUBST(ARFLAGS) + +COMPILER_NAME=gcc +COMPILER_TYPE=CC +AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ + # For now, assume that we are always compiling using cl.exe. + CC_OUT_OPTION=-Fo + EXE_OUT_OPTION=-out: + LD_OUT_OPTION=-out: + AR_OUT_OPTION=-out: + # On Windows, reject /usr/bin/link, which is a cygwin + # program for something completely different. + AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) + # Since we must ignore the first found link, WINLD will contain + # the full path to the link.exe program. + WHICHCMD_SPACESAFE([WINLD]) + LD="$WINLD" + LDEXE="$WINLD" + LDCXX="$WINLD" + LDEXECXX="$WINLD" + # Set HOSTLD to same as LD until we fully support cross compilation + # on windows. + HOSTLD="$WINLD" + + AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) + WHICHCMD_SPACESAFE([MT]) + # The resource compiler + AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) + WHICHCMD_SPACESAFE([RC]) + + RC_FLAGS="-nologo /l 0x409 /r" + AS_IF([test "x$VARIANT" = xOPT], [ + RC_FLAGS="$RC_FLAGS -d NDEBUG" + ]) + JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION + AS_IF([test "x$JDK_UPDATE_VERSION" = x], [ + JDK_UPDATE_VERSION_NOTNULL=0 + ]) + RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" + + # lib.exe is used to create static libraries. + AC_CHECK_PROG([WINAR], [lib],[lib],,,) + WHICHCMD_SPACESAFE([WINAR]) + AR="$WINAR" + ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" + + AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) + WHICHCMD_SPACESAFE([DUMPBIN]) + + COMPILER_TYPE=CL + CCXXFLAGS="$CCXXFLAGS -nologo" +]) +AC_SUBST(RC_FLAGS) +AC_SUBST(COMPILER_TYPE) + +AC_PROG_CPP +WHICHCMD(CPP) + +AC_PROG_CXXCPP +WHICHCMD(CXXCPP) + +# for solaris we really need solaris tools, and not gnu equivalent +# these seems to normally reside in /usr/ccs/bin so add that to path before +# starting to probe +# +# NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH +# so that it can be overriden --with-tools-dir +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" +fi + +# Find the right assembler. +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + AC_PATH_PROG(AS, as) + WHICHCMD(AS) + ASFLAGS=" " +else + AS="$CC -c" + ASFLAGS=" " +fi +AC_SUBST(AS) +AC_SUBST(ASFLAGS) + +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + AC_PATH_PROG(NM, nm) + WHICHCMD(NM) + AC_PATH_PROG(STRIP, strip) + WHICHCMD(STRIP) + AC_PATH_PROG(MCS, mcs) + WHICHCMD(MCS) +else + AC_CHECK_TOOL(NM, nm) + WHICHCMD(NM) + AC_CHECK_TOOL(STRIP, strip) + WHICHCMD(STRIP) +fi + +### +# +# Check for objcopy +# +# but search for gobjcopy first... +# since I on solaris found a broken objcopy...buhh +# +AC_PATH_TOOL(OBJCOPY, gobjcopy) +if test "x$OBJCOPY" = x; then + AC_PATH_TOOL(OBJCOPY, objcopy) +fi + +# Restore old path without tools dir +PATH="$OLD_PATH" +]) + + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS], +[ + +############################################################################### +# +# How to compile shared libraries. +# + +if test "x$GCC" = xyes; then + COMPILER_NAME=gcc + PICFLAG="-fPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-shared" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/[$]1' + LD="$CC" + LDEXE="$CC" + LDCXX="$CXX" + LDEXECXX="$CXX" + POST_STRIP_CMD="$STRIP -g" + if test "x$JDK_VARIANT" = xembedded; then + POST_STRIP_CMD="$STRIP --strip-unneeded" + fi + + # Linking is different on MacOSX + if test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Might change in the future to clang. + COMPILER_NAME=gcc + SHARED_LIBRARY='lib[$]1.dylib' + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SHARED_LIBRARY_SUFFIX='.dylib' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" + fi +else + if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler + COMPILER_NAME=ossc + PICFLAG="-KPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='-M[$]1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' + SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/[$]1' + CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" + CFLAGS_JDKLIB_EXTRA='-xstrconst' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" + fi + if test "x$OPENJDK_BUILD_OS" = xwindows; then + # If it is not gcc, then assume it is the MS Visual Studio compiler + COMPILER_NAME=cl + PICFLAG="" + LIBRARY_PREFIX= + SHARED_LIBRARY='[$]1.dll' + STATIC_LIBRARY='[$]1.lib' + SHARED_LIBRARY_FLAGS="-LD" + SHARED_LIBRARY_SUFFIX='.dll' + STATIC_LIBRARY_SUFFIX='.lib' + OBJ_SUFFIX='.obj' + EXE_SUFFIX='.exe' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='' + fi +fi + +AC_SUBST(OBJ_SUFFIX) +AC_SUBST(SHARED_LIBRARY) +AC_SUBST(STATIC_LIBRARY) +AC_SUBST(LIBRARY_PREFIX) +AC_SUBST(SHARED_LIBRARY_SUFFIX) +AC_SUBST(STATIC_LIBRARY_SUFFIX) +AC_SUBST(EXE_SUFFIX) +AC_SUBST(SHARED_LIBRARY_FLAGS) +AC_SUBST(SET_SHARED_LIBRARY_NAME) +AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) +AC_SUBST(C_FLAG_REORDER) +AC_SUBST(CXX_FLAG_REORDER) +AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) +AC_SUBST(POST_STRIP_CMD) +AC_SUBST(POST_MCS_CMD) + +# The (cross) compiler is now configured, we can now test capabilities +# of the target platform. +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], +[ + +############################################################################### +# +# Setup the opt flags for different compilers +# and different operating systems. +# +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + +case $COMPILER_TYPE in + CC ) + D_FLAG="-g" + case $COMPILER_NAME in + gcc ) + case $OPENJDK_TARGET_OS in + macosx ) + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + ;; + *) + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then + CFLAGS_DEBUG_SYMBOLS="-g1" + CXXFLAGS_DEBUG_SYMBOLSG="-g1" + fi + ;; + esac + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; + ossc ) + # + # Forte has different names for this with their C++ compiler... + # + C_FLAG_DEPS="-xMMD -xMF" + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + + case $LEGACY_OPENJDK_TARGET_CPU1 in + i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" + C_O_FLAG_HI="-xO4 -Wu,-O4~yz" + C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" + CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" + CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" + CXX_O_FLAG_NONE="" + ;; + sparc) + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NONE="" + ;; + esac + + CFLAGS_DEBUG_SYMBOLS="-g -xs" + CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + esac + ;; + CL ) + D_FLAG= + C_O_FLAG_HI="-O2" + C_O_FLAG_NORM="-O1" + C_O_FLAG_NONE="-Od" + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; +esac + +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +fi + +AC_SUBST(C_O_FLAG_HIGHEST) +AC_SUBST(C_O_FLAG_HI) +AC_SUBST(C_O_FLAG_NORM) +AC_SUBST(C_O_FLAG_NONE) +AC_SUBST(CXX_O_FLAG_HIGHEST) +AC_SUBST(CXX_O_FLAG_HI) +AC_SUBST(CXX_O_FLAG_NORM) +AC_SUBST(CXX_O_FLAG_NONE) +AC_SUBST(C_FLAG_DEPS) +AC_SUBST(CXX_FLAG_DEPS) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], +[ + +if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then + AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags"]) +fi + +if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then + AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags"]) +fi + +if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then + AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags"]) +fi + +AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], + [extra flags to be used when compiling jdk c-files])]) + +AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], + [extra flags to be used when compiling jdk c++-files])]) + +AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], + [extra flags to be used when linking jdk])]) + +CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" +CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" +LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" + +############################################################################### +# +# Now setup the CFLAGS and LDFLAGS for the JDK build. +# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. +# +case $COMPILER_NAME in + gcc ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + ppc ) + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac + ;; + ossc ) + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" + ;; + cl ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $LEGACY_OPENJDK_TARGET_CPU1 in + i?86 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + amd64 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +esac + +############################################################################### +# +# Cross-compile arch specific flags + +# +if test "x$JDK_VARIANT" = "xembedded"; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" +fi + +case $OPENJDK_TARGET_CPU_ARCH in +arm ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +ppc ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +esac + +############################################################################### + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" + +# The package path is used only on macosx? +PACKAGE_PATH=/opt/local +AC_SUBST(PACKAGE_PATH) + +# Sometimes we use a cpu dir (.../lib/amd64/server) +# Sometimes not (.../lib/server) +LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" +if test "x$ENDIAN" = xlittle; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" +fi +if test "x$OPENJDK_TARGET_OS" = xlinux; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" +fi +if test "x$OPENJDK_TARGET_OS" = xwindows; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" +fi +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" + LIBARCHDIR="" +fi +if test "x$OPENJDK_TARGET_OS" = xbsd; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" +fi +if test "x$DEBUG_LEVEL" = xrelease; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" +fi + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ + -I${JDK_TOPDIR}/src/share/native/common \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" + +# The shared libraries are compiled using the picflag. +CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + +# Executable flags +CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" + +# Now this is odd. The JDK native libraries have to link against libjvm.so +# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library +# is identical for client and server? Yes. Which is picked at runtime (client or server)? +# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following +# libraries will link to whatever is in memory. Yuck. +# +# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. +if test "x$COMPILER_TYPE" = xCL; then + LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" + fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS_JDK="$LDFLAGS_JDK -debug" + LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" + LDFLAGS_JDKLIB_SUFFIX="" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + LDFLAGS_STACK_SIZE=1048576 + else + LDFLAGS_STACK_SIZE=327680 + fi + LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" +else + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" == "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi + fi + + LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" + LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" + if test "x$COMPILER_NAME" = xossc; then + LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" + fi + + # Only the jli library is explicitly linked when the launchers are built. + # The libjvm is then dynamically loaded/linked by the launcher. + LDFLAGS_JDKEXE="${LDFLAGS_JDK}" + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi +fi + +# Adjust flags according to debug level. +case $DEBUG_LEVEL in + fastdebug ) + CFLAGS="$CFLAGS $D_FLAG" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; + slowdebug ) + CFLAGS="$CFLAGS $D_FLAG" + C_O_FLAG_HI="$C_O_FLAG_NONE" + C_O_FLAG_NORM="$C_O_FLAG_NONE" + CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" + CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; +esac + + +AC_SUBST(CFLAGS_JDKLIB) +AC_SUBST(CFLAGS_JDKEXE) + +AC_SUBST(CXXFLAGS_JDKLIB) +AC_SUBST(CXXFLAGS_JDKEXE) + +AC_SUBST(LDFLAGS_JDKLIB) +AC_SUBST(LDFLAGS_JDKEXE) +AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) +AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) +]) diff --git a/common/bin/compare-objects.sh b/common/bin/compare-objects.sh new file mode 100644 index 00000000000..ba01d5e4e93 --- /dev/null +++ b/common/bin/compare-objects.sh @@ -0,0 +1,235 @@ +#!/bin/bash +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# 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. +# + +# MANUAL +# +# ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir +# +# Compares object files +# + +if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then + echo "bash ./common/bin/compare-build.sh old_jdk_build_dir new_jdk_build_dir" + echo "" + echo "Compare object files" + echo "" + exit 10 +fi + +####### +# +# List of files (grep patterns) that are ignored +# +# 1) hotspot object files +IGNORE="-e hotspot" + +# 2) various build artifacts: sizer.32.o sizer.64.o dummyodbc.o +# these are produced during build and then e.g run to produce other data +# i.e not directly put into build => safe to ignore +IGNORE="${IGNORE} -e sizer.32.o -e sizer.64.o" +IGNORE="${IGNORE} -e dummyodbc.o" +IGNORE="${IGNORE} -e genSolarisConstants.o" +IGNORE="${IGNORE} -e genUnixConstants.o" + +OLD="$1" +NEW="$2" +shift; shift +PATTERN="$*" + +if [ -f $NEW/spec.sh ]; then + . $NEW/spec.sh +elif [ -f $NEW/../../spec.sh ]; then + . $NEW/../../spec.sh +elif [ -f $OLD/spec.sh ]; then + . $OLD/spec.sh +elif [ -f $OLD/../../spec.sh ]; then + . $OLD/../../spec.sh +else + echo "Unable to find spec.sh" + echo "Giving up" + exit 1 +fi + +export COMPARE_ROOT=/tmp/cimages.$USER/objects +mkdir -p $COMPARE_ROOT + +(${CD} $OLD && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.old +(${CD} $NEW && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.new + +# On macosx JobjC is build in both i386 and x86_64 variant (universial binary) +# but new build only builds the x86_64 +# Remove the 386 variants from comparison...to avoid "false" positives +${GREP} -v 'JObjC.dst/Objects-normal/i386' $COMPARE_ROOT/list.old > $COMPARE_ROOT/list.old.new +${CP} $COMPARE_ROOT/list.old $COMPARE_ROOT/list.old.full +${CP} $COMPARE_ROOT/list.old.new $COMPARE_ROOT/list.old + +findnew() { + arg_1=$1 + arg_2=$2 + + # special case 1 unpack-cmd => unpackexe + arg_1=`${ECHO} $arg_1 | ${SED} 's!unpack-cmd!unpackexe!g'` + arg_2=`${ECHO} $arg_2 | ${SED} 's!unpack-cmd!unpackexe!g'` + + # special case 2 /JObjC.dst/ => /libjobjc/ + arg_1=`${ECHO} $arg_1 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` + arg_2=`${ECHO} $arg_2 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` + + full=`${ECHO} $arg_1 | ${SED} 's!\.!\\\.!g'` + medium=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*/[^/]*\)!\1!'` + short=`${ECHO} $arg_2 | ${SED} 's!\.!\\\.!g'` + if [ "`${GREP} -c "/$full" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${ECHO} $NEW/$arg_1 + return + fi + + if [ "`${GREP} -c "$medium" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${GREP} "$medium" $COMPARE_ROOT/list.new + return + fi + + if [ "`${GREP} -c "/$short" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${GREP} "/$short" $COMPARE_ROOT/list.new + return + fi + + # old style has "dir" before obj{64} + dir=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*\)/obj[64]*.*!\1!g'` + if [ -n "$dir" -a "$dir" != "$arg_1" ] + then + if [ "`${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + + # Try with lib$dir/ + if [ "`${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + + # Try with $dir_objs + if [ "`${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + + # check for some specifics... + for i in demo hotspot jobjc + do + if [ "`${ECHO} $full | ${GREP} -c $i`" -gt 0 ] + then + if [ "`${GREP} $i $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $i $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + done + + # check for specific demo + demo=`${ECHO} $arg_1 | ${SED} 's!.*/demo/jvmti/\([^/]*\)/.*!\1!g'` + if [ -n "$demo" -a "$dir" != "$demo" ] + then + if [ "`${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + + return +} + +compare() { + old=$1 + new=$2 + ${DIFF} $old $new > /dev/null + res=$? + if [ $res -eq 0 ] + then + ${ECHO} 0 + return + fi + + # check if stripped objects gives equality + ${CP} $old $COMPARE_ROOT/`basename $old`.old + ${CP} $new $COMPARE_ROOT/`basename $old`.new + ${POST_STRIP_CMD} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null 2>&1 + ${DIFF} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null + res=$? + ${RM} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new + if [ $res -eq 0 ] + then + ${ECHO} S + return + fi + + name=`basename $1 | ${SED} 's!\.o!!'` + cntold=`strings $old | ${GREP} -c $name` + cntnew=`strings $new | ${GREP} -c $name` + + if [ $cntold -gt 0 -a $cntnew -gt 0 ] + then + ${ECHO} F + return + fi + + ${ECHO} 1 +} + +for F in `${CAT} $COMPARE_ROOT/list.old` +do + if [ "${IGNORE}" ] && [ "`${ECHO} $F | ${GREP} ${IGNORE}`" ] + then + # + # skip ignored files + # + continue; + fi + + if [ "$PATTERN" ] && [ `${ECHO} $F | ${GREP} -c $PATTERN` -eq 0 ] + then + continue; + fi + + f=`basename $F` + o=$OLD/$F + n=`findnew $F $f` + + if [ "$n" ] + then + n="$NEW/$n" + ${ECHO} `compare $o $n` : $f : $o : $n + else + ${ECHO} "- : $f : $o " + fi +done diff --git a/common/bin/compareimage.sh b/common/bin/compareimage.sh index 3687e41c470..0e5d1f031dd 100644 --- a/common/bin/compareimage.sh +++ b/common/bin/compareimage.sh @@ -45,7 +45,7 @@ # if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then - echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image" + echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image" echo "" echo "Compare the directory structure." echo "Compare the filenames in the directories." @@ -55,11 +55,11 @@ if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then echo "Compare the native executables" echo "Compare the remaining files" echo "" - echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]" + echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]" echo "" echo "Compare only the selected subset of the images." echo "" - echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar" + echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar" echo "" echo "Compare only the CodePointIM.jar file" echo "Can be used to compare zips, libraries and executables." @@ -114,10 +114,10 @@ else CMP_OTHER=true fi -DIFFJARZIP=`dirname $0`/diffjarzip.sh -DIFFLIB=`dirname $0`/difflib.sh -DIFFEXEC=`dirname $0`/diffexec.sh -export COMPARE_ROOT=/tmp/cimages +DIFFJARZIP="/bin/bash `dirname $0`/diffjarzip.sh" +DIFFLIB="/bin/bash `dirname $0`/difflib.sh" +DIFFEXEC="/bin/bash `dirname $0`/diffexec.sh" +export COMPARE_ROOT=/tmp/cimages.$USER mkdir -p $COMPARE_ROOT # Load the correct exception list. @@ -167,16 +167,68 @@ else ONLY_OLD=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '<') if [ "$ONLY_OLD" ]; then echo Only in $OLD - echo $ONLY_OLD | sed 's|< ./|\t|g' | sed 's/ /\n/g' + echo "$ONLY_OLD" | sed 's|< ./| |g' fi # Differences in directories found. ONLY_NEW=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '>') if [ "$ONLY_NEW" ]; then echo Only in $NEW - echo $ONLY_NEW | sed 's|> ./|\t|g' | sed 's/ /\n/g' + echo "$ONLY_NEW" | sed 's|> ./| |g' fi fi +echo -n Permissions... +found="" +for f in `cd $OLD && find . -type f` +do + if [ ! -f ${OLD}/$f ]; then continue; fi + if [ ! -f ${NEW}/$f ]; then continue; fi + OP=`ls -l ${OLD}/$f | awk '{printf("%.10s\n", $1);}'` + NP=`ls -l ${NEW}/$f | awk '{printf("%.10s\n", $1);}'` + if [ "$OP" != "$NP" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + printf "\told: ${OP} new: ${NP}\t$f\n" + fi + + OF=`cd ${OLD} && file $f` + NF=`cd ${NEW} && file $f` + if [ "$f" = "./src.zip" ] + then + if [ "`echo $OF | grep -ic zip`" -gt 0 -a "`echo $NF | grep -ic zip`" -gt 0 ] + then + # the way we produces zip-files make it so that directories are stored in old file + # but not in new (only files with full-path) + # this makes file-5.09 report them as different + continue; + fi + fi + + if [ "$OF" != "$NF" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + printf "\tFILE: old: ${OF} new: ${NF}\t$f\n" + fi +done +if [ -z "$found" ]; then echo ; found="yes"; fi + +GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ + ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ + ! -name "ct.sym" ! -name "*.diz" \ + | grep -v "./bin/" | sort | $FILTER) +echo General files... +for f in $GENERAL_FILES +do + if [ -e $NEW/$f ]; then + DIFF_OUT=$(diff $OLD/$f $NEW/$f 2>&1) + if [ -n "$DIFF_OUT" ]; then + echo $f + echo "$DIFF_OUT" + fi + fi +done + + if [ "x$CMP_ZIPS" == "xtrue" ]; then ZIPS=$(cd $OLD && find . -type f -name "*.zip" | sort | $FILTER) @@ -194,7 +246,7 @@ if [ "x$CMP_ZIPS" == "xtrue" ]; then fi if [ "x$CMP_JARS" == "xtrue" ]; then - JARS=$(cd $OLD && find . -type f -name "*.jar" | sort | $FILTER) + JARS=$(cd $OLD && find . -type f -name "*.jar" -o -name "ct.sym" | sort | $FILTER) if [ -n "$JARS" ]; then echo Jar files... diff --git a/common/bin/diffexec.sh b/common/bin/diffexec.sh index e619c6ff7a4..85f7b67c69f 100644 --- a/common/bin/diffexec.sh +++ b/common/bin/diffexec.sh @@ -49,15 +49,25 @@ then fi if [ "`uname`" == "SunOS" ]; then - NM=gnm - STAT=gstat + if [ -f "`which nm`" ]; then + NM=nm + elif [ -f "`which gnm`" ]; then + NM=gnm + else + echo "No nm command found" + exit 10 + fi + LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT=stat + LDD= +elif [ "`uname`" == "Darwin" ]; then + NM=nm + LDD="otool -L" else NM=nm - STAT=stat + LDD=ldd fi # Should the differences be viewed? @@ -72,8 +82,8 @@ fi OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT -c%s "$OLD") -NEW_SIZE=$($STAT -c%s "$NEW") +OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') +NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') if [ $# -gt 3 ] then @@ -119,15 +129,41 @@ fi DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) +if [ "${LDD}" ] +then + NAME=`basename $OLD` + TMP=$COMPARE_ROOT/ldd/ldd.${NAME} + rm -rf "${TMP}" + mkdir -p "${TMP}" + + (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) + (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) + (cd "${TMP}" && rm -f ${NAME}) + + DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") + DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") + + DEP_MSG= + if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then + DEP_MSG="Identical dependencies" + elif [ -z "${DIFFS_UNIQ_DEP}" ]; then + DEP_MSG="Redundant duplicate dependencies added" + RES=1 + else + DEP_MSG="DIFFERENT dependencies" + RES=1 + fi +fi + RESULT=0 if [ -n "$DIFFS" ]; then if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Differences, content AND size : $OLD_NAME + echo Differences, content AND size : $DEP_MSG : $OLD_NAME RESULT=4 else - echo Differences, content BUT SAME size: $OLD_NAME + echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME RESULT=3 fi if [ "x$VIEW" == "xview" ]; then @@ -136,10 +172,10 @@ if [ -n "$DIFFS" ]; then else if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Identical symbols BUT NEW size : $OLD_NAME + echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME RESULT=2 else - echo Identical symbols AND size, BUT not bytewise identical: $OLD_NAME + echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME RESULT=1 fi fi diff --git a/common/bin/diffjarzip.sh b/common/bin/diffjarzip.sh index 28220f74dd9..6ad0a42c2f6 100644 --- a/common/bin/diffjarzip.sh +++ b/common/bin/diffjarzip.sh @@ -72,7 +72,11 @@ else fi if [ "`uname`" == "SunOS" ]; then - DIFF=gdiff + if [ -f "`which gdiff`" ]; then + DIFF=gdiff + else + DIFF=diff + fi else DIFF=diff fi @@ -84,8 +88,8 @@ if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then exit 2 fi -if [ "$OLD_SUFFIX" != "zip" ] && [ "$OLD_SUFFIX" != "jar" ]; then - echo The files have to be zip or jar! They are $OLD_SUFFIX +if [ "$OLD_SUFFIX" != "zip" ] && [ "$OLD_SUFFIX" != "jar" ] && [ "$OLD_SUFFIX" != "sym" ]; then + echo The files have to be zip, jar or sym! They are $OLD_SUFFIX exit 2 fi @@ -128,7 +132,7 @@ if [ -n "$ONLY2" ]; then | sed "s|Only in $NEW_TEMPDIR| |"g | sed 's|: |/|g' fi -DIFFTEXT=`dirname $0`/difftext.sh +DIFFTEXT="/bin/bash `dirname $0`/difftext.sh" LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep differ | cut -f 2,4 -d ' ' | \ awk "{ print \"$DIFFTEXT \"\$1\" \"\$2 }" > $COMPARE_ROOT/diffing diff --git a/common/bin/difflib.sh b/common/bin/difflib.sh index 645005b02f4..dc5eed14877 100644 --- a/common/bin/difflib.sh +++ b/common/bin/difflib.sh @@ -53,15 +53,28 @@ then fi if [ "`uname`" == "SunOS" ]; then - NM=gnm - STAT=gstat + if [ -f "`which gnm`" ]; then + NM=gnm +# Jonas 2012-05-29: solaris native nm produces radically different output than gnm +# so if using that...we need different filter than "cut -f 2-" +# + elif [ -f "`which nm`" ]; then + NM=nm + else + echo "No nm command found" + exit 10 + fi + LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT=stat + LDD= +elif [ "`uname`" == "Darwin" ]; then + NM=nm + LDD="otool -L" else NM=nm - STAT=stat + LDD=ldd fi # Should the differences be viewed? @@ -76,8 +89,8 @@ fi OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT -c%s "$OLD") -NEW_SIZE=$($STAT -c%s "$NEW") +OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') +NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') if [ $# -gt 3 ] then @@ -115,8 +128,8 @@ then exit 0 fi -OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old -NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new +OLD_SYMBOLS=$COMPARE_ROOT/nm.$OLD_NAME.old +NEW_SYMBOLS=$COMPARE_ROOT/nm.$NEW_NAME.new mkdir -p $(dirname $OLD_SYMBOLS) mkdir -p $(dirname $NEW_SYMBOLS) @@ -139,13 +152,39 @@ DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) RESULT=0 +if [ "${LDD}" ] +then + NAME=`basename $OLD` + TMP=$COMPARE_ROOT/ldd/ldd.${NAME} + rm -rf "${TMP}" + mkdir -p "${TMP}" + + (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) + (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) + (cd "${TMP}" && rm -f ${NAME}) + + DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") + DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") + + DEP_MSG= + if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then + DEP_MSG="Identical dependencies" + elif [ -z "${DIFFS_UNIQ_DEP}" ]; then + DEP_MSG="Redundant duplicate dependencies added" + RES=1 + else + DEP_MSG="DIFFERENT dependencies" + RES=1 + fi +fi + if [ -n "$DIFFS" ]; then if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Differences, content AND size : $OLD_NAME + echo Differences, content AND size : $DEP_MSG : $OLD_NAME RESULT=4 else - echo Differences, content BUT SAME size: $OLD_NAME + echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME RESULT=3 fi if [ "x$VIEW" == "xview" ]; then @@ -154,10 +193,10 @@ if [ -n "$DIFFS" ]; then else if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Identical symbols BUT NEW size : $OLD_NAME + echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME RESULT=2 else - echo Identical symbols AND size, BUT not bytewise identical: $OLD_NAME + echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME RESULT=1 fi fi diff --git a/common/bin/logger.sh b/common/bin/logger.sh index 9f2d7a24c7f..70c3dab047c 100644 --- a/common/bin/logger.sh +++ b/common/bin/logger.sh @@ -37,10 +37,9 @@ # Create a temporary directory to store the result code from # the wrapped command. -RCDIR=`mktemp -d tmp.XXXXXX` || exit $? -trap "rm -rf '$RCDIR'" EXIT +RCDIR=`mktemp -dt jdk-build-logger.tmp.XXXXXX` || exit $? +trap "rm -rf \"$RCDIR\"" EXIT LOGFILE=$1 shift -(exec 3>&1 ; ("$@" 2>&1 1>&3; echo $? > $RCDIR/rc) | tee -a $LOGFILE 1>&2 ; exec 3>&-) | tee -a $LOGFILE -exit `cat $RCDIR/rc` - +(exec 3>&1 ; ("$@" 2>&1 1>&3; echo $? > "$RCDIR/rc") | tee -a $LOGFILE 1>&2 ; exec 3>&-) | tee -a $LOGFILE +exit `cat "$RCDIR/rc"` diff --git a/common/makefiles/IdlCompilation.gmk b/common/makefiles/IdlCompilation.gmk index ae85d378d6f..799c7d6fbf9 100644 --- a/common/makefiles/IdlCompilation.gmk +++ b/common/makefiles/IdlCompilation.gmk @@ -56,10 +56,10 @@ define add_idl_package $4_OLDIMPLBASE_MSG:=with -oldImplBase endif $5 : $4 - mkdir -p $3/$$($4_TMPDIR) - rm -rf $3/$$($4_TMPDIR) - mkdir -p $(dir $5) - echo Compiling IDL $(patsubst $2/%,%,$4) + $(MKDIR) -p $3/$$($4_TMPDIR) + $(RM) -rf $3/$$($4_TMPDIR) + $(MKDIR) -p $(dir $5) + $(ECHO) Compiling IDL $(patsubst $2/%,%,$4) $8 -td $3/$$($4_TMPDIR) \ -i $2/org/omg/CORBA \ -i $2/org/omg/PortableInterceptor \ @@ -69,10 +69,10 @@ define add_idl_package $$($4_OLDIMPLBASE) \ $(PREFIXES) \ $4 - rm -f $$(addprefix $3/$$($4_TMPDIR)/,$6) - cp -rp $3/$$($4_TMPDIR)/* $3 - (cd $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5) - rm -rf $3/$$($4_TMPDIR) + $(RM) -f $$(addprefix $3/$$($4_TMPDIR)/,$6) + $(CP) -rp $3/$$($4_TMPDIR)/* $3 + ($(CD) $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5) + $(RM) -rf $3/$$($4_TMPDIR) endef define SetupIdlCompilation @@ -87,11 +87,13 @@ $(if $6,$1_$(strip $6)) $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) +$(if $(10),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk)) + # Remove any relative addressing in the paths. $1_SRC := $$(abspath $$($1_SRC)) $1_BIN := $$(abspath $$($1_BIN)) # Find all existing java files and existing class files. -$$(shell mkdir -p $$($1_SRC) $$($1_BIN)) +$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN)) $1_SRCS := $$(shell find $$($1_SRC) -name "*.idl") $1_BINS := $$(shell find $$($1_BIN) -name "*.java") # Prepend the source/bin path to the filter expressions. @@ -111,4 +113,3 @@ $$(foreach p,$$($1),$$(eval $$(call add_idl_package,$1,$$($1_SRC),$$($1_BIN),$$( endef .SUFFIXES: .java .class .package - diff --git a/common/makefiles/JavaCompilation.gmk b/common/makefiles/JavaCompilation.gmk index 6795e4ba009..38d20969d5c 100644 --- a/common/makefiles/JavaCompilation.gmk +++ b/common/makefiles/JavaCompilation.gmk @@ -94,6 +94,7 @@ define SetupJavaCompiler $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk)) ifeq ($$($1_MODE),MULTI_CORE_CONCURRENT) ifneq (,$$($1_SERVER_DIR)) @@ -126,11 +127,11 @@ define SetupArchive # JAR:=Jar file to create # MANIFEST:=Optional manifest file template. # JARMAIN:=Optional main class to add to manifest - # SETUP:=The Java(h) compiler setup, needed to run javah. - # HEADERS:=Directory to put headers in + # JARINDEX := # SKIP_METAINF:=Set to prevent contents of an META-INF directory to be automatically # added to the archive. # EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest. + # CHECK_COMPRESS_JAR Check the COMPRESS_JAR variable $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) $(if $5,$1_$(strip $5)) @@ -143,9 +144,9 @@ define SetupArchive $(if $(12),$1_$(strip $(12))) $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) + $(if $(15),$1_$(strip $(15))) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupArchive, please update JavaCompilation.gmk)) - $1_JVM := $$($$($1_SETUP)_JVM) - $1_JAVAH := $$($$($1_SETUP)_JAVAH) $1_JARMAIN:=$(strip $$($1_JARMAIN)) $1_JARNAME:=$$(notdir $$($1_JAR)) $1_MANIFEST_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_manifest @@ -155,19 +156,46 @@ define SetupArchive $1_NATIVEAPI_NOTIFICATIONS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native_notifications $1_NATIVEAPI_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native $1_BIN:=$$(dir $$($1_JAR)) + ifeq (,$$($1_SUFFIXES)) # No suffix was set, default to classes. $1_SUFFIXES:=.class endif # Convert suffixes to a find expression $1_FIND_PATTERNS:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) + # On windows, a lot of includes/excludes risk making the command line too long, so + # writing the grep patterns to files. ifneq (,$$($1_INCLUDES)) - $1_GREP_INCLUDES:=| $(GREP) $$(foreach src,$$($1_SRCS),$$(addprefix -e$(SPACE)$$(src)/,$$($1_INCLUDES))) + $1_GREP_INCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),\ + $$(addprefix $$(src)/,$$($1_INCLUDES))) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_INCLUDE_PATTERNS,\n, \ + >> $$($1_BIN)/_the.$$($1_JARNAME)_include)) + $1_GREP_INCLUDES:=| $(GREP) -f $$($1_BIN)/_the.$$($1_JARNAME)_include endif ifneq (,$$($1_EXCLUDES)$$($1_EXCLUDE_FILES)) - $1_GREP_EXCLUDES:=| $(GREP) -v $$(foreach src,$$($1_SRCS),$$(addprefix -e$(SPACE)$$(src)/,$$($1_EXCLUDES) $$($1_EXCLUDE_FILES))) + $1_GREP_EXCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),$$(addprefix $$(src)/,\ + $$($1_EXCLUDES) $$($1_EXCLUDE_FILES))) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_EXCLUDE_PATTERNS,\n, \ + >> $$($1_BIN)/_the.$$($1_JARNAME)_exclude)) + $1_GREP_EXCLUDES:=| $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude endif + ifneq (,$$($1_JARINDEX)) + $1_JARINDEX = (cd $$(dir $$@) && $(JAR) -i $$(notdir $$@)) + else + $1_JARINDEX = true + endif + # When this macro is run in the same makefile as the java compilation, dependencies are transfered + # in make variables. When the macro is run in a different makefile than the java compilation, the + # dependencies need to be found in the filesystem. + $1_ALL_SRCS:=$$(foreach src,$$($1_SRCS),$$(shell ($(FIND) $$(src) -type f \ + -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ + $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)))) + ifeq (,$$($1_SKIP_METAINF)) + $1_ALL_SRCS+=$$(foreach src,$$($1_SRCS),$$(shell $(FIND) $$(src)/META-INF -type f 2> /dev/null)) + endif + + # Utility macros, to make the shell script receipt somewhat easier to dechipher. # The capture contents macro finds all files (matching the patterns, typically @@ -187,15 +215,6 @@ define SetupArchive (cd $$(src) && \ $(FIND) . -name _the.package.api.notify -exec dirname \{\} \; >> $$($1_PUBAPI_NOTIFICATIONS_FILE) ; \ true) &&) - # The capture nativeapi macro scans for native api change notificiations. If such notifications are - # found, then we will run javah on the changed classes. It also collects all classes with native methods - # to be used to find out which classes no longer has native methods, to trigger deletion of those .h files. - $1_CAPTURE_NATIVEAPI=$$(foreach src,$$($1_SRCS),\ - (cd $$(src) && \ - $(FIND) . -name _the.package.native.notify | $(SED) 's/package.native.notify/package.native/' | \ - $(XARGS) $(CAT) | $(GREP) '^TYPE ' | $(SED) 's/.*TYPE //' >> $$($1_NATIVEAPI_NOTIFICATIONS_FILE) ; \ - $(FIND) . -name _the.package.native -exec $(CAT) \{\} \; | $(SED) -n 's/^TYPE //p' >> $$($1_NATIVEAPI_FILE) ; \ - true) &&) # The update contents macro updates the jar file with the previously capture contents. $1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (cd $$(src) && \ @@ -205,13 +224,18 @@ define SetupArchive fi) &&) # The s-variants of the above macros are used when the jar is created from scratch. $1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\ - (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > $$(src)/_the.$$($1_JARNAME)_contents) && ) + (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ + $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > \ + $$(src)/_the.$$($1_JARNAME)_contents) && ) + ifeq (,$$($1_SKIP_METAINF)) $1_SCAPTURE_METAINF=$$(foreach src,$$($1_SRCS),\ - ($(FIND) $$(src)/META-INF -type f 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents) && ) + ($(FIND) $$(src)/META-INF -type f 2> /dev/null | $(SED) 's|$$(src)/||g' >> \ + $$(src)/_the.$$($1_JARNAME)_contents) && ) endif $1_SUPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (cd $$(src) && $(JAR) uf $$@ @$$(src)/_the.$$($1_JARNAME)_contents) &&) + # The TOUCH macro is used to make sure all timestamps are identical for package files and the pubapi files. # If we do not do this, we get random recompilations, the next time we run make, since the order of package building is random, # ie independent of package --dependes on-> public api of another package. This is of course @@ -222,8 +246,18 @@ define SetupArchive ($(FIND) $$(src) -name _the.package -exec $(TOUCH) -r $$($1_JAR) \{\} \; ; true) &&) # Use a slightly shorter name for logging, but with enough path to identify this jar. $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR)) + + ifneq (,$$($1_CHECK_COMPRESS_JAR)) + $1_JAR_CREATE_OPTIONS := c0fm + ifeq ($(COMPRESS_JARS), true) + $1_JAR_CREATE_OPTIONS := cfm + endif + else + $1_JAR_CREATE_OPTIONS := cfm + endif + # Here is the rule that creates/updates the jar file. - $$($1_JAR) : $2 + $$($1_JAR) : $2 $$($1_ALL_SRC) $(MKDIR) -p $$($1_BIN) if [ -n "$$($1_MANIFEST)" ]; then \ $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ @@ -231,9 +265,11 @@ define SetupArchive else \ $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE); \ fi - $(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE) + if [ -n "$$(strip $$($1_JARMAIN))" ]; then \ + $(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE); \ + fi if [ -n "$$($1_EXTRA_MANIFEST_ATTR)" ]; then \ - $(ECHO) "$$($1_EXTRA_MANIFEST_ATTR)" >> $$($1_MANIFEST_FILE); \ + $(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE); \ fi +if [ -s $$@ ]; then \ $(RM) -r $$($1_PUBAPI_NOTIFICATIONS_FILE) && \ @@ -255,36 +291,18 @@ define SetupArchive $(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \ fi && \ $$($1_UPDATE_CONTENTS) true && \ + $$($1_JARINDEX) && \ $$($1_TOUCH_API_FILES) true && \ - $(RM) -r $$($1_NATIVEAPI_NOTIFICATIONS_FILE) $$($1_NATIVEAPI_FILE) && \ - $$($1_CAPTURE_NATIVEAPI) true && \ - if [ "x$$($1_JAVAH)" != "x" ] && [ -s $$($1_NATIVEAPI_NOTIFICATIONS_FILE) ]; then \ - $(ECHO) Native api change detected in: && $(CAT) $$($1_NATIVEAPI_NOTIFICATIONS_FILE) && \ - $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_JAR)" -d $$($1_HEADERS) @$$($1_NATIVEAPI_NOTIFICATIONS_FILE) ; \ - fi && \ - $(TOUCH) $$($1_NATIVEAPI_FILE)_prev ; \ - ($(GREP) -xvf $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev > $$($1_NATIVEAPI_FILE)_deleted; true) && \ - $(CP) $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev && \ - if [ -s $$($1_NATIVEAPI_FILE)_deleted ]; then \ - $(ECHO) Native methods dropped from classes: && $(CAT) $$($1_NATIVEAPI_FILE)_deleted && \ - $(RM) `$(CAT) $$($1_NATIVEAPI_FILE)_deleted | $(SED) -e 's|\.|_|g' -e 's|.*|$$($1_HEADERS)/&.h $$($1_HEADERS)/&_*|'` ; \ - fi && \ $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) true ; \ fi ; \ else \ - $(ECHO) Creating $$($1_NAME) && $(JAR) cfm $$@ $$($1_MANIFEST_FILE) && \ + $(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) && \ $$($1_SCAPTURE_CONTENTS) \ $$($1_SCAPTURE_METAINF) \ $$($1_SUPDATE_CONTENTS) \ + $$($1_JARINDEX) && \ $$($1_TOUCH_API_FILES) true && \ $(RM) -r $$($1_NATIVEAPI_NOTIFICATIONS_FILE) $$($1_NATIVEAPI_FILE) && \ - $$($1_CAPTURE_NATIVEAPI) true && \ - if [ "x$$($1_JAVAH)" != "x" ] && [ -s $$($1_NATIVEAPI_FILE) ]; then \ - $(ECHO) Generating native api headers for `$(CAT) $$($1_NATIVEAPI_FILE) | $(WC) -l` classes && \ - $(RM) $$($1_HEADERS)/*.h && \ - $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_JAR)" -d $$($1_HEADERS) @$$($1_NATIVEAPI_FILE) && \ - $(CP) $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev ; \ - fi && \ $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name "*.notify" $(FIND_DELETE); true) &&) true ; \ fi; @@ -297,7 +315,7 @@ endef define SetupZipArchive # param 1 is for example ZIP_MYSOURCE # param 2,3,4,5,6,7,8,9 are named args. - # SRC,ZIP,INCLUDES,EXCLUDES,EXCLUDE_FILES + # SRC,ZIP,INCLUDES,EXCLUDES,EXCLUDE_FILES,SUFFIXES,EXTRA_DEPS $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -306,13 +324,20 @@ define SetupZipArchive $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk)) # Find all files in the source tree. - $1_ALL_SRCS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f -a ! -name "_the.*")) + $1_SUFFIX_FILTER := $$(patsubst %,-o -name $(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) + $1_ALL_SRCS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f -a ! -name "_the.*" \( -name FALSE_DUMMY $$($1_SUFFIX_FILTER) \) )) ifneq ($$($1_INCLUDES),) $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES)))) - $1_ZIP_INCLUDES := $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_INCLUDES))) + ifneq ($$($1_SUFFIXES),) + $1_ZIP_INCLUDES := $$(foreach s,$$($1_SUFFIXES),\ + $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$$s$(DQUOTE),$$($1_INCLUDES)))) + else + $1_ZIP_INCLUDES := $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_INCLUDES))) + endif $1_ALL_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_SRCS)) endif ifneq ($$($1_EXCLUDES),) @@ -329,7 +354,7 @@ define SetupZipArchive # Explicitly excluded files can be given with absolute path. The patsubst solution # isn't perfect but the likelyhood of an absolute path to match something in a src # dir is very small. - $$($1_ZIP) : $$($1_ALL_SRCS) + $$($1_ZIP) : $$($1_ALL_SRCS) $$($1_EXTRA_DEPS) $(MKDIR) -p $$(@D) $(ECHO) Updating $$($1_NAME) $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES)))) ;) true @@ -472,7 +497,7 @@ define add_file_to_copy_and_clean | $(SED) -e '/^#/d' -e '/^$$$$/d' \ -e :a -e '/\\$$$$/N; s/\\\n//; ta' \ -e 's/^[ \t]*//;s/[ \t]*$$$$//' \ - -e 's/\\=/=/' | LANG=C sort > $$@ + -e 's/\\=/=/' | LANG=C $(SORT) > $$@ $(CHMOD) -f ug+w $$@ # And do not forget this target @@ -623,6 +648,7 @@ define SetupJavaCompilation # 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. # HEADERS:=path to directory where all generated c-headers are written. + # DEPENDS:=Extra dependecy $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -636,6 +662,7 @@ define SetupJavaCompilation $(if $(12),$1_$(strip $(12))) $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) + $(if $(15),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk)) # Extract the info from the java compiler setup. $1_MODE := $$($$($1_SETUP)_MODE) @@ -650,9 +677,6 @@ $1_JVM := $$($$($1_SETUP)_JVM) $1_JAVAC := $$($$($1_SETUP)_JAVAC) $1_JAVAH := $$($$($1_SETUP)_JAVAH) $1_FLAGS := $$($$($1_SETUP)_FLAGS) $(JAVAC_FLAGS) $$($1_ADD_JAVAC_FLAGS) -ifeq (,$$($1_HEADERS)) - $1_HEADERS := $$($1_BIN) -endif # Handle addons and overrides. $1_SRC:=$$(call ADD_SRCS,$$($1_SRC)) @@ -679,6 +703,12 @@ $1_BINS := $$(shell $(FIND) $$($1_BIN) -name "*.class") # Now we have a list of all java files to compile: $$($1_SRCS) # and we have a list of all existing class files: $$($1_BINS) +# Create the corresponding smart javac wrapper command line. +$1_SJAVAC_ARGS:=$$(addprefix -x ,$$(addsuffix .*,$$(subst /,.,$$($1_EXCLUDES)))) \ +$$(addprefix -i ,$$(addsuffix .*,$$(subst /,.,$$($1_INCLUDES)))) \ +$$(addprefix -xf *,$$(strip $$($1_EXCLUDE_FILES))) \ +$$(addprefix -if *,$$(strip $$($1_INCLUDE_FILES))) -src $$(subst $$(SPACE),$$(PATH_SEP),$$(strip $$($1_SRC))) + # Prepend the source/bin path to the filter expressions. ifneq ($$($1_INCLUDES),) $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES)))) @@ -776,24 +806,27 @@ ifeq ($$($1_MODE),SINGLE_THREADED_BATCH) $$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_SRC))) endif + ifneq (,$$($1_HEADERS)) + $1_HEADERS_ARG := -h $$($1_HEADERS) + endif + # Create a sed expression to remove the source roots and to replace / with . # and remove .java at the end. $1_REWRITE_INTO_CLASSES:=$$(foreach i,$$($1_SRC),-e 's|$$i/||g') -e 's|/|.|g' -e 's|.java$$$$||g' # Here is the batch rules that depends on all the sources. - $$($1_BIN)/_the.batch: $$($1_SRCS) + $$($1_BIN)/_the.batch: $$($1_SRCS) $$($1_DEPENDS) $(MKDIR) -p $$(@D) $(RM) $$($1_BIN)/_the.batch $$($1_BIN)/_the.batch.tmp $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp) $(ECHO) Compiling `$(WC) $$($1_BIN)/_the.batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in batch $1 - ($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) @$$($1_BIN)/_the.batch.tmp && \ - $$(if $$($1_JAVAH),\ - $(CAT) $$($1_BIN)/_the.batch.tmp | $(XARGS) $(GREP) -E "[[:space:]]native[[:space:]]|@GenerateNativeHeader" |\ - $(GREP) -v '*' | $(GREP) -v '//' | $(CUT) -f 1 -d ':' | $(SORT) -u |\ - $(SED) $$($1_REWRITE_INTO_CLASSES) > $$($1_BIN)/_the.batch.natives && \ - if test -s $$($1_BIN)/_the.batch.natives; then \ - $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_BIN)" -d $$($1_HEADERS) @$$($1_BIN)/_the.batch.natives ; \ - fi &&) \ +ifeq ($$($1_NOSJAVAC),) +ifeq ($$(ENABLE_SJAVAC),yes) + mkdir -p $$($1_BIN)_sjavac + $$($1_JVM) $$(word 1,$$($1_JAVAC)) com.sun.tools.javac.smart.Main $$($1_SJAVAC_ARGS) -mfl $$($1_BIN)/_the.batch.tmp -d $$($1_BIN)_sjavac +endif +endif + ($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.batch.tmp && \ $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch) else # Ok, we have a modern javac server running! @@ -868,6 +901,7 @@ ifneq (,$$($1_JAR)) JARMAIN:=$$($1_JARMAIN),\ MANIFEST:=$$($1_MANIFEST),\ EXTRA_MANIFEST_ATTR:=$$($1_EXTRA_MANIFEST_ATTR),\ + JARINDEX:=$$($1_JARINDEX),\ HEADERS:=$$($1_HEADERS),\ SETUP:=$$($1_SETUP))) endif @@ -883,5 +917,3 @@ ifneq (,$$($1_SRCZIP)) endif endef - - diff --git a/common/makefiles/MakeBase.gmk b/common/makefiles/MakeBase.gmk index 71150ed6443..be0a6726a28 100644 --- a/common/makefiles/MakeBase.gmk +++ b/common/makefiles/MakeBase.gmk @@ -91,6 +91,15 @@ $(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/b > $(BUILDTIMESDIR)/build_time_diff_$1 endef +# Check if the current target is the final target, as specified by +# the user on the command line. If so, call PrintEndMessage. +define CheckIfFinished +$(if $(filter $@,$(MAKECMDGOALS)),$(call PrintEndMessage)) +# If no taget is given, "all" is default. Check for that, too. +# At most one of the tests can be true. +$(if $(MAKECMDGOALS),,$(if $(filter $@,all),$(call PrintEndMessage))) +endef + # Indicate that we are done. # Record ending time and print out the total time it took to build. define MakeFinish @@ -101,6 +110,7 @@ $(BUILD_LOG_WRAPPER) $(PRINTF) "%s\n##### %-60.60s #####\n%s\n##### %-60.60s ### "########################################################################" \ $(if $(REPORT_BUILD_TIMES),"Build time `$(CAT) $(BUILDTIMESDIR)/build_time_diff_$1` for target(s) $2","") \ "########################################################################" +$(call CheckIfFinished) endef # Find all build_time_* files and print their contents in a list sorted @@ -126,6 +136,19 @@ define StopTimer $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),) endef +# Hook to be called as the very first thing when running a normal build +define AtRootMakeStart + $(if $(findstring -j,$(MAKEFLAGS)), $(error make -j is not supported, use make JOBS=n)) + $(call PrintStartMessage) + $(call StartTimer) +endef + +# Hook to be called as the very last thing for targets that are "top level" targets +define AtRootMakeEnd + $(call StopTimer) + $(call CheckIfFinished) +endef + # If the variable that you want to send to stdout for piping into a file or otherwise, # is potentially long, for example the a list of file paths, eg a list of all package directories. # Then you need to use ListPathsSafely, which optimistically splits the output into several shell @@ -324,4 +347,51 @@ define ListPathsSafelyNow endef +# The source tips can come from the Mercurial repository, or in the files +# $(HGTIP_FILENAME) which contains the tip but is also positioned in the same +# directory as the original $(HGDIR) directory. +# These should not be := assignments, only used from the root Makefile. +HG_VERSION = $(shell $(HG) version 2> /dev/null) +HG_DIRECTORY=.hg +HGTIP_FILENAME=.hgtip +HG_SEARCH = ./REPO ./*/REPO ./*/*/REPO ./*/*/*/REPO +REPO_LIST = $(patsubst ./%,%,$(patsubst %/,%,$(sort $(dir \ + $(shell $(CD) $(SRC_ROOT) ; ( $(LS) -d $(HG_SEARCH:%/REPO=%/$(HG_DIRECTORY)) ; \ + $(LS) $(HG_SEARCH:%/REPO=%/$(HGTIP_FILENAME)) ) \ + 2> /dev/null))))) + +# Emit the repo:tip pairs to $@ +define GetSourceTips +$(CD) $(SRC_ROOT) ; \ +for i in $(REPO_LIST) IGNORE ; do \ + if [ "$${i}" = "IGNORE" ] ; then \ + continue; \ + elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \ + $(PRINTF) " %s:%s" \ + "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \ + elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \ + $(PRINTF) " %s:%s" \ + "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \ + fi; \ +done >> $@ +$(PRINTF) "\n" >> $@ +endef + +# Create the HGTIP_FILENAME file. Called from jdk/make/closed/bundles.gmk +define CreateHgTip +$(HG) tip --repository $1 --template '{node|short}\n' > $1/$(HGTIP_FILENAME);\ +$(ECHO) $1/$(HGTIP_FILENAME) +endef + +define SetupLogging + ifneq ($(findstring $(LOG),debug trace),) + # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + OLD_SHELL:=$$(SHELL) + SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + endif +endef + +# Make sure logging is setup for everyone that includes MakeBase.gmk. +$(eval $(call SetupLogging)) + endif # _MAKEBASE_GMK diff --git a/common/makefiles/MakeHelpers.gmk b/common/makefiles/MakeHelpers.gmk new file mode 100644 index 00000000000..9747eb87ae6 --- /dev/null +++ b/common/makefiles/MakeHelpers.gmk @@ -0,0 +1,185 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +################################################################ +# +# This file contains helper functions for the top-level Makefile that does +# not depend on the spec.gmk file having been read. (The purpose of this +# file is ju to avoid cluttering the top-level Makefile.) +# +################################################################ + +ifndef _MAKEHELPERS_GMK +_MAKEHELPERS_GMK := 1 + +############################## +# Stuff to run at include time +############################## + +# Find out which variables were passed explicitely on the make command line. These +# will be passed on to sub-makes, overriding spec.gmk settings. +MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var))) + +list_alt_overrides_with_origins=$(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) +list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) + +############################## +# Functions +############################## + +define fatal-error + # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running + $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) +endef + +define ParseLogLevel + ifeq ($$(origin VERBOSE),undefined) + # Setup logging according to LOG (but only if VERBOSE is not given) + ifeq ($$(LOG),) + # Set LOG to "warn" as default if not set (and no VERBOSE given) + LOG=warn + endif + ifeq ($$(LOG),warn) + VERBOSE=-s + else ifeq ($$(LOG),info) + VERBOSE= + else ifeq ($$(LOG),debug) + VERBOSE= + else ifeq ($$(LOG),trace) + VERBOSE=-d -p + else + $$(info Error: LOG must be one of: warn, info, debug or trace.) + $$(eval $$(call fatal-error)) + endif + else + ifneq ($$(LOG),) + # We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use LOG=$$(LOG) and VERBOSE=$$(VERBOSE) at the same time. Choose one.) + $$(eval $$(call fatal-error)) + endif + endif + endif +endef + +# TODO: Fix duplication in MakeBase.gmk +define SetupLogging + ifneq ($(findstring $(LOG),debug trace),) + # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + OLD_SHELL:=$$(SHELL) + SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + endif +endef + +define ParseConfAndSpec + ifneq ($$(origin SPEC),undefined) + # We have been given a SPEC, check that it works out properly + ifeq ($$(wildcard $$(SPEC)),) + $$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC)) + $$(eval $$(call fatal-error)) + endif + ifneq ($$(origin CONF),undefined) + # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) + $$(eval $$(call fatal-error)) + endif + endif + # ... OK, we're satisfied, we'll use this SPEC later on + else + # Find all spec.gmk files in the build output directory + output_dir=$$(root_dir)/build + all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk) + ifeq ($$(all_spec_files),) + $$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.) + $$(eval $$(call fatal-error)) + endif + # Extract the configuration names from the path + all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files))) + + ifneq ($$(origin CONF),undefined) + # User have given a CONF= argument. + ifeq ($$(CONF),) + # If given CONF=, match all configurations + matching_confs=$$(strip $$(all_confs)) + else + # Otherwise select those that contain the given CONF string + matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var)))) + endif + ifeq ($$(matching_confs),) + $$(info No configurations found matching CONF=$$(CONF)) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(eval $$(call fatal-error)) + else + ifeq ($$(words $$(matching_confs)),1) + $$(info Building '$$(matching_confs)' (matching CONF=$$(CONF))) + else + $$(info Building the following configurations (matching CONF=$$(CONF)):) + $$(foreach var,$$(matching_confs),$$(info * $$(var))) + endif + endif + + # Create a SPEC definition. This will contain the path to one or more spec.gmk files. + SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs))) + else + # No CONF or SPEC given, check the available configurations + ifneq ($$(words $$(all_spec_files)),1) + $$(info No CONF or SPEC given, but more than one spec.gmk found in $$(output_dir).) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(info Please retry building with CONF= or SPEC=) + $$(eval $$(call fatal-error)) + endif + + # We found exactly one configuration, use it + SPEC=$$(strip $$(all_spec_files)) + endif + endif +endef + +define CheckEnvironment + # Find all environment or command line variables that begin with ALT. + $(if $(list_alt_overrides), + @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" + @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" + @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n" + ) +endef + +define PrintStartMessage + $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) + $(call CheckEnvironment) + @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" +endef + +define PrintEndMessage + @$(ECHO) "Finished building OpenJDK for target '$@'" + $(call CheckEnvironment) +endef + +endif # _MAKEHELPERS_GMK diff --git a/common/makefiles/Makefile b/common/makefiles/Makefile index 815f3c01c16..de5da99f78b 100644 --- a/common/makefiles/Makefile +++ b/common/makefiles/Makefile @@ -23,120 +23,152 @@ # questions. # -# Default to sane output from make. -# Override with empty string to get insane amount of output. -# Override with -d to get even more insane amount of debugging output. -# Override with "-d -p" to get it all. -VERBOSE=-s +# This must be the first rule +default: all -# Find all environment or command line variables that begin with ALT. -list_alt_overrides_with_origins = $(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) -list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) -ifneq ($(list_alt_overrides),) - $(info You have set the following ALT_ variables:) - $(foreach var,$(list_alt_overrides), $(info $(var)=$($(var)))) - $(error Using ALT_ variables is deprecated! Please clean your environment!) +# Locate this Makefile +ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) + makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) +else + makefile_path:=$(lastword $(MAKEFILE_LIST)) endif +root_dir:=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path)) -# The spec.gmk file contains the variables extracted by the configure script. -# It is usually set with SPEC=....spec.gmk on the make command line. -# However if you simply type make from the openjdk source root, it will go looking -# for a spec file, if only one is found, use it. If more than one is found, -# complain. If none is found, request the user to run configure! -SPEC ?= $(wildcard $(CURDIR)/../../build/*/spec.gmk) +# ... and then we can include our helper functions +include $(dir $(makefile_path))/MakeHelpers.gmk -ifeq ($(words $(SPEC)),0) - $(error You must run configure!) +$(eval $(call ParseLogLevel)) +$(eval $(call SetupLogging)) +$(eval $(call ParseConfAndSpec)) + +# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line, +# hence this workaround. +ifeq ($(JOBS),) + JOBS=$(NUM_CORES) endif ifneq ($(words $(SPEC)),1) - ifeq ($(MAKECMDGOALS),all-conf) - SPECS:=$(shell echo $(SPEC) | sed -e 's|$(CURDIR)/build/||g' -e 's|/spec.gmk|\\n|g' -e 's| ||g') - allconf: - @echo Building configurations: - @printf "$(SPECS)" - @$(foreach s,$(SPEC),($(MAKE) SPEC=$s $(VERBOSE) VERBOSE=$(VERBOSE) images) &&) true - @echo Done building configurations: - @printf "$(SPECS)" - .PHONY: all-conf - else - $(error Since you have more than one output dir configured under build, \ - you have to either run make from the output dir of your choice \ - or specify run "make SPEC=build/.../spec.gmk" or run all the build configurations \ - using "make all-conf") - endif +### We have multiple configurations to build, call make repeatedly +all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean: + @$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@ $(MAKE_ARGS)) &&) true + +.PHONY: all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean + else +### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. # Now load the spec --include $(SPEC) +include $(SPEC) # Load the vital tools for all the makefiles. --include $(SRC_ROOT)/common/makefiles/MakeBase.gmk +include $(SRC_ROOT)/common/makefiles/MakeBase.gmk -# Remove any build.log from a previous run +### Clean up from previous run + +# Remove any build.log from a previous run, if they exist ifneq (,$(BUILD_LOG)) - $(shell $(RM) $(BUILD_LOG)) + ifneq (,$(BUILD_LOG_PREVIOUS)) + # Rotate old log + $(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + $(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + else + $(shell $(RM) $(BUILD_LOG) 2> /dev/null) + endif endif - # Remove any javac server logs and port files. This # prevents a new make run to reuse the previous servers. ifneq (,$(JAVAC_SERVERS)) $(shell mkdir -p $(JAVAC_SERVERS) && rm -rf $(JAVAC_SERVERS)/*) endif -# Reset the build timers. -$(eval $(call ResetTimers)) # Clean out any notifications from the previous build. $(shell find $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE)) -all: jdk - @$(call StopTimer) - @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) +# Reset the build timers. +$(eval $(call ResetTimers)) -langtools: start-timer +### Main targets + +all: jdk + @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) + @$(call AtRootMakeEnd) + +langtools: start-make langtools-only +langtools-only: @$(call MakeStart,langtools,all) - @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(LANGTOOLS_MAKE_ARGS)) + @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,langtools,all) -corba: langtools +corba: langtools corba-only +corba-only: @$(call MakeStart,corba,all) - @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS)) + @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,corba,all) -jaxp: langtools +jaxp: langtools jaxp-only +jaxp-only: @$(call MakeStart,jaxp,all) - @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS)) + @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jaxp,all) -jaxws: langtools jaxp +jaxws: langtools jaxp jaxws-only +jaxws-only: @$(call MakeStart,jaxws,all) - @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS)) + @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jaxws,all) -hotspot: langtools +hotspot: langtools hotspot-only +hotspot-only: @$(call MakeStart,hotspot,all) - @($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS)) + @($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,hotspot,all) -jdk: langtools corba jaxp jaxws hotspot +jdk: langtools corba jaxp jaxws hotspot jdk-only +jdk-only: @$(call MakeStart,jdk,all) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(JDK_MAKE_ARGS)) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jdk,all) -images install packages: start-timer jdk langtools corba jaxp jaxws hotspot +images: source-tips start-make jdk langtools corba jaxp jaxws hotspot images-only +images-only: @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(JDK_MAKE_ARGS) $@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) images) @$(call MakeFinish,jdk-images,$@) - @$(call StopTimer) @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) + @$(call AtRootMakeEnd) -start-timer: - @$(call StartTimer) +install: source-tips start-make jdk langtools corba jaxp jaxws hotspot install-only +install-only: + @$(call MakeStart,jdk-images,$@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) install) + @$(call MakeFinish,jdk-images,$@) + @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) + @$(call AtRootMakeEnd) + +start-make: + @$(call AtRootMakeStart) + +.PHONY: jdk hotspot jaxws jaxp corba langtools install images start-make + +test: start-make + @$(call MakeStart,test,$(if $(TEST),$(TEST),all)) + @($(CD) $(SRC_ROOT)/test && $(BUILD_LOG_WRAPPER) $(MAKE) MAKEFLAGS= -j1 PRODUCT_HOME=$(OUTPUT_ROOT)/jdk JPRT_JAVA_HOME=$(OUTPUT_ROOT)/jdk ALT_OUTPUTDIR=$(OUTPUT_ROOT) $(TEST)) || true + @$(call MakeFinish,test,$(if $(TEST),$(TEST),all)) + @$(call AtRootMakeEnd) +.PHONY: test + + +# Stores the tips for each repository. This file is be used when constructing the jdk image and can be +# used to track the exact sources used to build that image. +source-tips: $(OUTPUT_ROOT)/source_tips +$(OUTPUT_ROOT)/source_tips: FRC + @$(MKDIR) -p $(@D) + @$(RM) $@ + @$(call GetSourceTips) -.PHONY: jdk hotspot jaxws jaxp corba langtools install images packages start-timer # Remove everything, except the output from configure. clean: - @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`) + @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`) @$(ECHO) Cleaned everything except the build configuration. .PHONY: clean @@ -147,30 +179,40 @@ dist-clean: .PHONY: dist-clean clean-jdk: - @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \ + @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \ grep -v langtools | grep -v corba | grep -v jaxp | grep -v jaxws | grep -v hotspot`) @$(ECHO) "Cleaned jdk build artifacts (but not langtools,corba,jaxp,jaxws,hotspot nor the build configuration)" .PHONY: clean -help: - $(info ) - $(info Typical make commands:) - $(info make) - $(info make VERBOSE= # print all commands) - $(info make VERBOSE="-d -p" # debug make as well) - $(info make all-conf # build images for all configurations) - $(info make clean # remove build artifacts) - $(info make dist-clean # you have to rerun configure) -# $(info make test # run tests) - $(info make images # create the jdk and jre images) - $(info make install # install the jdk image) -# $(info make modules # EXPERIMENTAL: Migrate JDK into a modularized form!) - $(info make packages # create zips and other packages) - -# $(info make eclipse_workspace # Create an Eclipse workspace) -# $(info make netbeans_workspace # Create a NetBeans workspace) -# $(info make vs_workspace # Create a Visual Studio workspace) - -.PHONY: help - endif + +# Here are "global" targets, i.e. targets that can be executed without specifying a single configuration. +# If you addd more global targets, please update the fatal-error macro. + +help: + $(info ) + $(info OpenJDK Makefile help) + $(info =====================) + $(info ) + $(info Common make targets) + $(info . make [all] # Compile all code but do not create images) + $(info . make images # Create complete j2sdk and j2re images) + $(info . make install # Install the generated images locally) + $(info . make clean # Remove all files generated by make, but not those generated by configure) + $(info . make dist-clean # Remove all files generated by both make and configure) + $(info . make help # Give some help on using make) + $(info . make test # Run tests, default is all tests (see TEST below)) + $(info ) + $(info Useful make variables) + $(info . make CONF= # Build all configurations (note, assignment is empty)) + $(info . make CONF= # Build the configuration(s) with a name matching the given substring) + $(info ) + $(info . make LOG= # Change loglevel from warn (default) to the given loglevel) + $(info . # Available loglevels are: warn, info, debug and trace) + $(info . # To see executed command lines, use LOG=info) + $(info ) + $(info . make test TEST= # Only run the given test or tests, e.g.) + $(info . # make test TEST="jdk_lang jdk_net") + $(info ) +.PHONY: help +FRC: # Force target diff --git a/common/makefiles/NativeCompilation.gmk b/common/makefiles/NativeCompilation.gmk index eedffe72d5b..6818a501226 100644 --- a/common/makefiles/NativeCompilation.gmk +++ b/common/makefiles/NativeCompilation.gmk @@ -28,7 +28,7 @@ # desired whenever sort is used below! ifeq (,$(_MAKEBASE_GMK)) - $(error You must include MakeBase.gmk prior to including JavaCompilation.gmk) + $(error You must include MakeBase.gmk prior to including NativeCompilation.gmk) endif ifeq ($(COMPILER_TYPE),CC) @@ -51,40 +51,55 @@ define add_native_source # param 5 = the c compiler # param 6 = the c++ flags to the compiler # param 7 = the c++ compiler + # param 8 = the flags to the assembler ifneq (,$$(filter %.c,$2)) # Compile as a C file - $1_$2_FLAGS=$4 + $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -c $1_$2_COMP=$5 + $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) + else ifneq (,$$(filter %.m,$2)) + # Compile as a objective-c file + $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -c + $1_$2_COMP=$5 + $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) + else ifneq (,$$(filter %.s,$2)) + # Compile as assembler file + $1_$2_FLAGS=$8 + $1_$2_COMP=$(AS) + $1_$2_DEP_FLAG:= else # Compile as a C++ file - $1_$2_FLAGS=$6 + $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -c $1_$2_COMP=$7 + $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS) endif # Generate the .o (.obj) file name and place it in the bin dir. - $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(notdir $2))) + $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $2))))) # Only continue if this object file hasn't been processed already. This lets the first found # source file override any other with the same name. ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR))) $1_OBJS_SO_FAR+=$$($1_$2_OBJ) - # And this is the dependency file for this obj file. - $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) - # Include previously generated dependency information. (if it exists) - -include $$($1_$2_DEP) + ifeq (,$$(filter %.s,$2)) + # And this is the dependency file for this obj file. + $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) + # Include previously generated dependency information. (if it exists) + -include $$($1_$2_DEP) - ifeq ($(COMPILER_TYPE),CL) - $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ - -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) + ifeq ($(COMPILER_TYPE),CL) + $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ + -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) + endif endif $$($1_$2_OBJ) : $2 ifeq ($(COMPILER_TYPE),CC) $$(call COMPILING_MSG,$$(notdir $2)) - $$($1_$2_COMP) $$($1_$2_FLAGS) -MMD -MF $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif ifeq ($(COMPILER_TYPE),CL) $$(call COMPILING_MSG,$$(notdir $2)) - $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif endif endef @@ -100,15 +115,20 @@ define SetupNativeCompilation # LDFLAGS_SUFFIX the linker flags to be added last on the commandline # typically the libraries linked to. # ARFLAGS the archiver flags to be used - # BIN the directory where we store the object files - # LIB the resulting library file - # EXE the resulting exec file + # OBJECT_DIR the directory where we store the object files + # LIBRARY the resulting library file + # PROGRAM the resulting exec file # INCLUDES only pick source from these directories # EXCLUDES do not pick source from these directories # INCLUDE_FILES only compile exactly these files! # EXCLUDE_FILES with these names # VERSIONINFO_RESOURCE Input file for RC. Setting this implies that RC will be run # RC_FLAGS flags for RC. + # MAPFILE mapfile + # REORDER reorder file + # DEBUG_SYMBOLS add debug symbols (if configured on) + # CC the compiler to use, default is $(CC) + # LDEXE the linker to use for linking executables, default is $(LDEXE) $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -128,13 +148,94 @@ define SetupNativeCompilation $(if $(18),$1_$(strip $(18))) $(if $(19),$1_$(strip $(19))) $(if $(20),$1_$(strip $(20))) + $(if $(21),$1_$(strip $(21))) + $(if $(22),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk)) + + ifneq (,$$($1_BIN)) + $$(error BIN has been replaced with OBJECT_DIR) + endif + + ifneq (,$$($1_LIB)) + $$(error LIB has been replaced with LIBRARY) + endif + + ifneq (,$$($1_EXE)) + $$(error EXE has been replaced with PROGRAM) + endif + + ifneq (,$$($1_LIBRARY)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error LIBRARY requires OUTPUT_DIR) + endif + + ifneq ($$($1_LIBRARY),$(basename $$($1_LIBRARY))) + $$(error directory of LIBRARY should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(SHARED_LIBRARY_SUFFIX),$$($1_LIBRARY))) + $$(error LIBRARY should be specified without SHARED_LIBRARY_SUFFIX: $(SHARED_LIBRARY_SUFFIX)) + endif + + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_LIBRARY))) + $$(error LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) + endif + + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_LIBRARY)$(SHARED_LIBRARY_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + + endif + + ifneq (,$$($1_STATIC_LIBRARY)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error STATIC_LIBRARY requires OUTPUT_DIR) + endif + + ifneq ($$($1_STATIC_LIBRARY),$(basename $$($1_STATIC_LIBRARY))) + $$(error directory of STATIC_LIBRARY should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(STATIC_LIBRARY_SUFFIX),$$($1_STATIC_LIBRARY))) + $$(error STATIC_LIBRARY should be specified without STATIC_LIBRARY_SUFFIX: $(STATIC_LIBRARY_SUFFIX)) + endif + + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_STATIC_LIBRARY))) + $$(error STATIC_LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) + endif + + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)$(STATIC_LIBRARY_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + endif + + ifneq (,$$($1_PROGRAM)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error PROGRAM requires OUTPUT_DIR) + endif + + ifneq ($$($1_PROGRAM),$(basename $$($1_PROGRAM))) + $$(error directory of PROGRAM should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(EXE_SUFFIX),$$($1_PROGRAM))) + $$(error PROGRAM should be specified without EXE_SUFFIX: $(EXE_SUFFIX)) + endif + + $1_BASENAME:=$$($1_PROGRAM)$(EXE_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + + endif + + ifeq (,$$($1_TARGET)) + $$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation) + endif ifeq (,$$($1_LANG)) $$(error You have to specify LANG for native compilation $1) endif ifeq (C,$$($1_LANG)) + ifeq ($$($1_LDEXE),) + $1_LDEXE:=$(LDEXE) + endif $1_LD:=$(LD) - $1_LDEXE:=$(LDEXE) else ifeq (C++,$$($1_LANG)) $1_LD:=$(LDCXX) @@ -144,8 +245,12 @@ define SetupNativeCompilation endif endif + ifeq ($$($1_CC),) + $1_CC:=$(CC) + endif + # Make sure the dirs exist. - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN) $$(dir $$($1_LIB)) $$(dir $$($1_EXE))) + $$(shell $(MKDIR) -p $$($1_SRC) $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) # Find all files in the source trees. Sort to remove duplicates. $1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f))) # Extract the C/C++ files. @@ -154,7 +259,7 @@ define SetupNativeCompilation ifneq ($$($1_EXCLUDE_FILES),) $1_EXCLUDE_FILES:=$$(addprefix %,$$($1_EXCLUDE_FILES)) endif - $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp,$$($1_ALL_SRCS))) + $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.s %.c %.cpp %.m,$$($1_ALL_SRCS))) ifneq (,$$(strip $$($1_INCLUDE_FILES))) $1_SRCS := $$(filter $$($1_INCLUDE_FILES),$$($1_SRCS)) endif @@ -162,7 +267,7 @@ define SetupNativeCompilation $$(error No sources found for $1 when looking inside the dirs $$($1_SRC)) endif # There can be only a single bin dir root, no need to foreach over the roots. - $1_BINS := $$(wildcard $$($1_BIN)/*$(OBJ_SUFFIX)) + $1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX)) # Now we have a list of all c/c++ files to compile: $$($1_SRCS) # and we have a list of all existing object files: $$($1_BINS) @@ -178,37 +283,36 @@ define SetupNativeCompilation # Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides # a reproducable order on the input files to the linker). - $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS)))))) - $1 := $$($1_EXPECTED_OBJS) + $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_OBJECT_DIR)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS)))))))) # Are there too many object files on disk? Perhaps because some source file was removed? $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) # Clean out the superfluous object files. $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CFLAGS. - $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(HOST_OS_API)) $$($1_CFLAGS_$(PLATFORM)) + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CFLAGS. + $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) ifneq ($(DEBUG_LEVEL),release) # Pickup extra debug dependent variables for CFLAGS $1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_debug) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_debug) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_debug) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug) else $1_EXTRA_CFLAGS+=$$($1_CFLAGS_release) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_release) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_release) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_release) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release) endif - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CXXFLAGS. - $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(HOST_OS_API)) $$($1_CXXFLAGS_$(PLATFORM)) + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS. + $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)) ifneq ($(DEBUG_LEVEL),release) # Pickup extra debug dependent variables for CXXFLAGS $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_debug) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_debug) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_debug) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug) else $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_release) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_release) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_release) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release) endif ifeq ($$($1_CXXFLAGS),) @@ -218,60 +322,252 @@ define SetupNativeCompilation $1_EXTRA_CXXFLAGS:=$$($1_EXTRA_CFLAGS) endif + ifneq (,$$($1_REORDER)) + $1_EXTRA_CFLAGS += $$(C_FLAG_REORDER) + $1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER) + endif + + ifneq (no, $(ENABLE_DEBUG_SYMBOLS)) + ifneq ($(OPENJDK_TARGET_OS), solaris) +# +# There is very weird code in Defs-solaris.gmk that first sets variables as decribed below +# and then a couple of hundreds of line below resets them... +# this feels like a sure bug...but before this is confirmed, mimic this behaviour +# (note: skip indenting this as it will surely be removed anyway) +# + + ifneq (,$$($1_DEBUG_SYMBOLS)) + $1_OPTIMIZATION := LOW + $1_EXTRA_CFLAGS += $(CFLAGS_DEBUG_SYMBOLS) + $1_EXTRA_CXXFLAGS += $(CXXFLAGS_DEBUG_SYMBOLS) + endif + +# + endif +# + endif + + ifeq (NONE, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NONE) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NONE) + else ifeq (LOW, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NORM) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NORM) + else ifeq (HIGH, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HI) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HI) + else ifeq (HIGHEST, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HIGHEST) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HIGHEST) + else ifneq (, $$($1_OPTIMIZATION)) + $$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION)) + endif + # Now create a list of the packages that are about to compile. Used when sending source # in a batch to the compiler. - $$(shell $(RM) $$($1_BIN)/_the.list_of_sources) - $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_BIN)/_the.list_of_sources)) + $$(shell $(RM) $$($1_OBJECT_DIR)/_the.list_of_sources) + $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_OBJECT_DIR)/_the.list_of_sources)) # Now call add_native_source for each source file we are going to compile. $$(foreach p,$$($1_SRCS),\ - $$(eval $$(call add_native_source,$1,$$p,$$($1_BIN),\ - $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$(CC),\ - $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX)))) + $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR),\ + $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$$($1_CC),\ + $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX),$$($1_ASFLAGS)))) # On windows we need to create a resource file - ifeq ($(HOST_OS_API), winapi) + ifeq ($(OPENJDK_TARGET_OS_API), winapi) ifneq (,$$($1_VERSIONINFO_RESOURCE)) - ifneq (,$$($1_LIB)) - ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB))) - $1_RES:=$$(patsubst %$(SHARED_LIBRARY_SUFFIX),%.res,$$($1_LIB)) - else - $1_RES:=$$(patsubst %$(STATIC_LIBRARY_SUFFIX),%.res,$$($1_LIB)) - endif - endif - ifneq (,$$($1_EXE)) - $1_RES:=$$(patsubst %$(EXE_SUFFIX),%.res,$$($1_EXE)) - endif + $1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res $$($1_RES): $$($1_VERSIONINFO_RESOURCE) $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE) endif + ifneq (,$$($1_MANIFEST)) + $1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest + IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER) + $$($1_GEN_MANIFEST): $$($1_MANIFEST) + $(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@ + endif endif - # Pickup extra HOST_OS_API dependent variables (posix or winapi) and - # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX - $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(HOST_OS_API)) $$($1_LDFLAGS_$(PLATFORM)) - $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(HOST_OS_API)) $$($1_LDFLAGS_SUFFIX_$(PLATFORM)) - ifneq (,$$($1_LIB)) - ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB))) - # Generating a dynamic library. - $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$(notdir $$($1_LIB))) - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) - $$(call LINKING_MSG,$$(notdir $$($1_LIB))) - $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$($1_LIB) \ - $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) - else - # Generating a static library, ie object file archive. - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) - $$(call ARCHIVING_MSG,$$(notdir $$($1_LIB))) - $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_LIB) $$($1_EXPECTED_OBJS) \ - $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) - endif + # mapfile doesnt seem to be implemented on macosx (yet??) + ifneq ($(OPENJDK_TARGET_CPU),ppc) + ifneq ($(OPENJDK_TARGET_CPU),arm) + ifneq ($(OPENJDK_TARGET_OS),macosx) + ifneq ($(OPENJDK_TARGET_OS),windows) + $1_REAL_MAPFILE:=$$($1_MAPFILE) + ifneq (,$$($1_REORDER)) + $1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile + + $$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER) + $$(MKDIR) -p $$(@D) + $$(CP) $$($1_MAPFILE) $$@.tmp + $$(SED) -e 's=OUTPUTDIR=$$($1_OBJECT_DIR)=' $$($1_REORDER) >> $$@.tmp + $$(MV) $$@.tmp $$@ + endif endif - ifneq (,$$($1_EXE)) + endif + endif + endif + + # Pickup extra OPENJDK_TARGET_OS_API dependent variables (posix or winapi) and + # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX + $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS)) + $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS)) + ifneq (,$$($1_REAL_MAPFILE)) + $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) + endif + + $1 := $$($1_TARGET) + ifneq (,$$($1_LIBRARY)) + # Generating a dynamic library. + $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME)) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-implib:$$($1_OBJECT_DIR)/$$($1_LIBRARY).lib" + endif + + ifneq (,$$($1_DEBUG_SYMBOLS)) + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_LIBRARY).pdb" \ + "-map:$$($1_OBJECT_DIR)/$$($1_LIBRARY).map" + endif + + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% + $(CP) $$< $$@ + + + 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) $$< + $(OBJCOPY) --only-keep-debug $$< $$@ + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@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) $$@ + + ifeq ($(ZIP_DEBUGINFO_FILES), 1) + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz + + ifeq ($(OPENJDK_TARGET_OS), windows) + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_LIBRARY).map $$($1_LIBRARY).pdb + else + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) \ + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + endif + else + ifeq ($(OPENJDK_TARGET_OS), windows) + $1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \ + $$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb + else + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + endif + endif + endif + endif + + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) + $$(call LINKING_MSG,$$($1_BASENAME)) + $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$@ \ + $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ + $$($1_EXTRA_LDFLAGS_SUFFIX) + + endif + + ifneq (,$$($1_STATIC_LIBRARY)) + # Generating a static library, ie object file archive. + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) + $$(call ARCHIVING_MSG,$$($1_LIBRARY)) + $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ + $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) + endif + + ifneq (,$$($1_PROGRAM)) # A executable binary has been specified, setup the target for it. - $$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES) - $$(call LINKING_EXE_MSG,$$(notdir $$($1_EXE))) - $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_EXE) \ - $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) + ifneq (,$$($1_DEBUG_SYMBOLS)) + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_PROGRAM).pdb" \ + "-map:$$($1_OBJECT_DIR)/$$($1_PROGRAM).map" + endif + + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% + $(CP) $$< $$@ + + 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) $$< + $(OBJCOPY) --only-keep-debug $$< $$@ + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@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) $$@ + + ifeq ($(ZIP_DEBUGINFO_FILES), 1) + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz + + ifeq ($(OPENJDK_TARGET_OS), windows) + $$($1_OBJECT_DIR)/$$($1_PROGRAM).diz : $$($1_TARGET) + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_PROGRAM).map $$($1_PROGRAM).pdb + else + $$($1_OBJECT_DIR)/$$(PROGRAM_PREFIX)$$($1_PROGRAM).diz : $$($1_TARGET) \ + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_PROGRAM).debuginfo + endif + else + ifeq ($(OPENJDK_TARGET_OS), windows) + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \ + $$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb + else + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo + endif + endif + endif + endif + + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) + $$(call LINKING_EXE_MSG,$$($1_BASENAME)) + $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_TARGET) \ + $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ + $$($1_EXTRA_LDFLAGS_SUFFIX) + ifneq (,$$($1_GEN_MANIFEST)) + $(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1 + endif + endif endef diff --git a/common/makefiles/RMICompile.gmk b/common/makefiles/RMICompilation.gmk similarity index 97% rename from common/makefiles/RMICompile.gmk rename to common/makefiles/RMICompilation.gmk index b6168dae7be..65ba9e621f9 100644 --- a/common/makefiles/RMICompile.gmk +++ b/common/makefiles/RMICompilation.gmk @@ -42,6 +42,7 @@ define SetupRMICompilation $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk)) $1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic diff --git a/corba/.hgtags b/corba/.hgtags index ec31f642407..b050c3a8b3c 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -160,3 +160,14 @@ e3d735914edd0a621b16bb85417423f8e6af5d51 jdk8-b35 a5a61f259961a7f46b002e5cc50b4a9bf86927b6 jdk8-b36 83fac66442cf680bb59ec9e3a71cc4729322b595 jdk8-b37 b8cbfb31139f820e5e094ba71449e58159fbe22e jdk8-b38 +785af00e2827990f149b32ec37f523dbca3efdd1 jdk8-b39 +56d030e5035fdee5bba6cf318a06287fda5d67ec jdk8-b40 +113f0d5f0a08aa0947b3edf783b603e7f042748a jdk8-b41 +79cc42c9c71bbd6630ede681642e98f5e4a841fa jdk8-b42 +cd879aff5d3cc1f58829aab3116880aa19525b78 jdk8-b43 +439d9bf8e4ff204cc89c9974c1515a508b2cc6ff jdk8-b44 +747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45 +30141e598d72a6146126cb86b034ed6d0bd191b3 jdk8-b46 +21e46ea21c6a26246fb7a1926ac7fe8d580d0518 jdk8-b47 +7e2b179a5b4dbd3f097e28daa00abfcc72ba3e0b jdk8-b48 +fe44e58a6bdbeae350ce96aafb49770a5dca5d8a jdk8-b49 diff --git a/corba/make/common/shared/Platform.gmk b/corba/make/common/shared/Platform.gmk index a3fe6d5ff21..822c1e787b8 100644 --- a/corba/make/common/shared/Platform.gmk +++ b/corba/make/common/shared/Platform.gmk @@ -143,7 +143,7 @@ ifeq ($(SYSTEM_UNAME), SunOS) REQUIRED_FREE_SPACE=1040000 endif # How much RAM does this machine have: - MB_OF_MEMORY=$(shell /etc/prtconf | fgrep 'Memory size:' | expand | cut -d' ' -f3) + MB_OF_MEMORY:=$(shell /usr/sbin/prtconf 2>/dev/null | fgrep 'Memory size:' | expand | cut -d' ' -f3) endif # Platform settings specific to Linux diff --git a/corba/makefiles/Makefile b/corba/makefiles/Makefile index 6cd7dfa735d..c97c32dd07d 100644 --- a/corba/makefiles/Makefile +++ b/corba/makefiles/Makefile @@ -27,13 +27,14 @@ # Makefile for building the corba workspace. # +# This must be the first rule +default: all + include $(SPEC) include MakeBase.gmk include JavaCompilation.gmk include IdlCompilation.gmk -default: all - JAVAC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar # The Corba sources are old and generates a LOT of warnings. @@ -105,9 +106,9 @@ $(eval $(call SetupArchive,ARCHIVE_LOGUTIL,$(BUILD_LOGUTIL),\ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/%SystemException.java : \ $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc \ $(CORBA_OUTPUTDIR)/btjars/logutil.jar - mkdir -p $(@D) - rm -f $(@D)/_the_wrappers.d - echo Generating class file from $*.mc + $(MKDIR) -p $(@D) + $(RM) -f $(@D)/_the_wrappers.d + $(ECHO) Generating class file from $*.mc $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-class $< $(@D) # Generate LogWrapper properties file by concatening resource files @@ -120,15 +121,15 @@ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properti $(CORBA_OUTPUTDIR)/logwrappers/ORBUtilSystemException.resource \ $(CORBA_OUTPUTDIR)/logwrappers/POASystemException.resource \ $(CORBA_OUTPUTDIR)/logwrappers/UtilSystemException.resource - mkdir -p $(@D) - echo Concatenating 8 resource files into $(@F) + $(MKDIR) -p $(@D) + $(ECHO) Concatenating 8 resource files into $(@F) $(CAT) $^ > $@ # The resources files are generated from lisp-like .mc files. $(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource : $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc $(CORBA_OUTPUTDIR)/btjars/logutil.jar - mkdir -p $(@D) - rm -f $(@D)/_the_wrappers.d - echo Generating resource file from $*.mc + $(MKDIR) -p $(@D) + $(RM) -f $(@D)/_the_wrappers.d + $(ECHO) Generating resource file from $*.mc $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-resource $< $(@D) @@ -142,8 +143,8 @@ $(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d : $(CORBA_OUTPUTDIR)/btjars/logut $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/POASystemException.java \ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/UtilSystemException.java \ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties - mkdir -p $(@D) - echo LOGWRAPPERS_ARE_CREATED=yes > $@ + $(MKDIR) -p $(@D) + $(ECHO) LOGWRAPPERS_ARE_CREATED=yes > $@ # Trigger the generation of the logwrappers. After the logwrapper classes and # resources have been created, then the makefile will restart and the newly @@ -167,8 +168,8 @@ ifeq ($(LOGWRAPPERS_ARE_CREATED),yes) $(BUILD_IDLS) : $(CORBA_OUTPUTDIR)/btjars/idlj.jar $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d : $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/btjars/idlj.jar - mkdir -p $(@D) - echo IDLS_ARE_CREATED=yes > $@ + $(MKDIR) -p $(@D) + $(ECHO) IDLS_ARE_CREATED=yes > $@ -include $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d @@ -229,15 +230,16 @@ ifeq ($(LOGWRAPPERS_ARE_CREATED),yes) # The created src.zip now contains .java and .properties files used to create the classes in classes.jar # and is ready for inclusion into the jdk src.zip - BIN_FILES:=$(CORBA_TOPDIR)/src/share/classes/org/omg/CORBA/orb.idl $(CORBA_TOPDIR)/src/share/classes/org/omg/CORBA/ir.idl + BIN_FILES:=$(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/orb.idl \ + $(CORBA_TOPDIR)/src/share/classes/com/sun/tools/corba/se/idl/ir.idl $(CORBA_OUTPUTDIR)/dist/lib/bin.zip : $(BIN_FILES) $(CORBA_OUTPUTDIR)/dist/lib/classes.jar - mkdir -p $(CORBA_OUTPUTDIR)/dist/lib - mkdir -p $(CORBA_OUTPUTDIR)/lib - rm -f $@ - echo Creating `basename $@` - cp $(CORBA_TOPDIR)/src/share/classes/org/omg/CORBA/*.idl $(CORBA_OUTPUTDIR)/lib - chmod ug+w $(CORBA_OUTPUTDIR)/lib/* + $(MKDIR) -p $(CORBA_OUTPUTDIR)/dist/lib + $(MKDIR) -p $(CORBA_OUTPUTDIR)/lib + $(RM) -f $@ + $(ECHO) Creating `basename $@` + $(CP) $(BIN_FILES) $(CORBA_OUTPUTDIR)/lib + $(CHMOD) ug+w $(CORBA_OUTPUTDIR)/lib/* (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl) # The created bin.zip now contains the corba specific binaries: orb.idl, ir.idl @@ -252,6 +254,6 @@ ifeq ($(LOGWRAPPERS_ARE_CREATED),yes) endif clean: - rm -rf $(CORBA_OUTPUTDIR) + $(RM) -rf $(CORBA_OUTPUTDIR) .PHONY: default all clean clobber diff --git a/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java index 4b08a1ce249..3e698764e8d 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,6 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ - package com.sun.corba.se.impl.encoding; import java.util.Hashtable; @@ -32,7 +31,8 @@ import com.sun.org.omg.SendingContext.CodeBaseHelper; import com.sun.org.omg.SendingContext._CodeBaseImplBase; import com.sun.org.omg.SendingContext._CodeBaseStub; import com.sun.corba.se.spi.transport.CorbaConnection; - +import com.sun.corba.se.spi.ior.IOR; +import com.sun.corba.se.spi.orb.ORB; /** * Provides the reading side with a per connection cache of * info obtained via calls to the remote CodeBase. @@ -51,14 +51,24 @@ import com.sun.corba.se.spi.transport.CorbaConnection; * * Needs cache management. */ -// REVISIT: revert to package protected after framework merge. public class CachedCodeBase extends _CodeBaseImplBase { private Hashtable implementations, fvds, bases; - private CodeBase delegate; + private volatile CodeBase delegate; private CorbaConnection conn; - private static Hashtable iorToCodeBaseObjMap = new Hashtable(); + private static Object iorMapLock = new Object(); + private static Hashtable iorMap = new Hashtable<>(); + + public static synchronized void cleanCache( ORB orb ) { + synchronized (iorMapLock) { + for (IOR ior : iorMap.keySet()) { + if (ior.getORB() == orb) { + iorMap.remove(ior); + } + } + } + } public CachedCodeBase(CorbaConnection connection) { conn = connection; @@ -68,7 +78,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return null; } - public String implementation (String repId) { + public synchronized String implementation (String repId) { String urlResult = null; if (implementations == null) @@ -86,7 +96,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return urlResult; } - public String[] implementations (String[] repIds) { + public synchronized String[] implementations (String[] repIds) { String[] urlResults = new String[repIds.length]; for (int i = 0; i < urlResults.length; i++) @@ -95,7 +105,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return urlResults; } - public FullValueDescription meta (String repId) { + public synchronized FullValueDescription meta (String repId) { FullValueDescription result = null; if (fvds == null) @@ -113,7 +123,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return result; } - public FullValueDescription[] metas (String[] repIds) { + public synchronized FullValueDescription[] metas (String[] repIds) { FullValueDescription[] results = new FullValueDescription[repIds.length]; @@ -123,7 +133,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return results; } - public String[] bases (String repId) { + public synchronized String[] bases (String repId) { String[] results = null; @@ -145,7 +155,7 @@ public class CachedCodeBase extends _CodeBaseImplBase // Ensures that we've used the connection's IOR to create // a valid CodeBase delegate. If this returns false, then // it is not valid to access the delegate. - private boolean connectedCodeBase() { + private synchronized boolean connectedCodeBase() { if (delegate != null) return true; @@ -165,7 +175,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return false; } - synchronized(this) { + synchronized(iorMapLock) { // Recheck the condition to make sure another // thread didn't already do this while we waited @@ -173,7 +183,8 @@ public class CachedCodeBase extends _CodeBaseImplBase return true; // Do we have a reference initialized by another connection? - delegate = (CodeBase)CachedCodeBase.iorToCodeBaseObjMap.get(conn.getCodeBaseIOR()); + delegate = CachedCodeBase.iorMap.get(conn.getCodeBaseIOR()); + if (delegate != null) return true; @@ -181,8 +192,7 @@ public class CachedCodeBase extends _CodeBaseImplBase delegate = CodeBaseHelper.narrow(getObjectFromIOR()); // Save it for the benefit of other connections - CachedCodeBase.iorToCodeBaseObjMap.put(conn.getCodeBaseIOR(), - delegate); + CachedCodeBase.iorMap.put(conn.getCodeBaseIOR(), delegate); } // It's now safe to use the delegate diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ClientRequestInfoImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ClientRequestInfoImpl.java index d24fa030725..94e3f957c31 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ClientRequestInfoImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ClientRequestInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -217,7 +217,7 @@ public final class ClientRequestInfoImpl // ClientRequestInfo validity table (see ptc/00-08-06 table 21-1). // Note: These must be in the same order as specified in contants. - protected static final boolean validCall[][] = { + private static final boolean validCall[][] = { // LEGEND: // s_req = send_request r_rep = receive_reply // s_pol = send_poll r_exc = receive_exception diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java index e8c6d1560fc..e7d7ae27e76 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,7 +58,7 @@ import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; import org.omg.PortableInterceptor.TRANSPORT_RETRY; import org.omg.PortableInterceptor.USER_EXCEPTION; import org.omg.PortableInterceptor.PolicyFactory; -import org.omg.PortableInterceptor.ObjectReferenceTemplate ; +import org.omg.PortableInterceptor.ObjectReferenceTemplate; import com.sun.corba.se.pept.encoding.OutputObject; @@ -112,10 +112,10 @@ public class PIHandlerImpl implements PIHandler } } - private ORB orb ; - InterceptorsSystemException wrapper ; - ORBUtilSystemException orbutilWrapper ; - OMGSystemException omgWrapper ; + private ORB orb; + InterceptorsSystemException wrapper; + ORBUtilSystemException orbutilWrapper; + OMGSystemException omgWrapper; // A unique id used in ServerRequestInfo. // This does not correspond to the GIOP request id. @@ -178,6 +178,21 @@ public class PIHandlerImpl implements PIHandler } }; + public void close() { + orb = null; + wrapper = null; + orbutilWrapper = null; + omgWrapper = null; + codecFactory = null; + arguments = null; + interceptorList = null; + interceptorInvoker = null; + current = null; + policyFactoryTable = null; + threadLocalClientRequestInfoStack = null; + threadLocalServerRequestInfoStack = null; + } + // Class to contain all ThreadLocal data for ClientRequestInfo // maintenance. // diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java index e6d9e53609f..93c047b76cd 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,6 +69,9 @@ public class PINoOpHandlerImpl implements PIHandler public PINoOpHandlerImpl( ) { } + public void close() { + } + public void initialize() { } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl.java index 4df8825d0bb..ecea44c521b 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -195,7 +195,7 @@ public final class ServerRequestInfoImpl // ServerRequestInfo validity table (see ptc/00-08-06 table 21-2). // Note: These must be in the same order as specified in contants. - protected static final boolean validCall[][] = { + private static final boolean validCall[][] = { // LEGEND: // r_rsc = receive_request_service_contexts // r_req = receive_request diff --git a/corba/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java b/corba/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java index 6653b391c46..7721999591c 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -130,10 +130,23 @@ public class Util implements javax.rmi.CORBA.UtilDelegate private UtilSystemException utilWrapper = UtilSystemException.get( CORBALogDomains.RPC_ENCODING); - public static Util instance = null; + private static Util instance = null; public Util() { - instance = this; + setInstance(this); + } + + private static void setInstance( Util util ) { + assert instance == null : "Instance already defined"; + instance = util; + } + + public static Util getInstance() { + return instance; + } + + public static boolean isInstanceDefined() { + return instance != null; } // Used by TOAFactory.shutdown to unexport all targets for this diff --git a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java index eb365213270..a88d2f2f697 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,14 +34,18 @@ public class MonitoringManagerFactoryImpl implements MonitoringManagerFactory { private HashMap monitoringManagerTable = new HashMap(); public synchronized MonitoringManager createMonitoringManager( - String nameOfTheRoot, String description ) + String nameOfTheRoot, String description) { MonitoringManagerImpl m = null; m = (MonitoringManagerImpl)monitoringManagerTable.get(nameOfTheRoot); if (m == null) { - m = new MonitoringManagerImpl( nameOfTheRoot, description ); + m = new MonitoringManagerImpl(nameOfTheRoot, description); monitoringManagerTable.put(nameOfTheRoot, m); } return m; } + + public synchronized void remove(String nameOfTheRoot) { + monitoringManagerTable.remove(nameOfTheRoot); + } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java index 4e97a73815c..b7e676eafed 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ package com.sun.corba.se.impl.monitoring; import com.sun.corba.se.spi.monitoring.MonitoringManager; +import com.sun.corba.se.spi.monitoring.MonitoringManagerFactory; import com.sun.corba.se.spi.monitoring.MonitoredObject; import com.sun.corba.se.spi.monitoring.MonitoredObjectFactory; import com.sun.corba.se.spi.monitoring.MonitoringFactories; @@ -33,18 +34,24 @@ import com.sun.corba.se.spi.monitoring.MonitoringFactories; public class MonitoringManagerImpl implements MonitoringManager { private final MonitoredObject rootMonitoredObject; - MonitoringManagerImpl( String nameOfTheRoot, String description ) { + MonitoringManagerImpl(String nameOfTheRoot, String description) { MonitoredObjectFactory f = MonitoringFactories.getMonitoredObjectFactory(); rootMonitoredObject = - f.createMonitoredObject( nameOfTheRoot, description ); + f.createMonitoredObject(nameOfTheRoot, description); } - public void clearState( ) { - rootMonitoredObject.clearState( ); + public void clearState() { + rootMonitoredObject.clearState(); } - public MonitoredObject getRootMonitoredObject( ) { + public MonitoredObject getRootMonitoredObject() { return rootMonitoredObject; } + + public void close() { + MonitoringManagerFactory f = + MonitoringFactories.getMonitoringManagerFactory(); + f.remove(rootMonitoredObject.getName()); + } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase_R.java b/corba/src/share/classes/com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase_R.java index 1bc9130e109..3b14616947a 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase_R.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase_R.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -93,7 +93,7 @@ public abstract class POAPolicyMediatorBase_R extends POAPolicyMediatorBase { activeObjectMap.putServant( servant, entry ) ; - if (Util.instance != null) { + if (Util.isInstanceDefined()) { POAManagerImpl pm = (POAManagerImpl)poa.the_POAManager() ; POAFactory factory = pm.getFactory() ; factory.registerPOAForServant(poa, servant); @@ -129,7 +129,7 @@ public abstract class POAPolicyMediatorBase_R extends POAPolicyMediatorBase { activeObjectMap.remove(key); - if (Util.instance != null) { + if (Util.isInstanceDefined()) { POAManagerImpl pm = (POAManagerImpl)poa.the_POAManager() ; POAFactory factory = pm.getFactory() ; factory.unregisterPOAForServant(poa, s); diff --git a/corba/src/share/classes/com/sun/corba/se/impl/oa/toa/TOAFactory.java b/corba/src/share/classes/com/sun/corba/se/impl/oa/toa/TOAFactory.java index 2a2114d709e..58823229069 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/oa/toa/TOAFactory.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/oa/toa/TOAFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -78,8 +78,8 @@ public class TOAFactory implements ObjectAdapterFactory public void shutdown( boolean waitForCompletion ) { - if (Util.instance != null) { - Util.instance.unregisterTargetsForORB(orb); + if (Util.isInstanceDefined()) { + Util.getInstance().unregisterTargetsForORB(orb); } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java index 65d8246f7ad..9c03173238b 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,35 +23,37 @@ * questions. */ -package com.sun.corba.se.impl.orb ; +package com.sun.corba.se.impl.orb; import java.applet.Applet; -import java.io.IOException ; +import java.io.IOException; import java.lang.reflect.Constructor; -import java.lang.reflect.Field ; -import java.lang.reflect.Modifier ; -import java.lang.reflect.InvocationTargetException ; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList ; -import java.util.Iterator ; -import java.util.Properties ; -import java.util.Vector ; -import java.util.Hashtable ; -import java.util.Map ; -import java.util.HashMap ; -import java.util.LinkedList ; -import java.util.Collection ; -import java.util.Collections ; -import java.util.StringTokenizer ; -import java.util.Enumeration ; -import java.util.WeakHashMap ; +import java.util.Set; +import java.util.HashSet; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Properties; +import java.util.Vector; +import java.util.Hashtable; +import java.util.Map; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Collection; +import java.util.Collections; +import java.util.StringTokenizer; +import java.util.Enumeration; +import java.util.WeakHashMap; -import java.net.InetAddress ; +import java.net.InetAddress; import java.security.PrivilegedAction; -import java.security.AccessController ; +import java.security.AccessController; import javax.rmi.CORBA.Util; import javax.rmi.CORBA.ValueHandler; @@ -82,18 +84,18 @@ import org.omg.CORBA.ORBPackage.InvalidName; import com.sun.org.omg.SendingContext.CodeBase; import com.sun.corba.se.pept.broker.Broker; -import com.sun.corba.se.pept.protocol.ClientInvocationInfo ; +import com.sun.corba.se.pept.protocol.ClientInvocationInfo; import com.sun.corba.se.pept.transport.ContactInfo; import com.sun.corba.se.pept.transport.ConnectionCache; import com.sun.corba.se.pept.transport.TransportManager; import com.sun.corba.se.spi.ior.IOR; -import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder ; +import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder; import com.sun.corba.se.spi.ior.TaggedComponentFactoryFinder; -import com.sun.corba.se.spi.ior.IORFactories ; -import com.sun.corba.se.spi.ior.ObjectKey ; -import com.sun.corba.se.spi.ior.ObjectKeyFactory ; -import com.sun.corba.se.spi.ior.iiop.IIOPFactories ; +import com.sun.corba.se.spi.ior.IORFactories; +import com.sun.corba.se.spi.ior.ObjectKey; +import com.sun.corba.se.spi.ior.ObjectKeyFactory; +import com.sun.corba.se.spi.ior.iiop.IIOPFactories; import com.sun.corba.se.spi.ior.iiop.GIOPVersion; import com.sun.corba.se.spi.oa.OAInvocationInfo; import com.sun.corba.se.spi.oa.ObjectAdapterFactory; @@ -122,10 +124,10 @@ import com.sun.corba.se.spi.orb.StringPair; import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory; import com.sun.corba.se.spi.transport.CorbaTransportManager; import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager; -import com.sun.corba.se.spi.copyobject.CopierManager ; -import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults ; -import com.sun.corba.se.spi.presentation.rmi.PresentationManager ; -import com.sun.corba.se.spi.presentation.rmi.StubAdapter ; +import com.sun.corba.se.spi.copyobject.CopierManager; +import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults; +import com.sun.corba.se.spi.presentation.rmi.PresentationManager; +import com.sun.corba.se.spi.presentation.rmi.StubAdapter; import com.sun.corba.se.spi.servicecontext.ServiceContextRegistry; import com.sun.corba.se.impl.corba.TypeCodeFactory; @@ -140,6 +142,7 @@ import com.sun.corba.se.impl.corba.AnyImpl; import com.sun.corba.se.impl.corba.RequestImpl; import com.sun.corba.se.impl.dynamicany.DynAnyFactoryImpl; import com.sun.corba.se.impl.encoding.EncapsOutputStream; +import com.sun.corba.se.impl.encoding.CachedCodeBase; import com.sun.corba.se.impl.interceptors.PIHandlerImpl; import com.sun.corba.se.impl.interceptors.PINoOpHandlerImpl; import com.sun.corba.se.impl.ior.TaggedComponentFactoryFinderImpl; @@ -185,6 +188,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private java.lang.Object runObj = new java.lang.Object(); private java.lang.Object shutdownObj = new java.lang.Object(); + private java.lang.Object waitForCompletionObj = new java.lang.Object(); private static final byte STATUS_OPERATING = 1; private static final byte STATUS_SHUTTING_DOWN = 2; private static final byte STATUS_SHUTDOWN = 3; @@ -193,6 +197,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // XXX Should we move invocation tracking to the first level server dispatcher? private java.lang.Object invocationObj = new java.lang.Object(); + private int numInvocations = 0; // thread local variable to store a boolean to detect deadlock in // ORB.shutdown(true). @@ -220,8 +225,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private int transientServerId ; - private ThreadGroup threadGroup ; - private ServiceContextRegistry serviceContextRegistry ; // Needed here to implement connect/disconnect @@ -265,6 +268,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private final Object urlOperationLock = new java.lang.Object() ; private CorbaServerRequestDispatcher insNamingDelegate ; + // resolverLock must be used for all access to either resolver or // localResolver, since it is possible for the resolver to indirectly // refer to the localResolver. Also used to protect access to @@ -279,6 +283,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private ObjectKeyFactory objectKeyFactory ; + private boolean orbOwnsThreadPoolManager = false ; + private ThreadPoolManager threadpoolMgr; private void dprint( String msg ) @@ -322,11 +328,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ORBVersion getORBVersion() { + synchronized (this) { + checkShutdownState(); + } return (ORBVersion)(orbVersionThreadLocal.get()) ; } public void setORBVersion(ORBVersion verObj) { + synchronized (this) { + checkShutdownState(); + } orbVersionThreadLocal.set(verObj); } @@ -347,46 +359,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // end of this method. pihandler = new PINoOpHandlerImpl( ); - // See bugs 4916766 and 4936203 - // We intend to create new threads in a reliable thread group. - // This avoids problems if the application/applet - // creates a thread group, makes JavaIDL calls which create a new - // connection and ReaderThread, and then destroys the thread - // group. If our ReaderThreads were to be part of such destroyed thread - // group then it might get killed and cause other invoking threads - // sharing the same connection to get a non-restartable - // CommunicationFailure. We'd like to avoid that. - // - // Our solution is to create all of our threads in the highest thread - // group that we have access to, given our own security clearance. - // - try { - // try to get a thread group that's as high in the threadgroup - // parent-child hierarchy, as we can get to. - // this will prevent an ORB thread created during applet-init from - // being killed when an applet dies. - threadGroup = (ThreadGroup) AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - ThreadGroup tg = Thread.currentThread().getThreadGroup() ; - ThreadGroup ptg = tg ; - try { - while (ptg != null) { - tg = ptg; - ptg = tg.getParent(); - } - } catch (SecurityException se) { - // Discontinue going higher on a security exception. - } - return new ThreadGroup(tg, "ORB ThreadGroup"); - } - } - ); - } catch (SecurityException e) { - // something wrong, we go back to the original code - threadGroup = Thread.currentThread().getThreadGroup(); - } - // This is the unique id of this server (JVM). Multiple incarnations // of this server will get different ids. // Compute transientServerId = milliseconds since Jan 1, 1970 @@ -547,6 +519,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void set_parameters( Properties props ) { + synchronized (this) { + checkShutdownState(); + } preInit( null, props ) ; DataCollector dataCollector = DataCollectorFactory.create( props, getLocalHostName() ) ; @@ -788,6 +763,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void notifyORB() { + synchronized (this) { + checkShutdownState(); + } synchronized (this.svResponseReceived) { this.svResponseReceived.set(); this.svResponseReceived.notify(); @@ -854,6 +832,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // Note that we connect this if we have not already done so. public synchronized IOR getFVDCodeBaseIOR() { + checkShutdownState(); + if (codeBaseIOR != null) // i.e. We are already connected to it return codeBaseIOR; @@ -1118,6 +1098,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized void setTypeCodeForClass(Class c, TypeCodeImpl tci) { + checkShutdownState(); + if (typeCodeForClassMap == null) typeCodeForClassMap = Collections.synchronizedMap( new WeakHashMap(64)); @@ -1128,6 +1110,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized TypeCodeImpl getTypeCodeForClass(Class c) { + checkShutdownState(); + if (typeCodeForClassMap == null) return null; return (TypeCodeImpl)typeCodeForClassMap.get(c); @@ -1210,6 +1194,10 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB { CorbaServerRequestDispatcher insnd ; + synchronized (this) { + checkShutdownState(); + } + if ((id == null) || (id.length() == 0)) throw new InvalidName() ; @@ -1253,66 +1241,88 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB } } - public void shutdown(boolean wait_for_completion) - { - // to wait for completion, we would deadlock, so throw a standard - // OMG exception. - if (wait_for_completion && ((Boolean)isProcessingInvocation.get()).booleanValue()) { - throw omgWrapper.shutdownWaitForCompletionDeadlock() ; - } - - boolean doShutdown = false ; + public void shutdown(boolean wait_for_completion) { + boolean wait = false; synchronized (this) { - checkShutdownState() ; + checkShutdownState(); + + // This is to avoid deadlock: don't allow a thread that is + // processing a request to call shutdown( true ), because + // the shutdown would block waiting for the request to complete, + // while the request would block waiting for shutdown to complete. + if (wait_for_completion && + isProcessingInvocation.get() == Boolean.TRUE) { + throw omgWrapper.shutdownWaitForCompletionDeadlock(); + } if (status == STATUS_SHUTTING_DOWN) { - if (!wait_for_completion) - // If we are already shutting down and don't want - // to wait, nothing to do: return. - return ; - } else { - // The ORB status was STATUS_OPERATING, so start the shutdown. - status = STATUS_SHUTTING_DOWN ; - doShutdown = true ; + if (wait_for_completion) { + wait = true; + } else { + return; + } } + + status = STATUS_SHUTTING_DOWN; } - // At this point, status is SHUTTING_DOWN. - // All shutdown calls with wait_for_completion == true must synchronize - // here. Only the first call will be made with doShutdown == true. + // Avoid more than one thread performing shutdown at a time. synchronized (shutdownObj) { - if (doShutdown) { - // shutdownServants will set all POAManagers into the - // INACTIVE state, causing request to be rejected. - // If wait_for_completion is true, this will not return until - // all invocations have completed. + // At this point, the ORB status is certainly STATUS_SHUTTING_DOWN. + // If wait is true, another thread already called shutdown( true ), + // and so we wait for completion + if (wait) { + while (true) { + synchronized (this) { + if (status == STATUS_SHUTDOWN) + break; + } + + try { + shutdownObj.wait(); + } catch (InterruptedException exc) { + // NOP: just loop and wait until state is changed + } + } + } else { + // perform the actual shutdown shutdownServants(wait_for_completion); + if (wait_for_completion) { + synchronized ( waitForCompletionObj ) { + while (numInvocations > 0) { + try { + waitForCompletionObj.wait(); + } catch (InterruptedException ex) {} + } + } + } + synchronized (runObj) { runObj.notifyAll(); } - synchronized (this) { - status = STATUS_SHUTDOWN; - } + status = STATUS_SHUTDOWN; + + shutdownObj.notifyAll(); } } } - /** This method shuts down the ORB and causes orb.run() to return. - * It will cause all POAManagers to be deactivated, which in turn - * will cause all POAs to be deactivated. - */ + // Cause all ObjectAdapaterFactories to clean up all of their internal state, which + // may include activated objects that have associated state and callbacks that must + // complete in order to shutdown. This will cause new request to be rejected. protected void shutdownServants(boolean wait_for_completion) { - Iterator iter = requestDispatcherRegistry.getObjectAdapterFactories().iterator() ; - while (iter.hasNext()) { - ObjectAdapterFactory oaf = (ObjectAdapterFactory)iter.next() ; - oaf.shutdown( wait_for_completion ) ; + Set oaset; + synchronized (this) { + oaset = new HashSet<>(requestDispatcherRegistry.getObjectAdapterFactories()); } + + for (ObjectAdapterFactory oaf : oaset) + oaf.shutdown(wait_for_completion); } - // REVISIT: was protected - made public for framework // Note that the caller must hold the ORBImpl lock. public void checkShutdownState() { @@ -1327,21 +1337,40 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public boolean isDuringDispatch() { + synchronized (this) { + checkShutdownState(); + } Boolean value = (Boolean)(isProcessingInvocation.get()) ; return value.booleanValue() ; } public void startingDispatch() { + synchronized (this) { + checkShutdownState(); + } synchronized (invocationObj) { isProcessingInvocation.set(Boolean.TRUE); + numInvocations++; } } public void finishedDispatch() { + synchronized (this) { + checkShutdownState(); + } synchronized (invocationObj) { - isProcessingInvocation.set(Boolean.FALSE); + numInvocations--; + isProcessingInvocation.set(false); + if (numInvocations == 0) { + synchronized (waitForCompletionObj) { + waitForCompletionObj.notifyAll(); + } + } else if (numInvocations < 0) { + throw wrapper.numInvocationsAlreadyZero( + CompletionStatus.COMPLETED_YES); + } } } @@ -1350,12 +1379,12 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB * not been shut down, it will start the shutdown process and block until * the ORB has shut down before it destroys the ORB." */ - public synchronized void destroy() + public void destroy() { - boolean shutdownFirst = false ; + boolean shutdownFirst = false; synchronized (this) { - shutdownFirst = (status == STATUS_OPERATING) ; + shutdownFirst = (status == STATUS_OPERATING); } if (shutdownFirst) { @@ -1365,11 +1394,76 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB synchronized (this) { if (status < STATUS_DESTROYED) { getCorbaTransportManager().close(); - getPIHandler().destroyInterceptors() ; + getPIHandler().destroyInterceptors(); status = STATUS_DESTROYED; } } + synchronized (threadPoolManagerAccessLock) { + if (orbOwnsThreadPoolManager) { + try { + threadpoolMgr.close(); + threadpoolMgr = null; + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + } + } + try { + monitoringManager.close(); + monitoringManager = null; + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + + CachedCodeBase.cleanCache(this); + try { + pihandler.close(); + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + + super.destroy(); + + badServerIdHandlerAccessLock = null; + clientDelegateFactoryAccessorLock = null; + corbaContactInfoListFactoryAccessLock = null; + + objectKeyFactoryAccessLock = null; + legacyServerSocketManagerAccessLock = null; + threadPoolManagerAccessLock = null; + transportManager = null; + legacyServerSocketManager = null; + OAInvocationInfoStack = null; + clientInvocationInfoStack = null; + codeBaseIOR = null; + dynamicRequests = null; + svResponseReceived = null; + runObj = null; + shutdownObj = null; + waitForCompletionObj = null; + invocationObj = null; + isProcessingInvocation = null; + typeCodeForClassMap = null; + valueFactoryCache = null; + orbVersionThreadLocal = null; + requestDispatcherRegistry = null; + copierManager = null; + toaFactory = null; + poaFactory = null; + pihandler = null; + configData = null; + badServerIdHandler = null; + clientDelegateFactory = null; + corbaContactInfoListFactory = null; + resolver = null; + localResolver = null; + insNamingDelegate = null; + urlOperation = null; + taggedComponentFactoryFinder = null; + taggedProfileFactoryFinder = null; + taggedProfileTemplateFactoryFinder = null; + objectKeyFactory = null; } /** @@ -1434,18 +1528,27 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public OAInvocationInfo peekInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; return (OAInvocationInfo)(stack.peek()) ; } public void pushInvocationInfo( OAInvocationInfo info ) { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; stack.push( info ) ; } public OAInvocationInfo popInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; return (OAInvocationInfo)(stack.pop()) ; } @@ -1459,6 +1562,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void initBadServerIdHandler() { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { Class cls = configData.getBadServerIdHandler() ; if (cls != null) { @@ -1477,6 +1583,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setBadServerIdHandler( BadServerIdHandler handler ) { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { badServerIdHandler = handler; } @@ -1484,6 +1593,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void handleBadServerId( ObjectKey okey ) { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { if (badServerIdHandler == null) throw wrapper.badServerId() ; @@ -1532,6 +1644,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public int getTransientServerId() { + synchronized (this) { + checkShutdownState(); + } if( configData.getORBServerIdPropertySpecified( ) ) { // ORBServerId is specified then use that value return configData.getPersistentServerId( ); @@ -1541,11 +1656,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public RequestDispatcherRegistry getRequestDispatcherRegistry() { + synchronized (this) { + checkShutdownState(); + } return requestDispatcherRegistry; } public ServiceContextRegistry getServiceContextRegistry() { + synchronized (this) { + checkShutdownState(); + } return serviceContextRegistry ; } @@ -1563,12 +1684,18 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // XXX What about multi-homed host? public boolean isLocalHost( String hostName ) { + synchronized (this) { + checkShutdownState(); + } return hostName.equals( configData.getORBServerHost() ) || hostName.equals( getLocalHostName() ) ; } public boolean isLocalServerId( int subcontractId, int serverId ) { + synchronized (this) { + checkShutdownState(); + } if ((subcontractId < ORBConstants.FIRST_POA_SCID) || (subcontractId > ORBConstants.MAX_POA_SCID)) return serverId == getTransientServerId( ) ; @@ -1659,6 +1786,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientInvocationInfo createOrIncrementInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl invocationInfoStack = (StackImpl) clientInvocationInfoStack.get(); ClientInvocationInfo clientInvocationInfo = null; @@ -1682,10 +1812,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void releaseOrDecrementInvocationInfo() { - StackImpl invocationInfoStack = - (StackImpl)clientInvocationInfoStack.get(); + synchronized (this) { + checkShutdownState(); + } int entryCount = -1; ClientInvocationInfo clientInvocationInfo = null; + StackImpl invocationInfoStack = + (StackImpl)clientInvocationInfoStack.get(); if (!invocationInfoStack.empty()) { clientInvocationInfo = (ClientInvocationInfo)invocationInfoStack.peek(); @@ -1705,6 +1838,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientInvocationInfo getInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl invocationInfoStack = (StackImpl) clientInvocationInfoStack.get(); return (ClientInvocationInfo) invocationInfoStack.peek(); @@ -1719,6 +1855,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setClientDelegateFactory( ClientDelegateFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (clientDelegateFactoryAccessorLock) { clientDelegateFactory = factory ; } @@ -1726,6 +1865,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientDelegateFactory getClientDelegateFactory() { + synchronized (this) { + checkShutdownState(); + } synchronized (clientDelegateFactoryAccessorLock) { return clientDelegateFactory ; } @@ -1735,6 +1877,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setCorbaContactInfoListFactory( CorbaContactInfoListFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (corbaContactInfoListFactoryAccessLock) { corbaContactInfoListFactory = factory ; } @@ -1742,6 +1887,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized CorbaContactInfoListFactory getCorbaContactInfoListFactory() { + checkShutdownState(); return corbaContactInfoListFactory ; } @@ -1750,6 +1896,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setResolver( Resolver resolver ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { this.resolver = resolver ; } @@ -1760,6 +1909,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public Resolver getResolver() { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { return resolver ; } @@ -1770,6 +1922,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setLocalResolver( LocalResolver resolver ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { this.localResolver = resolver ; } @@ -1780,6 +1935,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public LocalResolver getLocalResolver() { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { return localResolver ; } @@ -1790,6 +1948,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setURLOperation( Operation stringToObject ) { + synchronized (this) { + checkShutdownState(); + } synchronized (urlOperationLock) { urlOperation = stringToObject ; } @@ -1800,6 +1961,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public Operation getURLOperation() { + synchronized (this) { + checkShutdownState(); + } synchronized (urlOperationLock) { return urlOperation ; } @@ -1807,6 +1971,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setINSDelegate( CorbaServerRequestDispatcher sdel ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { insNamingDelegate = sdel ; } @@ -1814,16 +1981,25 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public TaggedComponentFactoryFinder getTaggedComponentFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedComponentFactoryFinder ; } public IdentifiableFactoryFinder getTaggedProfileFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedProfileFactoryFinder ; } public IdentifiableFactoryFinder getTaggedProfileTemplateFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedProfileTemplateFactoryFinder ; } @@ -1831,6 +2007,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ObjectKeyFactory getObjectKeyFactory() { + synchronized (this) { + checkShutdownState(); + } synchronized (objectKeyFactoryAccessLock) { return objectKeyFactory ; } @@ -1838,6 +2017,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setObjectKeyFactory( ObjectKeyFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (objectKeyFactoryAccessLock) { objectKeyFactory = factory ; } @@ -1864,6 +2046,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public LegacyServerSocketManager getLegacyServerSocketManager() { + synchronized (this) { + checkShutdownState(); + } synchronized (legacyServerSocketManagerAccessLock) { if (legacyServerSocketManager == null) { legacyServerSocketManager = new LegacyServerSocketManagerImpl(this); @@ -1876,6 +2061,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setThreadPoolManager(ThreadPoolManager mgr) { + synchronized (this) { + checkShutdownState(); + } synchronized (threadPoolManagerAccessLock) { threadpoolMgr = mgr; } @@ -1883,9 +2071,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ThreadPoolManager getThreadPoolManager() { + synchronized (this) { + checkShutdownState(); + } synchronized (threadPoolManagerAccessLock) { if (threadpoolMgr == null) { - threadpoolMgr = new ThreadPoolManagerImpl( threadGroup ); + threadpoolMgr = new ThreadPoolManagerImpl(); + orbOwnsThreadPoolManager = true; } return threadpoolMgr; } @@ -1893,6 +2085,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public CopierManager getCopierManager() { + synchronized (this) { + checkShutdownState(); + } return copierManager ; } } // Class ORBImpl diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orb/ParserTable.java b/corba/src/share/classes/com/sun/corba/se/impl/orb/ParserTable.java index 2741e0b29b7..550c4a7f304 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orb/ParserTable.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orb/ParserTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -106,7 +106,9 @@ public class ParserTable { public ParserData[] getParserData() { - return parserData ; + ParserData[] parserArray = new ParserData[parserData.length]; + System.arraycopy(parserData, 0, parserArray, 0, parserData.length); + return parserArray; } private ParserTable() { diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java index c2e0995092d..8cf9edd4834 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,7 +62,7 @@ public class RepositoryId_1_3 { // legal use of '.' in a Java name. public static final RepositoryIdCache_1_3 cache = new RepositoryIdCache_1_3(); - public static final byte[] IDL_IDENTIFIER_CHARS = { + private static final byte[] IDL_IDENTIFIER_CHARS = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 00-0f @@ -180,7 +180,7 @@ public class RepositoryId_1_3 { public static final String kRemoteTypeStr = ""; public static final String kRemoteValueRepID = ""; - public static final Hashtable kSpecialArrayTypeStrings = new Hashtable(); + private static final Hashtable kSpecialArrayTypeStrings = new Hashtable(); static { kSpecialArrayTypeStrings.put("CORBA.WStringValue", new StringBuffer(java.lang.String.class.getName())); @@ -189,7 +189,7 @@ public class RepositoryId_1_3 { } - public static final Hashtable kSpecialCasesRepIDs = new Hashtable(); + private static final Hashtable kSpecialCasesRepIDs = new Hashtable(); static { kSpecialCasesRepIDs.put(java.lang.String.class, kWStringValueRepID); @@ -197,7 +197,7 @@ public class RepositoryId_1_3 { kSpecialCasesRepIDs.put(java.rmi.Remote.class, kRemoteValueRepID); } - public static final Hashtable kSpecialCasesStubValues = new Hashtable(); + private static final Hashtable kSpecialCasesStubValues = new Hashtable(); static { kSpecialCasesStubValues.put(java.lang.String.class, kWStringStubValue); @@ -209,7 +209,7 @@ public class RepositoryId_1_3 { } - public static final Hashtable kSpecialCasesVersions = new Hashtable(); + private static final Hashtable kSpecialCasesVersions = new Hashtable(); static { kSpecialCasesVersions.put(java.lang.String.class, kWStringValueHash); @@ -220,7 +220,7 @@ public class RepositoryId_1_3 { kSpecialCasesVersions.put(java.rmi.Remote.class, kRemoteValueHash); } - public static final Hashtable kSpecialCasesClasses = new Hashtable(); + private static final Hashtable kSpecialCasesClasses = new Hashtable(); static { kSpecialCasesClasses.put(kWStringTypeStr, java.lang.String.class); @@ -232,7 +232,7 @@ public class RepositoryId_1_3 { //kSpecialCasesClasses.put(kRemoteTypeStr, java.rmi.Remote.class); } - public static final Hashtable kSpecialCasesArrayPrefix = new Hashtable(); + private static final Hashtable kSpecialCasesArrayPrefix = new Hashtable(); static { kSpecialCasesArrayPrefix.put(java.lang.String.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); @@ -243,7 +243,7 @@ public class RepositoryId_1_3 { kSpecialCasesArrayPrefix.put(java.rmi.Remote.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); } - public static final Hashtable kSpecialPrimitives = new Hashtable(); + private static final Hashtable kSpecialPrimitives = new Hashtable(); static { kSpecialPrimitives.put("int","long"); diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java index 9ff74e3168a..8c1ab6e7390 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -63,7 +63,7 @@ public class RepositoryId_1_3_1 { // uniformly, and is safe because that is the only // legal use of '.' in a Java name. - public static final byte[] IDL_IDENTIFIER_CHARS = { + private static final byte[] IDL_IDENTIFIER_CHARS = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 00-0f @@ -198,7 +198,7 @@ public class RepositoryId_1_3_1 { public static final String kRemoteTypeStr = ""; public static final String kRemoteValueRepID = ""; - public static final Hashtable kSpecialArrayTypeStrings = new Hashtable(); + private static final Hashtable kSpecialArrayTypeStrings = new Hashtable(); static { kSpecialArrayTypeStrings.put("CORBA.WStringValue", new StringBuffer(java.lang.String.class.getName())); @@ -207,7 +207,7 @@ public class RepositoryId_1_3_1 { } - public static final Hashtable kSpecialCasesRepIDs = new Hashtable(); + private static final Hashtable kSpecialCasesRepIDs = new Hashtable(); static { kSpecialCasesRepIDs.put(java.lang.String.class, kWStringValueRepID); @@ -215,7 +215,7 @@ public class RepositoryId_1_3_1 { kSpecialCasesRepIDs.put(java.rmi.Remote.class, kRemoteValueRepID); } - public static final Hashtable kSpecialCasesStubValues = new Hashtable(); + private static final Hashtable kSpecialCasesStubValues = new Hashtable(); static { kSpecialCasesStubValues.put(java.lang.String.class, kWStringStubValue); @@ -227,7 +227,7 @@ public class RepositoryId_1_3_1 { } - public static final Hashtable kSpecialCasesVersions = new Hashtable(); + private static final Hashtable kSpecialCasesVersions = new Hashtable(); static { kSpecialCasesVersions.put(java.lang.String.class, kWStringValueHash); @@ -238,7 +238,7 @@ public class RepositoryId_1_3_1 { kSpecialCasesVersions.put(java.rmi.Remote.class, kRemoteValueHash); } - public static final Hashtable kSpecialCasesClasses = new Hashtable(); + private static final Hashtable kSpecialCasesClasses = new Hashtable(); static { kSpecialCasesClasses.put(kWStringTypeStr, java.lang.String.class); @@ -250,7 +250,7 @@ public class RepositoryId_1_3_1 { //kSpecialCasesClasses.put(kRemoteTypeStr, java.rmi.Remote.class); } - public static final Hashtable kSpecialCasesArrayPrefix = new Hashtable(); + private static final Hashtable kSpecialCasesArrayPrefix = new Hashtable(); static { kSpecialCasesArrayPrefix.put(java.lang.String.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); @@ -261,7 +261,7 @@ public class RepositoryId_1_3_1 { kSpecialCasesArrayPrefix.put(java.rmi.Remote.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); } - public static final Hashtable kSpecialPrimitives = new Hashtable(); + private static final Hashtable kSpecialPrimitives = new Hashtable(); static { kSpecialPrimitives.put("int","long"); diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java index f8341f84b0c..f98880bf68d 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,18 @@ package com.sun.corba.se.impl.orbutil.threadpool; +import java.io.IOException; +import java.io.Closeable; + +import java.security.AccessController; +import java.security.PrivilegedAction; + +import java.util.List; +import java.util.ArrayList; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + import com.sun.corba.se.spi.orbutil.threadpool.NoSuchWorkQueueException; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool; import com.sun.corba.se.spi.orbutil.threadpool.Work; @@ -36,12 +48,27 @@ import com.sun.corba.se.impl.orbutil.threadpool.WorkQueueImpl; import com.sun.corba.se.spi.monitoring.MonitoringConstants; import com.sun.corba.se.spi.monitoring.MonitoredObject; import com.sun.corba.se.spi.monitoring.MonitoringFactories; +import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase; +import com.sun.corba.se.impl.logging.ORBUtilSystemException; +import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.spi.logging.CORBALogDomains; + public class ThreadPoolImpl implements ThreadPool { - private static int threadCounter = 0; // serial counter useful for debugging + // serial counter useful for debugging + private static AtomicInteger threadCounter = new AtomicInteger(0); + private static final ORBUtilSystemException wrapper = + ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT); + + // Any time currentThreadCount and/or availableWorkerThreads is updated + // or accessed this ThreadPool's WorkQueue must be locked. And, it is + // expected that this ThreadPool's WorkQueue is the only object that + // updates and accesses these values directly and indirectly though a + // call to a method in this ThreadPool. If any call to update or access + // those values must synchronized on this ThreadPool's WorkQueue. private WorkQueue workQueue; // Stores the number of available worker threads @@ -65,14 +92,11 @@ public class ThreadPoolImpl implements ThreadPool // Running count of the work items processed // Set the value to 1 so that divide by zero is avoided in // averageWorkCompletionTime() - private long processedCount = 1; + private AtomicLong processedCount = new AtomicLong(1); // Running aggregate of the time taken in millis to execute work items // processed by the threads in the threadpool - private long totalTimeTaken = 0; - - // Lock for protecting state when required - private Object lock = new Object(); + private AtomicLong totalTimeTaken = new AtomicLong(0); // Name of the ThreadPool private String name; @@ -81,7 +105,10 @@ public class ThreadPoolImpl implements ThreadPool private MonitoredObject threadpoolMonitoredObject; // ThreadGroup in which threads should be created - private ThreadGroup threadGroup ; + private ThreadGroup threadGroup; + + Object workersLock = new Object(); + List workers = new ArrayList<>(); /** * This constructor is used to create an unbounded threadpool @@ -90,7 +117,7 @@ public class ThreadPoolImpl implements ThreadPool inactivityTimeout = ORBConstants.DEFAULT_INACTIVITY_TIMEOUT; maxWorkerThreads = Integer.MAX_VALUE; workQueue = new WorkQueueImpl(this); - threadGroup = tg ; + threadGroup = tg; name = threadpoolName; initializeMonitoring(); } @@ -121,6 +148,30 @@ public class ThreadPoolImpl implements ThreadPool initializeMonitoring(); } + // Note that this method should not return until AFTER all threads have died. + public void close() throws IOException { + + // Copy to avoid concurrent modification problems. + List copy = null; + synchronized (workersLock) { + copy = new ArrayList<>(workers); + } + + for (WorkerThread wt : copy) { + wt.close(); + while (wt.getState() != Thread.State.TERMINATED) { + try { + wt.join(); + } catch (InterruptedException exc) { + wrapper.interruptedJoinCallWhileClosingThreadPool(exc, wt, this); + } + } + } + + threadGroup = null; + } + + // Setup monitoring for this threadpool private void initializeMonitoring() { // Get root monitored object @@ -217,8 +268,8 @@ public class ThreadPoolImpl implements ThreadPool * or notify waiting threads on the queue for available work */ void notifyForAvailableWork(WorkQueue aWorkQueue) { - synchronized (lock) { - if (availableWorkerThreads == 0) { + synchronized (aWorkQueue) { + if (availableWorkerThreads < aWorkQueue.workItemsInQueue()) { createWorkerThread(); } else { aWorkQueue.notify(); @@ -227,120 +278,145 @@ public class ThreadPoolImpl implements ThreadPool } - /** - * To be called from the workqueue to create worker threads when none - * available. - */ - void createWorkerThread() { - WorkerThread thread; - - synchronized (lock) { - if (boundedThreadPool) { - if (currentThreadCount < maxWorkerThreads) { - thread = new WorkerThread(threadGroup, getName()); - currentThreadCount++; - } else { - // REVIST - Need to create a thread to monitor the - // the state for deadlock i.e. all threads waiting for - // something which can be got from the item in the - // workqueue, but there is no thread available to - // process that work item - DEADLOCK !! - return; - } - } else { - thread = new WorkerThread(threadGroup, getName()); - currentThreadCount++; - } + private Thread createWorkerThreadHelper( String name ) { + // Thread creation needs to be in a doPrivileged block + // if there is a non-null security manager for two reasons: + // 1. The creation of a thread in a specific ThreadGroup + // is a privileged operation. Lack of a doPrivileged + // block here causes an AccessControlException + // (see bug 6268145). + // 2. We want to make sure that the permissions associated + // with this thread do NOT include the permissions of + // the current thread that is calling this method. + // This leads to problems in the app server where + // some threads in the ThreadPool randomly get + // bad permissions, leading to unpredictable + // permission errors (see bug 6021011). + // + // A Java thread contains a stack of call frames, + // one for each method called that has not yet returned. + // Each method comes from a particular class. The class + // was loaded by a ClassLoader which has an associated + // CodeSource, and this determines the Permissions + // for all methods in that class. The current + // Permissions for the thread are the intersection of + // all Permissions for the methods on the stack. + // This is part of the Security Context of the thread. + // + // When a thread creates a new thread, the new thread + // inherits the security context of the old thread. + // This is bad in a ThreadPool, because different + // creators of threads may have different security contexts. + // This leads to occasional unpredictable errors when + // a thread is re-used in a different security context. + // + // Avoiding this problem is simple: just do the thread + // creation in a doPrivileged block. This sets the + // inherited security context to that of the code source + // for the ORB code itself, which contains all permissions + // in either Java SE or Java EE. + WorkerThread thread = new WorkerThread(threadGroup, name); + synchronized (workersLock) { + workers.add(thread); } // The thread must be set to a daemon thread so the // VM can exit if the only threads left are PooledThreads // or other daemons. We don't want to rely on the // calling thread always being a daemon. + // Note that no exception is possible here since we + // are inside the doPrivileged block. + thread.setDaemon(true); - // Catch exceptions since setDaemon can cause a - // security exception to be thrown under netscape - // in the Applet mode - try { - thread.setDaemon(true); - } catch (Exception e) { - // REVISIT - need to do some logging here - } + wrapper.workerThreadCreated(thread, thread.getContextClassLoader()); thread.start(); + return null; } + /** - * This method will return the minimum number of threads maintained - * by the threadpool. - */ + * To be called from the workqueue to create worker threads when none + * available. + */ + void createWorkerThread() { + final String name = getName(); + synchronized (workQueue) { + try { + if (System.getSecurityManager() == null) { + createWorkerThreadHelper(name); + } else { + // If we get here, we need to create a thread. + AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + return createWorkerThreadHelper(name); + } + } + ); + } + } catch (Throwable t) { + // Decrementing the count of current worker threads. + // But, it will be increased in the finally block. + decrementCurrentNumberOfThreads(); + wrapper.workerThreadCreationFailure(t); + } finally { + incrementCurrentNumberOfThreads(); + } + } + } + public int minimumNumberOfThreads() { return minWorkerThreads; } - /** - * This method will return the maximum number of threads in the - * threadpool at any point in time, for the life of the threadpool - */ public int maximumNumberOfThreads() { return maxWorkerThreads; } - /** - * This method will return the time in milliseconds when idle - * threads in the threadpool are removed. - */ public long idleTimeoutForThreads() { return inactivityTimeout; } - /** - * This method will return the total number of threads currently in the - * threadpool. This method returns a value which is not synchronized. - */ public int currentNumberOfThreads() { - synchronized (lock) { + synchronized (workQueue) { return currentThreadCount; } } - /** - * This method will return the number of available threads in the - * threadpool which are waiting for work. This method returns a - * value which is not synchronized. - */ + void decrementCurrentNumberOfThreads() { + synchronized (workQueue) { + currentThreadCount--; + } + } + + void incrementCurrentNumberOfThreads() { + synchronized (workQueue) { + currentThreadCount++; + } + } + public int numberOfAvailableThreads() { - synchronized (lock) { + synchronized (workQueue) { return availableWorkerThreads; } } - /** - * This method will return the number of busy threads in the threadpool - * This method returns a value which is not synchronized. - */ public int numberOfBusyThreads() { - synchronized (lock) { + synchronized (workQueue) { return (currentThreadCount - availableWorkerThreads); } } - /** - * This method returns the average elapsed time taken to complete a Work - * item in milliseconds. - */ public long averageWorkCompletionTime() { - synchronized (lock) { - return (totalTimeTaken / processedCount); + synchronized (workQueue) { + return (totalTimeTaken.get() / processedCount.get()); } } - /** - * This method returns the number of Work items processed by the threadpool - */ public long currentProcessedCount() { - synchronized (lock) { - return processedCount; + synchronized (workQueue) { + return processedCount.get(); } } @@ -357,15 +433,37 @@ public class ThreadPoolImpl implements ThreadPool private static synchronized int getUniqueThreadId() { - return ThreadPoolImpl.threadCounter++; + return ThreadPoolImpl.threadCounter.incrementAndGet(); + } + + /** + * This method will decrement the number of available threads + * in the threadpool which are waiting for work. Called from + * WorkQueueImpl.requestWork() + */ + void decrementNumberOfAvailableThreads() { + synchronized (workQueue) { + availableWorkerThreads--; + } + } + + /** + * This method will increment the number of available threads + * in the threadpool which are waiting for work. Called from + * WorkQueueImpl.requestWork() + */ + void incrementNumberOfAvailableThreads() { + synchronized (workQueue) { + availableWorkerThreads++; + } } - private class WorkerThread extends Thread + private class WorkerThread extends Thread implements Closeable { private Work currentWork; private int threadId = 0; // unique id for the thread - // thread pool this WorkerThread belongs too + private volatile boolean closeCalled = false; private String threadPoolName; // name seen by Thread.getName() private StringBuffer workerThreadName = new StringBuffer(); @@ -377,100 +475,61 @@ public class ThreadPoolImpl implements ThreadPool setName(composeWorkerThreadName(threadPoolName, "Idle")); } + public synchronized void close() { + closeCalled = true; + interrupt(); + } + + private void resetClassLoader() { + + } + + private void performWork() { + long start = System.currentTimeMillis(); + try { + currentWork.doWork(); + } catch (Throwable t) { + wrapper.workerThreadDoWorkThrowable(this, t); + } + long elapsedTime = System.currentTimeMillis() - start; + totalTimeTaken.addAndGet(elapsedTime); + processedCount.incrementAndGet(); + } + public void run() { - while (true) { - try { - - synchronized (lock) { - availableWorkerThreads++; - } - - // Get some work to do - currentWork = ((WorkQueueImpl)workQueue).requestWork(inactivityTimeout); - - synchronized (lock) { - availableWorkerThreads--; - // It is possible in notifyForAvailableWork that the - // check for availableWorkerThreads = 0 may return - // false, because the availableWorkerThreads has not been - // decremented to zero before the producer thread added - // work to the queue. This may create a deadlock, if the - // executing thread needs information which is in the work - // item queued in the workqueue, but has no thread to work - // on it since none was created because availableWorkerThreads = 0 - // returned false. - // The following code will ensure that a thread is always available - // in those situations - if ((availableWorkerThreads == 0) && - (workQueue.workItemsInQueue() > 0)) { - createWorkerThread(); - } - } - - // Set the thread name for debugging. - setName(composeWorkerThreadName(threadPoolName, - Integer.toString(this.threadId))); - - long start = System.currentTimeMillis(); - + try { + while (!closeCalled) { try { - // Do the work - currentWork.doWork(); + currentWork = ((WorkQueueImpl)workQueue).requestWork( + inactivityTimeout); + if (currentWork == null) + continue; + } catch (InterruptedException exc) { + wrapper.workQueueThreadInterrupted( exc, getName(), + Boolean.valueOf(closeCalled)); + + continue ; } catch (Throwable t) { - // Ignore all errors. - ; + wrapper.workerThreadThrowableFromRequestWork(this, t, + workQueue.getName()); + + continue; } - long end = System.currentTimeMillis(); - - - synchronized (lock) { - totalTimeTaken += (end - start); - processedCount++; - } + performWork(); // set currentWork to null so that the work item can be - // garbage collected + // garbage collected without waiting for the next work item. currentWork = null; - setName(composeWorkerThreadName(threadPoolName, "Idle")); - - } catch (TimeoutException e) { - // This thread timed out waiting for something to do. - - synchronized (lock) { - availableWorkerThreads--; - - // This should for both bounded and unbounded case - if (currentThreadCount > minWorkerThreads) { - currentThreadCount--; - // This thread can exit. - return; - } else { - // Go back to waiting on workQueue - continue; - } - } - } catch (InterruptedException ie) { - // InterruptedExceptions are - // caught here. Thus, threads can be forced out of - // requestWork and so they have to reacquire the lock. - // Other options include ignoring or - // letting this thread die. - // Ignoring for now. REVISIT - synchronized (lock) { - availableWorkerThreads--; - } - - } catch (Throwable e) { - - // Ignore any exceptions that currentWork.process - // accidently lets through, but let Errors pass. - // Add debugging output? REVISIT - synchronized (lock) { - availableWorkerThreads--; - } - + resetClassLoader(); + } + } catch (Throwable e) { + // This should not be possible + wrapper.workerThreadCaughtUnexpectedThrowable(this,e); + } finally { + synchronized (workersLock) { + workers.remove(this); } } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java index 43573fda6ee..40214e816d6 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,15 @@ package com.sun.corba.se.impl.orbutil.threadpool; +import java.io.IOException; + +import java.security.PrivilegedAction; +import java.security.AccessController; + +import java.util.concurrent.atomic.AtomicInteger; + +import com.sun.corba.se.spi.orb.ORB; + import com.sun.corba.se.spi.orbutil.threadpool.NoSuchThreadPoolException; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolManager; @@ -33,21 +42,102 @@ import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolChooser; import com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl; import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.impl.logging.ORBUtilSystemException; +import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.spi.logging.CORBALogDomains; + + public class ThreadPoolManagerImpl implements ThreadPoolManager { - private ThreadPool threadPool ; + private ThreadPool threadPool; + private ThreadGroup threadGroup; - public ThreadPoolManagerImpl( ThreadGroup tg ) - { - // Use unbounded threadpool in J2SE ORB - // ThreadPoolManager from s1as appserver code base can be set in the - // ORB. ThreadPools in the appserver are bounded. In that situation - // the ThreadPool in this ThreadPoolManager will have its threads - // die after the idle timeout. - // XXX Should there be cleanup when ORB.shutdown is called if the - // ORB owns the ThreadPool? - threadPool = new ThreadPoolImpl( tg, - ORBConstants.THREADPOOL_DEFAULT_NAME ) ; + private static final ORBUtilSystemException wrapper = + ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT); + + public ThreadPoolManagerImpl() { + threadGroup = getThreadGroup(); + threadPool = new ThreadPoolImpl(threadGroup, + ORBConstants.THREADPOOL_DEFAULT_NAME); + } + + private static AtomicInteger tgCount = new AtomicInteger(); + + + private ThreadGroup getThreadGroup() { + ThreadGroup tg; + + // See bugs 4916766 and 4936203 + // We intend to create new threads in a reliable thread group. + // This avoids problems if the application/applet + // creates a thread group, makes JavaIDL calls which create a new + // connection and ReaderThread, and then destroys the thread + // group. If our ReaderThreads were to be part of such destroyed thread + // group then it might get killed and cause other invoking threads + // sharing the same connection to get a non-restartable + // CommunicationFailure. We'd like to avoid that. + // + // Our solution is to create all of our threads in the highest thread + // group that we have access to, given our own security clearance. + // + try { + // try to get a thread group that's as high in the threadgroup + // parent-child hierarchy, as we can get to. + // this will prevent an ORB thread created during applet-init from + // being killed when an applet dies. + tg = AccessController.doPrivileged( + new PrivilegedAction() { + public ThreadGroup run() { + ThreadGroup tg = Thread.currentThread().getThreadGroup(); + ThreadGroup ptg = tg; + try { + while (ptg != null) { + tg = ptg; + ptg = tg.getParent(); + } + } catch (SecurityException se) { + // Discontinue going higher on a security exception. + } + return new ThreadGroup(tg, "ORB ThreadGroup " + tgCount.getAndIncrement()); + } + } + ); + } catch (SecurityException e) { + // something wrong, we go back to the original code + tg = Thread.currentThread().getThreadGroup(); + } + + return tg; + } + + public void close() { + try { + threadPool.close(); + } catch (IOException exc) { + wrapper.threadPoolCloseError(); + } + + try { + boolean isDestroyed = threadGroup.isDestroyed(); + int numThreads = threadGroup.activeCount(); + int numGroups = threadGroup.activeGroupCount(); + + if (isDestroyed) { + wrapper.threadGroupIsDestroyed(threadGroup); + } else { + if (numThreads > 0) + wrapper.threadGroupHasActiveThreadsInClose(threadGroup, numThreads); + + if (numGroups > 0) + wrapper.threadGroupHasSubGroupsInClose(threadGroup, numGroups); + + threadGroup.destroy(); + } + } catch (IllegalThreadStateException exc) { + wrapper.threadGroupDestroyFailed(exc, threadGroup); + } + + threadGroup = null; } /** diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java index 022f2e0c93b..6e2320eeade 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -111,24 +111,23 @@ public class WorkQueueImpl implements WorkQueue return workqueueMonitoredObject; } - public void addWork(Work work) { - synchronized (this) { + public synchronized void addWork(Work work) { workItemsAdded++; work.setEnqueueTime(System.currentTimeMillis()); theWorkQueue.addLast(work); ((ThreadPoolImpl)workerThreadPool).notifyForAvailableWork(this); - } } - Work requestWork(long waitTime) - throws TimeoutException, InterruptedException + synchronized Work requestWork(long waitTime) throws TimeoutException, InterruptedException { Work workItem; - synchronized (this) { + ((ThreadPoolImpl)workerThreadPool).incrementNumberOfAvailableThreads(); + if (theWorkQueue.size() != 0) { workItem = (Work)theWorkQueue.removeFirst(); totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime(); workItemsDequeued++; + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); return workItem; } @@ -145,6 +144,7 @@ public class WorkQueueImpl implements WorkQueue workItem = (Work)theWorkQueue.removeFirst(); totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime(); workItemsDequeued++; + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); return workItem; } @@ -152,12 +152,13 @@ public class WorkQueueImpl implements WorkQueue } while (remainingWaitTime > 0); + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); throw new TimeoutException(); } catch (InterruptedException ie) { + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); throw ie; } - } } public void setThreadPool(ThreadPool workerThreadPool) { diff --git a/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java index 038acdb132b..a5ee15ba763 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1666,7 +1666,9 @@ public class CorbaMessageMediatorImpl ((CDRInputObject)messageMediator.getInputObject()).unmarshalHeader(); ORB orb = (ORB)messageMediator.getBroker(); - orb.checkShutdownState(); + synchronized (orb) { + orb.checkShutdownState(); + } ObjectKey okey = messageMediator.getObjectKey(); if (orb.subcontractDebugFlag) { diff --git a/corba/src/share/classes/com/sun/corba/se/impl/protocol/LocalClientRequestDispatcherBase.java b/corba/src/share/classes/com/sun/corba/se/impl/protocol/LocalClientRequestDispatcherBase.java index 03e06439060..627ca7abd89 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/protocol/LocalClientRequestDispatcherBase.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/protocol/LocalClientRequestDispatcherBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,7 +52,7 @@ public abstract class LocalClientRequestDispatcherBase implements LocalClientReq // If isNextIsLocalValid.get() == Boolean.TRUE, // the next call to isLocal should be valid - protected static ThreadLocal isNextCallValid = new ThreadLocal() { + private static final ThreadLocal isNextCallValid = new ThreadLocal() { protected synchronized Object initialValue() { return Boolean.TRUE; } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java index 1c60088a7a3..7bd98805ab7 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,8 +69,8 @@ public class SelectorImpl private HashMap listenerThreads; private Map readerThreads; private boolean selectorStarted; - private boolean closed; - private ORBUtilSystemException wrapper ; + private volatile boolean closed; + private ORBUtilSystemException wrapper; public SelectorImpl(ORB orb) diff --git a/corba/src/share/classes/com/sun/corba/se/impl/util/RepositoryId.java b/corba/src/share/classes/com/sun/corba/se/impl/util/RepositoryId.java index 7c17e4f63e0..6bedab382ea 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/util/RepositoryId.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/util/RepositoryId.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ public class RepositoryId { // uniformly, and is safe because that is the only // legal use of '.' in a Java name. - public static final byte[] IDL_IDENTIFIER_CHARS = { + private static final byte[] IDL_IDENTIFIER_CHARS = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 00-0f @@ -95,7 +95,7 @@ public class RepositoryId { private static IdentityHashtable classIDLToRepStr = new IdentityHashtable(); private static IdentityHashtable classSeqToRepStr = new IdentityHashtable(); - private static IdentityHashtable repStrToByteArray = new IdentityHashtable(); + private static final IdentityHashtable repStrToByteArray = new IdentityHashtable(); private static Hashtable repStrToClass = new Hashtable(); private String repId = null; @@ -192,7 +192,7 @@ public class RepositoryId { public static final String kRemoteTypeStr = ""; public static final String kRemoteValueRepID = ""; - public static final Hashtable kSpecialArrayTypeStrings = new Hashtable(); + private static final Hashtable kSpecialArrayTypeStrings = new Hashtable(); static { kSpecialArrayTypeStrings.put("CORBA.WStringValue", new StringBuffer(java.lang.String.class.getName())); @@ -201,7 +201,7 @@ public class RepositoryId { } - public static final Hashtable kSpecialCasesRepIDs = new Hashtable(); + private static final Hashtable kSpecialCasesRepIDs = new Hashtable(); static { kSpecialCasesRepIDs.put(java.lang.String.class, kWStringValueRepID); @@ -209,7 +209,7 @@ public class RepositoryId { kSpecialCasesRepIDs.put(java.rmi.Remote.class, kRemoteValueRepID); } - public static final Hashtable kSpecialCasesStubValues = new Hashtable(); + private static final Hashtable kSpecialCasesStubValues = new Hashtable(); static { kSpecialCasesStubValues.put(java.lang.String.class, kWStringStubValue); @@ -221,7 +221,7 @@ public class RepositoryId { } - public static final Hashtable kSpecialCasesVersions = new Hashtable(); + private static final Hashtable kSpecialCasesVersions = new Hashtable(); static { kSpecialCasesVersions.put(java.lang.String.class, kWStringValueHash); @@ -232,7 +232,7 @@ public class RepositoryId { kSpecialCasesVersions.put(java.rmi.Remote.class, kRemoteValueHash); } - public static final Hashtable kSpecialCasesClasses = new Hashtable(); + private static final Hashtable kSpecialCasesClasses = new Hashtable(); static { kSpecialCasesClasses.put(kWStringTypeStr, java.lang.String.class); @@ -244,7 +244,7 @@ public class RepositoryId { //kSpecialCasesClasses.put(kRemoteTypeStr, java.rmi.Remote.class); } - public static final Hashtable kSpecialCasesArrayPrefix = new Hashtable(); + private static final Hashtable kSpecialCasesArrayPrefix = new Hashtable(); static { kSpecialCasesArrayPrefix.put(java.lang.String.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); @@ -255,7 +255,7 @@ public class RepositoryId { kSpecialCasesArrayPrefix.put(java.rmi.Remote.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); } - public static final Hashtable kSpecialPrimitives = new Hashtable(); + private static final Hashtable kSpecialPrimitives = new Hashtable(); static { kSpecialPrimitives.put("int","long"); diff --git a/corba/src/share/classes/com/sun/corba/se/spi/logging/CORBALogDomains.java b/corba/src/share/classes/com/sun/corba/se/spi/logging/CORBALogDomains.java index a2fc7b8f491..978b967c674 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/logging/CORBALogDomains.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/logging/CORBALogDomains.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,7 +58,7 @@ public abstract class CORBALogDomains { private CORBALogDomains() {} // Top level log domain for CORBA - public static String TOP_LEVEL_DOMAIN = "javax.enterprise.resource.corba"; + public static final String TOP_LEVEL_DOMAIN = "javax.enterprise.resource.corba"; public static final String RPC = "rpc" ; diff --git a/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc b/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc index e82f724642d..da1ab4de948 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc +++ b/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc @@ -1,6 +1,6 @@ ; -; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. +; Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. ; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ; ; This code is free software; you can redistribute it and/or modify it @@ -62,6 +62,7 @@ (IS_LOCAL_REQUIRES_STUB 43 WARNING "Call to StubAdapter.isLocal did not pass a stub") (REQUEST_REQUIRES_STUB 44 WARNING "Call to StubAdapter.request did not pass a stub") (BAD_ACTIVATE_TIE_CALL 45 WARNING "Call to StubAdapter.activateTie did not pass a valid Tie") + (IO_EXCEPTION_ON_CLOSE 46 FINE "Useless exception on call to Closeable.close()") ) (BAD_PARAM (NULL_PARAM 1 WARNING "Null parameter") @@ -291,7 +292,31 @@ (JAVA_STREAM_INIT_FAILED 95 WARNING "Java stream initialization failed") (DUPLICATE_ORB_VERSION_SERVICE_CONTEXT 96 WARNING "An ORBVersionServiceContext was already in the service context list") (DUPLICATE_SENDING_CONTEXT_SERVICE_CONTEXT 97 WARNING "A SendingContextServiceContext was already in the service context list") + (WORK_QUEUE_THREAD_INTERRUPTED 98 FINE "Worker Thread from thread pool {0} was interrupted: closeCalled is {1}.") + (WORKER_THREAD_CREATED + 104 FINE "Worker thread {0} has been created with ClassLoader {1}") + (WORKER_THREAD_THROWABLE_FROM_REQUEST_WORK + 109 FINE "Worker thread {0} caught throwable {1} when requesting work from work queue {2}.") + (WORKER_THREAD_NOT_NEEDED + 110 FINE "Worker thread {0} will exit; current thread count, {1}, greater than minunum worker threads needed, {2}.") + (WORKER_THREAD_DO_WORK_THROWABLE + 111 FINE "Worker thread {0} caught throwable {1} while executing work.") + (WORKER_THREAD_CAUGHT_UNEXPECTED_THROWABLE + 112 WARNING "Worker thread {0} caught unexpected throwable {1}.") + (WORKER_THREAD_CREATION_FAILURE + 113 SEVERE "Worker thread creation failure; cause {0}.") + (WORKER_THREAD_SET_NAME_FAILURE + 114 WARNING "Unable to set worker thread {0} name to {1}; cause {2}.") + (WORK_QUEUE_REQUEST_WORK_NO_WORK_FOUND + 116 WARNING "Ignoring unexpected {0} when retrieving of work from work queue, {1}.") + (THREAD_POOL_CLOSE_ERROR 126 WARNING "Error in closing ThreadPool") + (THREAD_GROUP_IS_DESTROYED 127 WARNING "ThreadGroup {0} is already destroyed: can't destroy it") + (THREAD_GROUP_HAS_ACTIVE_THREADS_IN_CLOSE 128 WARNING "ThreadGroup {0} has {1} active threads: destroy may cause exception") + (THREAD_GROUP_HAS_SUB_GROUPS_IN_CLOSE 129 WARNING "ThreadGroup {0} has {1} sub-thread groups: destroy may cause exception") + (THREAD_GROUP_DESTROY_FAILED 130 WARNING "ThreadGroup {0} could not be destroyed") + (INTERRUPTED_JOIN_CALL_WHILE_CLOSING_THREAD_POOL 131 WARNING "Join was interrupted on thread {0} while closing ThreadPool {1}") ) + (MARSHAL (CHUNK_OVERFLOW 1 WARNING "Data read past end of chunk without closing the chunk") (UNEXPECTED_EOF 2 WARNING "Grow buffer strategy called underflow handler") diff --git a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java index 2f5ce1e5343..1a7e6b61f80 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,7 @@ */ package com.sun.corba.se.spi.monitoring; +import java.io.Closeable; import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.monitoring.MonitoredObject; import java.util.*; @@ -39,7 +40,7 @@ import java.util.*; * @author Hemanth Puttaswamy *

    */ -public interface MonitoringManager { +public interface MonitoringManager extends Closeable { /////////////////////////////////////// // operations diff --git a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java index a23dfc3d0d6..88b6238ff53 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,4 +40,6 @@ public interface MonitoringManagerFactory { */ MonitoringManager createMonitoringManager( String nameOfTheRoot, String description ); + + void remove(String nameOfTheRoot); } diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java index 0fad97f78ba..22b89e73f22 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -171,7 +171,7 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB private static Map staticWrapperMap = new ConcurrentHashMap(); - private MonitoringManager monitoringManager; + protected MonitoringManager monitoringManager; // There is only one instance of the PresentationManager // that is shared between all ORBs. This is necessary @@ -226,6 +226,14 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB globalPM.setStubFactoryFactory( true, dynamicStubFactoryFactory ) ; } + public void destroy() { + wrapper = null; + omgWrapper = null; + typeCodeMap = null; + primitiveTypeCodeConstants = null; + byteBufferPool = null; + } + /** Get the single instance of the PresentationManager */ public static PresentationManager getPresentationManager() @@ -302,6 +310,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB // Typecode support: needed in both ORBImpl and ORBSingleton public TypeCodeImpl get_primitive_tc(int kind) { + synchronized (this) { + checkShutdownState(); + } try { return primitiveTypeCodeConstants[kind] ; } catch (Throwable t) { @@ -311,15 +322,20 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB public synchronized void setTypeCode(String id, TypeCodeImpl code) { + checkShutdownState(); typeCodeMap.put(id, code); } public synchronized TypeCodeImpl getTypeCode(String id) { + checkShutdownState(); return (TypeCodeImpl)typeCodeMap.get(id); } public MonitoringManager getMonitoringManager( ) { + synchronized (this) { + checkShutdownState(); + } return monitoringManager; } @@ -434,6 +450,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB */ public Logger getLogger( String domain ) { + synchronized (this) { + checkShutdownState(); + } ORBData odata = getORBData() ; // Determine the correct ORBId. There are 3 cases: @@ -510,6 +529,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB // This method must also be inherited by both ORB and ORBSingleton. public ByteBufferPool getByteBufferPool() { + synchronized (this) { + checkShutdownState(); + } if (byteBufferPool == null) byteBufferPool = new ByteBufferPoolImpl(this); diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java index a4cc2b6a559..dd61ff22032 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,15 @@ package com.sun.corba.se.spi.orbutil.threadpool; +import java.io.Closeable; -public interface ThreadPool +/** This interface defines a thread pool execution service. The ORB uses this + * interface, which preceeds the JDK 5 ExecutorService. Note that the close + * method must be called in order to reclaim thread resources. + */ +public interface ThreadPool extends Closeable { + /** * This method will return any instance of the WorkQueue. If the ThreadPool * instance only services one WorkQueue then that WorkQueue instance will diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java index 9225a90a598..14875f6d20a 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,9 @@ package com.sun.corba.se.spi.orbutil.threadpool; -public interface ThreadPoolManager +import java.io.Closeable; + +public interface ThreadPoolManager extends Closeable { /** * This method will return an instance of the threadpool given a threadpoolId, diff --git a/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java b/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java index b59062a43be..ac25b79510a 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package com.sun.corba.se.spi.protocol; +import java.io.Closeable; + import org.omg.PortableInterceptor.ObjectReferenceTemplate ; import org.omg.PortableInterceptor.Interceptor ; import org.omg.PortableInterceptor.Current ; @@ -51,7 +53,7 @@ import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage ; /** This interface defines the PI interface that is used to interface the rest of the * ORB to the PI implementation. */ -public interface PIHandler { +public interface PIHandler extends Closeable { /** Complete the initialization of the PIHandler. This will execute the methods * on the ORBInitializers, if any are defined. This must be done here so that * the ORB can obtain the PIHandler BEFORE the ORBInitializers run, since they diff --git a/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java b/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java index e4fc9ae4265..f5aae43731d 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,33 +37,59 @@ import com.sun.corba.se.spi.oa.ObjectAdapterFactory ; * This is a registry of all subcontract ID dependent objects. This includes: * LocalClientRequestDispatcherFactory, ClientRequestDispatcher, ServerRequestDispatcher, and * ObjectAdapterFactory. - * XXX Should the registerXXX methods take an scid or not? I think we - * want to do this so that the same instance can be shared across multiple - * scids (and this is already true for ObjectAdapterFactory and LocalClientRequestDispatcherFactory), - * but this will require some changes for ClientRequestDispatcher and ServerRequestDispatcher. */ public interface RequestDispatcherRegistry { - // XXX needs javadocs! + /** Register a ClientRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a remote method invocation is processed by the ORB for a + * particular kind of object reference. + */ void registerClientRequestDispatcher( ClientRequestDispatcher csc, int scid) ; + /** Get the ClientRequestDispatcher for subcontract ID scid. + */ ClientRequestDispatcher getClientRequestDispatcher( int scid ) ; + /** Register a LocalClientRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a particular kind of colocated request is processed. + */ void registerLocalClientRequestDispatcherFactory( LocalClientRequestDispatcherFactory csc, int scid) ; + /** Get the LocalClientRequestDispatcher for subcontract ID scid. + */ LocalClientRequestDispatcherFactory getLocalClientRequestDispatcherFactory( int scid ) ; + /** Register a CorbaServerRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a particular kind of request is processed when received by the ORB. + */ void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, int scid) ; + /** Get the CorbaServerRequestDispatcher for subcontract ID scid. + */ CorbaServerRequestDispatcher getServerRequestDispatcher(int scid) ; + /** Register a CorbaServerRequestDispatcher for handling an explicit object key name. + * This is used for non-standard invocations such as INS and the bootstrap name service. + */ void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, String name ) ; + /** Get the CorbaServerRequestDispatcher for a particular object key. + */ CorbaServerRequestDispatcher getServerRequestDispatcher( String name ) ; + /** Register an ObjectAdapterFactory for a particular subcontract ID. + * This controls how Object references are created and managed. + */ void registerObjectAdapterFactory( ObjectAdapterFactory oaf, int scid) ; + /** Get the ObjectAdapterFactory for a particular subcontract ID scid. + */ ObjectAdapterFactory getObjectAdapterFactory( int scid ) ; - Set getObjectAdapterFactories() ; + /** Return the set of all ObjectAdapterFactory instances that are registered. + */ + Set getObjectAdapterFactories(); } diff --git a/corba/src/share/classes/sun/rmi/rmic/iiop/IDLNames.java b/corba/src/share/classes/sun/rmi/rmic/iiop/IDLNames.java index 34b3c1f56b5..b69e6d07fa9 100644 --- a/corba/src/share/classes/sun/rmi/rmic/iiop/IDLNames.java +++ b/corba/src/share/classes/sun/rmi/rmic/iiop/IDLNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,6 +71,34 @@ public class IDLNames implements sun.rmi.rmic.iiop.Constants { (byte)'F', }; + // Legal IDL Identifier characters (1 = legal). Note + // that '.' (2E) is marked as legal even though it is + // not legal in IDL. This allows us to treat a fully + // qualified Java name with '.' package separators + // uniformly, and is safe because that is the only + // legal use of '.' in a Java name. + + private static final byte[] IDL_IDENTIFIER_CHARS = { + + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 00-0f + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 10-1f + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, // 20-2f + 1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0, // 30-3f + 0,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 40-4f + 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,1, // 50-5f + 0,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 60-6f + 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,0, // 70-7f + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 80-8f + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 90-9f + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // a0-af + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // b0-bf + 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // c0-cf + 0,1,1,1, 1,1,1,0, 1,1,1,1, 1,0,0,1, // d0-df + 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // e0-ef + 0,1,1,1, 1,1,1,0, 1,1,1,1, 1,0,0,1, // f0-ff + }; + //_____________________________________________________________________ // Public Interfaces //_____________________________________________________________________ @@ -139,7 +167,7 @@ public class IDLNames implements sun.rmi.rmic.iiop.Constants { result = replace(result,"x\\U","U"); // Now see if we have any remaining illegal characters (see - // RepositoryId.IDL_IDENTIFIER_CHARS array)... + // IDL_IDENTIFIER_CHARS array)... int length = result.length(); StringBuffer buffer = null; @@ -148,7 +176,7 @@ public class IDLNames implements sun.rmi.rmic.iiop.Constants { char c = result.charAt(i); - if (c > 255 || RepositoryId.IDL_IDENTIFIER_CHARS[c] == 0) { + if (c > 255 || IDL_IDENTIFIER_CHARS[c] == 0) { // We gotta convert. Have we already started? diff --git a/corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java b/corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java index 87eee7bef61..143beefc8e1 100644 --- a/corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java +++ b/corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -425,7 +425,7 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator { // Write the _ids() method... p.plnI("public String[] _ids() { "); - p.pln("return _type_ids;"); + p.pln("return (String[]) _type_ids.clone();"); p.pOln("}"); // Get all the methods and write each stub method... @@ -1860,11 +1860,11 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator { { if(POATie){ p.plnI("public String[] _all_interfaces(org.omg.PortableServer.POA poa, byte[] objectId){"); - p.pln("return _type_ids;"); + p.pln("return (String[]) _type_ids.clone();"); p.pOln("}"); } else { p.plnI("public String[] _ids() { "); - p.pln("return _type_ids;"); + p.pln("return (String[]) _type_ids.clone();"); p.pOln("}"); } } diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 6beed08f8a6..024b439f670 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -247,3 +247,21 @@ bfcf92bfefb82da00f7fdbf0d9273feaa0a9456d jdk8-b37 637c3f5f068f88fb9ec9c5867341cf59fd5ebedc jdk8-b38 73147e6c48813b5fee904aa33f79a77103250ff4 hs24-b10 96a403721094ecdaf6a1f4f52ebd0a82e07df199 jdk8-b39 +14b0e07ab9a6fa1662414496b7e07ac8450cf517 hs24-b11 +ff9decc8235d5af80ea45fda4ecbe643ea252564 jdk8-b40 +785573170238f0eae6dc8e22ecf1050fbc9ea055 hs24-b12 +37add4fa0296705f67481e1fd50e2900cd25e39b jdk8-b41 +bd568544be7fcd12a9327e6c448592198d57b043 hs24-b13 +55954061c6e8750ea39a63523fd65d580db6eeb1 jdk8-b42 +e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43 +5ba29a1db46ecb80a321ca873adb56a3fe6ad320 hs24-b14 +831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44 +9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45 +40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15 +cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46 +0c7bb1f4f9c8062b5c5bfa56b3bdca44839b4109 jdk8-b47 +66b0450071c1534e014b131892cc86b63f1d009c hs24-b16 +1e26f61bbb521642639f56fae11326f1932f5a7d jdk8-b48 +bd54fe36b5e50f9ef1e30a5047b27fee5297e268 hs24-b17 +e3619706a7253540a2d94e9e841acaab8ace7038 jdk8-b49 +72e0362c3f0cfacbbac8af8a5b9d2e182f21c17b hs24-b18 diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java index 233bc173a88..029c20f0b8e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java @@ -572,10 +572,10 @@ public class HotSpotAgent { if (cpu.equals("x86")) { machDesc = new MachineDescriptionIntelX86(); - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { machDesc = new MachineDescriptionAMD64(); } else { - throw new DebuggerException("BSD only supported on x86/amd64"); + throw new DebuggerException("BSD only supported on x86/x86_64. Current arch: " + cpu); } BsdDebuggerLocal dbg = new BsdDebuggerLocal(machDesc, !isServer); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java index 668fba78372..2ff5308b158 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -657,7 +657,7 @@ public class BugSpot extends JPanel { while (fr != null) { trace.add(new StackTraceEntry(fr, getCDebugger())); try { - fr = fr.sender(); + fr = fr.sender(t); } catch (AddressException e) { e.printStackTrace(); showMessageDialog("Error while walking stack; stack trace will be truncated\n(see console for details)", diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java index bb0a444702f..3b89f5996db 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java @@ -762,10 +762,10 @@ public class BugSpotAgent { if (cpu.equals("x86")) { machDesc = new MachineDescriptionIntelX86(); - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || (cpu.equals("x86_64"))) { machDesc = new MachineDescriptionAMD64(); } else { - throw new DebuggerException("Bsd only supported on x86/amd64"); + throw new DebuggerException("Bsd only supported on x86/x86_64. Current arch: " + cpu); } // Note we do not use a cache for the local debugger in server diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java index 92f7bbf3d42..1818d1d5a96 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java @@ -90,7 +90,7 @@ class BsdCDebugger implements CDebugger { Address pc = context.getRegisterAsAddress(X86ThreadContext.EIP); if (pc == null) return null; return new BsdX86CFrame(dbg, ebp, pc); - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); Address rbp = context.getRegisterAsAddress(AMD64ThreadContext.RBP); if (rbp == null) return null; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java index 8c13adade31..01fe1d74577 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java @@ -33,7 +33,7 @@ class BsdThreadContextFactory { String cpu = dbg.getCPU(); if (cpu.equals("x86")) { return new BsdX86ThreadContext(dbg); - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { return new BsdAMD64ThreadContext(dbg); } else { throw new RuntimeException("cpu " + cpu + " is not yet supported"); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java index b27a5399009..01d9b06dcd1 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.bsd.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.bsd.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -51,8 +52,11 @@ final public class BsdAMD64CFrame extends BasicCFrame { return rbp; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java index 40292b921e6..237223ed308 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.bsd.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; +import sun.jvm.hotspot.debugger.x86.*; final public class BsdX86CFrame extends BasicCFrame { // package/class internals only @@ -52,8 +53,11 @@ final public class BsdX86CFrame extends BasicCFrame { return ebp; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java index 30ddc298fd9..7640ddaa35e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ import sun.jvm.hotspot.debugger.*; public interface CFrame { /** Returns null when no more frames on stack */ - public CFrame sender(); + public CFrame sender(ThreadProxy th); /** Get the program counter of this frame */ public Address pc(); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java index 03b5dc572ca..d6ec6b45003 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.cdbg.basic.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -43,8 +44,11 @@ public class AMD64CFrame extends BasicCFrame { this.pc = pc; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java index 0764a5da5e9..76b101bef97 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.cdbg.basic.x86; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.x86.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -43,8 +44,11 @@ public class X86CFrame extends BasicCFrame { this.pc = pc; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java index 3fab9a9e1d0..36977f1aeaa 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.linux.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.linux.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -51,8 +52,11 @@ final public class LinuxAMD64CFrame extends BasicCFrame { return rbp; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java index eb490b284b5..d52f6b35ee0 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ final public class LinuxSPARCCFrame extends BasicCFrame { return sp; } - public CFrame sender() { + public CFrame sender(ThreadProxy thread) { if (sp == null) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java index 67074c6533c..8d066720ea2 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.linux.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; +import sun.jvm.hotspot.debugger.x86.*; final public class LinuxX86CFrame extends BasicCFrame { // package/class internals only @@ -52,8 +53,11 @@ final public class LinuxX86CFrame extends BasicCFrame { return ebp; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java index 6b508e1e4e8..83d5f677a6e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ final class ProcCFrame extends BasicCFrame { return fp; } - public CFrame sender() { + public CFrame sender(ThreadProxy t) { return sender; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebuggerLocal.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebuggerLocal.java index 5d75114fd61..1d9f7cea122 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebuggerLocal.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebuggerLocal.java @@ -81,7 +81,7 @@ public class ProcDebuggerLocal extends DebuggerBase implements ProcDebugger { pcRegIndex = X86ThreadContext.EIP; fpRegIndex = X86ThreadContext.EBP; unalignedAccessesOkay = true; - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { threadFactory = new ProcAMD64ThreadFactory(this); pcRegIndex = AMD64ThreadContext.RIP; fpRegIndex = AMD64ThreadContext.RBP; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java index 4f226df522c..beb3f536a14 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java @@ -64,7 +64,7 @@ public class RemoteDebuggerClient extends DebuggerBase implements JVMDebugger { cachePageSize = 4096; cacheNumPages = parseCacheNumPagesProperty(cacheSize / cachePageSize); unalignedAccessesOkay = true; - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { threadFactory = new RemoteAMD64ThreadFactory(this); cachePageSize = 4096; cacheNumPages = parseCacheNumPagesProperty(cacheSize / cachePageSize); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java index d28bca18d2e..662f18e089e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -688,8 +688,7 @@ implements ReferenceType { if (sde == null) { String extension = null; if (saKlass instanceof InstanceKlass) { - Symbol sdeSym = ((InstanceKlass)saKlass).getSourceDebugExtension(); - extension = (sdeSym != null)? sdeSym.asString() : null; + extension = ((InstanceKlass)saKlass).getSourceDebugExtension(); } if (extension == null) { sde = NO_SDE_INFO_MARK; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/AccessFlags.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/AccessFlags.java index 02314153e15..76c73162fa3 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/AccessFlags.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/AccessFlags.java @@ -81,6 +81,7 @@ public class AccessFlags implements /* imports */ ClassConstants { // field flags public boolean fieldAccessWatched () { return (flags & JVM_ACC_FIELD_ACCESS_WATCHED) != 0; } public boolean fieldModificationWatched() { return (flags & JVM_ACC_FIELD_MODIFICATION_WATCHED) != 0; } + public boolean fieldHasGenericSignature() { return (flags & JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE)!= 0; } public void printOn(PrintStream tty) { // prints only .class flags and not the hotspot internal flags diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java index 5346d490761..241cba1f9bb 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,15 +47,11 @@ public class ConstMethod extends Oop { private static int HAS_LINENUMBER_TABLE; private static int HAS_CHECKED_EXCEPTIONS; private static int HAS_LOCALVARIABLE_TABLE; + private static int HAS_EXCEPTION_TABLE; private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("constMethodOopDesc"); - // Backpointer to non-const methodOop - method = new OopField(type.getOopField("_method"), 0); - // The exception handler table. 4-tuples of ints [start_pc, end_pc, - // handler_pc, catch_type index] For methods with no exceptions the - // table is pointing to Universe::the_empty_int_array - exceptionTable = new OopField(type.getOopField("_exception_table"), 0); + constants = new OopField(type.getOopField("_constants"), 0); constMethodSize = new CIntField(type.getCIntegerField("_constMethod_size"), 0); flags = new ByteField(type.getJByteField("_flags"), 0); @@ -63,12 +59,14 @@ public class ConstMethod extends Oop { HAS_LINENUMBER_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_linenumber_table").intValue(); HAS_CHECKED_EXCEPTIONS = db.lookupIntConstant("constMethodOopDesc::_has_checked_exceptions").intValue(); HAS_LOCALVARIABLE_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_localvariable_table").intValue(); + HAS_EXCEPTION_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_exception_table").intValue(); // Size of Java bytecodes allocated immediately after constMethodOop. codeSize = new CIntField(type.getCIntegerField("_code_size"), 0); nameIndex = new CIntField(type.getCIntegerField("_name_index"), 0); signatureIndex = new CIntField(type.getCIntegerField("_signature_index"), 0); genericSignatureIndex = new CIntField(type.getCIntegerField("_generic_signature_index"),0); + idnum = new CIntField(type.getCIntegerField("_method_idnum"), 0); // start of byte code bytecodeOffset = type.getSize(); @@ -78,6 +76,9 @@ public class ConstMethod extends Oop { type = db.lookupType("LocalVariableTableElement"); localVariableTableElementSize = type.getSize(); + + type = db.lookupType("ExceptionTableElement"); + exceptionTableElementSize = type.getSize(); } ConstMethod(OopHandle handle, ObjectHeap heap) { @@ -85,28 +86,31 @@ public class ConstMethod extends Oop { } // Fields - private static OopField method; - private static OopField exceptionTable; + private static OopField constants; private static CIntField constMethodSize; private static ByteField flags; private static CIntField codeSize; private static CIntField nameIndex; private static CIntField signatureIndex; private static CIntField genericSignatureIndex; + private static CIntField idnum; // start of bytecode private static long bytecodeOffset; private static long checkedExceptionElementSize; private static long localVariableTableElementSize; + private static long exceptionTableElementSize; - // Accessors for declared fields public Method getMethod() { - return (Method) method.getValue(this); + InstanceKlass ik = (InstanceKlass)getConstants().getPoolHolder(); + ObjArray methods = ik.getMethods(); + return (Method)methods.getObjAt(getIdNum()); } - public TypeArray getExceptionTable() { - return (TypeArray) exceptionTable.getValue(this); + // Accessors for declared fields + public ConstantPool getConstants() { + return (ConstantPool) constants.getValue(this); } public long getConstMethodSize() { @@ -133,6 +137,10 @@ public class ConstMethod extends Oop { return genericSignatureIndex.getValue(this); } + public long getIdNum() { + return idnum.getValue(this); + } + public Symbol getName() { return getMethod().getName(); } @@ -223,8 +231,7 @@ public class ConstMethod extends Oop { public void iterateFields(OopVisitor visitor, boolean doVMFields) { super.iterateFields(visitor, doVMFields); if (doVMFields) { - visitor.doOop(method, true); - visitor.doOop(exceptionTable, true); + visitor.doOop(constants, true); visitor.doCInt(constMethodSize, true); visitor.doByte(flags, true); visitor.doCInt(codeSize, true); @@ -315,6 +322,23 @@ public class ConstMethod extends Oop { return ret; } + public boolean hasExceptionTable() { + return (getFlags() & HAS_EXCEPTION_TABLE) != 0; + } + + public ExceptionTableElement[] getExceptionTable() { + if (Assert.ASSERTS_ENABLED) { + Assert.that(hasExceptionTable(), "should only be called if table is present"); + } + ExceptionTableElement[] ret = new ExceptionTableElement[getExceptionTableLength()]; + long offset = offsetOfExceptionTable(); + for (int i = 0; i < ret.length; i++) { + ret[i] = new ExceptionTableElement(getHandle(), offset); + offset += exceptionTableElementSize; + } + return ret; + } + public boolean hasCheckedExceptions() { return (getFlags() & HAS_CHECKED_EXCEPTIONS) != 0; } @@ -404,7 +428,10 @@ public class ConstMethod extends Oop { if (Assert.ASSERTS_ENABLED) { Assert.that(hasLocalVariableTable(), "should only be called if table is present"); } - if (hasCheckedExceptions()) { + + if (hasExceptionTable()) { + return offsetOfExceptionTable() - 2; + } else if (hasCheckedExceptions()) { return offsetOfCheckedExceptions() - 2; } else { return offsetOfLastU2Element(); @@ -421,4 +448,33 @@ public class ConstMethod extends Oop { return offset; } + private int getExceptionTableLength() { + if (hasExceptionTable()) { + return (int) getHandle().getCIntegerAt(offsetOfExceptionTableLength(), 2, true); + } else { + return 0; + } + } + + private long offsetOfExceptionTableLength() { + if (Assert.ASSERTS_ENABLED) { + Assert.that(hasExceptionTable(), "should only be called if table is present"); + } + if (hasCheckedExceptions()) { + return offsetOfCheckedExceptions() - 2; + } else { + return offsetOfLastU2Element(); + } + } + + private long offsetOfExceptionTable() { + long offset = offsetOfExceptionTableLength(); + long length = getExceptionTableLength(); + if (Assert.ASSERTS_ENABLED) { + Assert.that(length > 0, "should only be called if table is present"); + } + offset -= length * exceptionTableElementSize; + return offset; + } + } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java new file mode 100644 index 00000000000..93153708696 --- /dev/null +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +import java.io.*; +import java.util.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.interpreter.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.utilities.*; + +public class ExceptionTableElement { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + Type type = db.lookupType("ExceptionTableElement"); + offsetOfStartPC = type.getCIntegerField("start_pc").getOffset(); + offsetOfEndPC = type.getCIntegerField("end_pc").getOffset(); + offsetOfHandlerPC = type.getCIntegerField("handler_pc").getOffset(); + offsetOfCatchTypeIndex = type.getCIntegerField("catch_type_index").getOffset(); + } + + private static long offsetOfStartPC; + private static long offsetOfEndPC; + private static long offsetOfHandlerPC; + private static long offsetOfCatchTypeIndex; + + private OopHandle handle; + private long offset; + + public ExceptionTableElement(OopHandle handle, long offset) { + this.handle = handle; + this.offset = offset; + } + + public int getStartPC() { + return (int) handle.getCIntegerAt(offset + offsetOfStartPC, 2, true); + } + + public int getEndPC() { + return (int) handle.getCIntegerAt(offset + offsetOfEndPC, 2, true); + } + + public int getHandlerPC() { + return (int) handle.getCIntegerAt(offset + offsetOfHandlerPC, 2, true); + } + + public int getCatchTypeIndex() { + return (int) handle.getCIntegerAt(offset + offsetOfCatchTypeIndex, 2, true); + } +} + diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java index f25493d6831..581eee80d85 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -651,10 +651,11 @@ public class GenerateOopMap { boolean fellThrough = false; // False to get first BB marked. // First mark all exception handlers as start of a basic-block - TypeArray excps = method().getExceptionTable(); - for(int i = 0; i < excps.getLength(); i += 4) { - int handler_pc_idx = i+2; - markBB(excps.getIntAt(handler_pc_idx), null); + if (method().hasExceptionTable()) { + ExceptionTableElement[] excps = method().getExceptionTable(); + for(int i = 0; i < excps.length; i++) { + markBB(excps[i].getHandlerPC(), null); + } } // Then iterate through the code @@ -891,14 +892,15 @@ public class GenerateOopMap { // Mark entry basic block as alive and all exception handlers _basic_blocks[0].markAsAlive(); - TypeArray excps = method().getExceptionTable(); - for(int i = 0; i < excps.getLength(); i += 4) { - int handler_pc_idx = i+2; - BasicBlock bb = getBasicBlockAt(excps.getIntAt(handler_pc_idx)); - // If block is not already alive (due to multiple exception handlers to same bb), then - // make it alive - if (bb.isDead()) - bb.markAsAlive(); + if (method().hasExceptionTable()) { + ExceptionTableElement[] excps = method().getExceptionTable(); + for(int i = 0; i < excps.length; i ++) { + BasicBlock bb = getBasicBlockAt(excps[i].getHandlerPC()); + // If block is not already alive (due to multiple exception handlers to same bb), then + // make it alive + if (bb.isDead()) + bb.markAsAlive(); + } } BytecodeStream bcs = new BytecodeStream(_method); @@ -1468,12 +1470,12 @@ public class GenerateOopMap { if (_has_exceptions) { int bci = itr.bci(); - TypeArray exct = method().getExceptionTable(); - for(int i = 0; i< exct.getLength(); i+=4) { - int start_pc = exct.getIntAt(i); - int end_pc = exct.getIntAt(i+1); - int handler_pc = exct.getIntAt(i+2); - int catch_type = exct.getIntAt(i+3); + ExceptionTableElement[] exct = method().getExceptionTable(); + for(int i = 0; i< exct.length; i++) { + int start_pc = exct[i].getStartPC(); + int end_pc = exct[i].getEndPC(); + int handler_pc = exct[i].getHandlerPC(); + int catch_type = exct[i].getCatchTypeIndex(); if (start_pc <= bci && bci < end_pc) { BasicBlock excBB = getBasicBlockAt(handler_pc); @@ -2151,7 +2153,7 @@ public class GenerateOopMap { _conflict = false; _max_locals = (int) method().getMaxLocals(); _max_stack = (int) method().getMaxStack(); - _has_exceptions = (method().getExceptionTable().getLength() > 0); + _has_exceptions = (method().hasExceptionTable()); _nof_refval_conflicts = 0; _init_vars = new ArrayList(5); // There are seldom more than 5 init_vars _report_result = false; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java index f342eb72882..acd975206f5 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java @@ -50,7 +50,6 @@ public class InstanceKlass extends Klass { private static int INITVAL_INDEX_OFFSET; private static int LOW_OFFSET; private static int HIGH_OFFSET; - private static int GENERIC_SIGNATURE_INDEX_OFFSET; private static int FIELD_SLOTS; // ClassState constants @@ -99,7 +98,6 @@ public class InstanceKlass extends Klass { INITVAL_INDEX_OFFSET = db.lookupIntConstant("FieldInfo::initval_index_offset").intValue(); LOW_OFFSET = db.lookupIntConstant("FieldInfo::low_offset").intValue(); HIGH_OFFSET = db.lookupIntConstant("FieldInfo::high_offset").intValue(); - GENERIC_SIGNATURE_INDEX_OFFSET = db.lookupIntConstant("FieldInfo::generic_signature_offset").intValue(); FIELD_SLOTS = db.lookupIntConstant("FieldInfo::field_slots").intValue(); // read ClassState constants CLASS_STATE_UNPARSABLE_BY_GC = db.lookupIntConstant("instanceKlass::unparsable_by_gc").intValue(); @@ -279,7 +277,25 @@ public class InstanceKlass extends Klass { } public short getFieldGenericSignatureIndex(int index) { - return getFields().getShortAt(index * FIELD_SLOTS + GENERIC_SIGNATURE_INDEX_OFFSET); + int len = (int)getFields().getLength(); + int allFieldsCount = getAllFieldsCount(); + int generic_signature_slot = allFieldsCount * FIELD_SLOTS; + for (int i = 0; i < allFieldsCount; i++) { + short flags = getFieldAccessFlags(i); + AccessFlags access = new AccessFlags(flags); + if (i == index) { + if (access.fieldHasGenericSignature()) { + return getFields().getShortAt(generic_signature_slot); + } else { + return 0; + } + } else { + if (access.fieldHasGenericSignature()) { + generic_signature_slot ++; + } + } + } + return 0; } public Symbol getFieldGenericSignature(int index) { @@ -309,13 +325,24 @@ public class InstanceKlass extends Klass { public ObjArray getTransitiveInterfaces() { return (ObjArray) transitiveInterfaces.getValue(this); } public TypeArray getFields() { return (TypeArray) fields.getValue(this); } public int getJavaFieldsCount() { return (int) javaFieldsCount.getValue(this); } - public int getAllFieldsCount() { return (int)getFields().getLength() / FIELD_SLOTS; } + public int getAllFieldsCount() { + int len = (int)getFields().getLength(); + int allFieldsCount = 0; + for (; allFieldsCount*FIELD_SLOTS < len; allFieldsCount++) { + short flags = getFieldAccessFlags(allFieldsCount); + AccessFlags access = new AccessFlags(flags); + if (access.fieldHasGenericSignature()) { + len --; + } + } + return allFieldsCount; + } public ConstantPool getConstants() { return (ConstantPool) constants.getValue(this); } public Oop getClassLoader() { return classLoader.getValue(this); } public Oop getProtectionDomain() { return protectionDomain.getValue(this); } public ObjArray getSigners() { return (ObjArray) signers.getValue(this); } public Symbol getSourceFileName() { return getSymbol(sourceFileName); } - public Symbol getSourceDebugExtension(){ return getSymbol(sourceDebugExtension); } + public String getSourceDebugExtension(){ return CStringUtilities.getString(sourceDebugExtension.getValue(getHandle())); } public TypeArray getInnerClasses() { return (TypeArray) innerClasses.getValue(this); } public long getNonstaticFieldSize() { return nonstaticFieldSize.getValue(this); } public long getStaticOopFieldCount() { return staticOopFieldCount.getValue(this); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java index d42115b90e3..d8b3fade1af 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,7 +48,6 @@ public class Method extends Oop { private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("methodOopDesc"); constMethod = new OopField(type.getOopField("_constMethod"), 0); - constants = new OopField(type.getOopField("_constants"), 0); methodData = new OopField(type.getOopField("_method_data"), 0); methodSize = new CIntField(type.getCIntegerField("_method_size"), 0); maxStack = new CIntField(type.getCIntegerField("_max_stack"), 0); @@ -83,7 +82,6 @@ public class Method extends Oop { // Fields private static OopField constMethod; - private static OopField constants; private static OopField methodData; private static CIntField methodSize; private static CIntField maxStack; @@ -125,9 +123,10 @@ public class Method extends Oop { // Accessors for declared fields public ConstMethod getConstMethod() { return (ConstMethod) constMethod.getValue(this); } - public ConstantPool getConstants() { return (ConstantPool) constants.getValue(this); } + public ConstantPool getConstants() { + return getConstMethod().getConstants(); + } public MethodData getMethodData() { return (MethodData) methodData.getValue(this); } - public TypeArray getExceptionTable() { return getConstMethod().getExceptionTable(); } /** WARNING: this is in words, not useful in this system; use getObjectSize() instead */ public long getMethodSize() { return methodSize.getValue(this); } public long getMaxStack() { return maxStack.getValue(this); } @@ -281,7 +280,6 @@ public class Method extends Oop { super.iterateFields(visitor, doVMFields); if (doVMFields) { visitor.doOop(constMethod, true); - visitor.doOop(constants, true); visitor.doCInt(methodSize, true); visitor.doCInt(maxStack, true); visitor.doCInt(maxLocals, true); @@ -329,6 +327,14 @@ public class Method extends Oop { return null; } + public boolean hasExceptionTable() { + return getConstMethod().hasExceptionTable(); + } + + public ExceptionTableElement[] getExceptionTable() { + return getConstMethod().getExceptionTable(); + } + public boolean hasCheckedExceptions() { return getConstMethod().hasCheckedExceptions(); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java index edd8a806442..a42d8be68b5 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -141,18 +141,19 @@ public class OopUtilities implements /* imports */ JVMTIThreadState { public static String stringOopToString(Oop stringOop) { if (offsetField == null) { InstanceKlass k = (InstanceKlass) stringOop.getKlass(); - offsetField = (IntField) k.findField("offset", "I"); - countField = (IntField) k.findField("count", "I"); + offsetField = (IntField) k.findField("offset", "I"); // optional + countField = (IntField) k.findField("count", "I"); // optional valueField = (OopField) k.findField("value", "[C"); if (Assert.ASSERTS_ENABLED) { - Assert.that(offsetField != null && - countField != null && - valueField != null, "must find all java.lang.String fields"); + Assert.that(valueField != null, "Field \'value\' of java.lang.String not found"); } } - return charArrayToString((TypeArray) valueField.getValue(stringOop), - offsetField.getValue(stringOop), - countField.getValue(stringOop)); + if (offsetField != null && countField != null) { + return charArrayToString((TypeArray) valueField.getValue(stringOop), + offsetField.getValue(stringOop), + countField.getValue(stringOop)); + } + return charArrayToString((TypeArray) valueField.getValue(stringOop)); } public static String stringOopToEscapedString(Oop stringOop) { diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java index 722496e3c27..e17a75c1f43 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java @@ -153,6 +153,8 @@ public interface ClassConstants public static final long JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000; // field modification is watched by JVMTI public static final long JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000; + // field has generic signature + public static final long JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE = 0x00000800; // flags accepted by set_field_flags public static final long JVM_ACC_FIELD_FLAGS = 0x00008000 | JVM_ACC_WRITTEN_FLAGS; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Threads.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Threads.java index 44ce898046c..67d929d1d12 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Threads.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Threads.java @@ -95,7 +95,7 @@ public class Threads { } else if (os.equals("bsd")) { if (cpu.equals("x86")) { access = new BsdX86JavaThreadPDAccess(); - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { access = new BsdAMD64JavaThreadPDAccess(); } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java index 671bfc81125..a087d4aa04e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -158,7 +158,7 @@ public class PStack extends Tool { printUnknown(out); } } - f = f.sender(); + f = f.sender(th); } } catch (Exception exp) { exp.printStackTrace(); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java index f4e3d7c937e..a71592d930b 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -504,11 +504,14 @@ public class ClassWriter implements /* imports */ ClassConstants 2 /* exp. table len. */ + 2 /* code attr. count */; - TypeArray exceptionTable = m.getExceptionTable(); - final int exceptionTableLen = (int) exceptionTable.getLength(); - if (exceptionTableLen != 0) { + boolean hasExceptionTable = m.hasExceptionTable(); + ExceptionTableElement[] exceptionTable = null; + int exceptionTableLen = 0; + if (hasExceptionTable) { + exceptionTable = m.getExceptionTable(); + exceptionTableLen = exceptionTable.length; if (DEBUG) debugMessage("\tmethod has exception table"); - codeSize += (exceptionTableLen / 4) /* exception table is 4-tuple array */ + codeSize += exceptionTableLen /* exception table is 4-tuple array */ * (2 /* start_pc */ + 2 /* end_pc */ + 2 /* handler_pc */ + @@ -586,15 +589,15 @@ public class ClassWriter implements /* imports */ ClassConstants dos.write(code); // write exception table size - dos.writeShort((short) (exceptionTableLen / 4)); - if (DEBUG) debugMessage("\texception table length = " + (exceptionTableLen / 4)); + dos.writeShort((short) exceptionTableLen); + if (DEBUG) debugMessage("\texception table length = " + exceptionTableLen); if (exceptionTableLen != 0) { - for (int e = 0; e < exceptionTableLen; e += 4) { - dos.writeShort((short) exceptionTable.getIntAt(e)); - dos.writeShort((short) exceptionTable.getIntAt(e + 1)); - dos.writeShort((short) exceptionTable.getIntAt(e + 2)); - dos.writeShort((short) exceptionTable.getIntAt(e + 3)); + for (int e = 0; e < exceptionTableLen; e++) { + dos.writeShort((short) exceptionTable[e].getStartPC()); + dos.writeShort((short) exceptionTable[e].getEndPC()); + dos.writeShort((short) exceptionTable[e].getHandlerPC()); + dos.writeShort((short) exceptionTable[e].getCatchTypeIndex()); } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java index 210bed768f6..2ab2bf6e2a3 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -199,7 +199,7 @@ public class HTMLGenerator implements /* imports */ ClassConstants { cpuHelper = new SPARCHelper(); } else if (cpu.equals("x86")) { cpuHelper = new X86Helper(); - } else if (cpu.equals("amd64")) { + } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { cpuHelper = new AMD64Helper(); } else if (cpu.equals("ia64")) { cpuHelper = new IA64Helper(); @@ -783,37 +783,39 @@ public class HTMLGenerator implements /* imports */ ClassConstants { }); // display exception table for this method - TypeArray exceptionTable = method.getExceptionTable(); - // exception table is 4 tuple array of shorts - int numEntries = (int)exceptionTable.getLength() / 4; - if (numEntries != 0) { - buf.h4("Exception Table"); - buf.beginTable(1); - buf.beginTag("tr"); - buf.headerCell("start bci"); - buf.headerCell("end bci"); - buf.headerCell("handler bci"); - buf.headerCell("catch type"); - buf.endTag("tr"); - - for (int e = 0; e < numEntries; e += 4) { + boolean hasException = method.hasExceptionTable(); + if (hasException) { + ExceptionTableElement[] exceptionTable = method.getExceptionTable(); + int numEntries = exceptionTable.length; + if (numEntries != 0) { + buf.h4("Exception Table"); + buf.beginTable(1); buf.beginTag("tr"); - buf.cell(Integer.toString(exceptionTable.getIntAt(e))); - buf.cell(Integer.toString(exceptionTable.getIntAt(e + 1))); - buf.cell(Integer.toString(exceptionTable.getIntAt(e + 2))); - short cpIndex = (short) exceptionTable.getIntAt(e + 3); - ConstantPool.CPSlot obj = cpIndex == 0? null : cpool.getSlotAt(cpIndex); - if (obj == null) { - buf.cell("Any"); - } else if (obj.isMetaData()) { - buf.cell(obj.getSymbol().asString().replace('/', '.')); - } else { - buf.cell(genKlassLink((InstanceKlass)obj.getOop())); - } + buf.headerCell("start bci"); + buf.headerCell("end bci"); + buf.headerCell("handler bci"); + buf.headerCell("catch type"); buf.endTag("tr"); - } - buf.endTable(); + for (int e = 0; e < numEntries; e ++) { + buf.beginTag("tr"); + buf.cell(Integer.toString(exceptionTable[e].getStartPC())); + buf.cell(Integer.toString(exceptionTable[e].getEndPC())); + buf.cell(Integer.toString(exceptionTable[e].getHandlerPC())); + short cpIndex = (short) exceptionTable[e].getCatchTypeIndex(); + ConstantPool.CPSlot obj = cpIndex == 0? null : cpool.getSlotAt(cpIndex); + if (obj == null) { + buf.cell("Any"); + } else if (obj.isMetaData()) { + buf.cell(obj.getSymbol().asString().replace('/', '.')); + } else { + buf.cell(genKlassLink((InstanceKlass)obj.getOop())); + } + buf.endTag("tr"); + } + + buf.endTable(); + } } // display constant pool hyperlink diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java index bb296a509d2..0f4da3a9218 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java @@ -41,10 +41,10 @@ public class BasicHashtable extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("BasicHashtable"); + Type type = db.lookupType("BasicHashtable"); tableSizeField = type.getCIntegerField("_table_size"); bucketsField = type.getAddressField("_buckets"); - bucketSize = db.lookupType("HashtableBucket").getSize(); + bucketSize = db.lookupType("HashtableBucket").getSize(); } // Fields diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java index 192c1dd9fa0..0296dcbd651 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java @@ -41,7 +41,7 @@ public class BasicHashtableEntry extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("BasicHashtableEntry"); + Type type = db.lookupType("BasicHashtableEntry"); hashField = type.getCIntegerField("_hash"); nextField = type.getAddressField("_next"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java index 3c2e0f965c2..70709f02b84 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java @@ -40,7 +40,7 @@ public class Hashtable extends BasicHashtable { private static synchronized void initialize(TypeDataBase db) { // just to confirm that type exists - Type type = db.lookupType("Hashtable"); + Type type = db.lookupType("IntptrHashtable"); } // derived class may return Class diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java index 2e86b9a8318..44f78e49dd8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java @@ -39,7 +39,7 @@ public class HashtableBucket extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("HashtableBucket"); + Type type = db.lookupType("HashtableBucket"); entryField = type.getAddressField("_entry"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java index 73932a43033..38c5968720d 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java @@ -41,7 +41,7 @@ public class HashtableEntry extends BasicHashtableEntry { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("HashtableEntry"); + Type type = db.lookupType("IntptrHashtableEntry"); literalField = type.getAddressField("_literal"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java index 55cb2995621..1f17a7fdb63 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,6 +85,21 @@ public class ObjectReader { this(new ProcImageClassLoader()); } + static void debugPrintln(String msg) { + if (DEBUG) { + System.err.println("DEBUG>" + msg); + } + } + + static void debugPrintStackTrace(Exception exp) { + if (DEBUG) { + StackTraceElement[] els = exp.getStackTrace(); + for (int i = 0; i < els.length; i++) { + System.err.println("DEBUG>" + els[i].toString()); + } + } + } + public Object readObject(Oop oop) throws ClassNotFoundException { if (oop instanceof Instance) { return readInstance((Instance) oop); @@ -120,13 +135,96 @@ public class ObjectReader { } protected Symbol javaLangString; + protected Symbol javaUtilHashtableEntry; + protected Symbol javaUtilHashtable; + protected Symbol javaUtilProperties; + + protected Symbol getVMSymbol(String name) { + return VM.getVM().getSymbolTable().probe(name); + } + protected Symbol javaLangString() { if (javaLangString == null) { - javaLangString = VM.getVM().getSymbolTable().probe("java/lang/String"); + javaLangString = getVMSymbol("java/lang/String"); } return javaLangString; } + protected Symbol javaUtilHashtableEntry() { + if (javaUtilHashtableEntry == null) { + javaUtilHashtableEntry = getVMSymbol("java/util/Hashtable$Entry"); + } + return javaUtilHashtableEntry; + } + + protected Symbol javaUtilHashtable() { + if (javaUtilHashtable == null) { + javaUtilHashtable = getVMSymbol("java/util/Hashtable"); + } + return javaUtilHashtable; + } + + protected Symbol javaUtilProperties() { + if (javaUtilProperties == null) { + javaUtilProperties = getVMSymbol("java/util/Properties"); + } + return javaUtilProperties; + } + + private void setHashtableEntry(java.util.Hashtable p, Oop oop) { + InstanceKlass ik = (InstanceKlass)oop.getKlass(); + OopField keyField = (OopField)ik.findField("key", "Ljava/lang/Object;"); + OopField valueField = (OopField)ik.findField("value", "Ljava/lang/Object;"); + OopField nextField = (OopField)ik.findField("next", "Ljava/util/Hashtable$Entry;"); + if (DEBUG) { + if (Assert.ASSERTS_ENABLED) { + Assert.that(ik.getName().equals(javaUtilHashtableEntry()), "Not a Hashtable$Entry?"); + Assert.that(keyField != null && valueField != null && nextField != null, "Invalid fields!"); + } + } + + Object key = null; + Object value = null; + Oop next = null; + try { + key = readObject(keyField.getValue(oop)); + value = readObject(valueField.getValue(oop)); + next = (Oop)nextField.getValue(oop); + // For Properties, should use setProperty(k, v). Since it only runs in SA + // using put(k, v) should be OK. + p.put(key, value); + if (next != null) { + setHashtableEntry(p, next); + } + } catch (ClassNotFoundException ce) { + if( DEBUG) { + debugPrintln("Class not found " + ce); + debugPrintStackTrace(ce); + } + } + } + + protected Object getHashtable(Instance oop, boolean isProperties) { + InstanceKlass k = (InstanceKlass)oop.getKlass(); + OopField tableField = (OopField)k.findField("table", "[Ljava/util/Hashtable$Entry;"); + if (tableField == null) { + debugPrintln("Could not find field of [Ljava/util/Hashtable$Entry;"); + return null; + } + java.util.Hashtable table = (isProperties) ? new java.util.Properties() + : new java.util.Hashtable(); + ObjArray kvs = (ObjArray)tableField.getValue(oop); + long size = kvs.getLength(); + debugPrintln("Hashtable$Entry Size = " + size); + for (long i=0; i= bci && cur.getLength() > 0) { + int startBCI = cur.getStartBCI(); + if (startBCI <= bci && bci < startBCI + cur.getLength()) { visibleVars.add(cur); } } diff --git a/hotspot/make/bsd/makefiles/gcc.make b/hotspot/make/bsd/makefiles/gcc.make index 938da94fe66..249628ee7fa 100644 --- a/hotspot/make/bsd/makefiles/gcc.make +++ b/hotspot/make/bsd/makefiles/gcc.make @@ -214,7 +214,7 @@ endif # Flags for generating make dependency flags. ifneq ("${CC_VER_MAJOR}", "2") -DEPFLAGS = -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) +DEPFLAGS = -fpch-deps -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) endif # -DDONT_USE_PRECOMPILED_HEADER will exclude all includes in precompiled.hpp. diff --git a/hotspot/make/bsd/makefiles/jvmg.make b/hotspot/make/bsd/makefiles/jvmg.make index 8c56368d4dc..b5be2967edc 100644 --- a/hotspot/make/bsd/makefiles/jvmg.make +++ b/hotspot/make/bsd/makefiles/jvmg.make @@ -27,7 +27,9 @@ # Compiler specific DEBUG_CFLAGS are passed in from gcc.make, sparcWorks.make DEBUG_CFLAGS/DEFAULT= $(DEBUG_CFLAGS) DEBUG_CFLAGS/BYFILE = $(DEBUG_CFLAGS/$@)$(DEBUG_CFLAGS/DEFAULT$(DEBUG_CFLAGS/$@)) -CFLAGS += $(DEBUG_CFLAGS/BYFILE) + +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_ # Set the environment variable HOTSPARC_GENERIC to "true" # to inhibit the effect of the previous line on CFLAGS. diff --git a/hotspot/make/bsd/makefiles/universal.gmk b/hotspot/make/bsd/makefiles/universal.gmk index 169b70d8772..0cc92758af9 100644 --- a/hotspot/make/bsd/makefiles/universal.gmk +++ b/hotspot/make/bsd/makefiles/universal.gmk @@ -110,4 +110,5 @@ copy_debug_jdk:: .PHONY: universal_product universal_fastdebug universal_debug \ all_product_universal all_fastdebug_universal all_debug_universal \ - universalize export_universal copy_universal + universalize export_universal copy_universal \ + $(UNIVERSAL_LIPO_LIST) $(UNIVERSAL_COPY_LIST) diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version index dba5ab40734..0bb6186a9dd 100644 --- a/hotspot/make/hotspot_version +++ b/hotspot/make/hotspot_version @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -31,11 +31,11 @@ # # Don't put quotes (fail windows build). -HOTSPOT_VM_COPYRIGHT=Copyright 2011 +HOTSPOT_VM_COPYRIGHT=Copyright 2012 HS_MAJOR_VER=24 HS_MINOR_VER=0 -HS_BUILD_NUMBER=10 +HS_BUILD_NUMBER=18 JDK_MAJOR_VER=1 JDK_MINOR_VER=8 diff --git a/hotspot/make/jprt.properties b/hotspot/make/jprt.properties index b4ad0af98b0..0010f8f85ff 100644 --- a/hotspot/make/jprt.properties +++ b/hotspot/make/jprt.properties @@ -54,72 +54,77 @@ jprt.sync.push=false # Define the Solaris platforms we want for the various releases jprt.my.solaris.sparc.jdk8=solaris_sparc_5.10 jprt.my.solaris.sparc.jdk7=solaris_sparc_5.10 -jprt.my.solaris.sparc.jdk7u4=${jprt.my.solaris.sparc.jdk7} +jprt.my.solaris.sparc.jdk7u6=${jprt.my.solaris.sparc.jdk7} jprt.my.solaris.sparc=${jprt.my.solaris.sparc.${jprt.tools.default.release}} jprt.my.solaris.sparcv9.jdk8=solaris_sparcv9_5.10 jprt.my.solaris.sparcv9.jdk7=solaris_sparcv9_5.10 -jprt.my.solaris.sparcv9.jdk7u4=${jprt.my.solaris.sparcv9.jdk7} +jprt.my.solaris.sparcv9.jdk7u6=${jprt.my.solaris.sparcv9.jdk7} jprt.my.solaris.sparcv9=${jprt.my.solaris.sparcv9.${jprt.tools.default.release}} jprt.my.solaris.i586.jdk8=solaris_i586_5.10 jprt.my.solaris.i586.jdk7=solaris_i586_5.10 -jprt.my.solaris.i586.jdk7u4=${jprt.my.solaris.i586.jdk7} +jprt.my.solaris.i586.jdk7u6=${jprt.my.solaris.i586.jdk7} jprt.my.solaris.i586=${jprt.my.solaris.i586.${jprt.tools.default.release}} jprt.my.solaris.x64.jdk8=solaris_x64_5.10 jprt.my.solaris.x64.jdk7=solaris_x64_5.10 -jprt.my.solaris.x64.jdk7u4=${jprt.my.solaris.x64.jdk7} +jprt.my.solaris.x64.jdk7u6=${jprt.my.solaris.x64.jdk7} jprt.my.solaris.x64=${jprt.my.solaris.x64.${jprt.tools.default.release}} jprt.my.linux.i586.jdk8=linux_i586_2.6 jprt.my.linux.i586.jdk7=linux_i586_2.6 -jprt.my.linux.i586.jdk7u4=${jprt.my.linux.i586.jdk7} +jprt.my.linux.i586.jdk7u6=${jprt.my.linux.i586.jdk7} jprt.my.linux.i586=${jprt.my.linux.i586.${jprt.tools.default.release}} jprt.my.linux.x64.jdk8=linux_x64_2.6 jprt.my.linux.x64.jdk7=linux_x64_2.6 -jprt.my.linux.x64.jdk7u4=${jprt.my.linux.x64.jdk7} +jprt.my.linux.x64.jdk7u6=${jprt.my.linux.x64.jdk7} jprt.my.linux.x64=${jprt.my.linux.x64.${jprt.tools.default.release}} jprt.my.linux.ppc.jdk8=linux_ppc_2.6 jprt.my.linux.ppc.jdk7=linux_ppc_2.6 -jprt.my.linux.ppc.jdk7u4=${jprt.my.linux.ppc.jdk7} +jprt.my.linux.ppc.jdk7u6=${jprt.my.linux.ppc.jdk7} jprt.my.linux.ppc=${jprt.my.linux.ppc.${jprt.tools.default.release}} jprt.my.linux.ppcv2.jdk8=linux_ppcv2_2.6 jprt.my.linux.ppcv2.jdk7=linux_ppcv2_2.6 -jprt.my.linux.ppcv2.jdk7u4=${jprt.my.linux.ppcv2.jdk7} +jprt.my.linux.ppcv2.jdk7u6=${jprt.my.linux.ppcv2.jdk7} jprt.my.linux.ppcv2=${jprt.my.linux.ppcv2.${jprt.tools.default.release}} jprt.my.linux.ppcsflt.jdk8=linux_ppcsflt_2.6 jprt.my.linux.ppcsflt.jdk7=linux_ppcsflt_2.6 -jprt.my.linux.ppcsflt.jdk7u4=${jprt.my.linux.ppcsflt.jdk7} +jprt.my.linux.ppcsflt.jdk7u6=${jprt.my.linux.ppcsflt.jdk7} jprt.my.linux.ppcsflt=${jprt.my.linux.ppcsflt.${jprt.tools.default.release}} jprt.my.linux.armvfp.jdk8=linux_armvfp_2.6 jprt.my.linux.armvfp.jdk7=linux_armvfp_2.6 -jprt.my.linux.armvfp.jdk7u4=${jprt.my.linux.armvfp.jdk7} +jprt.my.linux.armvfp.jdk7u6=${jprt.my.linux.armvfp.jdk7} jprt.my.linux.armvfp=${jprt.my.linux.armvfp.${jprt.tools.default.release}} +jprt.my.linux.armv6.jdk8=linux_armv6_2.6 +jprt.my.linux.armv6.jdk7=linux_armv6_2.6 +jprt.my.linux.armv6.jdk7u6=${jprt.my.linux.armv6.jdk7} +jprt.my.linux.armv6=${jprt.my.linux.armv6.${jprt.tools.default.release}} + jprt.my.linux.armsflt.jdk8=linux_armsflt_2.6 jprt.my.linux.armsflt.jdk7=linux_armsflt_2.6 -jprt.my.linux.armsflt.jdk7u4=${jprt.my.linux.armsflt.jdk7} +jprt.my.linux.armsflt.jdk7u6=${jprt.my.linux.armsflt.jdk7} jprt.my.linux.armsflt=${jprt.my.linux.armsflt.${jprt.tools.default.release}} jprt.my.macosx.x64.jdk8=macosx_x64_10.7 jprt.my.macosx.x64.jdk7=macosx_x64_10.7 -jprt.my.macosx.x64.jdk7u4=${jprt.my.macosx.x64.jdk7} +jprt.my.macosx.x64.jdk7u6=${jprt.my.macosx.x64.jdk7} jprt.my.macosx.x64=${jprt.my.macosx.x64.${jprt.tools.default.release}} jprt.my.windows.i586.jdk8=windows_i586_5.1 jprt.my.windows.i586.jdk7=windows_i586_5.1 -jprt.my.windows.i586.jdk7u4=${jprt.my.windows.i586.jdk7} +jprt.my.windows.i586.jdk7u6=${jprt.my.windows.i586.jdk7} jprt.my.windows.i586=${jprt.my.windows.i586.${jprt.tools.default.release}} jprt.my.windows.x64.jdk8=windows_x64_5.2 jprt.my.windows.x64.jdk7=windows_x64_5.2 -jprt.my.windows.x64.jdk7u4=${jprt.my.windows.x64.jdk7} +jprt.my.windows.x64.jdk7u6=${jprt.my.windows.x64.jdk7} jprt.my.windows.x64=${jprt.my.windows.x64.${jprt.tools.default.release}} # Standard list of jprt build targets for this source tree @@ -133,7 +138,8 @@ jprt.build.targets.standard= \ ${jprt.my.linux.x64}-{product|fastdebug}, \ ${jprt.my.macosx.x64}-{product|fastdebug|debug}, \ ${jprt.my.windows.i586}-{product|fastdebug|debug}, \ - ${jprt.my.windows.x64}-{product|fastdebug|debug} + ${jprt.my.windows.x64}-{product|fastdebug|debug}, \ + ${jprt.my.linux.armv6}-{product|fastdebug} jprt.build.targets.open= \ ${jprt.my.solaris.i586}-{productOpen}, \ @@ -153,7 +159,7 @@ jprt.build.targets.all=${jprt.build.targets.standard}, \ jprt.build.targets.jdk8=${jprt.build.targets.all} jprt.build.targets.jdk7=${jprt.build.targets.all} -jprt.build.targets.jdk7u4=${jprt.build.targets.all} +jprt.build.targets.jdk7u6=${jprt.build.targets.all} jprt.build.targets=${jprt.build.targets.${jprt.tools.default.release}} # Subset lists of test targets for this source tree @@ -345,12 +351,12 @@ jprt.my.macosx.x64.test.targets = \ ${jprt.my.macosx.x64}-{product|fastdebug}-c2-GCOld_ParNewGC, \ ${jprt.my.macosx.x64}-{product|fastdebug}-c2-GCOld_CMS, \ ${jprt.my.macosx.x64}-{product|fastdebug}-c2-GCOld_G1, \ - ${jprt.my.macosx.x64}-{product|fastdebug}-c2-GCOld_ParOldGC -# ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_default, \ -# ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_default_tiered, \ -# ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_ParallelGC, \ -# ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_G1, \ -# ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_ParOldGC + ${jprt.my.macosx.x64}-{product|fastdebug}-c2-GCOld_ParOldGC, \ + ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_default, \ + ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_default_nontiered, \ + ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_ParallelGC, \ + ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_G1, \ + ${jprt.my.macosx.x64}-{product|fastdebug}-c2-jbb_ParOldGC jprt.my.windows.i586.test.targets = \ ${jprt.my.windows.i586}-{product|fastdebug}-{c1|c2}-jvm98, \ @@ -446,7 +452,7 @@ jprt.test.targets.embedded= \ jprt.test.targets.jdk8=${jprt.test.targets.standard} jprt.test.targets.jdk7=${jprt.test.targets.standard} -jprt.test.targets.jdk7u4=${jprt.test.targets.jdk7} +jprt.test.targets.jdk7u6=${jprt.test.targets.jdk7} jprt.test.targets=${jprt.test.targets.${jprt.tools.default.release}} # The default test/Makefile targets that should be run @@ -506,6 +512,9 @@ jprt.make.rule.test.targets.embedded = \ jprt.make.rule.test.targets.jdk8=${jprt.make.rule.test.targets.standard} jprt.make.rule.test.targets.jdk7=${jprt.make.rule.test.targets.standard} -jprt.make.rule.test.targets.jdk7u4=${jprt.make.rule.test.targets.jdk7} +jprt.make.rule.test.targets.jdk7u6=${jprt.make.rule.test.targets.jdk7} jprt.make.rule.test.targets=${jprt.make.rule.test.targets.${jprt.tools.default.release}} +# 7155453: Work-around to prevent popups on OSX from blocking test completion +# but the work-around is added to all platforms to be consistent +jprt.jbb.options=-Djava.awt.headless=true diff --git a/hotspot/make/linux/makefiles/gcc.make b/hotspot/make/linux/makefiles/gcc.make index 57fcad6f556..ff0a3753da4 100644 --- a/hotspot/make/linux/makefiles/gcc.make +++ b/hotspot/make/linux/makefiles/gcc.make @@ -166,7 +166,7 @@ endif # Flags for generating make dependency flags. ifneq ("${CC_VER_MAJOR}", "2") -DEPFLAGS = -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) +DEPFLAGS = -fpch-deps -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) endif # -DDONT_USE_PRECOMPILED_HEADER will exclude all includes in precompiled.hpp. diff --git a/hotspot/make/linux/makefiles/jvmg.make b/hotspot/make/linux/makefiles/jvmg.make index db10608c142..3c0ae3a628e 100644 --- a/hotspot/make/linux/makefiles/jvmg.make +++ b/hotspot/make/linux/makefiles/jvmg.make @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,9 @@ # Compiler specific DEBUG_CFLAGS are passed in from gcc.make, sparcWorks.make DEBUG_CFLAGS/DEFAULT= $(DEBUG_CFLAGS) DEBUG_CFLAGS/BYFILE = $(DEBUG_CFLAGS/$@)$(DEBUG_CFLAGS/DEFAULT$(DEBUG_CFLAGS/$@)) -CFLAGS += $(DEBUG_CFLAGS/BYFILE) + +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_ # Set the environment variable HOTSPARC_GENERIC to "true" # to inhibit the effect of the previous line on CFLAGS. diff --git a/hotspot/make/linux/makefiles/vm.make b/hotspot/make/linux/makefiles/vm.make index a9517a4809b..6e9794ba710 100644 --- a/hotspot/make/linux/makefiles/vm.make +++ b/hotspot/make/linux/makefiles/vm.make @@ -102,9 +102,11 @@ CXXFLAGS = \ # a time and date. vm_version.o: CXXFLAGS += ${JRE_VERSION} -ifndef JAVASE_EMBEDDED +ifndef JAVASE_EMBEDDED +ifneq (${ARCH},arm) CFLAGS += -DINCLUDE_TRACE endif +endif # CFLAGS_WARN holds compiler options to suppress/enable warnings. CFLAGS += $(CFLAGS_WARN/BYFILE) @@ -153,11 +155,13 @@ SOURCE_PATHS+=$(HS_COMMON_SRC)/os/posix/vm SOURCE_PATHS+=$(HS_COMMON_SRC)/cpu/$(Platform_arch)/vm SOURCE_PATHS+=$(HS_COMMON_SRC)/os_cpu/$(Platform_os_arch)/vm -ifndef JAVASE_EMBEDDED +ifndef JAVASE_EMBEDDED +ifneq (${ARCH},arm) SOURCE_PATHS+=$(shell if [ -d $(HS_ALT_SRC)/share/vm/jfr ]; then \ find $(HS_ALT_SRC)/share/vm/jfr -type d; \ fi) endif +endif CORE_PATHS=$(foreach path,$(SOURCE_PATHS),$(call altsrc,$(path)) $(path)) CORE_PATHS+=$(GENERATED)/jvmtifiles diff --git a/hotspot/make/pic.make b/hotspot/make/pic.make index 4c1e6b1a1b9..79b2ea2f093 100644 --- a/hotspot/make/pic.make +++ b/hotspot/make/pic.make @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -30,6 +30,13 @@ include $(GAMMADIR)/make/scm.make ifneq ($(OSNAME), windows) ifndef LP64 + PARTIAL_NONPIC=1 + endif + PIC_ARCH = ppc + ifneq ("$(filter $(PIC_ARCH),$(BUILDARCH))","") + PARTIAL_NONPIC=0 + endif + ifeq ($(PARTIAL_NONPIC),1) NONPIC_DIRS = memory oops gc_implementation gc_interface NONPIC_DIRS := $(foreach dir,$(NONPIC_DIRS), $(GAMMADIR)/src/share/vm/$(dir)) # Look for source files under NONPIC_DIRS diff --git a/hotspot/make/solaris/makefiles/add_gnu_debuglink.make b/hotspot/make/solaris/makefiles/add_gnu_debuglink.make new file mode 100644 index 00000000000..ee75722fa99 --- /dev/null +++ b/hotspot/make/solaris/makefiles/add_gnu_debuglink.make @@ -0,0 +1,54 @@ +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# 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. +# +# + +# Rules to build add_gnu_debuglink, used by vm.make on Solaris + +# Allow $(ADD_GNU_DEBUGLINK) to be called from any directory. +# We don't set or use the GENERATED macro to avoid affecting +# other HotSpot Makefiles. +TOPDIR = $(shell echo `pwd`) +ADD_GNU_DEBUGLINK = $(TOPDIR)/../generated/add_gnu_debuglink + +ADD_GNU_DEBUGLINK_DIR = $(GAMMADIR)/src/os/solaris/add_gnu_debuglink +ADD_GNU_DEBUGLINK_SRC = $(ADD_GNU_DEBUGLINK_DIR)/add_gnu_debuglink.c +ADD_GNU_DEBUGLINK_FLAGS = +LIBS_ADD_GNU_DEBUGLINK += -lelf + +ifeq ("${Platform_compiler}", "sparcWorks") +# Enable the following ADD_GNU_DEBUGLINK_FLAGS addition if you need to +# compare the built ELF objects. +# +# The -g option makes static data global and the "-W0,-noglobal" +# option tells the compiler to not globalize static data using a unique +# globalization prefix. Instead force the use of a static globalization +# prefix based on the source filepath so the objects from two identical +# compilations are the same. +# +# Note: The blog says to use "-W0,-xglobalstatic", but that doesn't +# seem to work. I got "-W0,-noglobal" from Kelly and that works. +#ADD_GNU_DEBUGLINK_FLAGS += -W0,-noglobal +endif # Platform_compiler == sparcWorks + +$(ADD_GNU_DEBUGLINK): $(ADD_GNU_DEBUGLINK_SRC) + $(CC) -g -o $@ $< $(ADD_GNU_DEBUGLINK_FLAGS) $(LIBS_ADD_GNU_DEBUGLINK) diff --git a/hotspot/make/solaris/makefiles/defs.make b/hotspot/make/solaris/makefiles/defs.make index f35533132d8..8eb4588cb77 100644 --- a/hotspot/make/solaris/makefiles/defs.make +++ b/hotspot/make/solaris/makefiles/defs.make @@ -109,18 +109,12 @@ ifeq ($(JDK6_OR_EARLIER),0) # overridden in some situations, e.g., a BUILD_FLAVOR != product # build. - # Disable FULL_DEBUG_SYMBOLS by default because dtrace tests are - # failing in nightly when the debug info files are ZIP'ed. On - # Solaris debug info files need to be ZIP'ed to reduce the impact - # on disk space footprint. - FULL_DEBUG_SYMBOLS ?= 0 ifeq ($(BUILD_FLAVOR), product) - # FULL_DEBUG_SYMBOLS ?= 1 + FULL_DEBUG_SYMBOLS ?= 1 ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS) else # debug variants always get Full Debug Symbols (if available) - # ENABLE_FULL_DEBUG_SYMBOLS = 1 - ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS) + ENABLE_FULL_DEBUG_SYMBOLS = 1 endif _JUNK_ := $(shell \ echo >&2 "INFO: ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS)") @@ -129,25 +123,10 @@ ifeq ($(JDK6_OR_EARLIER),0) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # Default OBJCOPY comes from the SUNWbinutils package: DEF_OBJCOPY=/usr/sfw/bin/gobjcopy - ifeq ($(VM_PLATFORM),solaris_amd64) - # On Solaris AMD64/X64, gobjcopy is not happy and fails: - # - # usr/sfw/bin/gobjcopy --add-gnu-debuglink=.debuginfo .so - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - _JUNK_ := $(shell \ - echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64") - OBJCOPY= - else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif + OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) + ifneq ($(ALT_OBJCOPY),) + _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") + OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) endif else OBJCOPY= @@ -178,9 +157,7 @@ ifeq ($(JDK6_OR_EARLIER),0) _JUNK_ := $(shell \ echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") - # Disable ZIP_DEBUGINFO_FILES by default because dtrace tests are - # failing in nightly when the debug info files are ZIP'ed. - ZIP_DEBUGINFO_FILES ?= 0 + ZIP_DEBUGINFO_FILES ?= 1 _JUNK_ := $(shell \ echo >&2 "INFO: ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES)") @@ -226,10 +203,18 @@ ifeq ($(JVM_VARIANT_SERVER),true) EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.diz EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.diz EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.diz + ifeq ($(ARCH_DATA_MODEL),32) + EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.diz + EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.diz + endif else EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.debuginfo EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.debuginfo + ifeq ($(ARCH_DATA_MODEL),32) + EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.debuginfo + EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.debuginfo + endif endif endif endif diff --git a/hotspot/make/solaris/makefiles/dtrace.make b/hotspot/make/solaris/makefiles/dtrace.make index 6b15fc2f185..48bc98d2dc6 100644 --- a/hotspot/make/solaris/makefiles/dtrace.make +++ b/hotspot/make/solaris/makefiles/dtrace.make @@ -94,29 +94,41 @@ ISA = $(subst i386,i486,$(shell isainfo -n)) # Making 64/libjvm_db.so: 64-bit version of libjvm_db.so which handles 32-bit libjvm.so ifneq ("${ISA}","${BUILDARCH}") -XLIBJVM_DB = 64/$(LIBJVM_DB) -XLIBJVM_DB_G = 64/$(LIBJVM_DB_G) -XLIBJVM_DTRACE = 64/$(LIBJVM_DTRACE) -XLIBJVM_DTRACE_G = 64/$(LIBJVM_DTRACE_G) +XLIBJVM_DIR = 64 +XLIBJVM_DB = $(XLIBJVM_DIR)/$(LIBJVM_DB) +XLIBJVM_DB_G = $(XLIBJVM_DIR)/$(LIBJVM_DB_G) +XLIBJVM_DTRACE = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE) +XLIBJVM_DTRACE_G = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G) -XLIBJVM_DB_DEBUGINFO = 64/$(LIBJVM_DB_DEBUGINFO) -XLIBJVM_DB_DIZ = 64/$(LIBJVM_DB_DIZ) -XLIBJVM_DB_G_DEBUGINFO = 64/$(LIBJVM_DB_G_DEBUGINFO) -XLIBJVM_DB_G_DIZ = 64/$(LIBJVM_DB_G_DIZ) -XLIBJVM_DTRACE_DEBUGINFO = 64/$(LIBJVM_DTRACE_DEBUGINFO) -XLIBJVM_DTRACE_DIZ = 64/$(LIBJVM_DTRACE_DIZ) -XLIBJVM_DTRACE_G_DEBUGINFO = 64/$(LIBJVM_DTRACE_G_DEBUGINFO) -XLIBJVM_DTRACE_G_DIZ = 64/$(LIBJVM_DTRACE_G_DIZ) +XLIBJVM_DB_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DB_DEBUGINFO) +XLIBJVM_DB_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DB_DIZ) +XLIBJVM_DB_G_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DB_G_DEBUGINFO) +XLIBJVM_DB_G_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DB_G_DIZ) +XLIBJVM_DTRACE_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DEBUGINFO) +XLIBJVM_DTRACE_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DIZ) +XLIBJVM_DTRACE_G_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G_DEBUGINFO) +XLIBJVM_DTRACE_G_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G_DIZ) -$(XLIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE) +$(XLIBJVM_DB): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE) @echo Making $@ - $(QUIETLY) mkdir -p 64/ ; \ + $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \ $(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. -I$(GENERATED) \ $(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc [ -f $(XLIBJVM_DB_G) ] || { ln -s $(LIBJVM_DB) $(XLIBJVM_DB_G); } ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) +# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. +# Clear the SHF_ALLOC flag (if set) from empty section headers. +# 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. + $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DB_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DB_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. +# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. +# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ; +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the link name: + ( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ) ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -125,23 +137,31 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # implied else here is no stripping at all endif endif - [ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO); } + [ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO); } ifeq ($(ZIP_DEBUGINFO_FILES),1) - $(ZIPEXE) -q -y $(XLIBJVM_DB_DIZ) $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO) +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the archived name: + ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO) ) $(RM) $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO) - [ -f $(XLIBJVM_DB_G_DIZ) ] || { ln -s $(XLIBJVM_DB_DIZ) $(XLIBJVM_DB_G_DIZ); } + [ -f $(XLIBJVM_DB_G_DIZ) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DB_DIZ) $(LIBJVM_DB_G_DIZ); } endif endif -$(XLIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) +$(XLIBJVM_DTRACE): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) @echo Making $@ - $(QUIETLY) mkdir -p 64/ ; \ + $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \ $(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. \ $(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor [ -f $(XLIBJVM_DTRACE_G) ] || { ln -s $(LIBJVM_DTRACE) $(XLIBJVM_DTRACE_G); } ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) +# Clear the SHF_ALLOC flag (if set) from empty section headers. + $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DTRACE_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DTRACE_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. +# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ; +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the link name: + ( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ) ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -150,11 +170,13 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # implied else here is no stripping at all endif endif - [ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO); } + [ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO); } ifeq ($(ZIP_DEBUGINFO_FILES),1) - $(ZIPEXE) -q -y $(XLIBJVM_DTRACE_DIZ) $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO) +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the archived name: + ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO) ) $(RM) $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO) - [ -f $(XLIBJVM_DTRACE_G_DIZ) ] || { ln -s $(XLIBJVM_DTRACE_DIZ) $(XLIBJVM_DTRACE_G_DIZ); } + [ -f $(XLIBJVM_DTRACE_G_DIZ) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_G_DIZ); } endif endif @@ -198,14 +220,18 @@ $(JVMOFFS).cpp: $(GENOFFS) $(JVMOFFS).h $(JVMOFFS)Index.h $(JVMOFFS.o): $(JVMOFFS).h $(JVMOFFS).cpp $(QUIETLY) $(CXX) -c -I. -o $@ $(ARCHFLAG) -D$(TYPE) $(JVMOFFS).cpp -$(LIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE) +$(LIBJVM_DB): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_DB_MAPFILE) @echo Making $@ $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I. -I$(GENERATED) \ $(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc [ -f $(LIBJVM_DB_G) ] || { ln -s $@ $(LIBJVM_DB_G); } ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) +# Clear the SHF_ALLOC flag (if set) from empty section headers. + $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DB_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. +# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $@ + $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJVM_DB_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -222,14 +248,18 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) endif endif -$(LIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) +$(LIBJVM_DTRACE): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) @echo Making $@ $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) -D$(TYPE) -I. \ $(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor [ -f $(LIBJVM_DTRACE_G) ] || { ln -s $@ $(LIBJVM_DTRACE_G); } ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) +# Clear the SHF_ALLOC flag (if set) from empty section headers. + $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DTRACE_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. +# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $@ + $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJVM_DTRACE_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else diff --git a/hotspot/make/solaris/makefiles/fastdebug.make b/hotspot/make/solaris/makefiles/fastdebug.make index 28410559007..08834f03cec 100644 --- a/hotspot/make/solaris/makefiles/fastdebug.make +++ b/hotspot/make/solaris/makefiles/fastdebug.make @@ -36,6 +36,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@)) ifeq ("${Platform_compiler}", "sparcWorks") OPT_CFLAGS/SLOWER = -xO2 +ifeq ($(COMPILER_REV_NUMERIC), 510) +# CC 5.10 has bug XXXXX with -xO4 +OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/SLOWER) +endif # COMPILER_REV_NUMERIC == 510 + ifeq ($(COMPILER_REV_NUMERIC), 509) # To avoid jvm98 crash OPT_CFLAGS/instanceKlass.o = $(OPT_CFLAGS/SLOWER) diff --git a/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make b/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make new file mode 100644 index 00000000000..bd763904480 --- /dev/null +++ b/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make @@ -0,0 +1,54 @@ +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# 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. +# +# + +# Rules to build fix_empty_sec_hdr_flags, used by vm.make on Solaris + +# Allow $(FIX_EMPTY_SEC_HDR_FLAGS) to be called from any directory. +# We don't set or use the GENERATED macro to avoid affecting +# other HotSpot Makefiles. +TOPDIR = $(shell echo `pwd`) +FIX_EMPTY_SEC_HDR_FLAGS = $(TOPDIR)/../generated/fix_empty_sec_hdr_flags + +FIX_EMPTY_SEC_HDR_FLAGS_DIR = $(GAMMADIR)/src/os/solaris/fix_empty_sec_hdr_flags +FIX_EMPTY_SEC_HDR_FLAGS_SRC = $(FIX_EMPTY_SEC_HDR_FLAGS_DIR)/fix_empty_sec_hdr_flags.c +FIX_EMPTY_SEC_HDR_FLAGS_FLAGS = +LIBS_FIX_EMPTY_SEC_HDR_FLAGS += -lelf + +ifeq ("${Platform_compiler}", "sparcWorks") +# Enable the following FIX_EMPTY_SEC_HDR_FLAGS_FLAGS addition if you need to +# compare the built ELF objects. +# +# The -g option makes static data global and the "-W0,-noglobal" +# option tells the compiler to not globalize static data using a unique +# globalization prefix. Instead force the use of a static globalization +# prefix based on the source filepath so the objects from two identical +# compilations are the same. +# +# Note: The blog says to use "-W0,-xglobalstatic", but that doesn't +# seem to work. I got "-W0,-noglobal" from Kelly and that works. +#FIX_EMPTY_SEC_HDR_FLAGS_FLAGS += -W0,-noglobal +endif # Platform_compiler == sparcWorks + +$(FIX_EMPTY_SEC_HDR_FLAGS): $(FIX_EMPTY_SEC_HDR_FLAGS_SRC) + $(CC) -g -o $@ $< $(FIX_EMPTY_SEC_HDR_FLAGS_FLAGS) $(LIBS_FIX_EMPTY_SEC_HDR_FLAGS) diff --git a/hotspot/make/solaris/makefiles/gcc.make b/hotspot/make/solaris/makefiles/gcc.make index 4d0db9e7a7a..be26f6d418c 100644 --- a/hotspot/make/solaris/makefiles/gcc.make +++ b/hotspot/make/solaris/makefiles/gcc.make @@ -141,7 +141,7 @@ OPT_CFLAGS/NOOPT=-O0 # Flags for generating make dependency flags. ifneq ("${CC_VER_MAJOR}", "2") -DEPFLAGS = -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) +DEPFLAGS = -fpch-deps -MMD -MP -MF $(DEP_DIR)/$(@:%=%.d) endif # -DDONT_USE_PRECOMPILED_HEADER will exclude all includes in precompiled.hpp. diff --git a/hotspot/make/solaris/makefiles/jsig.make b/hotspot/make/solaris/makefiles/jsig.make index 6cc40754107..3a7204715ef 100644 --- a/hotspot/make/solaris/makefiles/jsig.make +++ b/hotspot/make/solaris/makefiles/jsig.make @@ -52,14 +52,23 @@ else LFLAGS_JSIG += -mt -xnolib endif -$(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) +$(LIBJSIG): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) @echo Making signal interposition lib... $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ - $(LFLAGS_JSIG) -o $@ $< -ldl + $(LFLAGS_JSIG) -o $@ $(JSIGSRCDIR)/jsig.c -ldl [ -f $(LIBJSIG_G) ] || { ln -s $@ $(LIBJSIG_G); } ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) +# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. +# Clear the SHF_ALLOC flag (if set) from empty section headers. +# 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. + $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. +# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. +# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@ + $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJSIG_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else diff --git a/hotspot/make/solaris/makefiles/jvmg.make b/hotspot/make/solaris/makefiles/jvmg.make index 8e1db865e33..821c0a13850 100644 --- a/hotspot/make/solaris/makefiles/jvmg.make +++ b/hotspot/make/solaris/makefiles/jvmg.make @@ -37,7 +37,8 @@ ifeq ($(COMPILER_REV_NUMERIC),508) endif endif -CFLAGS += $(DEBUG_CFLAGS/BYFILE) +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_ # Set the environment variable HOTSPARC_GENERIC to "true" # to inhibit the effect of the previous line on CFLAGS. diff --git a/hotspot/make/solaris/makefiles/optimized.make b/hotspot/make/solaris/makefiles/optimized.make index 6919578600c..83fd01ca994 100644 --- a/hotspot/make/solaris/makefiles/optimized.make +++ b/hotspot/make/solaris/makefiles/optimized.make @@ -32,6 +32,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@)) # (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files) ifeq ("${Platform_compiler}", "sparcWorks") +ifeq ($(COMPILER_REV_NUMERIC), 510) +# CC 5.10 has bug XXXXX with -xO4 +OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/O2) +endif # COMPILER_REV_NUMERIC == 510 + ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1) # dtrace cannot handle tail call optimization (6672627, 6693876) OPT_CFLAGS/jni.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT) diff --git a/hotspot/make/solaris/makefiles/product.make b/hotspot/make/solaris/makefiles/product.make index 8746d51e57e..2aeae30df8e 100644 --- a/hotspot/make/solaris/makefiles/product.make +++ b/hotspot/make/solaris/makefiles/product.make @@ -40,6 +40,11 @@ endif # (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files) ifeq ("${Platform_compiler}", "sparcWorks") +ifeq ($(COMPILER_REV_NUMERIC), 510) +# CC 5.10 has bug XXXXX with -xO4 +OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/O2) +endif # COMPILER_REV_NUMERIC == 510 + ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1) # dtrace cannot handle tail call optimization (6672627, 6693876) OPT_CFLAGS/jni.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT) diff --git a/hotspot/make/solaris/makefiles/saproc.make b/hotspot/make/solaris/makefiles/saproc.make index d4c305c6839..3e16f431d73 100644 --- a/hotspot/make/solaris/makefiles/saproc.make +++ b/hotspot/make/solaris/makefiles/saproc.make @@ -90,7 +90,7 @@ $(shell uname -r -v \ # when actually building on Nevada-B158 or earlier: #SOLARIS_11_B159_OR_LATER=-DSOLARIS_11_B159_OR_LATER -$(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE) +$(LIBSAPROC): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(SASRCFILES) $(SAMAPFILE) $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \ exit 1; \ @@ -109,8 +109,17 @@ $(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE) -ldl -ldemangle -lthread -lc [ -f $(LIBSAPROC_G) ] || { ln -s $@ $(LIBSAPROC_G); } ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) +# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. +# Clear the SHF_ALLOC flag (if set) from empty section headers. +# 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. + $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. +# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. +# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ + $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBSAPROC_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else diff --git a/hotspot/make/solaris/makefiles/vm.make b/hotspot/make/solaris/makefiles/vm.make index 8fc8dfee58e..833bfb94458 100644 --- a/hotspot/make/solaris/makefiles/vm.make +++ b/hotspot/make/solaris/makefiles/vm.make @@ -144,6 +144,14 @@ JDK_LIBDIR = $(JAVA_HOME)/jre/lib/$(LIBARCH) # jvm_db & dtrace include $(MAKEFILES_DIR)/dtrace.make +#---------------------------------------------------------------------- +# add_gnu_debuglink tool +include $(MAKEFILES_DIR)/add_gnu_debuglink.make + +#---------------------------------------------------------------------- +# fix_empty_sec_hdr_flags tool +include $(MAKEFILES_DIR)/fix_empty_sec_hdr_flags.make + #---------------------------------------------------------------------- # JVM @@ -276,7 +284,7 @@ else LINK_VM = $(LINK_LIB.CXX) endif # making the library: -$(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) +$(LIBJVM): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(LIBJVM.o) $(LIBJVM_MAPFILE) ifeq ($(filter -sbfast -xsbfast, $(CFLAGS_BROWSE)),) @echo Linking vm... $(QUIETLY) $(LINK_LIB.CXX/PRE_HOOK) @@ -286,8 +294,17 @@ ifeq ($(filter -sbfast -xsbfast, $(CFLAGS_BROWSE)),) $(QUIETLY) [ -f $(LIBJVM_G) ] || ln -s $@ $(LIBJVM_G) $(QUIETLY) [ -f $(LIBJVM_G).1 ] || ln -s $@.1 $(LIBJVM_G).1 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) +# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. +# Clear the SHF_ALLOC flag (if set) from empty section headers. +# 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. + $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO) - $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. +# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. +# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@ + $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(LIBJVM_DEBUGINFO) $@ ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else diff --git a/hotspot/make/windows/makefiles/debug.make b/hotspot/make/windows/makefiles/debug.make index 9f434729d76..36a12dc9de2 100644 --- a/hotspot/make/windows/makefiles/debug.make +++ b/hotspot/make/windows/makefiles/debug.make @@ -38,7 +38,8 @@ default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA wb !include ../local.make !include compile.make -CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) /D "_NMT_NOINLINE_" !include $(WorkSpace)/make/windows/makefiles/vm.make !include local.make diff --git a/hotspot/make/windows/makefiles/defs.make b/hotspot/make/windows/makefiles/defs.make index a1c88284cc2..58e6a606e65 100644 --- a/hotspot/make/windows/makefiles/defs.make +++ b/hotspot/make/windows/makefiles/defs.make @@ -143,9 +143,7 @@ _JUNK_ := $(shell \ MAKE_ARGS += ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - # Disable ZIP_DEBUGINFO_FILES by default because various tests are - # failing in nightly when the debug info files are ZIP'ed. - ZIP_DEBUGINFO_FILES ?= 0 + ZIP_DEBUGINFO_FILES ?= 1 else ZIP_DEBUGINFO_FILES=0 endif diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index 904489e3a2b..b2587e4d8a2 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -238,9 +238,12 @@ void LIR_Assembler::emit_string_compare(LIR_Opr left, LIR_Opr right, LIR_Opr dst Register result = dst->as_register(); { - // Get a pointer to the first character of string0 in tmp0 and get string0.count in str0 - // Get a pointer to the first character of string1 in tmp1 and get string1.count in str1 - // Also, get string0.count-string1.count in o7 and get the condition code set + // Get a pointer to the first character of string0 in tmp0 + // and get string0.length() in str0 + // Get a pointer to the first character of string1 in tmp1 + // and get string1.length() in str1 + // Also, get string0.length()-string1.length() in + // o7 and get the condition code set // Note: some instructions have been hoisted for better instruction scheduling Register tmp0 = L0; @@ -248,27 +251,40 @@ void LIR_Assembler::emit_string_compare(LIR_Opr left, LIR_Opr right, LIR_Opr dst Register tmp2 = L2; int value_offset = java_lang_String:: value_offset_in_bytes(); // char array - int offset_offset = java_lang_String::offset_offset_in_bytes(); // first character position - int count_offset = java_lang_String:: count_offset_in_bytes(); - - __ load_heap_oop(str0, value_offset, tmp0); - __ ld(str0, offset_offset, tmp2); - __ add(tmp0, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp0); - __ ld(str0, count_offset, str0); - __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2); + if (java_lang_String::has_offset_field()) { + int offset_offset = java_lang_String::offset_offset_in_bytes(); // first character position + int count_offset = java_lang_String:: count_offset_in_bytes(); + __ load_heap_oop(str0, value_offset, tmp0); + __ ld(str0, offset_offset, tmp2); + __ add(tmp0, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp0); + __ ld(str0, count_offset, str0); + __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2); + } else { + __ load_heap_oop(str0, value_offset, tmp1); + __ add(tmp1, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp0); + __ ld(tmp1, arrayOopDesc::length_offset_in_bytes(), str0); + } // str1 may be null add_debug_info_for_null_check_here(info); - __ load_heap_oop(str1, value_offset, tmp1); - __ add(tmp0, tmp2, tmp0); + if (java_lang_String::has_offset_field()) { + int offset_offset = java_lang_String::offset_offset_in_bytes(); // first character position + int count_offset = java_lang_String:: count_offset_in_bytes(); + __ load_heap_oop(str1, value_offset, tmp1); + __ add(tmp0, tmp2, tmp0); - __ ld(str1, offset_offset, tmp2); - __ add(tmp1, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp1); - __ ld(str1, count_offset, str1); - __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2); + __ ld(str1, offset_offset, tmp2); + __ add(tmp1, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp1); + __ ld(str1, count_offset, str1); + __ sll(tmp2, exact_log2(sizeof(jchar)), tmp2); + __ add(tmp1, tmp2, tmp1); + } else { + __ load_heap_oop(str1, value_offset, tmp2); + __ add(tmp2, arrayOopDesc::base_offset_in_bytes(T_CHAR), tmp1); + __ ld(tmp2, arrayOopDesc::length_offset_in_bytes(), str1); + } __ subcc(str0, str1, O7); - __ add(tmp1, tmp2, tmp1); } { @@ -302,7 +318,7 @@ void LIR_Assembler::emit_string_compare(LIR_Opr left, LIR_Opr right, LIR_Opr dst // Shift base0 and base1 to the end of the arrays, negate limit __ add(base0, limit, base0); __ add(base1, limit, base1); - __ neg(limit); // limit = -min{string0.count, strin1.count} + __ neg(limit); // limit = -min{string0.length(), string1.length()} __ lduh(base0, limit, chr0); __ bind(Lloop); diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp index abf3ab9d513..7b1bf6f1c83 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp @@ -644,30 +644,6 @@ void LIRGenerator::do_CompareOp(CompareOp* x) { } -void LIRGenerator::do_AttemptUpdate(Intrinsic* x) { - assert(x->number_of_arguments() == 3, "wrong type"); - LIRItem obj (x->argument_at(0), this); // AtomicLong object - LIRItem cmp_value (x->argument_at(1), this); // value to compare with field - LIRItem new_value (x->argument_at(2), this); // replace field with new_value if it matches cmp_value - - obj.load_item(); - cmp_value.load_item(); - new_value.load_item(); - - // generate compare-and-swap and produce zero condition if swap occurs - int value_offset = sun_misc_AtomicLongCSImpl::value_offset(); - LIR_Opr addr = FrameMap::O7_opr; - __ add(obj.result(), LIR_OprFact::intConst(value_offset), addr); - LIR_Opr t1 = FrameMap::G1_opr; // temp for 64-bit value - LIR_Opr t2 = FrameMap::G3_opr; // temp for 64-bit value - __ cas_long(addr, cmp_value.result(), new_value.result(), t1, t2); - - // generate conditional move of boolean result - LIR_Opr result = rlock_result(x); - __ cmove(lir_cond_equal, LIR_OprFact::intConst(1), LIR_OprFact::intConst(0), result, T_LONG); -} - - void LIRGenerator::do_CompareAndSwap(Intrinsic* x, ValueType* type) { assert(x->number_of_arguments() == 4, "wrong type"); LIRItem obj (x->argument_at(0), this); // object @@ -738,7 +714,8 @@ void LIRGenerator::do_MathIntrinsic(Intrinsic* x) { case vmIntrinsics::_dlog: // fall through case vmIntrinsics::_dsin: // fall through case vmIntrinsics::_dtan: // fall through - case vmIntrinsics::_dcos: { + case vmIntrinsics::_dcos: // fall through + case vmIntrinsics::_dexp: { assert(x->number_of_arguments() == 1, "wrong type"); address runtime_entry = NULL; @@ -758,12 +735,23 @@ void LIRGenerator::do_MathIntrinsic(Intrinsic* x) { case vmIntrinsics::_dlog10: runtime_entry = CAST_FROM_FN_PTR(address, SharedRuntime::dlog10); break; + case vmIntrinsics::_dexp: + runtime_entry = CAST_FROM_FN_PTR(address, SharedRuntime::dexp); + break; default: ShouldNotReachHere(); } LIR_Opr result = call_runtime(x->argument_at(0), runtime_entry, x->type(), NULL); set_result(x, result); + break; + } + case vmIntrinsics::_dpow: { + assert(x->number_of_arguments() == 2, "wrong type"); + address runtime_entry = CAST_FROM_FN_PTR(address, SharedRuntime::dpow); + LIR_Opr result = call_runtime(x->argument_at(0), x->argument_at(1), runtime_entry, x->type(), NULL); + set_result(x, result); + break; } } } @@ -977,10 +965,10 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) { if (!x->klass()->is_loaded() || PatchALot) { patching_info = state_for(x, x->state_before()); - // cannot re-use same xhandlers for multiple CodeEmitInfos, so - // clone all handlers. This is handled transparently in other - // places by the CodeEmitInfo cloning logic but is handled - // specially here because a stub isn't being used. + // Cannot re-use same xhandlers for multiple CodeEmitInfos, so + // clone all handlers (NOTE: Usually this is handled transparently + // by the CodeEmitInfo cloning logic in CodeStub constructors but + // is done explicitly here because a stub isn't being used). x->set_exception_handlers(new XHandlers(x->exception_handlers())); } CodeEmitInfo* info = state_for(x, x->state()); diff --git a/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp b/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp index f85d4e33111..6736f5c0a51 100644 --- a/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/cppInterpreter_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -490,7 +490,8 @@ address InterpreterGenerator::generate_accessor_entry(void) { ConstantPoolCacheEntry::size()) * BytesPerWord), G1_scratch); // get constant pool cache - __ ld_ptr(G5_method, in_bytes(methodOopDesc::constants_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(methodOopDesc::const_offset()), G3_scratch); + __ ld_ptr(G3_scratch, in_bytes(constMethodOopDesc::constants_offset()), G3_scratch); __ ld_ptr(G3_scratch, constantPoolOopDesc::cache_offset_in_bytes(), G3_scratch); // get specific constant pool cache entry @@ -768,7 +769,8 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { // for static methods insert the mirror argument const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc:: constants_offset())), O1); + __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc:: const_offset())), O1); + __ ld_ptr(Address(O1, 0, in_bytes(constMethodOopDesc::constants_offset())), O1); __ ld_ptr(Address(O1, 0, constantPoolOopDesc::pool_holder_offset_in_bytes()), O1); __ ld_ptr(O1, mirror_offset, O1); // where the mirror handle body is allocated: @@ -1047,7 +1049,7 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register assert_different_registers(state, prev_state); assert_different_registers(prev_state, G3_scratch); const Register Gtmp = G3_scratch; - const Address constants (G5_method, 0, in_bytes(methodOopDesc::constants_offset())); + const Address constMethod (G5_method, 0, in_bytes(methodOopDesc::const_offset())); const Address access_flags (G5_method, 0, in_bytes(methodOopDesc::access_flags_offset())); const Address size_of_parameters(G5_method, 0, in_bytes(methodOopDesc::size_of_parameters_offset())); const Address max_stack (G5_method, 0, in_bytes(methodOopDesc::max_stack_offset())); @@ -1155,7 +1157,8 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register __ set((int) BytecodeInterpreter::method_entry, O1); __ st(O1, XXX_STATE(_msg)); - __ ld_ptr(constants, O3); + __ ld_ptr(constMethod, O3); + __ ld_ptr(O3, in_bytes(constMethodOopDesc::constants_offset()), O3); __ ld_ptr(O3, constantPoolOopDesc::cache_offset_in_bytes(), O2); __ st_ptr(O2, XXX_STATE(_constants)); @@ -1178,7 +1181,8 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register __ ld_ptr(XXX_STATE(_locals), O1); __ br( Assembler::zero, true, Assembler::pt, got_obj); __ delayed()->ld_ptr(O1, 0, O1); // get receiver for not-static case - __ ld_ptr(constants, O1); + __ ld_ptr(constMethod, O1); + __ ld_ptr( O1, in_bytes(constMethodOopDesc::constants_offset()), O1); __ ld_ptr( O1, constantPoolOopDesc::pool_holder_offset_in_bytes(), O1); // lock the mirror, not the klassOop __ ld_ptr( O1, mirror_offset, O1); @@ -1536,7 +1540,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) { const Register Gtmp1 = G3_scratch; // const Register Lmirror = L1; // native mirror (native calls only) - const Address constants (G5_method, 0, in_bytes(methodOopDesc::constants_offset())); + const Address constMethod (G5_method, 0, in_bytes(methodOopDesc::const_offset())); const Address access_flags (G5_method, 0, in_bytes(methodOopDesc::access_flags_offset())); const Address size_of_parameters(G5_method, 0, in_bytes(methodOopDesc::size_of_parameters_offset())); const Address max_stack (G5_method, 0, in_bytes(methodOopDesc::max_stack_offset())); diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp index 8e3b919cfe3..eee2148415f 100644 --- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -934,8 +934,14 @@ void InterpreterMacroAssembler::index_check(Register array, Register index, int } +void InterpreterMacroAssembler::get_const(Register Rdst) { + ld_ptr(Lmethod, in_bytes(methodOopDesc::const_offset()), Rdst); +} + + void InterpreterMacroAssembler::get_constant_pool(Register Rdst) { - ld_ptr(Lmethod, in_bytes(methodOopDesc::constants_offset()), Rdst); + get_const(Rdst); + ld_ptr(Rdst, in_bytes(constMethodOopDesc::constants_offset()), Rdst); } diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp index 8e05e9a1e80..4732bf0a639 100644 --- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -205,6 +205,7 @@ class InterpreterMacroAssembler: public MacroAssembler { void index_check(Register array, Register index, int index_shift, Register tmp, Register res); void index_check_without_pop(Register array, Register index, int index_shift, Register tmp, Register res); + void get_const(Register Rdst); void get_constant_pool(Register Rdst); void get_constant_pool_cache(Register Rdst); void get_cpool_and_tags(Register Rcpool, Register Rtags); diff --git a/hotspot/src/cpu/sparc/vm/interpreter_sparc.cpp b/hotspot/src/cpu/sparc/vm/interpreter_sparc.cpp index 5471ebca2f7..7e0623376e1 100644 --- a/hotspot/src/cpu/sparc/vm/interpreter_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/interpreter_sparc.cpp @@ -403,6 +403,8 @@ address AbstractInterpreterGenerator::generate_method_entry(AbstractInterpreter: case Interpreter::java_lang_math_abs : break; case Interpreter::java_lang_math_log : break; case Interpreter::java_lang_math_log10 : break; + case Interpreter::java_lang_math_pow : break; + case Interpreter::java_lang_math_exp : break; case Interpreter::java_lang_ref_reference_get : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; default : ShouldNotReachHere(); break; diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad index e4f868baf0c..400df553694 100644 --- a/hotspot/src/cpu/sparc/vm/sparc.ad +++ b/hotspot/src/cpu/sparc/vm/sparc.ad @@ -1,5 +1,5 @@ // -// Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // // This code is free software; you can redistribute it and/or modify it @@ -678,18 +678,26 @@ intptr_t get_offset_from_base_2(const MachNode* n, const TypePtr* atype, int dis static inline jdouble replicate_immI(int con, int count, int width) { // Load a constant replicated "count" times with width "width" + assert(count*width == 8 && width <= 4, "sanity"); int bit_width = width * 8; - jlong elt_val = con; - elt_val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits - jlong val = elt_val; + jlong val = con; + val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits for (int i = 0; i < count - 1; i++) { - val <<= bit_width; - val |= elt_val; + val |= (val << bit_width); } jdouble dval = *((jdouble*) &val); // coerce to double type return dval; } +static inline jdouble replicate_immF(float con) { + // Replicate float con 2 times and pack into vector. + int val = *((int*)&con); + jlong lval = val; + lval = (lval << 32) | (lval & 0xFFFFFFFFl); + jdouble dval = *((jdouble*) &lval); // coerce to double type + return dval; +} + // Standard Sparc opcode form2 field breakdown static inline void emit2_19(CodeBuffer &cbuf, int f30, int f29, int f25, int f22, int f20, int f19, int f0 ) { f0 &= (1<<19)-1; // Mask displacement to 19 bits @@ -791,6 +799,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te case Assembler::stdf_op3: st_op = Op_StoreD; break; case Assembler::ldsb_op3: ld_op = Op_LoadB; break; + case Assembler::ldub_op3: ld_op = Op_LoadUB; break; case Assembler::lduh_op3: ld_op = Op_LoadUS; break; case Assembler::ldsh_op3: ld_op = Op_LoadS; break; case Assembler::ldx_op3: // may become LoadP or stay LoadI @@ -799,7 +808,6 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te case Assembler::ldd_op3: ld_op = Op_LoadL; break; case Assembler::ldf_op3: ld_op = Op_LoadF; break; case Assembler::lddf_op3: ld_op = Op_LoadD; break; - case Assembler::ldub_op3: ld_op = Op_LoadB; break; case Assembler::prefetch_op3: ld_op = Op_LoadI; break; default: ShouldNotReachHere(); @@ -827,7 +835,6 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te // a Load // inputs are (0:control, 1:memory, 2:address) if (!(n->ideal_Opcode()==ld_op) && // Following are special cases - !(n->ideal_Opcode()==Op_LoadLLocked && ld_op==Op_LoadI) && !(n->ideal_Opcode()==Op_LoadPLocked && ld_op==Op_LoadP) && !(n->ideal_Opcode()==Op_LoadI && ld_op==Op_LoadF) && !(n->ideal_Opcode()==Op_LoadF && ld_op==Op_LoadI) && @@ -841,10 +848,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te !(n->ideal_Opcode()==Op_PrefetchRead && ld_op==Op_LoadI) && !(n->ideal_Opcode()==Op_PrefetchWrite && ld_op==Op_LoadI) && !(n->ideal_Opcode()==Op_PrefetchAllocation && ld_op==Op_LoadI) && - !(n->ideal_Opcode()==Op_Load2I && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load4C && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load4S && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load8B && ld_op==Op_LoadD) && + !(n->ideal_Opcode()==Op_LoadVector && ld_op==Op_LoadD) && !(n->rule() == loadUB_rule)) { verify_oops_warning(n, n->ideal_Opcode(), ld_op); } @@ -856,9 +860,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te !(n->ideal_Opcode()==Op_StoreI && st_op==Op_StoreF) && !(n->ideal_Opcode()==Op_StoreF && st_op==Op_StoreI) && !(n->ideal_Opcode()==Op_StoreL && st_op==Op_StoreI) && - !(n->ideal_Opcode()==Op_Store2I && st_op==Op_StoreD) && - !(n->ideal_Opcode()==Op_Store4C && st_op==Op_StoreD) && - !(n->ideal_Opcode()==Op_Store8B && st_op==Op_StoreD) && + !(n->ideal_Opcode()==Op_StoreVector && st_op==Op_StoreD) && !(n->ideal_Opcode()==Op_StoreD && st_op==Op_StoreI && n->rule() == storeD0_rule)) { verify_oops_warning(n, n->ideal_Opcode(), st_op); } @@ -1850,16 +1852,45 @@ int Matcher::regnum_to_fpu_offset(int regnum) { address last_rethrow = NULL; // debugging aid for Rethrow encoding #endif +// Map Types to machine register types +const int Matcher::base2reg[Type::lastype] = { + Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, + Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ + 0, Op_RegD, 0, 0, /* Vectors */ + Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ + 0, 0/*abio*/, + Op_RegP /* Return address */, 0, /* the memories */ + Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, + 0 /*bottom*/ +}; + // Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { +const int Matcher::vector_width_in_bytes(BasicType bt) { + assert(MaxVectorSize == 8, ""); return 8; } // Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { +const int Matcher::vector_ideal_reg(int size) { + assert(MaxVectorSize == 8, ""); return Op_RegD; } +// Limits on vector size (number of elements) loaded into vector. +const int Matcher::max_vector_size(const BasicType bt) { + assert(is_java_primitive(bt), "only primitive type vectors"); + return vector_width_in_bytes(bt)/type2aelembytes(bt); +} + +const int Matcher::min_vector_size(const BasicType bt) { + return max_vector_size(bt); // Same as max. +} + +// SPARC doesn't support misaligned vectors store/load. +const bool Matcher::misaligned_vectors_ok() { + return false; +} + // USII supports fxtof through the whole range of number, USIII doesn't const bool Matcher::convL2FSupported(void) { return VM_Version::has_fast_fxtof(); @@ -3126,50 +3157,6 @@ enc_class enc_Array_Equals(o0RegP ary1, o1RegP ary2, g3RegP tmp1, notemp_iRegI r __ membar( Assembler::Membar_mask_bits(Assembler::StoreLoad) ); %} - enc_class enc_repl8b( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 56, dst_reg); - __ srlx(dst_reg, 8, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 16, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - - enc_class enc_repl4b( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sll(src_reg, 24, dst_reg); - __ srl(dst_reg, 8, O7); - __ or3(dst_reg, O7, dst_reg); - __ srl(dst_reg, 16, O7); - __ or3(dst_reg, O7, dst_reg); - %} - - enc_class enc_repl4s( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 48, dst_reg); - __ srlx(dst_reg, 16, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - - enc_class enc_repl2i( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 32, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - %} //----------FRAME-------------------------------------------------------------- @@ -5933,50 +5920,6 @@ instruct loadL_unaligned(iRegL dst, memory mem, o7RegI tmp) %{ ins_pipe(iload_mem); %} -// Load Aligned Packed Byte into a Double Register -instruct loadA8B(regD dst, memory mem) %{ - match(Set dst (Load8B mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed8B" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Char into a Double Register -instruct loadA4C(regD dst, memory mem) %{ - match(Set dst (Load4C mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed4C" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Short into a Double Register -instruct loadA4S(regD dst, memory mem) %{ - match(Set dst (Load4S mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed4S" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Int into a Double Register -instruct loadA2I(regD dst, memory mem) %{ - match(Set dst (Load2I mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed2I" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - // Load Range instruct loadRange(iRegI dst, memory mem) %{ match(Set dst (LoadRange mem)); @@ -6600,17 +6543,6 @@ instruct storeF0( memory mem, immF0 src) %{ ins_pipe(fstoreF_mem_zero); %} -// Store Aligned Packed Bytes in Double register to memory -instruct storeA8B(memory mem, regD src) %{ - match(Set mem (Store8B mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed8B" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - // Convert oop pointer into compressed form instruct encodeHeapOop(iRegN dst, iRegP src) %{ predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull); @@ -6655,62 +6587,6 @@ instruct decodeHeapOop_not_null(iRegP dst, iRegN src) %{ %} -// Store Zero into Aligned Packed Bytes -instruct storeA8B0(memory mem, immI0 zero) %{ - match(Set mem (Store8B mem zero)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed8B" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - -// Store Aligned Packed Chars/Shorts in Double register to memory -instruct storeA4C(memory mem, regD src) %{ - match(Set mem (Store4C mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed4C" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - -// Store Zero into Aligned Packed Chars/Shorts -instruct storeA4C0(memory mem, immI0 zero) %{ - match(Set mem (Store4C mem (Replicate4C zero))); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed4C" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - -// Store Aligned Packed Ints in Double register to memory -instruct storeA2I(memory mem, regD src) %{ - match(Set mem (Store2I mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed2I" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - -// Store Zero into Aligned Packed Ints -instruct storeA2I0(memory mem, immI0 zero) %{ - match(Set mem (Store2I mem zero)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed2I" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - - //----------MemBar Instructions----------------------------------------------- // Memory barrier flavors @@ -7306,17 +7182,6 @@ instruct loadPLocked(iRegP dst, memory mem) %{ ins_pipe(iload_mem); %} -// LoadL-locked. Same as a regular long load when used with a compare-swap -instruct loadLLocked(iRegL dst, memory mem) %{ - match(Set dst (LoadLLocked mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDX $mem,$dst\t! long" %} - opcode(Assembler::ldx_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(iload_mem); -%} - instruct storePConditional( iRegP heap_top_ptr, iRegP oldval, g3RegP newval, flagsRegP pcc ) %{ match(Set pcc (StorePConditional heap_top_ptr (Binary oldval newval))); effect( KILL newval ); @@ -8892,150 +8757,6 @@ instruct shrL_reg_imm6_L2I(iRegI dst, iRegL src, immI_32_63 cnt) %{ ins_pipe(ialu_reg_imm); %} -// Replicate scalar to packed byte values in Double register -instruct Repl8B_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,56,$dst\n\t" - "SRLX $dst, 8,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate8B" %} - ins_encode( enc_repl8b(src, dst)); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed byte values in Double register -instruct Repl8B_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate8B src)); - expand %{ - iRegL tmp; - Repl8B_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed byte values in Double register -instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{ - match(Set dst (Replicate8B con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed char values into stack slot -instruct Repl4C_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,48,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate4C" %} - ins_encode( enc_repl4s(src, dst) ); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed char values into stack slot -instruct Repl4C_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate4C src)); - expand %{ - iRegL tmp; - Repl4C_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed char values in Double register -instruct Repl4C_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate4C con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4C($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed short values into stack slot -instruct Repl4S_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,48,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate4S" %} - ins_encode( enc_repl4s(src, dst) ); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed short values into stack slot -instruct Repl4S_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate4S src)); - expand %{ - iRegL tmp; - Repl4S_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed short values in Double register -instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate4S con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed int values in Double register -instruct Repl2I_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,32,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate2I" %} - ins_encode( enc_repl2i(src, dst)); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed int values in Double register -instruct Repl2I_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate2I src)); - expand %{ - iRegL tmp; - Repl2I_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar zero constant to packed int values in Double register -instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate2I con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - //----------Control Flow Instructions------------------------------------------ // Compare Instructions // Compare Integers @@ -10754,6 +10475,308 @@ instruct storeS_reversed(indIndexMemory dst, iRegI src) %{ ins_pipe(istore_mem_reg); %} +// ====================VECTOR INSTRUCTIONS===================================== + +// Load Aligned Packed values into a Double Register +instruct loadV8(regD dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 8); + match(Set dst (LoadVector mem)); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "LDDF $mem,$dst\t! load vector (8 bytes)" %} + ins_encode %{ + __ ldf(FloatRegisterImpl::D, $mem$$Address, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(floadD_mem); +%} + +// Store Vector in Double register to memory +instruct storeV8(memory mem, regD src) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem src)); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STDF $src,$mem\t! store vector (8 bytes)" %} + ins_encode %{ + __ stf(FloatRegisterImpl::D, as_DoubleFloatRegister($src$$reg), $mem$$Address); + %} + ins_pipe(fstoreD_mem_reg); +%} + +// Store Zero into vector in memory +instruct storeV8B_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateB zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (8 bytes)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV4S_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateS zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (4 shorts)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV2I_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateI zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (2 ints)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV2F_zero(memory mem, immF0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateF zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (2 floats)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +// Replicate scalar to packed byte values into Double register +instruct Repl8B_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 8 && UseVIS >= 3); + match(Set dst (ReplicateB src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,56,$tmp\n\t" + "SRLX $tmp, 8,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate8B\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 56, Rtmp); + __ srlx(Rtmp, 8, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed byte values into Double stack +instruct Repl8B_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 8 && UseVIS < 3); + match(Set dst (ReplicateB src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,56,$tmp\n\t" + "SRLX $tmp, 8,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate8B\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 56, Rtmp); + __ srlx(Rtmp, 8, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar constant to packed byte values in Double register +instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed char/short values into Double register +instruct Repl4S_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 4 && UseVIS >= 3); + match(Set dst (ReplicateS src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,48,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate4S\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 48, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed char/short values into Double stack +instruct Repl4S_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 4 && UseVIS < 3); + match(Set dst (ReplicateS src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,48,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate4S\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 48, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar constant to packed char/short values in Double register +instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed int values into Double register +instruct Repl2I_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 2 && UseVIS >= 3); + match(Set dst (ReplicateI src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,32,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate2I\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 32, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed int values into Double stack +instruct Repl2I_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 2 && UseVIS < 3); + match(Set dst (ReplicateI src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,32,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate2I\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 32, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar zero constant to packed int values in Double register +instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed float values into Double stack +instruct Repl2F_stk(stackSlotD dst, regF src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF src)); + ins_cost(MEMORY_REF_COST*2); + format %{ "STF $src,$dst.hi\t! packed2F\n\t" + "STF $src,$dst.lo" %} + opcode(Assembler::stf_op3); + ins_encode(simple_form3_mem_reg(dst, src), form3_mem_plus_4_reg(dst, src)); + ins_pipe(fstoreF_stk_reg); +%} + +// Replicate scalar zero constant to packed float values in Double register +instruct Repl2F_immF(regD dst, immF con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2F($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immF($con$$constant)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immF($con$$constant)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + //----------PEEPHOLE RULES----------------------------------------------------- // These must follow all instruction definitions as they use the names // defined in the instructions definitions. diff --git a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp index 98028af0ea0..e5f0df08c39 100644 --- a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -371,7 +371,8 @@ void InterpreterGenerator::lock_method(void) { __ br( Assembler::zero, true, Assembler::pt, done); __ delayed()->ld_ptr(Llocals, Interpreter::local_offset_in_bytes(0), O0); // get receiver for not-static case - __ ld_ptr( Lmethod, in_bytes(methodOopDesc::constants_offset()), O0); + __ ld_ptr( Lmethod, in_bytes(methodOopDesc::const_offset()), O0); + __ ld_ptr( O0, in_bytes(constMethodOopDesc::constants_offset()), O0); __ ld_ptr( O0, constantPoolOopDesc::pool_holder_offset_in_bytes(), O0); // lock the mirror, not the klassOop @@ -670,7 +671,8 @@ address InterpreterGenerator::generate_accessor_entry(void) { ConstantPoolCacheEntry::size()) * BytesPerWord), G1_scratch); // get constant pool cache - __ ld_ptr(G5_method, methodOopDesc::constants_offset(), G3_scratch); + __ ld_ptr(G5_method, methodOopDesc::const_offset(), G3_scratch); + __ ld_ptr(G3_scratch, constMethodOopDesc::constants_offset(), G3_scratch); __ ld_ptr(G3_scratch, constantPoolOopDesc::cache_offset_in_bytes(), G3_scratch); // get specific constant pool cache entry @@ -993,7 +995,8 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { // for static methods insert the mirror argument const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ ld_ptr(Lmethod, methodOopDesc:: constants_offset(), O1); + __ ld_ptr(Lmethod, methodOopDesc:: const_offset(), O1); + __ ld_ptr(O1, constMethodOopDesc::constants_offset(), O1); __ ld_ptr(O1, constantPoolOopDesc::pool_holder_offset_in_bytes(), O1); __ ld_ptr(O1, mirror_offset, O1); #ifdef ASSERT diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp index 1d4966217a0..ce1b0286067 100644 --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -217,6 +217,8 @@ void VM_Version::initialize() { // Currently not supported anywhere. FLAG_SET_DEFAULT(UseFPUForSpilling, false); + MaxVectorSize = 8; + assert((InteriorEntryAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size"); #endif diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp index 7c7cb3d8a78..9e58e2d06fc 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp @@ -1637,6 +1637,13 @@ void Assembler::movaps(XMMRegister dst, XMMRegister src) { emit_byte(0xC0 | encode); } +void Assembler::movlhps(XMMRegister dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse(), "")); + int encode = simd_prefix_and_encode(dst, src, src, VEX_SIMD_NONE); + emit_byte(0x16); + emit_byte(0xC0 | encode); +} + void Assembler::movb(Register dst, Address src) { NOT_LP64(assert(dst->has_byte_register(), "must have byte register")); InstructionMark im(this); @@ -1686,6 +1693,14 @@ void Assembler::movdl(XMMRegister dst, Address src) { emit_operand(dst, src); } +void Assembler::movdl(Address dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse2(), "")); + InstructionMark im(this); + simd_prefix(dst, src, VEX_SIMD_66); + emit_byte(0x7E); + emit_operand(src, dst); +} + void Assembler::movdqa(XMMRegister dst, XMMRegister src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); int encode = simd_prefix_and_encode(dst, src, VEX_SIMD_66); @@ -1716,6 +1731,35 @@ void Assembler::movdqu(Address dst, XMMRegister src) { emit_operand(src, dst); } +// Move Unaligned 256bit Vector +void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) { + assert(UseAVX, ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_F3, vector256); + emit_byte(0x6F); + emit_byte(0xC0 | encode); +} + +void Assembler::vmovdqu(XMMRegister dst, Address src) { + assert(UseAVX, ""); + InstructionMark im(this); + bool vector256 = true; + vex_prefix(dst, xnoreg, src, VEX_SIMD_F3, vector256); + emit_byte(0x6F); + emit_operand(dst, src); +} + +void Assembler::vmovdqu(Address dst, XMMRegister src) { + assert(UseAVX, ""); + InstructionMark im(this); + bool vector256 = true; + // swap src<->dst for encoding + assert(src != xnoreg, "sanity"); + vex_prefix(src, xnoreg, dst, VEX_SIMD_F3, vector256); + emit_byte(0x7F); + emit_operand(src, dst); +} + // Uses zero extension on 64bit void Assembler::movl(Register dst, int32_t imm32) { @@ -2529,6 +2573,13 @@ void Assembler::punpckldq(XMMRegister dst, XMMRegister src) { emit_byte(0xC0 | encode); } +void Assembler::punpcklqdq(XMMRegister dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse2(), "")); + int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66); + emit_byte(0x6C); + emit_byte(0xC0 | encode); +} + void Assembler::push(int32_t imm32) { // in 64bits we push 64bits onto the stack but only // take a 32bit immediate @@ -3112,6 +3163,13 @@ void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, Address src) { emit_operand(dst, src); } +void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256); + emit_byte(0x57); + emit_byte(0xC0 | encode); +} + void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) { assert(VM_Version::supports_avx(), ""); InstructionMark im(this); @@ -3120,6 +3178,48 @@ void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) { emit_operand(dst, src); } +void Assembler::vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_NONE, vector256); + emit_byte(0x57); + emit_byte(0xC0 | encode); +} + +void Assembler::vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx2() || (!vector256) && VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256); + emit_byte(0xEF); + emit_byte(0xC0 | encode); +} + +void Assembler::vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src) { + assert(VM_Version::supports_avx(), ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A); + emit_byte(0x18); + emit_byte(0xC0 | encode); + // 0x00 - insert into lower 128 bits + // 0x01 - insert into upper 128 bits + emit_byte(0x01); +} + +void Assembler::vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) { + assert(VM_Version::supports_avx2(), ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A); + emit_byte(0x38); + emit_byte(0xC0 | encode); + // 0x00 - insert into lower 128 bits + // 0x01 - insert into upper 128 bits + emit_byte(0x01); +} + +void Assembler::vzeroupper() { + assert(VM_Version::supports_avx(), ""); + (void)vex_prefix_and_encode(xmm0, xmm0, xmm0, VEX_SIMD_NONE); + emit_byte(0x77); +} + #ifndef _LP64 // 32bit only pieces of the assembler @@ -3578,6 +3678,21 @@ void Assembler::fyl2x() { emit_byte(0xF1); } +void Assembler::frndint() { + emit_byte(0xD9); + emit_byte(0xFC); +} + +void Assembler::f2xm1() { + emit_byte(0xD9); + emit_byte(0xF0); +} + +void Assembler::fldl2e() { + emit_byte(0xD9); + emit_byte(0xEA); +} + // SSE SIMD prefix byte values corresponding to VexSimdPrefix encoding. static int simd_pre[4] = { 0, 0x66, 0xF3, 0xF2 }; // SSE opcode second byte values (first is 0x0F) corresponding to VexOpcode encoding. @@ -6868,6 +6983,264 @@ void MacroAssembler::fldcw(AddressLiteral src) { Assembler::fldcw(as_Address(src)); } +void MacroAssembler::pow_exp_core_encoding() { + // kills rax, rcx, rdx + subptr(rsp,sizeof(jdouble)); + // computes 2^X. Stack: X ... + // f2xm1 computes 2^X-1 but only operates on -1<=X<=1. Get int(X) and + // keep it on the thread's stack to compute 2^int(X) later + // then compute 2^(X-int(X)) as (2^(X-int(X)-1+1) + // final result is obtained with: 2^X = 2^int(X) * 2^(X-int(X)) + fld_s(0); // Stack: X X ... + frndint(); // Stack: int(X) X ... + fsuba(1); // Stack: int(X) X-int(X) ... + fistp_s(Address(rsp,0)); // move int(X) as integer to thread's stack. Stack: X-int(X) ... + f2xm1(); // Stack: 2^(X-int(X))-1 ... + fld1(); // Stack: 1 2^(X-int(X))-1 ... + faddp(1); // Stack: 2^(X-int(X)) + // computes 2^(int(X)): add exponent bias (1023) to int(X), then + // shift int(X)+1023 to exponent position. + // Exponent is limited to 11 bits if int(X)+1023 does not fit in 11 + // bits, set result to NaN. 0x000 and 0x7FF are reserved exponent + // values so detect them and set result to NaN. + movl(rax,Address(rsp,0)); + movl(rcx, -2048); // 11 bit mask and valid NaN binary encoding + addl(rax, 1023); + movl(rdx,rax); + shll(rax,20); + // Check that 0 < int(X)+1023 < 2047. Otherwise set rax to NaN. + addl(rdx,1); + // Check that 1 < int(X)+1023+1 < 2048 + // in 3 steps: + // 1- (int(X)+1023+1)&-2048 == 0 => 0 <= int(X)+1023+1 < 2048 + // 2- (int(X)+1023+1)&-2048 != 0 + // 3- (int(X)+1023+1)&-2048 != 1 + // Do 2- first because addl just updated the flags. + cmov32(Assembler::equal,rax,rcx); + cmpl(rdx,1); + cmov32(Assembler::equal,rax,rcx); + testl(rdx,rcx); + cmov32(Assembler::notEqual,rax,rcx); + movl(Address(rsp,4),rax); + movl(Address(rsp,0),0); + fmul_d(Address(rsp,0)); // Stack: 2^X ... + addptr(rsp,sizeof(jdouble)); +} + +void MacroAssembler::increase_precision() { + subptr(rsp, BytesPerWord); + fnstcw(Address(rsp, 0)); + movl(rax, Address(rsp, 0)); + orl(rax, 0x300); + push(rax); + fldcw(Address(rsp, 0)); + pop(rax); +} + +void MacroAssembler::restore_precision() { + fldcw(Address(rsp, 0)); + addptr(rsp, BytesPerWord); +} + +void MacroAssembler::fast_pow() { + // computes X^Y = 2^(Y * log2(X)) + // if fast computation is not possible, result is NaN. Requires + // fallback from user of this macro. + // increase precision for intermediate steps of the computation + increase_precision(); + fyl2x(); // Stack: (Y*log2(X)) ... + pow_exp_core_encoding(); // Stack: exp(X) ... + restore_precision(); +} + +void MacroAssembler::fast_exp() { + // computes exp(X) = 2^(X * log2(e)) + // if fast computation is not possible, result is NaN. Requires + // fallback from user of this macro. + // increase precision for intermediate steps of the computation + increase_precision(); + fldl2e(); // Stack: log2(e) X ... + fmulp(1); // Stack: (X*log2(e)) ... + pow_exp_core_encoding(); // Stack: exp(X) ... + restore_precision(); +} + +void MacroAssembler::pow_or_exp(bool is_exp, int num_fpu_regs_in_use) { + // kills rax, rcx, rdx + // pow and exp needs 2 extra registers on the fpu stack. + Label slow_case, done; + Register tmp = noreg; + if (!VM_Version::supports_cmov()) { + // fcmp needs a temporary so preserve rdx, + tmp = rdx; + } + Register tmp2 = rax; + Register tmp3 = rcx; + + if (is_exp) { + // Stack: X + fld_s(0); // duplicate argument for runtime call. Stack: X X + fast_exp(); // Stack: exp(X) X + fcmp(tmp, 0, false, false); // Stack: exp(X) X + // exp(X) not equal to itself: exp(X) is NaN go to slow case. + jcc(Assembler::parity, slow_case); + // get rid of duplicate argument. Stack: exp(X) + if (num_fpu_regs_in_use > 0) { + fxch(); + fpop(); + } else { + ffree(1); + } + jmp(done); + } else { + // Stack: X Y + Label x_negative, y_odd; + + fldz(); // Stack: 0 X Y + fcmp(tmp, 1, true, false); // Stack: X Y + jcc(Assembler::above, x_negative); + + // X >= 0 + + fld_s(1); // duplicate arguments for runtime call. Stack: Y X Y + fld_s(1); // Stack: X Y X Y + fast_pow(); // Stack: X^Y X Y + fcmp(tmp, 0, false, false); // Stack: X^Y X Y + // X^Y not equal to itself: X^Y is NaN go to slow case. + jcc(Assembler::parity, slow_case); + // get rid of duplicate arguments. Stack: X^Y + if (num_fpu_regs_in_use > 0) { + fxch(); fpop(); + fxch(); fpop(); + } else { + ffree(2); + ffree(1); + } + jmp(done); + + // X <= 0 + bind(x_negative); + + fld_s(1); // Stack: Y X Y + frndint(); // Stack: int(Y) X Y + fcmp(tmp, 2, false, false); // Stack: int(Y) X Y + jcc(Assembler::notEqual, slow_case); + + subptr(rsp, 8); + + // For X^Y, when X < 0, Y has to be an integer and the final + // result depends on whether it's odd or even. We just checked + // that int(Y) == Y. We move int(Y) to gp registers as a 64 bit + // integer to test its parity. If int(Y) is huge and doesn't fit + // in the 64 bit integer range, the integer indefinite value will + // end up in the gp registers. Huge numbers are all even, the + // integer indefinite number is even so it's fine. + +#ifdef ASSERT + // Let's check we don't end up with an integer indefinite number + // when not expected. First test for huge numbers: check whether + // int(Y)+1 == int(Y) which is true for very large numbers and + // those are all even. A 64 bit integer is guaranteed to not + // overflow for numbers where y+1 != y (when precision is set to + // double precision). + Label y_not_huge; + + fld1(); // Stack: 1 int(Y) X Y + fadd(1); // Stack: 1+int(Y) int(Y) X Y + +#ifdef _LP64 + // trip to memory to force the precision down from double extended + // precision + fstp_d(Address(rsp, 0)); + fld_d(Address(rsp, 0)); +#endif + + fcmp(tmp, 1, true, false); // Stack: int(Y) X Y +#endif + + // move int(Y) as 64 bit integer to thread's stack + fistp_d(Address(rsp,0)); // Stack: X Y + +#ifdef ASSERT + jcc(Assembler::notEqual, y_not_huge); + + // Y is huge so we know it's even. It may not fit in a 64 bit + // integer and we don't want the debug code below to see the + // integer indefinite value so overwrite int(Y) on the thread's + // stack with 0. + movl(Address(rsp, 0), 0); + movl(Address(rsp, 4), 0); + + bind(y_not_huge); +#endif + + fld_s(1); // duplicate arguments for runtime call. Stack: Y X Y + fld_s(1); // Stack: X Y X Y + fabs(); // Stack: abs(X) Y X Y + fast_pow(); // Stack: abs(X)^Y X Y + fcmp(tmp, 0, false, false); // Stack: abs(X)^Y X Y + // abs(X)^Y not equal to itself: abs(X)^Y is NaN go to slow case. + + pop(tmp2); + NOT_LP64(pop(tmp3)); + jcc(Assembler::parity, slow_case); + +#ifdef ASSERT + // Check that int(Y) is not integer indefinite value (int + // overflow). Shouldn't happen because for values that would + // overflow, 1+int(Y)==Y which was tested earlier. +#ifndef _LP64 + { + Label integer; + testl(tmp2, tmp2); + jcc(Assembler::notZero, integer); + cmpl(tmp3, 0x80000000); + jcc(Assembler::notZero, integer); + stop("integer indefinite value shouldn't be seen here"); + bind(integer); + } +#else + { + Label integer; + mov(tmp3, tmp2); // preserve tmp2 for parity check below + shlq(tmp3, 1); + jcc(Assembler::carryClear, integer); + jcc(Assembler::notZero, integer); + stop("integer indefinite value shouldn't be seen here"); + bind(integer); + } +#endif +#endif + + // get rid of duplicate arguments. Stack: X^Y + if (num_fpu_regs_in_use > 0) { + fxch(); fpop(); + fxch(); fpop(); + } else { + ffree(2); + ffree(1); + } + + testl(tmp2, 1); + jcc(Assembler::zero, done); // X <= 0, Y even: X^Y = abs(X)^Y + // X <= 0, Y even: X^Y = -abs(X)^Y + + fchs(); // Stack: -abs(X)^Y Y + jmp(done); + } + + // slow case: runtime call + bind(slow_case); + + fpop(); // pop incorrect result or int(Y) + + fp_runtime_fallback(is_exp ? CAST_FROM_FN_PTR(address, SharedRuntime::dexp) : CAST_FROM_FN_PTR(address, SharedRuntime::dpow), + is_exp ? 1 : 2, num_fpu_regs_in_use); + + // Come here with result in F-TOS + bind(done); +} + void MacroAssembler::fpop() { ffree(); fincstp(); @@ -7132,6 +7505,24 @@ void MacroAssembler::movbyte(ArrayAddress dst, int src) { movb(as_Address(dst), src); } +void MacroAssembler::movdl(XMMRegister dst, AddressLiteral src) { + if (reachable(src)) { + movdl(dst, as_Address(src)); + } else { + lea(rscratch1, src); + movdl(dst, Address(rscratch1, 0)); + } +} + +void MacroAssembler::movq(XMMRegister dst, AddressLiteral src) { + if (reachable(src)) { + movq(dst, as_Address(src)); + } else { + lea(rscratch1, src); + movq(dst, Address(rscratch1, 0)); + } +} + void MacroAssembler::movdbl(XMMRegister dst, AddressLiteral src) { if (reachable(src)) { if (UseXmmLoadAndClearUpper) { @@ -8045,6 +8436,144 @@ void MacroAssembler::incr_allocated_bytes(Register thread, #endif } +void MacroAssembler::fp_runtime_fallback(address runtime_entry, int nb_args, int num_fpu_regs_in_use) { + pusha(); + + // if we are coming from c1, xmm registers may be live + if (UseSSE >= 1) { + subptr(rsp, sizeof(jdouble)* LP64_ONLY(16) NOT_LP64(8)); + } + int off = 0; + if (UseSSE == 1) { + movflt(Address(rsp,off++*sizeof(jdouble)),xmm0); + movflt(Address(rsp,off++*sizeof(jdouble)),xmm1); + movflt(Address(rsp,off++*sizeof(jdouble)),xmm2); + movflt(Address(rsp,off++*sizeof(jdouble)),xmm3); + movflt(Address(rsp,off++*sizeof(jdouble)),xmm4); + movflt(Address(rsp,off++*sizeof(jdouble)),xmm5); + movflt(Address(rsp,off++*sizeof(jdouble)),xmm6); + movflt(Address(rsp,off++*sizeof(jdouble)),xmm7); + } else if (UseSSE >= 2) { + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm0); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm1); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm2); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm3); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm4); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm5); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm6); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm7); +#ifdef _LP64 + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm8); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm9); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm10); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm11); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm12); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm13); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm14); + movdbl(Address(rsp,off++*sizeof(jdouble)),xmm15); +#endif + } + + // Preserve registers across runtime call + int incoming_argument_and_return_value_offset = -1; + if (num_fpu_regs_in_use > 1) { + // Must preserve all other FPU regs (could alternatively convert + // SharedRuntime::dsin, dcos etc. into assembly routines known not to trash + // FPU state, but can not trust C compiler) + NEEDS_CLEANUP; + // NOTE that in this case we also push the incoming argument(s) to + // the stack and restore it later; we also use this stack slot to + // hold the return value from dsin, dcos etc. + for (int i = 0; i < num_fpu_regs_in_use; i++) { + subptr(rsp, sizeof(jdouble)); + fstp_d(Address(rsp, 0)); + } + incoming_argument_and_return_value_offset = sizeof(jdouble)*(num_fpu_regs_in_use-1); + for (int i = nb_args-1; i >= 0; i--) { + fld_d(Address(rsp, incoming_argument_and_return_value_offset-i*sizeof(jdouble))); + } + } + + subptr(rsp, nb_args*sizeof(jdouble)); + for (int i = 0; i < nb_args; i++) { + fstp_d(Address(rsp, i*sizeof(jdouble))); + } + +#ifdef _LP64 + if (nb_args > 0) { + movdbl(xmm0, Address(rsp, 0)); + } + if (nb_args > 1) { + movdbl(xmm1, Address(rsp, sizeof(jdouble))); + } + assert(nb_args <= 2, "unsupported number of args"); +#endif // _LP64 + + // NOTE: we must not use call_VM_leaf here because that requires a + // complete interpreter frame in debug mode -- same bug as 4387334 + // MacroAssembler::call_VM_leaf_base is perfectly safe and will + // do proper 64bit abi + + NEEDS_CLEANUP; + // Need to add stack banging before this runtime call if it needs to + // be taken; however, there is no generic stack banging routine at + // the MacroAssembler level + + MacroAssembler::call_VM_leaf_base(runtime_entry, 0); + +#ifdef _LP64 + movsd(Address(rsp, 0), xmm0); + fld_d(Address(rsp, 0)); +#endif // _LP64 + addptr(rsp, sizeof(jdouble) * nb_args); + if (num_fpu_regs_in_use > 1) { + // Must save return value to stack and then restore entire FPU + // stack except incoming arguments + fstp_d(Address(rsp, incoming_argument_and_return_value_offset)); + for (int i = 0; i < num_fpu_regs_in_use - nb_args; i++) { + fld_d(Address(rsp, 0)); + addptr(rsp, sizeof(jdouble)); + } + fld_d(Address(rsp, (nb_args-1)*sizeof(jdouble))); + addptr(rsp, sizeof(jdouble) * nb_args); + } + + off = 0; + if (UseSSE == 1) { + movflt(xmm0, Address(rsp,off++*sizeof(jdouble))); + movflt(xmm1, Address(rsp,off++*sizeof(jdouble))); + movflt(xmm2, Address(rsp,off++*sizeof(jdouble))); + movflt(xmm3, Address(rsp,off++*sizeof(jdouble))); + movflt(xmm4, Address(rsp,off++*sizeof(jdouble))); + movflt(xmm5, Address(rsp,off++*sizeof(jdouble))); + movflt(xmm6, Address(rsp,off++*sizeof(jdouble))); + movflt(xmm7, Address(rsp,off++*sizeof(jdouble))); + } else if (UseSSE >= 2) { + movdbl(xmm0, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm1, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm2, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm3, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm4, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm5, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm6, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm7, Address(rsp,off++*sizeof(jdouble))); +#ifdef _LP64 + movdbl(xmm8, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm9, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm10, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm11, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm12, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm13, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm14, Address(rsp,off++*sizeof(jdouble))); + movdbl(xmm15, Address(rsp,off++*sizeof(jdouble))); +#endif + } + if (UseSSE >= 1) { + addptr(rsp, sizeof(jdouble)* LP64_ONLY(16) NOT_LP64(8)); + } + popa(); +} + static const double pi_4 = 0.7853981633974483; void MacroAssembler::trigfunc(char trig, int num_fpu_regs_in_use) { @@ -8092,73 +8621,27 @@ void MacroAssembler::trigfunc(char trig, int num_fpu_regs_in_use) { // slow case: runtime call bind(slow_case); - // Preserve registers across runtime call - pusha(); - int incoming_argument_and_return_value_offset = -1; - if (num_fpu_regs_in_use > 1) { - // Must preserve all other FPU regs (could alternatively convert - // SharedRuntime::dsin and dcos into assembly routines known not to trash - // FPU state, but can not trust C compiler) - NEEDS_CLEANUP; - // NOTE that in this case we also push the incoming argument to - // the stack and restore it later; we also use this stack slot to - // hold the return value from dsin or dcos. - for (int i = 0; i < num_fpu_regs_in_use; i++) { - subptr(rsp, sizeof(jdouble)); - fstp_d(Address(rsp, 0)); - } - incoming_argument_and_return_value_offset = sizeof(jdouble)*(num_fpu_regs_in_use-1); - fld_d(Address(rsp, incoming_argument_and_return_value_offset)); - } - subptr(rsp, sizeof(jdouble)); - fstp_d(Address(rsp, 0)); -#ifdef _LP64 - movdbl(xmm0, Address(rsp, 0)); -#endif // _LP64 - // NOTE: we must not use call_VM_leaf here because that requires a - // complete interpreter frame in debug mode -- same bug as 4387334 - // MacroAssembler::call_VM_leaf_base is perfectly safe and will - // do proper 64bit abi - - NEEDS_CLEANUP; - // Need to add stack banging before this runtime call if it needs to - // be taken; however, there is no generic stack banging routine at - // the MacroAssembler level switch(trig) { case 's': { - MacroAssembler::call_VM_leaf_base(CAST_FROM_FN_PTR(address, SharedRuntime::dsin), 0); + fp_runtime_fallback(CAST_FROM_FN_PTR(address, SharedRuntime::dsin), 1, num_fpu_regs_in_use); } break; case 'c': { - MacroAssembler::call_VM_leaf_base(CAST_FROM_FN_PTR(address, SharedRuntime::dcos), 0); + fp_runtime_fallback(CAST_FROM_FN_PTR(address, SharedRuntime::dcos), 1, num_fpu_regs_in_use); } break; case 't': { - MacroAssembler::call_VM_leaf_base(CAST_FROM_FN_PTR(address, SharedRuntime::dtan), 0); + fp_runtime_fallback(CAST_FROM_FN_PTR(address, SharedRuntime::dtan), 1, num_fpu_regs_in_use); } break; default: assert(false, "bad intrinsic"); break; } -#ifdef _LP64 - movsd(Address(rsp, 0), xmm0); - fld_d(Address(rsp, 0)); -#endif // _LP64 - addptr(rsp, sizeof(jdouble)); - if (num_fpu_regs_in_use > 1) { - // Must save return value to stack and then restore entire FPU stack - fstp_d(Address(rsp, incoming_argument_and_return_value_offset)); - for (int i = 0; i < num_fpu_regs_in_use; i++) { - fld_d(Address(rsp, 0)); - addptr(rsp, sizeof(jdouble)); - } - } - popa(); // Come here with result in F-TOS bind(done); diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.hpp b/hotspot/src/cpu/x86/vm/assembler_x86.hpp index 4a72da83b98..4ba26e5f1af 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -591,8 +591,9 @@ private: void vex_prefix(XMMRegister dst, XMMRegister nds, Address src, VexSimdPrefix pre, bool vector256 = false) { - vex_prefix(src, nds->encoding(), dst->encoding(), - pre, VEX_OPCODE_0F, false, vector256); + int dst_enc = dst->encoding(); + int nds_enc = nds->is_valid() ? nds->encoding() : 0; + vex_prefix(src, nds_enc, dst_enc, pre, VEX_OPCODE_0F, false, vector256); } int vex_prefix_and_encode(int dst_enc, int nds_enc, int src_enc, @@ -600,9 +601,12 @@ private: bool vex_w, bool vector256); int vex_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src, - VexSimdPrefix pre, bool vector256 = false) { - return vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), - pre, VEX_OPCODE_0F, false, vector256); + VexSimdPrefix pre, bool vector256 = false, + VexOpcode opc = VEX_OPCODE_0F) { + int src_enc = src->encoding(); + int dst_enc = dst->encoding(); + int nds_enc = nds->is_valid() ? nds->encoding() : 0; + return vex_prefix_and_encode(dst_enc, nds_enc, src_enc, pre, opc, false, vector256); } void simd_prefix(XMMRegister xreg, XMMRegister nds, Address adr, @@ -1148,6 +1152,9 @@ private: void fxsave(Address dst); void fyl2x(); + void frndint(); + void f2xm1(); + void fldl2e(); void hlt(); @@ -1258,6 +1265,7 @@ private: void movdl(XMMRegister dst, Register src); void movdl(Register dst, XMMRegister src); void movdl(XMMRegister dst, Address src); + void movdl(Address dst, XMMRegister src); // Move Double Quadword void movdq(XMMRegister dst, Register src); @@ -1271,6 +1279,14 @@ private: void movdqu(XMMRegister dst, Address src); void movdqu(XMMRegister dst, XMMRegister src); + // Move Unaligned 256bit Vector + void vmovdqu(Address dst, XMMRegister src); + void vmovdqu(XMMRegister dst, Address src); + void vmovdqu(XMMRegister dst, XMMRegister src); + + // Move lower 64bit to high 64bit in 128bit register + void movlhps(XMMRegister dst, XMMRegister src); + void movl(Register dst, int32_t imm32); void movl(Address dst, int32_t imm32); void movl(Register dst, Register src); @@ -1450,6 +1466,9 @@ private: void punpckldq(XMMRegister dst, XMMRegister src); void punpckldq(XMMRegister dst, Address src); + // Interleave Low Quadwords + void punpcklqdq(XMMRegister dst, XMMRegister src); + #ifndef _LP64 // no 32bit push/pop on amd64 void pushl(Address src); #endif @@ -1590,13 +1609,11 @@ private: void set_byte_if_not_zero(Register dst); // sets reg to 1 if not zero, otherwise 0 - // AVX 3-operands instructions (encoded with VEX prefix) + // AVX 3-operands scalar instructions (encoded with VEX prefix) void vaddsd(XMMRegister dst, XMMRegister nds, Address src); void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src); void vaddss(XMMRegister dst, XMMRegister nds, Address src); void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src); - void vandpd(XMMRegister dst, XMMRegister nds, Address src); - void vandps(XMMRegister dst, XMMRegister nds, Address src); void vdivsd(XMMRegister dst, XMMRegister nds, Address src); void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src); void vdivss(XMMRegister dst, XMMRegister nds, Address src); @@ -1609,9 +1626,24 @@ private: void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src); void vsubss(XMMRegister dst, XMMRegister nds, Address src); void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src); + + // AVX Vector instrucitons. + void vandpd(XMMRegister dst, XMMRegister nds, Address src); + void vandps(XMMRegister dst, XMMRegister nds, Address src); void vxorpd(XMMRegister dst, XMMRegister nds, Address src); void vxorps(XMMRegister dst, XMMRegister nds, Address src); + void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src); + void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src); + // AVX instruction which is used to clear upper 128 bits of YMM registers and + // to avoid transaction penalty between AVX and SSE states. There is no + // penalty if legacy SSE instructions are encoded using VEX prefix because + // they always clear upper 128 bits. It should be used before calling + // runtime code and native libraries. + void vzeroupper(); protected: // Next instructions require address alignment 16 bytes SSE mode. @@ -2387,7 +2419,30 @@ class MacroAssembler: public Assembler { void ldmxcsr(Address src) { Assembler::ldmxcsr(src); } void ldmxcsr(AddressLiteral src); + // compute pow(x,y) and exp(x) with x86 instructions. Don't cover + // all corner cases and may result in NaN and require fallback to a + // runtime call. + void fast_pow(); + void fast_exp(); + void increase_precision(); + void restore_precision(); + + // computes exp(x). Fallback to runtime call included. + void exp_with_fallback(int num_fpu_regs_in_use) { pow_or_exp(true, num_fpu_regs_in_use); } + // computes pow(x,y). Fallback to runtime call included. + void pow_with_fallback(int num_fpu_regs_in_use) { pow_or_exp(false, num_fpu_regs_in_use); } + private: + + // call runtime as a fallback for trig functions and pow/exp. + void fp_runtime_fallback(address runtime_entry, int nb_args, int num_fpu_regs_in_use); + + // computes 2^(Ylog2X); Ylog2X in ST(0) + void pow_exp_core_encoding(); + + // computes pow(x,y) or exp(x). Fallback to runtime call included. + void pow_or_exp(bool is_exp, int num_fpu_regs_in_use); + // these are private because users should be doing movflt/movdbl void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } @@ -2503,12 +2558,30 @@ public: void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); } void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src); + // AVX Vector instructions + + void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); } void vxorpd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorpd(dst, nds, src); } void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src); + void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); } void vxorps(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorps(dst, nds, src); } void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src); + void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + if (UseAVX > 1 || !vector256) // vpxor 256 bit is available only in AVX2 + Assembler::vpxor(dst, nds, src, vector256); + else + Assembler::vxorpd(dst, nds, src, vector256); + } + + // Move packed integer values from low 128 bit to hign 128 bit in 256 bit vector. + void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) { + if (UseAVX > 1) // vinserti128h is available only in AVX2 + Assembler::vinserti128h(dst, nds, src); + else + Assembler::vinsertf128h(dst, nds, src); + } // Data @@ -2561,6 +2634,13 @@ public: // to avoid hiding movb void movbyte(ArrayAddress dst, int src); + // Import other mov() methods from the parent class or else + // they will be hidden by the following overriding declaration. + using Assembler::movdl; + using Assembler::movq; + void movdl(XMMRegister dst, AddressLiteral src); + void movq(XMMRegister dst, AddressLiteral src); + // Can push value or effective address void pushptr(AddressLiteral src); diff --git a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp index a7cc42e4912..dedde0b6ef3 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -505,19 +505,28 @@ void LIR_Assembler::emit_string_compare(LIR_Opr arg0, LIR_Opr arg1, LIR_Opr dst, // Get addresses of first characters from both Strings __ load_heap_oop(rsi, Address(rax, java_lang_String::value_offset_in_bytes())); - __ movptr (rcx, Address(rax, java_lang_String::offset_offset_in_bytes())); - __ lea (rsi, Address(rsi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR))); - + if (java_lang_String::has_offset_field()) { + __ movptr (rcx, Address(rax, java_lang_String::offset_offset_in_bytes())); + __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes())); + __ lea (rsi, Address(rsi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR))); + } else { + __ movl (rax, Address(rsi, arrayOopDesc::length_offset_in_bytes())); + __ lea (rsi, Address(rsi, arrayOopDesc::base_offset_in_bytes(T_CHAR))); + } // rbx, may be NULL add_debug_info_for_null_check_here(info); __ load_heap_oop(rdi, Address(rbx, java_lang_String::value_offset_in_bytes())); - __ movptr (rcx, Address(rbx, java_lang_String::offset_offset_in_bytes())); - __ lea (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR))); + if (java_lang_String::has_offset_field()) { + __ movptr (rcx, Address(rbx, java_lang_String::offset_offset_in_bytes())); + __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes())); + __ lea (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR))); + } else { + __ movl (rbx, Address(rdi, arrayOopDesc::length_offset_in_bytes())); + __ lea (rdi, Address(rdi, arrayOopDesc::base_offset_in_bytes(T_CHAR))); + } // compute minimum length (in rax) and difference of lengths (on top of stack) - __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes())); - __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes())); __ mov (rcx, rbx); __ subptr(rbx, rax); // subtract lengths __ push (rbx); // result @@ -2437,6 +2446,12 @@ void LIR_Assembler::intrinsic_op(LIR_Code code, LIR_Opr value, LIR_Opr unused, L // Should consider not saving rbx, if not necessary __ trigfunc('t', op->as_Op2()->fpu_stack_size()); break; + case lir_exp : + __ exp_with_fallback(op->as_Op2()->fpu_stack_size()); + break; + case lir_pow : + __ pow_with_fallback(op->as_Op2()->fpu_stack_size()); + break; default : ShouldNotReachHere(); } } else { @@ -2658,7 +2673,7 @@ void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, #endif // _LP64 } } else { - ShouldNotReachHere(); + fatal(err_msg("unexpected type: %s", basictype_to_str(c->type()))); } // cpu register - address } else if (opr2->is_address()) { diff --git a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp index 1ff91cafb90..deca1a0edcb 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp @@ -718,35 +718,6 @@ void LIRGenerator::do_CompareOp(CompareOp* x) { } -void LIRGenerator::do_AttemptUpdate(Intrinsic* x) { - assert(x->number_of_arguments() == 3, "wrong type"); - LIRItem obj (x->argument_at(0), this); // AtomicLong object - LIRItem cmp_value (x->argument_at(1), this); // value to compare with field - LIRItem new_value (x->argument_at(2), this); // replace field with new_value if it matches cmp_value - - // compare value must be in rdx,eax (hi,lo); may be destroyed by cmpxchg8 instruction - cmp_value.load_item_force(FrameMap::long0_opr); - - // new value must be in rcx,ebx (hi,lo) - new_value.load_item_force(FrameMap::long1_opr); - - // object pointer register is overwritten with field address - obj.load_item(); - - // generate compare-and-swap; produces zero condition if swap occurs - int value_offset = sun_misc_AtomicLongCSImpl::value_offset(); - LIR_Opr addr = new_pointer_register(); - __ leal(LIR_OprFact::address(new LIR_Address(obj.result(), value_offset, T_LONG)), addr); - LIR_Opr t1 = LIR_OprFact::illegalOpr; // no temp needed - LIR_Opr t2 = LIR_OprFact::illegalOpr; // no temp needed - __ cas_long(addr, cmp_value.result(), new_value.result(), t1, t2); - - // generate conditional move of boolean result - LIR_Opr result = rlock_result(x); - __ cmove(lir_cond_equal, LIR_OprFact::intConst(1), LIR_OprFact::intConst(0), result, T_LONG); -} - - void LIRGenerator::do_CompareAndSwap(Intrinsic* x, ValueType* type) { assert(x->number_of_arguments() == 4, "wrong type"); LIRItem obj (x->argument_at(0), this); // object @@ -823,7 +794,7 @@ void LIRGenerator::do_CompareAndSwap(Intrinsic* x, ValueType* type) { void LIRGenerator::do_MathIntrinsic(Intrinsic* x) { - assert(x->number_of_arguments() == 1, "wrong type"); + assert(x->number_of_arguments() == 1 || (x->number_of_arguments() == 2 && x->id() == vmIntrinsics::_dpow), "wrong type"); LIRItem value(x->argument_at(0), this); bool use_fpu = false; @@ -834,6 +805,8 @@ void LIRGenerator::do_MathIntrinsic(Intrinsic* x) { case vmIntrinsics::_dtan: case vmIntrinsics::_dlog: case vmIntrinsics::_dlog10: + case vmIntrinsics::_dexp: + case vmIntrinsics::_dpow: use_fpu = true; } } else { @@ -843,20 +816,37 @@ void LIRGenerator::do_MathIntrinsic(Intrinsic* x) { value.load_item(); LIR_Opr calc_input = value.result(); + LIR_Opr calc_input2 = NULL; + if (x->id() == vmIntrinsics::_dpow) { + LIRItem extra_arg(x->argument_at(1), this); + if (UseSSE < 2) { + extra_arg.set_destroys_register(); + } + extra_arg.load_item(); + calc_input2 = extra_arg.result(); + } LIR_Opr calc_result = rlock_result(x); - // sin and cos need two free fpu stack slots, so register two temporary operands + // sin, cos, pow and exp need two free fpu stack slots, so register + // two temporary operands LIR_Opr tmp1 = FrameMap::caller_save_fpu_reg_at(0); LIR_Opr tmp2 = FrameMap::caller_save_fpu_reg_at(1); if (use_fpu) { LIR_Opr tmp = FrameMap::fpu0_double_opr; + int tmp_start = 1; + if (calc_input2 != NULL) { + __ move(calc_input2, tmp); + tmp_start = 2; + calc_input2 = tmp; + } __ move(calc_input, tmp); calc_input = tmp; calc_result = tmp; - tmp1 = FrameMap::caller_save_fpu_reg_at(1); - tmp2 = FrameMap::caller_save_fpu_reg_at(2); + + tmp1 = FrameMap::caller_save_fpu_reg_at(tmp_start); + tmp2 = FrameMap::caller_save_fpu_reg_at(tmp_start + 1); } switch(x->id()) { @@ -867,6 +857,8 @@ void LIRGenerator::do_MathIntrinsic(Intrinsic* x) { case vmIntrinsics::_dtan: __ tan (calc_input, calc_result, tmp1, tmp2); break; case vmIntrinsics::_dlog: __ log (calc_input, calc_result, tmp1); break; case vmIntrinsics::_dlog10: __ log10(calc_input, calc_result, tmp1); break; + case vmIntrinsics::_dexp: __ exp (calc_input, calc_result, tmp1, tmp2, FrameMap::rax_opr, FrameMap::rcx_opr, FrameMap::rdx_opr); break; + case vmIntrinsics::_dpow: __ pow (calc_input, calc_input2, calc_result, tmp1, tmp2, FrameMap::rax_opr, FrameMap::rcx_opr, FrameMap::rdx_opr); break; default: ShouldNotReachHere(); } @@ -1095,10 +1087,10 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) { if (!x->klass()->is_loaded() || PatchALot) { patching_info = state_for(x, x->state_before()); - // cannot re-use same xhandlers for multiple CodeEmitInfos, so - // clone all handlers. This is handled transparently in other - // places by the CodeEmitInfo cloning logic but is handled - // specially here because a stub isn't being used. + // Cannot re-use same xhandlers for multiple CodeEmitInfos, so + // clone all handlers (NOTE: Usually this is handled transparently + // by the CodeEmitInfo cloning logic in CodeStub constructors but + // is done explicitly here because a stub isn't being used). x->set_exception_handlers(new XHandlers(x->exception_handlers())); } CodeEmitInfo* info = state_for(x, x->state()); diff --git a/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp index 0c19851b31f..77859b9d6e1 100644 --- a/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp @@ -690,8 +690,8 @@ void FpuStackAllocator::handle_op2(LIR_Op2* op2) { case lir_mul_strictfp: case lir_div_strictfp: { - assert(op2->tmp_opr()->is_fpu_register(), "strict operations need temporary fpu stack slot"); - insert_free_if_dead(op2->tmp_opr()); + assert(op2->tmp1_opr()->is_fpu_register(), "strict operations need temporary fpu stack slot"); + insert_free_if_dead(op2->tmp1_opr()); assert(sim()->stack_size() <= 7, "at least one stack slot must be free"); // fall-through: continue with the normal handling of lir_mul and lir_div } @@ -787,16 +787,17 @@ void FpuStackAllocator::handle_op2(LIR_Op2* op2) { case lir_log: case lir_log10: { - // log and log10 needs one temporary fpu stack slot, so there is ontemporary - // registers stored in temp of the operation. - // the stack allocator must guarantee that the stack slots are really free, - // otherwise there might be a stack overflow. + // log and log10 need one temporary fpu stack slot, so + // there is one temporary registers stored in temp of the + // operation. the stack allocator must guarantee that the stack + // slots are really free, otherwise there might be a stack + // overflow. assert(right->is_illegal(), "must be"); assert(left->is_fpu_register(), "must be"); assert(res->is_fpu_register(), "must be"); - assert(op2->tmp_opr()->is_fpu_register(), "must be"); + assert(op2->tmp1_opr()->is_fpu_register(), "must be"); - insert_free_if_dead(op2->tmp_opr()); + insert_free_if_dead(op2->tmp1_opr()); insert_free_if_dead(res, left); insert_exchange(left); do_rename(left, res); @@ -812,8 +813,9 @@ void FpuStackAllocator::handle_op2(LIR_Op2* op2) { case lir_tan: case lir_sin: - case lir_cos: { - // sin and cos need two temporary fpu stack slots, so there are two temporary + case lir_cos: + case lir_exp: { + // sin, cos and exp need two temporary fpu stack slots, so there are two temporary // registers (stored in right and temp of the operation). // the stack allocator must guarantee that the stack slots are really free, // otherwise there might be a stack overflow. @@ -821,11 +823,11 @@ void FpuStackAllocator::handle_op2(LIR_Op2* op2) { assert(res->is_fpu_register(), "must be"); // assert(left->is_last_use(), "old value gets destroyed"); assert(right->is_fpu_register(), "right is used as the first temporary register"); - assert(op2->tmp_opr()->is_fpu_register(), "temp is used as the second temporary register"); - assert(fpu_num(left) != fpu_num(right) && fpu_num(right) != fpu_num(op2->tmp_opr()) && fpu_num(op2->tmp_opr()) != fpu_num(res), "need distinct temp registers"); + assert(op2->tmp1_opr()->is_fpu_register(), "temp is used as the second temporary register"); + assert(fpu_num(left) != fpu_num(right) && fpu_num(right) != fpu_num(op2->tmp1_opr()) && fpu_num(op2->tmp1_opr()) != fpu_num(res), "need distinct temp registers"); insert_free_if_dead(right); - insert_free_if_dead(op2->tmp_opr()); + insert_free_if_dead(op2->tmp1_opr()); insert_free_if_dead(res, left); insert_exchange(left); @@ -839,6 +841,53 @@ void FpuStackAllocator::handle_op2(LIR_Op2* op2) { break; } + case lir_pow: { + // pow needs two temporary fpu stack slots, so there are two temporary + // registers (stored in tmp1 and tmp2 of the operation). + // the stack allocator must guarantee that the stack slots are really free, + // otherwise there might be a stack overflow. + assert(left->is_fpu_register(), "must be"); + assert(right->is_fpu_register(), "must be"); + assert(res->is_fpu_register(), "must be"); + + assert(op2->tmp1_opr()->is_fpu_register(), "tmp1 is the first temporary register"); + assert(op2->tmp2_opr()->is_fpu_register(), "tmp2 is the second temporary register"); + assert(fpu_num(left) != fpu_num(right) && fpu_num(left) != fpu_num(op2->tmp1_opr()) && fpu_num(left) != fpu_num(op2->tmp2_opr()) && fpu_num(left) != fpu_num(res), "need distinct temp registers"); + assert(fpu_num(right) != fpu_num(op2->tmp1_opr()) && fpu_num(right) != fpu_num(op2->tmp2_opr()) && fpu_num(right) != fpu_num(res), "need distinct temp registers"); + assert(fpu_num(op2->tmp1_opr()) != fpu_num(op2->tmp2_opr()) && fpu_num(op2->tmp1_opr()) != fpu_num(res), "need distinct temp registers"); + assert(fpu_num(op2->tmp2_opr()) != fpu_num(res), "need distinct temp registers"); + + insert_free_if_dead(op2->tmp1_opr()); + insert_free_if_dead(op2->tmp2_opr()); + + // Must bring both operands to top of stack with following operand ordering: + // * fpu stack before pow: ... right left + // * fpu stack after pow: ... left + + insert_free_if_dead(res, right); + + if (tos_offset(right) != 1) { + insert_exchange(right); + insert_exchange(1); + } + insert_exchange(left); + assert(tos_offset(right) == 1, "check"); + assert(tos_offset(left) == 0, "check"); + + new_left = to_fpu_stack_top(left); + new_right = to_fpu_stack(right); + + op2->set_fpu_stack_size(sim()->stack_size()); + assert(sim()->stack_size() <= 6, "at least two stack slots must be free"); + + sim()->pop(); + + do_rename(right, res); + + new_res = to_fpu_stack_top(res); + break; + } + default: { assert(false, "missed a fpu-operation"); } diff --git a/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp b/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp index b9a5c22934f..022af0452d3 100644 --- a/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp +++ b/hotspot/src/cpu/x86/vm/cppInterpreter_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -481,7 +481,8 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register __ xorptr(rdx, rdx); __ movptr(STATE(_oop_temp), rdx); // state->_oop_temp = NULL (only really needed for native) __ movptr(STATE(_mdx), rdx); // state->_mdx = NULL - __ movptr(rdx, Address(rbx, methodOopDesc::constants_offset())); + __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rdx, Address(rdx, constMethodOopDesc::constants_offset())); __ movptr(rdx, Address(rdx, constantPoolOopDesc::cache_offset_in_bytes())); __ movptr(STATE(_constants), rdx); // state->_constants = constants() @@ -516,7 +517,8 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register __ testl(rax, JVM_ACC_STATIC); __ movptr(rax, Address(locals, 0)); // get receiver (assume this is frequent case) __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::constants_offset())); + __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); __ movptr(rax, Address(rax, constantPoolOopDesc::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); __ bind(done); @@ -769,7 +771,8 @@ void InterpreterGenerator::lock_method(void) { __ testl(rax, JVM_ACC_STATIC); __ movptr(rax, Address(rdi, 0)); // get receiver (assume this is frequent case) __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::constants_offset())); + __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); __ movptr(rax, Address(rax, constantPoolOopDesc::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); __ bind(done); @@ -821,9 +824,9 @@ address InterpreterGenerator::generate_accessor_entry(void) { __ testptr(rax, rax); __ jcc(Assembler::zero, slow_path); - __ movptr(rdi, Address(rbx, methodOopDesc::constants_offset())); // read first instruction word and extract bytecode @ 1 and index @ 2 __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rdi, Address(rdx, constMethodOopDesc::constants_offset())); __ movl(rdx, Address(rdx, constMethodOopDesc::codes_offset())); // Shift codes right to get the index on the right. // The bytecode fetched looks like <0xb4><0x2a> @@ -1185,7 +1188,8 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { __ testl(t, JVM_ACC_STATIC); __ jcc(Assembler::zero, L); // get mirror - __ movptr(t, Address(method, methodOopDesc:: constants_offset())); + __ movptr(t, Address(method, methodOopDesc:: const_offset())); + __ movptr(t, Address(t, constMethodOopDesc::constants_offset())); __ movptr(t, Address(t, constantPoolOopDesc::pool_holder_offset_in_bytes())); __ movptr(t, Address(t, mirror_offset)); // copy mirror into activation object diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp index 97f1da41f33..458325765c9 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,7 +77,8 @@ class InterpreterMacroAssembler: public MacroAssembler { // Helpers for runtime call arguments/results void get_method(Register reg) { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); } - void get_constant_pool(Register reg) { get_method(reg); movptr(reg, Address(reg, methodOopDesc::constants_offset())); } + void get_const(Register reg) { get_method(reg); movptr(reg, Address(reg, methodOopDesc::const_offset())); } + void get_constant_pool(Register reg) { get_const(reg); movptr(reg, Address(reg, constMethodOopDesc::constants_offset())); } void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); } void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes())); } diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp index cb17e01fa4d..8486c348ba6 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -84,9 +84,14 @@ class InterpreterMacroAssembler: public MacroAssembler { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); } - void get_constant_pool(Register reg) { + void get_const(Register reg) { get_method(reg); - movptr(reg, Address(reg, methodOopDesc::constants_offset())); + movptr(reg, Address(reg, methodOopDesc::const_offset())); + } + + void get_constant_pool(Register reg) { + get_const(reg); + movptr(reg, Address(reg, constMethodOopDesc::constants_offset())); } void get_constant_pool_cache(Register reg) { diff --git a/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp b/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp index 43a5a18a5b6..8072354e9a1 100644 --- a/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp @@ -181,6 +181,19 @@ address InterpreterGenerator::generate_math_entry(AbstractInterpreter::MethodKin __ push_fTOS(); __ pop_fTOS(); break; + case Interpreter::java_lang_math_pow: + __ fld_d(Address(rsp, 3*wordSize)); // second argument + __ pow_with_fallback(0); + // Store to stack to convert 80bit precision back to 64bits + __ push_fTOS(); + __ pop_fTOS(); + break; + case Interpreter::java_lang_math_exp: + __ exp_with_fallback(0); + // Store to stack to convert 80bit precision back to 64bits + __ push_fTOS(); + __ pop_fTOS(); + break; default : ShouldNotReachHere(); } diff --git a/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp b/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp index 1c124c2f0b7..76143737858 100644 --- a/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp @@ -271,6 +271,14 @@ address InterpreterGenerator::generate_math_entry(AbstractInterpreter::MethodKin case Interpreter::java_lang_math_log10: __ flog10(); break; + case Interpreter::java_lang_math_pow: + __ fld_d(Address(rsp, 3*wordSize)); // second argument (one + // empty stack slot) + __ pow_with_fallback(0); + break; + case Interpreter::java_lang_math_exp: + __ exp_with_fallback(0); + break; default : ShouldNotReachHere(); } diff --git a/hotspot/src/cpu/x86/vm/register_x86.cpp b/hotspot/src/cpu/x86/vm/register_x86.cpp index a6301eafe4d..a3763a3498f 100644 --- a/hotspot/src/cpu/x86/vm/register_x86.cpp +++ b/hotspot/src/cpu/x86/vm/register_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ const int ConcreteRegisterImpl::max_gpr = RegisterImpl::number_of_registers << 1 const int ConcreteRegisterImpl::max_fpr = ConcreteRegisterImpl::max_gpr + 2 * FloatRegisterImpl::number_of_registers; const int ConcreteRegisterImpl::max_xmm = ConcreteRegisterImpl::max_fpr + - 2 * XMMRegisterImpl::number_of_registers; + 8 * XMMRegisterImpl::number_of_registers; const char* RegisterImpl::name() const { const char* names[number_of_registers] = { #ifndef AMD64 diff --git a/hotspot/src/cpu/x86/vm/register_x86.hpp b/hotspot/src/cpu/x86/vm/register_x86.hpp index 2f4cd0dcac6..680dd900a48 100644 --- a/hotspot/src/cpu/x86/vm/register_x86.hpp +++ b/hotspot/src/cpu/x86/vm/register_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -158,7 +158,7 @@ class XMMRegisterImpl: public AbstractRegisterImpl { XMMRegister successor() const { return as_XMMRegister(encoding() + 1); } // accessors - int encoding() const { assert(is_valid(), "invalid register"); return (intptr_t)this; } + int encoding() const { assert(is_valid(), err_msg("invalid register (%d)", (int)(intptr_t)this )); return (intptr_t)this; } bool is_valid() const { return 0 <= (intptr_t)this && (intptr_t)this < number_of_registers; } const char* name() const; }; @@ -216,7 +216,7 @@ class ConcreteRegisterImpl : public AbstractRegisterImpl { RegisterImpl::number_of_registers + // "H" half of a 64bit register #endif // AMD64 2 * FloatRegisterImpl::number_of_registers + - 2 * XMMRegisterImpl::number_of_registers + + 8 * XMMRegisterImpl::number_of_registers + 1 // eflags }; diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp index 4d4e66f600b..43d51bd38c4 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp @@ -2136,11 +2136,23 @@ class StubGenerator: public StubCodeGenerator { __ trigfunc('t'); __ ret(0); } + { + StubCodeMark mark(this, "StubRoutines", "exp"); + StubRoutines::_intrinsic_exp = (double (*)(double)) __ pc(); - // The intrinsic version of these seem to return the same value as - // the strict version. - StubRoutines::_intrinsic_exp = SharedRuntime::dexp; - StubRoutines::_intrinsic_pow = SharedRuntime::dpow; + __ fld_d(Address(rsp, 4)); + __ exp_with_fallback(0); + __ ret(0); + } + { + StubCodeMark mark(this, "StubRoutines", "pow"); + StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc(); + + __ fld_d(Address(rsp, 12)); + __ fld_d(Address(rsp, 4)); + __ pow_with_fallback(0); + __ ret(0); + } } public: diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp index 9d9472200e3..30382b5ab5f 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp @@ -2928,11 +2928,34 @@ class StubGenerator: public StubCodeGenerator { __ addq(rsp, 8); __ ret(0); } + { + StubCodeMark mark(this, "StubRoutines", "exp"); + StubRoutines::_intrinsic_exp = (double (*)(double)) __ pc(); - // The intrinsic version of these seem to return the same value as - // the strict version. - StubRoutines::_intrinsic_exp = SharedRuntime::dexp; - StubRoutines::_intrinsic_pow = SharedRuntime::dpow; + __ subq(rsp, 8); + __ movdbl(Address(rsp, 0), xmm0); + __ fld_d(Address(rsp, 0)); + __ exp_with_fallback(0); + __ fstp_d(Address(rsp, 0)); + __ movdbl(xmm0, Address(rsp, 0)); + __ addq(rsp, 8); + __ ret(0); + } + { + StubCodeMark mark(this, "StubRoutines", "pow"); + StubRoutines::_intrinsic_pow = (double (*)(double,double)) __ pc(); + + __ subq(rsp, 8); + __ movdbl(Address(rsp, 0), xmm1); + __ fld_d(Address(rsp, 0)); + __ movdbl(Address(rsp, 0), xmm0); + __ fld_d(Address(rsp, 0)); + __ pow_with_fallback(0); + __ fstp_d(Address(rsp, 0)); + __ movdbl(xmm0, Address(rsp, 0)); + __ addq(rsp, 8); + __ ret(0); + } } #undef __ diff --git a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp index 29533832ef6..da0f66160e1 100644 --- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -566,7 +566,8 @@ void InterpreterGenerator::lock_method(void) { __ testl(rax, JVM_ACC_STATIC); __ movptr(rax, Address(rdi, Interpreter::local_offset_in_bytes(0))); // get receiver (assume this is frequent case) __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::constants_offset())); + __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); __ movptr(rax, Address(rax, constantPoolOopDesc::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); __ bind(done); @@ -606,7 +607,8 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) { __ push(0); } - __ movptr(rdx, Address(rbx, methodOopDesc::constants_offset())); + __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rdx, Address(rdx, constMethodOopDesc::constants_offset())); __ movptr(rdx, Address(rdx, constantPoolOopDesc::cache_offset_in_bytes())); __ push(rdx); // set constant pool cache __ push(rdi); // set locals pointer @@ -661,9 +663,9 @@ address InterpreterGenerator::generate_accessor_entry(void) { __ testptr(rax, rax); __ jcc(Assembler::zero, slow_path); - __ movptr(rdi, Address(rbx, methodOopDesc::constants_offset())); // read first instruction word and extract bytecode @ 1 and index @ 2 __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rdi, Address(rdx, constMethodOopDesc::constants_offset())); __ movl(rdx, Address(rdx, constMethodOopDesc::codes_offset())); // Shift codes right to get the index on the right. // The bytecode fetched looks like <0xb4><0x2a> @@ -1026,7 +1028,8 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { __ testl(t, JVM_ACC_STATIC); __ jcc(Assembler::zero, L); // get mirror - __ movptr(t, Address(method, methodOopDesc:: constants_offset())); + __ movptr(t, Address(method, methodOopDesc:: const_offset())); + __ movptr(t, Address(t, constMethodOopDesc::constants_offset())); __ movptr(t, Address(t, constantPoolOopDesc::pool_holder_offset_in_bytes())); __ movptr(t, Address(t, mirror_offset)); // copy mirror into activation frame @@ -1518,7 +1521,9 @@ address AbstractInterpreterGenerator::generate_method_entry(AbstractInterpreter: case Interpreter::java_lang_math_abs : // fall thru case Interpreter::java_lang_math_log : // fall thru case Interpreter::java_lang_math_log10 : // fall thru - case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; case Interpreter::java_lang_ref_reference_get : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; default : ShouldNotReachHere(); break; @@ -1540,7 +1545,9 @@ bool AbstractInterpreter::can_be_compiled(methodHandle m) { case Interpreter::java_lang_math_abs : // fall thru case Interpreter::java_lang_math_log : // fall thru case Interpreter::java_lang_math_log10 : // fall thru - case Interpreter::java_lang_math_sqrt : + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : return false; default: return true; diff --git a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp index 110d8ebdf3c..bb57b742eb3 100644 --- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -522,7 +522,8 @@ void InterpreterGenerator::lock_method(void) { // get receiver (assume this is frequent case) __ movptr(rax, Address(r14, Interpreter::local_offset_in_bytes(0))); __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::constants_offset())); + __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); __ movptr(rax, Address(rax, constantPoolOopDesc::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); @@ -579,7 +580,8 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) { __ push(0); } - __ movptr(rdx, Address(rbx, methodOopDesc::constants_offset())); + __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rdx, Address(rdx, constMethodOopDesc::constants_offset())); __ movptr(rdx, Address(rdx, constantPoolOopDesc::cache_offset_in_bytes())); __ push(rdx); // set constant pool cache __ push(r14); // set locals pointer @@ -629,9 +631,9 @@ address InterpreterGenerator::generate_accessor_entry(void) { __ testptr(rax, rax); __ jcc(Assembler::zero, slow_path); - __ movptr(rdi, Address(rbx, methodOopDesc::constants_offset())); // read first instruction word and extract bytecode @ 1 and index @ 2 __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); + __ movptr(rdi, Address(rdx, constMethodOopDesc::constants_offset())); __ movl(rdx, Address(rdx, constMethodOopDesc::codes_offset())); // Shift codes right to get the index on the right. // The bytecode fetched looks like <0xb4><0x2a> @@ -1020,7 +1022,8 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) { __ testl(t, JVM_ACC_STATIC); __ jcc(Assembler::zero, L); // get mirror - __ movptr(t, Address(method, methodOopDesc::constants_offset())); + __ movptr(t, Address(method, methodOopDesc::const_offset())); + __ movptr(t, Address(t, constMethodOopDesc::constants_offset())); __ movptr(t, Address(t, constantPoolOopDesc::pool_holder_offset_in_bytes())); __ movptr(t, Address(t, mirror_offset)); // copy mirror into activation frame @@ -1534,7 +1537,9 @@ address AbstractInterpreterGenerator::generate_method_entry( case Interpreter::java_lang_math_abs : // fall thru case Interpreter::java_lang_math_log : // fall thru case Interpreter::java_lang_math_log10 : // fall thru - case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind); break; + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind); break; case Interpreter::java_lang_ref_reference_get : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; default : ShouldNotReachHere(); break; @@ -1558,7 +1563,9 @@ bool AbstractInterpreter::can_be_compiled(methodHandle m) { case Interpreter::java_lang_math_abs : // fall thru case Interpreter::java_lang_math_log : // fall thru case Interpreter::java_lang_math_log10 : // fall thru - case Interpreter::java_lang_math_sqrt : + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : return false; default: return true; diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp index 121be7a2ba7..12f3f258415 100644 --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp @@ -467,6 +467,32 @@ void VM_Version::get_processor_features() { if (!supports_avx ()) // Drop to 0 if no AVX support UseAVX = 0; +#ifdef COMPILER2 + if (UseFPUForSpilling) { + if (UseSSE < 2) { + // Only supported with SSE2+ + FLAG_SET_DEFAULT(UseFPUForSpilling, false); + } + } + if (MaxVectorSize > 0) { + if (!is_power_of_2(MaxVectorSize)) { + warning("MaxVectorSize must be a power of 2"); + FLAG_SET_DEFAULT(MaxVectorSize, 32); + } + if (MaxVectorSize > 32) { + FLAG_SET_DEFAULT(MaxVectorSize, 32); + } + if (MaxVectorSize > 16 && UseAVX == 0) { + // Only supported with AVX+ + FLAG_SET_DEFAULT(MaxVectorSize, 16); + } + if (UseSSE < 2) { + // Only supported with SSE2+ + FLAG_SET_DEFAULT(MaxVectorSize, 0); + } + } +#endif + // On new cpus instructions which update whole XMM register should be used // to prevent partial register stall due to dependencies on high half. // @@ -536,7 +562,7 @@ void VM_Version::get_processor_features() { AllocatePrefetchInstr = 3; } // On family 15h processors use XMM and UnalignedLoadStores for Array Copy - if( FLAG_IS_DEFAULT(UseXMMForArrayCopy) ) { + if( supports_sse2() && FLAG_IS_DEFAULT(UseXMMForArrayCopy) ) { UseXMMForArrayCopy = true; } if( FLAG_IS_DEFAULT(UseUnalignedLoadStores) && UseXMMForArrayCopy ) { @@ -544,6 +570,12 @@ void VM_Version::get_processor_features() { } } +#ifdef COMPILER2 + if (MaxVectorSize > 16) { + // Limit vectors size to 16 bytes on current AMD cpus. + FLAG_SET_DEFAULT(MaxVectorSize, 16); + } +#endif // COMPILER2 } if( is_intel() ) { // Intel cpus specific settings @@ -606,15 +638,6 @@ void VM_Version::get_processor_features() { FLAG_SET_DEFAULT(UsePopCountInstruction, false); } -#ifdef COMPILER2 - if (UseFPUForSpilling) { - if (UseSSE < 2) { - // Only supported with SSE2+ - FLAG_SET_DEFAULT(UseFPUForSpilling, false); - } - } -#endif - assert(0 <= ReadPrefetchInstr && ReadPrefetchInstr <= 3, "invalid value"); assert(0 <= AllocatePrefetchInstr && AllocatePrefetchInstr <= 3, "invalid value"); diff --git a/hotspot/src/cpu/x86/vm/vmreg_x86.cpp b/hotspot/src/cpu/x86/vm/vmreg_x86.cpp index a0bfe6e69c1..89959771ea2 100644 --- a/hotspot/src/cpu/x86/vm/vmreg_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vmreg_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,8 +48,9 @@ void VMRegImpl::set_regName() { XMMRegister xreg = ::as_XMMRegister(0); for ( ; i < ConcreteRegisterImpl::max_xmm ; ) { - regName[i++] = xreg->name(); - regName[i++] = xreg->name(); + for (int j = 0 ; j < 8 ; j++) { + regName[i++] = xreg->name(); + } xreg = xreg->successor(); } for ( ; i < ConcreteRegisterImpl::number_of_registers ; i ++ ) { diff --git a/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp b/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp index 88201bd3d83..0608d3edbff 100644 --- a/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp +++ b/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ inline VMReg FloatRegisterImpl::as_VMReg() { } inline VMReg XMMRegisterImpl::as_VMReg() { - return VMRegImpl::as_VMReg((encoding() << 1) + ConcreteRegisterImpl::max_fpr); + return VMRegImpl::as_VMReg((encoding() << 3) + ConcreteRegisterImpl::max_fpr); } @@ -75,7 +75,7 @@ inline FloatRegister VMRegImpl::as_FloatRegister() { inline XMMRegister VMRegImpl::as_XMMRegister() { assert( is_XMMRegister() && is_even(value()), "must be" ); // Yuk - return ::as_XMMRegister((value() - ConcreteRegisterImpl::max_fpr) >> 1); + return ::as_XMMRegister((value() - ConcreteRegisterImpl::max_fpr) >> 3); } inline bool VMRegImpl::is_concrete() { diff --git a/hotspot/src/cpu/x86/vm/x86.ad b/hotspot/src/cpu/x86/vm/x86.ad index 6bd91287fc0..de512c37be7 100644 --- a/hotspot/src/cpu/x86/vm/x86.ad +++ b/hotspot/src/cpu/x86/vm/x86.ad @@ -24,6 +24,456 @@ // X86 Common Architecture Description File +//----------REGISTER DEFINITION BLOCK------------------------------------------ +// This information is used by the matcher and the register allocator to +// describe individual registers and classes of registers within the target +// archtecture. + +register %{ +//----------Architecture Description Register Definitions---------------------- +// General Registers +// "reg_def" name ( register save type, C convention save type, +// ideal register type, encoding ); +// Register Save Types: +// +// NS = No-Save: The register allocator assumes that these registers +// can be used without saving upon entry to the method, & +// that they do not need to be saved at call sites. +// +// SOC = Save-On-Call: The register allocator assumes that these registers +// can be used without saving upon entry to the method, +// but that they must be saved at call sites. +// +// SOE = Save-On-Entry: The register allocator assumes that these registers +// must be saved before using them upon entry to the +// method, but they do not need to be saved at call +// sites. +// +// AS = Always-Save: The register allocator assumes that these registers +// must be saved before using them upon entry to the +// method, & that they must be saved at call sites. +// +// Ideal Register Type is used to determine how to save & restore a +// register. Op_RegI will get spilled with LoadI/StoreI, Op_RegP will get +// spilled with LoadP/StoreP. If the register supports both, use Op_RegI. +// +// The encoding number is the actual bit-pattern placed into the opcodes. + +// XMM registers. 256-bit registers or 8 words each, labeled (a)-h. +// Word a in each register holds a Float, words ab hold a Double. +// The whole registers are used in SSE4.2 version intrinsics, +// array copy stubs and superword operations (see UseSSE42Intrinsics, +// UseXMMForArrayCopy and UseSuperword flags). +// XMM8-XMM15 must be encoded with REX (VEX for UseAVX). +// Linux ABI: No register preserved across function calls +// XMM0-XMM7 might hold parameters +// Windows ABI: XMM6-XMM15 preserved across function calls +// XMM0-XMM3 might hold parameters + +reg_def XMM0 ( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); +reg_def XMM0b( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(1)); +reg_def XMM0c( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(2)); +reg_def XMM0d( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(3)); +reg_def XMM0e( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(4)); +reg_def XMM0f( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(5)); +reg_def XMM0g( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(6)); +reg_def XMM0h( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(7)); + +reg_def XMM1 ( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); +reg_def XMM1b( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(1)); +reg_def XMM1c( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(2)); +reg_def XMM1d( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(3)); +reg_def XMM1e( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(4)); +reg_def XMM1f( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(5)); +reg_def XMM1g( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(6)); +reg_def XMM1h( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(7)); + +reg_def XMM2 ( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); +reg_def XMM2b( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(1)); +reg_def XMM2c( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(2)); +reg_def XMM2d( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(3)); +reg_def XMM2e( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(4)); +reg_def XMM2f( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(5)); +reg_def XMM2g( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(6)); +reg_def XMM2h( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(7)); + +reg_def XMM3 ( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); +reg_def XMM3b( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(1)); +reg_def XMM3c( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(2)); +reg_def XMM3d( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(3)); +reg_def XMM3e( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(4)); +reg_def XMM3f( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(5)); +reg_def XMM3g( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(6)); +reg_def XMM3h( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(7)); + +reg_def XMM4 ( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); +reg_def XMM4b( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(1)); +reg_def XMM4c( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(2)); +reg_def XMM4d( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(3)); +reg_def XMM4e( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(4)); +reg_def XMM4f( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(5)); +reg_def XMM4g( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(6)); +reg_def XMM4h( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(7)); + +reg_def XMM5 ( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); +reg_def XMM5b( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(1)); +reg_def XMM5c( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(2)); +reg_def XMM5d( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(3)); +reg_def XMM5e( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(4)); +reg_def XMM5f( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(5)); +reg_def XMM5g( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(6)); +reg_def XMM5h( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(7)); + +#ifdef _WIN64 + +reg_def XMM6 ( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()); +reg_def XMM6b( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(1)); +reg_def XMM6c( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(2)); +reg_def XMM6d( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(3)); +reg_def XMM6e( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(4)); +reg_def XMM6f( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(5)); +reg_def XMM6g( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(6)); +reg_def XMM6h( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(7)); + +reg_def XMM7 ( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()); +reg_def XMM7b( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(1)); +reg_def XMM7c( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(2)); +reg_def XMM7d( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(3)); +reg_def XMM7e( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(4)); +reg_def XMM7f( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(5)); +reg_def XMM7g( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(6)); +reg_def XMM7h( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(7)); + +reg_def XMM8 ( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()); +reg_def XMM8b( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(1)); +reg_def XMM8c( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(2)); +reg_def XMM8d( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(3)); +reg_def XMM8e( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(4)); +reg_def XMM8f( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(5)); +reg_def XMM8g( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(6)); +reg_def XMM8h( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(7)); + +reg_def XMM9 ( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()); +reg_def XMM9b( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(1)); +reg_def XMM9c( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(2)); +reg_def XMM9d( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(3)); +reg_def XMM9e( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(4)); +reg_def XMM9f( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(5)); +reg_def XMM9g( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(6)); +reg_def XMM9h( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(7)); + +reg_def XMM10 ( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()); +reg_def XMM10b( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(1)); +reg_def XMM10c( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(2)); +reg_def XMM10d( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(3)); +reg_def XMM10e( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(4)); +reg_def XMM10f( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(5)); +reg_def XMM10g( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(6)); +reg_def XMM10h( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(7)); + +reg_def XMM11 ( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()); +reg_def XMM11b( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(1)); +reg_def XMM11c( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(2)); +reg_def XMM11d( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(3)); +reg_def XMM11e( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(4)); +reg_def XMM11f( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(5)); +reg_def XMM11g( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(6)); +reg_def XMM11h( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(7)); + +reg_def XMM12 ( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()); +reg_def XMM12b( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(1)); +reg_def XMM12c( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(2)); +reg_def XMM12d( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(3)); +reg_def XMM12e( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(4)); +reg_def XMM12f( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(5)); +reg_def XMM12g( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(6)); +reg_def XMM12h( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(7)); + +reg_def XMM13 ( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()); +reg_def XMM13b( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(1)); +reg_def XMM13c( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(2)); +reg_def XMM13d( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(3)); +reg_def XMM13e( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(4)); +reg_def XMM13f( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(5)); +reg_def XMM13g( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(6)); +reg_def XMM13h( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(7)); + +reg_def XMM14 ( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()); +reg_def XMM14b( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(1)); +reg_def XMM14c( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(2)); +reg_def XMM14d( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(3)); +reg_def XMM14e( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(4)); +reg_def XMM14f( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(5)); +reg_def XMM14g( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(6)); +reg_def XMM14h( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(7)); + +reg_def XMM15 ( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()); +reg_def XMM15b( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(1)); +reg_def XMM15c( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(2)); +reg_def XMM15d( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(3)); +reg_def XMM15e( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(4)); +reg_def XMM15f( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(5)); +reg_def XMM15g( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(6)); +reg_def XMM15h( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(7)); + +#else // _WIN64 + +reg_def XMM6 ( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); +reg_def XMM6b( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(1)); +reg_def XMM6c( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(2)); +reg_def XMM6d( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(3)); +reg_def XMM6e( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(4)); +reg_def XMM6f( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(5)); +reg_def XMM6g( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(6)); +reg_def XMM6h( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(7)); + +reg_def XMM7 ( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); +reg_def XMM7b( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(1)); +reg_def XMM7c( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(2)); +reg_def XMM7d( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(3)); +reg_def XMM7e( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(4)); +reg_def XMM7f( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(5)); +reg_def XMM7g( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(6)); +reg_def XMM7h( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(7)); + +#ifdef _LP64 + +reg_def XMM8 ( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()); +reg_def XMM8b( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(1)); +reg_def XMM8c( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(2)); +reg_def XMM8d( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(3)); +reg_def XMM8e( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(4)); +reg_def XMM8f( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(5)); +reg_def XMM8g( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(6)); +reg_def XMM8h( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(7)); + +reg_def XMM9 ( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()); +reg_def XMM9b( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(1)); +reg_def XMM9c( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(2)); +reg_def XMM9d( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(3)); +reg_def XMM9e( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(4)); +reg_def XMM9f( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(5)); +reg_def XMM9g( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(6)); +reg_def XMM9h( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(7)); + +reg_def XMM10 ( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()); +reg_def XMM10b( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(1)); +reg_def XMM10c( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(2)); +reg_def XMM10d( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(3)); +reg_def XMM10e( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(4)); +reg_def XMM10f( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(5)); +reg_def XMM10g( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(6)); +reg_def XMM10h( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(7)); + +reg_def XMM11 ( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()); +reg_def XMM11b( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(1)); +reg_def XMM11c( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(2)); +reg_def XMM11d( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(3)); +reg_def XMM11e( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(4)); +reg_def XMM11f( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(5)); +reg_def XMM11g( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(6)); +reg_def XMM11h( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(7)); + +reg_def XMM12 ( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()); +reg_def XMM12b( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(1)); +reg_def XMM12c( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(2)); +reg_def XMM12d( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(3)); +reg_def XMM12e( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(4)); +reg_def XMM12f( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(5)); +reg_def XMM12g( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(6)); +reg_def XMM12h( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(7)); + +reg_def XMM13 ( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()); +reg_def XMM13b( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(1)); +reg_def XMM13c( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(2)); +reg_def XMM13d( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(3)); +reg_def XMM13e( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(4)); +reg_def XMM13f( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(5)); +reg_def XMM13g( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(6)); +reg_def XMM13h( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(7)); + +reg_def XMM14 ( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()); +reg_def XMM14b( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(1)); +reg_def XMM14c( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(2)); +reg_def XMM14d( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(3)); +reg_def XMM14e( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(4)); +reg_def XMM14f( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(5)); +reg_def XMM14g( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(6)); +reg_def XMM14h( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(7)); + +reg_def XMM15 ( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()); +reg_def XMM15b( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(1)); +reg_def XMM15c( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(2)); +reg_def XMM15d( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(3)); +reg_def XMM15e( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(4)); +reg_def XMM15f( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(5)); +reg_def XMM15g( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(6)); +reg_def XMM15h( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(7)); + +#endif // _LP64 + +#endif // _WIN64 + +#ifdef _LP64 +reg_def RFLAGS(SOC, SOC, 0, 16, VMRegImpl::Bad()); +#else +reg_def RFLAGS(SOC, SOC, 0, 8, VMRegImpl::Bad()); +#endif // _LP64 + +alloc_class chunk1(XMM0, XMM0b, XMM0c, XMM0d, XMM0e, XMM0f, XMM0g, XMM0h, + XMM1, XMM1b, XMM1c, XMM1d, XMM1e, XMM1f, XMM1g, XMM1h, + XMM2, XMM2b, XMM2c, XMM2d, XMM2e, XMM2f, XMM2g, XMM2h, + XMM3, XMM3b, XMM3c, XMM3d, XMM3e, XMM3f, XMM3g, XMM3h, + XMM4, XMM4b, XMM4c, XMM4d, XMM4e, XMM4f, XMM4g, XMM4h, + XMM5, XMM5b, XMM5c, XMM5d, XMM5e, XMM5f, XMM5g, XMM5h, + XMM6, XMM6b, XMM6c, XMM6d, XMM6e, XMM6f, XMM6g, XMM6h, + XMM7, XMM7b, XMM7c, XMM7d, XMM7e, XMM7f, XMM7g, XMM7h +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, XMM8e, XMM8f, XMM8g, XMM8h, + XMM9, XMM9b, XMM9c, XMM9d, XMM9e, XMM9f, XMM9g, XMM9h, + XMM10, XMM10b, XMM10c, XMM10d, XMM10e, XMM10f, XMM10g, XMM10h, + XMM11, XMM11b, XMM11c, XMM11d, XMM11e, XMM11f, XMM11g, XMM11h, + XMM12, XMM12b, XMM12c, XMM12d, XMM12e, XMM12f, XMM12g, XMM12h, + XMM13, XMM13b, XMM13c, XMM13d, XMM13e, XMM13f, XMM13g, XMM13h, + XMM14, XMM14b, XMM14c, XMM14d, XMM14e, XMM14f, XMM14g, XMM14h, + XMM15, XMM15b, XMM15c, XMM15d, XMM15e, XMM15f, XMM15g, XMM15h +#endif + ); + +// flags allocation class should be last. +alloc_class chunk2(RFLAGS); + +// Singleton class for condition codes +reg_class int_flags(RFLAGS); + +// Class for all float registers +reg_class float_reg(XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7 +#ifdef _LP64 + ,XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, + XMM15 +#endif + ); + +// Class for all double registers +reg_class double_reg(XMM0, XMM0b, + XMM1, XMM1b, + XMM2, XMM2b, + XMM3, XMM3b, + XMM4, XMM4b, + XMM5, XMM5b, + XMM6, XMM6b, + XMM7, XMM7b +#ifdef _LP64 + ,XMM8, XMM8b, + XMM9, XMM9b, + XMM10, XMM10b, + XMM11, XMM11b, + XMM12, XMM12b, + XMM13, XMM13b, + XMM14, XMM14b, + XMM15, XMM15b +#endif + ); + +// Class for all 32bit vector registers +reg_class vectors_reg(XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7 +#ifdef _LP64 + ,XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, + XMM15 +#endif + ); + +// Class for all 64bit vector registers +reg_class vectord_reg(XMM0, XMM0b, + XMM1, XMM1b, + XMM2, XMM2b, + XMM3, XMM3b, + XMM4, XMM4b, + XMM5, XMM5b, + XMM6, XMM6b, + XMM7, XMM7b +#ifdef _LP64 + ,XMM8, XMM8b, + XMM9, XMM9b, + XMM10, XMM10b, + XMM11, XMM11b, + XMM12, XMM12b, + XMM13, XMM13b, + XMM14, XMM14b, + XMM15, XMM15b +#endif + ); + +// Class for all 128bit vector registers +reg_class vectorx_reg(XMM0, XMM0b, XMM0c, XMM0d, + XMM1, XMM1b, XMM1c, XMM1d, + XMM2, XMM2b, XMM2c, XMM2d, + XMM3, XMM3b, XMM3c, XMM3d, + XMM4, XMM4b, XMM4c, XMM4d, + XMM5, XMM5b, XMM5c, XMM5d, + XMM6, XMM6b, XMM6c, XMM6d, + XMM7, XMM7b, XMM7c, XMM7d +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, + XMM9, XMM9b, XMM9c, XMM9d, + XMM10, XMM10b, XMM10c, XMM10d, + XMM11, XMM11b, XMM11c, XMM11d, + XMM12, XMM12b, XMM12c, XMM12d, + XMM13, XMM13b, XMM13c, XMM13d, + XMM14, XMM14b, XMM14c, XMM14d, + XMM15, XMM15b, XMM15c, XMM15d +#endif + ); + +// Class for all 256bit vector registers +reg_class vectory_reg(XMM0, XMM0b, XMM0c, XMM0d, XMM0e, XMM0f, XMM0g, XMM0h, + XMM1, XMM1b, XMM1c, XMM1d, XMM1e, XMM1f, XMM1g, XMM1h, + XMM2, XMM2b, XMM2c, XMM2d, XMM2e, XMM2f, XMM2g, XMM2h, + XMM3, XMM3b, XMM3c, XMM3d, XMM3e, XMM3f, XMM3g, XMM3h, + XMM4, XMM4b, XMM4c, XMM4d, XMM4e, XMM4f, XMM4g, XMM4h, + XMM5, XMM5b, XMM5c, XMM5d, XMM5e, XMM5f, XMM5g, XMM5h, + XMM6, XMM6b, XMM6c, XMM6d, XMM6e, XMM6f, XMM6g, XMM6h, + XMM7, XMM7b, XMM7c, XMM7d, XMM7e, XMM7f, XMM7g, XMM7h +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, XMM8e, XMM8f, XMM8g, XMM8h, + XMM9, XMM9b, XMM9c, XMM9d, XMM9e, XMM9f, XMM9g, XMM9h, + XMM10, XMM10b, XMM10c, XMM10d, XMM10e, XMM10f, XMM10g, XMM10h, + XMM11, XMM11b, XMM11c, XMM11d, XMM11e, XMM11f, XMM11g, XMM11h, + XMM12, XMM12b, XMM12c, XMM12d, XMM12e, XMM12f, XMM12g, XMM12h, + XMM13, XMM13b, XMM13c, XMM13d, XMM13e, XMM13f, XMM13g, XMM13h, + XMM14, XMM14b, XMM14c, XMM14d, XMM14e, XMM14f, XMM14g, XMM14h, + XMM15, XMM15b, XMM15c, XMM15d, XMM15e, XMM15f, XMM15g, XMM15h +#endif + ); + +%} + source %{ // Float masks come from different places depending on platform. #ifdef _LP64 @@ -38,6 +488,252 @@ source %{ static address double_signflip() { return (address)double_signflip_pool; } #endif +// Map Types to machine register types +const int Matcher::base2reg[Type::lastype] = { + Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, + Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ + Op_VecS, Op_VecD, Op_VecX, Op_VecY, /* Vectors */ + Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ + 0, 0/*abio*/, + Op_RegP /* Return address */, 0, /* the memories */ + Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, + 0 /*bottom*/ +}; + +// Max vector size in bytes. 0 if not supported. +const int Matcher::vector_width_in_bytes(BasicType bt) { + assert(is_java_primitive(bt), "only primitive type vectors"); + if (UseSSE < 2) return 0; + // SSE2 supports 128bit vectors for all types. + // AVX2 supports 256bit vectors for all types. + int size = (UseAVX > 1) ? 32 : 16; + // AVX1 supports 256bit vectors only for FLOAT and DOUBLE. + if (UseAVX > 0 && (bt == T_FLOAT || bt == T_DOUBLE)) + size = 32; + // Use flag to limit vector size. + size = MIN2(size,(int)MaxVectorSize); + // Minimum 2 values in vector (or 4 for bytes). + switch (bt) { + case T_DOUBLE: + case T_LONG: + if (size < 16) return 0; + case T_FLOAT: + case T_INT: + if (size < 8) return 0; + case T_BOOLEAN: + case T_BYTE: + case T_CHAR: + case T_SHORT: + if (size < 4) return 0; + break; + default: + ShouldNotReachHere(); + } + return size; +} + +// Limits on vector size (number of elements) loaded into vector. +const int Matcher::max_vector_size(const BasicType bt) { + return vector_width_in_bytes(bt)/type2aelembytes(bt); +} +const int Matcher::min_vector_size(const BasicType bt) { + int max_size = max_vector_size(bt); + // Min size which can be loaded into vector is 4 bytes. + int size = (type2aelembytes(bt) == 1) ? 4 : 2; + return MIN2(size,max_size); +} + +// Vector ideal reg corresponding to specidied size in bytes +const int Matcher::vector_ideal_reg(int size) { + assert(MaxVectorSize >= size, ""); + switch(size) { + case 4: return Op_VecS; + case 8: return Op_VecD; + case 16: return Op_VecX; + case 32: return Op_VecY; + } + ShouldNotReachHere(); + return 0; +} + +// x86 supports misaligned vectors store/load. +const bool Matcher::misaligned_vectors_ok() { + return !AlignVector; // can be changed by flag +} + +// Helper methods for MachSpillCopyNode::implementation(). +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st) { + // In 64-bit VM size calculation is very complex. Emitting instructions + // into scratch buffer is used to get size in 64-bit VM. + LP64_ONLY( assert(!do_size, "this method calculates size only for 32-bit VM"); ) + assert(ireg == Op_VecS || // 32bit vector + (src_lo & 1) == 0 && (src_lo + 1) == src_hi && + (dst_lo & 1) == 0 && (dst_lo + 1) == dst_hi, + "no non-adjacent vector moves" ); + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + switch (ireg) { + case Op_VecS: // copy whole register + case Op_VecD: + case Op_VecX: + __ movdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo])); + break; + case Op_VecY: + __ vmovdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo])); + break; + default: + ShouldNotReachHere(); + } + int size = __ offset() - offset; +#ifdef ASSERT + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + assert(!do_size || size == 4, "incorrect size calculattion"); +#endif + return size; +#ifndef PRODUCT + } else if (!do_size) { + switch (ireg) { + case Op_VecS: + case Op_VecD: + case Op_VecX: + st->print("movdqu %s,%s\t# spill",Matcher::regName[dst_lo],Matcher::regName[src_lo]); + break; + case Op_VecY: + st->print("vmovdqu %s,%s\t# spill",Matcher::regName[dst_lo],Matcher::regName[src_lo]); + break; + default: + ShouldNotReachHere(); + } +#endif + } + // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes as SIMD prefix. + return 4; +} + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st) { + // In 64-bit VM size calculation is very complex. Emitting instructions + // into scratch buffer is used to get size in 64-bit VM. + LP64_ONLY( assert(!do_size, "this method calculates size only for 32-bit VM"); ) + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + if (is_load) { + switch (ireg) { + case Op_VecS: + __ movdl(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecD: + __ movq(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecX: + __ movdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecY: + __ vmovdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + default: + ShouldNotReachHere(); + } + } else { // store + switch (ireg) { + case Op_VecS: + __ movdl(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecD: + __ movq(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecX: + __ movdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + default: + ShouldNotReachHere(); + } + } + int size = __ offset() - offset; +#ifdef ASSERT + int offset_size = (stack_offset == 0) ? 0 : ((stack_offset < 0x80) ? 1 : 4); + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + assert(!do_size || size == (5+offset_size), "incorrect size calculattion"); +#endif + return size; +#ifndef PRODUCT + } else if (!do_size) { + if (is_load) { + switch (ireg) { + case Op_VecS: + st->print("movd %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecD: + st->print("movq %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecX: + st->print("movdqu %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecY: + st->print("vmovdqu %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + default: + ShouldNotReachHere(); + } + } else { // store + switch (ireg) { + case Op_VecS: + st->print("movd [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecD: + st->print("movq [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecX: + st->print("movdqu [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecY: + st->print("vmovdqu [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + default: + ShouldNotReachHere(); + } + } +#endif + } + int offset_size = (stack_offset == 0) ? 0 : ((stack_offset < 0x80) ? 1 : 4); + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + return 5+offset_size; +} + +static inline jfloat replicate4_imm(int con, int width) { + // Load a constant of "width" (in bytes) and replicate it to fill 32bit. + assert(width == 1 || width == 2, "only byte or short types here"); + int bit_width = width * 8; + jint val = con; + val &= (1 << bit_width) - 1; // mask off sign bits + while(bit_width < 32) { + val |= (val << bit_width); + bit_width <<= 1; + } + jfloat fval = *((jfloat*) &val); // coerce to float type + return fval; +} + +static inline jdouble replicate8_imm(int con, int width) { + // Load a constant of "width" (in bytes) and replicate it to fill 64bit. + assert(width == 1 || width == 2 || width == 4, "only byte, short or int types here"); + int bit_width = width * 8; + jlong val = con; + val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits + while(bit_width < 64) { + val |= (val << bit_width); + bit_width <<= 1; + } + jdouble dval = *((jdouble*) &val); // coerce to double type + return dval; +} + #ifndef PRODUCT void MachNopNode::format(PhaseRegAlloc*, outputStream* st) const { st->print("nop \t# %d bytes pad for loops and calls", _count); @@ -103,6 +799,46 @@ encode %{ %} + +//----------OPERANDS----------------------------------------------------------- +// Operand definitions must precede instruction definitions for correct parsing +// in the ADLC because operands constitute user defined types which are used in +// instruction definitions. + +// Vectors +operand vecS() %{ + constraint(ALLOC_IN_RC(vectors_reg)); + match(VecS); + + format %{ %} + interface(REG_INTER); +%} + +operand vecD() %{ + constraint(ALLOC_IN_RC(vectord_reg)); + match(VecD); + + format %{ %} + interface(REG_INTER); +%} + +operand vecX() %{ + constraint(ALLOC_IN_RC(vectorx_reg)); + match(VecX); + + format %{ %} + interface(REG_INTER); +%} + +operand vecY() %{ + constraint(ALLOC_IN_RC(vectory_reg)); + match(VecY); + + format %{ %} + interface(REG_INTER); +%} + + // INSTRUCTIONS -- Platform independent definitions (same for 32- and 64-bit) // ============================================================================ @@ -153,7 +889,7 @@ instruct addF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vaddF_reg(regF dst, regF src1, regF src2) %{ +instruct addF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (AddF src1 src2)); @@ -165,7 +901,7 @@ instruct vaddF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vaddF_mem(regF dst, regF src1, memory src2) %{ +instruct addF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (AddF src1 (LoadF src2))); @@ -177,7 +913,7 @@ instruct vaddF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vaddF_imm(regF dst, regF src, immF con) %{ +instruct addF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (AddF src con)); @@ -224,7 +960,7 @@ instruct addD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vaddD_reg(regD dst, regD src1, regD src2) %{ +instruct addD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (AddD src1 src2)); @@ -236,7 +972,7 @@ instruct vaddD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vaddD_mem(regD dst, regD src1, memory src2) %{ +instruct addD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (AddD src1 (LoadD src2))); @@ -248,7 +984,7 @@ instruct vaddD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vaddD_imm(regD dst, regD src, immD con) %{ +instruct addD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (AddD src con)); @@ -295,7 +1031,7 @@ instruct subF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vsubF_reg(regF dst, regF src1, regF src2) %{ +instruct subF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (SubF src1 src2)); @@ -307,7 +1043,7 @@ instruct vsubF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vsubF_mem(regF dst, regF src1, memory src2) %{ +instruct subF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (SubF src1 (LoadF src2))); @@ -319,7 +1055,7 @@ instruct vsubF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vsubF_imm(regF dst, regF src, immF con) %{ +instruct subF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (SubF src con)); @@ -366,7 +1102,7 @@ instruct subD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vsubD_reg(regD dst, regD src1, regD src2) %{ +instruct subD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (SubD src1 src2)); @@ -378,7 +1114,7 @@ instruct vsubD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vsubD_mem(regD dst, regD src1, memory src2) %{ +instruct subD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (SubD src1 (LoadD src2))); @@ -390,7 +1126,7 @@ instruct vsubD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vsubD_imm(regD dst, regD src, immD con) %{ +instruct subD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (SubD src con)); @@ -437,7 +1173,7 @@ instruct mulF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vmulF_reg(regF dst, regF src1, regF src2) %{ +instruct mulF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (MulF src1 src2)); @@ -449,7 +1185,7 @@ instruct vmulF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vmulF_mem(regF dst, regF src1, memory src2) %{ +instruct mulF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (MulF src1 (LoadF src2))); @@ -461,7 +1197,7 @@ instruct vmulF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vmulF_imm(regF dst, regF src, immF con) %{ +instruct mulF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (MulF src con)); @@ -508,7 +1244,7 @@ instruct mulD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vmulD_reg(regD dst, regD src1, regD src2) %{ +instruct mulD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (MulD src1 src2)); @@ -520,7 +1256,7 @@ instruct vmulD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vmulD_mem(regD dst, regD src1, memory src2) %{ +instruct mulD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (MulD src1 (LoadD src2))); @@ -532,7 +1268,7 @@ instruct vmulD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vmulD_imm(regD dst, regD src, immD con) %{ +instruct mulD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (MulD src con)); @@ -579,7 +1315,7 @@ instruct divF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vdivF_reg(regF dst, regF src1, regF src2) %{ +instruct divF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (DivF src1 src2)); @@ -591,7 +1327,7 @@ instruct vdivF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vdivF_mem(regF dst, regF src1, memory src2) %{ +instruct divF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (DivF src1 (LoadF src2))); @@ -603,7 +1339,7 @@ instruct vdivF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vdivF_imm(regF dst, regF src, immF con) %{ +instruct divF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (DivF src con)); @@ -650,7 +1386,7 @@ instruct divD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vdivD_reg(regD dst, regD src1, regD src2) %{ +instruct divD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (DivD src1 src2)); @@ -662,7 +1398,7 @@ instruct vdivD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vdivD_mem(regD dst, regD src1, memory src2) %{ +instruct divD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (DivD src1 (LoadD src2))); @@ -674,7 +1410,7 @@ instruct vdivD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vdivD_imm(regD dst, regD src, immD con) %{ +instruct divD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (DivD src con)); @@ -697,7 +1433,7 @@ instruct absF_reg(regF dst) %{ ins_pipe(pipe_slow); %} -instruct vabsF_reg(regF dst, regF src) %{ +instruct absF_reg_reg(regF dst, regF src) %{ predicate(UseAVX > 0); match(Set dst (AbsF src)); ins_cost(150); @@ -721,7 +1457,7 @@ instruct absD_reg(regD dst) %{ ins_pipe(pipe_slow); %} -instruct vabsD_reg(regD dst, regD src) %{ +instruct absD_reg_reg(regD dst, regD src) %{ predicate(UseAVX > 0); match(Set dst (AbsD src)); ins_cost(150); @@ -745,7 +1481,7 @@ instruct negF_reg(regF dst) %{ ins_pipe(pipe_slow); %} -instruct vnegF_reg(regF dst, regF src) %{ +instruct negF_reg_reg(regF dst, regF src) %{ predicate(UseAVX > 0); match(Set dst (NegF src)); ins_cost(150); @@ -769,7 +1505,7 @@ instruct negD_reg(regD dst) %{ ins_pipe(pipe_slow); %} -instruct vnegD_reg(regD dst, regD src) %{ +instruct negD_reg_reg(regD dst, regD src) %{ predicate(UseAVX > 0); match(Set dst (NegD src)); ins_cost(150); @@ -852,3 +1588,797 @@ instruct sqrtD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} + +// ====================VECTOR INSTRUCTIONS===================================== + +// Load vectors (4 bytes long) +instruct loadV4(vecS dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 4); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movd $dst,$mem\t! load vector (4 bytes)" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (8 bytes long) +instruct loadV8(vecD dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 8); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movq $dst,$mem\t! load vector (8 bytes)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (16 bytes long) +instruct loadV16(vecX dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 16); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movdqu $dst,$mem\t! load vector (16 bytes)" %} + ins_encode %{ + __ movdqu($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (32 bytes long) +instruct loadV32(vecY dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 32); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "vmovdqu $dst,$mem\t! load vector (32 bytes)" %} + ins_encode %{ + __ vmovdqu($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Store vectors +instruct storeV4(memory mem, vecS src) %{ + predicate(n->as_StoreVector()->memory_size() == 4); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movd $mem,$src\t! store vector (4 bytes)" %} + ins_encode %{ + __ movdl($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV8(memory mem, vecD src) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movq $mem,$src\t! store vector (8 bytes)" %} + ins_encode %{ + __ movq($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV16(memory mem, vecX src) %{ + predicate(n->as_StoreVector()->memory_size() == 16); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movdqu $mem,$src\t! store vector (16 bytes)" %} + ins_encode %{ + __ movdqu($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV32(memory mem, vecY src) %{ + predicate(n->as_StoreVector()->memory_size() == 32); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "vmovdqu $mem,$src\t! store vector (32 bytes)" %} + ins_encode %{ + __ vmovdqu($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar to be vector +instruct Repl4B(vecS dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\t! replicate4B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8B(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\t! replicate8B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16B(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\t! replicate16B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl32B(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate32B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar immediate to be vector by loading from const table. +instruct Repl4B_imm(vecS dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB con)); + format %{ "movdl $dst,[$constantaddress]\t! replicate4B($con)" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $constantaddress(replicate4_imm($con$$constant, 1))); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8B_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB con)); + format %{ "movq $dst,[$constantaddress]\t! replicate8B($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16B_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\t! replicate16B($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl32B_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! lreplicate32B($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar zero to be vector +instruct Repl4B_zero(vecS dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate4B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8B_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate8B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl16B_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate16B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl32B_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate32B zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate char/short (2 byte) scalar to be vector +instruct Repl2S(vecS dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\t! replicate2S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\t! replicate4S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\t! replicate8S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16S(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate16S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate char/short (2 byte) scalar immediate to be vector by loading from const table. +instruct Repl2S_imm(vecS dst, immI con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS con)); + format %{ "movdl $dst,[$constantaddress]\t! replicate2S($con)" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $constantaddress(replicate4_imm($con$$constant, 2))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS con)); + format %{ "movq $dst,[$constantaddress]\t! replicate4S($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\t! replicate8S($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16S_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate16S($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate char/short (2 byte) scalar zero to be vector +instruct Repl2S_zero(vecS dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate2S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate4S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate8S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl16S_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate16S zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate integer (4 byte) scalar to be vector +instruct Repl2I(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\t! replicate2I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\t! replicate4I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate8I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate integer (4 byte) scalar immediate to be vector by loading from const table. +instruct Repl2I_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI con)); + format %{ "movq $dst,[$constantaddress]\t! replicate2I($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI con)); + format %{ "movq $dst,[$constantaddress]\t! replicate4I($con)\n\t" + "punpcklqdq $dst,$dst" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI con)); + format %{ "movq $dst,[$constantaddress]\t! replicate8I($con)\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Integer could be loaded into xmm register directly from memory. +instruct Repl2I_mem(vecD dst, memory mem) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI (LoadI mem))); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\t! replicate2I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_mem(vecX dst, memory mem) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI (LoadI mem))); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\t! replicate4I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I_mem(vecY dst, memory mem) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI (LoadI mem))); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate8I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate integer (4 byte) scalar zero to be vector +instruct Repl2I_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI zero)); + format %{ "pxor $dst,$dst\t! replicate2I" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI zero)); + format %{ "pxor $dst,$dst\t! replicate4I zero)" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8I_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate8I zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate long (8 byte) scalar to be vector +#ifdef _LP64 +instruct Repl2L(vecX dst, rRegL src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL src)); + format %{ "movdq $dst,$src\n\t" + "punpcklqdq $dst,$dst\t! replicate2L" %} + ins_encode %{ + __ movdq($dst$$XMMRegister, $src$$Register); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L(vecY dst, rRegL src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL src)); + format %{ "movdq $dst,$src\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movdq($dst$$XMMRegister, $src$$Register); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} +#else // _LP64 +instruct Repl2L(vecX dst, eRegL src, regD tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL src)); + effect(TEMP dst, USE src, TEMP tmp); + format %{ "movdl $dst,$src.lo\n\t" + "movdl $tmp,$src.hi\n\t" + "punpckldq $dst,$tmp\n\t" + "punpcklqdq $dst,$dst\t! replicate2L"%} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ movdl($tmp$$XMMRegister, HIGH_FROM_LOW($src$$Register)); + __ punpckldq($dst$$XMMRegister, $tmp$$XMMRegister); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L(vecY dst, eRegL src, regD tmp) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL src)); + effect(TEMP dst, USE src, TEMP tmp); + format %{ "movdl $dst,$src.lo\n\t" + "movdl $tmp,$src.hi\n\t" + "punpckldq $dst,$tmp\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ movdl($tmp$$XMMRegister, HIGH_FROM_LOW($src$$Register)); + __ punpckldq($dst$$XMMRegister, $tmp$$XMMRegister); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} +#endif // _LP64 + +// Replicate long (8 byte) scalar immediate to be vector by loading from const table. +instruct Repl2L_imm(vecX dst, immL con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\t! replicate2L($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress($con)); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L_imm(vecY dst, immL con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress($con)); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Long could be loaded into xmm register directly from memory. +instruct Repl2L_mem(vecX dst, memory mem) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL (LoadL mem))); + format %{ "movq $dst,$mem\n\t" + "punpcklqdq $dst,$dst\t! replicate2L" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L_mem(vecY dst, memory mem) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL (LoadL mem))); + format %{ "movq $dst,$mem\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate long (8 byte) scalar zero to be vector +instruct Repl2L_zero(vecX dst, immL0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL zero)); + format %{ "pxor $dst,$dst\t! replicate2L zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4L_zero(vecY dst, immL0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate4L zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate float (4 byte) scalar to be vector +instruct Repl2F(vecD dst, regF src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$dst,0x00\t! replicate2F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4F(vecX dst, regF src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$dst,0x00\t! replicate4F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8F(vecY dst, regF src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$src,0x00\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate8F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate float (4 byte) scalar zero to be vector +instruct Repl2F_zero(vecD dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF zero)); + format %{ "xorps $dst,$dst\t! replicate2F zero" %} + ins_encode %{ + __ xorps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4F_zero(vecX dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateF zero)); + format %{ "xorps $dst,$dst\t! replicate4F zero" %} + ins_encode %{ + __ xorps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8F_zero(vecY dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateF zero)); + format %{ "vxorps $dst,$dst,$dst\t! replicate8F zero" %} + ins_encode %{ + bool vector256 = true; + __ vxorps($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate double (8 bytes) scalar to be vector +instruct Repl2D(vecX dst, regD src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateD src)); + format %{ "pshufd $dst,$src,0x44\t! replicate2D" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x44); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4D(vecY dst, regD src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateD src)); + format %{ "pshufd $dst,$src,0x44\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate4D" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x44); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate double (8 byte) scalar zero to be vector +instruct Repl2D_zero(vecX dst, immD0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateD zero)); + format %{ "xorpd $dst,$dst\t! replicate2D zero" %} + ins_encode %{ + __ xorpd($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4D_zero(vecY dst, immD0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateD zero)); + format %{ "vxorpd $dst,$dst,$dst,vect256\t! replicate4D zero" %} + ins_encode %{ + bool vector256 = true; + __ vxorpd($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + diff --git a/hotspot/src/cpu/x86/vm/x86_32.ad b/hotspot/src/cpu/x86/vm/x86_32.ad index 1c5248fecbe..b46d3d68843 100644 --- a/hotspot/src/cpu/x86/vm/x86_32.ad +++ b/hotspot/src/cpu/x86/vm/x86_32.ad @@ -74,9 +74,6 @@ reg_def EDX(SOC, SOC, Op_RegI, 2, rdx->as_VMReg()); reg_def EAX(SOC, SOC, Op_RegI, 0, rax->as_VMReg()); reg_def ESP( NS, NS, Op_RegI, 4, rsp->as_VMReg()); -// Special Registers -reg_def EFLAGS(SOC, SOC, 0, 8, VMRegImpl::Bad()); - // Float registers. We treat TOS/FPR0 special. It is invisible to the // allocator, and only shows up in the encodings. reg_def FPR0L( SOC, SOC, Op_RegF, 0, VMRegImpl::Bad()); @@ -105,27 +102,6 @@ reg_def FPR6H( SOC, SOC, Op_RegF, 6, as_FloatRegister(5)->as_VMReg()->next()); reg_def FPR7L( SOC, SOC, Op_RegF, 7, as_FloatRegister(6)->as_VMReg()); reg_def FPR7H( SOC, SOC, Op_RegF, 7, as_FloatRegister(6)->as_VMReg()->next()); -// XMM registers. 128-bit registers or 4 words each, labeled a-d. -// Word a in each register holds a Float, words ab hold a Double. -// We currently do not use the SIMD capabilities, so registers cd -// are unused at the moment. -reg_def XMM0a( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); -reg_def XMM0b( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()); -reg_def XMM1a( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); -reg_def XMM1b( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()); -reg_def XMM2a( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); -reg_def XMM2b( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()); -reg_def XMM3a( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); -reg_def XMM3b( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()); -reg_def XMM4a( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); -reg_def XMM4b( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()); -reg_def XMM5a( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); -reg_def XMM5b( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()); -reg_def XMM6a( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6b( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()); -reg_def XMM7a( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7b( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()); - // Specify priority of register selection within phases of register // allocation. Highest priority is first. A useful heuristic is to // give registers a low priority when they are required by machine @@ -138,15 +114,6 @@ alloc_class chunk0( ECX, EBX, EBP, EDI, EAX, EDX, ESI, ESP, FPR3L, FPR3H, FPR4L, FPR4H, FPR5L, FPR5H, FPR6L, FPR6H, FPR7L, FPR7H ); -alloc_class chunk1( XMM0a, XMM0b, - XMM1a, XMM1b, - XMM2a, XMM2b, - XMM3a, XMM3b, - XMM4a, XMM4b, - XMM5a, XMM5b, - XMM6a, XMM6b, - XMM7a, XMM7b, EFLAGS); - //----------Architecture Description Register Classes-------------------------- // Several register classes are automatically defined based upon information in @@ -159,12 +126,12 @@ alloc_class chunk1( XMM0a, XMM0b, // Class for all registers reg_class any_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX, ESP); // Class for general registers -reg_class e_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX); +reg_class int_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX); // Class for general registers which may be used for implicit null checks on win95 // Also safe for use by tailjump. We don't want to allocate in rbp, -reg_class e_reg_no_rbp(EAX, EDX, EDI, ESI, ECX, EBX); +reg_class int_reg_no_rbp(EAX, EDX, EDI, ESI, ECX, EBX); // Class of "X" registers -reg_class x_reg(EBX, ECX, EDX, EAX); +reg_class int_x_reg(EBX, ECX, EDX, EAX); // Class of registers that can appear in an address with no offset. // EBP and ESP require an extra instruction byte for zero offset. // Used in fast-unlock @@ -193,8 +160,6 @@ reg_class ebp_reg(EBP); reg_class sp_reg(ESP); // Singleton class for instruction pointer // reg_class ip_reg(EIP); -// Singleton class for condition codes -reg_class int_flags(EFLAGS); // Class of integer register pairs reg_class long_reg( EAX,EDX, ECX,EBX, EBP,EDI ); // Class of integer register pairs that aligns with calling convention @@ -206,29 +171,18 @@ reg_class nadx_reg( EBX,ECX,ESI,EDI,EBP ); // Floating point registers. Notice FPR0 is not a choice. // FPR0 is not ever allocated; we use clever encodings to fake // a 2-address instructions out of Intels FP stack. -reg_class flt_reg( FPR1L,FPR2L,FPR3L,FPR4L,FPR5L,FPR6L,FPR7L ); +reg_class fp_flt_reg( FPR1L,FPR2L,FPR3L,FPR4L,FPR5L,FPR6L,FPR7L ); -// make a register class for SSE registers -reg_class xmm_reg(XMM0a, XMM1a, XMM2a, XMM3a, XMM4a, XMM5a, XMM6a, XMM7a); +reg_class fp_dbl_reg( FPR1L,FPR1H, FPR2L,FPR2H, FPR3L,FPR3H, + FPR4L,FPR4H, FPR5L,FPR5H, FPR6L,FPR6H, + FPR7L,FPR7H ); -// make a double register class for SSE2 registers -reg_class xdb_reg(XMM0a,XMM0b, XMM1a,XMM1b, XMM2a,XMM2b, XMM3a,XMM3b, - XMM4a,XMM4b, XMM5a,XMM5b, XMM6a,XMM6b, XMM7a,XMM7b ); +reg_class fp_flt_reg0( FPR1L ); +reg_class fp_dbl_reg0( FPR1L,FPR1H ); +reg_class fp_dbl_reg1( FPR2L,FPR2H ); +reg_class fp_dbl_notreg0( FPR2L,FPR2H, FPR3L,FPR3H, FPR4L,FPR4H, + FPR5L,FPR5H, FPR6L,FPR6H, FPR7L,FPR7H ); -reg_class dbl_reg( FPR1L,FPR1H, FPR2L,FPR2H, FPR3L,FPR3H, - FPR4L,FPR4H, FPR5L,FPR5H, FPR6L,FPR6H, - FPR7L,FPR7H ); - -reg_class flt_reg0( FPR1L ); -reg_class dbl_reg0( FPR1L,FPR1H ); -reg_class dbl_reg1( FPR2L,FPR2H ); -reg_class dbl_notreg0( FPR2L,FPR2H, FPR3L,FPR3H, FPR4L,FPR4H, - FPR5L,FPR5H, FPR6L,FPR6H, FPR7L,FPR7H ); - -// XMM6 and XMM7 could be used as temporary registers for long, float and -// double values for SSE2. -reg_class xdb_reg6( XMM6a,XMM6b ); -reg_class xdb_reg7( XMM7a,XMM7b ); %} @@ -412,7 +366,7 @@ void store_to_stackslot(CodeBuffer &cbuf, int opcode, int rm_field, int disp) { } } - // eRegI ereg, memory mem) %{ // emit_reg_mem + // rRegI ereg, memory mem) %{ // emit_reg_mem void encode_RegMem( CodeBuffer &cbuf, int reg_encoding, int base, int index, int scale, int displace, bool displace_is_oop ) { // There is no index & no scale, use form without SIB byte if ((index == 0x4) && @@ -787,7 +741,7 @@ static int impl_x_helper( CodeBuffer *cbuf, bool do_size, bool is_load, #endif } int offset_size = (offset == 0) ? 0 : ((offset <= 127) ? 1 : 4); - // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes. + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. return size+5+offset_size; } @@ -821,7 +775,7 @@ static int impl_movx_helper( CodeBuffer *cbuf, bool do_size, int src_lo, int dst } #endif } - // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes. + // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes as SIMD prefix. // Only MOVAPS SSE prefix uses 1 byte. int sz = 4; if (!(src_lo+1 == src_hi && dst_lo+1 == dst_hi) && @@ -903,6 +857,108 @@ static int impl_fp_store_helper( CodeBuffer *cbuf, bool do_size, int src_lo, int return impl_helper(cbuf,do_size,false,offset,st_op,op,op_str,size, st); } +// Next two methods are shared by 32- and 64-bit VM. They are defined in x86.ad. +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st); + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st); + +static int vec_stack_to_stack_helper(CodeBuffer *cbuf, bool do_size, int src_offset, + int dst_offset, uint ireg, outputStream* st) { + int calc_size = 0; + int src_offset_size = (src_offset == 0) ? 0 : ((src_offset < 0x80) ? 1 : 4); + int dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); + switch (ireg) { + case Op_VecS: + calc_size = 3+src_offset_size + 3+dst_offset_size; + break; + case Op_VecD: + calc_size = 3+src_offset_size + 3+dst_offset_size; + src_offset += 4; + dst_offset += 4; + src_offset_size = (src_offset == 0) ? 0 : ((src_offset < 0x80) ? 1 : 4); + dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); + calc_size += 3+src_offset_size + 3+dst_offset_size; + break; + case Op_VecX: + calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; + break; + case Op_VecY: + calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; + break; + default: + ShouldNotReachHere(); + } + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + switch (ireg) { + case Op_VecS: + __ pushl(Address(rsp, src_offset)); + __ popl (Address(rsp, dst_offset)); + break; + case Op_VecD: + __ pushl(Address(rsp, src_offset)); + __ popl (Address(rsp, dst_offset)); + __ pushl(Address(rsp, src_offset+4)); + __ popl (Address(rsp, dst_offset+4)); + break; + case Op_VecX: + __ movdqu(Address(rsp, -16), xmm0); + __ movdqu(xmm0, Address(rsp, src_offset)); + __ movdqu(Address(rsp, dst_offset), xmm0); + __ movdqu(xmm0, Address(rsp, -16)); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, -32), xmm0); + __ vmovdqu(xmm0, Address(rsp, src_offset)); + __ vmovdqu(Address(rsp, dst_offset), xmm0); + __ vmovdqu(xmm0, Address(rsp, -32)); + break; + default: + ShouldNotReachHere(); + } + int size = __ offset() - offset; + assert(size == calc_size, "incorrect size calculattion"); + return size; +#ifndef PRODUCT + } else if (!do_size) { + switch (ireg) { + case Op_VecS: + st->print("pushl [rsp + #%d]\t# 32-bit mem-mem spill\n\t" + "popl [rsp + #%d]", + src_offset, dst_offset); + break; + case Op_VecD: + st->print("pushl [rsp + #%d]\t# 64-bit mem-mem spill\n\t" + "popq [rsp + #%d]\n\t" + "pushl [rsp + #%d]\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset, src_offset+4, dst_offset+4); + break; + case Op_VecX: + st->print("movdqu [rsp - #16], xmm0\t# 128-bit mem-mem spill\n\t" + "movdqu xmm0, [rsp + #%d]\n\t" + "movdqu [rsp + #%d], xmm0\n\t" + "movdqu xmm0, [rsp - #16]", + src_offset, dst_offset); + break; + case Op_VecY: + st->print("vmovdqu [rsp - #32], xmm0\t# 256-bit mem-mem spill\n\t" + "vmovdqu xmm0, [rsp + #%d]\n\t" + "vmovdqu [rsp + #%d], xmm0\n\t" + "vmovdqu xmm0, [rsp - #32]", + src_offset, dst_offset); + break; + default: + ShouldNotReachHere(); + } +#endif + } + return calc_size; +} + uint MachSpillCopyNode::implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bool do_size, outputStream* st ) const { // Get registers to move OptoReg::Name src_second = ra_->get_reg_second(in(1)); @@ -923,6 +979,29 @@ uint MachSpillCopyNode::implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bo if( src_first == dst_first && src_second == dst_second ) return size; // Self copy, no move + if (bottom_type()->isa_vect() != NULL) { + uint ireg = ideal_reg(); + assert((src_first_rc != rc_int && dst_first_rc != rc_int), "sanity"); + assert((src_first_rc != rc_float && dst_first_rc != rc_float), "sanity"); + assert((ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY), "sanity"); + if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { + // mem -> mem + int src_offset = ra_->reg2offset(src_first); + int dst_offset = ra_->reg2offset(dst_first); + return vec_stack_to_stack_helper(cbuf, do_size, src_offset, dst_offset, ireg, st); + } else if (src_first_rc == rc_xmm && dst_first_rc == rc_xmm ) { + return vec_mov_helper(cbuf, do_size, src_first, dst_first, src_second, dst_second, ireg, st); + } else if (src_first_rc == rc_xmm && dst_first_rc == rc_stack ) { + int stack_offset = ra_->reg2offset(dst_first); + return vec_spill_helper(cbuf, do_size, false, stack_offset, src_first, ireg, st); + } else if (src_first_rc == rc_stack && dst_first_rc == rc_xmm ) { + int stack_offset = ra_->reg2offset(src_first); + return vec_spill_helper(cbuf, do_size, true, stack_offset, dst_first, ireg, st); + } else { + ShouldNotReachHere(); + } + } + // -------------------------------------- // Check for mem-mem move. push/pop to move. if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { @@ -1313,16 +1392,6 @@ const bool Matcher::convL2FSupported(void) { return true; } -// Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { - return UseSSE >= 2 ? 8 : 0; -} - -// Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { - return Op_RegD; -} - // Is this branch offset short enough that a short branch can be used? // // NOTE: If the platform does not provide any short branch variants, then @@ -1452,7 +1521,7 @@ const bool Matcher::int_in_long = false; // arguments in those registers not be available to the callee. bool Matcher::can_be_java_arg( int reg ) { if( reg == ECX_num || reg == EDX_num ) return true; - if( (reg == XMM0a_num || reg == XMM1a_num) && UseSSE>=1 ) return true; + if( (reg == XMM0_num || reg == XMM1_num ) && UseSSE>=1 ) return true; if( (reg == XMM0b_num || reg == XMM1b_num) && UseSSE>=2 ) return true; return false; } @@ -1565,16 +1634,16 @@ encode %{ emit_opcode(cbuf,0x66); %} - enc_class RegReg (eRegI dst, eRegI src) %{ // RegReg(Many) + enc_class RegReg (rRegI dst, rRegI src) %{ // RegReg(Many) emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class OpcRegReg (immI opcode, eRegI dst, eRegI src) %{ // OpcRegReg(Many) + enc_class OpcRegReg (immI opcode, rRegI dst, rRegI src) %{ // OpcRegReg(Many) emit_opcode(cbuf,$opcode$$constant); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class mov_r32_imm0( eRegI dst ) %{ + enc_class mov_r32_imm0( rRegI dst ) %{ emit_opcode( cbuf, 0xB8 + $dst$$reg ); // 0xB8+ rd -- MOV r32 ,imm32 emit_d32 ( cbuf, 0x0 ); // imm32==0x0 %} @@ -1621,7 +1690,7 @@ encode %{ %} // Dense encoding for older common ops - enc_class Opc_plus(immI opcode, eRegI reg) %{ + enc_class Opc_plus(immI opcode, rRegI reg) %{ emit_opcode(cbuf, $opcode$$constant + $reg$$reg); %} @@ -1637,7 +1706,7 @@ encode %{ } %} - enc_class OpcSErm (eRegI dst, immI imm) %{ // OpcSEr/m + enc_class OpcSErm (rRegI dst, immI imm) %{ // OpcSEr/m // Emit primary opcode and set sign-extend bit // Check for 8-bit immediate, and set sign extend bit in opcode if (($imm$$constant >= -128) && ($imm$$constant <= 127)) { @@ -1682,7 +1751,7 @@ encode %{ else emit_d32(cbuf,con); %} - enc_class OpcSReg (eRegI dst) %{ // BSWAP + enc_class OpcSReg (rRegI dst) %{ // BSWAP emit_cc(cbuf, $secondary, $dst$$reg ); %} @@ -1700,7 +1769,7 @@ encode %{ emit_rm(cbuf, 0x3, destlo, desthi); %} - enc_class RegOpc (eRegI div) %{ // IDIV, IMOD, JMP indirect, ... + enc_class RegOpc (rRegI div) %{ // IDIV, IMOD, JMP indirect, ... emit_rm(cbuf, 0x3, $secondary, $div$$reg ); %} @@ -1891,20 +1960,20 @@ encode %{ // runtime_call_Relocation::spec(), RELOC_IMM32 ); // %} - enc_class RegOpcImm (eRegI dst, immI8 shift) %{ // SHL, SAR, SHR + enc_class RegOpcImm (rRegI dst, immI8 shift) %{ // SHL, SAR, SHR $$$emit8$primary; emit_rm(cbuf, 0x3, $secondary, $dst$$reg); $$$emit8$shift$$constant; %} - enc_class LdImmI (eRegI dst, immI src) %{ // Load Immediate + enc_class LdImmI (rRegI dst, immI src) %{ // Load Immediate // Load immediate does not have a zero or sign extended version // for 8-bit immediates emit_opcode(cbuf, 0xB8 + $dst$$reg); $$$emit32$src$$constant; %} - enc_class LdImmP (eRegI dst, immI src) %{ // Load Immediate + enc_class LdImmP (rRegI dst, immI src) %{ // Load Immediate // Load immediate does not have a zero or sign extended version // for 8-bit immediates emit_opcode(cbuf, $primary + $dst$$reg); @@ -1943,15 +2012,15 @@ encode %{ // Encode a reg-reg copy. If it is useless, then empty encoding. - enc_class enc_Copy( eRegI dst, eRegI src ) %{ + enc_class enc_Copy( rRegI dst, rRegI src ) %{ encode_Copy( cbuf, $dst$$reg, $src$$reg ); %} - enc_class enc_CopyL_Lo( eRegI dst, eRegL src ) %{ + enc_class enc_CopyL_Lo( rRegI dst, eRegL src ) %{ encode_Copy( cbuf, $dst$$reg, $src$$reg ); %} - enc_class RegReg (eRegI dst, eRegI src) %{ // RegReg(Many) + enc_class RegReg (rRegI dst, rRegI src) %{ // RegReg(Many) emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} @@ -1973,7 +2042,7 @@ encode %{ emit_rm(cbuf, 0x3, HIGH_FROM_LOW($dst$$reg), HIGH_FROM_LOW($src$$reg)); %} - enc_class RegReg_HiLo( eRegL src, eRegI dst ) %{ + enc_class RegReg_HiLo( eRegL src, rRegI dst ) %{ emit_rm(cbuf, 0x3, $dst$$reg, HIGH_FROM_LOW($src$$reg)); %} @@ -2068,7 +2137,7 @@ encode %{ cbuf.set_insts_mark(); // Mark start of opcode for reloc info in mem operand %} - enc_class RegMem (eRegI ereg, memory mem) %{ // emit_reg_mem + enc_class RegMem (rRegI ereg, memory mem) %{ // emit_reg_mem int reg_encoding = $ereg$$reg; int base = $mem$$base; int index = $mem$$index; @@ -2132,7 +2201,7 @@ encode %{ // Clone of RegMem but accepts an extra parameter to access each // half of a double in memory; it never needs relocation info. - enc_class Mov_MemD_half_to_Reg (immI opcode, memory mem, immI disp_for_half, eRegI rm_reg) %{ + enc_class Mov_MemD_half_to_Reg (immI opcode, memory mem, immI disp_for_half, rRegI rm_reg) %{ emit_opcode(cbuf,$opcode$$constant); int reg_encoding = $rm_reg$$reg; int base = $mem$$base; @@ -2168,7 +2237,7 @@ encode %{ encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_is_oop); %} - enc_class RegLea (eRegI dst, eRegI src0, immI src1 ) %{ // emit_reg_lea + enc_class RegLea (rRegI dst, rRegI src0, immI src1 ) %{ // emit_reg_lea int reg_encoding = $dst$$reg; int base = $src0$$reg; // 0xFFFFFFFF indicates no base int index = 0x04; // 0x04 indicates no index @@ -2178,7 +2247,7 @@ encode %{ encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); %} - enc_class min_enc (eRegI dst, eRegI src) %{ // MIN + enc_class min_enc (rRegI dst, rRegI src) %{ // MIN // Compare dst,src emit_opcode(cbuf,0x3B); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); @@ -2190,7 +2259,7 @@ encode %{ emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class max_enc (eRegI dst, eRegI src) %{ // MAX + enc_class max_enc (rRegI dst, rRegI src) %{ // MAX // Compare dst,src emit_opcode(cbuf,0x3B); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); @@ -2221,7 +2290,7 @@ encode %{ encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); %} - enc_class neg_reg(eRegI dst) %{ + enc_class neg_reg(rRegI dst) %{ // NEG $dst emit_opcode(cbuf,0xF7); emit_rm(cbuf, 0x3, 0x03, $dst$$reg ); @@ -2251,7 +2320,7 @@ encode %{ emit_rm(cbuf, 0x3, $p$$reg, tmpReg); %} - enc_class enc_cmpLTP_mem(eRegI p, eRegI q, memory mem, eCXRegI tmp) %{ // cadd_cmpLT + enc_class enc_cmpLTP_mem(rRegI p, rRegI q, memory mem, eCXRegI tmp) %{ // cadd_cmpLT int tmpReg = $tmp$$reg; // SUB $p,$q @@ -2390,12 +2459,12 @@ encode %{ %} // Special case for moving an integer register to a stack slot. - enc_class OpcPRegSS( stackSlotI dst, eRegI src ) %{ // RegSS + enc_class OpcPRegSS( stackSlotI dst, rRegI src ) %{ // RegSS store_to_stackslot( cbuf, $primary, $src$$reg, $dst$$disp ); %} // Special case for moving a register to a stack slot. - enc_class RegSS( stackSlotI dst, eRegI src ) %{ // RegSS + enc_class RegSS( stackSlotI dst, rRegI src ) %{ // RegSS // Opcode already emitted emit_rm( cbuf, 0x02, $src$$reg, ESP_enc ); // R/M byte emit_rm( cbuf, 0x00, ESP_enc, ESP_enc); // SIB byte @@ -2536,45 +2605,6 @@ encode %{ __ fld_d(Address(rsp, 0)); %} - // Compute X^Y using Intel's fast hardware instructions, if possible. - // Otherwise return a NaN. - enc_class pow_exp_core_encoding %{ - // FPR1 holds Y*ln2(X). Compute FPR1 = 2^(Y*ln2(X)) - emit_opcode(cbuf,0xD9); emit_opcode(cbuf,0xC0); // fdup = fld st(0) Q Q - emit_opcode(cbuf,0xD9); emit_opcode(cbuf,0xFC); // frndint int(Q) Q - emit_opcode(cbuf,0xDC); emit_opcode(cbuf,0xE9); // fsub st(1) -= st(0); int(Q) frac(Q) - emit_opcode(cbuf,0xDB); // FISTP [ESP] frac(Q) - emit_opcode(cbuf,0x1C); - emit_d8(cbuf,0x24); - emit_opcode(cbuf,0xD9); emit_opcode(cbuf,0xF0); // f2xm1 2^frac(Q)-1 - emit_opcode(cbuf,0xD9); emit_opcode(cbuf,0xE8); // fld1 1 2^frac(Q)-1 - emit_opcode(cbuf,0xDE); emit_opcode(cbuf,0xC1); // faddp 2^frac(Q) - emit_opcode(cbuf,0x8B); // mov rax,[esp+0]=int(Q) - encode_RegMem(cbuf, EAX_enc, ESP_enc, 0x4, 0, 0, false); - emit_opcode(cbuf,0xC7); // mov rcx,0xFFFFF800 - overflow mask - emit_rm(cbuf, 0x3, 0x0, ECX_enc); - emit_d32(cbuf,0xFFFFF800); - emit_opcode(cbuf,0x81); // add rax,1023 - the double exponent bias - emit_rm(cbuf, 0x3, 0x0, EAX_enc); - emit_d32(cbuf,1023); - emit_opcode(cbuf,0x8B); // mov rbx,eax - emit_rm(cbuf, 0x3, EBX_enc, EAX_enc); - emit_opcode(cbuf,0xC1); // shl rax,20 - Slide to exponent position - emit_rm(cbuf,0x3,0x4,EAX_enc); - emit_d8(cbuf,20); - emit_opcode(cbuf,0x85); // test rbx,ecx - check for overflow - emit_rm(cbuf, 0x3, EBX_enc, ECX_enc); - emit_opcode(cbuf,0x0F); emit_opcode(cbuf,0x45); // CMOVne rax,ecx - overflow; stuff NAN into EAX - emit_rm(cbuf, 0x3, EAX_enc, ECX_enc); - emit_opcode(cbuf,0x89); // mov [esp+4],eax - Store as part of double word - encode_RegMem(cbuf, EAX_enc, ESP_enc, 0x4, 0, 4, false); - emit_opcode(cbuf,0xC7); // mov [esp+0],0 - [ESP] = (double)(1<=2 ) - return OptoRegPair(XMM0b_num,XMM0a_num); + return OptoRegPair(XMM0b_num,XMM0_num); if( ideal_reg == Op_RegF && UseSSE>=2 ) - return OptoRegPair(OptoReg::Bad,XMM0a_num); + return OptoRegPair(OptoReg::Bad,XMM0_num); return OptoRegPair(hi[ideal_reg],lo[ideal_reg]); %} @@ -3814,9 +3844,9 @@ frame %{ static int lo[Op_RegL+1] = { 0, 0, OptoReg::Bad, EAX_num, EAX_num, FPR1L_num, FPR1L_num, EAX_num }; static int hi[Op_RegL+1] = { 0, 0, OptoReg::Bad, OptoReg::Bad, OptoReg::Bad, OptoReg::Bad, FPR1H_num, EDX_num }; if( ideal_reg == Op_RegD && UseSSE>=2 ) - return OptoRegPair(XMM0b_num,XMM0a_num); + return OptoRegPair(XMM0b_num,XMM0_num); if( ideal_reg == Op_RegF && UseSSE>=1 ) - return OptoRegPair(OptoReg::Bad,XMM0a_num); + return OptoRegPair(OptoReg::Bad,XMM0_num); return OptoRegPair(hi[ideal_reg],lo[ideal_reg]); %} @@ -4186,8 +4216,8 @@ operand immI_65535() %{ // Register Operands // Integer Register -operand eRegI() %{ - constraint(ALLOC_IN_RC(e_reg)); +operand rRegI() %{ + constraint(ALLOC_IN_RC(int_reg)); match(RegI); match(xRegI); match(eAXRegI); @@ -4202,8 +4232,8 @@ operand eRegI() %{ %} // Subset of Integer Register -operand xRegI(eRegI reg) %{ - constraint(ALLOC_IN_RC(x_reg)); +operand xRegI(rRegI reg) %{ + constraint(ALLOC_IN_RC(int_x_reg)); match(reg); match(eAXRegI); match(eBXRegI); @@ -4218,7 +4248,7 @@ operand xRegI(eRegI reg) %{ operand eAXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(eax_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EAX" %} interface(REG_INTER); @@ -4228,7 +4258,7 @@ operand eAXRegI(xRegI reg) %{ operand eBXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(ebx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EBX" %} interface(REG_INTER); @@ -4237,7 +4267,7 @@ operand eBXRegI(xRegI reg) %{ operand eCXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(ecx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "ECX" %} interface(REG_INTER); @@ -4246,7 +4276,7 @@ operand eCXRegI(xRegI reg) %{ operand eDXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(edx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EDX" %} interface(REG_INTER); @@ -4255,7 +4285,7 @@ operand eDXRegI(xRegI reg) %{ operand eDIRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(edi_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EDI" %} interface(REG_INTER); @@ -4302,7 +4332,7 @@ operand ncxRegI() %{ operand eSIRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(esi_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "ESI" %} interface(REG_INTER); @@ -4323,7 +4353,7 @@ operand anyRegP() %{ %} operand eRegP() %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(RegP); match(eAXRegP); match(eBXRegP); @@ -4336,7 +4366,7 @@ operand eRegP() %{ // On windows95, EBP is not safe to use for implicit null tests. operand eRegP_no_EBP() %{ - constraint(ALLOC_IN_RC(e_reg_no_rbp)); + constraint(ALLOC_IN_RC(int_reg_no_rbp)); match(RegP); match(eAXRegP); match(eBXRegP); @@ -4516,7 +4546,7 @@ operand flagsReg_long_LEGT() %{ // Float register operands operand regDPR() %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg)); + constraint(ALLOC_IN_RC(fp_dbl_reg)); match(RegD); match(regDPR1); match(regDPR2); @@ -4526,7 +4556,7 @@ operand regDPR() %{ operand regDPR1(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg0)); + constraint(ALLOC_IN_RC(fp_dbl_reg0)); match(reg); format %{ "FPR1" %} interface(REG_INTER); @@ -4534,7 +4564,7 @@ operand regDPR1(regDPR reg) %{ operand regDPR2(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg1)); + constraint(ALLOC_IN_RC(fp_dbl_reg1)); match(reg); format %{ "FPR2" %} interface(REG_INTER); @@ -4542,45 +4572,16 @@ operand regDPR2(regDPR reg) %{ operand regnotDPR1(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_notreg0)); + constraint(ALLOC_IN_RC(fp_dbl_notreg0)); match(reg); format %{ %} interface(REG_INTER); %} -// XMM Double register operands -operand regD() %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg)); - match(RegD); - match(regD6); - match(regD7); - format %{ %} - interface(REG_INTER); -%} - -// XMM6 double register operands -operand regD6(regD reg) %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg6)); - match(reg); - format %{ "XMM6" %} - interface(REG_INTER); -%} - -// XMM7 double register operands -operand regD7(regD reg) %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg7)); - match(reg); - format %{ "XMM7" %} - interface(REG_INTER); -%} - // Float register operands operand regFPR() %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(flt_reg)); + constraint(ALLOC_IN_RC(fp_flt_reg)); match(RegF); match(regFPR1); format %{ %} @@ -4590,21 +4591,30 @@ operand regFPR() %{ // Float register operands operand regFPR1(regFPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(flt_reg0)); + constraint(ALLOC_IN_RC(fp_flt_reg0)); match(reg); format %{ "FPR1" %} interface(REG_INTER); %} -// XMM register operands +// XMM Float register operands operand regF() %{ predicate( UseSSE>=1 ); - constraint(ALLOC_IN_RC(xmm_reg)); + constraint(ALLOC_IN_RC(float_reg)); match(RegF); format %{ %} interface(REG_INTER); %} +// XMM Double register operands +operand regD() %{ + predicate( UseSSE>=2 ); + constraint(ALLOC_IN_RC(double_reg)); + match(RegD); + format %{ %} + interface(REG_INTER); +%} + //----------Memory Operands---------------------------------------------------- // Direct Memory Operand @@ -4622,7 +4632,7 @@ operand direct(immP addr) %{ // Indirect Memory Operand operand indirect(eRegP reg) %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(reg); format %{ "[$reg]" %} @@ -4661,7 +4671,7 @@ operand indOffset32(eRegP reg, immI off) %{ %} // Indirect Memory Plus Long Offset Operand -operand indOffset32X(eRegI reg, immP off) %{ +operand indOffset32X(rRegI reg, immP off) %{ match(AddP off reg); format %{ "[$reg + $off]" %} @@ -4674,7 +4684,7 @@ operand indOffset32X(eRegI reg, immP off) %{ %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndexOffset(eRegP reg, eRegI ireg, immI off) %{ +operand indIndexOffset(eRegP reg, rRegI ireg, immI off) %{ match(AddP (AddP reg ireg) off); op_cost(10); @@ -4688,7 +4698,7 @@ operand indIndexOffset(eRegP reg, eRegI ireg, immI off) %{ %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndex(eRegP reg, eRegI ireg) %{ +operand indIndex(eRegP reg, rRegI ireg) %{ match(AddP reg ireg); op_cost(10); @@ -4706,7 +4716,7 @@ operand indIndex(eRegP reg, eRegI ireg) %{ // // ------------------------------------------------------------------------- // // Scaled Memory Operands // // Indirect Memory Times Scale Plus Offset Operand -// operand indScaleOffset(immP off, eRegI ireg, immI2 scale) %{ +// operand indScaleOffset(immP off, rRegI ireg, immI2 scale) %{ // match(AddP off (LShiftI ireg scale)); // // op_cost(10); @@ -4720,7 +4730,7 @@ operand indIndex(eRegP reg, eRegI ireg) %{ // %} // Indirect Memory Times Scale Plus Index Register -operand indIndexScale(eRegP reg, eRegI ireg, immI2 scale) %{ +operand indIndexScale(eRegP reg, rRegI ireg, immI2 scale) %{ match(AddP reg (LShiftI ireg scale)); op_cost(10); @@ -4734,7 +4744,7 @@ operand indIndexScale(eRegP reg, eRegI ireg, immI2 scale) %{ %} // Indirect Memory Times Scale Plus Index Register Plus Offset Operand -operand indIndexScaleOffset(eRegP reg, immI off, eRegI ireg, immI2 scale) %{ +operand indIndexScaleOffset(eRegP reg, immI off, rRegI ireg, immI2 scale) %{ match(AddP (AddP reg (LShiftI ireg scale)) off); op_cost(10); @@ -4862,7 +4872,7 @@ operand stackSlotL(sRegL reg) %{ // Indirect Memory Operand operand indirect_win95_safe(eRegP_no_EBP reg) %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(reg); op_cost(100); @@ -4906,7 +4916,7 @@ operand indOffset32_win95_safe(eRegP_no_EBP reg, immI off) %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndexOffset_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI off) +operand indIndexOffset_win95_safe(eRegP_no_EBP reg, rRegI ireg, immI off) %{ match(AddP (AddP reg ireg) off); @@ -4921,7 +4931,7 @@ operand indIndexOffset_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI off) %} // Indirect Memory Times Scale Plus Index Register -operand indIndexScale_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI2 scale) +operand indIndexScale_win95_safe(eRegP_no_EBP reg, rRegI ireg, immI2 scale) %{ match(AddP reg (LShiftI ireg scale)); @@ -4936,7 +4946,7 @@ operand indIndexScale_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI2 scale) %} // Indirect Memory Times Scale Plus Index Register Plus Offset Operand -operand indIndexScaleOffset_win95_safe(eRegP_no_EBP reg, immI off, eRegI ireg, immI2 scale) +operand indIndexScaleOffset_win95_safe(eRegP_no_EBP reg, immI off, rRegI ireg, immI2 scale) %{ match(AddP (AddP reg (LShiftI ireg scale)) off); @@ -5125,7 +5135,7 @@ pipe_desc(S0, S1, S2, S3, S4, S5); // Or: _mem if it requires the big decoder and a memory unit. // Integer ALU reg operation -pipe_class ialu_reg(eRegI dst) %{ +pipe_class ialu_reg(rRegI dst) %{ single_instruction; dst : S4(write); dst : S3(read); @@ -5143,7 +5153,7 @@ pipe_class ialu_reg_long(eRegL dst) %{ %} // Integer ALU reg operation using big decoder -pipe_class ialu_reg_fat(eRegI dst) %{ +pipe_class ialu_reg_fat(rRegI dst) %{ single_instruction; dst : S4(write); dst : S3(read); @@ -5161,7 +5171,7 @@ pipe_class ialu_reg_long_fat(eRegL dst) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_reg_reg(eRegI dst, eRegI src) %{ +pipe_class ialu_reg_reg(rRegI dst, rRegI src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5179,7 +5189,7 @@ pipe_class ialu_reg_reg_long(eRegL dst, eRegL src) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_reg_reg_fat(eRegI dst, memory src) %{ +pipe_class ialu_reg_reg_fat(rRegI dst, memory src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5197,7 +5207,7 @@ pipe_class ialu_reg_reg_long_fat(eRegL dst, eRegL src) %{ %} // Integer ALU reg-mem operation -pipe_class ialu_reg_mem(eRegI dst, memory mem) %{ +pipe_class ialu_reg_mem(rRegI dst, memory mem) %{ single_instruction; dst : S5(write); mem : S3(read); @@ -5226,7 +5236,7 @@ pipe_class ialu_mem(memory mem) %} // Integer Store to Memory -pipe_class ialu_mem_reg(memory mem, eRegI src) %{ +pipe_class ialu_mem_reg(memory mem, rRegI src) %{ single_instruction; mem : S3(read); src : S5(read); @@ -5255,7 +5265,7 @@ pipe_class ialu_mem_imm(memory mem) %{ %} // Integer ALU0 reg-reg operation -pipe_class ialu_reg_reg_alu0(eRegI dst, eRegI src) %{ +pipe_class ialu_reg_reg_alu0(rRegI dst, rRegI src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5264,7 +5274,7 @@ pipe_class ialu_reg_reg_alu0(eRegI dst, eRegI src) %{ %} // Integer ALU0 reg-mem operation -pipe_class ialu_reg_mem_alu0(eRegI dst, memory mem) %{ +pipe_class ialu_reg_mem_alu0(rRegI dst, memory mem) %{ single_instruction; dst : S5(write); mem : S3(read); @@ -5274,7 +5284,7 @@ pipe_class ialu_reg_mem_alu0(eRegI dst, memory mem) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_cr_reg_reg(eFlagsReg cr, eRegI src1, eRegI src2) %{ +pipe_class ialu_cr_reg_reg(eFlagsReg cr, rRegI src1, rRegI src2) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5284,7 +5294,7 @@ pipe_class ialu_cr_reg_reg(eFlagsReg cr, eRegI src1, eRegI src2) %{ %} // Integer ALU reg-imm operation -pipe_class ialu_cr_reg_imm(eFlagsReg cr, eRegI src1) %{ +pipe_class ialu_cr_reg_imm(eFlagsReg cr, rRegI src1) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5293,7 +5303,7 @@ pipe_class ialu_cr_reg_imm(eFlagsReg cr, eRegI src1) %{ %} // Integer ALU reg-mem operation -pipe_class ialu_cr_reg_mem(eFlagsReg cr, eRegI src1, memory src2) %{ +pipe_class ialu_cr_reg_mem(eFlagsReg cr, rRegI src1, memory src2) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5304,7 +5314,7 @@ pipe_class ialu_cr_reg_mem(eFlagsReg cr, eRegI src1, memory src2) %{ %} // Conditional move reg-reg -pipe_class pipe_cmplt( eRegI p, eRegI q, eRegI y ) %{ +pipe_class pipe_cmplt( rRegI p, rRegI q, rRegI y ) %{ instruction_count(4); y : S4(read); q : S3(read); @@ -5313,7 +5323,7 @@ pipe_class pipe_cmplt( eRegI p, eRegI q, eRegI y ) %{ %} // Conditional move reg-reg -pipe_class pipe_cmov_reg( eRegI dst, eRegI src, eFlagsReg cr ) %{ +pipe_class pipe_cmov_reg( rRegI dst, rRegI src, eFlagsReg cr ) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5322,7 +5332,7 @@ pipe_class pipe_cmov_reg( eRegI dst, eRegI src, eFlagsReg cr ) %{ %} // Conditional move reg-mem -pipe_class pipe_cmov_mem( eFlagsReg cr, eRegI dst, memory src) %{ +pipe_class pipe_cmov_mem( eFlagsReg cr, rRegI dst, memory src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5573,7 +5583,7 @@ define %{ // in the encode section of the architecture description. //----------BSWAP-Instruction-------------------------------------------------- -instruct bytes_reverse_int(eRegI dst) %{ +instruct bytes_reverse_int(rRegI dst) %{ match(Set dst (ReverseBytesI dst)); format %{ "BSWAP $dst" %} @@ -5594,8 +5604,9 @@ instruct bytes_reverse_long(eRegL dst) %{ ins_pipe( ialu_reg_reg); %} -instruct bytes_reverse_unsigned_short(eRegI dst) %{ +instruct bytes_reverse_unsigned_short(rRegI dst, eFlagsReg cr) %{ match(Set dst (ReverseBytesUS dst)); + effect(KILL cr); format %{ "BSWAP $dst\n\t" "SHR $dst,16\n\t" %} @@ -5606,8 +5617,9 @@ instruct bytes_reverse_unsigned_short(eRegI dst) %{ ins_pipe( ialu_reg ); %} -instruct bytes_reverse_short(eRegI dst) %{ +instruct bytes_reverse_short(rRegI dst, eFlagsReg cr) %{ match(Set dst (ReverseBytesS dst)); + effect(KILL cr); format %{ "BSWAP $dst\n\t" "SAR $dst,16\n\t" %} @@ -5621,7 +5633,7 @@ instruct bytes_reverse_short(eRegI dst) %{ //---------- Zeros Count Instructions ------------------------------------------ -instruct countLeadingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countLeadingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosI src)); effect(KILL cr); @@ -5633,7 +5645,7 @@ instruct countLeadingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosI_bsr(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countLeadingZerosI_bsr(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(!UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosI src)); effect(KILL cr); @@ -5658,7 +5670,7 @@ instruct countLeadingZerosI_bsr(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countLeadingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ predicate(UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosL src)); effect(TEMP dst, KILL cr); @@ -5681,7 +5693,7 @@ instruct countLeadingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosL_bsr(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countLeadingZerosL_bsr(rRegI dst, eRegL src, eFlagsReg cr) %{ predicate(!UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosL src)); effect(TEMP dst, KILL cr); @@ -5717,7 +5729,7 @@ instruct countLeadingZerosL_bsr(eRegI dst, eRegL src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countTrailingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countTrailingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (CountTrailingZerosI src)); effect(KILL cr); @@ -5736,7 +5748,7 @@ instruct countTrailingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countTrailingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ match(Set dst (CountTrailingZerosL src)); effect(TEMP dst, KILL cr); @@ -5768,9 +5780,10 @@ instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ //---------- Population Count Instructions ------------------------------------- -instruct popCountI(eRegI dst, eRegI src) %{ +instruct popCountI(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI src)); + effect(KILL cr); format %{ "POPCNT $dst, $src" %} ins_encode %{ @@ -5779,9 +5792,10 @@ instruct popCountI(eRegI dst, eRegI src) %{ ins_pipe(ialu_reg); %} -instruct popCountI_mem(eRegI dst, memory mem) %{ +instruct popCountI_mem(rRegI dst, memory mem, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI (LoadI mem))); + effect(KILL cr); format %{ "POPCNT $dst, $mem" %} ins_encode %{ @@ -5791,7 +5805,7 @@ instruct popCountI_mem(eRegI dst, memory mem) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL(eRegI dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct popCountL(rRegI dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL src)); effect(KILL cr, TEMP tmp, TEMP dst); @@ -5808,7 +5822,7 @@ instruct popCountL(eRegI dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL_mem(eRegI dst, memory mem, eRegI tmp, eFlagsReg cr) %{ +instruct popCountL_mem(rRegI dst, memory mem, rRegI tmp, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL (LoadL mem))); effect(KILL cr, TEMP tmp, TEMP dst); @@ -5912,7 +5926,7 @@ instruct loadUB2L_immI8(eRegL dst, memory mem, immI8 mask, eFlagsReg cr) %{ %} // Load Short (16bit signed) -instruct loadS(eRegI dst, memory mem) %{ +instruct loadS(rRegI dst, memory mem) %{ match(Set dst (LoadS mem)); ins_cost(125); @@ -5926,7 +5940,7 @@ instruct loadS(eRegI dst, memory mem) %{ %} // Load Short (16 bit signed) to Byte (8 bit signed) -instruct loadS2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadS2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadS mem) twentyfour) twentyfour)); ins_cost(125); @@ -5957,7 +5971,7 @@ instruct loadS2L(eRegL dst, memory mem, eFlagsReg cr) %{ %} // Load Unsigned Short/Char (16bit unsigned) -instruct loadUS(eRegI dst, memory mem) %{ +instruct loadUS(rRegI dst, memory mem) %{ match(Set dst (LoadUS mem)); ins_cost(125); @@ -5971,7 +5985,7 @@ instruct loadUS(eRegI dst, memory mem) %{ %} // Load Unsigned Short/Char (16 bit UNsigned) to Byte (8 bit signed) -instruct loadUS2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadUS2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadUS mem) twentyfour) twentyfour)); ins_cost(125); @@ -6032,7 +6046,7 @@ instruct loadUS2L_immI16(eRegL dst, memory mem, immI16 mask, eFlagsReg cr) %{ %} // Load Integer -instruct loadI(eRegI dst, memory mem) %{ +instruct loadI(rRegI dst, memory mem) %{ match(Set dst (LoadI mem)); ins_cost(125); @@ -6046,7 +6060,7 @@ instruct loadI(eRegI dst, memory mem) %{ %} // Load Integer (32 bit signed) to Byte (8 bit signed) -instruct loadI2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadI2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadI mem) twentyfour) twentyfour)); ins_cost(125); @@ -6058,7 +6072,7 @@ instruct loadI2B(eRegI dst, memory mem, immI_24 twentyfour) %{ %} // Load Integer (32 bit signed) to Unsigned Byte (8 bit UNsigned) -instruct loadI2UB(eRegI dst, memory mem, immI_255 mask) %{ +instruct loadI2UB(rRegI dst, memory mem, immI_255 mask) %{ match(Set dst (AndI (LoadI mem) mask)); ins_cost(125); @@ -6070,7 +6084,7 @@ instruct loadI2UB(eRegI dst, memory mem, immI_255 mask) %{ %} // Load Integer (32 bit signed) to Short (16 bit signed) -instruct loadI2S(eRegI dst, memory mem, immI_16 sixteen) %{ +instruct loadI2S(rRegI dst, memory mem, immI_16 sixteen) %{ match(Set dst (RShiftI (LShiftI (LoadI mem) sixteen) sixteen)); ins_cost(125); @@ -6082,7 +6096,7 @@ instruct loadI2S(eRegI dst, memory mem, immI_16 sixteen) %{ %} // Load Integer (32 bit signed) to Unsigned Short/Char (16 bit UNsigned) -instruct loadI2US(eRegI dst, memory mem, immI_65535 mask) %{ +instruct loadI2US(rRegI dst, memory mem, immI_65535 mask) %{ match(Set dst (AndI (LoadI mem) mask)); ins_cost(125); @@ -6243,7 +6257,7 @@ instruct loadLX_reg_volatile(eRegL dst, memory mem, regD tmp) %{ %} // Load Range -instruct loadRange(eRegI dst, memory mem) %{ +instruct loadRange(rRegI dst, memory mem) %{ match(Set dst (LoadRange mem)); ins_cost(125); @@ -6340,66 +6354,6 @@ instruct loadFPR(regFPR dst, memory mem) %{ ins_pipe( fpu_reg_mem ); %} -// Load Aligned Packed Byte to XMM register -instruct loadA8B(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load8B mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed8B" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Short to XMM register -instruct loadA4S(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load4S mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4S" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Char to XMM register -instruct loadA4C(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load4C mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4C" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Integer to XMM register -instruct load2IU(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load2I mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2I" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Single to XMM -instruct loadA2F(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load2F mem)); - ins_cost(145); - format %{ "MOVQ $dst,$mem\t! packed2F" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - // Load Effective Address instruct leaP8(eRegP dst, indOffset8 mem) %{ match(Set dst mem); @@ -6452,7 +6406,7 @@ instruct leaPIdxScaleOff(eRegP dst, indIndexScaleOffset mem) %{ %} // Load Constant -instruct loadConI(eRegI dst, immI src) %{ +instruct loadConI(rRegI dst, immI src) %{ match(Set dst src); format %{ "MOV $dst,$src" %} @@ -6461,7 +6415,7 @@ instruct loadConI(eRegI dst, immI src) %{ %} // Load Constant zero -instruct loadConI0(eRegI dst, immI0 src, eFlagsReg cr) %{ +instruct loadConI0(rRegI dst, immI0 src, eFlagsReg cr) %{ match(Set dst src); effect(KILL cr); @@ -6629,7 +6583,7 @@ instruct loadConD0(regD dst, immD0 src) %{ %} // Load Stack Slot -instruct loadSSI(eRegI dst, stackSlotI src) %{ +instruct loadSSI(rRegI dst, stackSlotI src) %{ match(Set dst src); ins_cost(125); @@ -6856,7 +6810,7 @@ instruct storeB(memory mem, xRegI src) %{ %} // Store Char/Short -instruct storeC(memory mem, eRegI src) %{ +instruct storeC(memory mem, rRegI src) %{ match(Set mem (StoreC mem src)); ins_cost(125); @@ -6867,7 +6821,7 @@ instruct storeC(memory mem, eRegI src) %{ %} // Store Integer -instruct storeI(memory mem, eRegI src) %{ +instruct storeI(memory mem, rRegI src) %{ match(Set mem (StoreI mem src)); ins_cost(125); @@ -7011,42 +6965,6 @@ instruct storeImmB(memory mem, immI8 src) %{ ins_pipe( ialu_mem_imm ); %} -// Store Aligned Packed Byte XMM register to memory -instruct storeA8B(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store8B mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed8B" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Char/Short XMM register to memory -instruct storeA4C(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store4C mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed4C" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Integer XMM register to memory -instruct storeA2I(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store2I mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2I" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store CMS card-mark Immediate instruct storeImmCM(memory mem, immI8 src) %{ match(Set mem (StoreCM mem src)); @@ -7108,18 +7026,6 @@ instruct storeF(memory mem, regF src) %{ ins_pipe( pipe_slow ); %} -// Store Aligned Packed Single Float XMM register to memory -instruct storeA2F(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store2F mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2F" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store Float instruct storeFPR( memory mem, regFPR1 src) %{ predicate(UseSSE==0); @@ -7181,7 +7087,7 @@ instruct storeF_imm( memory mem, immF src) %{ %} // Store Integer to stack slot -instruct storeSSI(stackSlotI dst, eRegI src) %{ +instruct storeSSI(stackSlotI dst, rRegI src) %{ match(Set dst src); ins_cost(100); @@ -7306,7 +7212,7 @@ instruct castX2P(eAXRegP dst, eAXRegI src) %{ ins_pipe(empty); %} -instruct castP2X(eRegI dst, eRegP src ) %{ +instruct castP2X(rRegI dst, eRegP src ) %{ match(Set dst (CastP2X src)); ins_cost(50); format %{ "MOV $dst, $src\t# CastP2X" %} @@ -7316,7 +7222,7 @@ instruct castP2X(eRegI dst, eRegP src ) %{ //----------Conditional Move--------------------------------------------------- // Conditional move -instruct jmovI_reg(cmpOp cop, eFlagsReg cr, eRegI dst, eRegI src) %{ +instruct jmovI_reg(cmpOp cop, eFlagsReg cr, rRegI dst, rRegI src) %{ predicate(!VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7333,7 +7239,7 @@ instruct jmovI_reg(cmpOp cop, eFlagsReg cr, eRegI dst, eRegI src) %{ ins_pipe( pipe_cmov_reg ); %} -instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src) %{ +instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, rRegI dst, rRegI src) %{ predicate(!VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7350,7 +7256,7 @@ instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_reg(eRegI dst, eRegI src, eFlagsReg cr, cmpOp cop ) %{ +instruct cmovI_reg(rRegI dst, rRegI src, eFlagsReg cr, cmpOp cop ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7360,7 +7266,7 @@ instruct cmovI_reg(eRegI dst, eRegI src, eFlagsReg cr, cmpOp cop ) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src ) %{ +instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, rRegI dst, rRegI src ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7370,7 +7276,7 @@ instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src ) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, eRegI src ) %{ +instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, rRegI dst, rRegI src ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7380,7 +7286,7 @@ instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, eRegI src ) %{ %} // Conditional move -instruct cmovI_mem(cmpOp cop, eFlagsReg cr, eRegI dst, memory src) %{ +instruct cmovI_mem(cmpOp cop, eFlagsReg cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7391,7 +7297,7 @@ instruct cmovI_mem(cmpOp cop, eFlagsReg cr, eRegI dst, memory src) %{ %} // Conditional move -instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, eRegI dst, memory src) %{ +instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7401,7 +7307,7 @@ instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, eRegI dst, memory src) %{ ins_pipe( pipe_cmov_mem ); %} -instruct cmovI_memUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, memory src) %{ +instruct cmovI_memUCF(cmpOpUCF cop, eFlagsRegUCF cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7655,7 +7561,7 @@ instruct cmovL_regUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegL dst, eRegL src) %{ //----------Arithmetic Instructions-------------------------------------------- //----------Addition Instructions---------------------------------------------- // Integer Addition Instructions -instruct addI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct addI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AddI dst src)); effect(KILL cr); @@ -7666,7 +7572,7 @@ instruct addI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct addI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct addI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (AddI dst src)); effect(KILL cr); @@ -7676,7 +7582,7 @@ instruct addI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ +instruct incI_eReg(rRegI dst, immI1 src, eFlagsReg cr) %{ predicate(UseIncDec); match(Set dst (AddI dst src)); effect(KILL cr); @@ -7688,7 +7594,7 @@ instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct leaI_eReg_immI(eRegI dst, eRegI src0, immI src1) %{ +instruct leaI_eReg_immI(rRegI dst, rRegI src0, immI src1) %{ match(Set dst (AddI src0 src1)); ins_cost(110); @@ -7708,7 +7614,7 @@ instruct leaP_eReg_immI(eRegP dst, eRegP src0, immI src1) %{ ins_pipe( ialu_reg_reg ); %} -instruct decI_eReg(eRegI dst, immI_M1 src, eFlagsReg cr) %{ +instruct decI_eReg(rRegI dst, immI_M1 src, eFlagsReg cr) %{ predicate(UseIncDec); match(Set dst (AddI dst src)); effect(KILL cr); @@ -7720,7 +7626,7 @@ instruct decI_eReg(eRegI dst, immI_M1 src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct addP_eReg(eRegP dst, eRegI src, eFlagsReg cr) %{ +instruct addP_eReg(eRegP dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AddP dst src)); effect(KILL cr); @@ -7742,7 +7648,7 @@ instruct addP_eReg_imm(eRegP dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct addI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct addI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (AddI dst (LoadI src))); effect(KILL cr); @@ -7753,7 +7659,7 @@ instruct addI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ ins_pipe( ialu_reg_mem ); %} -instruct addI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct addI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (AddI (LoadI dst) src))); effect(KILL cr); @@ -7815,7 +7721,7 @@ instruct castPP( eRegP dst ) %{ ins_pipe( empty ); %} -instruct castII( eRegI dst ) %{ +instruct castII( rRegI dst ) %{ match(Set dst (CastII dst)); format %{ "#castII of $dst" %} ins_encode( /*empty encoding*/ ); @@ -7835,50 +7741,6 @@ instruct loadPLocked(eRegP dst, memory mem) %{ ins_pipe( ialu_reg_mem ); %} -// LoadLong-locked - same as a volatile long load when used with compare-swap -instruct loadLLocked(stackSlotL dst, memory mem) %{ - predicate(UseSSE<=1); - match(Set dst (LoadLLocked mem)); - - ins_cost(200); - format %{ "FILD $mem\t# Atomic volatile long load\n\t" - "FISTp $dst" %} - ins_encode(enc_loadL_volatile(mem,dst)); - ins_pipe( fpu_reg_mem ); -%} - -instruct loadLX_Locked(stackSlotL dst, memory mem, regD tmp) %{ - predicate(UseSSE>=2); - match(Set dst (LoadLLocked mem)); - effect(TEMP tmp); - ins_cost(180); - format %{ "MOVSD $tmp,$mem\t# Atomic volatile long load\n\t" - "MOVSD $dst,$tmp" %} - ins_encode %{ - __ movdbl($tmp$$XMMRegister, $mem$$Address); - __ movdbl(Address(rsp, $dst$$disp), $tmp$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -instruct loadLX_reg_Locked(eRegL dst, memory mem, regD tmp) %{ - predicate(UseSSE>=2); - match(Set dst (LoadLLocked mem)); - effect(TEMP tmp); - ins_cost(160); - format %{ "MOVSD $tmp,$mem\t# Atomic volatile long load\n\t" - "MOVD $dst.lo,$tmp\n\t" - "PSRLQ $tmp,32\n\t" - "MOVD $dst.hi,$tmp" %} - ins_encode %{ - __ movdbl($tmp$$XMMRegister, $mem$$Address); - __ movdl($dst$$Register, $tmp$$XMMRegister); - __ psrlq($tmp$$XMMRegister, 32); - __ movdl(HIGH_FROM_LOW($dst$$Register), $tmp$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Conditional-store of the updated heap-top. // Used during allocation of the shared heap. // Sets flags (EQ) on success. Implemented with a CMPXCHG on Intel. @@ -7893,7 +7755,7 @@ instruct storePConditional( memory heap_top_ptr, eAXRegP oldval, eRegP newval, e // Conditional-store of an int value. // ZF flag is set on success, reset otherwise. Implemented with a CMPXCHG on Intel. -instruct storeIConditional( memory mem, eAXRegI oldval, eRegI newval, eFlagsReg cr ) %{ +instruct storeIConditional( memory mem, eAXRegI oldval, rRegI newval, eFlagsReg cr ) %{ match(Set cr (StoreIConditional mem (Binary oldval newval))); effect(KILL oldval); format %{ "CMPXCHG $mem,$newval\t# If EAX==$mem Then store $newval into $mem" %} @@ -7926,7 +7788,7 @@ instruct storeLConditional( memory mem, eADXRegL oldval, eBCXRegL newval, eFlags // No flag versions for CompareAndSwap{P,I,L} because matcher can't match them -instruct compareAndSwapL( eRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ +instruct compareAndSwapL( rRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ match(Set res (CompareAndSwapL mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG8 [$mem_ptr],$newval\t# If EDX:EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7939,7 +7801,7 @@ instruct compareAndSwapL( eRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL ins_pipe( pipe_cmpxchg ); %} -instruct compareAndSwapP( eRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP newval, eFlagsReg cr) %{ +instruct compareAndSwapP( rRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP newval, eFlagsReg cr) %{ match(Set res (CompareAndSwapP mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG [$mem_ptr],$newval\t# If EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7951,7 +7813,7 @@ instruct compareAndSwapP( eRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP new ins_pipe( pipe_cmpxchg ); %} -instruct compareAndSwapI( eRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newval, eFlagsReg cr) %{ +instruct compareAndSwapI( rRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newval, eFlagsReg cr) %{ match(Set res (CompareAndSwapI mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG [$mem_ptr],$newval\t# If EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7965,7 +7827,7 @@ instruct compareAndSwapI( eRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newv //----------Subtraction Instructions------------------------------------------- // Integer Subtraction Instructions -instruct subI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct subI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (SubI dst src)); effect(KILL cr); @@ -7976,7 +7838,7 @@ instruct subI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct subI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct subI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (SubI dst src)); effect(KILL cr); @@ -7987,7 +7849,7 @@ instruct subI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct subI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct subI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (SubI dst (LoadI src))); effect(KILL cr); @@ -7998,7 +7860,7 @@ instruct subI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ ins_pipe( ialu_reg_mem ); %} -instruct subI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct subI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (SubI (LoadI dst) src))); effect(KILL cr); @@ -8010,7 +7872,7 @@ instruct subI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ %} // Subtract from a pointer -instruct subP_eReg(eRegP dst, eRegI src, immI0 zero, eFlagsReg cr) %{ +instruct subP_eReg(eRegP dst, rRegI src, immI0 zero, eFlagsReg cr) %{ match(Set dst (AddP dst (SubI zero src))); effect(KILL cr); @@ -8021,7 +7883,7 @@ instruct subP_eReg(eRegP dst, eRegI src, immI0 zero, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct negI_eReg(eRegI dst, immI0 zero, eFlagsReg cr) %{ +instruct negI_eReg(rRegI dst, immI0 zero, eFlagsReg cr) %{ match(Set dst (SubI zero dst)); effect(KILL cr); @@ -8036,7 +7898,7 @@ instruct negI_eReg(eRegI dst, immI0 zero, eFlagsReg cr) %{ //----------Multiplication/Division Instructions------------------------------- // Integer Multiplication Instructions // Multiply Register -instruct mulI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct mulI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (MulI dst src)); effect(KILL cr); @@ -8049,7 +7911,7 @@ instruct mulI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // Multiply 32-bit Immediate -instruct mulI_eReg_imm(eRegI dst, eRegI src, immI imm, eFlagsReg cr) %{ +instruct mulI_eReg_imm(rRegI dst, rRegI src, immI imm, eFlagsReg cr) %{ match(Set dst (MulI src imm)); effect(KILL cr); @@ -8105,7 +7967,7 @@ instruct mulI_imm_RShift_high(eDXRegI dst, nadxRegI src1, eADXRegL_low_only src2 %} // Multiply Memory 32-bit Immediate -instruct mulI_mem_imm(eRegI dst, memory src, immI imm, eFlagsReg cr) %{ +instruct mulI_mem_imm(rRegI dst, memory src, immI imm, eFlagsReg cr) %{ match(Set dst (MulI (LoadI src) imm)); effect(KILL cr); @@ -8117,7 +7979,7 @@ instruct mulI_mem_imm(eRegI dst, memory src, immI imm, eFlagsReg cr) %{ %} // Multiply Memory -instruct mulI(eRegI dst, memory src, eFlagsReg cr) %{ +instruct mulI(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (MulI dst (LoadI src))); effect(KILL cr); @@ -8154,7 +8016,7 @@ instruct mulIS_eReg(eADXRegL dst, immL_32bits mask, eFlagsReg flags, eAXRegI src %} // Multiply Register Long -instruct mulL_eReg(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); ins_cost(4*100+3*400); @@ -8172,7 +8034,7 @@ instruct mulL_eReg(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Multiply Register Long where the left operand's high 32 bits are zero -instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(is_operand_hi32_zero(n->in(1))); match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); @@ -8193,7 +8055,7 @@ instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Multiply Register Long where the right operand's high 32 bits are zero -instruct mulL_eReg_rhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_rhi0(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(is_operand_hi32_zero(n->in(2))); match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); @@ -8229,7 +8091,7 @@ instruct mulL_eReg_hi0(eADXRegL dst, eRegL src, eFlagsReg cr) %{ %} // Multiply Register Long by small constant -instruct mulL_eReg_con(eADXRegL dst, immL_127 src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_con(eADXRegL dst, immL_127 src, rRegI tmp, eFlagsReg cr) %{ match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); ins_cost(2*100+2*400); @@ -8327,7 +8189,7 @@ instruct modL_eReg( eADXRegL dst, eRegL src1, eRegL src2, eFlagsReg cr, eCXRegI %} // Divide Register Long (no special case since divisor != -1) -instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlagsReg cr ) %{ +instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, rRegI tmp, rRegI tmp2, eFlagsReg cr ) %{ match(Set dst (DivL dst imm)); effect( TEMP tmp, TEMP tmp2, KILL cr ); ins_cost(1000); @@ -8398,7 +8260,7 @@ instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlag %} // Remainder Register Long (remainder fit into 32 bits) -instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlagsReg cr ) %{ +instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, rRegI tmp, rRegI tmp2, eFlagsReg cr ) %{ match(Set dst (ModL dst imm)); effect( TEMP tmp, TEMP tmp2, KILL cr ); ins_cost(1000); @@ -8466,7 +8328,7 @@ instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlag // Integer Shift Instructions // Shift Left by one -instruct shlI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct shlI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8478,7 +8340,7 @@ instruct shlI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ %} // Shift Left by 8-bit immediate -instruct salI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct salI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8490,7 +8352,7 @@ instruct salI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ %} // Shift Left by variable -instruct salI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct salI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8502,7 +8364,7 @@ instruct salI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ %} // Arithmetic shift right by one -instruct sarI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct sarI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8524,7 +8386,7 @@ instruct sarI_mem_1(memory dst, immI1 shift, eFlagsReg cr) %{ %} // Arithmetic Shift Right by 8-bit immediate -instruct sarI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct sarI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8547,7 +8409,7 @@ instruct sarI_mem_imm(memory dst, immI8 shift, eFlagsReg cr) %{ %} // Arithmetic Shift Right by variable -instruct sarI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct sarI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8559,7 +8421,7 @@ instruct sarI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ %} // Logical shift right by one -instruct shrI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct shrI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8571,7 +8433,7 @@ instruct shrI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ %} // Logical Shift Right by 8-bit immediate -instruct shrI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct shrI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8585,7 +8447,7 @@ instruct shrI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ // Logical Shift Right by 24, followed by Arithmetic Shift Left by 24. // This idiom is used by the compiler for the i2b bytecode. -instruct i2b(eRegI dst, xRegI src, immI_24 twentyfour) %{ +instruct i2b(rRegI dst, xRegI src, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI src twentyfour) twentyfour)); size(3); @@ -8598,7 +8460,7 @@ instruct i2b(eRegI dst, xRegI src, immI_24 twentyfour) %{ // Logical Shift Right by 16, followed by Arithmetic Shift Left by 16. // This idiom is used by the compiler the i2s bytecode. -instruct i2s(eRegI dst, xRegI src, immI_16 sixteen) %{ +instruct i2s(rRegI dst, xRegI src, immI_16 sixteen) %{ match(Set dst (RShiftI (LShiftI src sixteen) sixteen)); size(3); @@ -8611,7 +8473,7 @@ instruct i2s(eRegI dst, xRegI src, immI_16 sixteen) %{ // Logical Shift Right by variable -instruct shrI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct shrI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8627,7 +8489,7 @@ instruct shrI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ //----------Integer Logical Instructions--------------------------------------- // And Instructions // And Register with Register -instruct andI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct andI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AndI dst src)); effect(KILL cr); @@ -8639,7 +8501,7 @@ instruct andI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // And Register with Immediate -instruct andI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct andI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (AndI dst src)); effect(KILL cr); @@ -8651,7 +8513,7 @@ instruct andI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // And Register with Memory -instruct andI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct andI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (AndI dst (LoadI src))); effect(KILL cr); @@ -8663,7 +8525,7 @@ instruct andI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // And Memory with Register -instruct andI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct andI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (AndI (LoadI dst) src))); effect(KILL cr); @@ -8689,7 +8551,7 @@ instruct andI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ // Or Instructions // Or Register with Register -instruct orI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct orI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (OrI dst src)); effect(KILL cr); @@ -8700,7 +8562,7 @@ instruct orI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct orI_eReg_castP2X(eRegI dst, eRegP src, eFlagsReg cr) %{ +instruct orI_eReg_castP2X(rRegI dst, eRegP src, eFlagsReg cr) %{ match(Set dst (OrI dst (CastP2X src))); effect(KILL cr); @@ -8713,7 +8575,7 @@ instruct orI_eReg_castP2X(eRegI dst, eRegP src, eFlagsReg cr) %{ // Or Register with Immediate -instruct orI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct orI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (OrI dst src)); effect(KILL cr); @@ -8725,7 +8587,7 @@ instruct orI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // Or Register with Memory -instruct orI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct orI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (OrI dst (LoadI src))); effect(KILL cr); @@ -8737,7 +8599,7 @@ instruct orI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // Or Memory with Register -instruct orI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct orI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (OrI (LoadI dst) src))); effect(KILL cr); @@ -8763,7 +8625,7 @@ instruct orI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ // ROL/ROR // ROL expand -instruct rolI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct rolI_eReg_imm1(rRegI dst, immI1 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROL $dst, $shift" %} @@ -8772,7 +8634,7 @@ instruct rolI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct rolI_eReg_imm8(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct rolI_eReg_imm8(rRegI dst, immI8 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROL $dst, $shift" %} @@ -8792,7 +8654,7 @@ instruct rolI_eReg_CL(ncxRegI dst, eCXRegI shift, eFlagsReg cr) %{ // end of ROL expand // ROL 32bit by one once -instruct rolI_eReg_i1(eRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ +instruct rolI_eReg_i1(rRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ match(Set dst ( OrI (LShiftI dst lshift) (URShiftI dst rshift))); expand %{ @@ -8801,7 +8663,7 @@ instruct rolI_eReg_i1(eRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ %} // ROL 32bit var by imm8 once -instruct rolI_eReg_i8(eRegI dst, immI8 lshift, immI8 rshift, eFlagsReg cr) %{ +instruct rolI_eReg_i8(rRegI dst, immI8 lshift, immI8 rshift, eFlagsReg cr) %{ predicate( 0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 0x1f)); match(Set dst ( OrI (LShiftI dst lshift) (URShiftI dst rshift))); @@ -8829,7 +8691,7 @@ instruct rolI_eReg_Var_C32(ncxRegI dst, eCXRegI shift, immI_32 c32, eFlagsReg cr %} // ROR expand -instruct rorI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct rorI_eReg_imm1(rRegI dst, immI1 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROR $dst, $shift" %} @@ -8838,7 +8700,7 @@ instruct rorI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct rorI_eReg_imm8(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct rorI_eReg_imm8(rRegI dst, immI8 shift, eFlagsReg cr) %{ effect (USE_DEF dst, USE shift, KILL cr); format %{ "ROR $dst, $shift" %} @@ -8858,7 +8720,7 @@ instruct rorI_eReg_CL(ncxRegI dst, eCXRegI shift, eFlagsReg cr)%{ // end of ROR expand // ROR right once -instruct rorI_eReg_i1(eRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ +instruct rorI_eReg_i1(rRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ match(Set dst ( OrI (URShiftI dst rshift) (LShiftI dst lshift))); expand %{ @@ -8867,7 +8729,7 @@ instruct rorI_eReg_i1(eRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ %} // ROR 32bit by immI8 once -instruct rorI_eReg_i8(eRegI dst, immI8 rshift, immI8 lshift, eFlagsReg cr) %{ +instruct rorI_eReg_i8(rRegI dst, immI8 rshift, immI8 lshift, eFlagsReg cr) %{ predicate( 0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 0x1f)); match(Set dst ( OrI (URShiftI dst rshift) (LShiftI dst lshift))); @@ -8896,7 +8758,7 @@ instruct rorI_eReg_Var_C32(ncxRegI dst, eCXRegI shift, immI_32 c32, eFlagsReg cr // Xor Instructions // Xor Register with Register -instruct xorI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct xorI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (XorI dst src)); effect(KILL cr); @@ -8908,7 +8770,7 @@ instruct xorI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // Xor Register with Immediate -1 -instruct xorI_eReg_im1(eRegI dst, immI_M1 imm) %{ +instruct xorI_eReg_im1(rRegI dst, immI_M1 imm) %{ match(Set dst (XorI dst imm)); size(2); @@ -8920,7 +8782,7 @@ instruct xorI_eReg_im1(eRegI dst, immI_M1 imm) %{ %} // Xor Register with Immediate -instruct xorI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct xorI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (XorI dst src)); effect(KILL cr); @@ -8932,7 +8794,7 @@ instruct xorI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // Xor Register with Memory -instruct xorI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct xorI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (XorI dst (LoadI src))); effect(KILL cr); @@ -8944,7 +8806,7 @@ instruct xorI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // Xor Memory with Register -instruct xorI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct xorI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (XorI (LoadI dst) src))); effect(KILL cr); @@ -8969,14 +8831,14 @@ instruct xorI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ //----------Convert Int to Boolean--------------------------------------------- -instruct movI_nocopy(eRegI dst, eRegI src) %{ +instruct movI_nocopy(rRegI dst, rRegI src) %{ effect( DEF dst, USE src ); format %{ "MOV $dst,$src" %} ins_encode( enc_Copy( dst, src) ); ins_pipe( ialu_reg_reg ); %} -instruct ci2b( eRegI dst, eRegI src, eFlagsReg cr ) %{ +instruct ci2b( rRegI dst, rRegI src, eFlagsReg cr ) %{ effect( USE_DEF dst, USE src, KILL cr ); size(4); @@ -8987,7 +8849,7 @@ instruct ci2b( eRegI dst, eRegI src, eFlagsReg cr ) %{ ins_pipe( ialu_reg_reg_long ); %} -instruct convI2B( eRegI dst, eRegI src, eFlagsReg cr ) %{ +instruct convI2B( rRegI dst, rRegI src, eFlagsReg cr ) %{ match(Set dst (Conv2B src)); expand %{ @@ -8996,14 +8858,14 @@ instruct convI2B( eRegI dst, eRegI src, eFlagsReg cr ) %{ %} %} -instruct movP_nocopy(eRegI dst, eRegP src) %{ +instruct movP_nocopy(rRegI dst, eRegP src) %{ effect( DEF dst, USE src ); format %{ "MOV $dst,$src" %} ins_encode( enc_Copy( dst, src) ); ins_pipe( ialu_reg_reg ); %} -instruct cp2b( eRegI dst, eRegP src, eFlagsReg cr ) %{ +instruct cp2b( rRegI dst, eRegP src, eFlagsReg cr ) %{ effect( USE_DEF dst, USE src, KILL cr ); format %{ "NEG $dst\n\t" "ADC $dst,$src" %} @@ -9012,7 +8874,7 @@ instruct cp2b( eRegI dst, eRegP src, eFlagsReg cr ) %{ ins_pipe( ialu_reg_reg_long ); %} -instruct convP2B( eRegI dst, eRegP src, eFlagsReg cr ) %{ +instruct convP2B( rRegI dst, eRegP src, eFlagsReg cr ) %{ match(Set dst (Conv2B src)); expand %{ @@ -9037,7 +8899,7 @@ instruct cmpLTMask( eCXRegI dst, ncxRegI p, ncxRegI q, eFlagsReg cr ) %{ ins_pipe( pipe_slow ); %} -instruct cmpLTMask0( eRegI dst, immI0 zero, eFlagsReg cr ) %{ +instruct cmpLTMask0( rRegI dst, immI0 zero, eFlagsReg cr ) %{ match(Set dst (CmpLTMask dst zero)); effect( DEF dst, KILL cr ); ins_cost(100); @@ -9509,7 +9371,7 @@ instruct cmpDPR_cc(eFlagsRegU cr, regDPR src1, regDPR src2, eAXRegI rax) %{ %} // Compare vs zero into -1,0,1 -instruct cmpDPR_0(eRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpDPR_0(rRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE<=1); match(Set dst (CmpD3 src1 zero)); effect(KILL cr, KILL rax); @@ -9523,7 +9385,7 @@ instruct cmpDPR_0(eRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg c %} // Compare into -1,0,1 -instruct cmpDPR_reg(eRegI dst, regDPR src1, regDPR src2, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpDPR_reg(rRegI dst, regDPR src1, regDPR src2, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE<=1); match(Set dst (CmpD3 src1 src2)); effect(KILL cr, KILL rax); @@ -10100,162 +9962,68 @@ instruct sqrtDPR_reg(regDPR dst, regDPR src) %{ ins_pipe( pipe_slow ); %} -instruct powDPR_reg(regDPR X, regDPR1 Y, eAXRegI rax, eBXRegI rbx, eCXRegI rcx) %{ +instruct powDPR_reg(regDPR X, regDPR1 Y, eAXRegI rax, eDXRegI rdx, eCXRegI rcx, eFlagsReg cr) %{ predicate (UseSSE<=1); match(Set Y (PowD X Y)); // Raise X to the Yth power - effect(KILL rax, KILL rbx, KILL rcx); - format %{ "SUB ESP,8\t\t# Fast-path POW encoding\n\t" - "FLD_D $X\n\t" - "FYL2X \t\t\t# Q=Y*ln2(X)\n\t" - - "FDUP \t\t\t# Q Q\n\t" - "FRNDINT\t\t\t# int(Q) Q\n\t" - "FSUB ST(1),ST(0)\t# int(Q) frac(Q)\n\t" - "FISTP dword [ESP]\n\t" - "F2XM1 \t\t\t# 2^frac(Q)-1 int(Q)\n\t" - "FLD1 \t\t\t# 1 2^frac(Q)-1 int(Q)\n\t" - "FADDP \t\t\t# 2^frac(Q) int(Q)\n\t" // could use FADD [1.000] instead - "MOV EAX,[ESP]\t# Pick up int(Q)\n\t" - "MOV ECX,0xFFFFF800\t# Overflow mask\n\t" - "ADD EAX,1023\t\t# Double exponent bias\n\t" - "MOV EBX,EAX\t\t# Preshifted biased expo\n\t" - "SHL EAX,20\t\t# Shift exponent into place\n\t" - "TEST EBX,ECX\t\t# Check for overflow\n\t" - "CMOVne EAX,ECX\t\t# If overflow, stuff NaN into EAX\n\t" - "MOV [ESP+4],EAX\t# Marshal 64-bit scaling double\n\t" - "MOV [ESP+0],0\n\t" - "FMUL ST(0),[ESP+0]\t# Scale\n\t" - - "ADD ESP,8" - %} - ins_encode( push_stack_temp_qword, - Push_Reg_DPR(X), - Opcode(0xD9), Opcode(0xF1), // fyl2x - pow_exp_core_encoding, - pop_stack_temp_qword); + effect(KILL rax, KILL rdx, KILL rcx, KILL cr); + format %{ "fast_pow $X $Y -> $Y // KILL $rax, $rcx, $rdx" %} + ins_encode %{ + __ subptr(rsp, 8); + __ fld_s($X$$reg - 1); + __ fast_pow(); + __ addptr(rsp, 8); + %} ins_pipe( pipe_slow ); %} -instruct powD_reg(regD dst, regD src0, regD src1, regDPR1 tmp1, eAXRegI rax, eBXRegI rbx, eCXRegI rcx ) %{ +instruct powD_reg(regD dst, regD src0, regD src1, eAXRegI rax, eDXRegI rdx, eCXRegI rcx, eFlagsReg cr) %{ predicate (UseSSE>=2); match(Set dst (PowD src0 src1)); // Raise src0 to the src1'th power - effect(KILL tmp1, KILL rax, KILL rbx, KILL rcx ); - format %{ "SUB ESP,8\t\t# Fast-path POW encoding\n\t" - "MOVSD [ESP],$src1\n\t" - "FLD FPR1,$src1\n\t" - "MOVSD [ESP],$src0\n\t" - "FLD FPR1,$src0\n\t" - "FYL2X \t\t\t# Q=Y*ln2(X)\n\t" - - "FDUP \t\t\t# Q Q\n\t" - "FRNDINT\t\t\t# int(Q) Q\n\t" - "FSUB ST(1),ST(0)\t# int(Q) frac(Q)\n\t" - "FISTP dword [ESP]\n\t" - "F2XM1 \t\t\t# 2^frac(Q)-1 int(Q)\n\t" - "FLD1 \t\t\t# 1 2^frac(Q)-1 int(Q)\n\t" - "FADDP \t\t\t# 2^frac(Q) int(Q)\n\t" // could use FADD [1.000] instead - "MOV EAX,[ESP]\t# Pick up int(Q)\n\t" - "MOV ECX,0xFFFFF800\t# Overflow mask\n\t" - "ADD EAX,1023\t\t# Double exponent bias\n\t" - "MOV EBX,EAX\t\t# Preshifted biased expo\n\t" - "SHL EAX,20\t\t# Shift exponent into place\n\t" - "TEST EBX,ECX\t\t# Check for overflow\n\t" - "CMOVne EAX,ECX\t\t# If overflow, stuff NaN into EAX\n\t" - "MOV [ESP+4],EAX\t# Marshal 64-bit scaling double\n\t" - "MOV [ESP+0],0\n\t" - "FMUL ST(0),[ESP+0]\t# Scale\n\t" - - "FST_D [ESP]\n\t" - "MOVSD $dst,[ESP]\n\t" - "ADD ESP,8" - %} - ins_encode( push_stack_temp_qword, - push_xmm_to_fpr1(src1), - push_xmm_to_fpr1(src0), - Opcode(0xD9), Opcode(0xF1), // fyl2x - pow_exp_core_encoding, - Push_ResultD(dst) ); + effect(KILL rax, KILL rdx, KILL rcx, KILL cr); + format %{ "fast_pow $src0 $src1 -> $dst // KILL $rax, $rcx, $rdx" %} + ins_encode %{ + __ subptr(rsp, 8); + __ movdbl(Address(rsp, 0), $src1$$XMMRegister); + __ fld_d(Address(rsp, 0)); + __ movdbl(Address(rsp, 0), $src0$$XMMRegister); + __ fld_d(Address(rsp, 0)); + __ fast_pow(); + __ fstp_d(Address(rsp, 0)); + __ movdbl($dst$$XMMRegister, Address(rsp, 0)); + __ addptr(rsp, 8); + %} ins_pipe( pipe_slow ); %} -instruct expDPR_reg(regDPR1 dpr1, eAXRegI rax, eBXRegI rbx, eCXRegI rcx) %{ +instruct expDPR_reg(regDPR1 dpr1, eAXRegI rax, eDXRegI rdx, eCXRegI rcx, eFlagsReg cr) %{ predicate (UseSSE<=1); match(Set dpr1 (ExpD dpr1)); - effect(KILL rax, KILL rbx, KILL rcx); - format %{ "SUB ESP,8\t\t# Fast-path EXP encoding" - "FLDL2E \t\t\t# Ld log2(e) X\n\t" - "FMULP \t\t\t# Q=X*log2(e)\n\t" - - "FDUP \t\t\t# Q Q\n\t" - "FRNDINT\t\t\t# int(Q) Q\n\t" - "FSUB ST(1),ST(0)\t# int(Q) frac(Q)\n\t" - "FISTP dword [ESP]\n\t" - "F2XM1 \t\t\t# 2^frac(Q)-1 int(Q)\n\t" - "FLD1 \t\t\t# 1 2^frac(Q)-1 int(Q)\n\t" - "FADDP \t\t\t# 2^frac(Q) int(Q)\n\t" // could use FADD [1.000] instead - "MOV EAX,[ESP]\t# Pick up int(Q)\n\t" - "MOV ECX,0xFFFFF800\t# Overflow mask\n\t" - "ADD EAX,1023\t\t# Double exponent bias\n\t" - "MOV EBX,EAX\t\t# Preshifted biased expo\n\t" - "SHL EAX,20\t\t# Shift exponent into place\n\t" - "TEST EBX,ECX\t\t# Check for overflow\n\t" - "CMOVne EAX,ECX\t\t# If overflow, stuff NaN into EAX\n\t" - "MOV [ESP+4],EAX\t# Marshal 64-bit scaling double\n\t" - "MOV [ESP+0],0\n\t" - "FMUL ST(0),[ESP+0]\t# Scale\n\t" - - "ADD ESP,8" - %} - ins_encode( push_stack_temp_qword, - Opcode(0xD9), Opcode(0xEA), // fldl2e - Opcode(0xDE), Opcode(0xC9), // fmulp - pow_exp_core_encoding, - pop_stack_temp_qword); + effect(KILL rax, KILL rcx, KILL rdx, KILL cr); + format %{ "fast_exp $dpr1 -> $dpr1 // KILL $rax, $rcx, $rdx" %} + ins_encode %{ + __ fast_exp(); + %} ins_pipe( pipe_slow ); %} -instruct expD_reg(regD dst, regD src, regDPR1 tmp1, eAXRegI rax, eBXRegI rbx, eCXRegI rcx) %{ +instruct expD_reg(regD dst, regD src, eAXRegI rax, eDXRegI rdx, eCXRegI rcx, eFlagsReg cr) %{ predicate (UseSSE>=2); match(Set dst (ExpD src)); - effect(KILL tmp1, KILL rax, KILL rbx, KILL rcx); - format %{ "SUB ESP,8\t\t# Fast-path EXP encoding\n\t" - "MOVSD [ESP],$src\n\t" - "FLDL2E \t\t\t# Ld log2(e) X\n\t" - "FMULP \t\t\t# Q=X*log2(e) X\n\t" - - "FDUP \t\t\t# Q Q\n\t" - "FRNDINT\t\t\t# int(Q) Q\n\t" - "FSUB ST(1),ST(0)\t# int(Q) frac(Q)\n\t" - "FISTP dword [ESP]\n\t" - "F2XM1 \t\t\t# 2^frac(Q)-1 int(Q)\n\t" - "FLD1 \t\t\t# 1 2^frac(Q)-1 int(Q)\n\t" - "FADDP \t\t\t# 2^frac(Q) int(Q)\n\t" // could use FADD [1.000] instead - "MOV EAX,[ESP]\t# Pick up int(Q)\n\t" - "MOV ECX,0xFFFFF800\t# Overflow mask\n\t" - "ADD EAX,1023\t\t# Double exponent bias\n\t" - "MOV EBX,EAX\t\t# Preshifted biased expo\n\t" - "SHL EAX,20\t\t# Shift exponent into place\n\t" - "TEST EBX,ECX\t\t# Check for overflow\n\t" - "CMOVne EAX,ECX\t\t# If overflow, stuff NaN into EAX\n\t" - "MOV [ESP+4],EAX\t# Marshal 64-bit scaling double\n\t" - "MOV [ESP+0],0\n\t" - "FMUL ST(0),[ESP+0]\t# Scale\n\t" - - "FST_D [ESP]\n\t" - "MOVSD $dst,[ESP]\n\t" - "ADD ESP,8" - %} - ins_encode( Push_SrcD(src), - Opcode(0xD9), Opcode(0xEA), // fldl2e - Opcode(0xDE), Opcode(0xC9), // fmulp - pow_exp_core_encoding, - Push_ResultD(dst) ); + effect(KILL rax, KILL rcx, KILL rdx, KILL cr); + format %{ "fast_exp $dst -> $src // KILL $rax, $rcx, $rdx" %} + ins_encode %{ + __ subptr(rsp, 8); + __ movdbl(Address(rsp, 0), $src$$XMMRegister); + __ fld_d(Address(rsp, 0)); + __ fast_exp(); + __ fstp_d(Address(rsp, 0)); + __ movdbl($dst$$XMMRegister, Address(rsp, 0)); + __ addptr(rsp, 8); + %} ins_pipe( pipe_slow ); %} - - instruct log10DPR_reg(regDPR1 dst, regDPR1 src) %{ predicate (UseSSE<=1); // The source Double operand on FPU stack @@ -10395,7 +10163,7 @@ instruct cmpFPR_cc(eFlagsRegU cr, regFPR src1, regFPR src2, eAXRegI rax) %{ %} // Compare vs zero into -1,0,1 -instruct cmpFPR_0(eRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpFPR_0(rRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE == 0); match(Set dst (CmpF3 src1 zero)); effect(KILL cr, KILL rax); @@ -10409,7 +10177,7 @@ instruct cmpFPR_0(eRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg c %} // Compare into -1,0,1 -instruct cmpFPR_reg(eRegI dst, regFPR src1, regFPR src2, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpFPR_reg(rRegI dst, regFPR src1, regFPR src2, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE == 0); match(Set dst (CmpF3 src1 src2)); effect(KILL cr, KILL rax); @@ -11329,7 +11097,7 @@ instruct convI2DPR_reg(regDPR dst, stackSlotI src) %{ ins_pipe( fpu_reg_mem ); %} -instruct convI2D_reg(regD dst, eRegI src) %{ +instruct convI2D_reg(regD dst, rRegI src) %{ predicate( UseSSE>=2 && !UseXmmI2D ); match(Set dst (ConvI2D src)); format %{ "CVTSI2SD $dst,$src" %} @@ -11349,7 +11117,7 @@ instruct convI2D_mem(regD dst, memory mem) %{ ins_pipe( pipe_slow ); %} -instruct convXI2D_reg(regD dst, eRegI src) +instruct convXI2D_reg(regD dst, rRegI src) %{ predicate( UseSSE>=2 && UseXmmI2D ); match(Set dst (ConvI2D src)); @@ -11437,7 +11205,7 @@ instruct convI2FPR_mem(regFPR dst, memory mem) %{ %} // Convert an int to a float in xmm; no rounding step needed. -instruct convI2F_reg(regF dst, eRegI src) %{ +instruct convI2F_reg(regF dst, rRegI src) %{ predicate( UseSSE==1 || UseSSE>=2 && !UseXmmI2F ); match(Set dst (ConvI2F src)); format %{ "CVTSI2SS $dst, $src" %} @@ -11447,7 +11215,7 @@ instruct convI2F_reg(regF dst, eRegI src) %{ ins_pipe( pipe_slow ); %} - instruct convXI2F_reg(regF dst, eRegI src) + instruct convXI2F_reg(regF dst, rRegI src) %{ predicate( UseSSE>=2 && UseXmmI2F ); match(Set dst (ConvI2F src)); @@ -11461,7 +11229,7 @@ instruct convI2F_reg(regF dst, eRegI src) %{ ins_pipe(pipe_slow); // XXX %} -instruct convI2L_reg( eRegL dst, eRegI src, eFlagsReg cr) %{ +instruct convI2L_reg( eRegL dst, rRegI src, eFlagsReg cr) %{ match(Set dst (ConvI2L src)); effect(KILL cr); ins_cost(375); @@ -11473,7 +11241,7 @@ instruct convI2L_reg( eRegL dst, eRegI src, eFlagsReg cr) %{ %} // Zero-extend convert int to long -instruct convI2L_reg_zex(eRegL dst, eRegI src, immL_32bits mask, eFlagsReg flags ) %{ +instruct convI2L_reg_zex(eRegL dst, rRegI src, immL_32bits mask, eFlagsReg flags ) %{ match(Set dst (AndL (ConvI2L src) mask) ); effect( KILL flags ); ins_cost(250); @@ -11553,7 +11321,7 @@ instruct convL2FPR_reg( stackSlotF dst, eRegL src, eFlagsReg cr) %{ ins_pipe( pipe_slow ); %} -instruct convL2I_reg( eRegI dst, eRegL src ) %{ +instruct convL2I_reg( rRegI dst, eRegL src ) %{ match(Set dst (ConvL2I src)); effect( DEF dst, USE src ); format %{ "MOV $dst,$src.lo" %} @@ -11562,7 +11330,7 @@ instruct convL2I_reg( eRegI dst, eRegL src ) %{ %} -instruct MoveF2I_stack_reg(eRegI dst, stackSlotF src) %{ +instruct MoveF2I_stack_reg(rRegI dst, stackSlotF src) %{ match(Set dst (MoveF2I src)); effect( DEF dst, USE src ); ins_cost(100); @@ -11597,7 +11365,7 @@ instruct MoveF2I_reg_stack_sse(stackSlotI dst, regF src) %{ ins_pipe( pipe_slow ); %} -instruct MoveF2I_reg_reg_sse(eRegI dst, regF src) %{ +instruct MoveF2I_reg_reg_sse(rRegI dst, regF src) %{ predicate(UseSSE>=2); match(Set dst (MoveF2I src)); effect( DEF dst, USE src ); @@ -11609,7 +11377,7 @@ instruct MoveF2I_reg_reg_sse(eRegI dst, regF src) %{ ins_pipe( pipe_slow ); %} -instruct MoveI2F_reg_stack(stackSlotF dst, eRegI src) %{ +instruct MoveI2F_reg_stack(stackSlotF dst, rRegI src) %{ match(Set dst (MoveI2F src)); effect( DEF dst, USE src ); @@ -11649,7 +11417,7 @@ instruct MoveI2F_stack_reg_sse(regF dst, stackSlotI src) %{ ins_pipe( pipe_slow ); %} -instruct MoveI2F_reg_reg_sse(regF dst, eRegI src) %{ +instruct MoveI2F_reg_reg_sse(regF dst, rRegI src) %{ predicate(UseSSE>=2); match(Set dst (MoveI2F src)); effect( DEF dst, USE src ); @@ -11783,186 +11551,6 @@ instruct MoveL2D_reg_reg_sse(regD dst, eRegL src, regD tmp) %{ ins_pipe( pipe_slow ); %} -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B src)); - format %{ "MOVDQA $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - if ($dst$$reg != $src$$reg) { - __ movdqa($dst$$XMMRegister, $src$$XMMRegister); - } - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B src)); - format %{ "MOVD $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar zero to packed byte (1 byte) values in xmm -instruct Repl8B_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B zero)); - format %{ "PXOR $dst,$dst\t! replicate8B" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4S" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4S" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed short (2 byte) values in xmm -instruct Repl4S_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S zero)); - format %{ "PXOR $dst,$dst\t! replicate4S" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4C" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4C" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed char (2 byte) values in xmm -instruct Repl4C_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C zero)); - format %{ "PXOR $dst,$dst\t! replicate4C" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I src)); - format %{ "PSHUFD $dst,$src,0x00\t! replicate2I" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFD $dst,$dst,0x00\t! replicate2I" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed integer (2 byte) values in xmm -instruct Repl2I_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I zero)); - format %{ "PXOR $dst,$dst\t! replicate2I" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_regF(regD dst, regF src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_immF0(regD dst, immF0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F zero)); - format %{ "PXOR $dst,$dst\t! replicate2F" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} // ======================================================================= // fast clearing of an array @@ -12071,7 +11659,7 @@ instruct array_equals(eDIRegP ary1, eSIRegP ary2, eAXRegI result, //----------Control Flow Instructions------------------------------------------ // Signed compare Instructions -instruct compI_eReg(eFlagsReg cr, eRegI op1, eRegI op2) %{ +instruct compI_eReg(eFlagsReg cr, rRegI op1, rRegI op2) %{ match(Set cr (CmpI op1 op2)); effect( DEF cr, USE op1, USE op2 ); format %{ "CMP $op1,$op2" %} @@ -12080,7 +11668,7 @@ instruct compI_eReg(eFlagsReg cr, eRegI op1, eRegI op2) %{ ins_pipe( ialu_cr_reg_reg ); %} -instruct compI_eReg_imm(eFlagsReg cr, eRegI op1, immI op2) %{ +instruct compI_eReg_imm(eFlagsReg cr, rRegI op1, immI op2) %{ match(Set cr (CmpI op1 op2)); effect( DEF cr, USE op1 ); format %{ "CMP $op1,$op2" %} @@ -12091,7 +11679,7 @@ instruct compI_eReg_imm(eFlagsReg cr, eRegI op1, immI op2) %{ %} // Cisc-spilled version of cmpI_eReg -instruct compI_eReg_mem(eFlagsReg cr, eRegI op1, memory op2) %{ +instruct compI_eReg_mem(eFlagsReg cr, rRegI op1, memory op2) %{ match(Set cr (CmpI op1 (LoadI op2))); format %{ "CMP $op1,$op2" %} @@ -12101,7 +11689,7 @@ instruct compI_eReg_mem(eFlagsReg cr, eRegI op1, memory op2) %{ ins_pipe( ialu_cr_reg_mem ); %} -instruct testI_reg( eFlagsReg cr, eRegI src, immI0 zero ) %{ +instruct testI_reg( eFlagsReg cr, rRegI src, immI0 zero ) %{ match(Set cr (CmpI src zero)); effect( DEF cr, USE src ); @@ -12111,7 +11699,7 @@ instruct testI_reg( eFlagsReg cr, eRegI src, immI0 zero ) %{ ins_pipe( ialu_cr_reg_imm ); %} -instruct testI_reg_imm( eFlagsReg cr, eRegI src, immI con, immI0 zero ) %{ +instruct testI_reg_imm( eFlagsReg cr, rRegI src, immI con, immI0 zero ) %{ match(Set cr (CmpI (AndI src con) zero)); format %{ "TEST $src,$con" %} @@ -12120,7 +11708,7 @@ instruct testI_reg_imm( eFlagsReg cr, eRegI src, immI con, immI0 zero ) %{ ins_pipe( ialu_cr_reg_imm ); %} -instruct testI_reg_mem( eFlagsReg cr, eRegI src, memory mem, immI0 zero ) %{ +instruct testI_reg_mem( eFlagsReg cr, rRegI src, memory mem, immI0 zero ) %{ match(Set cr (CmpI (AndI src mem) zero)); format %{ "TEST $src,$mem" %} @@ -12131,7 +11719,7 @@ instruct testI_reg_mem( eFlagsReg cr, eRegI src, memory mem, immI0 zero ) %{ // Unsigned compare Instructions; really, same as signed except they // produce an eFlagsRegU instead of eFlagsReg. -instruct compU_eReg(eFlagsRegU cr, eRegI op1, eRegI op2) %{ +instruct compU_eReg(eFlagsRegU cr, rRegI op1, rRegI op2) %{ match(Set cr (CmpU op1 op2)); format %{ "CMPu $op1,$op2" %} @@ -12140,7 +11728,7 @@ instruct compU_eReg(eFlagsRegU cr, eRegI op1, eRegI op2) %{ ins_pipe( ialu_cr_reg_reg ); %} -instruct compU_eReg_imm(eFlagsRegU cr, eRegI op1, immI op2) %{ +instruct compU_eReg_imm(eFlagsRegU cr, rRegI op1, immI op2) %{ match(Set cr (CmpU op1 op2)); format %{ "CMPu $op1,$op2" %} @@ -12150,7 +11738,7 @@ instruct compU_eReg_imm(eFlagsRegU cr, eRegI op1, immI op2) %{ %} // // Cisc-spilled version of cmpU_eReg -instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ +instruct compU_eReg_mem(eFlagsRegU cr, rRegI op1, memory op2) %{ match(Set cr (CmpU op1 (LoadI op2))); format %{ "CMPu $op1,$op2" %} @@ -12161,7 +11749,7 @@ instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ %} // // Cisc-spilled version of cmpU_eReg -//instruct compU_mem_eReg(eFlagsRegU cr, memory op1, eRegI op2) %{ +//instruct compU_mem_eReg(eFlagsRegU cr, memory op1, rRegI op2) %{ // match(Set cr (CmpU (LoadI op1) op2)); // // format %{ "CMPu $op1,$op2" %} @@ -12170,7 +11758,7 @@ instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ // ins_encode( OpcP, RegMem( op1, op2) ); //%} -instruct testU_reg( eFlagsRegU cr, eRegI src, immI0 zero ) %{ +instruct testU_reg( eFlagsRegU cr, rRegI src, immI0 zero ) %{ match(Set cr (CmpU src zero)); format %{ "TESTu $src,$src" %} @@ -12266,7 +11854,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ // *** Min and Max using the conditional move are slower than the // *** branch version on a Pentium III. // // Conditional move for min -//instruct cmovI_reg_lt( eRegI op2, eRegI op1, eFlagsReg cr ) %{ +//instruct cmovI_reg_lt( rRegI op2, rRegI op1, eFlagsReg cr ) %{ // effect( USE_DEF op2, USE op1, USE cr ); // format %{ "CMOVlt $op2,$op1\t! min" %} // opcode(0x4C,0x0F); @@ -12275,7 +11863,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ //%} // //// Min Register with Register (P6 version) -//instruct minI_eReg_p6( eRegI op1, eRegI op2 ) %{ +//instruct minI_eReg_p6( rRegI op1, rRegI op2 ) %{ // predicate(VM_Version::supports_cmov() ); // match(Set op2 (MinI op1 op2)); // ins_cost(200); @@ -12287,7 +11875,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ //%} // Min Register with Register (generic version) -instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ +instruct minI_eReg(rRegI dst, rRegI src, eFlagsReg flags) %{ match(Set dst (MinI dst src)); effect(KILL flags); ins_cost(300); @@ -12302,7 +11890,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ // *** Min and Max using the conditional move are slower than the // *** branch version on a Pentium III. // // Conditional move for max -//instruct cmovI_reg_gt( eRegI op2, eRegI op1, eFlagsReg cr ) %{ +//instruct cmovI_reg_gt( rRegI op2, rRegI op1, eFlagsReg cr ) %{ // effect( USE_DEF op2, USE op1, USE cr ); // format %{ "CMOVgt $op2,$op1\t! max" %} // opcode(0x4F,0x0F); @@ -12311,7 +11899,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ //%} // // // Max Register with Register (P6 version) -//instruct maxI_eReg_p6( eRegI op1, eRegI op2 ) %{ +//instruct maxI_eReg_p6( rRegI op1, rRegI op2 ) %{ // predicate(VM_Version::supports_cmov() ); // match(Set op2 (MaxI op1 op2)); // ins_cost(200); @@ -12323,7 +11911,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ //%} // Max Register with Register (generic version) -instruct maxI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ +instruct maxI_eReg(rRegI dst, rRegI src, eFlagsReg flags) %{ match(Set dst (MaxI dst src)); effect(KILL flags); ins_cost(300); @@ -12384,7 +11972,7 @@ instruct loopLimit_eReg(eAXRegI limit, nadxRegI init, immI stride, eDXRegI limit // ============================================================================ // Branch Instructions // Jump Table -instruct jumpXtnd(eRegI switch_val) %{ +instruct jumpXtnd(rRegI switch_val) %{ match(Jump switch_val); ins_cost(350); format %{ "JMP [$constantaddress](,$switch_val,1)\n\t" %} @@ -12802,7 +12390,7 @@ instruct cmpL_zero_flags_LTGE( flagsReg_long_LTGE flags, eRegL src, immL0 zero ) // Manifest a CmpL result in the normal flags. Only good for LT or GE // compares. Can be used for LE or GT compares by reversing arguments. // NOT GOOD FOR EQ/NE tests. -instruct cmpL_reg_flags_LTGE( flagsReg_long_LTGE flags, eRegL src1, eRegL src2, eRegI tmp ) %{ +instruct cmpL_reg_flags_LTGE( flagsReg_long_LTGE flags, eRegL src1, eRegL src2, rRegI tmp ) %{ match( Set flags (CmpL src1 src2 )); effect( TEMP tmp ); ins_cost(300); @@ -12848,7 +12436,7 @@ instruct cmovLL_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegL dst, load_lo %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12858,7 +12446,7 @@ instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, eRegI s ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, memory src) %{ +instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -12919,7 +12507,7 @@ instruct cmovFF_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regF dst, regF src //====== // Manifest a CmpL result in the normal flags. Only good for EQ/NE compares. -instruct cmpL_zero_flags_EQNE( flagsReg_long_EQNE flags, eRegL src, immL0 zero, eRegI tmp ) %{ +instruct cmpL_zero_flags_EQNE( flagsReg_long_EQNE flags, eRegL src, immL0 zero, rRegI tmp ) %{ match( Set flags (CmpL src zero )); effect(TEMP tmp); ins_cost(200); @@ -12976,7 +12564,7 @@ instruct cmovLL_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegL dst, load_lo %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12986,7 +12574,7 @@ instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, eRegI s ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, memory src) %{ +instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -13048,7 +12636,7 @@ instruct cmovFF_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regF dst, regF src //====== // Manifest a CmpL result in the normal flags. Only good for LE or GT compares. // Same as cmpL_reg_flags_LEGT except must negate src -instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, eRegI tmp ) %{ +instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, rRegI tmp ) %{ match( Set flags (CmpL src zero )); effect( TEMP tmp ); ins_cost(300); @@ -13062,7 +12650,7 @@ instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, // Manifest a CmpL result in the normal flags. Only good for LE or GT compares. // Same as cmpL_reg_flags_LTGE except operands swapped. Swapping operands // requires a commuted test to get the same result. -instruct cmpL_reg_flags_LEGT( flagsReg_long_LEGT flags, eRegL src1, eRegL src2, eRegI tmp ) %{ +instruct cmpL_reg_flags_LEGT( flagsReg_long_LEGT flags, eRegL src1, eRegL src2, rRegI tmp ) %{ match( Set flags (CmpL src1 src2 )); effect( TEMP tmp ); ins_cost(300); @@ -13109,7 +12697,7 @@ instruct cmovLL_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegL dst, %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -13119,7 +12707,7 @@ instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, memory src) %{ +instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -13448,11 +13036,11 @@ instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{ // ---------EXAMPLE---------------------------------------------------------- // // // pertinent parts of existing instructions in architecture description -// instruct movI(eRegI dst, eRegI src) %{ +// instruct movI(rRegI dst, rRegI src) %{ // match(Set dst (CopyI src)); // %} // -// instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ +// instruct incI_eReg(rRegI dst, immI1 src, eFlagsReg cr) %{ // match(Set dst (AddI dst src)); // effect(KILL cr); // %} @@ -13497,11 +13085,11 @@ instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{ // %} // // Change load of spilled value to only a spill -// instruct storeI(memory mem, eRegI src) %{ +// instruct storeI(memory mem, rRegI src) %{ // match(Set mem (StoreI mem src)); // %} // -// instruct loadI(eRegI dst, memory mem) %{ +// instruct loadI(rRegI dst, memory mem) %{ // match(Set dst (LoadI mem)); // %} // diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index 81a01ff9e00..68c6d354012 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -131,102 +131,6 @@ reg_def R15_H(SOC, SOE, Op_RegI, 15, r15->as_VMReg()->next()); // Floating Point Registers -// XMM registers. 128-bit registers or 4 words each, labeled (a)-d. -// Word a in each register holds a Float, words ab hold a Double. We -// currently do not use the SIMD capabilities, so registers cd are -// unused at the moment. -// XMM8-XMM15 must be encoded with REX. -// Linux ABI: No register preserved across function calls -// XMM0-XMM7 might hold parameters -// Windows ABI: XMM6-XMM15 preserved across function calls -// XMM0-XMM3 might hold parameters - -reg_def XMM0 (SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); -reg_def XMM0_H (SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()); - -reg_def XMM1 (SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); -reg_def XMM1_H (SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()); - -reg_def XMM2 (SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); -reg_def XMM2_H (SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()); - -reg_def XMM3 (SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); -reg_def XMM3_H (SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()); - -reg_def XMM4 (SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); -reg_def XMM4_H (SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()); - -reg_def XMM5 (SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); -reg_def XMM5_H (SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()); - -#ifdef _WIN64 - -reg_def XMM6 (SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6_H (SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()); - -reg_def XMM7 (SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7_H (SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()); - -reg_def XMM8 (SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()); -reg_def XMM8_H (SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()); - -reg_def XMM9 (SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()); -reg_def XMM9_H (SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()); - -reg_def XMM10 (SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()); -reg_def XMM10_H(SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()); - -reg_def XMM11 (SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()); -reg_def XMM11_H(SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()); - -reg_def XMM12 (SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()); -reg_def XMM12_H(SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()); - -reg_def XMM13 (SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()); -reg_def XMM13_H(SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()); - -reg_def XMM14 (SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()); -reg_def XMM14_H(SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()); - -reg_def XMM15 (SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()); -reg_def XMM15_H(SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()); - -#else - -reg_def XMM6 (SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6_H (SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()); - -reg_def XMM7 (SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7_H (SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()); - -reg_def XMM8 (SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()); -reg_def XMM8_H (SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()); - -reg_def XMM9 (SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()); -reg_def XMM9_H (SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()); - -reg_def XMM10 (SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()); -reg_def XMM10_H(SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()); - -reg_def XMM11 (SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()); -reg_def XMM11_H(SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()); - -reg_def XMM12 (SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()); -reg_def XMM12_H(SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()); - -reg_def XMM13 (SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()); -reg_def XMM13_H(SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()); - -reg_def XMM14 (SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()); -reg_def XMM14_H(SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()); - -reg_def XMM15 (SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()); -reg_def XMM15_H(SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()); - -#endif // _WIN64 - -reg_def RFLAGS(SOC, SOC, 0, 16, VMRegImpl::Bad()); - // Specify priority of register selection within phases of register // allocation. Highest priority is first. A useful heuristic is to // give registers a low priority when they are required by machine @@ -252,26 +156,6 @@ alloc_class chunk0(R10, R10_H, R15, R15_H, RSP, RSP_H); -// XXX probably use 8-15 first on Linux -alloc_class chunk1(XMM0, XMM0_H, - XMM1, XMM1_H, - XMM2, XMM2_H, - XMM3, XMM3_H, - XMM4, XMM4_H, - XMM5, XMM5_H, - XMM6, XMM6_H, - XMM7, XMM7_H, - XMM8, XMM8_H, - XMM9, XMM9_H, - XMM10, XMM10_H, - XMM11, XMM11_H, - XMM12, XMM12_H, - XMM13, XMM13_H, - XMM14, XMM14_H, - XMM15, XMM15_H); - -alloc_class chunk2(RFLAGS); - //----------Architecture Description Register Classes-------------------------- // Several register classes are automatically defined based upon information in @@ -501,47 +385,8 @@ reg_class int_rdi_reg(RDI); // Singleton class for instruction pointer // reg_class ip_reg(RIP); -// Singleton class for condition codes -reg_class int_flags(RFLAGS); - -// Class for all float registers -reg_class float_reg(XMM0, - XMM1, - XMM2, - XMM3, - XMM4, - XMM5, - XMM6, - XMM7, - XMM8, - XMM9, - XMM10, - XMM11, - XMM12, - XMM13, - XMM14, - XMM15); - -// Class for all double registers -reg_class double_reg(XMM0, XMM0_H, - XMM1, XMM1_H, - XMM2, XMM2_H, - XMM3, XMM3_H, - XMM4, XMM4_H, - XMM5, XMM5_H, - XMM6, XMM6_H, - XMM7, XMM7_H, - XMM8, XMM8_H, - XMM9, XMM9_H, - XMM10, XMM10_H, - XMM11, XMM11_H, - XMM12, XMM12_H, - XMM13, XMM13_H, - XMM14, XMM14_H, - XMM15, XMM15_H); %} - //----------SOURCE BLOCK------------------------------------------------------- // This is a block of C++ code which provides values, functions, and // definitions necessary in the rest of the architecture description @@ -1027,12 +872,84 @@ static enum RC rc_class(OptoReg::Name reg) return rc_float; } +// Next two methods are shared by 32- and 64-bit VM. They are defined in x86.ad. +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st); + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st); + +static void vec_stack_to_stack_helper(CodeBuffer *cbuf, int src_offset, + int dst_offset, uint ireg, outputStream* st) { + if (cbuf) { + MacroAssembler _masm(cbuf); + switch (ireg) { + case Op_VecS: + __ movq(Address(rsp, -8), rax); + __ movl(rax, Address(rsp, src_offset)); + __ movl(Address(rsp, dst_offset), rax); + __ movq(rax, Address(rsp, -8)); + break; + case Op_VecD: + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); + break; + case Op_VecX: + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); + __ pushq(Address(rsp, src_offset+8)); + __ popq (Address(rsp, dst_offset+8)); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, -32), xmm0); + __ vmovdqu(xmm0, Address(rsp, src_offset)); + __ vmovdqu(Address(rsp, dst_offset), xmm0); + __ vmovdqu(xmm0, Address(rsp, -32)); + break; + default: + ShouldNotReachHere(); + } +#ifndef PRODUCT + } else { + switch (ireg) { + case Op_VecS: + st->print("movq [rsp - #8], rax\t# 32-bit mem-mem spill\n\t" + "movl rax, [rsp + #%d]\n\t" + "movl [rsp + #%d], rax\n\t" + "movq rax, [rsp - #8]", + src_offset, dst_offset); + break; + case Op_VecD: + st->print("pushq [rsp + #%d]\t# 64-bit mem-mem spill\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset); + break; + case Op_VecX: + st->print("pushq [rsp + #%d]\t# 128-bit mem-mem spill\n\t" + "popq [rsp + #%d]\n\t" + "pushq [rsp + #%d]\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset, src_offset+8, dst_offset+8); + break; + case Op_VecY: + st->print("vmovdqu [rsp - #32], xmm0\t# 256-bit mem-mem spill\n\t" + "vmovdqu xmm0, [rsp + #%d]\n\t" + "vmovdqu [rsp + #%d], xmm0\n\t" + "vmovdqu xmm0, [rsp - #32]", + src_offset, dst_offset); + break; + default: + ShouldNotReachHere(); + } +#endif + } +} + uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, PhaseRegAlloc* ra_, bool do_size, - outputStream* st) const -{ - + outputStream* st) const { + assert(cbuf != NULL || st != NULL, "sanity"); // Get registers to move OptoReg::Name src_second = ra_->get_reg_second(in(1)); OptoReg::Name src_first = ra_->get_reg_first(in(1)); @@ -1050,7 +967,30 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, if (src_first == dst_first && src_second == dst_second) { // Self copy, no move return 0; - } else if (src_first_rc == rc_stack) { + } + if (bottom_type()->isa_vect() != NULL) { + uint ireg = ideal_reg(); + assert((src_first_rc != rc_int && dst_first_rc != rc_int), "sanity"); + assert((ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY), "sanity"); + if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { + // mem -> mem + int src_offset = ra_->reg2offset(src_first); + int dst_offset = ra_->reg2offset(dst_first); + vec_stack_to_stack_helper(cbuf, src_offset, dst_offset, ireg, st); + } else if (src_first_rc == rc_float && dst_first_rc == rc_float ) { + vec_mov_helper(cbuf, false, src_first, dst_first, src_second, dst_second, ireg, st); + } else if (src_first_rc == rc_float && dst_first_rc == rc_stack ) { + int stack_offset = ra_->reg2offset(dst_first); + vec_spill_helper(cbuf, false, false, stack_offset, src_first, ireg, st); + } else if (src_first_rc == rc_stack && dst_first_rc == rc_float ) { + int stack_offset = ra_->reg2offset(src_first); + vec_spill_helper(cbuf, false, true, stack_offset, dst_first, ireg, st); + } else { + ShouldNotReachHere(); + } + return 0; + } + if (src_first_rc == rc_stack) { // mem -> if (dst_first_rc == rc_stack) { // mem -> mem @@ -1061,23 +1001,16 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, int src_offset = ra_->reg2offset(src_first); int dst_offset = ra_->reg2offset(dst_first); if (cbuf) { - emit_opcode(*cbuf, 0xFF); - encode_RegMem(*cbuf, RSI_enc, RSP_enc, 0x4, 0, src_offset, false); - - emit_opcode(*cbuf, 0x8F); - encode_RegMem(*cbuf, RAX_enc, RSP_enc, 0x4, 0, dst_offset, false); - + MacroAssembler _masm(cbuf); + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("pushq [rsp + #%d]\t# 64-bit mem-mem spill\n\t" - "popq [rsp + #%d]", - src_offset, - dst_offset); + "popq [rsp + #%d]", + src_offset, dst_offset); #endif } - return - 3 + ((src_offset == 0) ? 0 : (src_offset < 0x80 ? 1 : 4)) + - 3 + ((dst_offset == 0) ? 0 : (dst_offset < 0x80 ? 1 : 4)); } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1086,46 +1019,22 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, int src_offset = ra_->reg2offset(src_first); int dst_offset = ra_->reg2offset(dst_first); if (cbuf) { - emit_opcode(*cbuf, Assembler::REX_W); - emit_opcode(*cbuf, 0x89); - emit_opcode(*cbuf, 0x44); - emit_opcode(*cbuf, 0x24); - emit_opcode(*cbuf, 0xF8); - - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - RAX_enc, - RSP_enc, 0x4, 0, src_offset, - false); - - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - RAX_enc, - RSP_enc, 0x4, 0, dst_offset, - false); - - emit_opcode(*cbuf, Assembler::REX_W); - emit_opcode(*cbuf, 0x8B); - emit_opcode(*cbuf, 0x44); - emit_opcode(*cbuf, 0x24); - emit_opcode(*cbuf, 0xF8); - + MacroAssembler _masm(cbuf); + __ movq(Address(rsp, -8), rax); + __ movl(rax, Address(rsp, src_offset)); + __ movl(Address(rsp, dst_offset), rax); + __ movq(rax, Address(rsp, -8)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq [rsp - #8], rax\t# 32-bit mem-mem spill\n\t" - "movl rax, [rsp + #%d]\n\t" - "movl [rsp + #%d], rax\n\t" - "movq rax, [rsp - #8]", - src_offset, - dst_offset); + "movl rax, [rsp + #%d]\n\t" + "movl [rsp + #%d], rax\n\t" + "movq rax, [rsp - #8]", + src_offset, dst_offset); #endif } - return - 5 + // movq - 3 + ((src_offset == 0) ? 0 : (src_offset < 0x80 ? 1 : 4)) + // movl - 3 + ((dst_offset == 0) ? 0 : (dst_offset < 0x80 ? 1 : 4)) + // movl - 5; // movq } + return 0; } else if (dst_first_rc == rc_int) { // mem -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1133,52 +1042,32 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, // 64-bit int offset = ra_->reg2offset(src_first); if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WR); - } - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - Matcher::_regEncode[dst_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movq(as_Register(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + 4; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); int offset = ra_->reg2offset(src_first); if (cbuf) { - if (Matcher::_regEncode[dst_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - Matcher::_regEncode[dst_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movl(as_Register(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] < 8) - ? 3 - : 4); // REX } + return 0; } else if (dst_first_rc == rc_float) { // mem-> xmm if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1189,18 +1078,13 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( as_XMMRegister(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, [rsp + #%d]\t# spill", UseXmmLoadAndClearUpper ? "movsd " : "movlpd", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1210,18 +1094,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt( as_XMMRegister(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movss %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } + return 0; } } else if (src_first_rc == rc_int) { // gpr -> @@ -1232,113 +1112,65 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, // 64-bit int offset = ra_->reg2offset(dst_first); if (cbuf) { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WR); - } - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - Matcher::_regEncode[src_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movq(Address(rsp, offset), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + 4; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); int offset = ra_->reg2offset(dst_first); if (cbuf) { - if (Matcher::_regEncode[src_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - Matcher::_regEncode[src_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movl(Address(rsp, offset), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] < 8) - ? 3 - : 4); // REX } + return 0; } else if (dst_first_rc == rc_int) { // gpr -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && (dst_first & 1) == 0 && dst_first + 1 == dst_second) { // 64-bit if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WB); - } - } else { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_WR); - } else { - emit_opcode(*cbuf, Assembler::REX_WRB); - } - } - emit_opcode(*cbuf, 0x8B); - emit_rm(*cbuf, 0x3, - Matcher::_regEncode[dst_first] & 7, - Matcher::_regEncode[src_first] & 7); + MacroAssembler _masm(cbuf); + __ movq(as_Register(Matcher::_regEncode[dst_first]), + as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 3; // REX + return 0; } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - if (Matcher::_regEncode[src_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_B); - } - } else { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } else { - emit_opcode(*cbuf, Assembler::REX_RB); - } - } - emit_opcode(*cbuf, 0x8B); - emit_rm(*cbuf, 0x3, - Matcher::_regEncode[dst_first] & 7, - Matcher::_regEncode[src_first] & 7); + MacroAssembler _masm(cbuf); + __ movl(as_Register(Matcher::_regEncode[dst_first]), + as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] < 8 && Matcher::_regEncode[dst_first] < 8) - ? 2 - : 3; // REX + return 0; } } else if (dst_first_rc == rc_float) { // gpr -> xmm @@ -1349,13 +1181,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdq( as_XMMRegister(Matcher::_regEncode[dst_first]), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 5; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1364,17 +1195,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdl( as_XMMRegister(Matcher::_regEncode[dst_first]), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } + return 0; } } else if (src_first_rc == rc_float) { // xmm -> @@ -1388,17 +1216,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( Address(rsp, offset), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movsd [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1408,18 +1231,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt(Address(rsp, offset), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movss [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] >=8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } + return 0; } else if (dst_first_rc == rc_int) { // xmm -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1429,13 +1248,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdq( as_Register(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 5; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1444,17 +1262,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdl( as_Register(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } + return 0; } else if (dst_first_rc == rc_float) { // xmm -> xmm if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1464,17 +1279,13 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( as_XMMRegister(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, %s\t# spill", UseXmmRegToRegMoveAll ? "movapd" : "movsd ", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1483,42 +1294,35 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt( as_XMMRegister(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, %s\t# spill", UseXmmRegToRegMoveAll ? "movaps" : "movss ", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return ((UseAVX>0) ? 5: - ((Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? (UseXmmRegToRegMoveAll ? 4 : 5) - : (UseXmmRegToRegMoveAll ? 3 : 4))); // REX } + return 0; } } assert(0," foo "); Unimplemented(); - return 0; } #ifndef PRODUCT -void MachSpillCopyNode::format(PhaseRegAlloc *ra_, outputStream* st) const -{ +void MachSpillCopyNode::format(PhaseRegAlloc *ra_, outputStream* st) const { implementation(NULL, ra_, false, st); } #endif -void MachSpillCopyNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const -{ +void MachSpillCopyNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { implementation(&cbuf, ra_, false, NULL); } -uint MachSpillCopyNode::size(PhaseRegAlloc *ra_) const -{ - return implementation(NULL, ra_, true, NULL); +uint MachSpillCopyNode::size(PhaseRegAlloc *ra_) const { + return MachNode::size(ra_); } //============================================================================= @@ -1735,16 +1539,6 @@ const bool Matcher::convL2FSupported(void) { return true; } -// Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { - return 8; -} - -// Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { - return Op_RegD; -} - // Is this branch offset short enough that a short branch can be used? // // NOTE: If the platform does not provide any short branch variants, then @@ -1831,21 +1625,21 @@ const bool Matcher::int_in_long = true; bool Matcher::can_be_java_arg(int reg) { return - reg == RDI_num || reg == RDI_H_num || - reg == RSI_num || reg == RSI_H_num || - reg == RDX_num || reg == RDX_H_num || - reg == RCX_num || reg == RCX_H_num || - reg == R8_num || reg == R8_H_num || - reg == R9_num || reg == R9_H_num || - reg == R12_num || reg == R12_H_num || - reg == XMM0_num || reg == XMM0_H_num || - reg == XMM1_num || reg == XMM1_H_num || - reg == XMM2_num || reg == XMM2_H_num || - reg == XMM3_num || reg == XMM3_H_num || - reg == XMM4_num || reg == XMM4_H_num || - reg == XMM5_num || reg == XMM5_H_num || - reg == XMM6_num || reg == XMM6_H_num || - reg == XMM7_num || reg == XMM7_H_num; + reg == RDI_num || reg == RDI_H_num || + reg == RSI_num || reg == RSI_H_num || + reg == RDX_num || reg == RDX_H_num || + reg == RCX_num || reg == RCX_H_num || + reg == R8_num || reg == R8_H_num || + reg == R9_num || reg == R9_H_num || + reg == R12_num || reg == R12_H_num || + reg == XMM0_num || reg == XMM0b_num || + reg == XMM1_num || reg == XMM1b_num || + reg == XMM2_num || reg == XMM2b_num || + reg == XMM3_num || reg == XMM3b_num || + reg == XMM4_num || reg == XMM4b_num || + reg == XMM5_num || reg == XMM5b_num || + reg == XMM6_num || reg == XMM6b_num || + reg == XMM7_num || reg == XMM7b_num; } bool Matcher::is_spillable_arg(int reg) @@ -3220,10 +3014,11 @@ frame OptoReg::Bad, // Op_RegI RAX_H_num, // Op_RegP OptoReg::Bad, // Op_RegF - XMM0_H_num, // Op_RegD + XMM0b_num, // Op_RegD RAX_H_num // Op_RegL }; - assert(ARRAY_SIZE(hi) == _last_machine_leaf - 1, "missing type"); + // Excluded flags and vector registers. + assert(ARRAY_SIZE(hi) == _last_machine_leaf - 5, "missing type"); return OptoRegPair(hi[ideal_reg], lo[ideal_reg]); %} %} @@ -3985,7 +3780,6 @@ operand regD() interface(REG_INTER); %} - //----------Memory Operands---------------------------------------------------- // Direct Memory Operand // operand direct(immP addr) @@ -5416,61 +5210,6 @@ instruct loadD(regD dst, memory mem) ins_pipe(pipe_slow); // XXX %} -// Load Aligned Packed Byte to XMM register -instruct loadA8B(regD dst, memory mem) %{ - match(Set dst (Load8B mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed8B" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Short to XMM register -instruct loadA4S(regD dst, memory mem) %{ - match(Set dst (Load4S mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4S" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Char to XMM register -instruct loadA4C(regD dst, memory mem) %{ - match(Set dst (Load4C mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4C" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Integer to XMM register -instruct load2IU(regD dst, memory mem) %{ - match(Set dst (Load2I mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2I" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Single to XMM -instruct loadA2F(regD dst, memory mem) %{ - match(Set dst (Load2F mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2F" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - // Load Effective Address instruct leaP8(rRegP dst, indOffset8 mem) %{ @@ -6200,39 +5939,6 @@ instruct storeImmB(memory mem, immI8 src) ins_pipe(ialu_mem_imm); %} -// Store Aligned Packed Byte XMM register to memory -instruct storeA8B(memory mem, regD src) %{ - match(Set mem (Store8B mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed8B" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Char/Short XMM register to memory -instruct storeA4C(memory mem, regD src) %{ - match(Set mem (Store4C mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed4C" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Integer XMM register to memory -instruct storeA2I(memory mem, regD src) %{ - match(Set mem (Store2I mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2I" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store CMS card-mark Immediate instruct storeImmCM0_reg(memory mem, immI0 zero) %{ @@ -6258,17 +5964,6 @@ instruct storeImmCM0(memory mem, immI0 src) ins_pipe(ialu_mem_imm); %} -// Store Aligned Packed Single Float XMM register to memory -instruct storeA2F(memory mem, regD src) %{ - match(Set mem (Store2F mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2F" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store Float instruct storeF(memory mem, regF src) %{ @@ -6417,14 +6112,14 @@ instruct bytes_reverse_long(rRegL dst) %{ match(Set dst (ReverseBytesL dst)); format %{ "bswapq $dst" %} - opcode(0x0F, 0xC8); /* Opcode 0F /C8 */ ins_encode( REX_reg_wide(dst), OpcP, opc2_reg(dst) ); ins_pipe( ialu_reg); %} -instruct bytes_reverse_unsigned_short(rRegI dst) %{ +instruct bytes_reverse_unsigned_short(rRegI dst, rFlagsReg cr) %{ match(Set dst (ReverseBytesUS dst)); + effect(KILL cr); format %{ "bswapl $dst\n\t" "shrl $dst,16\n\t" %} @@ -6435,8 +6130,9 @@ instruct bytes_reverse_unsigned_short(rRegI dst) %{ ins_pipe( ialu_reg ); %} -instruct bytes_reverse_short(rRegI dst) %{ +instruct bytes_reverse_short(rRegI dst, rFlagsReg cr) %{ match(Set dst (ReverseBytesS dst)); + effect(KILL cr); format %{ "bswapl $dst\n\t" "sar $dst,16\n\t" %} @@ -6564,9 +6260,10 @@ instruct countTrailingZerosL(rRegI dst, rRegL src, rFlagsReg cr) %{ //---------- Population Count Instructions ------------------------------------- -instruct popCountI(rRegI dst, rRegI src) %{ +instruct popCountI(rRegI dst, rRegI src, rFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI src)); + effect(KILL cr); format %{ "popcnt $dst, $src" %} ins_encode %{ @@ -6575,9 +6272,10 @@ instruct popCountI(rRegI dst, rRegI src) %{ ins_pipe(ialu_reg); %} -instruct popCountI_mem(rRegI dst, memory mem) %{ +instruct popCountI_mem(rRegI dst, memory mem, rFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI (LoadI mem))); + effect(KILL cr); format %{ "popcnt $dst, $mem" %} ins_encode %{ @@ -6587,9 +6285,10 @@ instruct popCountI_mem(rRegI dst, memory mem) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL(rRegI dst, rRegL src) %{ +instruct popCountL(rRegI dst, rRegL src, rFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL src)); + effect(KILL cr); format %{ "popcnt $dst, $src" %} ins_encode %{ @@ -6599,9 +6298,10 @@ instruct popCountL(rRegI dst, rRegL src) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL_mem(rRegI dst, memory mem) %{ +instruct popCountL_mem(rRegI dst, memory mem, rFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL (LoadL mem))); + effect(KILL cr); format %{ "popcnt $dst, $mem" %} ins_encode %{ @@ -7492,18 +7192,6 @@ instruct loadPLocked(rRegP dst, memory mem) ins_pipe(ialu_reg_mem); // XXX %} -// LoadL-locked - same as a regular LoadL when used with compare-swap -instruct loadLLocked(rRegL dst, memory mem) -%{ - match(Set dst (LoadLLocked mem)); - - ins_cost(125); // XXX - format %{ "movq $dst, $mem\t# long locked" %} - opcode(0x8B); - ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem)); - ins_pipe(ialu_reg_mem); // XXX -%} - // Conditional-store of the updated heap-top. // Used during allocation of the shared heap. // Sets flags (EQ) on success. Implemented with a CMPXCHG on Intel. @@ -9823,7 +9511,39 @@ instruct logD_reg(regD dst) %{ ins_pipe( pipe_slow ); %} +instruct powD_reg(regD dst, regD src0, regD src1, rax_RegI rax, rdx_RegI rdx, rcx_RegI rcx, rFlagsReg cr) %{ + match(Set dst (PowD src0 src1)); // Raise src0 to the src1'th power + effect(KILL rax, KILL rdx, KILL rcx, KILL cr); + format %{ "fast_pow $src0 $src1 -> $dst // KILL $rax, $rcx, $rdx" %} + ins_encode %{ + __ subptr(rsp, 8); + __ movdbl(Address(rsp, 0), $src1$$XMMRegister); + __ fld_d(Address(rsp, 0)); + __ movdbl(Address(rsp, 0), $src0$$XMMRegister); + __ fld_d(Address(rsp, 0)); + __ fast_pow(); + __ fstp_d(Address(rsp, 0)); + __ movdbl($dst$$XMMRegister, Address(rsp, 0)); + __ addptr(rsp, 8); + %} + ins_pipe( pipe_slow ); +%} +instruct expD_reg(regD dst, regD src, rax_RegI rax, rdx_RegI rdx, rcx_RegI rcx, rFlagsReg cr) %{ + match(Set dst (ExpD src)); + effect(KILL rax, KILL rcx, KILL rdx, KILL cr); + format %{ "fast_exp $dst -> $src // KILL $rax, $rcx, $rdx" %} + ins_encode %{ + __ subptr(rsp, 8); + __ movdbl(Address(rsp, 0), $src$$XMMRegister); + __ fld_d(Address(rsp, 0)); + __ fast_exp(); + __ fstp_d(Address(rsp, 0)); + __ movdbl($dst$$XMMRegister, Address(rsp, 0)); + __ addptr(rsp, 8); + %} + ins_pipe( pipe_slow ); +%} //----------Arithmetic Conversion Instructions--------------------------------- @@ -10352,172 +10072,6 @@ instruct MoveL2D_reg_reg(regD dst, rRegL src) %{ ins_pipe( pipe_slow ); %} -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_reg(regD dst, regD src) %{ - match(Set dst (Replicate8B src)); - format %{ "MOVDQA $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - if ($dst$$reg != $src$$reg) { - __ movdqa($dst$$XMMRegister, $src$$XMMRegister); - } - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate8B src)); - format %{ "MOVD $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar zero to packed byte (1 byte) values in xmm -instruct Repl8B_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate8B zero)); - format %{ "PXOR $dst,$dst\t! replicate8B" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_reg(regD dst, regD src) %{ - match(Set dst (Replicate4S src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4S" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate4S src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4S" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed short (2 byte) values in xmm -instruct Repl4S_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate4S zero)); - format %{ "PXOR $dst,$dst\t! replicate4S" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_reg(regD dst, regD src) %{ - match(Set dst (Replicate4C src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4C" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate4C src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4C" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed char (2 byte) values in xmm -instruct Repl4C_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate4C zero)); - format %{ "PXOR $dst,$dst\t! replicate4C" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_reg(regD dst, regD src) %{ - match(Set dst (Replicate2I src)); - format %{ "PSHUFD $dst,$src,0x00\t! replicate2I" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate2I src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFD $dst,$dst,0x00\t! replicate2I" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed integer (2 byte) values in xmm -instruct Repl2I_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate2I zero)); - format %{ "PXOR $dst,$dst\t! replicate2I" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_reg(regD dst, regD src) %{ - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_regF(regD dst, regF src) %{ - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_immF0(regD dst, immF0 zero) %{ - match(Set dst (Replicate2F zero)); - format %{ "PXOR $dst,$dst\t! replicate2F" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - // ======================================================================= // fast clearing of an array diff --git a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp index 0beb4cdad2d..ec2805b4d28 100644 --- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp +++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp @@ -1026,6 +1026,16 @@ void CppInterpreter::process_method_handle(oop method_handle, TRAPS) { java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); oop arg = VMSLOTS_OBJECT(arg_slot); jvalue arg_value; + if (arg == NULL) { + // queue a nullpointer exception for the caller + stack->set_sp(calculate_unwind_sp(stack, method_handle)); + CALL_VM_NOCHECK_NOFIX( + throw_exception( + thread, vmSymbols::java_lang_NullPointerException())); + // NB all oops trashed! + assert(HAS_PENDING_EXCEPTION, "should do"); + return; + } BasicType arg_type = java_lang_boxing_object::get_value(arg, &arg_value); if (arg_type == T_LONG || arg_type == T_DOUBLE) { intptr_t *unwind_sp = calculate_unwind_sp(stack, method_handle); @@ -1112,6 +1122,15 @@ void CppInterpreter::process_method_handle(oop method_handle, TRAPS) { case T_SHORT: return; } + // INT results sometimes need narrowing + case T_BOOLEAN: + case T_CHAR: + case T_BYTE: + case T_SHORT: + switch (src_rtype) { + case T_INT: + return; + } } tty->print_cr("unhandled conversion:"); diff --git a/hotspot/src/os/bsd/vm/osThread_bsd.hpp b/hotspot/src/os/bsd/vm/osThread_bsd.hpp index 914a0439c02..c72b36025f6 100644 --- a/hotspot/src/os/bsd/vm/osThread_bsd.hpp +++ b/hotspot/src/os/bsd/vm/osThread_bsd.hpp @@ -42,26 +42,19 @@ #ifdef _ALLBSD_SOURCE #ifdef __APPLE__ - thread_t _thread_id; + typedef thread_t thread_id_t; #else - pthread_t _thread_id; + typedef pthread_t thread_id_t; +#endif + +#else + typedef pid_t thread_id_t; #endif // _pthread_id is the pthread id, which is used by library calls // (e.g. pthread_kill). pthread_t _pthread_id; -#else - // _thread_id is kernel thread id (similar to LWP id on Solaris). Each - // thread has a unique thread_id (BsdThreads or NPTL). It can be used - // to access /proc. - pid_t _thread_id; - - // _pthread_id is the pthread id, which is used by library calls - // (e.g. pthread_kill). - pthread_t _pthread_id; -#endif - sigset_t _caller_sigmask; // Caller's signal mask public: @@ -70,28 +63,11 @@ sigset_t caller_sigmask() const { return _caller_sigmask; } void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; } -#ifdef _ALLBSD_SOURCE -#ifdef __APPLE__ - static size_t thread_id_size() { return sizeof(thread_t); } - thread_t thread_id() const { - return _thread_id; - } -#else - static size_t thread_id_size() { return sizeof(pthread_t); } - pthread_t thread_id() const { - return _thread_id; - } -#endif -#else - static size_t thread_id_size() { return sizeof(pid_t); } - pid_t thread_id() const { - return _thread_id; - } -#endif #ifndef PRODUCT // Used for debugging, return a unique integer for each thread. intptr_t thread_identifier() const { return (intptr_t)_pthread_id; } #endif + #ifdef ASSERT // We expect no reposition failures so kill vm if we get one. // @@ -99,21 +75,7 @@ return false; } #endif // ASSERT -#ifdef _ALLBSD_SOURCE -#ifdef __APPLE__ - void set_thread_id(thread_t id) { - _thread_id = id; - } -#else - void set_thread_id(pthread_t id) { - _thread_id = id; - } -#endif -#else - void set_thread_id(pid_t id) { - _thread_id = id; - } -#endif + pthread_t pthread_id() const { return _pthread_id; } diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp index 5643798bc30..68ab3fc4c3b 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.cpp +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp @@ -440,7 +440,7 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) #define getenv(n) ::getenv(n) /* @@ -1913,11 +1913,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/" JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, pname, fname); @@ -2340,93 +2340,21 @@ void os::print_dll_info(outputStream *st) { #endif } +void os::print_os_info_brief(outputStream* st) { + st->print("Bsd"); + + os::Posix::print_uname_info(st); +} void os::print_os_info(outputStream* st) { st->print("OS:"); + st->print("Bsd"); - // Try to identify popular distros. - // Most Bsd distributions have /etc/XXX-release file, which contains - // the OS version string. Some have more than one /etc/XXX-release file - // (e.g. Mandrake has both /etc/mandrake-release and /etc/redhat-release.), - // so the order is important. - if (!_print_ascii_file("/etc/mandrake-release", st) && - !_print_ascii_file("/etc/sun-release", st) && - !_print_ascii_file("/etc/redhat-release", st) && - !_print_ascii_file("/etc/SuSE-release", st) && - !_print_ascii_file("/etc/turbobsd-release", st) && - !_print_ascii_file("/etc/gentoo-release", st) && - !_print_ascii_file("/etc/debian_version", st) && - !_print_ascii_file("/etc/ltib-release", st) && - !_print_ascii_file("/etc/angstrom-version", st)) { - st->print("Bsd"); - } - st->cr(); + os::Posix::print_uname_info(st); - // kernel - st->print("uname:"); - struct utsname name; - uname(&name); - st->print(name.sysname); st->print(" "); - st->print(name.release); st->print(" "); - st->print(name.version); st->print(" "); - st->print(name.machine); - st->cr(); + os::Posix::print_rlimit_info(st); -#ifndef _ALLBSD_SOURCE - // Print warning if unsafe chroot environment detected - if (unsafe_chroot_detected) { - st->print("WARNING!! "); - st->print_cr(unstable_chroot_error); - } - - // libc, pthread - st->print("libc:"); - st->print(os::Bsd::glibc_version()); st->print(" "); - st->print(os::Bsd::libpthread_version()); st->print(" "); - if (os::Bsd::is_BsdThreads()) { - st->print("(%s stack)", os::Bsd::is_floating_stack() ? "floating" : "fixed"); - } - st->cr(); -#endif - - // rlimit - st->print("rlimit:"); - struct rlimit rlim; - - st->print(" STACK "); - getrlimit(RLIMIT_STACK, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - - st->print(", CORE "); - getrlimit(RLIMIT_CORE, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - - st->print(", NPROC "); - getrlimit(RLIMIT_NPROC, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%d", rlim.rlim_cur); - - st->print(", NOFILE "); - getrlimit(RLIMIT_NOFILE, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%d", rlim.rlim_cur); - -#ifndef _ALLBSD_SOURCE - st->print(", AS "); - getrlimit(RLIMIT_AS, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - st->cr(); - - // load average - st->print("load average:"); - double loadavg[3]; - os::loadavg(loadavg, 3); - st->print("%0.02f %0.02f %0.02f", loadavg[0], loadavg[1], loadavg[2]); - st->cr(); -#endif + os::Posix::print_load_average(st); } void os::pd_print_cpu_info(outputStream* st) { @@ -2838,7 +2766,7 @@ void bsd_wrap_code(char* base, size_t size) { // All it does is to check if there are enough free pages // left at the time of mmap(). This could be a potential // problem. -bool os::commit_memory(char* addr, size_t size, bool exec) { +bool os::pd_commit_memory(char* addr, size_t size, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; #ifdef __OpenBSD__ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD @@ -2862,7 +2790,7 @@ bool os::commit_memory(char* addr, size_t size, bool exec) { #endif #endif -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { #ifndef _ALLBSD_SOURCE if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { @@ -2878,7 +2806,7 @@ bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, return commit_memory(addr, size, exec); } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { #ifndef _ALLBSD_SOURCE if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { // We don't check the return value: madvise(MADV_HUGEPAGE) may not @@ -2888,7 +2816,7 @@ void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { #endif } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { ::madvise(addr, bytes, MADV_DONTNEED); } @@ -3030,7 +2958,7 @@ os::Bsd::numa_interleave_memory_func_t os::Bsd::_numa_interleave_memory; unsigned long* os::Bsd::_numa_all_nodes; #endif -bool os::uncommit_memory(char* addr, size_t size) { +bool os::pd_uncommit_memory(char* addr, size_t size) { #ifdef __OpenBSD__ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD return ::mprotect(addr, size, PROT_NONE) == 0; @@ -3041,7 +2969,7 @@ bool os::uncommit_memory(char* addr, size_t size) { #endif } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -3095,12 +3023,12 @@ static int anon_munmap(char * addr, size_t size) { return ::munmap(addr, size) == 0; } -char* os::reserve_memory(size_t bytes, char* requested_addr, +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { return anon_mmap(requested_addr, bytes, (requested_addr != NULL)); } -bool os::release_memory(char* addr, size_t size) { +bool os::pd_release_memory(char* addr, size_t size) { return anon_munmap(addr, size); } @@ -3403,7 +3331,7 @@ bool os::can_execute_large_page_memory() { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -5059,7 +4987,7 @@ int os::socket_available(int fd, jint *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -5091,7 +5019,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -5101,7 +5029,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } @@ -5873,3 +5801,14 @@ bool os::is_headless_jre() { return true; } + +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + int n = jio_snprintf(buffer, bufferSize, "/cores"); + + // Truncate if theoretical string was longer than bufferSize + n = MIN2(n, (int)bufferSize); + + return n; +} diff --git a/hotspot/src/os/bsd/vm/os_bsd.hpp b/hotspot/src/os/bsd/vm/os_bsd.hpp index 271d1e291e9..bb8fe3f211e 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.hpp +++ b/hotspot/src/os/bsd/vm/os_bsd.hpp @@ -312,7 +312,7 @@ public: }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -347,7 +347,7 @@ class PlatformEvent : public CHeapObj { void SetAssociation (Thread * a) { _Assoc = a ; } } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: pthread_mutex_t _mutex [1] ; pthread_cond_t _cond [1] ; diff --git a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp index c582a45315a..9980d4631a2 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp +++ b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp @@ -95,7 +95,7 @@ inline bool os::allocate_stack_guard_pages() { // On Bsd, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp index c93289e5909..e9db634135f 100644 --- a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp +++ b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp @@ -126,7 +126,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -153,7 +153,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -246,7 +246,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); // POSIX interface to getpwuid_r is used on LINUX struct passwd* p; @@ -278,14 +278,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -328,7 +328,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -338,7 +338,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -346,7 +346,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -357,13 +357,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -372,7 +372,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -381,13 +381,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -397,23 +397,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -434,7 +434,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -472,7 +472,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -480,7 +480,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -517,7 +517,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -556,7 +556,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -723,11 +723,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -743,7 +743,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -869,7 +869,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -884,9 +884,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/linux/vm/osThread_linux.hpp b/hotspot/src/os/linux/vm/osThread_linux.hpp index fe9fe6188fa..904ab52e68f 100644 --- a/hotspot/src/os/linux/vm/osThread_linux.hpp +++ b/hotspot/src/os/linux/vm/osThread_linux.hpp @@ -24,6 +24,8 @@ #ifndef OS_LINUX_VM_OSTHREAD_LINUX_HPP #define OS_LINUX_VM_OSTHREAD_LINUX_HPP + public: + typedef pid_t thread_id_t; private: int _thread_type; @@ -37,13 +39,6 @@ _thread_type = type; } - private: - - // _thread_id is kernel thread id (similar to LWP id on Solaris). Each - // thread has a unique thread_id (LinuxThreads or NPTL). It can be used - // to access /proc. - pid_t _thread_id; - // _pthread_id is the pthread id, which is used by library calls // (e.g. pthread_kill). pthread_t _pthread_id; @@ -56,11 +51,6 @@ sigset_t caller_sigmask() const { return _caller_sigmask; } void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; } - static size_t thread_id_size() { return sizeof(pid_t); } - - pid_t thread_id() const { - return _thread_id; - } #ifndef PRODUCT // Used for debugging, return a unique integer for each thread. int thread_identifier() const { return _thread_id; } @@ -72,9 +62,6 @@ return false; } #endif // ASSERT - void set_thread_id(pid_t id) { - _thread_id = id; - } pthread_t pthread_id() const { return _pthread_id; } diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index 0297df4dc4b..df6eb0e71c8 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -371,7 +371,7 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) #define getenv(n) ::getenv(n) /* @@ -639,7 +639,7 @@ void os::Linux::libpthread_init() { size_t n = confstr(_CS_GNU_LIBC_VERSION, NULL, 0); if (n > 0) { - char *str = (char *)malloc(n); + char *str = (char *)malloc(n, mtInternal); confstr(_CS_GNU_LIBC_VERSION, str, n); os::Linux::set_glibc_version(str); } else { @@ -652,7 +652,7 @@ void os::Linux::libpthread_init() { n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, 0); if (n > 0) { - char *str = (char *)malloc(n); + char *str = (char *)malloc(n, mtInternal); confstr(_CS_GNU_LIBPTHREAD_VERSION, str, n); // Vanilla RH-9 (glibc 2.3.2) has a bug that confstr() always tells // us "NPTL-0.29" even we are running with LinuxThreads. Check if this @@ -1685,11 +1685,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/lib%s.so", pname, fname); @@ -2020,15 +2020,43 @@ void os::print_dll_info(outputStream *st) { } } +void os::print_os_info_brief(outputStream* st) { + os::Linux::print_distro_info(st); + + os::Posix::print_uname_info(st); + + os::Linux::print_libversion_info(st); + +} void os::print_os_info(outputStream* st) { st->print("OS:"); - // Try to identify popular distros. - // Most Linux distributions have /etc/XXX-release file, which contains - // the OS version string. Some have more than one /etc/XXX-release file - // (e.g. Mandrake has both /etc/mandrake-release and /etc/redhat-release.), - // so the order is important. + os::Linux::print_distro_info(st); + + os::Posix::print_uname_info(st); + + // Print warning if unsafe chroot environment detected + if (unsafe_chroot_detected) { + st->print("WARNING!! "); + st->print_cr(unstable_chroot_error); + } + + os::Linux::print_libversion_info(st); + + os::Posix::print_rlimit_info(st); + + os::Posix::print_load_average(st); + + os::Linux::print_full_memory_info(st); +} + +// Try to identify popular distros. +// Most Linux distributions have /etc/XXX-release file, which contains +// the OS version string. Some have more than one /etc/XXX-release file +// (e.g. Mandrake has both /etc/mandrake-release and /etc/redhat-release.), +// so the order is important. +void os::Linux::print_distro_info(outputStream* st) { if (!_print_ascii_file("/etc/mandrake-release", st) && !_print_ascii_file("/etc/sun-release", st) && !_print_ascii_file("/etc/redhat-release", st) && @@ -2041,23 +2069,9 @@ void os::print_os_info(outputStream* st) { st->print("Linux"); } st->cr(); +} - // kernel - st->print("uname:"); - struct utsname name; - uname(&name); - st->print(name.sysname); st->print(" "); - st->print(name.release); st->print(" "); - st->print(name.version); st->print(" "); - st->print(name.machine); - st->cr(); - - // Print warning if unsafe chroot environment detected - if (unsafe_chroot_detected) { - st->print("WARNING!! "); - st->print_cr(unstable_chroot_error); - } - +void os::Linux::print_libversion_info(outputStream* st) { // libc, pthread st->print("libc:"); st->print(os::Linux::glibc_version()); st->print(" "); @@ -2066,56 +2080,12 @@ void os::print_os_info(outputStream* st) { st->print("(%s stack)", os::Linux::is_floating_stack() ? "floating" : "fixed"); } st->cr(); - - // rlimit - st->print("rlimit:"); - struct rlimit rlim; - - st->print(" STACK "); - getrlimit(RLIMIT_STACK, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - - st->print(", CORE "); - getrlimit(RLIMIT_CORE, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - - st->print(", NPROC "); - getrlimit(RLIMIT_NPROC, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%d", rlim.rlim_cur); - - st->print(", NOFILE "); - getrlimit(RLIMIT_NOFILE, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%d", rlim.rlim_cur); - - st->print(", AS "); - getrlimit(RLIMIT_AS, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - st->cr(); - - // load average - st->print("load average:"); - double loadavg[3]; - os::loadavg(loadavg, 3); - st->print("%0.02f %0.02f %0.02f", loadavg[0], loadavg[1], loadavg[2]); - st->cr(); - - // meminfo - st->print("\n/proc/meminfo:\n"); - _print_ascii_file("/proc/meminfo", st); - st->cr(); } -void os::pd_print_cpu_info(outputStream* st) { - st->print("\n/proc/cpuinfo:\n"); - if (!_print_ascii_file("/proc/cpuinfo", st)) { - st->print(" "); - } - st->cr(); +void os::Linux::print_full_memory_info(outputStream* st) { + st->print("\n/proc/meminfo:\n"); + _print_ascii_file("/proc/meminfo", st); + st->cr(); } void os::print_memory_info(outputStream* st) { @@ -2138,6 +2108,14 @@ void os::print_memory_info(outputStream* st) { st->cr(); } +void os::pd_print_cpu_info(outputStream* st) { + st->print("\n/proc/cpuinfo:\n"); + if (!_print_ascii_file("/proc/cpuinfo", st)) { + st->print(" "); + } + st->cr(); +} + // Taken from /usr/include/bits/siginfo.h Supposed to be architecture specific // but they're the same for all the linux arch that we support // and they're the same for solaris but there's no common place to put this. @@ -2491,7 +2469,7 @@ void linux_wrap_code(char* base, size_t size) { // All it does is to check if there are enough free pages // left at the time of mmap(). This could be a potential // problem. -bool os::commit_memory(char* addr, size_t size, bool exec) { +bool os::pd_commit_memory(char* addr, size_t size, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; uintptr_t res = (uintptr_t) ::mmap(addr, size, prot, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0); @@ -2514,7 +2492,7 @@ bool os::commit_memory(char* addr, size_t size, bool exec) { #define MADV_HUGEPAGE 14 #endif -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; @@ -2538,7 +2516,7 @@ bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, return false; } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { // We don't check the return value: madvise(MADV_HUGEPAGE) may not // be supported or the memory may already be backed by huge pages. @@ -2546,7 +2524,7 @@ void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { // This method works by doing an mmap over an existing mmaping and effectively discarding // the existing pages. However it won't work for SHM-based large pages that cannot be // uncommitted at all. We don't do anything in this case to avoid creating a segment with @@ -2668,7 +2646,7 @@ bool os::Linux::libnuma_init() { if (numa_available() != -1) { set_numa_all_nodes((unsigned long*)libnuma_dlsym(handle, "numa_all_nodes")); // Create a cpu -> node mapping - _cpu_to_node = new (ResourceObj::C_HEAP) GrowableArray(0, true); + _cpu_to_node = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(0, true); rebuild_cpu_to_node_map(); return true; } @@ -2698,7 +2676,7 @@ void os::Linux::rebuild_cpu_to_node_map() { cpu_to_node()->at_grow(cpu_num - 1); size_t node_num = numa_get_groups_num(); - unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size); + unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size, mtInternal); for (size_t i = 0; i < node_num; i++) { if (numa_node_to_cpus(i, cpu_map, cpu_map_size * sizeof(unsigned long)) != -1) { for (size_t j = 0; j < cpu_map_valid_size; j++) { @@ -2712,7 +2690,7 @@ void os::Linux::rebuild_cpu_to_node_map() { } } } - FREE_C_HEAP_ARRAY(unsigned long, cpu_map); + FREE_C_HEAP_ARRAY(unsigned long, cpu_map, mtInternal); } int os::Linux::get_node_by_cpu(int cpu_id) { @@ -2731,7 +2709,7 @@ os::Linux::numa_tonode_memory_func_t os::Linux::_numa_tonode_memory; os::Linux::numa_interleave_memory_func_t os::Linux::_numa_interleave_memory; unsigned long* os::Linux::_numa_all_nodes; -bool os::uncommit_memory(char* addr, size_t size) { +bool os::pd_uncommit_memory(char* addr, size_t size) { uintptr_t res = (uintptr_t) ::mmap(addr, size, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_NORESERVE|MAP_ANONYMOUS, -1, 0); return res != (uintptr_t) MAP_FAILED; @@ -2796,7 +2774,7 @@ bool get_stack_bounds(uintptr_t *bottom, uintptr_t *top) { // munmap() the guard pages we don't leave a hole in the stack // mapping. This only affects the main/initial thread, but guard // against future OS changes -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { uintptr_t stack_extent, stack_base; bool chk_bounds = NOT_DEBUG(os::Linux::is_initial_thread()) DEBUG_ONLY(true); if (chk_bounds && get_stack_bounds(&stack_extent, &stack_base)) { @@ -2869,12 +2847,12 @@ static int anon_munmap(char * addr, size_t size) { return ::munmap(addr, size) == 0; } -char* os::reserve_memory(size_t bytes, char* requested_addr, +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { return anon_mmap(requested_addr, bytes, (requested_addr != NULL)); } -bool os::release_memory(char* addr, size_t size) { +bool os::pd_release_memory(char* addr, size_t size) { return anon_munmap(addr, size); } @@ -3171,7 +3149,7 @@ bool os::can_execute_large_page_memory() { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -4693,7 +4671,7 @@ int os::socket_available(int fd, jint *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -4723,7 +4701,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -4733,7 +4711,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } @@ -5469,6 +5447,18 @@ bool os::is_headless_jre() { return true; } +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + const char* p = get_current_directory(buffer, bufferSize); + + if (p == NULL) { + assert(p != NULL, "failed to get current directory"); + return 0; + } + + return strlen(buffer); +} #ifdef JAVASE_EMBEDDED // diff --git a/hotspot/src/os/linux/vm/os_linux.hpp b/hotspot/src/os/linux/vm/os_linux.hpp index ec32232f4ed..0f0fa214a04 100644 --- a/hotspot/src/os/linux/vm/os_linux.hpp +++ b/hotspot/src/os/linux/vm/os_linux.hpp @@ -89,6 +89,10 @@ class Linux { static bool hugetlbfs_sanity_check(bool warn, size_t page_size); + static void print_full_memory_info(outputStream* st); + static void print_distro_info(outputStream* st); + static void print_libversion_info(outputStream* st); + public: static void init_thread_fpu_state(); static int get_fpu_control_word(); @@ -283,7 +287,7 @@ public: }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -318,7 +322,7 @@ class PlatformEvent : public CHeapObj { void SetAssociation (Thread * a) { _Assoc = a ; } } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: pthread_mutex_t _mutex [1] ; pthread_cond_t _cond [1] ; diff --git a/hotspot/src/os/linux/vm/os_linux.inline.hpp b/hotspot/src/os/linux/vm/os_linux.inline.hpp index 566c0ad3168..c663c9b6961 100644 --- a/hotspot/src/os/linux/vm/os_linux.inline.hpp +++ b/hotspot/src/os/linux/vm/os_linux.inline.hpp @@ -99,7 +99,7 @@ inline bool os::allocate_stack_guard_pages() { // On Linux, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/linux/vm/perfMemory_linux.cpp b/hotspot/src/os/linux/vm/perfMemory_linux.cpp index 1cd430cfbc7..8839aac6c10 100644 --- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp +++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp @@ -126,7 +126,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -153,7 +153,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -246,7 +246,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); // POSIX interface to getpwuid_r is used on LINUX struct passwd* p; @@ -278,14 +278,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -328,7 +328,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -338,7 +338,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -346,7 +346,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -357,13 +357,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -372,7 +372,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -381,13 +381,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -397,23 +397,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -434,7 +434,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -472,7 +472,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -480,7 +480,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -517,7 +517,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -556,7 +556,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -723,11 +723,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -743,7 +743,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -869,7 +869,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -884,9 +884,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/posix/vm/os_posix.cpp b/hotspot/src/os/posix/vm/os_posix.cpp index 42078342ec9..ce355c1cc9f 100644 --- a/hotspot/src/os/posix/vm/os_posix.cpp +++ b/hotspot/src/os/posix/vm/os_posix.cpp @@ -23,27 +23,30 @@ */ #include "prims/jvm.h" +#include "runtime/frame.inline.hpp" #include "runtime/os.hpp" #include "utilities/vmError.hpp" #include #include +#include + // Check core dump limit and report possible place where core can be found void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize) { + int n; struct rlimit rlim; - static char cwd[O_BUFLEN]; bool success; - get_current_directory(cwd, sizeof(cwd)); + n = get_core_path(buffer, bufferSize); if (getrlimit(RLIMIT_CORE, &rlim) != 0) { - jio_snprintf(buffer, bufferSize, "%s/core or core.%d (may not exist)", cwd, current_process_id()); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (may not exist)", current_process_id()); success = true; } else { switch(rlim.rlim_cur) { case RLIM_INFINITY: - jio_snprintf(buffer, bufferSize, "%s/core or core.%d", cwd, current_process_id()); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d", current_process_id()); success = true; break; case 0: @@ -51,7 +54,7 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* success = false; break; default: - jio_snprintf(buffer, bufferSize, "%s/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", cwd, current_process_id(), (unsigned long)(rlim.rlim_cur >> 10)); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", current_process_id(), (unsigned long)(rlim.rlim_cur >> 10)); success = true; break; } @@ -59,6 +62,23 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* VMError::report_coredump_status(buffer, success); } +address os::get_caller_pc(int n) { +#ifdef _NMT_NOINLINE_ + n ++; +#endif + frame fr = os::current_frame(); + while (n > 0 && fr.pc() && + !os::is_first_C_frame(&fr) && fr.sender_pc()) { + fr = os::get_sender_for_C_frame(&fr); + n --; + } + if (n == 0) { + return fr.pc(); + } else { + return NULL; + } +} + int os::get_last_error() { return errno; } @@ -72,3 +92,59 @@ void os::wait_for_keypress_at_exit(void) { // don't do anything on posix platforms return; } + +void os::Posix::print_load_average(outputStream* st) { + st->print("load average:"); + double loadavg[3]; + os::loadavg(loadavg, 3); + st->print("%0.02f %0.02f %0.02f", loadavg[0], loadavg[1], loadavg[2]); + st->cr(); +} + +void os::Posix::print_rlimit_info(outputStream* st) { + st->print("rlimit:"); + struct rlimit rlim; + + st->print(" STACK "); + getrlimit(RLIMIT_STACK, &rlim); + if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); + else st->print("%uk", rlim.rlim_cur >> 10); + + st->print(", CORE "); + getrlimit(RLIMIT_CORE, &rlim); + if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); + else st->print("%uk", rlim.rlim_cur >> 10); + + //Isn't there on solaris +#ifndef TARGET_OS_FAMILY_solaris + st->print(", NPROC "); + getrlimit(RLIMIT_NPROC, &rlim); + if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); + else st->print("%d", rlim.rlim_cur); +#endif + + st->print(", NOFILE "); + getrlimit(RLIMIT_NOFILE, &rlim); + if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); + else st->print("%d", rlim.rlim_cur); + + st->print(", AS "); + getrlimit(RLIMIT_AS, &rlim); + if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); + else st->print("%uk", rlim.rlim_cur >> 10); + st->cr(); +} + +void os::Posix::print_uname_info(outputStream* st) { + // kernel + st->print("uname:"); + struct utsname name; + uname(&name); + st->print(name.sysname); st->print(" "); + st->print(name.release); st->print(" "); + st->print(name.version); st->print(" "); + st->print(name.machine); + st->cr(); +} + + diff --git a/langtools/test/tools/javac/diags/examples/InvalidInferredTypes.java b/hotspot/src/os/posix/vm/os_posix.hpp similarity index 69% rename from langtools/test/tools/javac/diags/examples/InvalidInferredTypes.java rename to hotspot/src/os/posix/vm/os_posix.hpp index fafa25b6ce9..62ec7135d14 100644 --- a/langtools/test/tools/javac/diags/examples/InvalidInferredTypes.java +++ b/hotspot/src/os/posix/vm/os_posix.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -19,19 +19,23 @@ * 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. + * */ -// key: compiler.err.prob.found.req.1 -// key: compiler.misc.invalid.inferred.types -// key: compiler.misc.inferred.do.not.conform.to.upper.bounds +#ifndef OS_POSIX_VM_OS_POSIX_HPP +#define OS_POSIX_VM_OS_POSIX_HPP +class Posix { + friend class os; -import java.util.*; +protected: + static void print_distro_info(outputStream* st); + static void print_rlimit_info(outputStream* st); + static void print_uname_info(outputStream* st); + static void print_libversion_info(outputStream* st); + static void print_load_average(outputStream* st); -class InvalidInferredTypes { - List m() { return null; } +}; - void test() { - List li = m(); - } -} + +#endif diff --git a/hotspot/src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c b/hotspot/src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c new file mode 100644 index 00000000000..3cb2dc489d4 --- /dev/null +++ b/hotspot/src/os/solaris/add_gnu_debuglink/add_gnu_debuglink.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + * + */ + +/* + * Name: add_gnu_debuglink.c + * + * Description: Add a ".gnu_debuglink" section that refers to the specified + * debug_info_path to the specified ELF object. + * + * This program is adapted from the example program shown on the + * elf(3elf) man page and from code from the Solaris compiler + * driver. + */ + +/* + * needed to define SHF_EXCLUDE + */ +#define ELF_TARGET_ALL + +#include +#include +#include +#include +#include +#include + +static void failure(void); +static unsigned int gnu_debuglink_crc32(unsigned int crc, unsigned char *buf, + size_t len); + +void +main(int argc, char ** argv) { + /* new ELF section name */ + static char SEC_NAME[] = ".gnu_debuglink"; + + unsigned char buffer[8 * 1024]; /* I/O buffer */ + int buffer_len; /* buffer length */ + char * debug_info_path; /* debug info path */ + void * ehdr; /* ELF header */ + Elf * elf; /* ELF descriptor */ + char * elf_ident; /* ELF identity string */ + char * elf_obj; /* elf_obj file */ + int fd; /* descriptor for files */ + unsigned int file_crc = 0; /* CRC for debug info file */ + int is_elfclass64; /* is an ELFCLASS64 file? */ + Elf_Data * link_dat; /* ELF data for new debug info link */ + Elf_Data * name_dat; /* ELF data for new section name */ + Elf_Scn * new_scn; /* new ELF section descriptor */ + void * new_shdr; /* new ELF section header */ + Elf_Scn * scn; /* ELF section descriptor */ + void * shdr; /* ELF section header */ + + if (argc != 3) { + (void) fprintf(stderr, "Usage: %s debug_info_path elf_obj\n", argv[0]); + exit(2); + } + + debug_info_path = argv[1]; /* save for later */ + if ((fd = open(debug_info_path, O_RDONLY)) == -1) { + (void) fprintf(stderr, "%s: cannot open file.\n", debug_info_path); + exit(3); + } + + (void) printf("Computing CRC for '%s'\n", debug_info_path); + (void) fflush(stdout); + /* compute CRC for the debug info file */ + for (;;) { + int len = read(fd, buffer, sizeof buffer); + if (len <= 0) { + break; + } + file_crc = gnu_debuglink_crc32(file_crc, buffer, len); + } + (void) close(fd); + + /* open the elf_obj */ + elf_obj = argv[2]; + if ((fd = open(elf_obj, O_RDWR)) == -1) { + (void) fprintf(stderr, "%s: cannot open file.\n", elf_obj); + exit(4); + } + + (void) printf("Opening '%s' for update\n", elf_obj); + (void) fflush(stdout); + (void) elf_version(EV_CURRENT); /* coordinate ELF versions */ + + /* obtain the ELF descriptors from the input file */ + if ((elf = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL) { + failure(); + } + + /* determine if ELFCLASS64 or not? */ + elf_ident = elf_getident(elf, NULL); + is_elfclass64 = (elf_ident[EI_CLASS] == ELFCLASS64); + + /* get the ELF header */ + if (is_elfclass64) { + ehdr = elf64_getehdr(elf); + } else { + ehdr = elf32_getehdr(elf); + } + if (ehdr == NULL) { + failure(); + } + + /* get the ELF section descriptor */ + if (is_elfclass64) { + scn = elf_getscn(elf, ((Elf64_Ehdr *) ehdr)->e_shstrndx); + } else { + scn = elf_getscn(elf, ((Elf32_Ehdr *) ehdr)->e_shstrndx); + } + if (scn == NULL) { + failure(); + } + + /* get the section header */ + if (is_elfclass64) { + shdr = elf64_getshdr(scn); + } else { + shdr = elf32_getshdr(scn); + } + if (shdr == NULL) { + failure(); + } + + (void) printf("Adding ELF data for new section name\n"); + (void) fflush(stdout); + name_dat = elf_newdata(scn); + name_dat->d_buf = (void *) SEC_NAME; + if (is_elfclass64) { + name_dat->d_off = ((Elf64_Shdr *) shdr)->sh_size + 1; + } else { + name_dat->d_off = ((Elf32_Shdr *) shdr)->sh_size + 1; + } + name_dat->d_align = 1; + name_dat->d_size = strlen(SEC_NAME) + 1; + + new_scn = elf_newscn(elf); + + if (is_elfclass64) { + new_shdr = elf64_getshdr(new_scn); + ((Elf64_Shdr *) new_shdr)->sh_flags = SHF_EXCLUDE; + ((Elf64_Shdr *) new_shdr)->sh_type = SHT_PROGBITS; + ((Elf64_Shdr *) new_shdr)->sh_name = ((Elf64_Shdr *) shdr)->sh_size; + ((Elf64_Shdr *) new_shdr)->sh_addralign = 1; + ((Elf64_Shdr *) shdr)->sh_size += (strlen(SEC_NAME) + 1); + } else { + new_shdr = elf32_getshdr(new_scn); + ((Elf32_Shdr *) new_shdr)->sh_flags = SHF_EXCLUDE; + ((Elf32_Shdr *) new_shdr)->sh_type = SHT_PROGBITS; + ((Elf32_Shdr *) new_shdr)->sh_name = ((Elf32_Shdr *) shdr)->sh_size; + ((Elf32_Shdr *) new_shdr)->sh_addralign = 1; + ((Elf32_Shdr *) shdr)->sh_size += (strlen(SEC_NAME) + 1); + } + + (void) printf("Adding ELF data for debug_info_path value\n"); + (void) fflush(stdout); + (void) memset(buffer, 0, sizeof buffer); + buffer_len = strlen(debug_info_path) + 1; /* +1 for NUL */ + (void) strncpy((char *) buffer, debug_info_path, buffer_len); + if (buffer_len % 4 != 0) { + /* not on a 4 byte boundary so pad to the next one */ + buffer_len += (4 - buffer_len % 4); + } + /* save the CRC */ + (void) memcpy(&buffer[buffer_len], &file_crc, sizeof file_crc); + buffer_len += sizeof file_crc; + + link_dat = elf_newdata(new_scn); + link_dat->d_type = ELF_T_BYTE; + link_dat->d_size = buffer_len; + link_dat->d_buf = buffer; + link_dat->d_align = 1; + + (void) printf("Saving updates to '%s'\n", elf_obj); + (void) fflush(stdout); + (void) elf_update(elf, ELF_C_NULL); /* recalc ELF memory structures */ + (void) elf_update(elf, ELF_C_WRITE); /* write out changes to ELF obj */ + (void) elf_end(elf); /* done with ELF obj */ + (void) close(fd); + + (void) printf("Done updating '%s'\n", elf_obj); + (void) fflush(stdout); + exit(0); +} /* end main */ + + +static void +failure() { + (void) fprintf(stderr, "%s\n", elf_errmsg(elf_errno())); + exit(5); +} + + +/* + * The CRC used in gnu_debuglink, retrieved from + * http://sourceware.org/gdb/current/onlinedocs/gdb/Separate-Debug-Files.html#Separate-Debug-Files. + */ + +static unsigned int +gnu_debuglink_crc32(unsigned int crc, unsigned char *buf, size_t len) { + static const unsigned int crc32_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d + }; + + unsigned char *end; + + crc = ~crc & 0xffffffff; + for (end = buf + len; buf < end; ++buf) { + crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); + } + return ~crc & 0xffffffff; +} diff --git a/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp b/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp index 022643161a1..9457ab48270 100644 --- a/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp +++ b/hotspot/src/os/solaris/dtrace/generateJvmOffsets.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -220,10 +220,10 @@ int generateJvmOffsets(GEN_variant gen_variant) { printf("\n"); GEN_OFFS(methodOopDesc, _constMethod); - GEN_OFFS(methodOopDesc, _constants); GEN_OFFS(methodOopDesc, _access_flags); printf("\n"); + GEN_OFFS(constMethodOopDesc, _constants); GEN_OFFS(constMethodOopDesc, _flags); GEN_OFFS(constMethodOopDesc, _code_size); GEN_OFFS(constMethodOopDesc, _name_index); diff --git a/hotspot/src/os/solaris/dtrace/hs_private.d b/hotspot/src/os/solaris/dtrace/hs_private.d index 23463a409b3..df395e5c045 100644 --- a/hotspot/src/os/solaris/dtrace/hs_private.d +++ b/hotspot/src/os/solaris/dtrace/hs_private.d @@ -23,7 +23,6 @@ */ provider hs_private { - probe hashtable__new_entry(void*, uintptr_t, void*); probe safepoint__begin(); probe safepoint__end(); probe cms__initmark__begin(); diff --git a/hotspot/src/os/solaris/dtrace/jhelper.d b/hotspot/src/os/solaris/dtrace/jhelper.d index 75e74269576..ad68ac1f8b1 100644 --- a/hotspot/src/os/solaris/dtrace/jhelper.d +++ b/hotspot/src/os/solaris/dtrace/jhelper.d @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -118,7 +118,7 @@ dtrace:helper:ustack: copyin_offset(OFFSET_Symbol_body); copyin_offset(OFFSET_methodOopDesc_constMethod); - copyin_offset(OFFSET_methodOopDesc_constants); + copyin_offset(OFFSET_constMethodOopDesc_constants); copyin_offset(OFFSET_constMethodOopDesc_name_index); copyin_offset(OFFSET_constMethodOopDesc_signature_index); @@ -359,8 +359,8 @@ dtrace:helper:ustack: this->signatureIndex = copyin_uint16(this->constMethod + OFFSET_constMethodOopDesc_signature_index); - this->constantPool = copyin_ptr(this->methodOopPtr + - OFFSET_methodOopDesc_constants); + this->constantPool = copyin_ptr(this->constMethod + + OFFSET_constMethodOopDesc_constants); this->nameSymbol = copyin_ptr(this->constantPool + this->nameIndex * sizeof (pointer) + SIZE_constantPoolOopDesc); diff --git a/hotspot/src/os/solaris/dtrace/libjvm_db.c b/hotspot/src/os/solaris/dtrace/libjvm_db.c index 8caac23e9e2..62304ec114a 100644 --- a/hotspot/src/os/solaris/dtrace/libjvm_db.c +++ b/hotspot/src/os/solaris/dtrace/libjvm_db.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -514,10 +514,10 @@ name_for_methodOop(jvm_agent_t* J, uint64_t methodOopPtr, char * result, size_t char * signatureString = NULL; int err; - err = read_pointer(J, methodOopPtr + OFFSET_methodOopDesc_constants, &constantPool); - CHECK_FAIL(err); err = read_pointer(J, methodOopPtr + OFFSET_methodOopDesc_constMethod, &constMethod); CHECK_FAIL(err); + err = read_pointer(J, constMethod + OFFSET_constMethodOopDesc_constants, &constantPool); + CHECK_FAIL(err); /* To get name string */ err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_name_index, &nameIndex, 2); diff --git a/hotspot/src/os/solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c b/hotspot/src/os/solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c new file mode 100644 index 00000000000..6582d950639 --- /dev/null +++ b/hotspot/src/os/solaris/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + * + */ + +/* + * Name: fix_empty_sec_hdr_flags.c + * + * Description: Remove the SHF_ALLOC flag from "empty" section headers. + * An "empty" section header has sh_addr == 0 and sh_size == 0. + * + * This program is adapted from the example program shown on the + * elf(3elf) man page and from code from the Solaris compiler + * driver. + */ + +#include +#include +#include +#include +#include +#include + +static void failure(void); + +void +main(int argc, char ** argv) { + void * ehdr; /* ELF header */ + unsigned int i; /* section counter */ + int fd; /* descriptor for file */ + Elf * elf; /* ELF descriptor */ + char * elf_ident; /* ELF identity string */ + char * elf_obj; /* elf_obj file */ + int fix_count; /* number of flags fixed */ + int is_elfclass64; /* is an ELFCLASS64 file? */ + Elf_Scn * scn; /* ELF section descriptor */ + void * shdr; /* ELF section header */ + Elf_Data * shstrtab; /* ELF section header string table */ + + if (argc != 2) { + (void) fprintf(stderr, "Usage: %s elf_obj\n", argv[0]); + exit(2); + } + + /* open the elf_obj */ + elf_obj = argv[1]; + if ((fd = open(elf_obj, O_RDWR)) == -1) { + (void) fprintf(stderr, "%s: cannot open file.\n", elf_obj); + exit(3); + } + + (void) printf("Opening '%s' for update\n", elf_obj); + (void) fflush(stdout); + (void) elf_version(EV_CURRENT); /* coordinate ELF versions */ + + /* obtain the ELF descriptors from the input file */ + if ((elf = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL) { + failure(); + } + + /* determine if ELFCLASS64 or not? */ + elf_ident = elf_getident(elf, NULL); + is_elfclass64 = (elf_ident[EI_CLASS] == ELFCLASS64); + + /* get the ELF header */ + if (is_elfclass64) { + ehdr = elf64_getehdr(elf); + } else { + ehdr = elf32_getehdr(elf); + } + if (ehdr == NULL) { + failure(); + } + + /* get the ELF section descriptor */ + if (is_elfclass64) { + scn = elf_getscn(elf, ((Elf64_Ehdr *) ehdr)->e_shstrndx); + } else { + scn = elf_getscn(elf, ((Elf32_Ehdr *) ehdr)->e_shstrndx); + } + if (scn == NULL) { + failure(); + } + + /* get the section header string table */ + shstrtab = elf_getdata(scn, NULL); + if (shstrtab == NULL) { + failure(); + } + + fix_count = 0; + + /* traverse the sections of the input file */ + for (i = 1, scn = NULL; scn = elf_nextscn(elf, scn); i++) { + int has_flag_set; /* is SHF_ALLOC flag set? */ + int is_empty; /* is section empty? */ + char * name; /* short hand pointer */ + + /* get the section header */ + if (is_elfclass64) { + shdr = elf64_getshdr(scn); + } else { + shdr = elf32_getshdr(scn); + } + if (shdr == NULL) { + failure(); + } + + if (is_elfclass64) { + name = (char *)shstrtab->d_buf + ((Elf64_Shdr *) shdr)->sh_name; + } else { + name = (char *)shstrtab->d_buf + ((Elf32_Shdr *) shdr)->sh_name; + } + + if (is_elfclass64) { + has_flag_set = ((Elf64_Shdr *) shdr)->sh_flags & SHF_ALLOC; + is_empty = ((Elf64_Shdr *) shdr)->sh_addr == 0 && + ((Elf64_Shdr *) shdr)->sh_size == 0; + } else { + has_flag_set = ((Elf32_Shdr *) shdr)->sh_flags & SHF_ALLOC; + is_empty = ((Elf32_Shdr *) shdr)->sh_addr == 0 && + ((Elf32_Shdr *) shdr)->sh_size == 0; + } + + if (is_empty && has_flag_set) { + (void) printf("section[%u] '%s' is empty, " + "but SHF_ALLOC flag is set.\n", i, name); + (void) printf("Clearing the SHF_ALLOC flag.\n"); + + if (is_elfclass64) { + ((Elf64_Shdr *) shdr)->sh_flags &= ~SHF_ALLOC; + } else { + ((Elf32_Shdr *) shdr)->sh_flags &= ~SHF_ALLOC; + } + fix_count++; + } + } /* end for each ELF section */ + + if (fix_count > 0) { + (void) printf("Saving %d updates to '%s'\n", fix_count, elf_obj); + (void) fflush(stdout); + (void) elf_update(elf, ELF_C_NULL); /* recalc ELF memory structures */ + (void) elf_update(elf, ELF_C_WRITE); /* write out changes to ELF obj */ + } else { + (void) printf("No SHF_ALLOC flags needed to be cleared.\n"); + } + + (void) elf_end(elf); /* done with ELF obj */ + (void) close(fd); + + (void) printf("Done %s '%s'\n", + (fix_count > 0) ? "updating" : "with", elf_obj); + (void) fflush(stdout); + exit(0); +} /* end main */ + + +static void +failure() { + (void) fprintf(stderr, "%s\n", elf_errmsg(elf_errno())); + exit(6); +} diff --git a/hotspot/src/os/solaris/vm/osThread_solaris.hpp b/hotspot/src/os/solaris/vm/osThread_solaris.hpp index 6e79e1855db..2a7a2470a08 100644 --- a/hotspot/src/os/solaris/vm/osThread_solaris.hpp +++ b/hotspot/src/os/solaris/vm/osThread_solaris.hpp @@ -26,9 +26,10 @@ #define OS_SOLARIS_VM_OSTHREAD_SOLARIS_HPP // This is embedded via include into the class OSThread + public: + typedef thread_t thread_id_t; private: - thread_t _thread_id; // Solaris thread id uint _lwp_id; // lwp ID, only used with bound threads int _native_priority; // Saved native priority when starting // a bound thread @@ -36,8 +37,6 @@ bool _vm_created_thread; // true if the VM created this thread, // false if primary thread or attached thread public: - static size_t thread_id_size() { return sizeof(thread_t); } - thread_t thread_id() const { return _thread_id; } uint lwp_id() const { return _lwp_id; } int native_priority() const { return _native_priority; } @@ -63,7 +62,6 @@ return true; } #endif - void set_thread_id(thread_t id) { _thread_id = id; } void set_lwp_id(uint id) { _lwp_id = id; } void set_native_priority(int prio) { _native_priority = prio; } diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp index 31bd41862a6..5e11a9d5588 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.cpp +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp @@ -546,7 +546,7 @@ static bool find_processors_in_pset(psetid_t pset, // Find the number of processors in the processor set. if (pset_info(pset, NULL, id_length, NULL) == 0) { // Make up an array to hold their ids. - *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length); + *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length, mtInternal); // Fill in the array with their processor ids. if (pset_info(pset, NULL, id_length, *id_array) == 0) { result = true; @@ -577,7 +577,7 @@ static bool find_processors_online(processorid_t** id_array, // Find the number of processors online. *id_length = sysconf(_SC_NPROCESSORS_ONLN); // Make up an array to hold their ids. - *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length); + *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length, mtInternal); // Processors need not be numbered consecutively. long found = 0; processorid_t next = 0; @@ -629,7 +629,7 @@ static bool assign_distribution(processorid_t* id_array, // The next id, to limit loops. const processorid_t limit_id = max_id + 1; // Make up markers for available processors. - bool* available_id = NEW_C_HEAP_ARRAY(bool, limit_id); + bool* available_id = NEW_C_HEAP_ARRAY(bool, limit_id, mtInternal); for (uint c = 0; c < limit_id; c += 1) { available_id[c] = false; } @@ -666,7 +666,7 @@ static bool assign_distribution(processorid_t* id_array, } } if (available_id != NULL) { - FREE_C_HEAP_ARRAY(bool, available_id); + FREE_C_HEAP_ARRAY(bool, available_id, mtInternal); } return true; } @@ -698,7 +698,7 @@ bool os::distribute_processes(uint length, uint* distribution) { } } if (id_array != NULL) { - FREE_C_HEAP_ARRAY(processorid_t, id_array); + FREE_C_HEAP_ARRAY(processorid_t, id_array, mtInternal); } return result; } @@ -771,8 +771,8 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) -#define free(p) FREE_C_HEAP_ARRAY(char, p) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) +#define free(p) FREE_C_HEAP_ARRAY(char, p, mtInternal) #define getenv(n) ::getenv(n) #define EXTENSIONS_DIR "/lib/ext" @@ -1927,11 +1927,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/lib%s.so", pname, fname); @@ -2242,61 +2242,44 @@ static bool _print_ascii_file(const char* filename, outputStream* st) { return true; } +void os::print_os_info_brief(outputStream* st) { + os::Solaris::print_distro_info(st); + + os::Posix::print_uname_info(st); + + os::Solaris::print_libversion_info(st); +} + void os::print_os_info(outputStream* st) { st->print("OS:"); - if (!_print_ascii_file("/etc/release", st)) { - st->print("Solaris"); - } - st->cr(); + os::Solaris::print_distro_info(st); - // kernel - st->print("uname:"); - struct utsname name; - uname(&name); - st->print(name.sysname); st->print(" "); - st->print(name.release); st->print(" "); - st->print(name.version); st->print(" "); - st->print(name.machine); + os::Posix::print_uname_info(st); - // libthread - if (os::Solaris::T2_libthread()) st->print(" (T2 libthread)"); - else st->print(" (T1 libthread)"); - st->cr(); + os::Solaris::print_libversion_info(st); - // rlimit - st->print("rlimit:"); - struct rlimit rlim; + os::Posix::print_rlimit_info(st); - st->print(" STACK "); - getrlimit(RLIMIT_STACK, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - - st->print(", CORE "); - getrlimit(RLIMIT_CORE, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - - st->print(", NOFILE "); - getrlimit(RLIMIT_NOFILE, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%d", rlim.rlim_cur); - - st->print(", AS "); - getrlimit(RLIMIT_AS, &rlim); - if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); - else st->print("%uk", rlim.rlim_cur >> 10); - st->cr(); - - // load average - st->print("load average:"); - double loadavg[3]; - os::loadavg(loadavg, 3); - st->print("%0.02f %0.02f %0.02f", loadavg[0], loadavg[1], loadavg[2]); - st->cr(); + os::Posix::print_load_average(st); } +void os::Solaris::print_distro_info(outputStream* st) { + if (!_print_ascii_file("/etc/release", st)) { + st->print("Solaris"); + } + st->cr(); +} + +void os::Solaris::print_libversion_info(outputStream* st) { + if (os::Solaris::T2_libthread()) { + st->print(" (T2 libthread)"); + } + else { + st->print(" (T1 libthread)"); + } + st->cr(); +} static bool check_addr0(outputStream* st) { jboolean status = false; @@ -2679,17 +2662,17 @@ void os::Solaris::init_signal_mem() { // pending_signals has one int per signal // The additional signal is for SIGEXIT - exit signal to signal_thread - pending_signals = (jint *)os::malloc(sizeof(jint) * (Sigexit+1)); + pending_signals = (jint *)os::malloc(sizeof(jint) * (Sigexit+1), mtInternal); memset(pending_signals, 0, (sizeof(jint) * (Sigexit+1))); if (UseSignalChaining) { chainedsigactions = (struct sigaction *)malloc(sizeof(struct sigaction) - * (Maxsignum + 1)); + * (Maxsignum + 1), mtInternal); memset(chainedsigactions, 0, (sizeof(struct sigaction) * (Maxsignum + 1))); - preinstalled_sigs = (int *)os::malloc(sizeof(int) * (Maxsignum + 1)); + preinstalled_sigs = (int *)os::malloc(sizeof(int) * (Maxsignum + 1), mtInternal); memset(preinstalled_sigs, 0, (sizeof(int) * (Maxsignum + 1))); } - ourSigFlags = (int*)malloc(sizeof(int) * (Maxsignum + 1 )); + ourSigFlags = (int*)malloc(sizeof(int) * (Maxsignum + 1 ), mtInternal); memset(ourSigFlags, 0, sizeof(int) * (Maxsignum + 1)); } @@ -2777,7 +2760,7 @@ int os::vm_allocation_granularity() { return page_size; } -bool os::commit_memory(char* addr, size_t bytes, bool exec) { +bool os::pd_commit_memory(char* addr, size_t bytes, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; size_t size = bytes; char *res = Solaris::mmap_chunk(addr, size, MAP_PRIVATE|MAP_FIXED, prot); @@ -2790,7 +2773,7 @@ bool os::commit_memory(char* addr, size_t bytes, bool exec) { return false; } -bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t bytes, size_t alignment_hint, bool exec) { if (commit_memory(addr, bytes, exec)) { if (UseMPSS && alignment_hint > (size_t)vm_page_size()) { @@ -2820,14 +2803,14 @@ bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, } // Uncommit the pages in a specified region. -void os::free_memory(char* addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char* addr, size_t bytes, size_t alignment_hint) { if (madvise(addr, bytes, MADV_FREE) < 0) { debug_only(warning("MADV_FREE failed.")); return; } } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -2836,7 +2819,7 @@ bool os::remove_stack_guard_pages(char* addr, size_t size) { } // Change the page size in a given range. -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned."); assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned."); if (UseLargePages && UseMPSS) { @@ -3023,7 +3006,7 @@ char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info return end; } -bool os::uncommit_memory(char* addr, size_t bytes) { +bool os::pd_uncommit_memory(char* addr, size_t bytes) { size_t size = bytes; // Map uncommitted pages PROT_NONE so we fail early if we touch an // uncommitted page. Otherwise, the read/write might succeed if we @@ -3062,7 +3045,7 @@ char* os::Solaris::anon_mmap(char* requested_addr, size_t bytes, size_t alignmen return mmap_chunk(addr, bytes, flags, PROT_NONE); } -char* os::reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { char* addr = Solaris::anon_mmap(requested_addr, bytes, alignment_hint, (requested_addr != NULL)); guarantee(requested_addr == NULL || requested_addr == addr, @@ -3073,7 +3056,7 @@ char* os::reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hi // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -3195,7 +3178,7 @@ char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { return (i < max_tries) ? requested_addr : NULL; } -bool os::release_memory(char* addr, size_t bytes) { +bool os::pd_release_memory(char* addr, size_t bytes) { size_t size = bytes; return munmap(addr, size) == 0; } @@ -4809,7 +4792,7 @@ bool isT2_libthread() { lwpSize = 16*1024; for (;;) { ::lseek64 (lwpFile, 0, SEEK_SET); - lwpArray = (prheader_t *)NEW_C_HEAP_ARRAY(char, lwpSize); + lwpArray = (prheader_t *)NEW_C_HEAP_ARRAY(char, lwpSize, mtInternal); if (::read(lwpFile, lwpArray, lwpSize) < 0) { if (ThreadPriorityVerbose) warning("Error reading /proc/self/lstatus\n"); break; @@ -4827,10 +4810,10 @@ bool isT2_libthread() { break; } lwpSize = lwpArray->pr_nent * lwpArray->pr_entsize; - FREE_C_HEAP_ARRAY(char, lwpArray); // retry. + FREE_C_HEAP_ARRAY(char, lwpArray, mtInternal); // retry. } - FREE_C_HEAP_ARRAY(char, lwpArray); + FREE_C_HEAP_ARRAY(char, lwpArray, mtInternal); ::close (lwpFile); if (ThreadPriorityVerbose) { if (isT2) tty->print_cr("We are running with a T2 libthread\n"); @@ -5154,9 +5137,9 @@ jint os::init_2(void) { UseNUMA = false; } else { size_t lgrp_limit = os::numa_get_groups_num(); - int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit); + int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit, mtInternal); size_t lgrp_num = os::numa_get_leaf_groups(lgrp_ids, lgrp_limit); - FREE_C_HEAP_ARRAY(int, lgrp_ids); + FREE_C_HEAP_ARRAY(int, lgrp_ids, mtInternal); if (lgrp_num < 2) { // There's only one locality group, disable NUMA. UseNUMA = false; @@ -5502,7 +5485,7 @@ int os::available(int fd, jlong *bytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -5534,7 +5517,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -5544,7 +5527,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } @@ -6554,3 +6537,16 @@ int os::bind(int fd, struct sockaddr* him, socklen_t len) { INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\ os::Solaris::clear_interrupted); } + +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + const char* p = get_current_directory(buffer, bufferSize); + + if (p == NULL) { + assert(p != NULL, "failed to get current directory"); + return 0; + } + + return strlen(buffer); +} diff --git a/hotspot/src/os/solaris/vm/os_solaris.hpp b/hotspot/src/os/solaris/vm/os_solaris.hpp index 991cf021082..174f2529dbe 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.hpp +++ b/hotspot/src/os/solaris/vm/os_solaris.hpp @@ -180,6 +180,9 @@ class Solaris { // proc_t structure (note that this is a system struct). static address _main_stack_base; + static void print_distro_info(outputStream* st); + static void print_libversion_info(outputStream* st); + public: static void libthread_init(); static void synchronization_init(); @@ -343,7 +346,7 @@ class Solaris { }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -380,7 +383,7 @@ class PlatformEvent : public CHeapObj { void unpark () ; } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: mutex_t _mutex [1] ; cond_t _cond [1] ; diff --git a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp index 7b63badc434..2468100fc43 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp +++ b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp @@ -71,7 +71,7 @@ inline bool os::allocate_stack_guard_pages() { // On Solaris, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp index 1d1ff260cd8..c841ff8a1b6 100644 --- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp +++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp @@ -128,7 +128,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -155,7 +155,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -248,7 +248,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); #ifdef _GNU_SOURCE struct passwd* p = NULL; @@ -269,14 +269,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -319,7 +319,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -329,7 +329,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -337,7 +337,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -348,13 +348,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -363,7 +363,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -372,13 +372,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -388,23 +388,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -471,7 +471,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a NULL terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -509,7 +509,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -517,7 +517,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -554,7 +554,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -593,7 +593,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -738,11 +738,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -758,7 +758,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -884,7 +884,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -899,9 +899,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/windows/vm/osThread_windows.hpp b/hotspot/src/os/windows/vm/osThread_windows.hpp index 28cd45c5c2f..af07695aa75 100644 --- a/hotspot/src/os/windows/vm/osThread_windows.hpp +++ b/hotspot/src/os/windows/vm/osThread_windows.hpp @@ -25,12 +25,13 @@ #ifndef OS_WINDOWS_VM_OSTHREAD_WINDOWS_HPP #define OS_WINDOWS_VM_OSTHREAD_WINDOWS_HPP -typedef void* HANDLE; + typedef void* HANDLE; + public: + typedef unsigned long thread_id_t; private: // Win32-specific thread information HANDLE _thread_handle; // Win32 thread handle - unsigned long _thread_id; // Win32 thread id HANDLE _interrupt_event; // Event signalled on thread interrupt ThreadState _last_state; @@ -42,9 +43,6 @@ typedef void* HANDLE; HANDLE interrupt_event() const { return _interrupt_event; } void set_interrupt_event(HANDLE interrupt_event) { _interrupt_event = interrupt_event; } - - static size_t thread_id_size() { return sizeof(unsigned long); } - unsigned long thread_id() const { return _thread_id; } #ifndef PRODUCT // Used for debugging, return a unique integer for each thread. int thread_identifier() const { return _thread_id; } @@ -56,8 +54,6 @@ typedef void* HANDLE; return false; } #endif // ASSERT - void set_thread_id(unsigned long thread_id) { _thread_id = thread_id; } - bool is_try_mutex_enter() { return false; } // This is a temporary fix for the thread states during diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp index c607905e836..5534a1ea0a1 100644 --- a/hotspot/src/os/windows/vm/os_windows.cpp +++ b/hotspot/src/os/windows/vm/os_windows.cpp @@ -96,7 +96,6 @@ #include #include // For _beginthreadex(), _endthreadex() #include // For os::dll_address_to_function_name - /* for enumerating dll libraries */ #include @@ -214,13 +213,13 @@ void os::init_system_properties_values() { } } - home_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + 1); + home_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + 1, mtInternal); if (home_path == NULL) return; strcpy(home_path, home_dir); Arguments::set_java_home(home_path); - dll_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + strlen(bin) + 1); + dll_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + strlen(bin) + 1, mtInternal); if (dll_path == NULL) return; strcpy(dll_path, home_dir); @@ -251,7 +250,7 @@ void os::init_system_properties_values() { char *path_str = ::getenv("PATH"); library_path = NEW_C_HEAP_ARRAY(char, MAX_PATH * 5 + sizeof(PACKAGE_DIR) + - sizeof(BIN_DIR) + (path_str ? strlen(path_str) : 0) + 10); + sizeof(BIN_DIR) + (path_str ? strlen(path_str) : 0) + 10, mtInternal); library_path[0] = '\0'; @@ -280,7 +279,7 @@ void os::init_system_properties_values() { strcat(library_path, ";."); Arguments::set_library_path(library_path); - FREE_C_HEAP_ARRAY(char, library_path); + FREE_C_HEAP_ARRAY(char, library_path, mtInternal); } /* Default extensions directory */ @@ -300,7 +299,7 @@ void os::init_system_properties_values() { { #define ENDORSED_DIR "\\lib\\endorsed" size_t len = strlen(Arguments::get_java_home()) + sizeof(ENDORSED_DIR); - char * buf = NEW_C_HEAP_ARRAY(char, len); + char * buf = NEW_C_HEAP_ARRAY(char, len, mtInternal); sprintf(buf, "%s%s", Arguments::get_java_home(), ENDORSED_DIR); Arguments::set_endorsed_dirs(buf); #undef ENDORSED_DIR @@ -324,6 +323,23 @@ extern "C" void breakpoint() { os::breakpoint(); } +/* + * RtlCaptureStackBackTrace Windows API may not exist prior to Windows XP. + * So far, this method is only used by Native Memory Tracking, which is + * only supported on Windows XP or later. + */ +address os::get_caller_pc(int n) { +#ifdef _NMT_NOINLINE_ + n ++; +#endif + address pc; + if (os::Kernel32Dll::RtlCaptureStackBackTrace(n + 1, 1, (PVOID*)&pc, NULL) == 1) { + return pc; + } + return NULL; +} + + // os::current_stack_base() // // Returns the base of the stack, which is the stack's @@ -1014,7 +1030,7 @@ DIR * os::opendir(const char *dirname) { assert(dirname != NULL, "just checking"); // hotspot change - DIR *dirp = (DIR *)malloc(sizeof(DIR)); + DIR *dirp = (DIR *)malloc(sizeof(DIR), mtInternal); DWORD fattr; // hotspot change char alt_dirname[4] = { 0, 0, 0, 0 }; @@ -1036,9 +1052,9 @@ os::opendir(const char *dirname) dirname = alt_dirname; } - dirp->path = (char *)malloc(strlen(dirname) + 5); + dirp->path = (char *)malloc(strlen(dirname) + 5, mtInternal); if (dirp->path == 0) { - free(dirp); + free(dirp, mtInternal); errno = ENOMEM; return 0; } @@ -1046,13 +1062,13 @@ os::opendir(const char *dirname) fattr = GetFileAttributes(dirp->path); if (fattr == 0xffffffff) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = ENOENT; return 0; } else if ((fattr & FILE_ATTRIBUTE_DIRECTORY) == 0) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = ENOTDIR; return 0; } @@ -1070,8 +1086,8 @@ os::opendir(const char *dirname) dirp->handle = FindFirstFile(dirp->path, &dirp->find_data); if (dirp->handle == INVALID_HANDLE_VALUE) { if (GetLastError() != ERROR_FILE_NOT_FOUND) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = EACCES; return 0; } @@ -1114,8 +1130,8 @@ os::closedir(DIR *dirp) } dirp->handle = INVALID_HANDLE_VALUE; } - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); return 0; } @@ -1176,11 +1192,11 @@ void os::dll_build_name(char *buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { jio_snprintf(buffer, buflen, "%s\\%s.dll", pname, fname); @@ -1562,9 +1578,17 @@ void os::print_dll_info(outputStream *st) { enumerate_modules(pid, _print_module, (void *)st); } +void os::print_os_info_brief(outputStream* st) { + os::print_os_info(st); +} + void os::print_os_info(outputStream* st) { st->print("OS:"); + os::win32::print_windows_version(st); +} + +void os::win32::print_windows_version(outputStream* st) { OSVERSIONINFOEX osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); @@ -1583,7 +1607,8 @@ void os::print_os_info(outputStream* st) { case 5001: st->print(" Windows XP"); break; case 5002: case 6000: - case 6001: { + case 6001: + case 6002: { // Retrieve SYSTEM_INFO from GetNativeSystemInfo call so that we could // find out whether we are running on 64 bit processor or not. SYSTEM_INFO si; @@ -1615,6 +1640,14 @@ void os::print_os_info(outputStream* st) { } if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) st->print(" , 64 bit"); + } else if (os_vers == 6002) { + if (osvi.wProductType == VER_NT_WORKSTATION) { + st->print(" Windows 8"); + } else { + st->print(" Windows Server 2012"); + } + if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) + st->print(" , 64 bit"); } else { // future os // Unrecognized windows, print out its major and minor versions st->print(" Windows NT %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion); @@ -2620,7 +2653,7 @@ private: void free_node_list() { if (_numa_used_node_list != NULL) { - FREE_C_HEAP_ARRAY(int, _numa_used_node_list); + FREE_C_HEAP_ARRAY(int, _numa_used_node_list, mtInternal); } } @@ -2642,7 +2675,7 @@ public: ULONG highest_node_number; if (!os::Kernel32Dll::GetNumaHighestNodeNumber(&highest_node_number)) return false; free_node_list(); - _numa_used_node_list = NEW_C_HEAP_ARRAY(int, highest_node_number + 1); + _numa_used_node_list = NEW_C_HEAP_ARRAY(int, highest_node_number + 1, mtInternal); for (unsigned int i = 0; i <= highest_node_number; i++) { ULONGLONG proc_mask_numa_node; if (!os::Kernel32Dll::GetNumaNodeProcessorMask(i, &proc_mask_numa_node)) return false; @@ -2901,7 +2934,7 @@ void os::large_page_init() { // On win32, one cannot release just a part of reserved memory, it's an // all or nothing deal. When we split a reservation, we must break the // reservation into two reservations. -void os::split_reserved_memory(char *base, size_t size, size_t split, +void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { if (size > 0) { release_memory(base, size); @@ -2914,7 +2947,7 @@ void os::split_reserved_memory(char *base, size_t size, size_t split, } } -char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { +char* os::pd_reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { assert((size_t)addr % os::vm_allocation_granularity() == 0, "reserve alignment"); assert(bytes % os::vm_allocation_granularity() == 0, "reserve block size"); @@ -2947,7 +2980,7 @@ char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { // Windows os::reserve_memory() fails of the requested address range is // not avilable. return reserve_memory(bytes, requested_addr); @@ -3010,7 +3043,7 @@ bool os::release_memory_special(char* base, size_t bytes) { void os::print_statistics() { } -bool os::commit_memory(char* addr, size_t bytes, bool exec) { +bool os::pd_commit_memory(char* addr, size_t bytes, bool exec) { if (bytes == 0) { // Don't bother the OS with noops. return true; @@ -3058,26 +3091,26 @@ bool os::commit_memory(char* addr, size_t bytes, bool exec) { return true; } -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { return commit_memory(addr, size, exec); } -bool os::uncommit_memory(char* addr, size_t bytes) { +bool os::pd_uncommit_memory(char* addr, size_t bytes) { if (bytes == 0) { // Don't bother the OS with noops. return true; } assert((size_t) addr % os::vm_page_size() == 0, "uncommit on page boundaries"); assert(bytes % os::vm_page_size() == 0, "uncommit in page-sized chunks"); - return VirtualFree(addr, bytes, MEM_DECOMMIT) != 0; + return (VirtualFree(addr, bytes, MEM_DECOMMIT) != 0); } -bool os::release_memory(char* addr, size_t bytes) { +bool os::pd_release_memory(char* addr, size_t bytes) { return VirtualFree(addr, 0, MEM_RELEASE) != 0; } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -3124,8 +3157,8 @@ bool os::unguard_memory(char* addr, size_t bytes) { return VirtualProtect(addr, bytes, PAGE_READWRITE, &old_status) != 0; } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { } +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { } void os::numa_make_global(char *addr, size_t bytes) { } void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) { } bool os::numa_topology_changed() { return false; } @@ -4259,14 +4292,14 @@ static int stdinAvailable(int fd, long *pbytes) { numEvents = MAX_INPUT_EVENTS; } - lpBuffer = (INPUT_RECORD *)os::malloc(numEvents * sizeof(INPUT_RECORD)); + lpBuffer = (INPUT_RECORD *)os::malloc(numEvents * sizeof(INPUT_RECORD), mtInternal); if (lpBuffer == NULL) { return FALSE; } error = ::PeekConsoleInput(han, lpBuffer, numEvents, &numEventsRead); if (error == 0) { - os::free(lpBuffer); + os::free(lpBuffer, mtInternal); return FALSE; } @@ -4287,7 +4320,7 @@ static int stdinAvailable(int fd, long *pbytes) { } if(lpBuffer != NULL) { - os::free(lpBuffer); + os::free(lpBuffer, mtInternal); } *pbytes = (long) actualLength; @@ -4295,7 +4328,7 @@ static int stdinAvailable(int fd, long *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { HANDLE hFile; @@ -4415,7 +4448,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // This OS does not allow existing memory maps to be remapped so we @@ -4428,15 +4461,15 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // call above and the map_memory() call below where a thread in native // code may be able to access an address that is no longer mapped. - return os::map_memory(fd, file_name, file_offset, addr, bytes, read_only, - allow_exec); + return os::map_memory(fd, file_name, file_offset, addr, bytes, + read_only, allow_exec); } // Unmap a block of memory. // Returns true=success, otherwise false. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { BOOL result = UnmapViewOfFile(addr); if (result == 0) { if (PrintMiscellaneous && Verbose) { @@ -4914,11 +4947,15 @@ typedef SIZE_T (WINAPI* GetLargePageMinimum_Fn)(void); typedef LPVOID (WINAPI *VirtualAllocExNuma_Fn) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD); typedef BOOL (WINAPI *GetNumaHighestNodeNumber_Fn) (PULONG); typedef BOOL (WINAPI *GetNumaNodeProcessorMask_Fn) (UCHAR, PULONGLONG); +typedef USHORT (WINAPI* RtlCaptureStackBackTrace_Fn)(ULONG, ULONG, PVOID*, PULONG); GetLargePageMinimum_Fn os::Kernel32Dll::_GetLargePageMinimum = NULL; VirtualAllocExNuma_Fn os::Kernel32Dll::_VirtualAllocExNuma = NULL; GetNumaHighestNodeNumber_Fn os::Kernel32Dll::_GetNumaHighestNodeNumber = NULL; GetNumaNodeProcessorMask_Fn os::Kernel32Dll::_GetNumaNodeProcessorMask = NULL; +RtlCaptureStackBackTrace_Fn os::Kernel32Dll::_RtlCaptureStackBackTrace = NULL; + + BOOL os::Kernel32Dll::initialized = FALSE; SIZE_T os::Kernel32Dll::GetLargePageMinimum() { assert(initialized && _GetLargePageMinimum != NULL, @@ -4961,6 +4998,19 @@ BOOL os::Kernel32Dll::GetNumaNodeProcessorMask(UCHAR node, PULONGLONG proc_mask) return _GetNumaNodeProcessorMask(node, proc_mask); } +USHORT os::Kernel32Dll::RtlCaptureStackBackTrace(ULONG FrameToSkip, + ULONG FrameToCapture, PVOID* BackTrace, PULONG BackTraceHash) { + if (!initialized) { + initialize(); + } + + if (_RtlCaptureStackBackTrace != NULL) { + return _RtlCaptureStackBackTrace(FrameToSkip, FrameToCapture, + BackTrace, BackTraceHash); + } else { + return 0; + } +} void os::Kernel32Dll::initializeCommon() { if (!initialized) { @@ -4970,6 +5020,7 @@ void os::Kernel32Dll::initializeCommon() { _VirtualAllocExNuma = (VirtualAllocExNuma_Fn)::GetProcAddress(handle, "VirtualAllocExNuma"); _GetNumaHighestNodeNumber = (GetNumaHighestNodeNumber_Fn)::GetProcAddress(handle, "GetNumaHighestNodeNumber"); _GetNumaNodeProcessorMask = (GetNumaNodeProcessorMask_Fn)::GetProcAddress(handle, "GetNumaNodeProcessorMask"); + _RtlCaptureStackBackTrace = (RtlCaptureStackBackTrace_Fn)::GetProcAddress(handle, "RtlCaptureStackBackTrace"); initialized = TRUE; } } @@ -5084,7 +5135,6 @@ Module32First_Fn os::Kernel32Dll::_Module32First = NULL; Module32Next_Fn os::Kernel32Dll::_Module32Next = NULL; GetNativeSystemInfo_Fn os::Kernel32Dll::_GetNativeSystemInfo = NULL; - void os::Kernel32Dll::initialize() { if (!initialized) { HMODULE handle = ::GetModuleHandle("Kernel32.dll"); @@ -5162,8 +5212,6 @@ void os::Kernel32Dll::GetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo) { _GetNativeSystemInfo(lpSystemInfo); } - - // PSAPI API diff --git a/hotspot/src/os/windows/vm/os_windows.hpp b/hotspot/src/os/windows/vm/os_windows.hpp index 353d595ebc7..33ea7064ba6 100644 --- a/hotspot/src/os/windows/vm/os_windows.hpp +++ b/hotspot/src/os/windows/vm/os_windows.hpp @@ -27,6 +27,7 @@ // Win32_OS defines the interface to windows operating systems class win32 { + friend class os; protected: static int _vm_page_size; @@ -39,6 +40,8 @@ class win32 { static bool _is_windows_2003; static bool _is_windows_server; + static void print_windows_version(outputStream* st); + public: // Windows-specific interface: static void initialize_system_info(); @@ -95,7 +98,7 @@ class win32 { static LONG WINAPI serialize_fault_filter(struct _EXCEPTION_POINTERS* e); }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _Event is sole occupant of cache line volatile int _Event ; @@ -121,7 +124,7 @@ class PlatformEvent : public CHeapObj { -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: HANDLE _ParkEvent ; @@ -179,6 +182,9 @@ public: static BOOL GetNumaHighestNodeNumber(PULONG); static BOOL GetNumaNodeProcessorMask(UCHAR, PULONGLONG); + // Stack walking + static USHORT RtlCaptureStackBackTrace(ULONG, ULONG, PVOID*, PULONG); + private: // GetLargePageMinimum available on Windows Vista/Windows Server 2003 // and later @@ -188,6 +194,7 @@ private: static LPVOID (WINAPI *_VirtualAllocExNuma) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD); static BOOL (WINAPI *_GetNumaHighestNodeNumber) (PULONG); static BOOL (WINAPI *_GetNumaNodeProcessorMask) (UCHAR, PULONGLONG); + static USHORT (WINAPI *_RtlCaptureStackBackTrace)(ULONG, ULONG, PVOID*, PULONG); static BOOL initialized; static void initialize(); diff --git a/hotspot/src/os/windows/vm/perfMemory_windows.cpp b/hotspot/src/os/windows/vm/perfMemory_windows.cpp index 4f3280d5906..2358171b78a 100644 --- a/hotspot/src/os/windows/vm/perfMemory_windows.cpp +++ b/hotspot/src/os/windows/vm/perfMemory_windows.cpp @@ -120,7 +120,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } // Shared Memory Implementation Details @@ -157,7 +157,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory _snprintf(dirname, nbytes, "%s\\%s_%s", tmpdir, perfdir, user); @@ -281,7 +281,7 @@ static char* get_user_name() { } } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(user_name, user); return user_name; @@ -315,7 +315,7 @@ static char* get_user_name_slow(int vmid) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -325,7 +325,7 @@ static char* get_user_name_slow(int vmid) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "\\"); strcat(usrdir_name, dentry->d_name); @@ -333,7 +333,7 @@ static char* get_user_name_slow(int vmid) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -344,13 +344,13 @@ static char* get_user_name_slow(int vmid) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -358,20 +358,20 @@ static char* get_user_name_slow(int vmid) { struct stat statbuf; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "\\"); strcat(filename, udentry->d_name); if (::stat(filename, &statbuf) == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if ((statbuf.st_mode & S_IFMT) != S_IFREG) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -393,22 +393,22 @@ static char* get_user_name_slow(int vmid) { if (statbuf.st_ctime > latest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (latest_user != NULL) FREE_C_HEAP_ARRAY(char, latest_user); - latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (latest_user != NULL) FREE_C_HEAP_ARRAY(char, latest_user, mtInternal); + latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(latest_user, user); latest_ctime = statbuf.st_ctime; } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(latest_user); } @@ -453,7 +453,7 @@ static char *get_sharedmem_objectname(const char* user, int vmid) { // about a name containing a '-' characters. // nbytes += UINT_CHARS; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); _snprintf(name, nbytes, "%s_%s_%u", PERFDATA_NAME, user, vmid); return name; @@ -469,7 +469,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); _snprintf(name, nbytes, "%s\\%d", dirname, vmid); return name; @@ -485,7 +485,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "\\"); @@ -500,7 +500,7 @@ static void remove_file(const char* dirname, const char* filename) { } } - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } // returns true if the process represented by pid is alive, otherwise @@ -638,7 +638,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -681,7 +681,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // create a file mapping object with the requested name, and size @@ -747,11 +747,11 @@ static void free_security_desc(PSECURITY_DESCRIPTOR pSD) { // be an ACL we enlisted. free the resources. // if (success && exists && pACL != NULL && !isdefault) { - FREE_C_HEAP_ARRAY(char, pACL); + FREE_C_HEAP_ARRAY(char, pACL, mtInternal); } // free the security descriptor - FREE_C_HEAP_ARRAY(char, pSD); + FREE_C_HEAP_ARRAY(char, pSD, mtInternal); } } @@ -766,7 +766,7 @@ static void free_security_attr(LPSECURITY_ATTRIBUTES lpSA) { lpSA->lpSecurityDescriptor = NULL; // free the security attributes structure - FREE_C_HEAP_ARRAY(char, lpSA); + FREE_C_HEAP_ARRAY(char, lpSA, mtInternal); } } @@ -805,7 +805,7 @@ static PSID get_user_sid(HANDLE hProcess) { } } - token_buf = (PTOKEN_USER) NEW_C_HEAP_ARRAY(char, rsize); + token_buf = (PTOKEN_USER) NEW_C_HEAP_ARRAY(char, rsize, mtInternal); // get the user token information if (!GetTokenInformation(hAccessToken, TokenUser, token_buf, rsize, &rsize)) { @@ -813,28 +813,28 @@ static PSID get_user_sid(HANDLE hProcess) { warning("GetTokenInformation failure: lasterror = %d," " rsize = %d\n", GetLastError(), rsize); } - FREE_C_HEAP_ARRAY(char, token_buf); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); CloseHandle(hAccessToken); return NULL; } DWORD nbytes = GetLengthSid(token_buf->User.Sid); - PSID pSID = NEW_C_HEAP_ARRAY(char, nbytes); + PSID pSID = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); if (!CopySid(nbytes, pSID, token_buf->User.Sid)) { if (PrintMiscellaneous && Verbose) { warning("GetTokenInformation failure: lasterror = %d," " rsize = %d\n", GetLastError(), rsize); } - FREE_C_HEAP_ARRAY(char, token_buf); - FREE_C_HEAP_ARRAY(char, pSID); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); + FREE_C_HEAP_ARRAY(char, pSID, mtInternal); CloseHandle(hAccessToken); return NULL; } // close the access token. CloseHandle(hAccessToken); - FREE_C_HEAP_ARRAY(char, token_buf); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); return pSID; } @@ -912,13 +912,13 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, } // create the new ACL - newACL = (PACL) NEW_C_HEAP_ARRAY(char, newACLsize); + newACL = (PACL) NEW_C_HEAP_ARRAY(char, newACLsize, mtInternal); if (!InitializeAcl(newACL, newACLsize, ACL_REVISION)) { if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } @@ -931,7 +931,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } if (((ACCESS_ALLOWED_ACE *)ace)->Header.AceFlags && INHERITED_ACE) { @@ -958,7 +958,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("AddAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -974,7 +974,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("AddAccessAllowedAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -989,7 +989,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } if (!AddAce(newACL, ACL_REVISION, MAXDWORD, ace, @@ -997,7 +997,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("AddAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } ace_index++; @@ -1010,7 +1010,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("SetSecurityDescriptorDacl failure:" " lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } @@ -1030,7 +1030,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("SetSecurityDescriptorControl failure:" " lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -1054,7 +1054,7 @@ static LPSECURITY_ATTRIBUTES make_security_attr(ace_data_t aces[], int count) { // allocate space for a security descriptor PSECURITY_DESCRIPTOR pSD = (PSECURITY_DESCRIPTOR) - NEW_C_HEAP_ARRAY(char, SECURITY_DESCRIPTOR_MIN_LENGTH); + NEW_C_HEAP_ARRAY(char, SECURITY_DESCRIPTOR_MIN_LENGTH, mtInternal); // initialize the security descriptor if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)) { @@ -1076,7 +1076,7 @@ static LPSECURITY_ATTRIBUTES make_security_attr(ace_data_t aces[], int count) { // return it to the caller. // LPSECURITY_ATTRIBUTES lpSA = (LPSECURITY_ATTRIBUTES) - NEW_C_HEAP_ARRAY(char, sizeof(SECURITY_ATTRIBUTES)); + NEW_C_HEAP_ARRAY(char, sizeof(SECURITY_ATTRIBUTES), mtInternal); lpSA->nLength = sizeof(SECURITY_ATTRIBUTES); lpSA->lpSecurityDescriptor = pSD; lpSA->bInheritHandle = FALSE; @@ -1147,7 +1147,7 @@ static LPSECURITY_ATTRIBUTES make_user_everybody_admin_security_attr( // create a security attributes structure with access control // entries as initialized above. LPSECURITY_ATTRIBUTES lpSA = make_security_attr(aces, 3); - FREE_C_HEAP_ARRAY(char, aces[0].pSid); + FREE_C_HEAP_ARRAY(char, aces[0].pSid, mtInternal); FreeSid(everybodySid); FreeSid(administratorsSid); return(lpSA); @@ -1462,15 +1462,15 @@ static char* mapping_create_shared(size_t size) { assert(((size != 0) && (size % os::vm_page_size() == 0)), "unexpected PerfMemry region size"); - FREE_C_HEAP_ARRAY(char, user); + FREE_C_HEAP_ARRAY(char, user, mtInternal); // create the shared memory resources sharedmem_fileMapHandle = create_sharedmem_resources(dirname, filename, objectname, size); - FREE_C_HEAP_ARRAY(char, filename); - FREE_C_HEAP_ARRAY(char, objectname); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); + FREE_C_HEAP_ARRAY(char, objectname, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (sharedmem_fileMapHandle == NULL) { return NULL; @@ -1621,7 +1621,7 @@ static void open_file_mapping(const char* user, int vmid, // store file, we also don't following them when attaching // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -1640,10 +1640,10 @@ static void open_file_mapping(const char* user, int vmid, strcpy(robjectname, objectname); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); - FREE_C_HEAP_ARRAY(char, objectname); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); + FREE_C_HEAP_ARRAY(char, objectname, mtInternal); if (*sizep == 0) { size = sharedmem_filesize(rfilename, CHECK); diff --git a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp index 12d6871ca04..c6d31ab4f9a 100644 --- a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp +++ b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp @@ -516,17 +516,23 @@ JVM_handle_bsd_signal(int sig, } } - if (thread->thread_state() == _thread_in_Java) { + // We test if stub is already set (by the stack overflow code + // above) so it is not overwritten by the code that follows. This + // check is not required on other platforms, because on other + // platforms we check for SIGSEGV only or SIGBUS only, where here + // we have to check for both SIGSEGV and SIGBUS. + if (thread->thread_state() == _thread_in_Java && stub == NULL) { // Java thread running in Java code => find exception handler if any // a fault inside compiled code, the interpreter, or a stub if ((sig == SIGSEGV || sig == SIGBUS) && os::is_poll_address((address)info->si_addr)) { stub = SharedRuntime::get_poll_stub(pc); -#if defined(__APPLE__) && !defined(AMD64) +#if defined(__APPLE__) // 32-bit Darwin reports a SIGBUS for nearly all memory access exceptions. + // 64-bit Darwin may also use a SIGBUS (seen with compressed oops). // Catching SIGBUS here prevents the implicit SIGBUS NULL check below from // being called, so only do so if the implicit NULL check is not necessary. - } else if (sig == SIGBUS && MacroAssembler::needs_explicit_null_check((int)info->si_addr)) { + } else if (sig == SIGBUS && MacroAssembler::needs_explicit_null_check((intptr_t)info->si_addr)) { #else } else if (sig == SIGBUS /* && info->si_code == BUS_OBJERR */) { #endif diff --git a/hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp b/hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp index 4ccf8074424..b98d975408a 100644 --- a/hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp +++ b/hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp @@ -29,18 +29,12 @@ // constants required by the Serviceability Agent. This file is // referenced by vmStructs.cpp. -#ifdef __APPLE__ -#define OS_THREAD_ID_TYPE thread_t -#else -#define OS_THREAD_ID_TYPE pthread_t -#endif - #define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field, last_entry) \ \ /******************************/ \ /* Threads (NOTE: incomplete) */ \ /******************************/ \ - nonstatic_field(OSThread, _thread_id, OS_THREAD_ID_TYPE) \ + nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \ nonstatic_field(OSThread, _pthread_id, pthread_t) \ /* This must be the last entry, and must be present */ \ last_entry() @@ -52,7 +46,7 @@ /* Posix Thread IDs */ \ /**********************/ \ \ - declare_unsigned_integer_type(thread_t) \ + declare_unsigned_integer_type(OSThread::thread_id_t) \ declare_unsigned_integer_type(pthread_t) \ \ /* This must be the last entry, and must be present */ \ diff --git a/hotspot/src/os_cpu/linux_sparc/vm/vmStructs_linux_sparc.hpp b/hotspot/src/os_cpu/linux_sparc/vm/vmStructs_linux_sparc.hpp index 4b0a3e63a29..58fc94bbc38 100644 --- a/hotspot/src/os_cpu/linux_sparc/vm/vmStructs_linux_sparc.hpp +++ b/hotspot/src/os_cpu/linux_sparc/vm/vmStructs_linux_sparc.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,7 +36,7 @@ /******************************/ \ \ nonstatic_field(JavaThread, _base_of_stack_pointer, intptr_t*) \ - nonstatic_field(OSThread, _thread_id, pid_t) \ + nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \ nonstatic_field(OSThread, _pthread_id, pthread_t) \ /* This must be the last entry, and must be present */ \ last_entry() @@ -48,7 +48,7 @@ /* POSIX Thread IDs */ \ /**********************/ \ \ - declare_integer_type(pid_t) \ + declare_integer_type(OSThread::thread_id_t) \ declare_unsigned_integer_type(pthread_t) \ \ /* This must be the last entry, and must be present */ \ diff --git a/hotspot/src/os_cpu/linux_x86/vm/vmStructs_linux_x86.hpp b/hotspot/src/os_cpu/linux_x86/vm/vmStructs_linux_x86.hpp index c54cb1d729d..c01e6c91c2a 100644 --- a/hotspot/src/os_cpu/linux_x86/vm/vmStructs_linux_x86.hpp +++ b/hotspot/src/os_cpu/linux_x86/vm/vmStructs_linux_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ /******************************/ \ /* Threads (NOTE: incomplete) */ \ /******************************/ \ - nonstatic_field(OSThread, _thread_id, pid_t) \ + nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \ nonstatic_field(OSThread, _pthread_id, pthread_t) \ /* This must be the last entry, and must be present */ \ last_entry() @@ -46,7 +46,7 @@ /* Posix Thread IDs */ \ /**********************/ \ \ - declare_integer_type(pid_t) \ + declare_integer_type(OSThread::thread_id_t) \ declare_unsigned_integer_type(pthread_t) \ \ /* This must be the last entry, and must be present */ \ diff --git a/hotspot/src/os_cpu/solaris_sparc/vm/vmStructs_solaris_sparc.hpp b/hotspot/src/os_cpu/solaris_sparc/vm/vmStructs_solaris_sparc.hpp index 710e3369042..58113a9ea49 100644 --- a/hotspot/src/os_cpu/solaris_sparc/vm/vmStructs_solaris_sparc.hpp +++ b/hotspot/src/os_cpu/solaris_sparc/vm/vmStructs_solaris_sparc.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,7 +36,7 @@ /******************************/ \ \ nonstatic_field(JavaThread, _base_of_stack_pointer, intptr_t*) \ - nonstatic_field(OSThread, _thread_id, thread_t) \ + nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \ /* This must be the last entry, and must be present */ \ last_entry() @@ -47,7 +47,7 @@ /* Solaris Thread IDs */ \ /**********************/ \ \ - declare_unsigned_integer_type(thread_t) \ + declare_unsigned_integer_type(OSThread::thread_id_t) \ \ /* This must be the last entry, and must be present */ \ last_entry() diff --git a/hotspot/src/os_cpu/solaris_x86/vm/vmStructs_solaris_x86.hpp b/hotspot/src/os_cpu/solaris_x86/vm/vmStructs_solaris_x86.hpp index 76338956021..a2a4f7c60b7 100644 --- a/hotspot/src/os_cpu/solaris_x86/vm/vmStructs_solaris_x86.hpp +++ b/hotspot/src/os_cpu/solaris_x86/vm/vmStructs_solaris_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ /* Threads (NOTE: incomplete) */ \ /******************************/ \ \ - nonstatic_field(OSThread, _thread_id, thread_t) \ + nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \ \ /* This must be the last entry, and must be present */ \ last_entry() @@ -46,7 +46,7 @@ /* Solaris Thread IDs */ \ /**********************/ \ \ - declare_unsigned_integer_type(thread_t) \ + declare_unsigned_integer_type(OSThread::thread_id_t) \ \ /* This must be the last entry, and must be present */ \ last_entry() diff --git a/hotspot/src/os_cpu/windows_x86/vm/vmStructs_windows_x86.hpp b/hotspot/src/os_cpu/windows_x86/vm/vmStructs_windows_x86.hpp index 6df1f7226fa..69d25c93186 100644 --- a/hotspot/src/os_cpu/windows_x86/vm/vmStructs_windows_x86.hpp +++ b/hotspot/src/os_cpu/windows_x86/vm/vmStructs_windows_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ /* Threads (NOTE: incomplete) */ \ /******************************/ \ \ - nonstatic_field(OSThread, _thread_id, unsigned long) \ + nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \ unchecked_nonstatic_field(OSThread, _thread_handle, sizeof(HANDLE)) /* NOTE: no type */ \ \ /* This must be the last entry, and must be present */ \ @@ -43,6 +43,7 @@ #define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type, last_entry) \ \ + declare_unsigned_integer_type(OSThread::thread_id_t) \ /* This must be the last entry, and must be present */ \ last_entry() diff --git a/hotspot/src/share/vm/adlc/adlparse.cpp b/hotspot/src/share/vm/adlc/adlparse.cpp index ec31e36279b..ff486733efc 100644 --- a/hotspot/src/share/vm/adlc/adlparse.cpp +++ b/hotspot/src/share/vm/adlc/adlparse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -115,6 +115,12 @@ void ADLParser::parse() { parse_err(SYNERR, "expected one of - instruct, operand, ins_attrib, op_attrib, source, register, pipeline, encode\n Found %s",ident); } } + // Add reg_class spill_regs after parsing. + RegisterForm *regBlock = _AD.get_registers(); + if (regBlock == NULL) { + parse_err(SEMERR, "Did not declare 'register' definitions"); + } + regBlock->addSpillRegClass(); // Done with parsing, check consistency. @@ -768,11 +774,12 @@ void ADLParser::source_hpp_parse(void) { //------------------------------reg_parse-------------------------------------- void ADLParser::reg_parse(void) { - - // Create the RegisterForm for the architecture description. - RegisterForm *regBlock = new RegisterForm(); // Build new Source object - regBlock->_linenum = linenum(); - _AD.addForm(regBlock); + RegisterForm *regBlock = _AD.get_registers(); // Information about registers encoding + if (regBlock == NULL) { + // Create the RegisterForm for the architecture description. + regBlock = new RegisterForm(); // Build new Source object + _AD.addForm(regBlock); + } skipws(); // Skip leading whitespace if (_curchar == '%' && *(_ptr+1) == '{') { @@ -796,15 +803,11 @@ void ADLParser::reg_parse(void) { parse_err(SYNERR, "Missing %c{ ... %c} block after register keyword.\n",'%','%'); return; } - - // Add reg_class spill_regs - regBlock->addSpillRegClass(); } //------------------------------encode_parse----------------------------------- void ADLParser::encode_parse(void) { EncodeForm *encBlock; // Information about instruction/operand encoding - char *desc = NULL; // String representation of encode rule _AD.getForm(&encBlock); if ( encBlock == NULL) { diff --git a/hotspot/src/share/vm/adlc/archDesc.cpp b/hotspot/src/share/vm/adlc/archDesc.cpp index 294e88c148e..23cbb1e007b 100644 --- a/hotspot/src/share/vm/adlc/archDesc.cpp +++ b/hotspot/src/share/vm/adlc/archDesc.cpp @@ -1,5 +1,5 @@ // -// Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // // This code is free software; you can redistribute it and/or modify it @@ -911,12 +911,24 @@ const char *ArchDesc::getIdealType(const char *idealOp) { // Find last character in idealOp, it specifies the type char last_char = 0; const char *ptr = idealOp; - for( ; *ptr != '\0'; ++ptr) { + for (; *ptr != '\0'; ++ptr) { last_char = *ptr; } + // Match Vector types. + if (strncmp(idealOp, "Vec",3)==0) { + switch(last_char) { + case 'S': return "TypeVect::VECTS"; + case 'D': return "TypeVect::VECTD"; + case 'X': return "TypeVect::VECTX"; + case 'Y': return "TypeVect::VECTY"; + default: + internal_err("Vector type %s with unrecognized type\n",idealOp); + } + } + // !!!!! - switch( last_char ) { + switch(last_char) { case 'I': return "TypeInt::INT"; case 'P': return "TypePtr::BOTTOM"; case 'N': return "TypeNarrowOop::BOTTOM"; diff --git a/hotspot/src/share/vm/adlc/forms.cpp b/hotspot/src/share/vm/adlc/forms.cpp index 5e05a841ed9..70b8bd96253 100644 --- a/hotspot/src/share/vm/adlc/forms.cpp +++ b/hotspot/src/share/vm/adlc/forms.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -261,52 +261,26 @@ Form::DataType Form::is_load_from_memory(const char *opType) const { if( strcmp(opType,"LoadL")==0 ) return Form::idealL; if( strcmp(opType,"LoadL_unaligned")==0 ) return Form::idealL; if( strcmp(opType,"LoadPLocked")==0 ) return Form::idealP; - if( strcmp(opType,"LoadLLocked")==0 ) return Form::idealL; if( strcmp(opType,"LoadP")==0 ) return Form::idealP; if( strcmp(opType,"LoadN")==0 ) return Form::idealN; if( strcmp(opType,"LoadRange")==0 ) return Form::idealI; if( strcmp(opType,"LoadS")==0 ) return Form::idealS; - if( strcmp(opType,"Load16B")==0 ) return Form::idealB; - if( strcmp(opType,"Load8B")==0 ) return Form::idealB; - if( strcmp(opType,"Load4B")==0 ) return Form::idealB; - if( strcmp(opType,"Load8C")==0 ) return Form::idealC; - if( strcmp(opType,"Load4C")==0 ) return Form::idealC; - if( strcmp(opType,"Load2C")==0 ) return Form::idealC; - if( strcmp(opType,"Load8S")==0 ) return Form::idealS; - if( strcmp(opType,"Load4S")==0 ) return Form::idealS; - if( strcmp(opType,"Load2S")==0 ) return Form::idealS; - if( strcmp(opType,"Load2D")==0 ) return Form::idealD; - if( strcmp(opType,"Load4F")==0 ) return Form::idealF; - if( strcmp(opType,"Load2F")==0 ) return Form::idealF; - if( strcmp(opType,"Load4I")==0 ) return Form::idealI; - if( strcmp(opType,"Load2I")==0 ) return Form::idealI; - if( strcmp(opType,"Load2L")==0 ) return Form::idealL; + if( strcmp(opType,"LoadVector")==0 ) return Form::idealV; assert( strcmp(opType,"Load") != 0, "Must type Loads" ); return Form::none; } Form::DataType Form::is_store_to_memory(const char *opType) const { if( strcmp(opType,"StoreB")==0) return Form::idealB; - if( strcmp(opType,"StoreCM")==0) return Form::idealB; + if( strcmp(opType,"StoreCM")==0) return Form::idealB; if( strcmp(opType,"StoreC")==0) return Form::idealC; if( strcmp(opType,"StoreD")==0) return Form::idealD; if( strcmp(opType,"StoreF")==0) return Form::idealF; if( strcmp(opType,"StoreI")==0) return Form::idealI; if( strcmp(opType,"StoreL")==0) return Form::idealL; if( strcmp(opType,"StoreP")==0) return Form::idealP; - if( strcmp(opType,"StoreN")==0) return Form::idealN; - if( strcmp(opType,"Store16B")==0) return Form::idealB; - if( strcmp(opType,"Store8B")==0) return Form::idealB; - if( strcmp(opType,"Store4B")==0) return Form::idealB; - if( strcmp(opType,"Store8C")==0) return Form::idealC; - if( strcmp(opType,"Store4C")==0) return Form::idealC; - if( strcmp(opType,"Store2C")==0) return Form::idealC; - if( strcmp(opType,"Store2D")==0) return Form::idealD; - if( strcmp(opType,"Store4F")==0) return Form::idealF; - if( strcmp(opType,"Store2F")==0) return Form::idealF; - if( strcmp(opType,"Store4I")==0) return Form::idealI; - if( strcmp(opType,"Store2I")==0) return Form::idealI; - if( strcmp(opType,"Store2L")==0) return Form::idealL; + if( strcmp(opType,"StoreN")==0) return Form::idealN; + if( strcmp(opType,"StoreVector")==0 ) return Form::idealV; assert( strcmp(opType,"Store") != 0, "Must type Stores" ); return Form::none; } diff --git a/hotspot/src/share/vm/adlc/forms.hpp b/hotspot/src/share/vm/adlc/forms.hpp index 3132c6a3f92..aa13845d38f 100644 --- a/hotspot/src/share/vm/adlc/forms.hpp +++ b/hotspot/src/share/vm/adlc/forms.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -172,7 +172,8 @@ public: idealB = 6, // Byte type idealC = 7, // Char type idealS = 8, // String type - idealN = 9 // Narrow oop types + idealN = 9, // Narrow oop types + idealV = 10 // Vector type }; // Convert ideal name to a DataType, return DataType::none if not a 'ConX' Form::DataType ideal_to_const_type(const char *ideal_type_name) const; diff --git a/hotspot/src/share/vm/adlc/formsopt.cpp b/hotspot/src/share/vm/adlc/formsopt.cpp index 302cd84afe4..07d70fc6c6e 100644 --- a/hotspot/src/share/vm/adlc/formsopt.cpp +++ b/hotspot/src/share/vm/adlc/formsopt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,7 +66,7 @@ AllocClass *RegisterForm::addAllocClass(char *className) { // for spill-slots/regs. void RegisterForm::addSpillRegClass() { // Stack slots start at the next available even register number. - _reg_ctr = (_reg_ctr+1) & ~1; + _reg_ctr = (_reg_ctr+7) & ~7; const char *rc_name = "stack_slots"; RegClass *reg_class = new RegClass(rc_name); reg_class->_stack_or_reg = true; @@ -150,9 +150,14 @@ bool RegisterForm::verify() { int RegisterForm::RegMask_Size() { // Need at least this many words int words_for_regs = (_reg_ctr + 31)>>5; - // Add a few for incoming & outgoing arguments to calls. + // The array of Register Mask bits should be large enough to cover + // all the machine registers and all parameters that need to be passed + // on the stack (stack registers) up to some interesting limit. Methods + // that need more parameters will NOT be compiled. On Intel, the limit + // is something like 90+ parameters. + // Add a few (3 words == 96 bits) for incoming & outgoing arguments to calls. // Round up to the next doubleword size. - return (words_for_regs + 2 + 1) & ~1; + return (words_for_regs + 3 + 1) & ~1; } void RegisterForm::dump() { // Debug printer diff --git a/hotspot/src/share/vm/adlc/formssel.cpp b/hotspot/src/share/vm/adlc/formssel.cpp index 3c69d6a0da8..1b009707ac8 100644 --- a/hotspot/src/share/vm/adlc/formssel.cpp +++ b/hotspot/src/share/vm/adlc/formssel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -432,6 +432,14 @@ Form::DataType InstructForm::is_ideal_store() const { return _matrule->is_ideal_store(); } +// Return 'true' if this instruction matches an ideal vector node +bool InstructForm::is_vector() const { + if( _matrule == NULL ) return false; + + return _matrule->is_vector(); +} + + // Return the input register that must match the output register // If this is not required, return 0 uint InstructForm::two_address(FormDict &globals) { @@ -751,6 +759,9 @@ bool InstructForm::captures_bottom_type(FormDict &globals) const { if (needs_base_oop_edge(globals)) return true; + if (is_vector()) return true; + if (is_mach_constant()) return true; + return false; } @@ -3381,13 +3392,10 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const { "StoreI","StoreL","StoreP","StoreN","StoreD","StoreF" , "StoreB","StoreC","Store" ,"StoreFP", "LoadI", "LoadUI2L", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" , - "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" , - "Store4I","Store2I","Store2L","Store2D","Store4F","Store2F","Store16B", - "Store8B","Store4B","Store8C","Store4C","Store2C", - "Load4I" ,"Load2I" ,"Load2L" ,"Load2D" ,"Load4F" ,"Load2F" ,"Load16B" , - "Load8B" ,"Load4B" ,"Load8C" ,"Load4C" ,"Load2C" ,"Load8S", "Load4S","Load2S", + "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" , + "StoreVector", "LoadVector", "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned", - "LoadPLocked", "LoadLLocked", + "LoadPLocked", "StorePConditional", "StoreIConditional", "StoreLConditional", "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN", "StoreCM", @@ -3822,6 +3830,10 @@ bool MatchRule::is_base_register(FormDict &globals) const { strcmp(opType,"RegL")==0 || strcmp(opType,"RegF")==0 || strcmp(opType,"RegD")==0 || + strcmp(opType,"VecS")==0 || + strcmp(opType,"VecD")==0 || + strcmp(opType,"VecX")==0 || + strcmp(opType,"VecY")==0 || strcmp(opType,"Reg" )==0) ) { return 1; } @@ -3938,19 +3950,12 @@ int MatchRule::is_expensive() const { strcmp(opType,"ReverseBytesL")==0 || strcmp(opType,"ReverseBytesUS")==0 || strcmp(opType,"ReverseBytesS")==0 || - strcmp(opType,"Replicate16B")==0 || - strcmp(opType,"Replicate8B")==0 || - strcmp(opType,"Replicate4B")==0 || - strcmp(opType,"Replicate8C")==0 || - strcmp(opType,"Replicate4C")==0 || - strcmp(opType,"Replicate8S")==0 || - strcmp(opType,"Replicate4S")==0 || - strcmp(opType,"Replicate4I")==0 || - strcmp(opType,"Replicate2I")==0 || - strcmp(opType,"Replicate2L")==0 || - strcmp(opType,"Replicate4F")==0 || - strcmp(opType,"Replicate2F")==0 || - strcmp(opType,"Replicate2D")==0 || + strcmp(opType,"ReplicateB")==0 || + strcmp(opType,"ReplicateS")==0 || + strcmp(opType,"ReplicateI")==0 || + strcmp(opType,"ReplicateL")==0 || + strcmp(opType,"ReplicateF")==0 || + strcmp(opType,"ReplicateD")==0 || 0 /* 0 to line up columns nicely */ ) return 1; } @@ -4034,6 +4039,23 @@ Form::DataType MatchRule::is_ideal_load() const { return ideal_load; } +bool MatchRule::is_vector() const { + if( _rChild ) { + const char *opType = _rChild->_opType; + if( strcmp(opType,"ReplicateB")==0 || + strcmp(opType,"ReplicateS")==0 || + strcmp(opType,"ReplicateI")==0 || + strcmp(opType,"ReplicateL")==0 || + strcmp(opType,"ReplicateF")==0 || + strcmp(opType,"ReplicateD")==0 || + strcmp(opType,"LoadVector")==0 || + strcmp(opType,"StoreVector")==0 || + 0 /* 0 to line up columns nicely */ ) + return true; + } + return false; +} + bool MatchRule::skip_antidep_check() const { // Some loads operate on what is effectively immutable memory so we diff --git a/hotspot/src/share/vm/adlc/formssel.hpp b/hotspot/src/share/vm/adlc/formssel.hpp index b2d3ec74d46..93b43b1f08b 100644 --- a/hotspot/src/share/vm/adlc/formssel.hpp +++ b/hotspot/src/share/vm/adlc/formssel.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -160,6 +160,7 @@ public: virtual bool is_ideal_safepoint() const; // node matches 'SafePoint' virtual bool is_ideal_nop() const; // node matches 'Nop' virtual bool is_ideal_control() const; // control node + virtual bool is_vector() const; // vector instruction virtual Form::CallType is_ideal_call() const; // matches ideal 'Call' virtual Form::DataType is_ideal_load() const; // node matches ideal 'LoadXNode' @@ -1011,6 +1012,7 @@ public: bool is_ideal_goto() const; // node matches ideal 'Goto' bool is_ideal_loopEnd() const; // node matches ideal 'LoopEnd' bool is_ideal_bool() const; // node matches ideal 'Bool' + bool is_vector() const; // vector instruction Form::DataType is_ideal_load() const;// node matches ideal 'LoadXNode' // Should antidep checks be disabled for this rule // See definition of MatchRule::skip_antidep_check diff --git a/hotspot/src/share/vm/adlc/main.cpp b/hotspot/src/share/vm/adlc/main.cpp index 47e207a4b13..a963cdaf5bc 100644 --- a/hotspot/src/share/vm/adlc/main.cpp +++ b/hotspot/src/share/vm/adlc/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -250,6 +250,7 @@ int main(int argc, char *argv[]) AD.addInclude(AD._HPP_file, "opto/node.hpp"); AD.addInclude(AD._HPP_file, "opto/regalloc.hpp"); AD.addInclude(AD._HPP_file, "opto/subnode.hpp"); + AD.addInclude(AD._HPP_file, "opto/vectornode.hpp"); AD.addInclude(AD._CPP_CLONE_file, "precompiled.hpp"); AD.addInclude(AD._CPP_CLONE_file, "adfiles", get_basename(AD._HPP_file._name)); AD.addInclude(AD._CPP_EXPAND_file, "precompiled.hpp"); diff --git a/hotspot/src/share/vm/asm/codeBuffer.cpp b/hotspot/src/share/vm/asm/codeBuffer.cpp index f52b942df2c..8235786b40a 100644 --- a/hotspot/src/share/vm/asm/codeBuffer.cpp +++ b/hotspot/src/share/vm/asm/codeBuffer.cpp @@ -261,7 +261,7 @@ address CodeBuffer::decode_begin() { GrowableArray* CodeBuffer::create_patch_overflow() { if (_overflow_arena == NULL) { - _overflow_arena = new Arena(); + _overflow_arena = new (mtCode) Arena(); } return new (_overflow_arena) GrowableArray(_overflow_arena, 8, 0, 0); } @@ -910,7 +910,7 @@ void CodeBuffer::block_comment(intptr_t offset, const char * comment) { _comments.add_comment(offset, comment); } -class CodeComment: public CHeapObj { +class CodeComment: public CHeapObj { private: friend class CodeComments; intptr_t _offset; @@ -919,13 +919,13 @@ class CodeComment: public CHeapObj { ~CodeComment() { assert(_next == NULL, "wrong interface for freeing list"); - os::free((void*)_comment); + os::free((void*)_comment, mtCode); } public: CodeComment(intptr_t offset, const char * comment) { _offset = offset; - _comment = os::strdup(comment); + _comment = os::strdup(comment, mtCode); _next = NULL; } diff --git a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp index 4964ebd683e..66a7e225ebd 100644 --- a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp +++ b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp @@ -33,7 +33,7 @@ #ifndef PRODUCT -class CFGPrinterOutput : public CHeapObj { +class CFGPrinterOutput : public CHeapObj { private: outputStream* _output; @@ -106,7 +106,7 @@ void CFGPrinter::print_intervals(IntervalList* intervals, const char* name) { CFGPrinterOutput::CFGPrinterOutput() - : _output(new(ResourceObj::C_HEAP) fileStream("output.cfg")) + : _output(new(ResourceObj::C_HEAP, mtCompiler) fileStream("output.cfg")) { } diff --git a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp index c7a5198da33..4158ce5cb3b 100644 --- a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp +++ b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp @@ -42,6 +42,11 @@ void Canonicalizer::set_canonical(Value x) { // the instruction stream (because the instruction list is embedded // in the instructions). if (canonical() != x) { +#ifndef PRODUCT + if (!x->has_printable_bci()) { + x->set_printable_bci(bci()); + } +#endif if (PrintCanonicalization) { PrintValueVisitor do_print_value; canonical()->input_values_do(&do_print_value); @@ -451,6 +456,28 @@ void Canonicalizer::do_Intrinsic (Intrinsic* x) { } break; } + case vmIntrinsics::_isInstance : { + assert(x->number_of_arguments() == 2, "wrong type"); + + InstanceConstant* c = x->argument_at(0)->type()->as_InstanceConstant(); + if (c != NULL && !c->value()->is_null_object()) { + // ciInstance::java_mirror_type() returns non-NULL only for Java mirrors + ciType* t = c->value()->as_instance()->java_mirror_type(); + if (t->is_klass()) { + // substitute cls.isInstance(obj) of a constant Class into + // an InstantOf instruction + InstanceOf* i = new InstanceOf(t->as_klass(), x->argument_at(1), x->state_before()); + set_canonical(i); + // and try to canonicalize even further + do_InstanceOf(i); + } else { + assert(t->is_primitive_type(), "should be a primitive type"); + // cls.isInstance(obj) always returns false for primitive classes + set_constant(0); + } + } + break; + } } } @@ -677,8 +704,8 @@ void Canonicalizer::do_If(If* x) { return; } } - set_canonical(canon); set_bci(cmp->state_before()->bci()); + set_canonical(canon); } } } else if (l->as_InstanceOf() != NULL) { diff --git a/hotspot/src/share/vm/c1/c1_Compiler.cpp b/hotspot/src/share/vm/c1/c1_Compiler.cpp index 41b5eb572e6..7e55ce30fd6 100644 --- a/hotspot/src/share/vm/c1/c1_Compiler.cpp +++ b/hotspot/src/share/vm/c1/c1_Compiler.cpp @@ -55,7 +55,7 @@ Compiler::~Compiler() { void Compiler::initialize_all() { BufferBlob* buffer_blob = CompilerThread::current()->get_buffer_blob(); - Arena* arena = new Arena(); + Arena* arena = new (mtCompiler) Arena(); Runtime1::initialize(buffer_blob); FrameMap::initialize(); // initialize data structures diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index c11a2a2c177..e649453c3c0 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -2949,6 +2949,8 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) case vmIntrinsics::_dtan : // fall through case vmIntrinsics::_dlog : // fall through case vmIntrinsics::_dlog10 : // fall through + case vmIntrinsics::_dexp : // fall through + case vmIntrinsics::_dpow : // fall through { // Compiles where the root method is an intrinsic need a special // compilation environment because the bytecodes for the method @@ -2969,6 +2971,9 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) _state = start_block->state()->copy_for_parsing(); _last = start_block; load_local(doubleType, 0); + if (scope->method()->intrinsic_id() == vmIntrinsics::_dpow) { + load_local(doubleType, 2); + } // Emit the intrinsic node. bool result = try_inline_intrinsics(scope->method()); @@ -3165,6 +3170,7 @@ bool GraphBuilder::try_inline_intrinsics(ciMethod* callee) { break; case vmIntrinsics::_getClass : + case vmIntrinsics::_isInstance : if (!InlineClassNatives) return false; preserves_state = true; break; @@ -3182,18 +3188,13 @@ bool GraphBuilder::try_inline_intrinsics(ciMethod* callee) { case vmIntrinsics::_dtan : // fall through case vmIntrinsics::_dlog : // fall through case vmIntrinsics::_dlog10 : // fall through + case vmIntrinsics::_dexp : // fall through + case vmIntrinsics::_dpow : // fall through if (!InlineMathNatives) return false; cantrap = false; preserves_state = true; break; - // sun/misc/AtomicLong.attemptUpdate - case vmIntrinsics::_attemptUpdate : - if (!VM_Version::supports_cx8()) return false; - if (!InlineAtomicLong) return false; - preserves_state = true; - break; - // Use special nodes for Unsafe instructions so we can more easily // perform an address-mode optimization on the raw variants case vmIntrinsics::_getObject : return append_unsafe_get_obj(callee, T_OBJECT, false); @@ -3504,8 +3505,10 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, BlockBeg } // now perform tests that are based on flag settings - if (callee->should_inline()) { + if (callee->force_inline() || callee->should_inline()) { // ignore heuristic controls on inlining + if (callee->force_inline()) + CompileTask::print_inlining(callee, scope()->level(), bci(), "force inline by annotation"); } else { if (inline_level() > MaxInlineLevel ) INLINE_BAILOUT("too-deep inlining"); if (recursive_inline_level(callee) > MaxRecursiveInlineLevel) INLINE_BAILOUT("too-deep recursive inlining"); @@ -3530,7 +3533,7 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, BlockBeg } #ifndef PRODUCT - // printing + // printing if (PrintInlining) { print_inline_result(callee, true); } diff --git a/hotspot/src/share/vm/c1/c1_Instruction.hpp b/hotspot/src/share/vm/c1/c1_Instruction.hpp index 9cdef87b9f3..98f9884f68b 100644 --- a/hotspot/src/share/vm/c1/c1_Instruction.hpp +++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp @@ -302,8 +302,6 @@ class Instruction: public CompilationResourceObj { void update_exception_state(ValueStack* state); - bool has_printable_bci() const { return NOT_PRODUCT(_printable_bci != -99) PRODUCT_ONLY(false); } - protected: void set_type(ValueType* type) { assert(type != NULL, "type must exist"); @@ -392,8 +390,9 @@ class Instruction: public CompilationResourceObj { // accessors int id() const { return _id; } #ifndef PRODUCT + bool has_printable_bci() const { return _printable_bci != -99; } int printable_bci() const { assert(has_printable_bci(), "_printable_bci should have been set"); return _printable_bci; } - void set_printable_bci(int bci) { NOT_PRODUCT(_printable_bci = bci;) } + void set_printable_bci(int bci) { _printable_bci = bci; } #endif int use_count() const { return _use_count; } int pin_state() const { return _pin_state; } @@ -576,6 +575,7 @@ LEAF(Phi, Instruction) , _block(b) , _index(index) { + NOT_PRODUCT(set_printable_bci(Value(b)->printable_bci())); if (type->is_illegal()) { make_illegal(); } @@ -631,7 +631,9 @@ LEAF(Local, Instruction) : Instruction(type) , _java_index(index) , _declared_type(declared) - {} + { + NOT_PRODUCT(set_printable_bci(-1)); + } // accessors int java_index() const { return _java_index; } diff --git a/hotspot/src/share/vm/c1/c1_LIR.cpp b/hotspot/src/share/vm/c1/c1_LIR.cpp index 776a6a3df2d..c85e71f9954 100644 --- a/hotspot/src/share/vm/c1/c1_LIR.cpp +++ b/hotspot/src/share/vm/c1/c1_LIR.cpp @@ -624,11 +624,13 @@ void LIR_OpVisitState::visit(LIR_Op* op) { { assert(op->as_Op2() != NULL, "must be"); LIR_Op2* op2 = (LIR_Op2*)op; + assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() && + op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used"); if (op2->_info) do_info(op2->_info); if (op2->_opr1->is_valid()) do_input(op2->_opr1); if (op2->_opr2->is_valid()) do_input(op2->_opr2); - if (op2->_tmp->is_valid()) do_temp(op2->_tmp); + if (op2->_tmp1->is_valid()) do_temp(op2->_tmp1); if (op2->_result->is_valid()) do_output(op2->_result); break; @@ -641,7 +643,8 @@ void LIR_OpVisitState::visit(LIR_Op* op) { assert(op->as_Op2() != NULL, "must be"); LIR_Op2* op2 = (LIR_Op2*)op; - assert(op2->_info == NULL && op2->_tmp->is_illegal(), "not used"); + assert(op2->_info == NULL && op2->_tmp1->is_illegal() && op2->_tmp2->is_illegal() && + op2->_tmp3->is_illegal() && op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used"); assert(op2->_opr1->is_valid() && op2->_opr2->is_valid() && op2->_result->is_valid(), "used"); do_input(op2->_opr1); @@ -665,10 +668,12 @@ void LIR_OpVisitState::visit(LIR_Op* op) { assert(op2->_opr1->is_valid(), "used"); assert(op2->_opr2->is_valid(), "used"); assert(op2->_result->is_valid(), "used"); + assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() && + op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used"); do_input(op2->_opr1); do_temp(op2->_opr1); do_input(op2->_opr2); do_temp(op2->_opr2); - if (op2->_tmp->is_valid()) do_temp(op2->_tmp); + if (op2->_tmp1->is_valid()) do_temp(op2->_tmp1); do_output(op2->_result); break; @@ -682,6 +687,8 @@ void LIR_OpVisitState::visit(LIR_Op* op) { if (op2->_opr1->is_valid()) do_temp(op2->_opr1); if (op2->_opr2->is_valid()) do_input(op2->_opr2); // exception object is input parameter assert(op2->_result->is_illegal(), "no result"); + assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() && + op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used"); break; } @@ -702,7 +709,8 @@ void LIR_OpVisitState::visit(LIR_Op* op) { case lir_sin: case lir_cos: case lir_log: - case lir_log10: { + case lir_log10: + case lir_exp: { assert(op->as_Op2() != NULL, "must be"); LIR_Op2* op2 = (LIR_Op2*)op; @@ -711,16 +719,47 @@ void LIR_OpVisitState::visit(LIR_Op* op) { // Register input operand as temp to guarantee that it doesn't // overlap with the input. assert(op2->_info == NULL, "not used"); + assert(op2->_tmp5->is_illegal(), "not used"); + assert(op2->_tmp2->is_valid() == (op->code() == lir_exp), "not used"); + assert(op2->_tmp3->is_valid() == (op->code() == lir_exp), "not used"); + assert(op2->_tmp4->is_valid() == (op->code() == lir_exp), "not used"); assert(op2->_opr1->is_valid(), "used"); do_input(op2->_opr1); do_temp(op2->_opr1); if (op2->_opr2->is_valid()) do_temp(op2->_opr2); - if (op2->_tmp->is_valid()) do_temp(op2->_tmp); + if (op2->_tmp1->is_valid()) do_temp(op2->_tmp1); + if (op2->_tmp2->is_valid()) do_temp(op2->_tmp2); + if (op2->_tmp3->is_valid()) do_temp(op2->_tmp3); + if (op2->_tmp4->is_valid()) do_temp(op2->_tmp4); if (op2->_result->is_valid()) do_output(op2->_result); break; } + case lir_pow: { + assert(op->as_Op2() != NULL, "must be"); + LIR_Op2* op2 = (LIR_Op2*)op; + + // On x86 pow needs two temporary fpu stack slots: tmp1 and + // tmp2. Register input operands as temps to guarantee that it + // doesn't overlap with the temporary slots. + assert(op2->_info == NULL, "not used"); + assert(op2->_opr1->is_valid() && op2->_opr2->is_valid(), "used"); + assert(op2->_tmp1->is_valid() && op2->_tmp2->is_valid() && op2->_tmp3->is_valid() + && op2->_tmp4->is_valid() && op2->_tmp5->is_valid(), "used"); + assert(op2->_result->is_valid(), "used"); + + do_input(op2->_opr1); do_temp(op2->_opr1); + do_input(op2->_opr2); do_temp(op2->_opr2); + do_temp(op2->_tmp1); + do_temp(op2->_tmp2); + do_temp(op2->_tmp3); + do_temp(op2->_tmp4); + do_temp(op2->_tmp5); + do_output(op2->_result); + + break; + } // LIR_Op3 case lir_idiv: @@ -1670,6 +1709,8 @@ const char * LIR_Op::name() const { case lir_tan: s = "tan"; break; case lir_log: s = "log"; break; case lir_log10: s = "log10"; break; + case lir_exp: s = "exp"; break; + case lir_pow: s = "pow"; break; case lir_logic_and: s = "logic_and"; break; case lir_logic_or: s = "logic_or"; break; case lir_logic_xor: s = "logic_xor"; break; @@ -1892,7 +1933,11 @@ void LIR_Op2::print_instr(outputStream* out) const { } in_opr1()->print(out); out->print(" "); in_opr2()->print(out); out->print(" "); - if (tmp_opr()->is_valid()) { tmp_opr()->print(out); out->print(" "); } + if (tmp1_opr()->is_valid()) { tmp1_opr()->print(out); out->print(" "); } + if (tmp2_opr()->is_valid()) { tmp2_opr()->print(out); out->print(" "); } + if (tmp3_opr()->is_valid()) { tmp3_opr()->print(out); out->print(" "); } + if (tmp4_opr()->is_valid()) { tmp4_opr()->print(out); out->print(" "); } + if (tmp5_opr()->is_valid()) { tmp5_opr()->print(out); out->print(" "); } result_opr()->print(out); } diff --git a/hotspot/src/share/vm/c1/c1_LIR.hpp b/hotspot/src/share/vm/c1/c1_LIR.hpp index f8589c36964..eb9ff9a5f24 100644 --- a/hotspot/src/share/vm/c1/c1_LIR.hpp +++ b/hotspot/src/share/vm/c1/c1_LIR.hpp @@ -916,6 +916,8 @@ enum LIR_Code { , lir_tan , lir_log , lir_log10 + , lir_exp + , lir_pow , lir_logic_and , lir_logic_or , lir_logic_xor @@ -1560,7 +1562,11 @@ class LIR_Op2: public LIR_Op { LIR_Opr _opr1; LIR_Opr _opr2; BasicType _type; - LIR_Opr _tmp; + LIR_Opr _tmp1; + LIR_Opr _tmp2; + LIR_Opr _tmp3; + LIR_Opr _tmp4; + LIR_Opr _tmp5; LIR_Condition _condition; void verify() const; @@ -1573,7 +1579,11 @@ class LIR_Op2: public LIR_Op { , _type(T_ILLEGAL) , _condition(condition) , _fpu_stack_size(0) - , _tmp(LIR_OprFact::illegalOpr) { + , _tmp1(LIR_OprFact::illegalOpr) + , _tmp2(LIR_OprFact::illegalOpr) + , _tmp3(LIR_OprFact::illegalOpr) + , _tmp4(LIR_OprFact::illegalOpr) + , _tmp5(LIR_OprFact::illegalOpr) { assert(code == lir_cmp, "code check"); } @@ -1584,7 +1594,11 @@ class LIR_Op2: public LIR_Op { , _type(type) , _condition(condition) , _fpu_stack_size(0) - , _tmp(LIR_OprFact::illegalOpr) { + , _tmp1(LIR_OprFact::illegalOpr) + , _tmp2(LIR_OprFact::illegalOpr) + , _tmp3(LIR_OprFact::illegalOpr) + , _tmp4(LIR_OprFact::illegalOpr) + , _tmp5(LIR_OprFact::illegalOpr) { assert(code == lir_cmove, "code check"); assert(type != T_ILLEGAL, "cmove should have type"); } @@ -1597,25 +1611,38 @@ class LIR_Op2: public LIR_Op { , _type(type) , _condition(lir_cond_unknown) , _fpu_stack_size(0) - , _tmp(LIR_OprFact::illegalOpr) { + , _tmp1(LIR_OprFact::illegalOpr) + , _tmp2(LIR_OprFact::illegalOpr) + , _tmp3(LIR_OprFact::illegalOpr) + , _tmp4(LIR_OprFact::illegalOpr) + , _tmp5(LIR_OprFact::illegalOpr) { assert(code != lir_cmp && is_in_range(code, begin_op2, end_op2), "code check"); } - LIR_Op2(LIR_Code code, LIR_Opr opr1, LIR_Opr opr2, LIR_Opr result, LIR_Opr tmp) + LIR_Op2(LIR_Code code, LIR_Opr opr1, LIR_Opr opr2, LIR_Opr result, LIR_Opr tmp1, LIR_Opr tmp2 = LIR_OprFact::illegalOpr, + LIR_Opr tmp3 = LIR_OprFact::illegalOpr, LIR_Opr tmp4 = LIR_OprFact::illegalOpr, LIR_Opr tmp5 = LIR_OprFact::illegalOpr) : LIR_Op(code, result, NULL) , _opr1(opr1) , _opr2(opr2) , _type(T_ILLEGAL) , _condition(lir_cond_unknown) , _fpu_stack_size(0) - , _tmp(tmp) { + , _tmp1(tmp1) + , _tmp2(tmp2) + , _tmp3(tmp3) + , _tmp4(tmp4) + , _tmp5(tmp5) { assert(code != lir_cmp && is_in_range(code, begin_op2, end_op2), "code check"); } LIR_Opr in_opr1() const { return _opr1; } LIR_Opr in_opr2() const { return _opr2; } BasicType type() const { return _type; } - LIR_Opr tmp_opr() const { return _tmp; } + LIR_Opr tmp1_opr() const { return _tmp1; } + LIR_Opr tmp2_opr() const { return _tmp2; } + LIR_Opr tmp3_opr() const { return _tmp3; } + LIR_Opr tmp4_opr() const { return _tmp4; } + LIR_Opr tmp5_opr() const { return _tmp5; } LIR_Condition condition() const { assert(code() == lir_cmp || code() == lir_cmove, "only valid for cmp and cmove"); return _condition; } @@ -2025,6 +2052,8 @@ class LIR_List: public CompilationResourceObj { void sin (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_Op2(lir_sin , from, tmp1, to, tmp2)); } void cos (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_Op2(lir_cos , from, tmp1, to, tmp2)); } void tan (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_Op2(lir_tan , from, tmp1, to, tmp2)); } + void exp (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, LIR_Opr tmp4, LIR_Opr tmp5) { append(new LIR_Op2(lir_exp , from, tmp1, to, tmp2, tmp3, tmp4, tmp5)); } + void pow (LIR_Opr arg1, LIR_Opr arg2, LIR_Opr res, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, LIR_Opr tmp4, LIR_Opr tmp5) { append(new LIR_Op2(lir_pow, arg1, arg2, res, tmp1, tmp2, tmp3, tmp4, tmp5)); } void add (LIR_Opr left, LIR_Opr right, LIR_Opr res) { append(new LIR_Op2(lir_add, left, right, res)); } void sub (LIR_Opr left, LIR_Opr right, LIR_Opr res, CodeEmitInfo* info = NULL) { append(new LIR_Op2(lir_sub, left, right, res, info)); } diff --git a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp index 528f21e841c..b3082cb0c23 100644 --- a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp @@ -718,7 +718,7 @@ void LIR_Assembler::emit_op2(LIR_Op2* op) { if (op->in_opr2()->is_constant()) { shift_op(op->code(), op->in_opr1(), op->in_opr2()->as_constant_ptr()->as_jint(), op->result_opr()); } else { - shift_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp_opr()); + shift_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp1_opr()); } break; @@ -746,6 +746,8 @@ void LIR_Assembler::emit_op2(LIR_Op2* op) { case lir_cos: case lir_log: case lir_log10: + case lir_exp: + case lir_pow: intrinsic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op); break; diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp index 6ed6edf47c3..db61d7a42e6 100644 --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp @@ -1242,6 +1242,36 @@ void LIRGenerator::do_Reference_get(Intrinsic* x) { NULL /* info */); } +// Example: clazz.isInstance(object) +void LIRGenerator::do_isInstance(Intrinsic* x) { + assert(x->number_of_arguments() == 2, "wrong type"); + + // TODO could try to substitute this node with an equivalent InstanceOf + // if clazz is known to be a constant Class. This will pick up newly found + // constants after HIR construction. I'll leave this to a future change. + + // as a first cut, make a simple leaf call to runtime to stay platform independent. + // could follow the aastore example in a future change. + + LIRItem clazz(x->argument_at(0), this); + LIRItem object(x->argument_at(1), this); + clazz.load_item(); + object.load_item(); + LIR_Opr result = rlock_result(x); + + // need to perform null check on clazz + if (x->needs_null_check()) { + CodeEmitInfo* info = state_for(x); + __ null_check(clazz.result(), info); + } + + LIR_Opr call_result = call_runtime(clazz.value(), object.value(), + CAST_FROM_FN_PTR(address, Runtime1::is_instance_of), + x->type(), + NULL); // NULL CodeEmitInfo results in a leaf call + __ move(call_result, result); +} + // Example: object.getClass () void LIRGenerator::do_getClass(Intrinsic* x) { assert(x->number_of_arguments() == 1, "wrong type"); @@ -2777,31 +2807,29 @@ void LIRGenerator::do_Invoke(Invoke* x) { int index = bcs.get_method_index(); size_t call_site_offset = cpcache->get_f1_offset(index); + // Load CallSite object from constant pool cache. + LIR_Opr call_site = new_register(objectType); + __ oop2reg(cpcache->constant_encoding(), call_site); + __ move_wide(new LIR_Address(call_site, call_site_offset, T_OBJECT), call_site); + // If this invokedynamic call site hasn't been executed yet in // the interpreter, the CallSite object in the constant pool // cache is still null and we need to deoptimize. if (cpcache->is_f1_null_at(index)) { - // Cannot re-use same xhandlers for multiple CodeEmitInfos, so - // clone all handlers. This is handled transparently in other - // places by the CodeEmitInfo cloning logic but is handled - // specially here because a stub isn't being used. - x->set_exception_handlers(new XHandlers(x->exception_handlers())); - + // Only deoptimize if the CallSite object is still null; we don't + // recompile methods in C1 after deoptimization so this call site + // might be resolved the next time we execute it after OSR. DeoptimizeStub* deopt_stub = new DeoptimizeStub(deopt_info); - __ jump(deopt_stub); + __ cmp(lir_cond_equal, call_site, LIR_OprFact::oopConst(NULL)); + __ branch(lir_cond_equal, T_OBJECT, deopt_stub); } // Use the receiver register for the synthetic MethodHandle // argument. receiver = LIR_Assembler::receiverOpr(); - LIR_Opr tmp = new_register(objectType); - - // Load CallSite object from constant pool cache. - __ oop2reg(cpcache->constant_encoding(), tmp); - __ move_wide(new LIR_Address(tmp, call_site_offset, T_OBJECT), tmp); // Load target MethodHandle from CallSite object. - __ load(new LIR_Address(tmp, java_lang_invoke_CallSite::target_offset_in_bytes(), T_OBJECT), receiver); + __ load(new LIR_Address(call_site, java_lang_invoke_CallSite::target_offset_in_bytes(), T_OBJECT), receiver); __ call_dynamic(target, receiver, result_register, SharedRuntime::get_resolve_opt_virtual_call_stub(), @@ -2809,7 +2837,7 @@ void LIRGenerator::do_Invoke(Invoke* x) { break; } default: - ShouldNotReachHere(); + fatal(err_msg("unexpected bytecode: %s", Bytecodes::name(x->code()))); break; } @@ -2951,6 +2979,7 @@ void LIRGenerator::do_Intrinsic(Intrinsic* x) { break; case vmIntrinsics::_Object_init: do_RegisterFinalizer(x); break; + case vmIntrinsics::_isInstance: do_isInstance(x); break; case vmIntrinsics::_getClass: do_getClass(x); break; case vmIntrinsics::_currentThread: do_currentThread(x); break; @@ -2960,7 +2989,9 @@ void LIRGenerator::do_Intrinsic(Intrinsic* x) { case vmIntrinsics::_dsqrt: // fall through case vmIntrinsics::_dtan: // fall through case vmIntrinsics::_dsin : // fall through - case vmIntrinsics::_dcos : do_MathIntrinsic(x); break; + case vmIntrinsics::_dcos : // fall through + case vmIntrinsics::_dexp : // fall through + case vmIntrinsics::_dpow : do_MathIntrinsic(x); break; case vmIntrinsics::_arraycopy: do_ArrayCopy(x); break; // java.nio.Buffer.checkIndex @@ -2976,11 +3007,6 @@ void LIRGenerator::do_Intrinsic(Intrinsic* x) { do_CompareAndSwap(x, longType); break; - // sun.misc.AtomicLongCSImpl.attemptUpdate - case vmIntrinsics::_attemptUpdate: - do_AttemptUpdate(x); - break; - case vmIntrinsics::_Reference_get: do_Reference_get(x); break; @@ -3221,4 +3247,3 @@ void LIRGenerator::do_MemBar(MemBar* x) { } } } - diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp index 67127df04d8..bc6b2510e70 100644 --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp @@ -238,12 +238,12 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure { LIR_Opr getThreadPointer(); void do_RegisterFinalizer(Intrinsic* x); + void do_isInstance(Intrinsic* x); void do_getClass(Intrinsic* x); void do_currentThread(Intrinsic* x); void do_MathIntrinsic(Intrinsic* x); void do_ArrayCopy(Intrinsic* x); void do_CompareAndSwap(Intrinsic* x, ValueType* type); - void do_AttemptUpdate(Intrinsic* x); void do_NIOCheckIndex(Intrinsic* x); void do_FPIntrinsics(Intrinsic* x); void do_Reference_get(Intrinsic* x); diff --git a/hotspot/src/share/vm/c1/c1_LinearScan.cpp b/hotspot/src/share/vm/c1/c1_LinearScan.cpp index fede09fe8a8..bd4061ec787 100644 --- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp +++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp @@ -2467,12 +2467,12 @@ void LinearScan::compute_oop_map(IntervalWalker* iw, const LIR_OpVisitState &vis // Allocate them with new so they are never destroyed (otherwise, a // forced exit could destroy these objects while they are still in // use). -ConstantOopWriteValue* LinearScan::_oop_null_scope_value = new (ResourceObj::C_HEAP) ConstantOopWriteValue(NULL); -ConstantIntValue* LinearScan::_int_m1_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(-1); -ConstantIntValue* LinearScan::_int_0_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(0); -ConstantIntValue* LinearScan::_int_1_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(1); -ConstantIntValue* LinearScan::_int_2_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(2); -LocationValue* _illegal_value = new (ResourceObj::C_HEAP) LocationValue(Location()); +ConstantOopWriteValue* LinearScan::_oop_null_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantOopWriteValue(NULL); +ConstantIntValue* LinearScan::_int_m1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(-1); +ConstantIntValue* LinearScan::_int_0_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(0); +ConstantIntValue* LinearScan::_int_1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(1); +ConstantIntValue* LinearScan::_int_2_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(2); +LocationValue* _illegal_value = new (ResourceObj::C_HEAP, mtCompiler) LocationValue(Location()); void LinearScan::init_compute_debug_info() { // cache for frequently used scope values @@ -6579,6 +6579,8 @@ void LinearScanStatistic::collect(LinearScan* allocator) { case lir_abs: case lir_log10: case lir_log: + case lir_pow: + case lir_exp: case lir_logic_and: case lir_logic_or: case lir_logic_xor: diff --git a/hotspot/src/share/vm/c1/c1_Runtime1.cpp b/hotspot/src/share/vm/c1/c1_Runtime1.cpp index 47703492d1e..d0b6abecb9d 100644 --- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp +++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp @@ -294,6 +294,7 @@ const char* Runtime1::name_for_address(address entry) { FUNCTION_CASE(entry, SharedRuntime::lrem); FUNCTION_CASE(entry, SharedRuntime::dtrace_method_entry); FUNCTION_CASE(entry, SharedRuntime::dtrace_method_exit); + FUNCTION_CASE(entry, is_instance_of); FUNCTION_CASE(entry, trace_block_entry); #ifdef TRACE_HAVE_INTRINSICS FUNCTION_CASE(entry, TRACE_TIME_METHOD); @@ -1270,6 +1271,19 @@ JRT_LEAF(void, Runtime1::oop_arraycopy(HeapWord* src, HeapWord* dst, int num)) JRT_END +JRT_LEAF(int, Runtime1::is_instance_of(oopDesc* mirror, oopDesc* obj)) + // had to return int instead of bool, otherwise there may be a mismatch + // between the C calling convention and the Java one. + // e.g., on x86, GCC may clear only %al when returning a bool false, but + // JVM takes the whole %eax as the return value, which may misinterpret + // the return value as a boolean true. + + assert(mirror != NULL, "should null-check on mirror before calling"); + klassOop k = java_lang_Class::as_klassOop(mirror); + return (k != NULL && obj != NULL && obj->is_a(k)) ? 1 : 0; +JRT_END + + #ifndef PRODUCT void Runtime1::print_statistics() { tty->print_cr("C1 Runtime statistics:"); diff --git a/hotspot/src/share/vm/c1/c1_Runtime1.hpp b/hotspot/src/share/vm/c1/c1_Runtime1.hpp index 20325640bf1..fce5b2c5272 100644 --- a/hotspot/src/share/vm/c1/c1_Runtime1.hpp +++ b/hotspot/src/share/vm/c1/c1_Runtime1.hpp @@ -186,6 +186,7 @@ class Runtime1: public AllStatic { static int arraycopy(oopDesc* src, int src_pos, oopDesc* dst, int dst_pos, int length); static void primitive_arraycopy(HeapWord* src, HeapWord* dst, int length); static void oop_arraycopy(HeapWord* src, HeapWord* dst, int length); + static int is_instance_of(oopDesc* mirror, oopDesc* obj); static void print_statistics() PRODUCT_RETURN; }; diff --git a/hotspot/src/share/vm/c1/c1_ValueMap.hpp b/hotspot/src/share/vm/c1/c1_ValueMap.hpp index 4278b11d39a..5b38819da82 100644 --- a/hotspot/src/share/vm/c1/c1_ValueMap.hpp +++ b/hotspot/src/share/vm/c1/c1_ValueMap.hpp @@ -141,8 +141,11 @@ class ValueNumberingVisitor: public InstructionVisitor { // visitor functions void do_StoreField (StoreField* x) { - if (x->is_init_point()) { - // putstatic is an initialization point so treat it as a wide kill + if (x->is_init_point() || // putstatic is an initialization point so treat it as a wide kill + // This is actually too strict and the JMM doesn't require + // this in all cases (e.g. load a; volatile store b; load a) + // but possible future optimizations might require this. + x->field()->is_volatile()) { kill_memory(); } else { kill_field(x->field()); @@ -160,8 +163,8 @@ class ValueNumberingVisitor: public InstructionVisitor { void do_Local (Local* x) { /* nothing to do */ } void do_Constant (Constant* x) { /* nothing to do */ } void do_LoadField (LoadField* x) { - if (x->is_init_point()) { - // getstatic is an initialization point so treat it as a wide kill + if (x->is_init_point() || // getstatic is an initialization point so treat it as a wide kill + x->field()->is_volatile()) { // the JMM requires this kill_memory(); } } diff --git a/hotspot/src/share/vm/ci/ciMethod.cpp b/hotspot/src/share/vm/ci/ciMethod.cpp index 6049d7b9330..180f22f2144 100644 --- a/hotspot/src/share/vm/ci/ciMethod.cpp +++ b/hotspot/src/share/vm/ci/ciMethod.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,7 +79,7 @@ ciMethod::ciMethod(methodHandle h_m) : ciObject(h_m) { _max_locals = h_m()->max_locals(); _code_size = h_m()->code_size(); _intrinsic_id = h_m()->intrinsic_id(); - _handler_count = h_m()->exception_table()->length() / 4; + _handler_count = h_m()->exception_table_length(); _uses_monitors = h_m()->access_flags().has_monitor_bytecodes(); _balanced_monitors = !_uses_monitors || h_m()->access_flags().is_monitor_matching(); _is_c1_compilable = !h_m()->is_not_c1_compilable(); @@ -198,7 +198,7 @@ void ciMethod::load_code() { } // And load the exception table. - typeArrayOop exc_table = me->exception_table(); + ExceptionTable exc_table(me); // Allocate one extra spot in our list of exceptions. This // last entry will be used to represent the possibility that @@ -209,13 +209,12 @@ void ciMethod::load_code() { * (_handler_count + 1)); if (_handler_count > 0) { for (int i=0; i<_handler_count; i++) { - int base = i*4; _exception_handlers[i] = new (arena) ciExceptionHandler( holder(), - /* start */ exc_table->int_at(base), - /* limit */ exc_table->int_at(base+1), - /* goto pc */ exc_table->int_at(base+2), - /* cp index */ exc_table->int_at(base+3)); + /* start */ exc_table.start_pc(i), + /* limit */ exc_table.end_pc(i), + /* goto pc */ exc_table.handler_pc(i), + /* cp index */ exc_table.catch_type_index(i)); } } diff --git a/hotspot/src/share/vm/ci/ciMethod.hpp b/hotspot/src/share/vm/ci/ciMethod.hpp index 98571ae2873..de28a858669 100644 --- a/hotspot/src/share/vm/ci/ciMethod.hpp +++ b/hotspot/src/share/vm/ci/ciMethod.hpp @@ -160,6 +160,8 @@ class ciMethod : public ciObject { // Code size for inlining decisions. int code_size_for_inlining(); + bool force_inline() { return get_methodOop()->force_inline(); } + int comp_level(); int highest_osr_comp_level(); diff --git a/hotspot/src/share/vm/ci/ciObjectFactory.cpp b/hotspot/src/share/vm/ci/ciObjectFactory.cpp index 9aa6b261118..a68fb1259ce 100644 --- a/hotspot/src/share/vm/ci/ciObjectFactory.cpp +++ b/hotspot/src/share/vm/ci/ciObjectFactory.cpp @@ -111,7 +111,7 @@ void ciObjectFactory::initialize() { // This Arena is long lived and exists in the resource mark of the // compiler thread that initializes the initial ciObjectFactory which // creates the shared ciObjects that all later ciObjectFactories use. - Arena* arena = new Arena(); + Arena* arena = new (mtCompiler) Arena(); ciEnv initial(arena); ciEnv* env = ciEnv::current(); env->_factory->init_shared_objects(); diff --git a/hotspot/src/share/vm/classfile/altHashing.cpp b/hotspot/src/share/vm/classfile/altHashing.cpp new file mode 100644 index 00000000000..096d17e9303 --- /dev/null +++ b/hotspot/src/share/vm/classfile/altHashing.cpp @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/altHashing.hpp" +#include "classfile/symbolTable.hpp" +#include "classfile/systemDictionary.hpp" +#include "oops/markOop.hpp" +#include "runtime/thread.hpp" + +// Get the hash code of the classes mirror if it exists, otherwise just +// return a random number, which is one of the possible hash code used for +// objects. We don't want to call the synchronizer hash code to install +// this value because it may safepoint. +intptr_t object_hash(klassOop k) { + intptr_t hc = k->java_mirror()->mark()->hash(); + return hc != markOopDesc::no_hash ? hc : os::random(); +} + +// Seed value used for each alternative hash calculated. +jint AltHashing::compute_seed() { + jlong nanos = os::javaTimeNanos(); + jlong now = os::javaTimeMillis(); + jint SEED_MATERIAL[8] = { + (jint) object_hash(SystemDictionary::String_klass()), + (jint) object_hash(SystemDictionary::System_klass()), + (jint) os::random(), // current thread isn't a java thread + (jint) (((julong)nanos) >> 32), + (jint) nanos, + (jint) (((julong)now) >> 32), + (jint) now, + (jint) (os::javaTimeNanos() >> 2) + }; + + return murmur3_32(SEED_MATERIAL, 8); +} + + +// Murmur3 hashing for Symbol +jint AltHashing::murmur3_32(jint seed, const jbyte* data, int len) { + jint h1 = seed; + int count = len; + int offset = 0; + + // body + while (count >= 4) { + jint k1 = (data[offset] & 0x0FF) + | (data[offset + 1] & 0x0FF) << 8 + | (data[offset + 2] & 0x0FF) << 16 + | data[offset + 3] << 24; + + count -= 4; + offset += 4; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail + + if (count > 0) { + jint k1 = 0; + + switch (count) { + case 3: + k1 ^= (data[offset + 2] & 0xff) << 16; + // fall through + case 2: + k1 ^= (data[offset + 1] & 0xff) << 8; + // fall through + case 1: + k1 ^= (data[offset] & 0xff); + // fall through + default: + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + h1 ^= k1; + } + } + + // finalization + h1 ^= len; + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((unsigned int)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((unsigned int)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((unsigned int)h1) >> 16; + + return h1; +} + +// Murmur3 hashing for Strings +jint AltHashing::murmur3_32(jint seed, const jchar* data, int len) { + jint h1 = seed; + + int off = 0; + int count = len; + + // body + while (count >= 2) { + jchar d1 = data[off++] & 0xFFFF; + jchar d2 = data[off++]; + jint k1 = (d1 | d2 << 16); + + count -= 2; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail + + if (count > 0) { + int k1 = data[off]; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + h1 ^= k1; + } + + // finalization + h1 ^= len * 2; // (Character.SIZE / Byte.SIZE); + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((unsigned int)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((unsigned int)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((unsigned int)h1) >> 16; + + return h1; +} + +// Hash used for the seed. +jint AltHashing::murmur3_32(jint seed, const int* data, int len) { + jint h1 = seed; + + int off = 0; + int end = len; + + // body + while (off < end) { + jint k1 = data[off++]; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail (always empty, as body is always 32-bit chunks) + + // finalization + + h1 ^= len * 4; // (Integer.SIZE / Byte.SIZE); + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((juint)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((juint)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((juint)h1) >> 16; + + return h1; +} + +jint AltHashing::murmur3_32(const int* data, int len) { + return murmur3_32(0, data, len); +} + +#ifndef PRODUCT +// Overloaded versions for internal test. +jint AltHashing::murmur3_32(const jbyte* data, int len) { + return murmur3_32(0, data, len); +} + +jint AltHashing::murmur3_32(const jchar* data, int len) { + return murmur3_32(0, data, len); +} + +// Internal test for alternate hashing. Translated from JDK version +// test/sun/misc/Hashing.java +static const jbyte ONE_BYTE[] = { (jbyte) 0x80}; +static const jbyte TWO_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81}; +static const jchar ONE_CHAR[] = { (jchar) 0x8180}; +static const jbyte THREE_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82}; +static const jbyte FOUR_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83}; +static const jchar TWO_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382}; +static const jint ONE_INT[] = { 0x83828180}; +static const jbyte SIX_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83, (jbyte) 0x84, (jbyte) 0x85}; +static const jchar THREE_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382, (jchar) 0x8584}; +static const jbyte EIGHT_BYTE[] = { + (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, + (jbyte) 0x83, (jbyte) 0x84, (jbyte) 0x85, + (jbyte) 0x86, (jbyte) 0x87}; +static const jchar FOUR_CHAR[] = { + (jchar) 0x8180, (jchar) 0x8382, + (jchar) 0x8584, (jchar) 0x8786}; + +static const jint TWO_INT[] = { 0x83828180, 0x87868584}; + +static const juint MURMUR3_32_X86_CHECK_VALUE = 0xB0F57EE3; + +void AltHashing::testMurmur3_32_ByteArray() { + // printf("testMurmur3_32_ByteArray\n"); + + jbyte* vector = new jbyte[256]; + jbyte* hashes = new jbyte[4 * 256]; + + for (int i = 0; i < 256; i++) { + vector[i] = (jbyte) i; + } + + // Hash subranges {}, {0}, {0,1}, {0,1,2}, ..., {0,...,255} + for (int i = 0; i < 256; i++) { + jint hash = murmur3_32(256 - i, vector, i); + hashes[i * 4] = (jbyte) hash; + hashes[i * 4 + 1] = (jbyte) (((juint)hash) >> 8); + hashes[i * 4 + 2] = (jbyte) (((juint)hash) >> 16); + hashes[i * 4 + 3] = (jbyte) (((juint)hash) >> 24); + } + + // hash to get const result. + juint final_hash = murmur3_32(hashes, 4*256); + + assert (MURMUR3_32_X86_CHECK_VALUE == final_hash, + err_msg( + "Calculated hash result not as expected. Expected %08X got %08X\n", + MURMUR3_32_X86_CHECK_VALUE, + final_hash)); +} + +void AltHashing::testEquivalentHashes() { + jint jbytes, jchars, ints; + + // printf("testEquivalentHashes\n"); + + jbytes = murmur3_32(TWO_BYTE, 2); + jchars = murmur3_32(ONE_CHAR, 1); + assert (jbytes == jchars, + err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); + + jbytes = murmur3_32(FOUR_BYTE, 4); + jchars = murmur3_32(TWO_CHAR, 2); + ints = murmur3_32(ONE_INT, 1); + assert ((jbytes == jchars) && (jbytes == ints), + err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); + + jbytes = murmur3_32(SIX_BYTE, 6); + jchars = murmur3_32(THREE_CHAR, 3); + assert (jbytes == jchars, + err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); + + jbytes = murmur3_32(EIGHT_BYTE, 8); + jchars = murmur3_32(FOUR_CHAR, 4); + ints = murmur3_32(TWO_INT, 2); + assert ((jbytes == jchars) && (jbytes == ints), + err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); +} + +// Returns true if the alternate hashcode is correct +void AltHashing::test_alt_hash() { + testMurmur3_32_ByteArray(); + testEquivalentHashes(); +} +#endif // PRODUCT diff --git a/hotspot/src/share/vm/classfile/altHashing.hpp b/hotspot/src/share/vm/classfile/altHashing.hpp new file mode 100644 index 00000000000..941b9a0dc37 --- /dev/null +++ b/hotspot/src/share/vm/classfile/altHashing.hpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_CLASSFILE_ALTHASHING_HPP +#define SHARE_VM_CLASSFILE_ALTHASHING_HPP + +#include "prims/jni.h" +#include "classfile/symbolTable.hpp" + +/** + * Hashing utilities. + * + * Implementation of Murmur3 hashing. + * This code was translated from src/share/classes/sun/misc/Hashing.java + * code in the JDK. + */ + +class AltHashing : AllStatic { + + // utility function copied from java/lang/Integer + static jint Integer_rotateLeft(jint i, int distance) { + return (i << distance) | (((juint)i) >> (32-distance)); + } + static jint murmur3_32(const int* data, int len); + static jint murmur3_32(jint seed, const int* data, int len); + +#ifndef PRODUCT + // Hashing functions used for internal testing + static jint murmur3_32(const jbyte* data, int len); + static jint murmur3_32(const jchar* data, int len); + static void testMurmur3_32_ByteArray(); + static void testEquivalentHashes(); +#endif // PRODUCT + + public: + static jint compute_seed(); + static jint murmur3_32(jint seed, const jbyte* data, int len); + static jint murmur3_32(jint seed, const jchar* data, int len); + NOT_PRODUCT(static void test_alt_hash();) +}; +#endif // SHARE_VM_CLASSFILE_ALTHASHING_HPP diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index f24610c060c..57f175e1b2f 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -318,6 +318,13 @@ class ConstantPoolCleaner : public StackObj { bool inline valid_cp_range(int index, int length) { return (index > 0 && index < length); } +inline Symbol* check_symbol_at(constantPoolHandle cp, int index) { + if (valid_cp_range(index, cp->length()) && cp->tag_at(index).is_utf8()) + return cp->symbol_at(index); + else + return NULL; +} + constantPoolHandle ClassFileParser::parse_constant_pool(Handle class_loader, TRAPS) { ClassFileStream* cfs = stream(); constantPoolHandle nullHandle; @@ -902,6 +909,7 @@ void ClassFileParser::parse_field_attributes(constantPoolHandle cp, bool* is_synthetic_addr, u2* generic_signature_index_addr, typeArrayHandle* field_annotations, + ClassFileParser::FieldAnnotationCollector* parsed_annotations, TRAPS) { ClassFileStream* cfs = stream(); assert(attributes_count > 0, "length should be greater than 0"); @@ -1082,12 +1090,36 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, int num_injected = 0; InjectedField* injected = JavaClasses::get_injected(class_name, &num_injected); + int total_fields = length + num_injected; - // Tuples of shorts [access, name index, sig index, initial value index, byte offset, generic signature index] - typeArrayOop new_fields = oopFactory::new_permanent_shortArray((length + num_injected) * FieldInfo::field_slots, CHECK_(nullHandle)); - typeArrayHandle fields(THREAD, new_fields); + // The field array starts with tuples of shorts + // [access, name index, sig index, initial value index, byte offset]. + // A generic signature slot only exists for field with generic + // signature attribute. And the access flag is set with + // JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE for that field. The generic + // signature slots are at the end of the field array and after all + // other fields data. + // + // f1: [access, name index, sig index, initial value index, low_offset, high_offset] + // f2: [access, name index, sig index, initial value index, low_offset, high_offset] + // ... + // fn: [access, name index, sig index, initial value index, low_offset, high_offset] + // [generic signature index] + // [generic signature index] + // ... + // + // Allocate a temporary resource array for field data. For each field, + // a slot is reserved in the temporary array for the generic signature + // index. After parsing all fields, the data are copied to a permanent + // array and any unused slots will be discarded. + ResourceMark rm(THREAD); + u2* fa = NEW_RESOURCE_ARRAY_IN_THREAD( + THREAD, u2, total_fields * (FieldInfo::field_slots + 1)); typeArrayHandle field_annotations; + // The generic signature slots start after all other fields' data. + int generic_signature_slot = total_fields * FieldInfo::field_slots; + int num_generic_signature = 0; for (int n = 0; n < length; n++) { cfs->guarantee_more(8, CHECK_(nullHandle)); // access_flags, name_index, descriptor_index, attributes_count @@ -1118,12 +1150,14 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, bool is_synthetic = false; u2 generic_signature_index = 0; bool is_static = access_flags.is_static(); + FieldAnnotationCollector parsed_annotations; u2 attributes_count = cfs->get_u2_fast(); if (attributes_count > 0) { parse_field_attributes(cp, attributes_count, is_static, signature_index, &constantvalue_index, &is_synthetic, &generic_signature_index, &field_annotations, + &parsed_annotations, CHECK_(nullHandle)); if (field_annotations.not_null()) { if (fields_annotations->is_null()) { @@ -1135,15 +1169,22 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, if (is_synthetic) { access_flags.set_is_synthetic(); } + if (generic_signature_index != 0) { + access_flags.set_field_has_generic_signature(); + fa[generic_signature_slot] = generic_signature_index; + generic_signature_slot ++; + num_generic_signature ++; + } } - FieldInfo* field = FieldInfo::from_field_array(fields(), n); + FieldInfo* field = FieldInfo::from_field_array(fa, n); field->initialize(access_flags.as_short(), name_index, signature_index, constantvalue_index, - generic_signature_index, 0); + if (parsed_annotations.has_any_annotations()) + parsed_annotations.apply_to(field); BasicType type = cp->basic_type_for_signature_at(signature_index); @@ -1155,8 +1196,8 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, field->set_offset(atype); } + int index = length; if (num_injected != 0) { - int index = length; for (int n = 0; n < num_injected; n++) { // Check for duplicates if (injected[n].may_be_java) { @@ -1164,7 +1205,7 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, Symbol* signature = injected[n].signature(); bool duplicate = false; for (int i = 0; i < length; i++) { - FieldInfo* f = FieldInfo::from_field_array(fields(), i); + FieldInfo* f = FieldInfo::from_field_array(fa, i); if (name == cp->symbol_at(f->name_index()) && signature == cp->symbol_at(f->signature_index())) { // Symbol is desclared in Java so skip this one @@ -1179,12 +1220,11 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, } // Injected field - FieldInfo* field = FieldInfo::from_field_array(fields(), index); + FieldInfo* field = FieldInfo::from_field_array(fa, index); field->initialize(JVM_ACC_FIELD_INTERNAL, injected[n].name_index, injected[n].signature_index, 0, - 0, 0); BasicType type = FieldType::basic_type(injected[n].signature()); @@ -1197,17 +1237,27 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, field->set_offset(atype); index++; } + } - if (index < length + num_injected) { - // sometimes injected fields already exist in the Java source so - // the fields array could be too long. In that case trim the - // fields array. - new_fields = oopFactory::new_permanent_shortArray(index * FieldInfo::field_slots, CHECK_(nullHandle)); - for (int i = 0; i < index * FieldInfo::field_slots; i++) { - new_fields->short_at_put(i, fields->short_at(i)); - } - fields = new_fields; + // Now copy the fields' data from the temporary resource array. + // Sometimes injected fields already exist in the Java source so + // the fields array could be too long. In that case the + // fields array is trimed. Also unused slots that were reserved + // for generic signature indexes are discarded. + typeArrayOop new_fields = oopFactory::new_permanent_shortArray( + index * FieldInfo::field_slots + num_generic_signature, + CHECK_(nullHandle)); + typeArrayHandle fields(THREAD, new_fields); + { + int i = 0; + for (; i < index * FieldInfo::field_slots; i++) { + new_fields->short_at_put(i, fa[i]); } + for (int j = total_fields * FieldInfo::field_slots; + j < generic_signature_slot; j++) { + new_fields->short_at_put(i++, fa[j]); + } + assert(i == new_fields->length(), ""); } if (_need_verify && length > 1) { @@ -1246,42 +1296,38 @@ static void copy_u2_with_conversion(u2* dest, u2* src, int length) { } -typeArrayHandle ClassFileParser::parse_exception_table(u4 code_length, - u4 exception_table_length, - constantPoolHandle cp, - TRAPS) { +u2* ClassFileParser::parse_exception_table(u4 code_length, + u4 exception_table_length, + constantPoolHandle cp, + TRAPS) { ClassFileStream* cfs = stream(); - typeArrayHandle nullHandle; - // 4-tuples of ints [start_pc, end_pc, handler_pc, catch_type index] - typeArrayOop eh = oopFactory::new_permanent_intArray(exception_table_length*4, CHECK_(nullHandle)); - typeArrayHandle exception_handlers = typeArrayHandle(THREAD, eh); - - int index = 0; - cfs->guarantee_more(8 * exception_table_length, CHECK_(nullHandle)); // start_pc, end_pc, handler_pc, catch_type_index - for (unsigned int i = 0; i < exception_table_length; i++) { - u2 start_pc = cfs->get_u2_fast(); - u2 end_pc = cfs->get_u2_fast(); - u2 handler_pc = cfs->get_u2_fast(); - u2 catch_type_index = cfs->get_u2_fast(); - // Will check legal target after parsing code array in verifier. - if (_need_verify) { + u2* exception_table_start = cfs->get_u2_buffer(); + assert(exception_table_start != NULL, "null exception table"); + cfs->guarantee_more(8 * exception_table_length, CHECK_NULL); // start_pc, end_pc, handler_pc, catch_type_index + // Will check legal target after parsing code array in verifier. + if (_need_verify) { + for (unsigned int i = 0; i < exception_table_length; i++) { + u2 start_pc = cfs->get_u2_fast(); + u2 end_pc = cfs->get_u2_fast(); + u2 handler_pc = cfs->get_u2_fast(); + u2 catch_type_index = cfs->get_u2_fast(); guarantee_property((start_pc < end_pc) && (end_pc <= code_length), - "Illegal exception table range in class file %s", CHECK_(nullHandle)); + "Illegal exception table range in class file %s", + CHECK_NULL); guarantee_property(handler_pc < code_length, - "Illegal exception table handler in class file %s", CHECK_(nullHandle)); + "Illegal exception table handler in class file %s", + CHECK_NULL); if (catch_type_index != 0) { guarantee_property(valid_cp_range(catch_type_index, cp->length()) && is_klass_reference(cp, catch_type_index), - "Catch type in exception table has bad constant type in class file %s", CHECK_(nullHandle)); + "Catch type in exception table has bad constant type in class file %s", CHECK_NULL); } } - exception_handlers->int_at_put(index++, start_pc); - exception_handlers->int_at_put(index++, end_pc); - exception_handlers->int_at_put(index++, handler_pc); - exception_handlers->int_at_put(index++, catch_type_index); + } else { + cfs->skip_u2_fast(exception_table_length * 4); } - return exception_handlers; + return exception_table_start; } void ClassFileParser::parse_linenumber_table( @@ -1330,7 +1376,7 @@ class Classfile_LVT_Element VALUE_OBJ_CLASS_SPEC { }; -class LVT_Hash: public CHeapObj { +class LVT_Hash: public CHeapObj { public: LocalVariableTableElement *_elem; // element LVT_Hash* _next; // Next entry in hash table @@ -1600,12 +1646,158 @@ void ClassFileParser::throwIllegalSignature( name->as_C_string(), _class_name->as_C_string(), sig->as_C_string()); } +// Skip an annotation. Return >=limit if there is any problem. +int ClassFileParser::skip_annotation(u1* buffer, int limit, int index) { + // annotation := atype:u2 do(nmem:u2) {member:u2 value} + // value := switch (tag:u1) { ... } + index += 2; // skip atype + if ((index += 2) >= limit) return limit; // read nmem + int nmem = Bytes::get_Java_u2(buffer+index-2); + while (--nmem >= 0 && index < limit) { + index += 2; // skip member + index = skip_annotation_value(buffer, limit, index); + } + return index; +} + +// Skip an annotation value. Return >=limit if there is any problem. +int ClassFileParser::skip_annotation_value(u1* buffer, int limit, int index) { + // value := switch (tag:u1) { + // case B, C, I, S, Z, D, F, J, c: con:u2; + // case e: e_class:u2 e_name:u2; + // case s: s_con:u2; + // case [: do(nval:u2) {value}; + // case @: annotation; + // case s: s_con:u2; + // } + if ((index += 1) >= limit) return limit; // read tag + u1 tag = buffer[index-1]; + switch (tag) { + case 'B': case 'C': case 'I': case 'S': case 'Z': + case 'D': case 'F': case 'J': case 'c': case 's': + index += 2; // skip con or s_con + break; + case 'e': + index += 4; // skip e_class, e_name + break; + case '[': + { + if ((index += 2) >= limit) return limit; // read nval + int nval = Bytes::get_Java_u2(buffer+index-2); + while (--nval >= 0 && index < limit) { + index = skip_annotation_value(buffer, limit, index); + } + } + break; + case '@': + index = skip_annotation(buffer, limit, index); + break; + default: + assert(false, "annotation tag"); + return limit; // bad tag byte + } + return index; +} + +// Sift through annotations, looking for those significant to the VM: +void ClassFileParser::parse_annotations(u1* buffer, int limit, + constantPoolHandle cp, + ClassFileParser::AnnotationCollector* coll, + TRAPS) { + // annotations := do(nann:u2) {annotation} + int index = 0; + if ((index += 2) >= limit) return; // read nann + int nann = Bytes::get_Java_u2(buffer+index-2); + enum { // initial annotation layout + atype_off = 0, // utf8 such as 'Ljava/lang/annotation/Retention;' + count_off = 2, // u2 such as 1 (one value) + member_off = 4, // utf8 such as 'value' + tag_off = 6, // u1 such as 'c' (type) or 'e' (enum) + e_tag_val = 'e', + e_type_off = 7, // utf8 such as 'Ljava/lang/annotation/RetentionPolicy;' + e_con_off = 9, // utf8 payload, such as 'SOURCE', 'CLASS', 'RUNTIME' + e_size = 11, // end of 'e' annotation + c_tag_val = 'c', + c_con_off = 7, // utf8 payload, such as 'I' or 'Ljava/lang/String;' + c_size = 9, // end of 'c' annotation + min_size = 6 // smallest possible size (zero members) + }; + while ((--nann) >= 0 && (index-2 + min_size <= limit)) { + int index0 = index; + index = skip_annotation(buffer, limit, index); + u1* abase = buffer + index0; + int atype = Bytes::get_Java_u2(abase + atype_off); + int count = Bytes::get_Java_u2(abase + count_off); + Symbol* aname = check_symbol_at(cp, atype); + if (aname == NULL) break; // invalid annotation name + Symbol* member = NULL; + if (count >= 1) { + int member_index = Bytes::get_Java_u2(abase + member_off); + member = check_symbol_at(cp, member_index); + if (member == NULL) break; // invalid member name + } + + // Here is where parsing particular annotations will take place. + AnnotationCollector::ID id = coll->annotation_index(aname); + if (id == AnnotationCollector::_unknown) continue; + coll->set_annotation(id); + // If there are no values, just set the bit and move on: + if (count == 0) continue; + + // For the record, here is how annotation payloads can be collected. + // Suppose we want to capture @Retention.value. Here is how: + //if (id == AnnotationCollector::_class_Retention) { + // Symbol* payload = NULL; + // if (count == 1 + // && e_size == (index0 - index) // match size + // && e_tag_val == *(abase + tag_off) + // && (check_symbol_at(cp, Bytes::get_Java_u2(abase + e_type_off)) + // == vmSymbols::RetentionPolicy_signature()) + // && member == vmSymbols::value_name()) { + // payload = check_symbol_at(cp, Bytes::get_Java_u2(abase + e_con_off)); + // } + // check_property(payload != NULL, + // "Invalid @Retention annotation at offset %u in class file %s", + // index0, CHECK); + // if (payload != NULL) { + // payload->increment_refcount(); + // coll->_class_RetentionPolicy = payload; + // } + //} + } +} + +ClassFileParser::AnnotationCollector::ID ClassFileParser::AnnotationCollector::annotation_index(Symbol* name) { + vmSymbols::SID sid = vmSymbols::find_sid(name); + switch (sid) { + case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_ForceInline_signature): + if (_location != _in_method) break; // only allow for methods + return _method_ForceInline; + default: break; + } + return AnnotationCollector::_unknown; +} + +void ClassFileParser::FieldAnnotationCollector::apply_to(FieldInfo* f) { + fatal("no field annotations yet"); +} + +void ClassFileParser::MethodAnnotationCollector::apply_to(methodHandle m) { + if (has_annotation(_method_ForceInline)) + m->set_force_inline(true); +} + +void ClassFileParser::ClassAnnotationCollector::apply_to(instanceKlassHandle k) { + fatal("no class annotations yet"); +} + + #define MAX_ARGS_SIZE 255 #define MAX_CODE_SIZE 65535 #define INITIAL_MAX_LVT_NUMBER 256 // Note: the parse_method below is big and clunky because all parsing of the code and exceptions -// attribute is inlined. This is curbersome to avoid since we inline most of the parts in the +// attribute is inlined. This is cumbersome to avoid since we inline most of the parts in the // methodOop to save footprint, so we only know the size of the resulting methodOop when the // entire method attribute is parsed. // @@ -1674,6 +1866,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf u4 code_length = 0; u1* code_start = 0; u2 exception_table_length = 0; + u2* exception_table_start = NULL; typeArrayHandle exception_handlers(THREAD, Universe::the_empty_int_array()); u2 checked_exceptions_length = 0; u2* checked_exceptions_start = NULL; @@ -1695,6 +1888,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf // stackmap attribute - JDK1.5 typeArrayHandle stackmap_data; u2 generic_signature_index = 0; + MethodAnnotationCollector parsed_annotations; u1* runtime_visible_annotations = NULL; int runtime_visible_annotations_length = 0; u1* runtime_invisible_annotations = NULL; @@ -1760,7 +1954,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf cfs->guarantee_more(2, CHECK_(nullHandle)); // exception_table_length exception_table_length = cfs->get_u2_fast(); if (exception_table_length > 0) { - exception_handlers = + exception_table_start = parse_exception_table(code_length, exception_table_length, cp, CHECK_(nullHandle)); } @@ -1921,6 +2115,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf runtime_visible_annotations_length = method_attribute_length; runtime_visible_annotations = cfs->get_u1_buffer(); assert(runtime_visible_annotations != NULL, "null visible annotations"); + parse_annotations(runtime_visible_annotations, runtime_visible_annotations_length, cp, &parsed_annotations, CHECK_(nullHandle)); cfs->skip_u1(runtime_visible_annotations_length, CHECK_(nullHandle)); } else if (PreserveAllAnnotations && method_attribute_name == vmSymbols::tag_runtime_invisible_annotations()) { runtime_invisible_annotations_length = method_attribute_length; @@ -1964,9 +2159,13 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf } // All sizing information for a methodOop is finally available, now create it - methodOop m_oop = oopFactory::new_method(code_length, access_flags, linenumber_table_length, - total_lvt_length, checked_exceptions_length, - oopDesc::IsSafeConc, CHECK_(nullHandle)); + methodOop m_oop = oopFactory::new_method(code_length, access_flags, + linenumber_table_length, + total_lvt_length, + exception_table_length, + checked_exceptions_length, + oopDesc::IsSafeConc, + CHECK_(nullHandle)); methodHandle m (THREAD, m_oop); ClassLoadingService::add_class_method_size(m_oop->size()*HeapWordSize); @@ -1997,16 +2196,15 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf // Fill in code attribute information m->set_max_stack(max_stack); m->set_max_locals(max_locals); - m->constMethod()->set_stackmap_data(stackmap_data()); /** - * The exception_table field is the flag used to indicate + * The stackmap_data field is the flag used to indicate * that the methodOop and it's associated constMethodOop are partially * initialized and thus are exempt from pre/post GC verification. Once * the field is set, the oops are considered fully initialized so make * sure that the oops can pass verification when this field is set. */ - m->set_exception_table(exception_handlers()); + m->constMethod()->set_stackmap_data(stackmap_data()); // Copy byte codes m->set_code(code_start); @@ -2017,6 +2215,14 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf linenumber_table->buffer(), linenumber_table_length); } + // Copy exception table + if (exception_table_length > 0) { + int size = + exception_table_length * sizeof(ExceptionTableElement) / sizeof(u2); + copy_u2_with_conversion((u2*) m->exception_table_start(), + exception_table_start, size); + } + // Copy checked exceptions if (checked_exceptions_length > 0) { int size = checked_exceptions_length * sizeof(CheckedExceptionElement) / sizeof(u2); @@ -2098,6 +2304,8 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf clear_hashtable(lvt_Hash); } + if (parsed_annotations.has_any_annotations()) + parsed_annotations.apply_to(m); *method_annotations = assemble_annotations(runtime_visible_annotations, runtime_visible_annotations_length, runtime_invisible_annotations, @@ -2276,7 +2484,7 @@ typeArrayHandle ClassFileParser::sort_methods(objArrayHandle methods, } -void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { +void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS) { ClassFileStream* cfs = stream(); cfs->guarantee_more(2, CHECK); // sourcefile_index u2 sourcefile_index = cfs->get_u2_fast(); @@ -2285,13 +2493,12 @@ void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp cp->tag_at(sourcefile_index).is_utf8(), "Invalid SourceFile attribute at constant pool index %u in class file %s", sourcefile_index, CHECK); - k->set_source_file_name(cp->symbol_at(sourcefile_index)); + set_class_sourcefile(cp->symbol_at(sourcefile_index)); } void ClassFileParser::parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, - instanceKlassHandle k, int length, TRAPS) { ClassFileStream* cfs = stream(); u1* sde_buffer = cfs->get_u1_buffer(); @@ -2299,12 +2506,13 @@ void ClassFileParser::parse_classfile_source_debug_extension_attribute(constantP // Don't bother storing it if there is no way to retrieve it if (JvmtiExport::can_get_source_debug_extension()) { - // Optimistically assume that only 1 byte UTF format is used - // (common case) - TempNewSymbol sde_symbol = SymbolTable::new_symbol((const char*)sde_buffer, length, CHECK); - k->set_source_debug_extension(sde_symbol); - // Note that set_source_debug_extension() increments the reference count - // for its copy of the Symbol*, so use a TempNewSymbol here. + assert((length+1) > length, "Overflow checking"); + u1* sde = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, u1, length+1); + for (int i = 0; i < length; i++) { + sde[i] = sde_buffer[i]; + } + sde[length] = '\0'; + set_class_sde_buffer((char*)sde, length); } // Got utf8 string, set stream position forward cfs->skip_u1(length, CHECK); @@ -2320,7 +2528,7 @@ u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_at u2 enclosing_method_class_index, u2 enclosing_method_method_index, constantPoolHandle cp, - instanceKlassHandle k, TRAPS) { + TRAPS) { ClassFileStream* cfs = stream(); u1* current_mark = cfs->current(); u2 length = 0; @@ -2411,7 +2619,7 @@ u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_at assert(index == size, "wrong size"); // Update instanceKlass with inner class info. - k->set_inner_classes(inner_classes()); + set_class_inner_classes(inner_classes); // Restore buffer's current position. cfs->set_current(current_mark); @@ -2419,11 +2627,11 @@ u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_at return length; } -void ClassFileParser::parse_classfile_synthetic_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { - k->set_is_synthetic(); +void ClassFileParser::parse_classfile_synthetic_attribute(constantPoolHandle cp, TRAPS) { + set_class_synthetic_flag(true); } -void ClassFileParser::parse_classfile_signature_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { +void ClassFileParser::parse_classfile_signature_attribute(constantPoolHandle cp, TRAPS) { ClassFileStream* cfs = stream(); u2 signature_index = cfs->get_u2(CHECK); check_property( @@ -2431,10 +2639,10 @@ void ClassFileParser::parse_classfile_signature_attribute(constantPoolHandle cp, cp->tag_at(signature_index).is_utf8(), "Invalid constant pool index %u in Signature attribute in class file %s", signature_index, CHECK); - k->set_generic_signature(cp->symbol_at(signature_index)); + set_class_generic_signature(cp->symbol_at(signature_index)); } -void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, instanceKlassHandle k, +void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, u4 attribute_byte_length, TRAPS) { ClassFileStream* cfs = stream(); u1* current_start = cfs->current(); @@ -2506,10 +2714,12 @@ void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHa } -void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { +void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, + ClassFileParser::ClassAnnotationCollector* parsed_annotations, + TRAPS) { ClassFileStream* cfs = stream(); // Set inner classes attribute to default sentinel - k->set_inner_classes(Universe::the_empty_short_array()); + set_class_inner_classes(typeArrayHandle(THREAD, Universe::the_empty_short_array())); cfs->guarantee_more(2, CHECK); // attributes_count u2 attributes_count = cfs->get_u2_fast(); bool parsed_sourcefile_attribute = false; @@ -2545,10 +2755,10 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance } else { parsed_sourcefile_attribute = true; } - parse_classfile_sourcefile_attribute(cp, k, CHECK); + parse_classfile_sourcefile_attribute(cp, CHECK); } else if (tag == vmSymbols::tag_source_debug_extension()) { // Check for SourceDebugExtension tag - parse_classfile_source_debug_extension_attribute(cp, k, (int)attribute_length, CHECK); + parse_classfile_source_debug_extension_attribute(cp, (int)attribute_length, CHECK); } else if (tag == vmSymbols::tag_inner_classes()) { // Check for InnerClasses tag if (parsed_innerclasses_attribute) { @@ -2567,7 +2777,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance "Invalid Synthetic classfile attribute length %u in class file %s", attribute_length, CHECK); } - parse_classfile_synthetic_attribute(cp, k, CHECK); + parse_classfile_synthetic_attribute(cp, CHECK); } else if (tag == vmSymbols::tag_deprecated()) { // Check for Deprecatd tag - 4276120 if (attribute_length != 0) { @@ -2582,11 +2792,16 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance "Wrong Signature attribute length %u in class file %s", attribute_length, CHECK); } - parse_classfile_signature_attribute(cp, k, CHECK); + parse_classfile_signature_attribute(cp, CHECK); } else if (tag == vmSymbols::tag_runtime_visible_annotations()) { runtime_visible_annotations_length = attribute_length; runtime_visible_annotations = cfs->get_u1_buffer(); assert(runtime_visible_annotations != NULL, "null visible annotations"); + parse_annotations(runtime_visible_annotations, + runtime_visible_annotations_length, + cp, + parsed_annotations, + CHECK); cfs->skip_u1(runtime_visible_annotations_length, CHECK); } else if (PreserveAllAnnotations && tag == vmSymbols::tag_runtime_invisible_annotations()) { runtime_invisible_annotations_length = attribute_length; @@ -2620,7 +2835,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance if (parsed_bootstrap_methods_attribute) classfile_parse_error("Multiple BootstrapMethods attributes in class file %s", CHECK); parsed_bootstrap_methods_attribute = true; - parse_classfile_bootstrap_methods_attribute(cp, k, attribute_length, CHECK); + parse_classfile_bootstrap_methods_attribute(cp, attribute_length, CHECK); } else { // Unknown attribute cfs->skip_u1(attribute_length, CHECK); @@ -2635,7 +2850,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance runtime_invisible_annotations, runtime_invisible_annotations_length, CHECK); - k->set_class_annotations(annotations()); + set_class_annotations(annotations); if (parsed_innerclasses_attribute || parsed_enclosingmethod_attribute) { u2 num_of_classes = parse_classfile_inner_classes_attribute( @@ -2643,7 +2858,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance parsed_innerclasses_attribute, enclosing_method_class_index, enclosing_method_method_index, - cp, k, CHECK); + cp, CHECK); if (parsed_innerclasses_attribute &&_need_verify && _major_version >= JAVA_1_5_VERSION) { guarantee_property( inner_classes_attribute_length == sizeof(num_of_classes) + 4 * sizeof(u2) * num_of_classes, @@ -2657,6 +2872,23 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance } } +void ClassFileParser::apply_parsed_class_attributes(instanceKlassHandle k) { + if (_synthetic_flag) + k->set_is_synthetic(); + if (_sourcefile != NULL) { + _sourcefile->increment_refcount(); + k->set_source_file_name(_sourcefile); + } + if (_generic_signature != NULL) { + _generic_signature->increment_refcount(); + k->set_generic_signature(_generic_signature); + } + if (_sde_buffer != NULL) { + k->set_source_debug_extension(_sde_buffer, _sde_length); + } + k->set_inner_classes(_inner_classes()); + k->set_class_annotations(_annotations()); +} typeArrayHandle ClassFileParser::assemble_annotations(u1* runtime_visible_annotations, int runtime_visible_annotations_length, @@ -2707,8 +2939,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, jt->get_thread_stat()->perf_timers_addr(), PerfClassTraceTime::PARSE_CLASS); - _has_finalizer = _has_empty_finalizer = _has_vanilla_constructor = false; - _max_bootstrap_specifier_index = -1; + init_parsed_class_attributes(); if (JvmtiExport::should_post_class_file_load_hook()) { // Get the cached class file bytes (if any) from the class that @@ -2941,6 +3172,13 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, objArrayHandle methods_parameter_annotations(THREAD, methods_parameter_annotations_oop); objArrayHandle methods_default_annotations(THREAD, methods_default_annotations_oop); + // Additional attributes + ClassAnnotationCollector parsed_annotations; + parse_classfile_attributes(cp, &parsed_annotations, CHECK_(nullHandle)); + + // Make sure this is the end of class file stream + guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle)); + // We check super class after class file is parsed and format is checked if (super_class_index > 0 && super_klass.is_null()) { Symbol* sk = cp->klass_name_at(super_class_index); @@ -3429,11 +3667,10 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, this_klass->set_has_miranda_methods(); // then set a flag } - // Additional attributes - parse_classfile_attributes(cp, this_klass, CHECK_(nullHandle)); - - // Make sure this is the end of class file stream - guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle)); + // Fill in field values obtained by parse_classfile_attributes + if (parsed_annotations.has_any_annotations()) + parsed_annotations.apply_to(this_klass); + apply_parsed_class_attributes(this_klass); // VerifyOops believes that once this has been set, the object is completely loaded. // Compute transitive closure of interfaces this class implements @@ -3448,6 +3685,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, // Do final class setup fill_oop_maps(this_klass, nonstatic_oop_map_count, nonstatic_oop_offsets, nonstatic_oop_counts); + // Fill in has_finalizer, has_vanilla_constructor, and layout_helper set_precomputed_flags(this_klass); // reinitialize modifiers, using the InnerClasses attribute diff --git a/hotspot/src/share/vm/classfile/classFileParser.hpp b/hotspot/src/share/vm/classfile/classFileParser.hpp index de781b2fb1f..f8359f19233 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.hpp +++ b/hotspot/src/share/vm/classfile/classFileParser.hpp @@ -31,8 +31,8 @@ #include "oops/typeArrayOop.hpp" #include "runtime/handles.inline.hpp" #include "utilities/accessFlags.hpp" +#include "classfile/symbolTable.hpp" -class TempNewSymbol; class FieldAllocationCount; @@ -50,11 +50,80 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { KlassHandle _host_klass; GrowableArray* _cp_patches; // overrides for CP entries + // precomputed flags bool _has_finalizer; bool _has_empty_finalizer; bool _has_vanilla_constructor; + int _max_bootstrap_specifier_index; // detects BSS values - int _max_bootstrap_specifier_index; + // class attributes parsed before the instance klass is created: + bool _synthetic_flag; + Symbol* _sourcefile; + Symbol* _generic_signature; + char* _sde_buffer; + int _sde_length; + typeArrayHandle _inner_classes; + typeArrayHandle _annotations; + + void set_class_synthetic_flag(bool x) { _synthetic_flag = x; } + void set_class_sourcefile(Symbol* x) { _sourcefile = x; } + void set_class_generic_signature(Symbol* x) { _generic_signature = x; } + void set_class_sde_buffer(char* x, int len) { _sde_buffer = x; _sde_length = len; } + void set_class_inner_classes(typeArrayHandle x) { _inner_classes = x; } + void set_class_annotations(typeArrayHandle x) { _annotations = x; } + void init_parsed_class_attributes() { + _synthetic_flag = false; + _sourcefile = NULL; + _generic_signature = NULL; + _sde_buffer = NULL; + _sde_length = 0; + // initialize the other flags too: + _has_finalizer = _has_empty_finalizer = _has_vanilla_constructor = false; + _max_bootstrap_specifier_index = -1; + } + void apply_parsed_class_attributes(instanceKlassHandle k); // update k + + class AnnotationCollector { + public: + enum Location { _in_field, _in_method, _in_class }; + enum ID { + _unknown = 0, + _method_ForceInline, + _annotation_LIMIT + }; + const Location _location; + int _annotations_present; + AnnotationCollector(Location location) + : _location(location), _annotations_present(0) + { + assert((int)_annotation_LIMIT <= (int)sizeof(_annotations_present) * BitsPerByte, ""); + } + // If this annotation name has an ID, report it (or _none). + ID annotation_index(Symbol* name); + // Set the annotation name: + void set_annotation(ID id) { + assert((int)id >= 0 && (int)id < (int)_annotation_LIMIT, "oob"); + _annotations_present |= nth_bit((int)id); + } + // Report if the annotation is present. + bool has_any_annotations() { return _annotations_present != 0; } + bool has_annotation(ID id) { return (nth_bit((int)id) & _annotations_present) != 0; } + }; + class FieldAnnotationCollector: public AnnotationCollector { + public: + FieldAnnotationCollector() : AnnotationCollector(_in_field) { } + void apply_to(FieldInfo* f); + }; + class MethodAnnotationCollector: public AnnotationCollector { + public: + MethodAnnotationCollector() : AnnotationCollector(_in_method) { } + void apply_to(methodHandle m); + }; + class ClassAnnotationCollector: public AnnotationCollector { + public: + ClassAnnotationCollector() : AnnotationCollector(_in_class) { } + void apply_to(instanceKlassHandle k); + }; enum { fixed_buffer_size = 128 }; u_char linenumbertable_buffer[fixed_buffer_size]; @@ -87,7 +156,9 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { u2* constantvalue_index_addr, bool* is_synthetic_addr, u2* generic_signature_index_addr, - typeArrayHandle* field_annotations, TRAPS); + typeArrayHandle* field_annotations, + FieldAnnotationCollector* parsed_annotations, + TRAPS); typeArrayHandle parse_fields(Symbol* class_name, constantPoolHandle cp, bool is_interface, FieldAllocationCount *fac, @@ -113,8 +184,8 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { objArrayHandle methods_parameter_annotations, objArrayHandle methods_default_annotations, TRAPS); - typeArrayHandle parse_exception_table(u4 code_length, u4 exception_table_length, - constantPoolHandle cp, TRAPS); + u2* parse_exception_table(u4 code_length, u4 exception_table_length, + constantPoolHandle cp, TRAPS); void parse_linenumber_table( u4 code_attribute_length, u4 code_length, CompressedLineNumberWriteStream** write_stream, TRAPS); @@ -128,25 +199,32 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { typeArrayOop parse_stackmap_table(u4 code_attribute_length, TRAPS); // Classfile attribute parsing - void parse_classfile_sourcefile_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, - instanceKlassHandle k, int length, TRAPS); + void parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS); + void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, int length, TRAPS); u2 parse_classfile_inner_classes_attribute(u1* inner_classes_attribute_start, bool parsed_enclosingmethod_attribute, u2 enclosing_method_class_index, u2 enclosing_method_method_index, constantPoolHandle cp, - instanceKlassHandle k, TRAPS); - void parse_classfile_attributes(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_synthetic_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_signature_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, instanceKlassHandle k, u4 attribute_length, TRAPS); + TRAPS); + void parse_classfile_attributes(constantPoolHandle cp, + ClassAnnotationCollector* parsed_annotations, + TRAPS); + void parse_classfile_synthetic_attribute(constantPoolHandle cp, TRAPS); + void parse_classfile_signature_attribute(constantPoolHandle cp, TRAPS); + void parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, u4 attribute_length, TRAPS); // Annotations handling typeArrayHandle assemble_annotations(u1* runtime_visible_annotations, int runtime_visible_annotations_length, u1* runtime_invisible_annotations, int runtime_invisible_annotations_length, TRAPS); + int skip_annotation(u1* buffer, int limit, int index); + int skip_annotation_value(u1* buffer, int limit, int index); + void parse_annotations(u1* buffer, int limit, constantPoolHandle cp, + /* Results (currently, only one result is supported): */ + AnnotationCollector* result, + TRAPS); // Final setup unsigned int compute_oop_map_count(instanceKlassHandle super, diff --git a/hotspot/src/share/vm/classfile/classLoader.cpp b/hotspot/src/share/vm/classfile/classLoader.cpp index df42dc75d42..a2e61a4ad3b 100644 --- a/hotspot/src/share/vm/classfile/classLoader.cpp +++ b/hotspot/src/share/vm/classfile/classLoader.cpp @@ -153,7 +153,7 @@ MetaIndex::MetaIndex(char** meta_package_names, int num_meta_package_names) { _meta_package_names = NULL; _num_meta_package_names = 0; } else { - _meta_package_names = NEW_C_HEAP_ARRAY(char*, num_meta_package_names); + _meta_package_names = NEW_C_HEAP_ARRAY(char*, num_meta_package_names, mtClass); _num_meta_package_names = num_meta_package_names; memcpy(_meta_package_names, meta_package_names, num_meta_package_names * sizeof(char*)); } @@ -161,7 +161,7 @@ MetaIndex::MetaIndex(char** meta_package_names, int num_meta_package_names) { MetaIndex::~MetaIndex() { - FREE_C_HEAP_ARRAY(char*, _meta_package_names); + FREE_C_HEAP_ARRAY(char*, _meta_package_names, mtClass); } @@ -192,7 +192,7 @@ bool ClassPathEntry::is_lazy() { } ClassPathDirEntry::ClassPathDirEntry(char* dir) : ClassPathEntry() { - _dir = NEW_C_HEAP_ARRAY(char, strlen(dir)+1); + _dir = NEW_C_HEAP_ARRAY(char, strlen(dir)+1, mtClass); strcpy(_dir, dir); } @@ -229,7 +229,7 @@ ClassFileStream* ClassPathDirEntry::open_stream(const char* name) { ClassPathZipEntry::ClassPathZipEntry(jzfile* zip, const char* zip_name) : ClassPathEntry() { _zip = zip; - _zip_name = NEW_C_HEAP_ARRAY(char, strlen(zip_name)+1); + _zip_name = NEW_C_HEAP_ARRAY(char, strlen(zip_name)+1, mtClass); strcpy(_zip_name, zip_name); } @@ -237,7 +237,7 @@ ClassPathZipEntry::~ClassPathZipEntry() { if (ZipClose != NULL) { (*ZipClose)(_zip); } - FREE_C_HEAP_ARRAY(char, _zip_name); + FREE_C_HEAP_ARRAY(char, _zip_name, mtClass); } ClassFileStream* ClassPathZipEntry::open_stream(const char* name) { @@ -454,11 +454,11 @@ void ClassLoader::setup_bootstrap_search_path() { while (sys_class_path[end] && sys_class_path[end] != os::path_separator()[0]) { end++; } - char* path = NEW_C_HEAP_ARRAY(char, end-start+1); + char* path = NEW_C_HEAP_ARRAY(char, end-start+1, mtClass); strncpy(path, &sys_class_path[start], end-start); path[end-start] = '\0'; update_class_path_entry_list(path, false); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtClass); while (sys_class_path[end] == os::path_separator()[0]) { end++; } @@ -652,13 +652,13 @@ void ClassLoader::load_zip_library() { // in the classpath must be the same files, in the same order, even // though the exact name is not the same. -class PackageInfo: public BasicHashtableEntry { +class PackageInfo: public BasicHashtableEntry { public: const char* _pkgname; // Package name int _classpath_index; // Index of directory or JAR file loaded from PackageInfo* next() { - return (PackageInfo*)BasicHashtableEntry::next(); + return (PackageInfo*)BasicHashtableEntry::next(); } const char* pkgname() { return _pkgname; } @@ -674,7 +674,7 @@ public: }; -class PackageHashtable : public BasicHashtable { +class PackageHashtable : public BasicHashtable { private: inline unsigned int compute_hash(const char *s, int n) { unsigned int val = 0; @@ -685,7 +685,7 @@ private: } PackageInfo* bucket(int index) { - return (PackageInfo*)BasicHashtable::bucket(index); + return (PackageInfo*)BasicHashtable::bucket(index); } PackageInfo* get_entry(int index, unsigned int hash, @@ -702,10 +702,10 @@ private: public: PackageHashtable(int table_size) - : BasicHashtable(table_size, sizeof(PackageInfo)) {} + : BasicHashtable(table_size, sizeof(PackageInfo)) {} - PackageHashtable(int table_size, HashtableBucket* t, int number_of_entries) - : BasicHashtable(table_size, sizeof(PackageInfo), t, number_of_entries) {} + PackageHashtable(int table_size, HashtableBucket* t, int number_of_entries) + : BasicHashtable(table_size, sizeof(PackageInfo), t, number_of_entries) {} PackageInfo* get_entry(const char* pkgname, int n) { unsigned int hash = compute_hash(pkgname, n); @@ -715,14 +715,14 @@ public: PackageInfo* new_entry(char* pkgname, int n) { unsigned int hash = compute_hash(pkgname, n); PackageInfo* pp; - pp = (PackageInfo*)BasicHashtable::new_entry(hash); + pp = (PackageInfo*)BasicHashtable::new_entry(hash); pp->set_pkgname(pkgname); return pp; } void add_entry(PackageInfo* pp) { int index = hash_to_index(pp->hash()); - BasicHashtable::add_entry(index, pp); + BasicHashtable::add_entry(index, pp); } void copy_pkgnames(const char** packages) { @@ -742,7 +742,7 @@ public: void PackageHashtable::copy_table(char** top, char* end, PackageHashtable* table) { // Copy (relocate) the table to the shared space. - BasicHashtable::copy_table(top, end); + BasicHashtable::copy_table(top, end); // Calculate the space needed for the package name strings. int i; @@ -815,7 +815,7 @@ bool ClassLoader::add_package(const char *pkgname, int classpath_index, TRAPS) { // Package prefix found int n = cp - pkgname + 1; - char* new_pkgname = NEW_C_HEAP_ARRAY(char, n + 1); + char* new_pkgname = NEW_C_HEAP_ARRAY(char, n + 1, mtClass); if (new_pkgname == NULL) { return false; } @@ -929,10 +929,10 @@ instanceKlassHandle ClassLoader::load_classfile(Symbol* h_name, TRAPS) { } -void ClassLoader::create_package_info_table(HashtableBucket *t, int length, +void ClassLoader::create_package_info_table(HashtableBucket *t, int length, int number_of_entries) { assert(_package_hash_table == NULL, "One package info table allowed."); - assert(length == package_hash_table_size * sizeof(HashtableBucket), + assert(length == package_hash_table_size * sizeof(HashtableBucket), "bad shared package info size."); _package_hash_table = new PackageHashtable(package_hash_table_size, t, number_of_entries); diff --git a/hotspot/src/share/vm/classfile/classLoader.hpp b/hotspot/src/share/vm/classfile/classLoader.hpp index 6f816837ae7..ee58550b61e 100644 --- a/hotspot/src/share/vm/classfile/classLoader.hpp +++ b/hotspot/src/share/vm/classfile/classLoader.hpp @@ -33,7 +33,7 @@ // Meta-index (optional, to be able to skip opening boot classpath jar files) -class MetaIndex: public CHeapObj { +class MetaIndex: public CHeapObj { private: char** _meta_package_names; int _num_meta_package_names; @@ -46,7 +46,7 @@ class MetaIndex: public CHeapObj { // Class path entry (directory or zip file) -class ClassPathEntry: public CHeapObj { +class ClassPathEntry: public CHeapObj { private: ClassPathEntry* _next; public: @@ -141,7 +141,7 @@ class LazyClassPathEntry: public ClassPathEntry { class PackageHashtable; class PackageInfo; -class HashtableBucket; +template class HashtableBucket; class ClassLoader: AllStatic { public: @@ -299,7 +299,7 @@ class ClassLoader: AllStatic { // Initialization static void initialize(); static void create_package_info_table(); - static void create_package_info_table(HashtableBucket *t, int length, + static void create_package_info_table(HashtableBucket *t, int length, int number_of_entries); static int compute_Object_vtable(); diff --git a/hotspot/src/share/vm/classfile/dictionary.cpp b/hotspot/src/share/vm/classfile/dictionary.cpp index 4458f46d7a9..78e76cc1f67 100644 --- a/hotspot/src/share/vm/classfile/dictionary.cpp +++ b/hotspot/src/share/vm/classfile/dictionary.cpp @@ -36,16 +36,16 @@ int Dictionary::_current_class_index = 0; Dictionary::Dictionary(int table_size) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { _current_class_index = 0; _current_class_entry = NULL; }; -Dictionary::Dictionary(int table_size, HashtableBucket* t, +Dictionary::Dictionary(int table_size, HashtableBucket* t, int number_of_entries) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { _current_class_index = 0; _current_class_entry = NULL; }; @@ -54,7 +54,7 @@ Dictionary::Dictionary(int table_size, HashtableBucket* t, DictionaryEntry* Dictionary::new_entry(unsigned int hash, klassOop klass, oop loader) { DictionaryEntry* entry; - entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); + entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); entry->set_loader(loader); entry->set_pd_set(NULL); return entry; @@ -62,7 +62,7 @@ DictionaryEntry* Dictionary::new_entry(unsigned int hash, klassOop klass, DictionaryEntry* Dictionary::new_entry() { - DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(0L, NULL); + DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(0L, NULL); entry->set_loader(NULL); entry->set_pd_set(NULL); return entry; @@ -76,7 +76,7 @@ void Dictionary::free_entry(DictionaryEntry* entry) { entry->set_pd_set(to_delete->next()); delete to_delete; } - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -554,12 +554,12 @@ void Dictionary::reorder_dictionary() { } SymbolPropertyTable::SymbolPropertyTable(int table_size) - : Hashtable(table_size, sizeof(SymbolPropertyEntry)) + : Hashtable(table_size, sizeof(SymbolPropertyEntry)) { } -SymbolPropertyTable::SymbolPropertyTable(int table_size, HashtableBucket* t, +SymbolPropertyTable::SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries) - : Hashtable(table_size, sizeof(SymbolPropertyEntry), t, number_of_entries) + : Hashtable(table_size, sizeof(SymbolPropertyEntry), t, number_of_entries) { } @@ -584,7 +584,7 @@ SymbolPropertyEntry* SymbolPropertyTable::add_entry(int index, unsigned int hash assert(find_entry(index, hash, sym, sym_mode) == NULL, "no double entry"); SymbolPropertyEntry* p = new_entry(hash, sym, sym_mode); - Hashtable::add_entry(index, p); + Hashtable::add_entry(index, p); return p; } diff --git a/hotspot/src/share/vm/classfile/dictionary.hpp b/hotspot/src/share/vm/classfile/dictionary.hpp index 98e01695001..bd33760b721 100644 --- a/hotspot/src/share/vm/classfile/dictionary.hpp +++ b/hotspot/src/share/vm/classfile/dictionary.hpp @@ -36,7 +36,7 @@ class DictionaryEntry; // The data structure for the system dictionary (and the shared system // dictionary). -class Dictionary : public TwoOopHashtable { +class Dictionary : public TwoOopHashtable { friend class VMStructs; private: // current iteration index. @@ -48,22 +48,22 @@ private: Symbol* name, Handle loader); DictionaryEntry* bucket(int i) { - return (DictionaryEntry*)Hashtable::bucket(i); + return (DictionaryEntry*)Hashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. DictionaryEntry** bucket_addr(int i) { - return (DictionaryEntry**)Hashtable::bucket_addr(i); + return (DictionaryEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, DictionaryEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, (HashtableEntry*)new_entry); } public: Dictionary(int table_size); - Dictionary(int table_size, HashtableBucket* t, int number_of_entries); + Dictionary(int table_size, HashtableBucket* t, int number_of_entries); DictionaryEntry* new_entry(unsigned int hash, klassOop klass, oop loader); @@ -129,7 +129,7 @@ public: // The following classes can be in dictionary.cpp, but we need these // to be in header file so that SA's vmStructs can access. -class ProtectionDomainEntry :public CHeapObj { +class ProtectionDomainEntry :public CHeapObj { friend class VMStructs; public: ProtectionDomainEntry* _next; @@ -147,7 +147,7 @@ class ProtectionDomainEntry :public CHeapObj { // An entry in the system dictionary, this describes a class as // { klassOop, loader, protection_domain }. -class DictionaryEntry : public HashtableEntry { +class DictionaryEntry : public HashtableEntry { friend class VMStructs; private: // Contains the set of approved protection domains that can access @@ -166,11 +166,11 @@ class DictionaryEntry : public HashtableEntry { klassOop* klass_addr() { return (klassOop*)literal_addr(); } DictionaryEntry* next() const { - return (DictionaryEntry*)HashtableEntry::next(); + return (DictionaryEntry*)HashtableEntry::next(); } DictionaryEntry** next_addr() { - return (DictionaryEntry**)HashtableEntry::next_addr(); + return (DictionaryEntry**)HashtableEntry::next_addr(); } oop loader() const { return _loader; } @@ -228,7 +228,7 @@ class DictionaryEntry : public HashtableEntry { // Entry in a SymbolPropertyTable, mapping a single Symbol* // to a managed and an unmanaged pointer. -class SymbolPropertyEntry : public HashtableEntry { +class SymbolPropertyEntry : public HashtableEntry { friend class VMStructs; private: intptr_t _symbol_mode; // secondary key @@ -248,11 +248,11 @@ class SymbolPropertyEntry : public HashtableEntry { void set_property_data(address p) { _property_data = p; } SymbolPropertyEntry* next() const { - return (SymbolPropertyEntry*)HashtableEntry::next(); + return (SymbolPropertyEntry*)HashtableEntry::next(); } SymbolPropertyEntry** next_addr() { - return (SymbolPropertyEntry**)HashtableEntry::next_addr(); + return (SymbolPropertyEntry**)HashtableEntry::next_addr(); } oop* property_oop_addr() { return &_property_oop; } @@ -278,16 +278,16 @@ class SymbolPropertyEntry : public HashtableEntry { // A system-internal mapping of symbols to pointers, both managed // and unmanaged. Used to record the auto-generation of each method // MethodHandle.invoke(S)T, for all signatures (S)T. -class SymbolPropertyTable : public Hashtable { +class SymbolPropertyTable : public Hashtable { friend class VMStructs; private: SymbolPropertyEntry* bucket(int i) { - return (SymbolPropertyEntry*) Hashtable::bucket(i); + return (SymbolPropertyEntry*) Hashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. SymbolPropertyEntry** bucket_addr(int i) { - return (SymbolPropertyEntry**) Hashtable::bucket_addr(i); + return (SymbolPropertyEntry**) Hashtable::bucket_addr(i); } void add_entry(int index, SymbolPropertyEntry* new_entry) { @@ -298,7 +298,7 @@ private: } SymbolPropertyEntry* new_entry(unsigned int hash, Symbol* symbol, intptr_t symbol_mode) { - SymbolPropertyEntry* entry = (SymbolPropertyEntry*) Hashtable::new_entry(hash, symbol); + SymbolPropertyEntry* entry = (SymbolPropertyEntry*) Hashtable::new_entry(hash, symbol); // Hashtable with Symbol* literal must increment and decrement refcount. symbol->increment_refcount(); entry->set_symbol_mode(symbol_mode); @@ -309,17 +309,17 @@ private: public: SymbolPropertyTable(int table_size); - SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries); + SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries); void free_entry(SymbolPropertyEntry* entry) { // decrement Symbol refcount here because hashtable doesn't. entry->literal()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } unsigned int compute_hash(Symbol* sym, intptr_t symbol_mode) { // Use the regular identity_hash. - return Hashtable::compute_hash(sym) ^ symbol_mode; + return Hashtable::compute_hash(sym) ^ symbol_mode; } int index_for(Symbol* name, intptr_t symbol_mode) { diff --git a/hotspot/src/share/vm/classfile/javaAssertions.cpp b/hotspot/src/share/vm/classfile/javaAssertions.cpp index 7884881dedc..3e6a8ce6041 100644 --- a/hotspot/src/share/vm/classfile/javaAssertions.cpp +++ b/hotspot/src/share/vm/classfile/javaAssertions.cpp @@ -58,7 +58,7 @@ void JavaAssertions::addOption(const char* name, bool enable) { // it is never freed, so will be leaked (along with other option strings - // e.g., bootclasspath) if a process creates/destroys multiple VMs. int len = (int)strlen(name); - char *name_copy = NEW_C_HEAP_ARRAY(char, len + 1); + char *name_copy = NEW_C_HEAP_ARRAY(char, len + 1, mtClass); strcpy(name_copy, name); // Figure out which list the new item should go on. Names that end in "..." diff --git a/hotspot/src/share/vm/classfile/javaAssertions.hpp b/hotspot/src/share/vm/classfile/javaAssertions.hpp index b0fb21a2d07..d06d9010f00 100644 --- a/hotspot/src/share/vm/classfile/javaAssertions.hpp +++ b/hotspot/src/share/vm/classfile/javaAssertions.hpp @@ -68,7 +68,7 @@ private: static OptionList* _packages; // Options for package trees. }; -class JavaAssertions::OptionList: public CHeapObj { +class JavaAssertions::OptionList: public CHeapObj { public: inline OptionList(const char* name, bool enable, OptionList* next); diff --git a/hotspot/src/share/vm/classfile/javaClasses.cpp b/hotspot/src/share/vm/classfile/javaClasses.cpp index b5e887f74a8..c6971302107 100644 --- a/hotspot/src/share/vm/classfile/javaClasses.cpp +++ b/hotspot/src/share/vm/classfile/javaClasses.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/vmSymbols.hpp" @@ -143,7 +144,27 @@ compute_optional_offset(int& dest_offset, } +int java_lang_String::value_offset = 0; +int java_lang_String::offset_offset = 0; +int java_lang_String::count_offset = 0; +int java_lang_String::hash_offset = 0; + +bool java_lang_String::initialized = false; + +void java_lang_String::compute_offsets() { + assert(!initialized, "offsets should be initialized only once"); + + klassOop k = SystemDictionary::String_klass(); + compute_offset(value_offset, k, vmSymbols::value_name(), vmSymbols::char_array_signature()); + compute_optional_offset(offset_offset, k, vmSymbols::offset_name(), vmSymbols::int_signature()); + compute_optional_offset(count_offset, k, vmSymbols::count_name(), vmSymbols::int_signature()); + compute_optional_offset(hash_offset, k, vmSymbols::hash_name(), vmSymbols::int_signature()); + + initialized = true; +} + Handle java_lang_String::basic_create(int length, bool tenured, TRAPS) { + assert(initialized, "Must be initialized"); // Create the String object first, so there's a chance that the String // and the char array it points to end up in the same cache line. oop obj; @@ -327,13 +348,26 @@ jchar* java_lang_String::as_unicode_string(oop java_string, int& length) { return result; } -unsigned int java_lang_String::hash_string(oop java_string) { +unsigned int java_lang_String::to_hash(oop java_string) { + int length = java_lang_String::length(java_string); + // Zero length string will hash to zero with String.toHash() function. + if (length == 0) return 0; + typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); - int length = java_lang_String::length(java_string); + return java_lang_String::to_hash(value->char_at_addr(offset), length); +} - if (length == 0) return 0; - return hash_string(value->char_at_addr(offset), length); +unsigned int java_lang_String::hash_string(oop java_string) { + int length = java_lang_String::length(java_string); + // Zero length string doesn't hash necessarily hash to zero. + if (length == 0) { + return StringTable::hash_string(NULL, 0); + } + + typeArrayOop value = java_lang_String::value(java_string); + int offset = java_lang_String::offset(java_string); + return StringTable::hash_string(value->char_at_addr(offset), length); } Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) { @@ -2704,17 +2738,6 @@ void java_lang_invoke_CallSite::compute_offsets() { if (k != NULL) { compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature()); } - - // Disallow compilation of CallSite.setTargetNormal and CallSite.setTargetVolatile - // (For C2: keep this until we have throttling logic for uncommon traps.) - if (k != NULL) { - instanceKlass* ik = instanceKlass::cast(k); - methodOop m_normal = ik->lookup_method(vmSymbols::setTargetNormal_name(), vmSymbols::setTarget_signature()); - methodOop m_volatile = ik->lookup_method(vmSymbols::setTargetVolatile_name(), vmSymbols::setTarget_signature()); - guarantee(m_normal != NULL && m_volatile != NULL, "must exist"); - m_normal->set_not_compilable_quietly(); - m_volatile->set_not_compilable_quietly(); - } } @@ -2837,10 +2860,6 @@ int java_lang_System::err_offset_in_bytes() { -int java_lang_String::value_offset; -int java_lang_String::offset_offset; -int java_lang_String::count_offset; -int java_lang_String::hash_offset; int java_lang_Class::_klass_offset; int java_lang_Class::_array_klass_offset; int java_lang_Class::_resolved_constructor_offset; @@ -2903,7 +2922,6 @@ int java_lang_AssertionStatusDirectives::packages_offset; int java_lang_AssertionStatusDirectives::packageEnabled_offset; int java_lang_AssertionStatusDirectives::deflt_offset; int java_nio_Buffer::_limit_offset; -int sun_misc_AtomicLongCSImpl::_value_offset; int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0; int sun_reflect_ConstantPool::_cp_oop_offset; int sun_reflect_UnsafeStaticFieldAccessorImpl::_base_offset; @@ -2963,21 +2981,6 @@ void java_nio_Buffer::compute_offsets() { compute_offset(_limit_offset, k, vmSymbols::limit_name(), vmSymbols::int_signature()); } -// Support for intrinsification of sun.misc.AtomicLongCSImpl.attemptUpdate -int sun_misc_AtomicLongCSImpl::value_offset() { - assert(SystemDictionary::AtomicLongCSImpl_klass() != NULL, "can't call this"); - return _value_offset; -} - - -void sun_misc_AtomicLongCSImpl::compute_offsets() { - klassOop k = SystemDictionary::AtomicLongCSImpl_klass(); - // If this class is not present, its value field offset won't be referenced. - if (k != NULL) { - compute_offset(_value_offset, k, vmSymbols::value_name(), vmSymbols::long_signature()); - } -} - void java_util_concurrent_locks_AbstractOwnableSynchronizer::initialize(TRAPS) { if (_owner_offset != 0) return; @@ -3000,12 +3003,6 @@ void JavaClasses::compute_hard_coded_offsets() { const int x = heapOopSize; const int header = instanceOopDesc::base_offset_in_bytes(); - // Do the String Class - java_lang_String::value_offset = java_lang_String::hc_value_offset * x + header; - java_lang_String::offset_offset = java_lang_String::hc_offset_offset * x + header; - java_lang_String::count_offset = java_lang_String::offset_offset + sizeof (jint); - java_lang_String::hash_offset = java_lang_String::count_offset + sizeof (jint); - // Throwable Class java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header; java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header; @@ -3088,7 +3085,6 @@ void JavaClasses::compute_offsets() { sun_reflect_ConstantPool::compute_offsets(); sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets(); } - sun_misc_AtomicLongCSImpl::compute_offsets(); // generated interpreter code wants to know about the offsets we just computed: AbstractAssembler::update_delayed_values(); @@ -3200,9 +3196,13 @@ void JavaClasses::check_offsets() { // java.lang.String CHECK_OFFSET("java/lang/String", java_lang_String, value, "[C"); - CHECK_OFFSET("java/lang/String", java_lang_String, offset, "I"); - CHECK_OFFSET("java/lang/String", java_lang_String, count, "I"); - CHECK_OFFSET("java/lang/String", java_lang_String, hash, "I"); + if (java_lang_String::has_offset_field()) { + CHECK_OFFSET("java/lang/String", java_lang_String, offset, "I"); + CHECK_OFFSET("java/lang/String", java_lang_String, count, "I"); + } + if (java_lang_String::has_hash_field()) { + CHECK_OFFSET("java/lang/String", java_lang_String, hash, "I"); + } // java.lang.Class diff --git a/hotspot/src/share/vm/classfile/javaClasses.hpp b/hotspot/src/share/vm/classfile/javaClasses.hpp index 2a32801fc73..1538a78e4ab 100644 --- a/hotspot/src/share/vm/classfile/javaClasses.hpp +++ b/hotspot/src/share/vm/classfile/javaClasses.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,26 +52,36 @@ class java_lang_String : AllStatic { private: - enum { - hc_value_offset = 0, - hc_offset_offset = 1 - //hc_count_offset = 2 -- not a word-scaled offset - //hc_hash_offset = 3 -- not a word-scaled offset - }; - static int value_offset; static int offset_offset; static int count_offset; static int hash_offset; + static bool initialized; + static Handle basic_create(int length, bool tenured, TRAPS); static Handle basic_create_from_unicode(jchar* unicode, int length, bool tenured, TRAPS); - static void set_value( oop string, typeArrayOop buffer) { string->obj_field_put(value_offset, (oop)buffer); } - static void set_offset(oop string, int offset) { string->int_field_put(offset_offset, offset); } - static void set_count( oop string, int count) { string->int_field_put(count_offset, count); } + static void set_value( oop string, typeArrayOop buffer) { + assert(initialized, "Must be initialized"); + string->obj_field_put(value_offset, (oop)buffer); + } + static void set_offset(oop string, int offset) { + assert(initialized, "Must be initialized"); + if (offset_offset > 0) { + string->int_field_put(offset_offset, offset); + } + } + static void set_count( oop string, int count) { + assert(initialized, "Must be initialized"); + if (count_offset > 0) { + string->int_field_put(count_offset, count); + } + } public: + static void compute_offsets(); + // Instance creation static Handle create_from_unicode(jchar* unicode, int len, TRAPS); static Handle create_tenured_from_unicode(jchar* unicode, int len, TRAPS); @@ -82,23 +92,61 @@ class java_lang_String : AllStatic { static Handle create_from_platform_dependent_str(const char* str, TRAPS); static Handle char_converter(Handle java_string, jchar from_char, jchar to_char, TRAPS); - static int value_offset_in_bytes() { return value_offset; } - static int count_offset_in_bytes() { return count_offset; } - static int offset_offset_in_bytes() { return offset_offset; } - static int hash_offset_in_bytes() { return hash_offset; } + static bool has_offset_field() { + assert(initialized, "Must be initialized"); + return (offset_offset > 0); + } + + static bool has_count_field() { + assert(initialized, "Must be initialized"); + return (count_offset > 0); + } + + static bool has_hash_field() { + assert(initialized, "Must be initialized"); + return (hash_offset > 0); + } + + static int value_offset_in_bytes() { + assert(initialized && (value_offset > 0), "Must be initialized"); + return value_offset; + } + static int count_offset_in_bytes() { + assert(initialized && (count_offset > 0), "Must be initialized"); + return count_offset; + } + static int offset_offset_in_bytes() { + assert(initialized && (offset_offset > 0), "Must be initialized"); + return offset_offset; + } + static int hash_offset_in_bytes() { + assert(initialized && (hash_offset > 0), "Must be initialized"); + return hash_offset; + } // Accessors static typeArrayOop value(oop java_string) { + assert(initialized && (value_offset > 0), "Must be initialized"); assert(is_instance(java_string), "must be java_string"); return (typeArrayOop) java_string->obj_field(value_offset); } static int offset(oop java_string) { + assert(initialized, "Must be initialized"); assert(is_instance(java_string), "must be java_string"); - return java_string->int_field(offset_offset); + if (offset_offset > 0) { + return java_string->int_field(offset_offset); + } else { + return 0; + } } static int length(oop java_string) { + assert(initialized, "Must be initialized"); assert(is_instance(java_string), "must be java_string"); - return java_string->int_field(count_offset); + if (count_offset > 0) { + return java_string->int_field(count_offset); + } else { + return ((typeArrayOop)java_string->obj_field(value_offset))->length(); + } } static int utf8_length(oop java_string); @@ -110,20 +158,16 @@ class java_lang_String : AllStatic { static jchar* as_unicode_string(oop java_string, int& length); // Compute the hash value for a java.lang.String object which would - // contain the characters passed in. This hash value is used for at - // least two purposes. + // contain the characters passed in. // - // (a) As the hash value used by the StringTable for bucket selection - // and comparison (stored in the HashtableEntry structures). This - // is used in the String.intern() method. + // As the hash value used by the String object itself, in + // String.hashCode(). This value is normally calculated in Java code + // in the String.hashCode method(), but is precomputed for String + // objects in the shared archive file. + // hash P(31) from Kernighan & Ritchie // - // (b) As the hash value used by the String object itself, in - // String.hashCode(). This value is normally calculate in Java code - // in the String.hashCode method(), but is precomputed for String - // objects in the shared archive file. - // - // For this reason, THIS ALGORITHM MUST MATCH String.hashCode(). - static unsigned int hash_string(jchar* s, int len) { + // For this reason, THIS ALGORITHM MUST MATCH String.toHash(). + template static unsigned int to_hash(T* s, int len) { unsigned int h = 0; while (len-- > 0) { h = 31*h + (unsigned int) *s; @@ -131,6 +175,10 @@ class java_lang_String : AllStatic { } return h; } + static unsigned int to_hash(oop java_string); + + // This is the string hash code used by the StringTable, which may be + // the same as String.toHash or an alternate hash code. static unsigned int hash_string(oop java_string); static bool equals(oop java_string, jchar* chars, int len); @@ -1335,15 +1383,6 @@ class java_nio_Buffer: AllStatic { static void compute_offsets(); }; -class sun_misc_AtomicLongCSImpl: AllStatic { - private: - static int _value_offset; - - public: - static int value_offset(); - static void compute_offsets(); -}; - class java_util_concurrent_locks_AbstractOwnableSynchronizer : AllStatic { private: static int _owner_offset; diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.cpp b/hotspot/src/share/vm/classfile/loaderConstraints.cpp index 5e25e4cbd02..8650cd98db6 100644 --- a/hotspot/src/share/vm/classfile/loaderConstraints.cpp +++ b/hotspot/src/share/vm/classfile/loaderConstraints.cpp @@ -31,7 +31,7 @@ #include "utilities/hashtable.inline.hpp" LoaderConstraintTable::LoaderConstraintTable(int nof_buckets) - : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; + : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; LoaderConstraintEntry* LoaderConstraintTable::new_entry( @@ -39,7 +39,7 @@ LoaderConstraintEntry* LoaderConstraintTable::new_entry( klassOop klass, int num_loaders, int max_loaders) { LoaderConstraintEntry* entry; - entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); + entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); entry->set_name(name); entry->set_num_loaders(num_loaders); entry->set_max_loaders(max_loaders); @@ -49,7 +49,7 @@ LoaderConstraintEntry* LoaderConstraintTable::new_entry( void LoaderConstraintTable::free_entry(LoaderConstraintEntry *entry) { // decrement name refcount before freeing entry->name()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -164,7 +164,7 @@ void LoaderConstraintTable::purge_loader_constraints(BoolObjectClosure* is_alive // Purge entry *p = probe->next(); - FREE_C_HEAP_ARRAY(oop, probe->loaders()); + FREE_C_HEAP_ARRAY(oop, probe->loaders(), mtClass); free_entry(probe); } else { #ifdef ASSERT @@ -224,7 +224,7 @@ bool LoaderConstraintTable::add_entry(Symbol* class_name, int index = hash_to_index(hash); LoaderConstraintEntry* p; p = new_entry(hash, class_name, klass, 2, 2); - p->set_loaders(NEW_C_HEAP_ARRAY(oop, 2)); + p->set_loaders(NEW_C_HEAP_ARRAY(oop, 2, mtClass)); p->set_loader(0, class_loader1()); p->set_loader(1, class_loader2()); p->set_klass(klass); @@ -340,10 +340,10 @@ void LoaderConstraintTable::ensure_loader_constraint_capacity( int nfree) { if (p->max_loaders() - p->num_loaders() < nfree) { int n = nfree + p->num_loaders(); - oop* new_loaders = NEW_C_HEAP_ARRAY(oop, n); + oop* new_loaders = NEW_C_HEAP_ARRAY(oop, n, mtClass); memcpy(new_loaders, p->loaders(), sizeof(oop) * p->num_loaders()); p->set_max_loaders(n); - FREE_C_HEAP_ARRAY(oop, p->loaders()); + FREE_C_HEAP_ARRAY(oop, p->loaders(), mtClass); p->set_loaders(new_loaders); } } @@ -425,7 +425,7 @@ void LoaderConstraintTable::merge_loader_constraints( } *pp2 = p2->next(); - FREE_C_HEAP_ARRAY(oop, p2->loaders()); + FREE_C_HEAP_ARRAY(oop, p2->loaders(), mtClass); free_entry(p2); return; } diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.hpp b/hotspot/src/share/vm/classfile/loaderConstraints.hpp index 60612f5dba3..d01b2c4d63f 100644 --- a/hotspot/src/share/vm/classfile/loaderConstraints.hpp +++ b/hotspot/src/share/vm/classfile/loaderConstraints.hpp @@ -31,7 +31,7 @@ class LoaderConstraintEntry; -class LoaderConstraintTable : public Hashtable { +class LoaderConstraintTable : public Hashtable { friend class VMStructs; private: @@ -53,11 +53,11 @@ public: void free_entry(LoaderConstraintEntry *entry); LoaderConstraintEntry* bucket(int i) { - return (LoaderConstraintEntry*)Hashtable::bucket(i); + return (LoaderConstraintEntry*)Hashtable::bucket(i); } LoaderConstraintEntry** bucket_addr(int i) { - return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); + return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); } // GC support @@ -94,7 +94,7 @@ public: #endif }; -class LoaderConstraintEntry : public HashtableEntry { +class LoaderConstraintEntry : public HashtableEntry { friend class VMStructs; private: Symbol* _name; // class name @@ -109,14 +109,14 @@ public: void set_klass(klassOop k) { set_literal(k); } LoaderConstraintEntry* next() { - return (LoaderConstraintEntry*)HashtableEntry::next(); + return (LoaderConstraintEntry*)HashtableEntry::next(); } LoaderConstraintEntry** next_addr() { - return (LoaderConstraintEntry**)HashtableEntry::next_addr(); + return (LoaderConstraintEntry**)HashtableEntry::next_addr(); } void set_next(LoaderConstraintEntry* next) { - HashtableEntry::set_next(next); + HashtableEntry::set_next(next); } Symbol* name() { return _name; } diff --git a/hotspot/src/share/vm/classfile/placeholders.cpp b/hotspot/src/share/vm/classfile/placeholders.cpp index ef877b1033e..d3f425b241a 100644 --- a/hotspot/src/share/vm/classfile/placeholders.cpp +++ b/hotspot/src/share/vm/classfile/placeholders.cpp @@ -34,7 +34,7 @@ PlaceholderEntry* PlaceholderTable::new_entry(int hash, Symbol* name, oop loader, bool havesupername, Symbol* supername) { - PlaceholderEntry* entry = (PlaceholderEntry*)Hashtable::new_entry(hash, name); + PlaceholderEntry* entry = (PlaceholderEntry*)Hashtable::new_entry(hash, name); // Hashtable with Symbol* literal must increment and decrement refcount. name->increment_refcount(); entry->set_loader(loader); @@ -52,7 +52,7 @@ void PlaceholderTable::free_entry(PlaceholderEntry* entry) { // decrement Symbol refcount here because Hashtable doesn't. entry->literal()->decrement_refcount(); if (entry->supername() != NULL) entry->supername()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -166,7 +166,7 @@ void PlaceholderTable::find_and_remove(int index, unsigned int hash, } PlaceholderTable::PlaceholderTable(int table_size) - : TwoOopHashtable(table_size, sizeof(PlaceholderEntry)) { + : TwoOopHashtable(table_size, sizeof(PlaceholderEntry)) { } diff --git a/hotspot/src/share/vm/classfile/placeholders.hpp b/hotspot/src/share/vm/classfile/placeholders.hpp index 667c59b8c70..4dea3a6804c 100644 --- a/hotspot/src/share/vm/classfile/placeholders.hpp +++ b/hotspot/src/share/vm/classfile/placeholders.hpp @@ -34,7 +34,7 @@ class PlaceholderEntry; // being loaded, as well as arrays of primitives. // -class PlaceholderTable : public TwoOopHashtable { +class PlaceholderTable : public TwoOopHashtable { friend class VMStructs; public: @@ -44,15 +44,15 @@ public: void free_entry(PlaceholderEntry* entry); PlaceholderEntry* bucket(int i) { - return (PlaceholderEntry*)Hashtable::bucket(i); + return (PlaceholderEntry*)Hashtable::bucket(i); } PlaceholderEntry** bucket_addr(int i) { - return (PlaceholderEntry**)Hashtable::bucket_addr(i); + return (PlaceholderEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, PlaceholderEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, (HashtableEntry*)new_entry); } void add_entry(int index, unsigned int hash, Symbol* name, @@ -116,7 +116,7 @@ public: // For DEFINE_CLASS, the head of the queue owns the // define token and the rest of the threads wait to return the // result the first thread gets. -class SeenThread: public CHeapObj { +class SeenThread: public CHeapObj { private: Thread *_thread; SeenThread* _stnext; @@ -152,7 +152,7 @@ public: // on store ordering here. // The system dictionary is the only user of this class. -class PlaceholderEntry : public HashtableEntry { +class PlaceholderEntry : public HashtableEntry { friend class VMStructs; @@ -206,11 +206,11 @@ class PlaceholderEntry : public HashtableEntry { void set_defineThreadQ(SeenThread* SeenThread) { _defineThreadQ = SeenThread; } PlaceholderEntry* next() const { - return (PlaceholderEntry*)HashtableEntry::next(); + return (PlaceholderEntry*)HashtableEntry::next(); } PlaceholderEntry** next_addr() { - return (PlaceholderEntry**)HashtableEntry::next_addr(); + return (PlaceholderEntry**)HashtableEntry::next_addr(); } // Test for equality diff --git a/hotspot/src/share/vm/classfile/resolutionErrors.cpp b/hotspot/src/share/vm/classfile/resolutionErrors.cpp index ed31224e010..e94ffa288ab 100644 --- a/hotspot/src/share/vm/classfile/resolutionErrors.cpp +++ b/hotspot/src/share/vm/classfile/resolutionErrors.cpp @@ -67,7 +67,7 @@ void ResolutionErrorEntry::set_error(Symbol* e) { ResolutionErrorEntry* ResolutionErrorTable::new_entry(int hash, constantPoolOop pool, int cp_index, Symbol* error) { - ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); + ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); entry->set_cp_index(cp_index); NOT_PRODUCT(entry->set_error(NULL);) entry->set_error(error); @@ -79,13 +79,13 @@ void ResolutionErrorTable::free_entry(ResolutionErrorEntry *entry) { // decrement error refcount assert(entry->error() != NULL, "error should be set"); entry->error()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } // create resolution error table ResolutionErrorTable::ResolutionErrorTable(int table_size) - : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { + : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { } // GC support diff --git a/hotspot/src/share/vm/classfile/resolutionErrors.hpp b/hotspot/src/share/vm/classfile/resolutionErrors.hpp index 03fcf4957bb..a18a55a2340 100644 --- a/hotspot/src/share/vm/classfile/resolutionErrors.hpp +++ b/hotspot/src/share/vm/classfile/resolutionErrors.hpp @@ -33,7 +33,7 @@ class ResolutionErrorEntry; // ResolutionError objects are used to record errors encountered during // constant pool resolution (JVMS 5.4.3). -class ResolutionErrorTable : public Hashtable { +class ResolutionErrorTable : public Hashtable { public: ResolutionErrorTable(int table_size); @@ -42,15 +42,16 @@ public: void free_entry(ResolutionErrorEntry *entry); ResolutionErrorEntry* bucket(int i) { - return (ResolutionErrorEntry*)Hashtable::bucket(i); + return (ResolutionErrorEntry*)Hashtable::bucket(i); } ResolutionErrorEntry** bucket_addr(int i) { - return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); + return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, ResolutionErrorEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, + (HashtableEntry*)new_entry); } void add_entry(int index, unsigned int hash, @@ -74,7 +75,7 @@ public: }; -class ResolutionErrorEntry : public HashtableEntry { +class ResolutionErrorEntry : public HashtableEntry { private: int _cp_index; Symbol* _error; @@ -90,11 +91,11 @@ class ResolutionErrorEntry : public HashtableEntry { void set_error(Symbol* e); ResolutionErrorEntry* next() const { - return (ResolutionErrorEntry*)HashtableEntry::next(); + return (ResolutionErrorEntry*)HashtableEntry::next(); } ResolutionErrorEntry** next_addr() { - return (ResolutionErrorEntry**)HashtableEntry::next_addr(); + return (ResolutionErrorEntry**)HashtableEntry::next_addr(); } // GC support diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index 66218822525..dd52e8167a8 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" @@ -34,19 +35,18 @@ #include "oops/oop.inline2.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" +#include "utilities/numberSeq.hpp" // -------------------------------------------------------------------------- SymbolTable* SymbolTable::_the_table = NULL; // Static arena for symbols that are not deallocated Arena* SymbolTable::_arena = NULL; +bool SymbolTable::_needs_rehashing = false; Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) { - // Don't allow symbols to be created which cannot fit in a Symbol*. - if (len > Symbol::max_length()) { - THROW_MSG_0(vmSymbols::java_lang_InternalError(), - "name is too long to represent"); - } + assert (len <= Symbol::max_length(), "should be checked by caller"); + Symbol* sym; // Allocate symbols in the C heap when dumping shared spaces in case there // are temporary symbols we can remove. @@ -63,9 +63,9 @@ Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS void SymbolTable::initialize_symbols(int arena_alloc_size) { // Initialize the arena for global symbols, size passed in depends on CDS. if (arena_alloc_size == 0) { - _arena = new Arena(); + _arena = new (mtSymbol) Arena(); } else { - _arena = new Arena(arena_alloc_size); + _arena = new (mtSymbol) Arena(arena_alloc_size); } } @@ -73,7 +73,7 @@ void SymbolTable::initialize_symbols(int arena_alloc_size) { void SymbolTable::symbols_do(SymbolClosure *cl) { const int n = the_table()->table_size(); for (int i = 0; i < n; i++) { - for (HashtableEntry* p = the_table()->bucket(i); + for (HashtableEntry* p = the_table()->bucket(i); p != NULL; p = p->next()) { cl->do_symbol(p->literal_addr()); @@ -91,9 +91,14 @@ void SymbolTable::unlink() { int total = 0; size_t memory_total = 0; for (int i = 0; i < the_table()->table_size(); ++i) { - for (HashtableEntry** p = the_table()->bucket_addr(i); *p != NULL; ) { - HashtableEntry* entry = *p; - if (entry->is_shared()) { + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); + while (entry != NULL) { + // Shared entries are normally at the end of the bucket and if we run into + // a shared entry, then there is nothing more to remove. However, if we + // have rehashed the table, then the shared entries are no longer at the + // end of the bucket. + if (entry->is_shared() && !use_alternate_hashcode()) { break; } Symbol* s = entry->literal(); @@ -102,6 +107,7 @@ void SymbolTable::unlink() { assert(s != NULL, "just checking"); // If reference count is zero, remove. if (s->refcount() == 0) { + assert(!entry->is_shared(), "shared entries should be kept live"); delete s; removed++; *p = entry->next(); @@ -109,6 +115,8 @@ void SymbolTable::unlink() { } else { p = entry->next_addr(); } + // get next entry + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } symbols_removed += removed; @@ -121,12 +129,32 @@ void SymbolTable::unlink() { } } +// Create a new table and using alternate hash code, populate the new table +// with the existing strings. Set flag to use the alternate hash code afterwards. +void SymbolTable::rehash_table() { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + // This should never happen with -Xshare:dump but it might in testing mode. + if (DumpSharedSpaces) return; + // Create a new symbol table + SymbolTable* new_table = new SymbolTable(); + + the_table()->move_to(new_table); + + // Delete the table and buckets (entries are reused in new table). + delete _the_table; + // Don't check if we need rehashing until the table gets unbalanced again. + // Then rehash with a new global seed. + _needs_rehashing = false; + _the_table = new_table; +} // Lookup a symbol in a bucket. Symbol* SymbolTable::lookup(int index, const char* name, int len, unsigned int hash) { - for (HashtableEntry* e = bucket(index); e != NULL; e = e->next()) { + int count = 0; + for (HashtableEntry* e = bucket(index); e != NULL; e = e->next()) { + count++; // count all entries in this bucket, not just ones with same hash if (e->hash() == hash) { Symbol* sym = e->literal(); if (sym->equals(name, len)) { @@ -136,9 +164,20 @@ Symbol* SymbolTable::lookup(int index, const char* name, } } } + // If the bucket size is too deep check if this hash code is insufficient. + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + _needs_rehashing = check_rehash_table(count); + } return NULL; } +// Pick hashing algorithm. +unsigned int SymbolTable::hash_symbol(const char* s, int len) { + return use_alternate_hashcode() ? + AltHashing::murmur3_32(seed(), (const jbyte*)s, len) : + java_lang_String::to_hash(s, len); +} + // We take care not to be blocking while holding the // SymbolTable_lock. Otherwise, the system might deadlock, since the @@ -156,6 +195,9 @@ Symbol* SymbolTable::lookup(const char* name, int len, TRAPS) { // Found if (s != NULL) return s; + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + // Otherwise, add to symbol to table return the_table()->basic_add(index, (u1*)name, len, hashValue, true, CHECK_NULL); } @@ -193,6 +235,9 @@ Symbol* SymbolTable::lookup(const Symbol* sym, int begin, int end, TRAPS) { // We can't include the code in No_Safepoint_Verifier because of the // ResourceMark. + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + return the_table()->basic_add(index, (u1*)buffer, len, hashValue, true, CHECK_NULL); } @@ -212,7 +257,7 @@ Symbol** SymbolTable::lookup_symbol_addr(Symbol* sym){ unsigned int hash = hash_symbol((char*)sym->bytes(), sym->utf8_length()); int index = the_table()->hash_to_index(hash); - for (HashtableEntry* e = the_table()->bucket(index); e != NULL; e = e->next()) { + for (HashtableEntry* e = the_table()->bucket(index); e != NULL; e = e->next()) { if (e->hash() == hash) { Symbol* literal_sym = e->literal(); if (sym == literal_sym) { @@ -261,6 +306,9 @@ void SymbolTable::add(Handle class_loader, constantPoolHandle cp, int names_count, const char** names, int* lengths, int* cp_indices, unsigned int* hashValues, TRAPS) { + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + SymbolTable* table = the_table(); bool added = table->basic_add(class_loader, cp, names_count, names, lengths, cp_indices, hashValues, CHECK); @@ -281,18 +329,39 @@ Symbol* SymbolTable::new_permanent_symbol(const char* name, TRAPS) { if (result != NULL) { return result; } + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + SymbolTable* table = the_table(); int index = table->hash_to_index(hash); return table->basic_add(index, (u1*)name, (int)strlen(name), hash, false, THREAD); } -Symbol* SymbolTable::basic_add(int index, u1 *name, int len, - unsigned int hashValue, bool c_heap, TRAPS) { +Symbol* SymbolTable::basic_add(int index_arg, u1 *name, int len, + unsigned int hashValue_arg, bool c_heap, TRAPS) { assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), "proposed name of symbol must be stable"); - // Grab SymbolTable_lock first. - MutexLocker ml(SymbolTable_lock, THREAD); + // Don't allow symbols to be created which cannot fit in a Symbol*. + if (len > Symbol::max_length()) { + THROW_MSG_0(vmSymbols::java_lang_InternalError(), + "name is too long to represent"); + } + + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; + + // Check if the symbol table has been rehashed, if so, need to recalculate + // the hash value and index. + unsigned int hashValue; + int index; + if (use_alternate_hashcode()) { + hashValue = hash_symbol((const char*)name, len); + index = hash_to_index(hashValue); + } else { + hashValue = hashValue_arg; + index = index_arg; + } // Since look-up was done lock-free, we need to check if another // thread beat us in the race to insert the symbol. @@ -307,7 +376,7 @@ Symbol* SymbolTable::basic_add(int index, u1 *name, int len, Symbol* sym = allocate_symbol(name, len, c_heap, CHECK_NULL); assert(sym->equals((char*)name, len), "symbol must be properly initialized"); - HashtableEntry* entry = new_entry(hashValue, sym); + HashtableEntry* entry = new_entry(hashValue, sym); add_entry(index, entry); return sym; } @@ -328,14 +397,22 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, } } - // Hold SymbolTable_lock through the symbol creation - MutexLocker ml(SymbolTable_lock, THREAD); + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; for (int i=0; iequals(names[i], lengths[i]), "symbol must be properly initialized"); // why wouldn't it be??? - HashtableEntry* entry = new_entry(hashValues[i], sym); + HashtableEntry* entry = new_entry(hashValue, sym); add_entry(index, entry); cp->symbol_at_put(cp_indices[i], sym); } @@ -358,7 +435,7 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, void SymbolTable::verify() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { Symbol* s = (Symbol*)(p->literal()); guarantee(s != NULL, "symbol is NULL"); @@ -370,6 +447,24 @@ void SymbolTable::verify() { } } +void SymbolTable::dump(outputStream* st) { + NumberSeq summary; + for (int i = 0; i < the_table()->table_size(); ++i) { + int count = 0; + for (HashtableEntry* e = the_table()->bucket(i); + e != NULL; e = e->next()) { + count++; + } + summary.add((double)count); + } + st->print_cr("SymbolTable statistics:"); + st->print_cr("Number of buckets : %7d", summary.num()); + st->print_cr("Average bucket size : %7.0f", summary.avg()); + st->print_cr("Variance of bucket size : %7.0f", summary.variance()); + st->print_cr("Std. dev. of bucket size: %7.0f", summary.sd()); + st->print_cr("Maximum bucket size : %7.0f", summary.maximum()); +} + //--------------------------------------------------------------------------- // Non-product code @@ -393,7 +488,7 @@ void SymbolTable::print_histogram() { int memory_total = 0; int count = 0; for (i = 0; i < the_table()->table_size(); i++) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { memory_total += p->literal()->object_size(); count++; @@ -454,21 +549,20 @@ void SymbolTable::print_histogram() { void SymbolTable::print() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); if (entry != NULL) { while (entry != NULL) { tty->print(PTR_FORMAT " ", entry->literal()); entry->literal()->print(); tty->print(" %d", entry->literal()->refcount()); p = entry->next_addr(); - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } tty->cr(); } } } - #endif // PRODUCT // -------------------------------------------------------------------------- @@ -514,21 +608,87 @@ class StableMemoryChecker : public StackObj { // -------------------------------------------------------------------------- StringTable* StringTable::_the_table = NULL; +bool StringTable::_needs_rehashing = false; + +// Pick hashing algorithm +unsigned int StringTable::hash_string(const jchar* s, int len) { + return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), s, len) : + java_lang_String::to_hash(s, len); +} + oop StringTable::lookup(int index, jchar* name, int len, unsigned int hash) { - for (HashtableEntry* l = bucket(index); l != NULL; l = l->next()) { + int count = 0; + for (HashtableEntry* l = bucket(index); l != NULL; l = l->next()) { + count++; if (l->hash() == hash) { if (java_lang_String::equals(l->literal(), name, len)) { return l->literal(); } } } + // If the bucket size is too deep check if this hash code is insufficient. + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + _needs_rehashing = check_rehash_table(count); + } return NULL; } -oop StringTable::basic_add(int index, Handle string_or_null, jchar* name, - int len, unsigned int hashValue, TRAPS) { +oop StringTable::basic_add(int index_arg, Handle string, jchar* name, + int len, unsigned int hashValue_arg, TRAPS) { + + assert(java_lang_String::equals(string(), name, len), + "string must be properly initialized"); + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; + + // Check if the symbol table has been rehashed, if so, need to recalculate + // the hash value and index before second lookup. + unsigned int hashValue; + int index; + if (use_alternate_hashcode()) { + hashValue = hash_string(name, len); + index = hash_to_index(hashValue); + } else { + hashValue = hashValue_arg; + index = index_arg; + } + + // Since look-up was done lock-free, we need to check if another + // thread beat us in the race to insert the symbol. + + oop test = lookup(index, name, len, hashValue); // calls lookup(u1*, int) + if (test != NULL) { + // Entry already added + return test; + } + + HashtableEntry* entry = new_entry(hashValue, string()); + add_entry(index, entry); + return string(); +} + + +oop StringTable::lookup(Symbol* symbol) { + ResourceMark rm; + int length; + jchar* chars = symbol->as_unicode(length); + unsigned int hashValue = hash_string(chars, length); + int index = the_table()->hash_to_index(hashValue); + return the_table()->lookup(index, chars, length, hashValue); +} + + +oop StringTable::intern(Handle string_or_null, jchar* name, + int len, TRAPS) { + unsigned int hashValue = hash_string(name, len); + int index = the_table()->hash_to_index(hashValue); + oop found_string = the_table()->lookup(index, name, len, hashValue); + + // Found + if (found_string != NULL) return found_string; + debug_only(StableMemoryChecker smc(name, len * sizeof(name[0]))); assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), "proposed name of symbol must be stable"); @@ -541,48 +701,12 @@ oop StringTable::basic_add(int index, Handle string_or_null, jchar* name, string = java_lang_String::create_tenured_from_unicode(name, len, CHECK_NULL); } - // Allocation must be done before grapping the SymbolTable_lock lock + // Grab the StringTable_lock before getting the_table() because it could + // change at safepoint. MutexLocker ml(StringTable_lock, THREAD); - assert(java_lang_String::equals(string(), name, len), - "string must be properly initialized"); - - // Since look-up was done lock-free, we need to check if another - // thread beat us in the race to insert the symbol. - - oop test = lookup(index, name, len, hashValue); // calls lookup(u1*, int) - if (test != NULL) { - // Entry already added - return test; - } - - HashtableEntry* entry = new_entry(hashValue, string()); - add_entry(index, entry); - return string(); -} - - -oop StringTable::lookup(Symbol* symbol) { - ResourceMark rm; - int length; - jchar* chars = symbol->as_unicode(length); - unsigned int hashValue = java_lang_String::hash_string(chars, length); - int index = the_table()->hash_to_index(hashValue); - return the_table()->lookup(index, chars, length, hashValue); -} - - -oop StringTable::intern(Handle string_or_null, jchar* name, - int len, TRAPS) { - unsigned int hashValue = java_lang_String::hash_string(name, len); - int index = the_table()->hash_to_index(hashValue); - oop string = the_table()->lookup(index, name, len, hashValue); - - // Found - if (string != NULL) return string; - // Otherwise, add to symbol to table - return the_table()->basic_add(index, string_or_null, name, len, + return the_table()->basic_add(index, string, name, len, hashValue, CHECK_NULL); } @@ -625,26 +749,32 @@ void StringTable::unlink(BoolObjectClosure* is_alive) { // entries at a safepoint. assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); for (int i = 0; i < the_table()->table_size(); ++i) { - for (HashtableEntry** p = the_table()->bucket_addr(i); *p != NULL; ) { - HashtableEntry* entry = *p; - if (entry->is_shared()) { + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); + while (entry != NULL) { + // Shared entries are normally at the end of the bucket and if we run into + // a shared entry, then there is nothing more to remove. However, if we + // have rehashed the table, then the shared entries are no longer at the + // end of the bucket. + if (entry->is_shared() && !use_alternate_hashcode()) { break; } assert(entry->literal() != NULL, "just checking"); - if (is_alive->do_object_b(entry->literal())) { + if (entry->is_shared() || is_alive->do_object_b(entry->literal())) { p = entry->next_addr(); } else { *p = entry->next(); the_table()->free_entry(entry); } + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } } void StringTable::oops_do(OopClosure* f) { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); while (entry != NULL) { f->do_oop((oop*)entry->literal_addr()); @@ -656,14 +786,14 @@ void StringTable::oops_do(OopClosure* f) { } else { p = entry->next_addr(); } - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } } void StringTable::verify() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { oop s = p->literal(); guarantee(s != NULL, "interned string is NULL"); @@ -675,3 +805,41 @@ void StringTable::verify() { } } } + +void StringTable::dump(outputStream* st) { + NumberSeq summary; + for (int i = 0; i < the_table()->table_size(); ++i) { + HashtableEntry* p = the_table()->bucket(i); + int count = 0; + for ( ; p != NULL; p = p->next()) { + count++; + } + summary.add((double)count); + } + st->print_cr("StringTable statistics:"); + st->print_cr("Number of buckets : %7d", summary.num()); + st->print_cr("Average bucket size : %7.0f", summary.avg()); + st->print_cr("Variance of bucket size : %7.0f", summary.variance()); + st->print_cr("Std. dev. of bucket size: %7.0f", summary.sd()); + st->print_cr("Maximum bucket size : %7.0f", summary.maximum()); +} + + +// Create a new table and using alternate hash code, populate the new table +// with the existing strings. Set flag to use the alternate hash code afterwards. +void StringTable::rehash_table() { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + // This should never happen with -Xshare:dump but it might in testing mode. + if (DumpSharedSpaces) return; + StringTable* new_table = new StringTable(); + + // Rehash the table + the_table()->move_to(new_table); + + // Delete the table and buckets (entries are reused in new table). + delete _the_table; + // Don't check if we need rehashing until the table gets unbalanced again. + // Then rehash with a new global seed. + _needs_rehashing = false; + _the_table = new_table; +} diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index 3e0777fc7c1..7812fe1fb6c 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -40,6 +40,7 @@ // - symbolTableEntrys are allocated in blocks to reduce the space overhead. class BoolObjectClosure; +class outputStream; // Class to hold a newly created or referenced Symbol* temporarily in scope. @@ -70,7 +71,7 @@ class TempNewSymbol : public StackObj { operator Symbol*() { return _temp; } }; -class SymbolTable : public Hashtable { +class SymbolTable : public Hashtable { friend class VMStructs; friend class ClassFileParser; @@ -78,6 +79,9 @@ private: // The symbol table static SymbolTable* _the_table; + // Set if one bucket is out of balance due to hash algorithm deficiency + static bool _needs_rehashing; + // For statistics static int symbols_removed; static int symbols_counted; @@ -108,10 +112,10 @@ private: Symbol* lookup(int index, const char* name, int len, unsigned int hash); SymbolTable() - : Hashtable(symbol_table_size, sizeof (HashtableEntry)) {} + : Hashtable(symbol_table_size, sizeof (HashtableEntry)) {} - SymbolTable(HashtableBucket* t, int number_of_entries) - : Hashtable(symbol_table_size, sizeof (HashtableEntry), t, + SymbolTable(HashtableBucket* t, int number_of_entries) + : Hashtable(symbol_table_size, sizeof (HashtableEntry), t, number_of_entries) {} // Arena for permanent symbols (null class loader) that are never unloaded @@ -135,10 +139,10 @@ public: initialize_symbols(symbol_alloc_arena_size); } - static void create_table(HashtableBucket* t, int length, + static void create_table(HashtableBucket* t, int length, int number_of_entries) { assert(_the_table == NULL, "One symbol table allowed."); - assert(length == symbol_table_size * sizeof(HashtableBucket), + assert(length == symbol_table_size * sizeof(HashtableBucket), "bad shared symbol size."); _the_table = new SymbolTable(t, number_of_entries); // if CDS give symbol table a default arena size since most symbols @@ -146,6 +150,8 @@ public: initialize_symbols(); } + static unsigned int hash_symbol(const char* s, int len); + static Symbol* lookup(const char* name, int len, TRAPS); // lookup only, won't add. Also calculate hash. static Symbol* lookup_only(const char* name, int len, unsigned int& hash); @@ -208,39 +214,46 @@ public: // Debugging static void verify(); + static void dump(outputStream* st); // Sharing static void copy_buckets(char** top, char*end) { - the_table()->Hashtable::copy_buckets(top, end); + the_table()->Hashtable::copy_buckets(top, end); } static void copy_table(char** top, char*end) { - the_table()->Hashtable::copy_table(top, end); + the_table()->Hashtable::copy_table(top, end); } static void reverse(void* boundary = NULL) { - the_table()->Hashtable::reverse(boundary); + the_table()->Hashtable::reverse(boundary); } + + // Rehash the symbol table if it gets out of balance + static void rehash_table(); + static bool needs_rehashing() { return _needs_rehashing; } }; -class StringTable : public Hashtable { +class StringTable : public Hashtable { friend class VMStructs; private: // The string table static StringTable* _the_table; + // Set if one bucket is out of balance due to hash algorithm deficiency + static bool _needs_rehashing; + static oop intern(Handle string_or_null, jchar* chars, int length, TRAPS); oop basic_add(int index, Handle string_or_null, jchar* name, int len, unsigned int hashValue, TRAPS); oop lookup(int index, jchar* chars, int length, unsigned int hashValue); - StringTable() : Hashtable((int)StringTableSize, - sizeof (HashtableEntry)) {} + StringTable() : Hashtable((int)StringTableSize, + sizeof (HashtableEntry)) {} - StringTable(HashtableBucket* t, int number_of_entries) - : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, + StringTable(HashtableBucket* t, int number_of_entries) + : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, number_of_entries) {} - public: // The string table static StringTable* the_table() { return _the_table; } @@ -250,10 +263,10 @@ public: _the_table = new StringTable(); } - static void create_table(HashtableBucket* t, int length, + static void create_table(HashtableBucket* t, int length, int number_of_entries) { assert(_the_table == NULL, "One string table allowed."); - assert((size_t)length == StringTableSize * sizeof(HashtableBucket), + assert((size_t)length == StringTableSize * sizeof(HashtableBucket), "bad shared string size."); _the_table = new StringTable(t, number_of_entries); } @@ -265,6 +278,14 @@ public: // Invoke "f->do_oop" on the locations of all oops in the table. static void oops_do(OopClosure* f); + // Hashing algorithm, used as the hash value used by the + // StringTable for bucket selection and comparison (stored in the + // HashtableEntry structures). This is used in the String.intern() method. + static unsigned int hash_string(const jchar* s, int len); + + // Internal test. + static void test_alt_hash() PRODUCT_RETURN; + // Probing static oop lookup(Symbol* symbol); @@ -275,17 +296,21 @@ public: // Debugging static void verify(); + static void dump(outputStream* st); // Sharing static void copy_buckets(char** top, char*end) { - the_table()->Hashtable::copy_buckets(top, end); + the_table()->Hashtable::copy_buckets(top, end); } static void copy_table(char** top, char*end) { - the_table()->Hashtable::copy_table(top, end); + the_table()->Hashtable::copy_table(top, end); } static void reverse() { - the_table()->Hashtable::reverse(); + the_table()->Hashtable::reverse(); } -}; + // Rehash the symbol table if it gets out of balance + static void rehash_table(); + static bool needs_rehashing() { return _needs_rehashing; } +}; #endif // SHARE_VM_CLASSFILE_SYMBOLTABLE_HPP diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp index 04bb9d9f5c5..aca21742fe6 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp @@ -1168,9 +1168,9 @@ klassOop SystemDictionary::resolve_from_stream(Symbol* class_name, } -void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length, +void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length, int number_of_entries) { - assert(length == _nof_buckets * sizeof(HashtableBucket), + assert(length == _nof_buckets * sizeof(HashtableBucket), "bad shared dictionary size."); _shared_dictionary = new Dictionary(_nof_buckets, t, number_of_entries); } @@ -1971,6 +1971,9 @@ void SystemDictionary::initialize_preloaded_classes(TRAPS) { // first do Object, String, Class initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK); + // Calculate offsets for String and Class classes since they are loaded and + // can be used after this point. + java_lang_String::compute_offsets(); java_lang_Class::compute_offsets(); // Fixup mirrors for classes loaded before java.lang.Class. @@ -2760,7 +2763,7 @@ class ClassStatistics: AllStatic { class_size += ik->local_interfaces()->size(); class_size += ik->transitive_interfaces()->size(); // We do not have to count implementors, since we only store one! - class_size += ik->all_fields_count() * FieldInfo::field_slots; + class_size += ik->fields()->length(); } } @@ -2768,7 +2771,6 @@ class ClassStatistics: AllStatic { nmethods++; method_size += m->size(); // class loader uses same objArray for empty vectors, so don't count these - if (m->exception_table()->length() != 0) method_size += m->exception_table()->size(); if (m->has_stackmap_table()) { method_size += m->stackmap_data()->size(); } diff --git a/hotspot/src/share/vm/classfile/systemDictionary.hpp b/hotspot/src/share/vm/classfile/systemDictionary.hpp index 3abc5054d58..7b59f075021 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.hpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp @@ -32,6 +32,7 @@ #include "runtime/java.hpp" #include "runtime/reflectionUtils.hpp" #include "utilities/hashtable.hpp" +#include "utilities/hashtable.inline.hpp" // The system dictionary stores all loaded classes and maps: // @@ -72,7 +73,7 @@ class Dictionary; class PlaceholderTable; class LoaderConstraintTable; -class HashtableBucket; +template class HashtableBucket; class ResolutionErrorTable; class SymbolPropertyTable; @@ -170,9 +171,6 @@ class SymbolPropertyTable; /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ template(nio_Buffer_klass, java_nio_Buffer, Opt) \ \ - /* If this class isn't present, it won't be referenced. */ \ - template(AtomicLongCSImpl_klass, sun_misc_AtomicLongCSImpl, Opt) \ - \ template(DownloadManager_klass, sun_jkernel_DownloadManager, Opt_Kernel) \ \ template(PostVMInitHook_klass, sun_misc_PostVMInitHook, Opt) \ @@ -366,7 +364,7 @@ public: static void copy_buckets(char** top, char* end); static void copy_table(char** top, char* end); static void reverse(); - static void set_shared_dictionary(HashtableBucket* t, int length, + static void set_shared_dictionary(HashtableBucket* t, int length, int number_of_entries); // Printing static void print() PRODUCT_RETURN; diff --git a/hotspot/src/share/vm/classfile/verifier.cpp b/hotspot/src/share/vm/classfile/verifier.cpp index 376e878010c..e5badd62cbf 100644 --- a/hotspot/src/share/vm/classfile/verifier.cpp +++ b/hotspot/src/share/vm/classfile/verifier.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1368,47 +1368,48 @@ char* ClassVerifier::generate_code_data(methodHandle m, u4 code_length, TRAPS) { } void ClassVerifier::verify_exception_handler_table(u4 code_length, char* code_data, int& min, int& max, TRAPS) { - typeArrayHandle exhandlers (THREAD, _method->exception_table()); + ExceptionTable exhandlers(_method()); + int exlength = exhandlers.length(); constantPoolHandle cp (THREAD, _method->constants()); - if (exhandlers() != NULL) { - for(int i = 0; i < exhandlers->length();) { - u2 start_pc = exhandlers->int_at(i++); - u2 end_pc = exhandlers->int_at(i++); - u2 handler_pc = exhandlers->int_at(i++); - if (start_pc >= code_length || code_data[start_pc] == 0) { - class_format_error("Illegal exception table start_pc %d", start_pc); - return; - } - if (end_pc != code_length) { // special case: end_pc == code_length - if (end_pc > code_length || code_data[end_pc] == 0) { - class_format_error("Illegal exception table end_pc %d", end_pc); - return; - } - } - if (handler_pc >= code_length || code_data[handler_pc] == 0) { - class_format_error("Illegal exception table handler_pc %d", handler_pc); - return; - } - int catch_type_index = exhandlers->int_at(i++); - if (catch_type_index != 0) { - VerificationType catch_type = cp_index_to_type( - catch_type_index, cp, CHECK_VERIFY(this)); - VerificationType throwable = - VerificationType::reference_type(vmSymbols::java_lang_Throwable()); - bool is_subclass = throwable.is_assignable_from( - catch_type, this, CHECK_VERIFY(this)); - if (!is_subclass) { - // 4286534: should throw VerifyError according to recent spec change - verify_error( - "Catch type is not a subclass of Throwable in handler %d", - handler_pc); - return; - } - } - if (start_pc < min) min = start_pc; - if (end_pc > max) max = end_pc; + for(int i = 0; i < exlength; i++) { + //reacquire the table in case a GC happened + ExceptionTable exhandlers(_method()); + u2 start_pc = exhandlers.start_pc(i); + u2 end_pc = exhandlers.end_pc(i); + u2 handler_pc = exhandlers.handler_pc(i); + if (start_pc >= code_length || code_data[start_pc] == 0) { + class_format_error("Illegal exception table start_pc %d", start_pc); + return; } + if (end_pc != code_length) { // special case: end_pc == code_length + if (end_pc > code_length || code_data[end_pc] == 0) { + class_format_error("Illegal exception table end_pc %d", end_pc); + return; + } + } + if (handler_pc >= code_length || code_data[handler_pc] == 0) { + class_format_error("Illegal exception table handler_pc %d", handler_pc); + return; + } + int catch_type_index = exhandlers.catch_type_index(i); + if (catch_type_index != 0) { + VerificationType catch_type = cp_index_to_type( + catch_type_index, cp, CHECK_VERIFY(this)); + VerificationType throwable = + VerificationType::reference_type(vmSymbols::java_lang_Throwable()); + bool is_subclass = throwable.is_assignable_from( + catch_type, this, CHECK_VERIFY(this)); + if (!is_subclass) { + // 4286534: should throw VerifyError according to recent spec change + verify_error( + "Catch type is not a subclass of Throwable in handler %d", + handler_pc); + return; + } + } + if (start_pc < min) min = start_pc; + if (end_pc > max) max = end_pc; } } @@ -1474,35 +1475,36 @@ u2 ClassVerifier::verify_stackmap_table(u2 stackmap_index, u2 bci, void ClassVerifier::verify_exception_handler_targets(u2 bci, bool this_uninit, StackMapFrame* current_frame, StackMapTable* stackmap_table, TRAPS) { constantPoolHandle cp (THREAD, _method->constants()); - typeArrayHandle exhandlers (THREAD, _method->exception_table()); - if (exhandlers() != NULL) { - for(int i = 0; i < exhandlers->length();) { - u2 start_pc = exhandlers->int_at(i++); - u2 end_pc = exhandlers->int_at(i++); - u2 handler_pc = exhandlers->int_at(i++); - int catch_type_index = exhandlers->int_at(i++); - if(bci >= start_pc && bci < end_pc) { - u1 flags = current_frame->flags(); - if (this_uninit) { flags |= FLAG_THIS_UNINIT; } - StackMapFrame* new_frame = current_frame->frame_in_exception_handler(flags); - if (catch_type_index != 0) { - // We know that this index refers to a subclass of Throwable - VerificationType catch_type = cp_index_to_type( - catch_type_index, cp, CHECK_VERIFY(this)); - new_frame->push_stack(catch_type, CHECK_VERIFY(this)); - } else { - VerificationType throwable = - VerificationType::reference_type(vmSymbols::java_lang_Throwable()); - new_frame->push_stack(throwable, CHECK_VERIFY(this)); - } - bool match = stackmap_table->match_stackmap( - new_frame, handler_pc, true, false, CHECK_VERIFY(this)); - if (!match) { - verify_error(bci, - "Stack map does not match the one at exception handler %d", - handler_pc); - return; - } + ExceptionTable exhandlers(_method()); + int exlength = exhandlers.length(); + for(int i = 0; i < exlength; i++) { + //reacquire the table in case a GC happened + ExceptionTable exhandlers(_method()); + u2 start_pc = exhandlers.start_pc(i); + u2 end_pc = exhandlers.end_pc(i); + u2 handler_pc = exhandlers.handler_pc(i); + int catch_type_index = exhandlers.catch_type_index(i); + if(bci >= start_pc && bci < end_pc) { + u1 flags = current_frame->flags(); + if (this_uninit) { flags |= FLAG_THIS_UNINIT; } + StackMapFrame* new_frame = current_frame->frame_in_exception_handler(flags); + if (catch_type_index != 0) { + // We know that this index refers to a subclass of Throwable + VerificationType catch_type = cp_index_to_type( + catch_type_index, cp, CHECK_VERIFY(this)); + new_frame->push_stack(catch_type, CHECK_VERIFY(this)); + } else { + VerificationType throwable = + VerificationType::reference_type(vmSymbols::java_lang_Throwable()); + new_frame->push_stack(throwable, CHECK_VERIFY(this)); + } + bool match = stackmap_table->match_stackmap( + new_frame, handler_pc, true, false, CHECK_VERIFY(this)); + if (!match) { + verify_error(bci, + "Stack map does not match the one at exception handler %d", + handler_pc); + return; } } } @@ -1738,10 +1740,14 @@ void ClassVerifier::verify_switch( int target = bci + default_offset; stackmap_table->check_jump_target(current_frame, target, CHECK_VERIFY(this)); for (int i = 0; i < keys; i++) { + // Because check_jump_target() may safepoint, the bytecode could have + // moved, which means 'aligned_bcp' is no good and needs to be recalculated. + aligned_bcp = (address)round_to((intptr_t)(bcs->bcp() + 1), jintSize); target = bci + (jint)Bytes::get_Java_u4(aligned_bcp+(3+i*delta)*jintSize); stackmap_table->check_jump_target( current_frame, target, CHECK_VERIFY(this)); } + NOT_PRODUCT(aligned_bcp = NULL); // no longer valid at this point } bool ClassVerifier::name_in_supers( diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp index 9cee5ac0490..6efa393ceac 100644 --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp @@ -111,6 +111,10 @@ template(getBootClassPathEntryForClass_name, "getBootClassPathEntryForClass") \ template(sun_misc_PostVMInitHook, "sun/misc/PostVMInitHook") \ \ + /* Java runtime version access */ \ + template(sun_misc_Version, "sun/misc/Version") \ + template(java_runtime_name_name, "java_runtime_name") \ + \ /* class file format tags */ \ template(tag_source_file, "SourceFile") \ template(tag_inner_classes, "InnerClasses") \ @@ -253,6 +257,7 @@ template(java_lang_invoke_BoundMethodHandle, "java/lang/invoke/BoundMethodHandle") \ template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \ template(java_lang_invoke_CountingMethodHandle, "java/lang/invoke/CountingMethodHandle") \ + template(java_lang_invoke_ForceInline_signature, "Ljava/lang/invoke/ForceInline;") \ /* internal up-calls made only by the JVM, via class sun.invoke.MethodHandleNatives: */ \ template(findMethodHandleType_name, "findMethodHandleType") \ template(findMethodHandleType_signature, "(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;") \ @@ -340,6 +345,9 @@ template(park_event_name, "nativeParkEventPointer") \ template(cache_field_name, "cache") \ template(value_name, "value") \ + template(offset_name, "offset") \ + template(count_name, "count") \ + template(hash_name, "hash") \ template(frontCacheEnabled_name, "frontCacheEnabled") \ template(stringCacheEnabled_name, "stringCacheEnabled") \ template(numberOfLeadingZeros_name, "numberOfLeadingZeros") \ @@ -719,15 +727,6 @@ /* java/lang/ref/Reference */ \ do_intrinsic(_Reference_get, java_lang_ref_Reference, get_name, void_object_signature, F_R) \ \ - \ - do_class(sun_misc_AtomicLongCSImpl, "sun/misc/AtomicLongCSImpl") \ - do_intrinsic(_get_AtomicLong, sun_misc_AtomicLongCSImpl, get_name, void_long_signature, F_R) \ - /* (symbols get_name and void_long_signature defined above) */ \ - \ - do_intrinsic(_attemptUpdate, sun_misc_AtomicLongCSImpl, attemptUpdate_name, attemptUpdate_signature, F_R) \ - do_name( attemptUpdate_name, "attemptUpdate") \ - do_signature(attemptUpdate_signature, "(JJ)Z") \ - \ /* support for sun.misc.Unsafe */ \ do_class(sun_misc_Unsafe, "sun/misc/Unsafe") \ \ diff --git a/hotspot/src/share/vm/code/codeBlob.cpp b/hotspot/src/share/vm/code/codeBlob.cpp index 244c32043f3..aa20f1d1bb9 100644 --- a/hotspot/src/share/vm/code/codeBlob.cpp +++ b/hotspot/src/share/vm/code/codeBlob.cpp @@ -144,7 +144,7 @@ void CodeBlob::set_oop_maps(OopMapSet* p) { // chunk of memory, its your job to free it. if (p != NULL) { // We need to allocate a chunk big enough to hold the OopMapSet and all of its OopMaps - _oop_maps = (OopMapSet* )NEW_C_HEAP_ARRAY(unsigned char, p->heap_size()); + _oop_maps = (OopMapSet* )NEW_C_HEAP_ARRAY(unsigned char, p->heap_size(), mtCode); p->copy_to((address)_oop_maps); } else { _oop_maps = NULL; @@ -180,7 +180,7 @@ void CodeBlob::trace_new_stub(CodeBlob* stub, const char* name1, const char* nam void CodeBlob::flush() { if (_oop_maps) { - FREE_C_HEAP_ARRAY(unsigned char, _oop_maps); + FREE_C_HEAP_ARRAY(unsigned char, _oop_maps, mtCode); _oop_maps = NULL; } _comments.free(); diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index 8e82aaad056..ffef685f96d 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -856,7 +856,7 @@ void CodeCache::print_internals() { int bucketSize = 512; int bucketLimit = maxCodeSize / bucketSize + 1; - int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit); + int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit, mtCode); memset(buckets,0,sizeof(int) * bucketLimit); for (cb = first(); cb != NULL; cb = next(cb)) { @@ -893,7 +893,7 @@ void CodeCache::print_internals() { } } - FREE_C_HEAP_ARRAY(int, buckets); + FREE_C_HEAP_ARRAY(int, buckets, mtCode); } void CodeCache::print() { diff --git a/hotspot/src/share/vm/code/codeCache.hpp b/hotspot/src/share/vm/code/codeCache.hpp index bdd128e9813..6c97cc79bd1 100644 --- a/hotspot/src/share/vm/code/codeCache.hpp +++ b/hotspot/src/share/vm/code/codeCache.hpp @@ -88,6 +88,9 @@ class CodeCache : AllStatic { // Lookup that does not fail if you lookup a zombie method (if you call this, be sure to know // what you are doing) static CodeBlob* find_blob_unsafe(void* start) { + // NMT can walk the stack before code cache is created + if (_heap == NULL) return NULL; + CodeBlob* result = (CodeBlob*)_heap->find_start(start); // this assert is too strong because the heap code will return the // heapblock containing start. That block can often be larger than diff --git a/hotspot/src/share/vm/code/nmethod.hpp b/hotspot/src/share/vm/code/nmethod.hpp index 33f44a919b5..75e8940aa8e 100644 --- a/hotspot/src/share/vm/code/nmethod.hpp +++ b/hotspot/src/share/vm/code/nmethod.hpp @@ -31,7 +31,7 @@ // This class is used internally by nmethods, to cache // exception/pc/handler information. -class ExceptionCache : public CHeapObj { +class ExceptionCache : public CHeapObj { friend class VMStructs; private: enum { cache_size = 16 }; diff --git a/hotspot/src/share/vm/code/stubs.hpp b/hotspot/src/share/vm/code/stubs.hpp index 328ad8bf76e..afc8f04d46c 100644 --- a/hotspot/src/share/vm/code/stubs.hpp +++ b/hotspot/src/share/vm/code/stubs.hpp @@ -101,7 +101,7 @@ class Stub VALUE_OBJ_CLASS_SPEC { // of the concrete stub (see also macro below). There's exactly // one stub interface instance required per stub queue. -class StubInterface: public CHeapObj { +class StubInterface: public CHeapObj { public: // Initialization/finalization virtual void initialize(Stub* self, int size) = 0; // called after creation (called twice if allocated via (request, commit)) @@ -152,7 +152,7 @@ class StubInterface: public CHeapObj { // A StubQueue maintains a queue of stubs. // Note: All sizes (spaces) are given in bytes. -class StubQueue: public CHeapObj { +class StubQueue: public CHeapObj { friend class VMStructs; private: StubInterface* _stub_interface; // the interface prototype diff --git a/hotspot/src/share/vm/code/vmreg.cpp b/hotspot/src/share/vm/code/vmreg.cpp index dd5945503b2..c56be87f108 100644 --- a/hotspot/src/share/vm/code/vmreg.cpp +++ b/hotspot/src/share/vm/code/vmreg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "code/vmreg.hpp" // First VMReg value that could refer to a stack slot -VMReg VMRegImpl::stack0 = (VMReg)(intptr_t)((ConcreteRegisterImpl::number_of_registers + 1) & ~1); +VMReg VMRegImpl::stack0 = (VMReg)(intptr_t)((ConcreteRegisterImpl::number_of_registers + 7) & ~7); // VMRegs are 4 bytes wide on all platforms const int VMRegImpl::stack_slot_size = 4; diff --git a/hotspot/src/share/vm/code/vmreg.hpp b/hotspot/src/share/vm/code/vmreg.hpp index d57e6f89bb0..ef2bdce29d4 100644 --- a/hotspot/src/share/vm/code/vmreg.hpp +++ b/hotspot/src/share/vm/code/vmreg.hpp @@ -131,6 +131,10 @@ public: assert((is_reg() && value() < stack0->value() - 1) || is_stack(), "must be"); return (VMReg)(intptr_t)(value() + 1); } + VMReg next(int i) { + assert((is_reg() && value() < stack0->value() - i) || is_stack(), "must be"); + return (VMReg)(intptr_t)(value() + i); + } VMReg prev() { assert((is_stack() && value() > stack0->value()) || (is_reg() && value() != 0), "must be"); return (VMReg)(intptr_t)(value() - 1); diff --git a/hotspot/src/share/vm/compiler/abstractCompiler.hpp b/hotspot/src/share/vm/compiler/abstractCompiler.hpp index 380dfe7bda0..55303a01fad 100644 --- a/hotspot/src/share/vm/compiler/abstractCompiler.hpp +++ b/hotspot/src/share/vm/compiler/abstractCompiler.hpp @@ -29,7 +29,7 @@ typedef void (*initializer)(void); -class AbstractCompiler : public CHeapObj { +class AbstractCompiler : public CHeapObj { private: bool _is_initialized; // Mark whether compiler object is initialized diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp index 8729e056221..2c2e64b3862 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.cpp +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp @@ -951,7 +951,7 @@ void CompileBroker::init_compiler_threads(int c1_compiler_count, int c2_compiler int compiler_count = c1_compiler_count + c2_compiler_count; _method_threads = - new (ResourceObj::C_HEAP) GrowableArray(compiler_count, true); + new (ResourceObj::C_HEAP, mtCompiler) GrowableArray(compiler_count, true); char name_buffer[256]; for (int i = 0; i < c2_compiler_count; i++) { @@ -1627,7 +1627,7 @@ void CompileBroker::init_compiler_thread_log() { } fp = fopen(fileBuf, "at"); if (fp != NULL) { - file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1); + file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1, mtCompiler); strcpy(file, fileBuf); break; } @@ -1637,7 +1637,7 @@ void CompileBroker::init_compiler_thread_log() { } else { if (LogCompilation && Verbose) tty->print_cr("Opening compilation log %s", file); - CompileLog* log = new(ResourceObj::C_HEAP) CompileLog(file, fp, thread_id); + CompileLog* log = new(ResourceObj::C_HEAP, mtCompiler) CompileLog(file, fp, thread_id); thread->init_log(log); if (xtty != NULL) { diff --git a/hotspot/src/share/vm/compiler/compileBroker.hpp b/hotspot/src/share/vm/compiler/compileBroker.hpp index 1ee2c5419f9..8d28f8c8224 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.hpp +++ b/hotspot/src/share/vm/compiler/compileBroker.hpp @@ -36,7 +36,7 @@ class nmethodLocker; // // An entry in the compile queue. It represents a pending or current // compilation. -class CompileTask : public CHeapObj { +class CompileTask : public CHeapObj { friend class VMStructs; private: @@ -131,7 +131,7 @@ public: // // Per Compiler Performance Counters. // -class CompilerCounters : public CHeapObj { +class CompilerCounters : public CHeapObj { public: enum { @@ -175,7 +175,7 @@ class CompilerCounters : public CHeapObj { // CompileQueue // // A list of CompileTasks. -class CompileQueue : public CHeapObj { +class CompileQueue : public CHeapObj { private: const char* _name; Monitor* _lock; diff --git a/hotspot/src/share/vm/compiler/compileLog.cpp b/hotspot/src/share/vm/compiler/compileLog.cpp index a306117f965..2e0fe86bc47 100644 --- a/hotspot/src/share/vm/compiler/compileLog.cpp +++ b/hotspot/src/share/vm/compiler/compileLog.cpp @@ -37,14 +37,14 @@ CompileLog* CompileLog::_first = NULL; CompileLog::CompileLog(const char* file, FILE* fp, intx thread_id) : _context(_context_buffer, sizeof(_context_buffer)) { - initialize(new(ResourceObj::C_HEAP) fileStream(fp)); + initialize(new(ResourceObj::C_HEAP, mtCompiler) fileStream(fp)); _file = file; _file_end = 0; _thread_id = thread_id; _identities_limit = 0; _identities_capacity = 400; - _identities = NEW_C_HEAP_ARRAY(char, _identities_capacity); + _identities = NEW_C_HEAP_ARRAY(char, _identities_capacity, mtCompiler); // link into the global list { MutexLocker locker(CompileTaskAlloc_lock); @@ -56,7 +56,7 @@ CompileLog::CompileLog(const char* file, FILE* fp, intx thread_id) CompileLog::~CompileLog() { delete _out; _out = NULL; - FREE_C_HEAP_ARRAY(char, _identities); + FREE_C_HEAP_ARRAY(char, _identities, mtCompiler); } @@ -109,7 +109,7 @@ int CompileLog::identify(ciObject* obj) { if (id >= _identities_capacity) { int new_cap = _identities_capacity * 2; if (new_cap <= id) new_cap = id + 100; - _identities = REALLOC_C_HEAP_ARRAY(char, _identities, new_cap); + _identities = REALLOC_C_HEAP_ARRAY(char, _identities, new_cap, mtCompiler); _identities_capacity = new_cap; } while (id >= _identities_limit) { diff --git a/hotspot/src/share/vm/compiler/compilerOracle.cpp b/hotspot/src/share/vm/compiler/compilerOracle.cpp index 8fe558a9492..197304bc4a4 100644 --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp @@ -34,7 +34,7 @@ #include "runtime/handles.inline.hpp" #include "runtime/jniHandles.hpp" -class MethodMatcher : public CHeapObj { +class MethodMatcher : public CHeapObj { public: enum Mode { Exact, @@ -550,10 +550,12 @@ void CompilerOracle::parse_from_line(char* line) { } } +static const char* default_cc_file = ".hotspot_compiler"; + static const char* cc_file() { #ifdef ASSERT if (CompileCommandFile == NULL) - return ".hotspot_compiler"; + return default_cc_file; #endif return CompileCommandFile; } @@ -636,10 +638,17 @@ void compilerOracle_init() { CompilerOracle::parse_from_string(CompileOnly, CompilerOracle::parse_compile_only); if (CompilerOracle::has_command_file()) { CompilerOracle::parse_from_file(); + } else { + struct stat buf; + if (os::stat(default_cc_file, &buf) == 0) { + warning("%s file is present but has been ignored. " + "Run with -XX:CompileCommandFile=%s to load the file.", + default_cc_file, default_cc_file); + } } if (lists[PrintCommand] != NULL) { if (PrintAssembly) { - warning("CompileCommand and/or .hotspot_compiler file contains 'print' commands, but PrintAssembly is also enabled"); + warning("CompileCommand and/or %s file contains 'print' commands, but PrintAssembly is also enabled", default_cc_file); } else if (FLAG_IS_DEFAULT(DebugNonSafepoints)) { warning("printing of assembly code is enabled; turning on DebugNonSafepoints to gain additional output"); DebugNonSafepoints = true; diff --git a/hotspot/src/share/vm/compiler/oopMap.cpp b/hotspot/src/share/vm/compiler/oopMap.cpp index 9c1195cecff..2cd212d277f 100644 --- a/hotspot/src/share/vm/compiler/oopMap.cpp +++ b/hotspot/src/share/vm/compiler/oopMap.cpp @@ -599,7 +599,7 @@ void OopMapSet::print_on(outputStream* st) const { #ifdef COMPILER2 -class DerivedPointerEntry : public CHeapObj { +class DerivedPointerEntry : public CHeapObj { private: oop* _location; // Location of derived pointer (also pointing to the base) intptr_t _offset; // Offset from base pointer @@ -621,7 +621,7 @@ void DerivedPointerTable::clear() { assert (!_active, "should not be active"); assert(_list == NULL || _list->length() == 0, "table not empty"); if (_list == NULL) { - _list = new (ResourceObj::C_HEAP) GrowableArray(10, true); // Allocated on C heap + _list = new (ResourceObj::C_HEAP, mtCompiler) GrowableArray(10, true); // Allocated on C heap } _active = true; } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp index 121829113c7..6ba15a2f240 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp @@ -58,8 +58,11 @@ size_t MinChunkSize = 0; void CompactibleFreeListSpace::set_cms_values() { // Set CMS global values assert(MinChunkSize == 0, "already set"); - #define numQuanta(x,y) ((x+y-1)/y) - MinChunkSize = numQuanta(sizeof(FreeChunk), MinObjAlignmentInBytes) * MinObjAlignment; + + // MinChunkSize should be a multiple of MinObjAlignment and be large enough + // for chunks to contain a FreeChunk. + size_t min_chunk_size_in_bytes = align_size_up(sizeof(FreeChunk), MinObjAlignmentInBytes); + MinChunkSize = min_chunk_size_in_bytes / BytesPerWord; assert(IndexSetStart == 0 && IndexSetStride == 0, "already set"); IndexSetStart = MinChunkSize; @@ -2534,12 +2537,8 @@ void CompactibleFreeListSpace::check_free_list_consistency() const { " linear allocation buffers"); assert(BinaryTreeDictionary::min_tree_chunk_size*HeapWordSize == sizeof(TreeChunk), "else MIN_TREE_CHUNK_SIZE is wrong"); - assert((IndexSetStride == 2 && IndexSetStart == 4) || // 32-bit - (IndexSetStride == 1 && IndexSetStart == 3), "just checking"); // 64-bit - assert((IndexSetStride != 2) || (IndexSetStart % 2 == 0), - "Some for-loops may be incorrectly initialized"); - assert((IndexSetStride != 2) || (IndexSetSize % 2 == 1), - "For-loops that iterate over IndexSet with stride 2 may be wrong"); + assert(IndexSetStart != 0, "IndexSetStart not initialized"); + assert(IndexSetStride != 0, "IndexSetStride not initialized"); } #endif diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp index 663b747fd77..3b7bb9aefb4 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp @@ -617,7 +617,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // A parallel-GC-thread-local allocation buffer for allocation into a // CompactibleFreeListSpace. -class CFLS_LAB : public CHeapObj { +class CFLS_LAB : public CHeapObj { // The space that this buffer allocates into. CompactibleFreeListSpace* _cfls; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index 5825a5772fc..e8e33ff8f8a 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -174,7 +174,7 @@ NOT_PRODUCT(CompactibleFreeListSpace* debug_cms_space;) // This struct contains per-thread things necessary to support parallel // young-gen collection. -class CMSParGCThreadState: public CHeapObj { +class CMSParGCThreadState: public CHeapObj { public: CFLS_LAB lab; PromotionInfo promo; @@ -229,7 +229,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration( if (CollectedHeap::use_parallel_gc_threads()) { typedef CMSParGCThreadState* CMSParGCThreadStatePtr; _par_gc_thread_states = - NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads); + NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads, mtGC); if (_par_gc_thread_states == NULL) { vm_exit_during_initialization("Could not allocate par gc structs"); } @@ -687,7 +687,7 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, warning("task_queues allocation failure."); return; } - _hash_seed = NEW_C_HEAP_ARRAY(int, num_queues); + _hash_seed = NEW_C_HEAP_ARRAY(int, num_queues, mtGC); if (_hash_seed == NULL) { warning("_hash_seed array allocation failure"); return; @@ -737,7 +737,7 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, assert(_young_gen != NULL, "no _young_gen"); _eden_chunk_index = 0; _eden_chunk_capacity = (_young_gen->max_capacity()+CMSSamplingGrain)/CMSSamplingGrain; - _eden_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, _eden_chunk_capacity); + _eden_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, _eden_chunk_capacity, mtGC); if (_eden_chunk_array == NULL) { _eden_chunk_capacity = 0; warning("GC/CMS: _eden_chunk_array allocation failure"); @@ -750,35 +750,35 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, const size_t max_plab_samples = ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize; - _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads); - _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples); - _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads); + _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads, mtGC); + _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples, mtGC); + _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads, mtGC); if (_survivor_plab_array == NULL || _survivor_chunk_array == NULL || _cursor == NULL) { warning("Failed to allocate survivor plab/chunk array"); if (_survivor_plab_array != NULL) { - FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array); + FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array, mtGC); _survivor_plab_array = NULL; } if (_survivor_chunk_array != NULL) { - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array, mtGC); _survivor_chunk_array = NULL; } if (_cursor != NULL) { - FREE_C_HEAP_ARRAY(size_t, _cursor); + FREE_C_HEAP_ARRAY(size_t, _cursor, mtGC); _cursor = NULL; } } else { _survivor_chunk_capacity = 2*max_plab_samples; for (uint i = 0; i < ParallelGCThreads; i++) { - HeapWord** vec = NEW_C_HEAP_ARRAY(HeapWord*, max_plab_samples); + HeapWord** vec = NEW_C_HEAP_ARRAY(HeapWord*, max_plab_samples, mtGC); if (vec == NULL) { warning("Failed to allocate survivor plab array"); for (int j = i; j > 0; j--) { - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_plab_array[j-1].array()); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_plab_array[j-1].array(), mtGC); } - FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array); - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array); + FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array, mtGC); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array, mtGC); _survivor_plab_array = NULL; _survivor_chunk_array = NULL; _survivor_chunk_capacity = 0; @@ -6332,10 +6332,10 @@ void CMSCollector::reset(bool asynch) { ) } -void CMSCollector::do_CMS_operation(CMS_op_type op) { +void CMSCollector::do_CMS_operation(CMS_op_type op, GCCause::Cause gc_cause) { gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - TraceTime t("GC", PrintGC, !PrintGCDetails, gclog_or_tty); + TraceTime t(GCCauseString("GC", gc_cause), PrintGC, !PrintGCDetails, gclog_or_tty); TraceCollectorStats tcs(counters()); switch (op) { diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index a84253888b0..3db4f11f785 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -161,7 +161,7 @@ class CMSBitMap VALUE_OBJ_CLASS_SPEC { // Represents a marking stack used by the CMS collector. // Ideally this should be GrowableArray<> just like MSC's marking stack(s). -class CMSMarkStack: public CHeapObj { +class CMSMarkStack: public CHeapObj { // friend class CMSCollector; // to get at expasion stats further below // @@ -265,7 +265,7 @@ class ModUnionClosurePar: public ModUnionClosure { // Survivor Chunk Array in support of parallelization of // Survivor Space rescan. -class ChunkArray: public CHeapObj { +class ChunkArray: public CHeapObj { size_t _index; size_t _capacity; size_t _overflows; @@ -506,7 +506,7 @@ private: }; -class CMSCollector: public CHeapObj { +class CMSCollector: public CHeapObj { friend class VMStructs; friend class ConcurrentMarkSweepThread; friend class ConcurrentMarkSweepGeneration; @@ -553,8 +553,8 @@ class CMSCollector: public CHeapObj { // The following array-pair keeps track of mark words // displaced for accomodating overflow list above. // This code will likely be revisited under RFE#4922830. - Stack _preserved_oop_stack; - Stack _preserved_mark_stack; + Stack _preserved_oop_stack; + Stack _preserved_mark_stack; int* _hash_seed; @@ -717,7 +717,7 @@ class CMSCollector: public CHeapObj { CMS_op_checkpointRootsFinal }; - void do_CMS_operation(CMS_op_type op); + void do_CMS_operation(CMS_op_type op, GCCause::Cause gc_cause); bool stop_world_and_do(CMS_op_type op); OopTaskQueueSet* task_queues() { return _task_queues; } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp index c3b9d54bec3..3b8d5aa0878 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp @@ -146,7 +146,7 @@ void VM_CMS_Initial_Mark::doit() { VM_CMS_Operation::verify_before_gc(); IsGCActiveMark x; // stop-world GC active - _collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsInitial); + _collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsInitial, gch->gc_cause()); VM_CMS_Operation::verify_after_gc(); #ifndef USDT2 @@ -178,7 +178,7 @@ void VM_CMS_Final_Remark::doit() { VM_CMS_Operation::verify_before_gc(); IsGCActiveMark x; // stop-world GC active - _collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsFinal); + _collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsFinal, gch->gc_cause()); VM_CMS_Operation::verify_after_gc(); #ifndef USDT2 diff --git a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp index e52476586c5..44ee2ad3476 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp @@ -28,7 +28,7 @@ #include "gc_implementation/g1/heapRegion.hpp" #include "utilities/growableArray.hpp" -class CollectionSetChooser: public CHeapObj { +class CollectionSetChooser: public CHeapObj { GrowableArray _regions; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp index a7b24607064..3eab85e13c8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "gc_implementation/g1/concurrentG1RefineThread.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1CollectorPolicy.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1RemSet.hpp" #include "gc_implementation/g1/heapRegionSeq.inline.hpp" #include "memory/space.inline.hpp" @@ -79,7 +80,7 @@ ConcurrentG1Refine::ConcurrentG1Refine() : _n_threads = _n_worker_threads + 1; reset_threshold_step(); - _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads); + _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads, mtGC); int worker_id_offset = (int)DirtyCardQueueSet::num_par_ids(); ConcurrentG1RefineThread *next = NULL; for (int i = _n_threads - 1; i >= 0; i--) { @@ -157,7 +158,7 @@ void ConcurrentG1Refine::init() { _def_use_cache = true; _use_cache = true; _hot_cache_size = (1 << G1ConcRSLogCacheSize); - _hot_cache = NEW_C_HEAP_ARRAY(jbyte*, _hot_cache_size); + _hot_cache = NEW_C_HEAP_ARRAY(jbyte*, _hot_cache_size, mtGC); _n_hot = 0; _hot_cache_idx = 0; @@ -191,18 +192,18 @@ ConcurrentG1Refine::~ConcurrentG1Refine() { // Please see the comment in allocate_card_count_cache // for why we call os::malloc() and os::free() directly. assert(_card_counts != NULL, "Logic"); - os::free(_card_counts); + os::free(_card_counts, mtGC); assert(_card_epochs != NULL, "Logic"); - os::free(_card_epochs); + os::free(_card_epochs, mtGC); assert(_hot_cache != NULL, "Logic"); - FREE_C_HEAP_ARRAY(jbyte*, _hot_cache); + FREE_C_HEAP_ARRAY(jbyte*, _hot_cache, mtGC); } if (_threads != NULL) { for (int i = 0; i < _n_threads; i++) { delete _threads[i]; } - FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads); + FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads, mtGC); } } @@ -436,17 +437,17 @@ bool ConcurrentG1Refine::allocate_card_count_cache(size_t n, size_t counts_size = n * sizeof(CardCountCacheEntry); size_t epochs_size = n * sizeof(CardEpochCacheEntry); - *counts = (CardCountCacheEntry*) os::malloc(counts_size); + *counts = (CardCountCacheEntry*) os::malloc(counts_size, mtGC); if (*counts == NULL) { // allocation was unsuccessful return false; } - *epochs = (CardEpochCacheEntry*) os::malloc(epochs_size); + *epochs = (CardEpochCacheEntry*) os::malloc(epochs_size, mtGC); if (*epochs == NULL) { // allocation was unsuccessful - free counts array assert(*counts != NULL, "must be"); - os::free(*counts); + os::free(*counts, mtGC); *counts = NULL; return false; } @@ -479,8 +480,8 @@ bool ConcurrentG1Refine::expand_card_count_cache(int cache_size_idx) { // Allocation was successful. // We can just free the old arrays; we're // not interested in preserving the contents - if (_card_counts != NULL) os::free(_card_counts); - if (_card_epochs != NULL) os::free(_card_epochs); + if (_card_counts != NULL) os::free(_card_counts, mtGC); + if (_card_epochs != NULL) os::free(_card_epochs, mtGC); // Cache the size of the arrays and the index that got us there. _n_card_counts = cache_size; @@ -500,11 +501,11 @@ bool ConcurrentG1Refine::expand_card_count_cache(int cache_size_idx) { } void ConcurrentG1Refine::clear_and_record_card_counts() { - if (G1ConcRSLogCacheSize == 0) return; + if (G1ConcRSLogCacheSize == 0) { + return; + } -#ifndef PRODUCT double start = os::elapsedTime(); -#endif if (_expand_card_counts) { int new_idx = _cache_size_index + 1; @@ -523,11 +524,8 @@ void ConcurrentG1Refine::clear_and_record_card_counts() { assert((this_epoch+1) <= max_jint, "to many periods"); // Update epoch _n_periods++; - -#ifndef PRODUCT - double elapsed = os::elapsedTime() - start; - _g1h->g1_policy()->record_cc_clear_time(elapsed * 1000.0); -#endif + double cc_clear_time_ms = (os::elapsedTime() - start) * 1000; + _g1h->g1_policy()->phase_times()->record_cc_clear_time_ms(cc_clear_time_ms); } void ConcurrentG1Refine::print_worker_threads_on(outputStream* st) const { diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp index 2379e189f9f..46a7d309cdc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp @@ -34,7 +34,7 @@ class ConcurrentG1RefineThread; class G1RemSet; -class ConcurrentG1Refine: public CHeapObj { +class ConcurrentG1Refine: public CHeapObj { ConcurrentG1RefineThread** _threads; int _n_threads; int _n_worker_threads; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index fd228964f7d..bee66147105 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -42,6 +42,7 @@ #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" // Concurrent marking bit map wrapper @@ -53,6 +54,8 @@ CMBitMapRO::CMBitMapRO(ReservedSpace rs, int shifter) : ReservedSpace brs(ReservedSpace::allocation_align_size_up( (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1)); + MemTracker::record_virtual_memory_type((address)brs.base(), mtGC); + guarantee(brs.is_reserved(), "couldn't allocate concurrent marking bit map"); // For now we'll just commit all of the bit map up fromt. // Later on we'll try to be more parsimonious with swap. @@ -161,7 +164,7 @@ CMMarkStack::CMMarkStack(ConcurrentMark* cm) : {} void CMMarkStack::allocate(size_t size) { - _base = NEW_C_HEAP_ARRAY(oop, size); + _base = NEW_C_HEAP_ARRAY(oop, size, mtGC); if (_base == NULL) { vm_exit_during_initialization("Failed to allocate CM region mark stack"); } @@ -173,7 +176,7 @@ void CMMarkStack::allocate(size_t size) { CMMarkStack::~CMMarkStack() { if (_base != NULL) { - FREE_C_HEAP_ARRAY(oop, _base); + FREE_C_HEAP_ARRAY(oop, _base, mtGC); } } @@ -480,11 +483,11 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : _root_regions.init(_g1h, this); - _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num); - _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num); + _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num, mtGC); + _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num, mtGC); - _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num); - _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num); + _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num, mtGC); + _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num, mtGC); BitMap::idx_t card_bm_size = _card_bm.size(); @@ -496,7 +499,7 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : _task_queues->register_queue(i, task_queue); _count_card_bitmaps[i] = BitMap(card_bm_size, false); - _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions); + _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions, mtGC); _tasks[i] = new CMTask(i, this, _count_marked_bytes[i], @@ -3153,9 +3156,6 @@ bool ConcurrentMark::do_yield_check(uint worker_id) { _g1h->g1_policy()->record_concurrent_pause(); } cmThread()->yield(); - if (worker_id == 0) { - _g1h->g1_policy()->record_concurrent_pause_end(); - } return true; } else { return false; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index ac1eff7aa40..c448e34fa2d 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -30,8 +30,8 @@ class G1CollectedHeap; class CMTask; -typedef GenericTaskQueue CMTaskQueue; -typedef GenericTaskQueueSet CMTaskQueueSet; +typedef GenericTaskQueue CMTaskQueue; +typedef GenericTaskQueueSet CMTaskQueueSet; // Closure used by CM during concurrent reference discovery // and reference processing (during remarking) to determine @@ -343,7 +343,7 @@ public: class ConcurrentMarkThread; -class ConcurrentMark : public CHeapObj { +class ConcurrentMark: public CHeapObj { friend class ConcurrentMarkThread; friend class CMTask; friend class CMBitMapClosure; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp index 9959260d51c..40d2aece12a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp @@ -293,7 +293,7 @@ void ConcurrentMarkThread::run() { // Java thread is waiting for a full GC to happen (e.g., it // called System.gc() with +ExplicitGCInvokesConcurrent). _sts.join(); - g1h->increment_full_collections_completed(true /* concurrent */); + g1h->increment_old_marking_cycles_completed(true /* concurrent */); _sts.leave(); } assert(_should_terminate, "just checking"); diff --git a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp index 88d47dbe16b..7a0b71356f7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp @@ -32,7 +32,7 @@ class FreeIdSet; // A closure class for processing card table entries. Note that we don't // require these closure objects to be stack-allocated. -class CardTableEntryClosure: public CHeapObj { +class CardTableEntryClosure: public CHeapObj { public: // Process the card whose card table entry is "card_ptr". If returns // "false", terminate the iteration early. diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp index d16685a7ebc..79f28250141 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp @@ -27,6 +27,7 @@ #include "memory/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" ////////////////////////////////////////////////////////////////////// // G1BlockOffsetSharedArray @@ -44,6 +45,9 @@ G1BlockOffsetSharedArray::G1BlockOffsetSharedArray(MemRegion reserved, if (!_vs.initialize(rs, 0)) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + _offset_array = (u_char*)_vs.low_boundary(); resize(init_word_size); if (TraceBlockOffsetTable) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp index b6a42c73eba..5621fd27ec8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp @@ -117,7 +117,7 @@ public: // Here is the shared array type. -class G1BlockOffsetSharedArray: public CHeapObj { +class G1BlockOffsetSharedArray: public CHeapObj { friend class G1BlockOffsetArray; friend class G1BlockOffsetArrayContigSpace; friend class VMStructs; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 270e52e32b4..c865db42883 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -33,6 +33,7 @@ #include "gc_implementation/g1/g1CollectorPolicy.hpp" #include "gc_implementation/g1/g1ErgoVerbose.hpp" #include "gc_implementation/g1/g1EvacFailure.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/g1MarkSweep.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" @@ -952,9 +953,18 @@ HeapWord* G1CollectedHeap::attempt_allocation_slow(size_t word_size, } should_try_gc = false; } else { - // Read the GC count while still holding the Heap_lock. - gc_count_before = total_collections(); - should_try_gc = true; + // The GCLocker may not be active but the GCLocker initiated + // GC may not yet have been performed (GCLocker::needs_gc() + // returns true). In this case we do not try this GC and + // wait until the GCLocker initiated GC is performed, and + // then retry the allocation. + if (GC_locker::needs_gc()) { + should_try_gc = false; + } else { + // Read the GC count while still holding the Heap_lock. + gc_count_before = total_collections(); + should_try_gc = true; + } } } @@ -975,6 +985,9 @@ HeapWord* G1CollectedHeap::attempt_allocation_slow(size_t word_size, return NULL; } } else { + // The GCLocker is either active or the GCLocker initiated + // GC has not yet been performed. Stall until it is and + // then retry the allocation. GC_locker::stall_until_clear(); } @@ -1054,9 +1067,18 @@ HeapWord* G1CollectedHeap::attempt_allocation_humongous(size_t word_size, if (GC_locker::is_active_and_needs_gc()) { should_try_gc = false; } else { - // Read the GC count while still holding the Heap_lock. - gc_count_before = total_collections(); - should_try_gc = true; + // The GCLocker may not be active but the GCLocker initiated + // GC may not yet have been performed (GCLocker::needs_gc() + // returns true). In this case we do not try this GC and + // wait until the GCLocker initiated GC is performed, and + // then retry the allocation. + if (GC_locker::needs_gc()) { + should_try_gc = false; + } else { + // Read the GC count while still holding the Heap_lock. + gc_count_before = total_collections(); + should_try_gc = true; + } } } @@ -1081,6 +1103,9 @@ HeapWord* G1CollectedHeap::attempt_allocation_humongous(size_t word_size, return NULL; } } else { + // The GCLocker is either active or the GCLocker initiated + // GC has not yet been performed. Stall until it is and + // then retry the allocation. GC_locker::stall_until_clear(); } @@ -1252,10 +1277,7 @@ bool G1CollectedHeap::do_collection(bool explicit_gc, gclog_or_tty->date_stamp(G1Log::fine() && PrintGCDateStamps); TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty); - char verbose_str[128]; - sprintf(verbose_str, "Full GC (%s)", GCCause::to_string(gc_cause())); - TraceTime t(verbose_str, G1Log::fine(), true, gclog_or_tty); - + TraceTime t(GCCauseString("Full GC", gc_cause()), G1Log::fine(), true, gclog_or_tty); TraceCollectorStats tcs(g1mm()->full_collection_counters()); TraceMemoryManagerStats tms(true /* fullGC */, gc_cause()); @@ -1278,6 +1300,7 @@ bool G1CollectedHeap::do_collection(bool explicit_gc, gc_prologue(true); increment_total_collections(true /* full gc */); + increment_old_marking_cycles_started(); size_t g1h_prev_used = used(); assert(used() == recalculate_used(), "Should be equal"); @@ -1471,22 +1494,28 @@ bool G1CollectedHeap::do_collection(bool explicit_gc, JavaThread::dirty_card_queue_set().abandon_logs(); assert(!G1DeferredRSUpdate || (G1DeferredRSUpdate && (dirty_card_queue_set().completed_buffers_num() == 0)), "Should not be any"); + + _young_list->reset_sampled_info(); + // At this point there should be no regions in the + // entire heap tagged as young. + assert( check_young_list_empty(true /* check_heap */), + "young list should be empty at this point"); + + // Update the number of full collections that have been completed. + increment_old_marking_cycles_completed(false /* concurrent */); + + _hrs.verify_optional(); + verify_region_sets_optional(); + + print_heap_after_gc(); + + // We must call G1MonitoringSupport::update_sizes() in the same scoping level + // as an active TraceMemoryManagerStats object (i.e. before the destructor for the + // TraceMemoryManagerStats is called) so that the G1 memory pools are updated + // before any GC notifications are raised. + g1mm()->update_sizes(); } - _young_list->reset_sampled_info(); - // At this point there should be no regions in the - // entire heap tagged as young. - assert( check_young_list_empty(true /* check_heap */), - "young list should be empty at this point"); - - // Update the number of full collections that have been completed. - increment_full_collections_completed(false /* concurrent */); - - _hrs.verify_optional(); - verify_region_sets_optional(); - - print_heap_after_gc(); - g1mm()->update_sizes(); post_full_gc_dump(); return true; @@ -1867,7 +1896,8 @@ G1CollectedHeap::G1CollectedHeap(G1CollectorPolicy* policy_) : _retained_old_gc_alloc_region(NULL), _expand_heap_after_alloc_failure(true), _surviving_young_words(NULL), - _full_collections_completed(0), + _old_marking_cycles_started(0), + _old_marking_cycles_completed(0), _in_cset_fast_test(NULL), _in_cset_fast_test_base(NULL), _dirty_cards_region_list(NULL), @@ -1887,14 +1917,14 @@ G1CollectedHeap::G1CollectedHeap(G1CollectorPolicy* policy_) : assert(n_rem_sets > 0, "Invariant."); HeapRegionRemSetIterator** iter_arr = - NEW_C_HEAP_ARRAY(HeapRegionRemSetIterator*, n_queues); + NEW_C_HEAP_ARRAY(HeapRegionRemSetIterator*, n_queues, mtGC); for (int i = 0; i < n_queues; i++) { iter_arr[i] = new HeapRegionRemSetIterator(); } _rem_set_iterator = iter_arr; - _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues); - _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues); + _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues, mtGC); + _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues, mtGC); for (int i = 0; i < n_queues; i++) { RefToScanQueue* q = new RefToScanQueue(); @@ -2053,7 +2083,7 @@ jint G1CollectedHeap::initialize() { _in_cset_fast_test_length = max_regions(); _in_cset_fast_test_base = - NEW_C_HEAP_ARRAY(bool, (size_t) _in_cset_fast_test_length); + NEW_C_HEAP_ARRAY(bool, (size_t) _in_cset_fast_test_length, mtGC); // We're biasing _in_cset_fast_test to avoid subtracting the // beginning of the heap every time we want to index; basically @@ -2245,7 +2275,7 @@ void G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure* cl, while (dcqs.apply_closure_to_completed_buffer(cl, worker_i, 0, true)) { n_completed_buffers++; } - g1_policy()->record_update_rs_processed_buffers(worker_i, + g1_policy()->phase_times()->record_update_rs_processed_buffers(worker_i, (double) n_completed_buffers); dcqs.clear_n_completed_buffers(); assert(!dcqs.completed_buffers_exist_dirty(), "Completed buffers exist!"); @@ -2339,7 +2369,16 @@ void G1CollectedHeap::allocate_dummy_regions() { } #endif // !PRODUCT -void G1CollectedHeap::increment_full_collections_completed(bool concurrent) { +void G1CollectedHeap::increment_old_marking_cycles_started() { + assert(_old_marking_cycles_started == _old_marking_cycles_completed || + _old_marking_cycles_started == _old_marking_cycles_completed + 1, + err_msg("Wrong marking cycle count (started: %d, completed: %d)", + _old_marking_cycles_started, _old_marking_cycles_completed)); + + _old_marking_cycles_started++; +} + +void G1CollectedHeap::increment_old_marking_cycles_completed(bool concurrent) { MonitorLockerEx x(FullGCCount_lock, Mutex::_no_safepoint_check_flag); // We assume that if concurrent == true, then the caller is a @@ -2347,11 +2386,6 @@ void G1CollectedHeap::increment_full_collections_completed(bool concurrent) { // Set. If there's ever a cheap way to check this, we should add an // assert here. - // We have already incremented _total_full_collections at the start - // of the GC, so total_full_collections() represents how many full - // collections have been started. - unsigned int full_collections_started = total_full_collections(); - // Given that this method is called at the end of a Full GC or of a // concurrent cycle, and those can be nested (i.e., a Full GC can // interrupt a concurrent cycle), the number of full collections @@ -2361,21 +2395,21 @@ void G1CollectedHeap::increment_full_collections_completed(bool concurrent) { // This is the case for the inner caller, i.e. a Full GC. assert(concurrent || - (full_collections_started == _full_collections_completed + 1) || - (full_collections_started == _full_collections_completed + 2), - err_msg("for inner caller (Full GC): full_collections_started = %u " - "is inconsistent with _full_collections_completed = %u", - full_collections_started, _full_collections_completed)); + (_old_marking_cycles_started == _old_marking_cycles_completed + 1) || + (_old_marking_cycles_started == _old_marking_cycles_completed + 2), + err_msg("for inner caller (Full GC): _old_marking_cycles_started = %u " + "is inconsistent with _old_marking_cycles_completed = %u", + _old_marking_cycles_started, _old_marking_cycles_completed)); // This is the case for the outer caller, i.e. the concurrent cycle. assert(!concurrent || - (full_collections_started == _full_collections_completed + 1), + (_old_marking_cycles_started == _old_marking_cycles_completed + 1), err_msg("for outer caller (concurrent cycle): " - "full_collections_started = %u " - "is inconsistent with _full_collections_completed = %u", - full_collections_started, _full_collections_completed)); + "_old_marking_cycles_started = %u " + "is inconsistent with _old_marking_cycles_completed = %u", + _old_marking_cycles_started, _old_marking_cycles_completed)); - _full_collections_completed += 1; + _old_marking_cycles_completed += 1; // We need to clear the "in_progress" flag in the CM thread before // we wake up any waiters (especially when ExplicitInvokesConcurrent @@ -2411,7 +2445,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { assert_heap_not_locked(); unsigned int gc_count_before; - unsigned int full_gc_count_before; + unsigned int old_marking_count_before; bool retry_gc; do { @@ -2422,7 +2456,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { // Read the GC count while holding the Heap_lock gc_count_before = total_collections(); - full_gc_count_before = total_full_collections(); + old_marking_count_before = _old_marking_cycles_started; } if (should_do_concurrent_full_gc(cause)) { @@ -2437,7 +2471,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { VMThread::execute(&op); if (!op.pause_succeeded()) { - if (full_gc_count_before == total_full_collections()) { + if (old_marking_count_before == _old_marking_cycles_started) { retry_gc = op.should_retry_gc(); } else { // A Full GC happened while we were trying to schedule the @@ -2465,7 +2499,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { VMThread::execute(&op); } else { // Schedule a Full GC. - VM_G1CollectFull op(gc_count_before, full_gc_count_before, cause); + VM_G1CollectFull op(gc_count_before, old_marking_count_before, cause); VMThread::execute(&op); } } @@ -3472,7 +3506,7 @@ void G1CollectedHeap::setup_surviving_young_words() { assert(_surviving_young_words == NULL, "pre-condition"); uint array_length = g1_policy()->young_cset_region_length(); - _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, (size_t) array_length); + _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, (size_t) array_length, mtGC); if (_surviving_young_words == NULL) { vm_exit_out_of_memory(sizeof(size_t) * array_length, "Not enough space for young surv words summary."); @@ -3497,7 +3531,7 @@ G1CollectedHeap::update_surviving_young_words(size_t* surv_young_words) { void G1CollectedHeap::cleanup_surviving_young_words() { guarantee( _surviving_young_words != NULL, "pre-condition" ); - FREE_C_HEAP_ARRAY(size_t, _surviving_young_words); + FREE_C_HEAP_ARRAY(size_t, _surviving_young_words, mtGC); _surviving_young_words = NULL; } @@ -3592,7 +3626,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { if (g1_policy()->during_initial_mark_pause()) { // We are about to start a marking cycle, so we increment the // full collection counter. - increment_total_full_collections(); + increment_old_marking_cycles_started(); } // if the log level is "finer" is on, we'll print long statistics information // in the collector policy code, so let's not print this as the output @@ -3600,12 +3634,10 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { gclog_or_tty->date_stamp(G1Log::fine() && PrintGCDateStamps); TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty); - char verbose_str[128]; - sprintf(verbose_str, "GC pause (%s) (%s)%s", - GCCause::to_string(gc_cause()), - g1_policy()->gcs_are_young() ? "young" : "mixed", - g1_policy()->during_initial_mark_pause() ? " (initial-mark)" : ""); - TraceTime t(verbose_str, G1Log::fine() && !G1Log::finer(), true, gclog_or_tty); + int active_workers = (G1CollectedHeap::use_parallel_gc_threads() ? + workers()->active_workers() : 1); + g1_policy()->phase_times()->note_gc_start(os::elapsedTime(), active_workers, + g1_policy()->gcs_are_young(), g1_policy()->during_initial_mark_pause(), gc_cause()); TraceCollectorStats tcs(g1mm()->incremental_collection_counters()); TraceMemoryManagerStats tms(false /* fullGC */, gc_cause()); @@ -3668,9 +3700,15 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { // before the start GC event. _hr_printer.start_gc(false /* full */, (size_t) total_collections()); + // This timing is only used by the ergonomics to handle our pause target. + // It is unclear why this should not include the full pause. We will + // investigate this in CR 7178365. + // + // Preserving the old comment here if that helps the investigation: + // // The elapsed time induced by the start time below deliberately elides // the possible verification above. - double start_time_sec = os::elapsedTime(); + double sample_start_time_sec = os::elapsedTime(); size_t start_used_bytes = used(); #if YOUNG_LIST_VERBOSE @@ -3679,7 +3717,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); #endif // YOUNG_LIST_VERBOSE - g1_policy()->record_collection_pause_start(start_time_sec, + g1_policy()->record_collection_pause_start(sample_start_time_sec, start_used_bytes); double scan_wait_start = os::elapsedTime(); @@ -3688,11 +3726,12 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { // objects on them have been correctly scanned before we start // moving them during the GC. bool waited = _cm->root_regions()->wait_until_scan_finished(); + double wait_time_ms = 0.0; if (waited) { double scan_wait_end = os::elapsedTime(); - double wait_time_ms = (scan_wait_end - scan_wait_start) * 1000.0; - g1_policy()->record_root_region_scan_wait_time(wait_time_ms); + wait_time_ms = (scan_wait_end - scan_wait_start) * 1000.0; } + g1_policy()->phase_times()->record_root_region_scan_wait_time(wait_time_ms); #if YOUNG_LIST_VERBOSE gclog_or_tty->print_cr("\nAfter recording pause start.\nYoung_list:"); @@ -3846,12 +3885,16 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { true /* verify_fingers */); _cm->note_end_of_gc(); - double end_time_sec = os::elapsedTime(); - double pause_time_ms = (end_time_sec - start_time_sec) * MILLIUNITS; - g1_policy()->record_pause_time_ms(pause_time_ms); - int active_workers = (G1CollectedHeap::use_parallel_gc_threads() ? - workers()->active_workers() : 1); - g1_policy()->record_collection_pause_end(active_workers); + // Collect thread local data to allow the ergonomics to use + // the collected information + g1_policy()->phase_times()->collapse_par_times(); + + // This timing is only used by the ergonomics to handle our pause target. + // It is unclear why this should not include the full pause. We will + // investigate this in CR 7178365. + double sample_end_time_sec = os::elapsedTime(); + double pause_time_ms = (sample_end_time_sec - sample_start_time_sec) * MILLIUNITS; + g1_policy()->record_collection_pause_end(pause_time_ms); MemoryService::track_memory_usage(); @@ -3898,9 +3941,6 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { // RETIRE events are generated before the end GC event. _hr_printer.end_gc(false /* full */, (size_t) total_collections()); - // We have to do this after we decide whether to expand the heap or not. - g1_policy()->print_heap_transition(); - if (mark_in_progress()) { concurrent_mark()->update_g1_committed(); } @@ -3910,33 +3950,33 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { #endif gc_epilogue(false); + + g1_policy()->phase_times()->note_gc_end(os::elapsedTime()); + + // We have to do this after we decide whether to expand the heap or not. + g1_policy()->print_heap_transition(); } - if (ExitAfterGCNum > 0 && total_collections() == ExitAfterGCNum) { - gclog_or_tty->print_cr("Stopping after GC #%d", ExitAfterGCNum); - print_tracing_info(); - vm_exit(-1); - } + // It is not yet to safe to tell the concurrent mark to + // start as we have some optional output below. We don't want the + // output from the concurrent mark thread interfering with this + // logging output either. + + _hrs.verify_optional(); + verify_region_sets_optional(); + + TASKQUEUE_STATS_ONLY(if (ParallelGCVerbose) print_taskqueue_stats()); + TASKQUEUE_STATS_ONLY(reset_taskqueue_stats()); + + print_heap_after_gc(); + + // We must call G1MonitoringSupport::update_sizes() in the same scoping level + // as an active TraceMemoryManagerStats object (i.e. before the destructor for the + // TraceMemoryManagerStats is called) so that the G1 memory pools are updated + // before any GC notifications are raised. + g1mm()->update_sizes(); } - // The closing of the inner scope, immediately above, will complete - // logging at the "fine" level. The record_collection_pause_end() call - // above will complete logging at the "finer" level. - // - // It is not yet to safe, however, to tell the concurrent mark to - // start as we have some optional output below. We don't want the - // output from the concurrent mark thread interfering with this - // logging output either. - - _hrs.verify_optional(); - verify_region_sets_optional(); - - TASKQUEUE_STATS_ONLY(if (ParallelGCVerbose) print_taskqueue_stats()); - TASKQUEUE_STATS_ONLY(reset_taskqueue_stats()); - - print_heap_after_gc(); - g1mm()->update_sizes(); - if (G1SummarizeRSetStats && (G1SummarizeRSetStatsPeriod > 0) && (total_collections() % G1SummarizeRSetStatsPeriod == 0)) { @@ -4043,7 +4083,7 @@ void G1CollectedHeap::abandon_gc_alloc_regions() { void G1CollectedHeap::init_for_evac_failure(OopsInHeapRegionClosure* cl) { _drain_in_progress = false; set_evac_failure_closure(cl); - _evac_failure_scan_stack = new (ResourceObj::C_HEAP) GrowableArray(40, true); + _evac_failure_scan_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); } void G1CollectedHeap::finalize_for_evac_failure() { @@ -4177,9 +4217,9 @@ void G1CollectedHeap::preserve_mark_if_necessary(oop obj, markOop m) { if (_objs_with_preserved_marks == NULL) { assert(_preserved_marks_of_objs == NULL, "Both or none."); _objs_with_preserved_marks = - new (ResourceObj::C_HEAP) GrowableArray(40, true); + new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); _preserved_marks_of_objs = - new (ResourceObj::C_HEAP) GrowableArray(40, true); + new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); } _objs_with_preserved_marks->push(obj); _preserved_marks_of_objs->push(m); @@ -4239,7 +4279,7 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num) uint array_length = PADDING_ELEM_NUM + real_length + PADDING_ELEM_NUM; - _surviving_young_words_base = NEW_C_HEAP_ARRAY(size_t, array_length); + _surviving_young_words_base = NEW_C_HEAP_ARRAY(size_t, array_length, mtGC); if (_surviving_young_words_base == NULL) vm_exit_out_of_memory(array_length * sizeof(size_t), "Not enough space for young surv histo."); @@ -4665,7 +4705,7 @@ public: if (worker_id >= _n_workers) return; // no work needed this round double start_time_ms = os::elapsedTime() * 1000.0; - _g1h->g1_policy()->record_gc_worker_start_time(worker_id, start_time_ms); + _g1h->g1_policy()->phase_times()->record_gc_worker_start_time(worker_id, start_time_ms); { ResourceMark rm; @@ -4714,15 +4754,12 @@ public: evac.do_void(); double elapsed_ms = (os::elapsedTime()-start)*1000.0; double term_ms = pss.term_time()*1000.0; - _g1h->g1_policy()->record_obj_copy_time(worker_id, elapsed_ms-term_ms); - _g1h->g1_policy()->record_termination(worker_id, term_ms, pss.term_attempts()); + _g1h->g1_policy()->phase_times()->record_obj_copy_time(worker_id, elapsed_ms-term_ms); + _g1h->g1_policy()->phase_times()->record_termination(worker_id, term_ms, pss.term_attempts()); } _g1h->g1_policy()->record_thread_age_table(pss.age_table()); _g1h->update_surviving_young_words(pss.surviving_young_words()+1); - // Clean up any par-expanded rem sets. - HeapRegionRemSet::par_cleanup(); - if (ParallelGCVerbose) { MutexLocker x(stats_lock()); pss.print_termination_stats(worker_id); @@ -4736,7 +4773,7 @@ public: } double end_time_ms = os::elapsedTime() * 1000.0; - _g1h->g1_policy()->record_gc_worker_end_time(worker_id, end_time_ms); + _g1h->g1_policy()->phase_times()->record_gc_worker_end_time(worker_id, end_time_ms); } }; @@ -4847,15 +4884,15 @@ g1_process_strong_roots(bool collecting_perm_gen, double ext_roots_end = os::elapsedTime(); - g1_policy()->reset_obj_copy_time(worker_i); + g1_policy()->phase_times()->reset_obj_copy_time(worker_i); double obj_copy_time_sec = buf_scan_perm.closure_app_seconds() + buf_scan_non_heap_roots.closure_app_seconds(); - g1_policy()->record_obj_copy_time(worker_i, obj_copy_time_sec * 1000.0); + g1_policy()->phase_times()->record_obj_copy_time(worker_i, obj_copy_time_sec * 1000.0); double ext_root_time_ms = ((ext_roots_end - ext_roots_start) - obj_copy_time_sec) * 1000.0; - g1_policy()->record_ext_root_scan_time(worker_i, ext_root_time_ms); + g1_policy()->phase_times()->record_ext_root_scan_time(worker_i, ext_root_time_ms); // During conc marking we have to filter the per-thread SATB buffers // to make sure we remove any oops into the CSet (which will show up @@ -4866,7 +4903,7 @@ g1_process_strong_roots(bool collecting_perm_gen, } } double satb_filtering_ms = (os::elapsedTime() - ext_roots_end) * 1000.0; - g1_policy()->record_satb_filtering_time(worker_i, satb_filtering_ms); + g1_policy()->phase_times()->record_satb_filtering_time(worker_i, satb_filtering_ms); // Now scan the complement of the collection set. if (scan_rs != NULL) { @@ -5366,7 +5403,7 @@ void G1CollectedHeap::process_discovered_references() { assert(pss.refs()->is_empty(), "both queue and overflow should be empty"); double ref_proc_time = os::elapsedTime() - ref_proc_start; - g1_policy()->record_ref_proc_time(ref_proc_time * 1000.0); + g1_policy()->phase_times()->record_ref_proc_time(ref_proc_time * 1000.0); } // Weak Reference processing during an evacuation pause (part 2). @@ -5403,7 +5440,7 @@ void G1CollectedHeap::enqueue_discovered_references() { // and could signicantly increase the pause time. double ref_enq_time = os::elapsedTime() - ref_enq_start; - g1_policy()->record_ref_enq_time(ref_enq_time * 1000.0); + g1_policy()->phase_times()->record_ref_enq_time(ref_enq_time * 1000.0); } void G1CollectedHeap::evacuate_collection_set() { @@ -5466,11 +5503,11 @@ void G1CollectedHeap::evacuate_collection_set() { } double par_time_ms = (end_par_time_sec - start_par_time_sec) * 1000.0; - g1_policy()->record_par_time(par_time_ms); + g1_policy()->phase_times()->record_par_time(par_time_ms); double code_root_fixup_time_ms = (os::elapsedTime() - end_par_time_sec) * 1000.0; - g1_policy()->record_code_root_fixup_time(code_root_fixup_time_ms); + g1_policy()->phase_times()->record_code_root_fixup_time(code_root_fixup_time_ms); set_par_threads(0); @@ -5502,7 +5539,7 @@ void G1CollectedHeap::evacuate_collection_set() { if (evacuation_failed()) { remove_self_forwarding_pointers(); if (G1Log::finer()) { - gclog_or_tty->print(" (to-space overflow)"); + gclog_or_tty->print(" (to-space exhausted)"); } else if (G1Log::fine()) { gclog_or_tty->print("--"); } @@ -5732,7 +5769,7 @@ void G1CollectedHeap::cleanUpCardTable() { } double elapsed = os::elapsedTime() - start; - g1_policy()->record_clear_ct_time(elapsed * 1000.0); + g1_policy()->phase_times()->record_clear_ct_time(elapsed * 1000.0); } void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { @@ -5841,8 +5878,8 @@ void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { NULL /* old_proxy_set */, NULL /* humongous_proxy_set */, false /* par */); - policy->record_young_free_cset_time_ms(young_time_ms); - policy->record_non_young_free_cset_time_ms(non_young_time_ms); + policy->phase_times()->record_young_free_cset_time_ms(young_time_ms); + policy->phase_times()->record_non_young_free_cset_time_ms(non_young_time_ms); } // This routine is similar to the above but does not record diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index 9b8e795c024..611cdd0b5ca 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -62,8 +62,8 @@ class ConcurrentMarkThread; class ConcurrentG1Refine; class GenerationCounters; -typedef OverflowTaskQueue RefToScanQueue; -typedef GenericTaskQueueSet RefToScanQueueSet; +typedef OverflowTaskQueue RefToScanQueue; +typedef GenericTaskQueueSet RefToScanQueueSet; typedef int RegionIdx_t; // needs to hold [ 0..max_regions() ) typedef int CardIdx_t; // needs to hold [ 0..CardsPerRegion ) @@ -74,7 +74,7 @@ enum GCAllocPurpose { GCAllocPurposeCount }; -class YoungList : public CHeapObj { +class YoungList : public CHeapObj { private: G1CollectedHeap* _g1h; @@ -359,10 +359,13 @@ private: // (c) cause == _g1_humongous_allocation bool should_do_concurrent_full_gc(GCCause::Cause cause); - // Keeps track of how many "full collections" (i.e., Full GCs or - // concurrent cycles) we have completed. The number of them we have - // started is maintained in _total_full_collections in CollectedHeap. - volatile unsigned int _full_collections_completed; + // Keeps track of how many "old marking cycles" (i.e., Full GCs or + // concurrent cycles) we have started. + volatile unsigned int _old_marking_cycles_started; + + // Keeps track of how many "old marking cycles" (i.e., Full GCs or + // concurrent cycles) we have completed. + volatile unsigned int _old_marking_cycles_completed; // This is a non-product method that is helpful for testing. It is // called at the end of a GC and artificially expands the heap by @@ -673,8 +676,12 @@ public: (size_t) _in_cset_fast_test_length * sizeof(bool)); } + // This is called at the start of either a concurrent cycle or a Full + // GC to update the number of old marking cycles started. + void increment_old_marking_cycles_started(); + // This is called at the end of either a concurrent cycle or a Full - // GC to update the number of full collections completed. Those two + // GC to update the number of old marking cycles completed. Those two // can happen in a nested fashion, i.e., we start a concurrent // cycle, a Full GC happens half-way through it which ends first, // and then the cycle notices that a Full GC happened and ends @@ -683,14 +690,14 @@ public: // false, the caller is the inner caller in the nesting (i.e., the // Full GC). If concurrent is true, the caller is the outer caller // in this nesting (i.e., the concurrent cycle). Further nesting is - // not currently supported. The end of the this call also notifies + // not currently supported. The end of this call also notifies // the FullGCCount_lock in case a Java thread is waiting for a full // GC to happen (e.g., it called System.gc() with // +ExplicitGCInvokesConcurrent). - void increment_full_collections_completed(bool concurrent); + void increment_old_marking_cycles_completed(bool concurrent); - unsigned int full_collections_completed() { - return _full_collections_completed; + unsigned int old_marking_cycles_completed() { + return _old_marking_cycles_completed; } G1HRPrinter* hr_printer() { return &_hr_printer; } @@ -1765,7 +1772,7 @@ public: G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num); ~G1ParScanThreadState() { - FREE_C_HEAP_ARRAY(size_t, _surviving_young_words_base); + FREE_C_HEAP_ARRAY(size_t, _surviving_young_words_base, mtGC); } RefToScanQueue* refs() { return _refs; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index a4060618131..f07b14824d0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -29,6 +29,7 @@ #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1CollectorPolicy.hpp" #include "gc_implementation/g1/g1ErgoVerbose.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/heapRegionRemSet.hpp" #include "gc_implementation/shared/gcPolicyCounters.hpp" @@ -77,88 +78,12 @@ static double non_young_other_cost_per_region_ms_defaults[] = { 1.0, 0.7, 0.7, 0.5, 0.5, 0.42, 0.42, 0.30 }; -// Help class for avoiding interleaved logging -class LineBuffer: public StackObj { - -private: - static const int BUFFER_LEN = 1024; - static const int INDENT_CHARS = 3; - char _buffer[BUFFER_LEN]; - int _indent_level; - int _cur; - - void vappend(const char* format, va_list ap) { - int res = vsnprintf(&_buffer[_cur], BUFFER_LEN - _cur, format, ap); - if (res != -1) { - _cur += res; - } else { - DEBUG_ONLY(warning("buffer too small in LineBuffer");) - _buffer[BUFFER_LEN -1] = 0; - _cur = BUFFER_LEN; // vsnprintf above should not add to _buffer if we are called again - } - } - -public: - explicit LineBuffer(int indent_level): _indent_level(indent_level), _cur(0) { - for (; (_cur < BUFFER_LEN && _cur < (_indent_level * INDENT_CHARS)); _cur++) { - _buffer[_cur] = ' '; - } - } - -#ifndef PRODUCT - ~LineBuffer() { - assert(_cur == _indent_level * INDENT_CHARS, "pending data in buffer - append_and_print_cr() not called?"); - } -#endif - - void append(const char* format, ...) { - va_list ap; - va_start(ap, format); - vappend(format, ap); - va_end(ap); - } - - void append_and_print_cr(const char* format, ...) { - va_list ap; - va_start(ap, format); - vappend(format, ap); - va_end(ap); - gclog_or_tty->print_cr("%s", _buffer); - _cur = _indent_level * INDENT_CHARS; - } -}; - G1CollectorPolicy::G1CollectorPolicy() : _parallel_gc_threads(G1CollectedHeap::use_parallel_gc_threads() ? ParallelGCThreads : 1), _recent_gc_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), - _all_pause_times_ms(new NumberSeq()), _stop_world_start(0.0), - _all_stop_world_times_ms(new NumberSeq()), - _all_yield_times_ms(new NumberSeq()), - - _summary(new Summary()), - - _cur_clear_ct_time_ms(0.0), - _root_region_scan_wait_time_ms(0.0), - - _cur_ref_proc_time_ms(0.0), - _cur_ref_enq_time_ms(0.0), - -#ifndef PRODUCT - _min_clear_cc_time_ms(-1.0), - _max_clear_cc_time_ms(-1.0), - _cur_clear_cc_time_ms(0.0), - _cum_clear_cc_time_ms(0.0), - _num_cc_clears(0L), -#endif - - _aux_num(10), - _all_aux_times_ms(new NumberSeq[_aux_num]), - _cur_aux_start_times_ms(new double[_aux_num]), - _cur_aux_times_ms(new double[_aux_num]), - _cur_aux_times_set(new bool[_aux_num]), _concurrent_mark_remark_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), _concurrent_mark_cleanup_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), @@ -185,8 +110,6 @@ G1CollectorPolicy::G1CollectorPolicy() : _pause_time_target_ms((double) MaxGCPauseMillis), _gcs_are_young(true), - _young_pause_num(0), - _mixed_pause_num(0), _during_marking(false), _in_marking_window(false), @@ -197,8 +120,6 @@ G1CollectorPolicy::G1CollectorPolicy() : _recent_avg_pause_time_ratio(0.0), - _all_full_gc_times_ms(new NumberSeq()), - _initiate_conc_mark_if_possible(false), _during_initial_mark_pause(false), _last_young_gc(false), @@ -272,30 +193,9 @@ G1CollectorPolicy::G1CollectorPolicy() : _recent_prev_end_times_for_all_gcs_sec->add(os::elapsedTime()); _prev_collection_pause_end_ms = os::elapsedTime() * 1000.0; - _par_last_gc_worker_start_times_ms = new double[_parallel_gc_threads]; - _par_last_ext_root_scan_times_ms = new double[_parallel_gc_threads]; - _par_last_satb_filtering_times_ms = new double[_parallel_gc_threads]; + _phase_times = new G1GCPhaseTimes(_parallel_gc_threads); - _par_last_update_rs_times_ms = new double[_parallel_gc_threads]; - _par_last_update_rs_processed_buffers = new double[_parallel_gc_threads]; - - _par_last_scan_rs_times_ms = new double[_parallel_gc_threads]; - - _par_last_obj_copy_times_ms = new double[_parallel_gc_threads]; - - _par_last_termination_times_ms = new double[_parallel_gc_threads]; - _par_last_termination_attempts = new double[_parallel_gc_threads]; - _par_last_gc_worker_end_times_ms = new double[_parallel_gc_threads]; - _par_last_gc_worker_times_ms = new double[_parallel_gc_threads]; - _par_last_gc_worker_other_times_ms = new double[_parallel_gc_threads]; - - int index; - if (ParallelGCThreads == 0) - index = 0; - else if (ParallelGCThreads > 8) - index = 7; - else - index = ParallelGCThreads - 1; + int index = MIN2(_parallel_gc_threads - 1, 7); _pending_card_diff_seq->add(0.0); _rs_length_diff_seq->add(rs_length_diff_defaults[index]); @@ -839,7 +739,7 @@ G1CollectorPolicy::verify_young_ages(HeapRegion* head, #endif // PRODUCT void G1CollectorPolicy::record_full_collection_start() { - _cur_collection_start_sec = os::elapsedTime(); + _full_collection_start_sec = os::elapsedTime(); // Release the future to-space so that it is available for compaction into. _g1->set_full_collection(); } @@ -848,10 +748,10 @@ void G1CollectorPolicy::record_full_collection_end() { // Consider this like a collection pause for the purposes of allocation // since last pause. double end_sec = os::elapsedTime(); - double full_gc_time_sec = end_sec - _cur_collection_start_sec; + double full_gc_time_sec = end_sec - _full_collection_start_sec; double full_gc_time_ms = full_gc_time_sec * 1000.0; - _all_full_gc_times_ms->add(full_gc_time_ms); + _trace_gen1_time_data.record_full_collection(full_gc_time_ms); update_recent_gc_times(end_sec, full_gc_time_ms); @@ -884,13 +784,6 @@ void G1CollectorPolicy::record_stop_world_start() { void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, size_t start_used) { - if (G1Log::finer()) { - gclog_or_tty->stamp(PrintGCTimeStamps); - gclog_or_tty->print("[GC pause (%s) (%s)", - GCCause::to_string(_g1->gc_cause()), - gcs_are_young() ? "young" : "mixed"); - } - // We only need to do this here as the policy will only be applied // to the GC we're about to start. so, no point is calculating this // every time we calculate / recalculate the target young length. @@ -901,10 +794,10 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, _g1->used(), _g1->recalculate_used())); double s_w_t_ms = (start_time_sec - _stop_world_start) * 1000.0; - _all_stop_world_times_ms->add(s_w_t_ms); + _trace_gen0_time_data.record_start_collection(s_w_t_ms); _stop_world_start = 0.0; - _cur_collection_start_sec = start_time_sec; + phase_times()->_cur_collection_start_sec = start_time_sec; _cur_collection_pause_used_at_start_bytes = start_used; _cur_collection_pause_used_regions_at_start = _g1->used_regions(); _pending_cards = _g1->pending_card_num(); @@ -918,35 +811,6 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, _survivor_bytes_before_gc = young_list->survivor_used_bytes(); _capacity_before_gc = _g1->capacity(); -#ifdef DEBUG - // initialise these to something well known so that we can spot - // if they are not set properly - - for (int i = 0; i < _parallel_gc_threads; ++i) { - _par_last_gc_worker_start_times_ms[i] = -1234.0; - _par_last_ext_root_scan_times_ms[i] = -1234.0; - _par_last_satb_filtering_times_ms[i] = -1234.0; - _par_last_update_rs_times_ms[i] = -1234.0; - _par_last_update_rs_processed_buffers[i] = -1234.0; - _par_last_scan_rs_times_ms[i] = -1234.0; - _par_last_obj_copy_times_ms[i] = -1234.0; - _par_last_termination_times_ms[i] = -1234.0; - _par_last_termination_attempts[i] = -1234.0; - _par_last_gc_worker_end_times_ms[i] = -1234.0; - _par_last_gc_worker_times_ms[i] = -1234.0; - _par_last_gc_worker_other_times_ms[i] = -1234.0; - } -#endif - - for (int i = 0; i < _aux_num; ++i) { - _cur_aux_times_ms[i] = 0.0; - _cur_aux_times_set[i] = false; - } - - // This is initialized to zero here and is set during the evacuation - // pause if we actually waited for the root region scanning to finish. - _root_region_scan_wait_time_ms = 0.0; - _last_gc_was_young = false; // do that for any other surv rate groups @@ -991,136 +855,10 @@ void G1CollectorPolicy::record_concurrent_mark_cleanup_completed() { void G1CollectorPolicy::record_concurrent_pause() { if (_stop_world_start > 0.0) { double yield_ms = (os::elapsedTime() - _stop_world_start) * 1000.0; - _all_yield_times_ms->add(yield_ms); + _trace_gen0_time_data.record_yield_time(yield_ms); } } -void G1CollectorPolicy::record_concurrent_pause_end() { -} - -template -T sum_of(T* sum_arr, int start, int n, int N) { - T sum = (T)0; - for (int i = 0; i < n; i++) { - int j = (start + i) % N; - sum += sum_arr[j]; - } - return sum; -} - -void G1CollectorPolicy::print_par_stats(int level, - const char* str, - double* data) { - double min = data[0], max = data[0]; - double total = 0.0; - LineBuffer buf(level); - buf.append("[%s (ms):", str); - for (uint i = 0; i < no_of_gc_threads(); ++i) { - double val = data[i]; - if (val < min) - min = val; - if (val > max) - max = val; - total += val; - if (G1Log::finest()) { - buf.append(" %.1lf", val); - } - } - - if (G1Log::finest()) { - buf.append_and_print_cr(""); - } - double avg = total / (double) no_of_gc_threads(); - buf.append_and_print_cr(" Avg: %.1lf Min: %.1lf Max: %.1lf Diff: %.1lf]", - avg, min, max, max - min); -} - -void G1CollectorPolicy::print_par_sizes(int level, - const char* str, - double* data) { - double min = data[0], max = data[0]; - double total = 0.0; - LineBuffer buf(level); - buf.append("[%s :", str); - for (uint i = 0; i < no_of_gc_threads(); ++i) { - double val = data[i]; - if (val < min) - min = val; - if (val > max) - max = val; - total += val; - buf.append(" %d", (int) val); - } - buf.append_and_print_cr(""); - double avg = total / (double) no_of_gc_threads(); - buf.append_and_print_cr(" Sum: %d, Avg: %d, Min: %d, Max: %d, Diff: %d]", - (int)total, (int)avg, (int)min, (int)max, (int)max - (int)min); -} - -void G1CollectorPolicy::print_stats(int level, - const char* str, - double value) { - LineBuffer(level).append_and_print_cr("[%s: %5.1lf ms]", str, value); -} - -void G1CollectorPolicy::print_stats(int level, - const char* str, - int value) { - LineBuffer(level).append_and_print_cr("[%s: %d]", str, value); -} - -double G1CollectorPolicy::avg_value(double* data) { - if (G1CollectedHeap::use_parallel_gc_threads()) { - double ret = 0.0; - for (uint i = 0; i < no_of_gc_threads(); ++i) { - ret += data[i]; - } - return ret / (double) no_of_gc_threads(); - } else { - return data[0]; - } -} - -double G1CollectorPolicy::max_value(double* data) { - if (G1CollectedHeap::use_parallel_gc_threads()) { - double ret = data[0]; - for (uint i = 1; i < no_of_gc_threads(); ++i) { - if (data[i] > ret) { - ret = data[i]; - } - } - return ret; - } else { - return data[0]; - } -} - -double G1CollectorPolicy::sum_of_values(double* data) { - if (G1CollectedHeap::use_parallel_gc_threads()) { - double sum = 0.0; - for (uint i = 0; i < no_of_gc_threads(); i++) { - sum += data[i]; - } - return sum; - } else { - return data[0]; - } -} - -double G1CollectorPolicy::max_sum(double* data1, double* data2) { - double ret = data1[0] + data2[0]; - - if (G1CollectedHeap::use_parallel_gc_threads()) { - for (uint i = 1; i < no_of_gc_threads(); ++i) { - double data = data1[i] + data2[i]; - if (data > ret) { - ret = data; - } - } - } - return ret; -} - bool G1CollectorPolicy::need_to_start_conc_mark(const char* source, size_t alloc_word_size) { if (_g1->concurrent_mark()->cmThread()->during_cycle()) { return false; @@ -1168,10 +906,8 @@ bool G1CollectorPolicy::need_to_start_conc_mark(const char* source, size_t alloc // Anything below that is considered to be zero #define MIN_TIMER_GRANULARITY 0.0000001 -void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { +void G1CollectorPolicy::record_collection_pause_end(double pause_time_ms) { double end_time_sec = os::elapsedTime(); - double elapsed_ms = _last_pause_time_ms; - bool parallel = G1CollectedHeap::use_parallel_gc_threads(); assert(_cur_collection_pause_used_regions_at_start >= cset_region_length(), "otherwise, the subtraction below does not make sense"); size_t rs_size = @@ -1180,7 +916,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { assert(cur_used_bytes == _g1->recalculate_used(), "It should!"); bool last_pause_included_initial_mark = false; bool update_stats = !_g1->evacuation_failed(); - set_no_of_gc_threads(no_of_gc_threads); #ifndef PRODUCT if (G1YoungSurvRateVerbose) { @@ -1200,24 +935,9 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { set_initiate_conc_mark_if_possible(); } - _mmu_tracker->add_pause(end_time_sec - elapsed_ms/1000.0, + _mmu_tracker->add_pause(end_time_sec - pause_time_ms/1000.0, end_time_sec, false); - // This assert is exempted when we're doing parallel collection pauses, - // because the fragmentation caused by the parallel GC allocation buffers - // can lead to more memory being used during collection than was used - // before. Best leave this out until the fragmentation problem is fixed. - // Pauses in which evacuation failed can also lead to negative - // collections, since no space is reclaimed from a region containing an - // object whose evacuation failed. - // Further, we're now always doing parallel collection. But I'm still - // leaving this here as a placeholder for a more precise assertion later. - // (DLD, 10/05.) - assert((true || parallel) // Always using GC LABs now. - || _g1->evacuation_failed() - || _cur_collection_pause_used_at_start_bytes >= cur_used_bytes, - "Negative collection"); - size_t freed_bytes = _cur_collection_pause_used_at_start_bytes - cur_used_bytes; size_t surviving_bytes = _collection_set_bytes_used_before - freed_bytes; @@ -1226,87 +946,11 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { (double)surviving_bytes/ (double)_collection_set_bytes_used_before; - // These values are used to update the summary information that is - // displayed when TraceGen0Time is enabled, and are output as part - // of the "finer" output, in the non-parallel case. - - double ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms); - double satb_filtering_time = avg_value(_par_last_satb_filtering_times_ms); - double update_rs_time = avg_value(_par_last_update_rs_times_ms); - double update_rs_processed_buffers = - sum_of_values(_par_last_update_rs_processed_buffers); - double scan_rs_time = avg_value(_par_last_scan_rs_times_ms); - double obj_copy_time = avg_value(_par_last_obj_copy_times_ms); - double termination_time = avg_value(_par_last_termination_times_ms); - - double known_time = ext_root_scan_time + - satb_filtering_time + - update_rs_time + - scan_rs_time + - obj_copy_time; - - double other_time_ms = elapsed_ms; - - // Subtract the root region scanning wait time. It's initialized to - // zero at the start of the pause. - other_time_ms -= _root_region_scan_wait_time_ms; - - if (parallel) { - other_time_ms -= _cur_collection_par_time_ms; - } else { - other_time_ms -= known_time; - } - - // Now subtract the time taken to fix up roots in generated code - other_time_ms -= _cur_collection_code_root_fixup_time_ms; - - // Subtract the time taken to clean the card table from the - // current value of "other time" - other_time_ms -= _cur_clear_ct_time_ms; - - // TraceGen0Time and TraceGen1Time summary info updating. - _all_pause_times_ms->add(elapsed_ms); - if (update_stats) { - _summary->record_total_time_ms(elapsed_ms); - _summary->record_other_time_ms(other_time_ms); - - MainBodySummary* body_summary = _summary->main_body_summary(); - assert(body_summary != NULL, "should not be null!"); - - body_summary->record_root_region_scan_wait_time_ms( - _root_region_scan_wait_time_ms); - body_summary->record_ext_root_scan_time_ms(ext_root_scan_time); - body_summary->record_satb_filtering_time_ms(satb_filtering_time); - body_summary->record_update_rs_time_ms(update_rs_time); - body_summary->record_scan_rs_time_ms(scan_rs_time); - body_summary->record_obj_copy_time_ms(obj_copy_time); - - if (parallel) { - body_summary->record_parallel_time_ms(_cur_collection_par_time_ms); - body_summary->record_termination_time_ms(termination_time); - - double parallel_known_time = known_time + termination_time; - double parallel_other_time = _cur_collection_par_time_ms - parallel_known_time; - body_summary->record_parallel_other_time_ms(parallel_other_time); - } - - body_summary->record_clear_ct_time_ms(_cur_clear_ct_time_ms); - - // We exempt parallel collection from this check because Alloc Buffer - // fragmentation can produce negative collections. Same with evac - // failure. - // Further, we're now always doing parallel collection. But I'm still - // leaving this here as a placeholder for a more precise assertion later. - // (DLD, 10/05. - assert((true || parallel) - || _g1->evacuation_failed() - || surviving_bytes <= _collection_set_bytes_used_before, - "Or else negative collection!"); - + _trace_gen0_time_data.record_end_collection(pause_time_ms, phase_times()); // this is where we update the allocation rate of the application double app_time_ms = - (_cur_collection_start_sec * 1000.0 - _prev_collection_pause_end_ms); + (phase_times()->_cur_collection_start_sec * 1000.0 - _prev_collection_pause_end_ms); if (app_time_ms < MIN_TIMER_GRANULARITY) { // This usually happens due to the timer not having the required // granularity. Some Linuxes are the usual culprits. @@ -1327,7 +971,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { double interval_ms = (end_time_sec - _recent_prev_end_times_for_all_gcs_sec->oldest()) * 1000.0; - update_recent_gc_times(end_time_sec, elapsed_ms); + update_recent_gc_times(end_time_sec, pause_time_ms); _recent_avg_pause_time_ratio = _recent_gc_times_ms->sum()/interval_ms; if (recent_avg_pause_time_ratio() < 0.0 || (recent_avg_pause_time_ratio() - 1.0 > 0.0)) { @@ -1354,102 +998,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { } } } - - for (int i = 0; i < _aux_num; ++i) { - if (_cur_aux_times_set[i]) { - _all_aux_times_ms[i].add(_cur_aux_times_ms[i]); - } - } - - if (G1Log::finer()) { - bool print_marking_info = - _g1->mark_in_progress() && !last_pause_included_initial_mark; - - gclog_or_tty->print_cr("%s, %1.8lf secs]", - (last_pause_included_initial_mark) ? " (initial-mark)" : "", - elapsed_ms / 1000.0); - - if (_root_region_scan_wait_time_ms > 0.0) { - print_stats(1, "Root Region Scan Waiting", _root_region_scan_wait_time_ms); - } - if (parallel) { - print_stats(1, "Parallel Time", _cur_collection_par_time_ms); - print_par_stats(2, "GC Worker Start", _par_last_gc_worker_start_times_ms); - print_par_stats(2, "Ext Root Scanning", _par_last_ext_root_scan_times_ms); - if (print_marking_info) { - print_par_stats(2, "SATB Filtering", _par_last_satb_filtering_times_ms); - } - print_par_stats(2, "Update RS", _par_last_update_rs_times_ms); - if (G1Log::finest()) { - print_par_sizes(3, "Processed Buffers", _par_last_update_rs_processed_buffers); - } - print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms); - print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms); - print_par_stats(2, "Termination", _par_last_termination_times_ms); - if (G1Log::finest()) { - print_par_sizes(3, "Termination Attempts", _par_last_termination_attempts); - } - - for (int i = 0; i < _parallel_gc_threads; i++) { - _par_last_gc_worker_times_ms[i] = _par_last_gc_worker_end_times_ms[i] - - _par_last_gc_worker_start_times_ms[i]; - - double worker_known_time = _par_last_ext_root_scan_times_ms[i] + - _par_last_satb_filtering_times_ms[i] + - _par_last_update_rs_times_ms[i] + - _par_last_scan_rs_times_ms[i] + - _par_last_obj_copy_times_ms[i] + - _par_last_termination_times_ms[i]; - - _par_last_gc_worker_other_times_ms[i] = _par_last_gc_worker_times_ms[i] - - worker_known_time; - } - - print_par_stats(2, "GC Worker Other", _par_last_gc_worker_other_times_ms); - print_par_stats(2, "GC Worker Total", _par_last_gc_worker_times_ms); - print_par_stats(2, "GC Worker End", _par_last_gc_worker_end_times_ms); - } else { - print_stats(1, "Ext Root Scanning", ext_root_scan_time); - if (print_marking_info) { - print_stats(1, "SATB Filtering", satb_filtering_time); - } - print_stats(1, "Update RS", update_rs_time); - if (G1Log::finest()) { - print_stats(2, "Processed Buffers", (int)update_rs_processed_buffers); - } - print_stats(1, "Scan RS", scan_rs_time); - print_stats(1, "Object Copying", obj_copy_time); - } - print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms); - print_stats(1, "Clear CT", _cur_clear_ct_time_ms); -#ifndef PRODUCT - print_stats(1, "Cur Clear CC", _cur_clear_cc_time_ms); - print_stats(1, "Cum Clear CC", _cum_clear_cc_time_ms); - print_stats(1, "Min Clear CC", _min_clear_cc_time_ms); - print_stats(1, "Max Clear CC", _max_clear_cc_time_ms); - if (_num_cc_clears > 0) { - print_stats(1, "Avg Clear CC", _cum_clear_cc_time_ms / ((double)_num_cc_clears)); - } -#endif - print_stats(1, "Other", other_time_ms); - print_stats(2, "Choose CSet", - (_recorded_young_cset_choice_time_ms + - _recorded_non_young_cset_choice_time_ms)); - print_stats(2, "Ref Proc", _cur_ref_proc_time_ms); - print_stats(2, "Ref Enq", _cur_ref_enq_time_ms); - print_stats(2, "Free CSet", - (_recorded_young_free_cset_time_ms + - _recorded_non_young_free_cset_time_ms)); - - for (int i = 0; i < _aux_num; ++i) { - if (_cur_aux_times_set[i]) { - char buffer[96]; - sprintf(buffer, "Aux%d", i); - print_stats(1, buffer, _cur_aux_times_ms[i]); - } - } - } - bool new_in_marking_window = _in_marking_window; bool new_in_marking_window_im = false; if (during_initial_mark_pause()) { @@ -1488,8 +1036,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { // do that for any other surv rate groupsx if (update_stats) { - double pause_time_ms = elapsed_ms; - size_t diff = 0; if (_max_pending_cards >= _pending_cards) { diff = _max_pending_cards - _pending_cards; @@ -1498,7 +1044,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { double cost_per_card_ms = 0.0; if (_pending_cards > 0) { - cost_per_card_ms = update_rs_time / (double) _pending_cards; + cost_per_card_ms = phase_times()->_update_rs_time / (double) _pending_cards; _cost_per_card_ms_seq->add(cost_per_card_ms); } @@ -1506,7 +1052,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { double cost_per_entry_ms = 0.0; if (cards_scanned > 10) { - cost_per_entry_ms = scan_rs_time / (double) cards_scanned; + cost_per_entry_ms = phase_times()->_scan_rs_time / (double) cards_scanned; if (_last_gc_was_young) { _cost_per_entry_ms_seq->add(cost_per_entry_ms); } else { @@ -1546,7 +1092,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { size_t copied_bytes = surviving_bytes; double cost_per_byte_ms = 0.0; if (copied_bytes > 0) { - cost_per_byte_ms = obj_copy_time / (double) copied_bytes; + cost_per_byte_ms = phase_times()->_obj_copy_time / (double) copied_bytes; if (_in_marking_window) { _cost_per_byte_ms_during_cm_seq->add(cost_per_byte_ms); } else { @@ -1555,21 +1101,21 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { } double all_other_time_ms = pause_time_ms - - (update_rs_time + scan_rs_time + obj_copy_time + termination_time); + (phase_times()->_update_rs_time + phase_times()->_scan_rs_time + phase_times()->_obj_copy_time + phase_times()->_termination_time); double young_other_time_ms = 0.0; if (young_cset_region_length() > 0) { young_other_time_ms = - _recorded_young_cset_choice_time_ms + - _recorded_young_free_cset_time_ms; + phase_times()->_recorded_young_cset_choice_time_ms + + phase_times()->_recorded_young_free_cset_time_ms; _young_other_cost_per_region_ms_seq->add(young_other_time_ms / (double) young_cset_region_length()); } double non_young_other_time_ms = 0.0; if (old_cset_region_length() > 0) { non_young_other_time_ms = - _recorded_non_young_cset_choice_time_ms + - _recorded_non_young_free_cset_time_ms; + phase_times()->_recorded_non_young_cset_choice_time_ms + + phase_times()->_recorded_non_young_free_cset_time_ms; _non_young_other_cost_per_region_ms_seq->add(non_young_other_time_ms / (double) old_cset_region_length()); @@ -1596,14 +1142,14 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { // Note that _mmu_tracker->max_gc_time() returns the time in seconds. double update_rs_time_goal_ms = _mmu_tracker->max_gc_time() * MILLIUNITS * G1RSetUpdatingPauseTimePercent / 100.0; - adjust_concurrent_refinement(update_rs_time, update_rs_processed_buffers, update_rs_time_goal_ms); + adjust_concurrent_refinement(phase_times()->_update_rs_time, phase_times()->_update_rs_processed_buffers, update_rs_time_goal_ms); _collectionSetChooser->verify(); } -#define EXT_SIZE_FORMAT "%d%s" +#define EXT_SIZE_FORMAT "%.1f%s" #define EXT_SIZE_PARAMS(bytes) \ - byte_size_in_proper_unit((bytes)), \ + byte_size_in_proper_unit((double)(bytes)), \ proper_unit_for_byte_size((bytes)) void G1CollectorPolicy::print_heap_transition() { @@ -1812,179 +1358,9 @@ void G1CollectorPolicy::count_CS_bytes_used() { _g1->collection_set_iterate(&cs_closure); } -void G1CollectorPolicy::print_summary(int level, - const char* str, - NumberSeq* seq) const { - double sum = seq->sum(); - LineBuffer(level + 1).append_and_print_cr("%-24s = %8.2lf s (avg = %8.2lf ms)", - str, sum / 1000.0, seq->avg()); -} - -void G1CollectorPolicy::print_summary_sd(int level, - const char* str, - NumberSeq* seq) const { - print_summary(level, str, seq); - LineBuffer(level + 6).append_and_print_cr("(num = %5d, std dev = %8.2lf ms, max = %8.2lf ms)", - seq->num(), seq->sd(), seq->maximum()); -} - -void G1CollectorPolicy::check_other_times(int level, - NumberSeq* other_times_ms, - NumberSeq* calc_other_times_ms) const { - bool should_print = false; - LineBuffer buf(level + 2); - - double max_sum = MAX2(fabs(other_times_ms->sum()), - fabs(calc_other_times_ms->sum())); - double min_sum = MIN2(fabs(other_times_ms->sum()), - fabs(calc_other_times_ms->sum())); - double sum_ratio = max_sum / min_sum; - if (sum_ratio > 1.1) { - should_print = true; - buf.append_and_print_cr("## CALCULATED OTHER SUM DOESN'T MATCH RECORDED ###"); - } - - double max_avg = MAX2(fabs(other_times_ms->avg()), - fabs(calc_other_times_ms->avg())); - double min_avg = MIN2(fabs(other_times_ms->avg()), - fabs(calc_other_times_ms->avg())); - double avg_ratio = max_avg / min_avg; - if (avg_ratio > 1.1) { - should_print = true; - buf.append_and_print_cr("## CALCULATED OTHER AVG DOESN'T MATCH RECORDED ###"); - } - - if (other_times_ms->sum() < -0.01) { - buf.append_and_print_cr("## RECORDED OTHER SUM IS NEGATIVE ###"); - } - - if (other_times_ms->avg() < -0.01) { - buf.append_and_print_cr("## RECORDED OTHER AVG IS NEGATIVE ###"); - } - - if (calc_other_times_ms->sum() < -0.01) { - should_print = true; - buf.append_and_print_cr("## CALCULATED OTHER SUM IS NEGATIVE ###"); - } - - if (calc_other_times_ms->avg() < -0.01) { - should_print = true; - buf.append_and_print_cr("## CALCULATED OTHER AVG IS NEGATIVE ###"); - } - - if (should_print) - print_summary(level, "Other(Calc)", calc_other_times_ms); -} - -void G1CollectorPolicy::print_summary(PauseSummary* summary) const { - bool parallel = G1CollectedHeap::use_parallel_gc_threads(); - MainBodySummary* body_summary = summary->main_body_summary(); - if (summary->get_total_seq()->num() > 0) { - print_summary_sd(0, "Evacuation Pauses", summary->get_total_seq()); - if (body_summary != NULL) { - print_summary(1, "Root Region Scan Wait", body_summary->get_root_region_scan_wait_seq()); - if (parallel) { - print_summary(1, "Parallel Time", body_summary->get_parallel_seq()); - print_summary(2, "Ext Root Scanning", body_summary->get_ext_root_scan_seq()); - print_summary(2, "SATB Filtering", body_summary->get_satb_filtering_seq()); - print_summary(2, "Update RS", body_summary->get_update_rs_seq()); - print_summary(2, "Scan RS", body_summary->get_scan_rs_seq()); - print_summary(2, "Object Copy", body_summary->get_obj_copy_seq()); - print_summary(2, "Termination", body_summary->get_termination_seq()); - print_summary(2, "Parallel Other", body_summary->get_parallel_other_seq()); - { - NumberSeq* other_parts[] = { - body_summary->get_ext_root_scan_seq(), - body_summary->get_satb_filtering_seq(), - body_summary->get_update_rs_seq(), - body_summary->get_scan_rs_seq(), - body_summary->get_obj_copy_seq(), - body_summary->get_termination_seq() - }; - NumberSeq calc_other_times_ms(body_summary->get_parallel_seq(), - 6, other_parts); - check_other_times(2, body_summary->get_parallel_other_seq(), - &calc_other_times_ms); - } - } else { - print_summary(1, "Ext Root Scanning", body_summary->get_ext_root_scan_seq()); - print_summary(1, "SATB Filtering", body_summary->get_satb_filtering_seq()); - print_summary(1, "Update RS", body_summary->get_update_rs_seq()); - print_summary(1, "Scan RS", body_summary->get_scan_rs_seq()); - print_summary(1, "Object Copy", body_summary->get_obj_copy_seq()); - } - } - print_summary(1, "Clear CT", body_summary->get_clear_ct_seq()); - print_summary(1, "Other", summary->get_other_seq()); - { - if (body_summary != NULL) { - NumberSeq calc_other_times_ms; - if (parallel) { - // parallel - NumberSeq* other_parts[] = { - body_summary->get_root_region_scan_wait_seq(), - body_summary->get_parallel_seq(), - body_summary->get_clear_ct_seq() - }; - calc_other_times_ms = NumberSeq(summary->get_total_seq(), - 3, other_parts); - } else { - // serial - NumberSeq* other_parts[] = { - body_summary->get_root_region_scan_wait_seq(), - body_summary->get_update_rs_seq(), - body_summary->get_ext_root_scan_seq(), - body_summary->get_satb_filtering_seq(), - body_summary->get_scan_rs_seq(), - body_summary->get_obj_copy_seq() - }; - calc_other_times_ms = NumberSeq(summary->get_total_seq(), - 6, other_parts); - } - check_other_times(1, summary->get_other_seq(), &calc_other_times_ms); - } - } - } else { - LineBuffer(1).append_and_print_cr("none"); - } - LineBuffer(0).append_and_print_cr(""); -} - void G1CollectorPolicy::print_tracing_info() const { - if (TraceGen0Time) { - gclog_or_tty->print_cr("ALL PAUSES"); - print_summary_sd(0, "Total", _all_pause_times_ms); - gclog_or_tty->print_cr(""); - gclog_or_tty->print_cr(""); - gclog_or_tty->print_cr(" Young GC Pauses: %8d", _young_pause_num); - gclog_or_tty->print_cr(" Mixed GC Pauses: %8d", _mixed_pause_num); - gclog_or_tty->print_cr(""); - - gclog_or_tty->print_cr("EVACUATION PAUSES"); - print_summary(_summary); - - gclog_or_tty->print_cr("MISC"); - print_summary_sd(0, "Stop World", _all_stop_world_times_ms); - print_summary_sd(0, "Yields", _all_yield_times_ms); - for (int i = 0; i < _aux_num; ++i) { - if (_all_aux_times_ms[i].num() > 0) { - char buffer[96]; - sprintf(buffer, "Aux%d", i); - print_summary_sd(0, buffer, &_all_aux_times_ms[i]); - } - } - } - if (TraceGen1Time) { - if (_all_full_gc_times_ms->num() > 0) { - gclog_or_tty->print("\n%4d full_gcs: total time = %8.2f s", - _all_full_gc_times_ms->num(), - _all_full_gc_times_ms->sum() / 1000.0); - gclog_or_tty->print_cr(" (avg = %8.2fms).", _all_full_gc_times_ms->avg()); - gclog_or_tty->print_cr(" [std. dev = %8.2f ms, max = %8.2f ms]", - _all_full_gc_times_ms->sd(), - _all_full_gc_times_ms->maximum()); - } - } + _trace_gen0_time_data.print(); + _trace_gen1_time_data.print(); } void G1CollectorPolicy::print_yg_surv_rate_info() const { @@ -2535,9 +1911,9 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) { _last_gc_was_young = gcs_are_young() ? true : false; if (_last_gc_was_young) { - ++_young_pause_num; + _trace_gen0_time_data.increment_young_collection_count(); } else { - ++_mixed_pause_num; + _trace_gen0_time_data.increment_mixed_collection_count(); } // The young list is laid with the survivor regions from the previous @@ -2575,7 +1951,7 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) { set_recorded_rs_lengths(_inc_cset_recorded_rs_lengths); double young_end_time_sec = os::elapsedTime(); - _recorded_young_cset_choice_time_ms = + phase_times()->_recorded_young_cset_choice_time_ms = (young_end_time_sec - young_start_time_sec) * 1000.0; // We are doing young collections so reset this. @@ -2691,6 +2067,130 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) { predicted_pause_time_ms, target_pause_time_ms); double non_young_end_time_sec = os::elapsedTime(); - _recorded_non_young_cset_choice_time_ms = + phase_times()->_recorded_non_young_cset_choice_time_ms = (non_young_end_time_sec - non_young_start_time_sec) * 1000.0; } + +void TraceGen0TimeData::record_start_collection(double time_to_stop_the_world_ms) { + if(TraceGen0Time) { + _all_stop_world_times_ms.add(time_to_stop_the_world_ms); + } +} + +void TraceGen0TimeData::record_yield_time(double yield_time_ms) { + if(TraceGen0Time) { + _all_yield_times_ms.add(yield_time_ms); + } +} + +void TraceGen0TimeData::record_end_collection(double pause_time_ms, G1GCPhaseTimes* phase_times) { + if(TraceGen0Time) { + _total.add(pause_time_ms); + _other.add(pause_time_ms - phase_times->accounted_time_ms()); + _root_region_scan_wait.add(phase_times->_root_region_scan_wait_time_ms); + _parallel.add(phase_times->_cur_collection_par_time_ms); + _ext_root_scan.add(phase_times->_ext_root_scan_time); + _satb_filtering.add(phase_times->_satb_filtering_time); + _update_rs.add(phase_times->_update_rs_time); + _scan_rs.add(phase_times->_scan_rs_time); + _obj_copy.add(phase_times->_obj_copy_time); + _termination.add(phase_times->_termination_time); + + double parallel_known_time = phase_times->_ext_root_scan_time + + phase_times->_satb_filtering_time + + phase_times->_update_rs_time + + phase_times->_scan_rs_time + + phase_times->_obj_copy_time + + + phase_times->_termination_time; + + double parallel_other_time = phase_times->_cur_collection_par_time_ms - parallel_known_time; + _parallel_other.add(parallel_other_time); + _clear_ct.add(phase_times->_cur_clear_ct_time_ms); + } +} + +void TraceGen0TimeData::increment_young_collection_count() { + if(TraceGen0Time) { + ++_young_pause_num; + } +} + +void TraceGen0TimeData::increment_mixed_collection_count() { + if(TraceGen0Time) { + ++_mixed_pause_num; + } +} + +void TraceGen0TimeData::print_summary(const char* str, + const NumberSeq* seq) const { + double sum = seq->sum(); + gclog_or_tty->print_cr("%-27s = %8.2lf s (avg = %8.2lf ms)", + str, sum / 1000.0, seq->avg()); +} + +void TraceGen0TimeData::print_summary_sd(const char* str, + const NumberSeq* seq) const { + print_summary(str, seq); + gclog_or_tty->print_cr("%+45s = %5d, std dev = %8.2lf ms, max = %8.2lf ms)", + "(num", seq->num(), seq->sd(), seq->maximum()); +} + +void TraceGen0TimeData::print() const { + if (!TraceGen0Time) { + return; + } + + gclog_or_tty->print_cr("ALL PAUSES"); + print_summary_sd(" Total", &_total); + gclog_or_tty->print_cr(""); + gclog_or_tty->print_cr(""); + gclog_or_tty->print_cr(" Young GC Pauses: %8d", _young_pause_num); + gclog_or_tty->print_cr(" Mixed GC Pauses: %8d", _mixed_pause_num); + gclog_or_tty->print_cr(""); + + gclog_or_tty->print_cr("EVACUATION PAUSES"); + + if (_young_pause_num == 0 && _mixed_pause_num == 0) { + gclog_or_tty->print_cr("none"); + } else { + print_summary_sd(" Evacuation Pauses", &_total); + print_summary(" Root Region Scan Wait", &_root_region_scan_wait); + print_summary(" Parallel Time", &_parallel); + print_summary(" Ext Root Scanning", &_ext_root_scan); + print_summary(" SATB Filtering", &_satb_filtering); + print_summary(" Update RS", &_update_rs); + print_summary(" Scan RS", &_scan_rs); + print_summary(" Object Copy", &_obj_copy); + print_summary(" Termination", &_termination); + print_summary(" Parallel Other", &_parallel_other); + print_summary(" Clear CT", &_clear_ct); + print_summary(" Other", &_other); + } + gclog_or_tty->print_cr(""); + + gclog_or_tty->print_cr("MISC"); + print_summary_sd(" Stop World", &_all_stop_world_times_ms); + print_summary_sd(" Yields", &_all_yield_times_ms); +} + +void TraceGen1TimeData::record_full_collection(double full_gc_time_ms) { + if (TraceGen1Time) { + _all_full_gc_times.add(full_gc_time_ms); + } +} + +void TraceGen1TimeData::print() const { + if (!TraceGen1Time) { + return; + } + + if (_all_full_gc_times.num() > 0) { + gclog_or_tty->print("\n%4d full_gcs: total time = %8.2f s", + _all_full_gc_times.num(), + _all_full_gc_times.sum() / 1000.0); + gclog_or_tty->print_cr(" (avg = %8.2fms).", _all_full_gc_times.avg()); + gclog_or_tty->print_cr(" [std. dev = %8.2f ms, max = %8.2f ms]", + _all_full_gc_times.sd(), + _all_full_gc_times.maximum()); + } +} diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp index 7cdf79d7feb..3fa36acc3a3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @@ -36,50 +36,52 @@ class HeapRegion; class CollectionSetChooser; +class G1GCPhaseTimes; -// Yes, this is a bit unpleasant... but it saves replicating the same thing -// over and over again and introducing subtle problems through small typos and -// cutting and pasting mistakes. The macros below introduces a number -// sequnce into the following two classes and the methods that access it. +// TraceGen0Time collects data on _both_ young and mixed evacuation pauses +// (the latter may contain non-young regions - i.e. regions that are +// technically in Gen1) while TraceGen1Time collects data about full GCs. +class TraceGen0TimeData : public CHeapObj { + private: + unsigned _young_pause_num; + unsigned _mixed_pause_num; -#define define_num_seq(name) \ -private: \ - NumberSeq _all_##name##_times_ms; \ -public: \ - void record_##name##_time_ms(double ms) { \ - _all_##name##_times_ms.add(ms); \ - } \ - NumberSeq* get_##name##_seq() { \ - return &_all_##name##_times_ms; \ - } + NumberSeq _all_stop_world_times_ms; + NumberSeq _all_yield_times_ms; -class MainBodySummary; + NumberSeq _total; + NumberSeq _other; + NumberSeq _root_region_scan_wait; + NumberSeq _parallel; + NumberSeq _ext_root_scan; + NumberSeq _satb_filtering; + NumberSeq _update_rs; + NumberSeq _scan_rs; + NumberSeq _obj_copy; + NumberSeq _termination; + NumberSeq _parallel_other; + NumberSeq _clear_ct; -class PauseSummary: public CHeapObj { - define_num_seq(total) - define_num_seq(other) + void print_summary(const char* str, const NumberSeq* seq) const; + void print_summary_sd(const char* str, const NumberSeq* seq) const; public: - virtual MainBodySummary* main_body_summary() { return NULL; } + TraceGen0TimeData() : _young_pause_num(0), _mixed_pause_num(0) {}; + void record_start_collection(double time_to_stop_the_world_ms); + void record_yield_time(double yield_time_ms); + void record_end_collection(double pause_time_ms, G1GCPhaseTimes* phase_times); + void increment_young_collection_count(); + void increment_mixed_collection_count(); + void print() const; }; -class MainBodySummary: public CHeapObj { - define_num_seq(root_region_scan_wait) - define_num_seq(parallel) // parallel only - define_num_seq(ext_root_scan) - define_num_seq(satb_filtering) - define_num_seq(update_rs) - define_num_seq(scan_rs) - define_num_seq(obj_copy) - define_num_seq(termination) // parallel only - define_num_seq(parallel_other) // parallel only - define_num_seq(clear_ct) -}; +class TraceGen1TimeData : public CHeapObj { + private: + NumberSeq _all_full_gc_times; -class Summary: public PauseSummary, - public MainBodySummary { -public: - virtual MainBodySummary* main_body_summary() { return this; } + public: + void record_full_collection(double full_gc_time_ms); + void print() const; }; // There are three command line options related to the young gen size: @@ -118,7 +120,7 @@ public: // // NewSize and MaxNewSize override NewRatio. So, NewRatio is ignored if it is // combined with either NewSize or MaxNewSize. (A warning message is printed.) -class G1YoungGenSizer : public CHeapObj { +class G1YoungGenSizer : public CHeapObj { private: enum SizerKind { SizerDefaults, @@ -173,25 +175,9 @@ private: CollectionSetChooser* _collectionSetChooser; - double _cur_collection_start_sec; + double _full_collection_start_sec; size_t _cur_collection_pause_used_at_start_bytes; uint _cur_collection_pause_used_regions_at_start; - double _cur_collection_par_time_ms; - - double _cur_collection_code_root_fixup_time_ms; - - double _cur_clear_ct_time_ms; - double _cur_ref_proc_time_ms; - double _cur_ref_enq_time_ms; - -#ifndef PRODUCT - // Card Table Count Cache stats - double _min_clear_cc_time_ms; // min - double _max_clear_cc_time_ms; // max - double _cur_clear_cc_time_ms; // clearing time during current pause - double _cum_clear_cc_time_ms; // cummulative clearing time - jlong _num_cc_clears; // number of times the card count cache has been cleared -#endif // These exclude marking times. TruncatedSeq* _recent_gc_times_ms; @@ -199,36 +185,10 @@ private: TruncatedSeq* _concurrent_mark_remark_times_ms; TruncatedSeq* _concurrent_mark_cleanup_times_ms; - Summary* _summary; + TraceGen0TimeData _trace_gen0_time_data; + TraceGen1TimeData _trace_gen1_time_data; - NumberSeq* _all_pause_times_ms; - NumberSeq* _all_full_gc_times_ms; double _stop_world_start; - NumberSeq* _all_stop_world_times_ms; - NumberSeq* _all_yield_times_ms; - - int _aux_num; - NumberSeq* _all_aux_times_ms; - double* _cur_aux_start_times_ms; - double* _cur_aux_times_ms; - bool* _cur_aux_times_set; - - double* _par_last_gc_worker_start_times_ms; - double* _par_last_ext_root_scan_times_ms; - double* _par_last_satb_filtering_times_ms; - double* _par_last_update_rs_times_ms; - double* _par_last_update_rs_processed_buffers; - double* _par_last_scan_rs_times_ms; - double* _par_last_obj_copy_times_ms; - double* _par_last_termination_times_ms; - double* _par_last_termination_attempts; - double* _par_last_gc_worker_end_times_ms; - double* _par_last_gc_worker_times_ms; - - // Each workers 'other' time i.e. the elapsed time of the parallel - // code executed by a worker minus the sum of the individual sub-phase - // times for that worker thread. - double* _par_last_gc_worker_other_times_ms; // indicates whether we are in young or mixed GC mode bool _gcs_are_young; @@ -243,9 +203,6 @@ private: bool _last_gc_was_young; - unsigned _young_pause_num; - unsigned _mixed_pause_num; - bool _during_marking; bool _in_marking_window; bool _in_marking_window_im; @@ -305,10 +262,6 @@ private: size_t _recorded_rs_lengths; size_t _max_rs_lengths; - - double _recorded_young_free_cset_time_ms; - double _recorded_non_young_free_cset_time_ms; - double _sigma; size_t _rs_lengths_prediction; @@ -340,8 +293,7 @@ private: void set_no_of_gc_threads(uintx v) { _no_of_gc_threads = v; } double _pause_time_target_ms; - double _recorded_young_cset_choice_time_ms; - double _recorded_non_young_cset_choice_time_ms; + size_t _pending_cards; size_t _max_pending_cards; @@ -496,14 +448,6 @@ public: uint young_cset_region_length() { return eden_cset_region_length() + survivor_cset_region_length(); } - void record_young_free_cset_time_ms(double time_ms) { - _recorded_young_free_cset_time_ms = time_ms; - } - - void record_non_young_free_cset_time_ms(double time_ms) { - _recorded_non_young_free_cset_time_ms = time_ms; - } - double predict_survivor_regions_evac_time(); void cset_regions_freed() { @@ -551,28 +495,6 @@ public: } private: - void print_stats(int level, const char* str, double value); - void print_stats(int level, const char* str, int value); - - void print_par_stats(int level, const char* str, double* data); - void print_par_sizes(int level, const char* str, double* data); - - void check_other_times(int level, - NumberSeq* other_times_ms, - NumberSeq* calc_other_times_ms) const; - - void print_summary (PauseSummary* stats) const; - - void print_summary (int level, const char* str, NumberSeq* seq) const; - void print_summary_sd (int level, const char* str, NumberSeq* seq) const; - - double avg_value (double* data); - double max_value (double* data); - double sum_of_values (double* data); - double max_sum (double* data1, double* data2); - - double _last_pause_time_ms; - size_t _bytes_in_collection_set_before_gc; size_t _bytes_copied_during_gc; @@ -646,6 +568,8 @@ private: // Stash a pointer to the g1 heap. G1CollectedHeap* _g1; + G1GCPhaseTimes* _phase_times; + // The ratio of gc time to elapsed time, computed over recent pauses. double _recent_avg_pause_time_ratio; @@ -685,7 +609,6 @@ private: double _cur_mark_stop_world_time_ms; double _mark_remark_start_sec; double _mark_cleanup_start_sec; - double _root_region_scan_wait_time_ms; // Update the young list target length either by setting it to the // desired fixed value or by calculating it using G1's pause @@ -736,6 +659,8 @@ public: return CollectorPolicy::G1CollectorPolicyKind; } + G1GCPhaseTimes* phase_times() const { return _phase_times; } + // Check the current value of the young list RSet lengths and // compare it against the last prediction. If the current value is // higher, recalculate the young list target length prediction. @@ -745,10 +670,6 @@ public: return _bytes_in_collection_set_before_gc; } - unsigned calc_gc_alloc_time_stamp() { - return _all_pause_times_ms->num() + 1; - } - // This should be called after the heap is resized. void record_new_heap_size(uint new_number_of_regions); @@ -784,10 +705,6 @@ public: void record_concurrent_mark_init_end(double mark_init_elapsed_time_ms); - void record_root_region_scan_wait_time(double time_ms) { - _root_region_scan_wait_time_ms = time_ms; - } - void record_concurrent_mark_remark_start(); void record_concurrent_mark_remark_end(); @@ -796,109 +713,14 @@ public: void record_concurrent_mark_cleanup_completed(); void record_concurrent_pause(); - void record_concurrent_pause_end(); - void record_collection_pause_end(int no_of_gc_threads); + void record_collection_pause_end(double pause_time); void print_heap_transition(); // Record the fact that a full collection occurred. void record_full_collection_start(); void record_full_collection_end(); - void record_gc_worker_start_time(int worker_i, double ms) { - _par_last_gc_worker_start_times_ms[worker_i] = ms; - } - - void record_ext_root_scan_time(int worker_i, double ms) { - _par_last_ext_root_scan_times_ms[worker_i] = ms; - } - - void record_satb_filtering_time(int worker_i, double ms) { - _par_last_satb_filtering_times_ms[worker_i] = ms; - } - - void record_update_rs_time(int thread, double ms) { - _par_last_update_rs_times_ms[thread] = ms; - } - - void record_update_rs_processed_buffers (int thread, - double processed_buffers) { - _par_last_update_rs_processed_buffers[thread] = processed_buffers; - } - - void record_scan_rs_time(int thread, double ms) { - _par_last_scan_rs_times_ms[thread] = ms; - } - - void reset_obj_copy_time(int thread) { - _par_last_obj_copy_times_ms[thread] = 0.0; - } - - void reset_obj_copy_time() { - reset_obj_copy_time(0); - } - - void record_obj_copy_time(int thread, double ms) { - _par_last_obj_copy_times_ms[thread] += ms; - } - - void record_termination(int thread, double ms, size_t attempts) { - _par_last_termination_times_ms[thread] = ms; - _par_last_termination_attempts[thread] = (double) attempts; - } - - void record_gc_worker_end_time(int worker_i, double ms) { - _par_last_gc_worker_end_times_ms[worker_i] = ms; - } - - void record_pause_time_ms(double ms) { - _last_pause_time_ms = ms; - } - - void record_clear_ct_time(double ms) { - _cur_clear_ct_time_ms = ms; - } - - void record_par_time(double ms) { - _cur_collection_par_time_ms = ms; - } - - void record_code_root_fixup_time(double ms) { - _cur_collection_code_root_fixup_time_ms = ms; - } - - void record_aux_start_time(int i) { - guarantee(i < _aux_num, "should be within range"); - _cur_aux_start_times_ms[i] = os::elapsedTime() * 1000.0; - } - - void record_aux_end_time(int i) { - guarantee(i < _aux_num, "should be within range"); - double ms = os::elapsedTime() * 1000.0 - _cur_aux_start_times_ms[i]; - _cur_aux_times_set[i] = true; - _cur_aux_times_ms[i] += ms; - } - - void record_ref_proc_time(double ms) { - _cur_ref_proc_time_ms = ms; - } - - void record_ref_enq_time(double ms) { - _cur_ref_enq_time_ms = ms; - } - -#ifndef PRODUCT - void record_cc_clear_time(double ms) { - if (_min_clear_cc_time_ms < 0.0 || ms <= _min_clear_cc_time_ms) - _min_clear_cc_time_ms = ms; - if (_max_clear_cc_time_ms < 0.0 || ms >= _max_clear_cc_time_ms) - _max_clear_cc_time_ms = ms; - _cur_clear_cc_time_ms = ms; - _cum_clear_cc_time_ms += ms; - _num_cc_clears++; - } -#endif - // Record how much space we copied during a GC. This is typically // called when a GC alloc region is being retired. void record_bytes_copied_during_gc(size_t bytes) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp new file mode 100644 index 00000000000..8bb9e552492 --- /dev/null +++ b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp @@ -0,0 +1,379 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + + +#include "precompiled.hpp" +#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" +#include "gc_implementation/g1/g1Log.hpp" + +// Helper class for avoiding interleaved logging +class LineBuffer: public StackObj { + +private: + static const int BUFFER_LEN = 1024; + static const int INDENT_CHARS = 3; + char _buffer[BUFFER_LEN]; + int _indent_level; + int _cur; + + void vappend(const char* format, va_list ap) { + int res = vsnprintf(&_buffer[_cur], BUFFER_LEN - _cur, format, ap); + if (res != -1) { + _cur += res; + } else { + DEBUG_ONLY(warning("buffer too small in LineBuffer");) + _buffer[BUFFER_LEN -1] = 0; + _cur = BUFFER_LEN; // vsnprintf above should not add to _buffer if we are called again + } + } + +public: + explicit LineBuffer(int indent_level): _indent_level(indent_level), _cur(0) { + for (; (_cur < BUFFER_LEN && _cur < (_indent_level * INDENT_CHARS)); _cur++) { + _buffer[_cur] = ' '; + } + } + +#ifndef PRODUCT + ~LineBuffer() { + assert(_cur == _indent_level * INDENT_CHARS, "pending data in buffer - append_and_print_cr() not called?"); + } +#endif + + void append(const char* format, ...) { + va_list ap; + va_start(ap, format); + vappend(format, ap); + va_end(ap); + } + + void append_and_print_cr(const char* format, ...) { + va_list ap; + va_start(ap, format); + vappend(format, ap); + va_end(ap); + gclog_or_tty->print_cr("%s", _buffer); + _cur = _indent_level * INDENT_CHARS; + } +}; + +G1GCPhaseTimes::G1GCPhaseTimes(uint max_gc_threads) : + _max_gc_threads(max_gc_threads), + _min_clear_cc_time_ms(-1.0), + _max_clear_cc_time_ms(-1.0), + _cur_clear_cc_time_ms(0.0), + _cum_clear_cc_time_ms(0.0), + _num_cc_clears(0L) +{ + assert(max_gc_threads > 0, "Must have some GC threads"); + _par_last_gc_worker_start_times_ms = new double[_max_gc_threads]; + _par_last_ext_root_scan_times_ms = new double[_max_gc_threads]; + _par_last_satb_filtering_times_ms = new double[_max_gc_threads]; + _par_last_update_rs_times_ms = new double[_max_gc_threads]; + _par_last_update_rs_processed_buffers = new double[_max_gc_threads]; + _par_last_scan_rs_times_ms = new double[_max_gc_threads]; + _par_last_obj_copy_times_ms = new double[_max_gc_threads]; + _par_last_termination_times_ms = new double[_max_gc_threads]; + _par_last_termination_attempts = new double[_max_gc_threads]; + _par_last_gc_worker_end_times_ms = new double[_max_gc_threads]; + _par_last_gc_worker_times_ms = new double[_max_gc_threads]; + _par_last_gc_worker_other_times_ms = new double[_max_gc_threads]; +} + +void G1GCPhaseTimes::note_gc_start(double pause_start_time_sec, uint active_gc_threads, + bool is_young_gc, bool is_initial_mark_gc, GCCause::Cause gc_cause) { + assert(active_gc_threads > 0, "The number of threads must be > 0"); + assert(active_gc_threads <= _max_gc_threads, "The number of active threads must be <= the max nubmer of threads"); + _active_gc_threads = active_gc_threads; + _pause_start_time_sec = pause_start_time_sec; + _is_young_gc = is_young_gc; + _is_initial_mark_gc = is_initial_mark_gc; + _gc_cause = gc_cause; + +#ifdef ASSERT + // initialise the timing data to something well known so that we can spot + // if something is not set properly + + for (uint i = 0; i < _max_gc_threads; ++i) { + _par_last_gc_worker_start_times_ms[i] = -1234.0; + _par_last_ext_root_scan_times_ms[i] = -1234.0; + _par_last_satb_filtering_times_ms[i] = -1234.0; + _par_last_update_rs_times_ms[i] = -1234.0; + _par_last_update_rs_processed_buffers[i] = -1234.0; + _par_last_scan_rs_times_ms[i] = -1234.0; + _par_last_obj_copy_times_ms[i] = -1234.0; + _par_last_termination_times_ms[i] = -1234.0; + _par_last_termination_attempts[i] = -1234.0; + _par_last_gc_worker_end_times_ms[i] = -1234.0; + _par_last_gc_worker_times_ms[i] = -1234.0; + _par_last_gc_worker_other_times_ms[i] = -1234.0; + } +#endif +} + +void G1GCPhaseTimes::note_gc_end(double pause_end_time_sec) { + if (G1Log::fine()) { + double pause_time_ms = (pause_end_time_sec - _pause_start_time_sec) * MILLIUNITS; + + for (uint i = 0; i < _active_gc_threads; i++) { + _par_last_gc_worker_times_ms[i] = _par_last_gc_worker_end_times_ms[i] - + _par_last_gc_worker_start_times_ms[i]; + + double worker_known_time = _par_last_ext_root_scan_times_ms[i] + + _par_last_satb_filtering_times_ms[i] + + _par_last_update_rs_times_ms[i] + + _par_last_scan_rs_times_ms[i] + + _par_last_obj_copy_times_ms[i] + + _par_last_termination_times_ms[i]; + + _par_last_gc_worker_other_times_ms[i] = _par_last_gc_worker_times_ms[i] - + worker_known_time; + } + + print(pause_time_ms); + } + +} + +void G1GCPhaseTimes::print_par_stats(int level, + const char* str, + double* data, + bool showDecimals) { + double min = data[0], max = data[0]; + double total = 0.0; + LineBuffer buf(level); + buf.append("[%s (ms):", str); + for (uint i = 0; i < _active_gc_threads; ++i) { + double val = data[i]; + if (val < min) + min = val; + if (val > max) + max = val; + total += val; + if (G1Log::finest()) { + if (showDecimals) { + buf.append(" %.1lf", val); + } else { + buf.append(" %d", (int)val); + } + } + } + + if (G1Log::finest()) { + buf.append_and_print_cr(""); + } + double avg = total / (double) _active_gc_threads; + if (showDecimals) { + buf.append_and_print_cr(" Min: %.1lf, Avg: %.1lf, Max: %.1lf, Diff: %.1lf, Sum: %.1lf]", + min, avg, max, max - min, total); + } else { + buf.append_and_print_cr(" Min: %d, Avg: %d, Max: %d, Diff: %d, Sum: %d]", + (int)min, (int)avg, (int)max, (int)max - (int)min, (int)total); + } +} + +void G1GCPhaseTimes::print_stats(int level, const char* str, double value) { + LineBuffer(level).append_and_print_cr("[%s: %.1lf ms]", str, value); +} + +void G1GCPhaseTimes::print_stats(int level, const char* str, double value, int workers) { + LineBuffer(level).append_and_print_cr("[%s: %.1lf ms, GC Workers: %d]", str, value, workers); +} + +void G1GCPhaseTimes::print_stats(int level, const char* str, int value) { + LineBuffer(level).append_and_print_cr("[%s: %d]", str, value); +} + +double G1GCPhaseTimes::avg_value(double* data) { + if (G1CollectedHeap::use_parallel_gc_threads()) { + double ret = 0.0; + for (uint i = 0; i < _active_gc_threads; ++i) { + ret += data[i]; + } + return ret / (double) _active_gc_threads; + } else { + return data[0]; + } +} + +double G1GCPhaseTimes::max_value(double* data) { + if (G1CollectedHeap::use_parallel_gc_threads()) { + double ret = data[0]; + for (uint i = 1; i < _active_gc_threads; ++i) { + if (data[i] > ret) { + ret = data[i]; + } + } + return ret; + } else { + return data[0]; + } +} + +double G1GCPhaseTimes::sum_of_values(double* data) { + if (G1CollectedHeap::use_parallel_gc_threads()) { + double sum = 0.0; + for (uint i = 0; i < _active_gc_threads; i++) { + sum += data[i]; + } + return sum; + } else { + return data[0]; + } +} + +double G1GCPhaseTimes::max_sum(double* data1, double* data2) { + double ret = data1[0] + data2[0]; + + if (G1CollectedHeap::use_parallel_gc_threads()) { + for (uint i = 1; i < _active_gc_threads; ++i) { + double data = data1[i] + data2[i]; + if (data > ret) { + ret = data; + } + } + } + return ret; +} + +void G1GCPhaseTimes::collapse_par_times() { + _ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms); + _satb_filtering_time = avg_value(_par_last_satb_filtering_times_ms); + _update_rs_time = avg_value(_par_last_update_rs_times_ms); + _update_rs_processed_buffers = + sum_of_values(_par_last_update_rs_processed_buffers); + _scan_rs_time = avg_value(_par_last_scan_rs_times_ms); + _obj_copy_time = avg_value(_par_last_obj_copy_times_ms); + _termination_time = avg_value(_par_last_termination_times_ms); +} + +double G1GCPhaseTimes::accounted_time_ms() { + // Subtract the root region scanning wait time. It's initialized to + // zero at the start of the pause. + double misc_time_ms = _root_region_scan_wait_time_ms; + + misc_time_ms += _cur_collection_par_time_ms; + + // Now subtract the time taken to fix up roots in generated code + misc_time_ms += _cur_collection_code_root_fixup_time_ms; + + // Subtract the time taken to clean the card table from the + // current value of "other time" + misc_time_ms += _cur_clear_ct_time_ms; + + return misc_time_ms; +} + +void G1GCPhaseTimes::print(double pause_time_ms) { + + if (PrintGCTimeStamps) { + gclog_or_tty->stamp(); + gclog_or_tty->print(": "); + } + + GCCauseString gc_cause_str = GCCauseString("GC pause", _gc_cause) + .append(_is_young_gc ? " (young)" : " (mixed)") + .append(_is_initial_mark_gc ? " (initial-mark)" : ""); + gclog_or_tty->print_cr("[%s, %3.7f secs]", (const char*)gc_cause_str, pause_time_ms / 1000.0); + + if (!G1Log::finer()) { + return; + } + + if (_root_region_scan_wait_time_ms > 0.0) { + print_stats(1, "Root Region Scan Waiting", _root_region_scan_wait_time_ms); + } + if (G1CollectedHeap::use_parallel_gc_threads()) { + print_stats(1, "Parallel Time", _cur_collection_par_time_ms, _active_gc_threads); + print_par_stats(2, "GC Worker Start", _par_last_gc_worker_start_times_ms); + print_par_stats(2, "Ext Root Scanning", _par_last_ext_root_scan_times_ms); + if (_satb_filtering_time > 0.0) { + print_par_stats(2, "SATB Filtering", _par_last_satb_filtering_times_ms); + } + print_par_stats(2, "Update RS", _par_last_update_rs_times_ms); + if (G1Log::finest()) { + print_par_stats(3, "Processed Buffers", _par_last_update_rs_processed_buffers, + false /* showDecimals */); + } + print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms); + print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms); + print_par_stats(2, "Termination", _par_last_termination_times_ms); + if (G1Log::finest()) { + print_par_stats(3, "Termination Attempts", _par_last_termination_attempts, + false /* showDecimals */); + } + print_par_stats(2, "GC Worker Other", _par_last_gc_worker_other_times_ms); + print_par_stats(2, "GC Worker Total", _par_last_gc_worker_times_ms); + print_par_stats(2, "GC Worker End", _par_last_gc_worker_end_times_ms); + } else { + print_stats(1, "Ext Root Scanning", _ext_root_scan_time); + if (_satb_filtering_time > 0.0) { + print_stats(1, "SATB Filtering", _satb_filtering_time); + } + print_stats(1, "Update RS", _update_rs_time); + if (G1Log::finest()) { + print_stats(2, "Processed Buffers", (int)_update_rs_processed_buffers); + } + print_stats(1, "Scan RS", _scan_rs_time); + print_stats(1, "Object Copying", _obj_copy_time); + } + print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms); + print_stats(1, "Clear CT", _cur_clear_ct_time_ms); + if (Verbose && G1Log::finest()) { + print_stats(1, "Cur Clear CC", _cur_clear_cc_time_ms); + print_stats(1, "Cum Clear CC", _cum_clear_cc_time_ms); + print_stats(1, "Min Clear CC", _min_clear_cc_time_ms); + print_stats(1, "Max Clear CC", _max_clear_cc_time_ms); + if (_num_cc_clears > 0) { + print_stats(1, "Avg Clear CC", _cum_clear_cc_time_ms / ((double)_num_cc_clears)); + } + } + double misc_time_ms = pause_time_ms - accounted_time_ms(); + print_stats(1, "Other", misc_time_ms); + print_stats(2, "Choose CSet", + (_recorded_young_cset_choice_time_ms + + _recorded_non_young_cset_choice_time_ms)); + print_stats(2, "Ref Proc", _cur_ref_proc_time_ms); + print_stats(2, "Ref Enq", _cur_ref_enq_time_ms); + print_stats(2, "Free CSet", + (_recorded_young_free_cset_time_ms + + _recorded_non_young_free_cset_time_ms)); +} + +void G1GCPhaseTimes::record_cc_clear_time_ms(double ms) { + if (!(Verbose && G1Log::finest())) { + return; + } + + if (_min_clear_cc_time_ms < 0.0 || ms <= _min_clear_cc_time_ms) { + _min_clear_cc_time_ms = ms; + } + if (_max_clear_cc_time_ms < 0.0 || ms >= _max_clear_cc_time_ms) { + _max_clear_cc_time_ms = ms; + } + _cur_clear_cc_time_ms = ms; + _cum_clear_cc_time_ms += ms; + _num_cc_clears++; +} diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp new file mode 100644 index 00000000000..d9eaf37261b --- /dev/null +++ b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMESLOG_HPP +#define SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMESLOG_HPP + +#include "memory/allocation.hpp" +#include "gc_interface/gcCause.hpp" + +class G1GCPhaseTimes : public CHeapObj { + friend class G1CollectorPolicy; + friend class TraceGen0TimeData; + + private: + uint _active_gc_threads; + uint _max_gc_threads; + + GCCause::Cause _gc_cause; + bool _is_young_gc; + bool _is_initial_mark_gc; + + double _pause_start_time_sec; + + double* _par_last_gc_worker_start_times_ms; + double* _par_last_ext_root_scan_times_ms; + double* _par_last_satb_filtering_times_ms; + double* _par_last_update_rs_times_ms; + double* _par_last_update_rs_processed_buffers; + double* _par_last_scan_rs_times_ms; + double* _par_last_obj_copy_times_ms; + double* _par_last_termination_times_ms; + double* _par_last_termination_attempts; + double* _par_last_gc_worker_end_times_ms; + double* _par_last_gc_worker_times_ms; + double* _par_last_gc_worker_other_times_ms; + + double _cur_collection_par_time_ms; + + double _cur_collection_code_root_fixup_time_ms; + + double _cur_clear_ct_time_ms; + double _cur_ref_proc_time_ms; + double _cur_ref_enq_time_ms; + + // Helper methods for detailed logging + void print_par_stats(int level, const char* str, double* data, bool showDecimals = true); + void print_stats(int level, const char* str, double value); + void print_stats(int level, const char* str, double value, int workers); + void print_stats(int level, const char* str, int value); + double avg_value(double* data); + double max_value(double* data); + double sum_of_values(double* data); + double max_sum(double* data1, double* data2); + double accounted_time_ms(); + + // Card Table Count Cache stats + double _min_clear_cc_time_ms; // min + double _max_clear_cc_time_ms; // max + double _cur_clear_cc_time_ms; // clearing time during current pause + double _cum_clear_cc_time_ms; // cummulative clearing time + jlong _num_cc_clears; // number of times the card count cache has been cleared + + // The following insance variables are directly accessed by G1CollectorPolicy + // and TraceGen0TimeData. This is why those classes are declared friends. + // An alternative is to add getters and setters for all of these fields. + // It might also be possible to restructure the code to reduce these + // dependencies. + double _ext_root_scan_time; + double _satb_filtering_time; + double _update_rs_time; + double _update_rs_processed_buffers; + double _scan_rs_time; + double _obj_copy_time; + double _termination_time; + + double _cur_collection_start_sec; + double _root_region_scan_wait_time_ms; + + double _recorded_young_cset_choice_time_ms; + double _recorded_non_young_cset_choice_time_ms; + + double _recorded_young_free_cset_time_ms; + double _recorded_non_young_free_cset_time_ms; + + void print(double pause_time_ms); + + public: + G1GCPhaseTimes(uint max_gc_threads); + void note_gc_start(double pause_start_time_sec, uint active_gc_threads, + bool is_young_gc, bool is_initial_mark_gc, GCCause::Cause gc_cause); + void note_gc_end(double pause_end_time_sec); + void collapse_par_times(); + + void record_gc_worker_start_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_gc_worker_start_times_ms[worker_i] = ms; + } + + void record_ext_root_scan_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_ext_root_scan_times_ms[worker_i] = ms; + } + + void record_satb_filtering_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_satb_filtering_times_ms[worker_i] = ms; + } + + void record_update_rs_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_update_rs_times_ms[worker_i] = ms; + } + + void record_update_rs_processed_buffers (uint worker_i, + double processed_buffers) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_update_rs_processed_buffers[worker_i] = processed_buffers; + } + + void record_scan_rs_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_scan_rs_times_ms[worker_i] = ms; + } + + void reset_obj_copy_time(uint worker_i) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_obj_copy_times_ms[worker_i] = 0.0; + } + + void reset_obj_copy_time() { + reset_obj_copy_time(0); + } + + void record_obj_copy_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_obj_copy_times_ms[worker_i] += ms; + } + + void record_termination(uint worker_i, double ms, size_t attempts) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_termination_times_ms[worker_i] = ms; + _par_last_termination_attempts[worker_i] = (double) attempts; + } + + void record_gc_worker_end_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_gc_worker_end_times_ms[worker_i] = ms; + } + + void record_clear_ct_time(double ms) { + _cur_clear_ct_time_ms = ms; + } + + void record_par_time(double ms) { + _cur_collection_par_time_ms = ms; + } + + void record_code_root_fixup_time(double ms) { + _cur_collection_code_root_fixup_time_ms = ms; + } + + void record_ref_proc_time(double ms) { + _cur_ref_proc_time_ms = ms; + } + + void record_ref_enq_time(double ms) { + _cur_ref_enq_time_ms = ms; + } + + void record_root_region_scan_wait_time(double time_ms) { + _root_region_scan_wait_time_ms = time_ms; + } + + void record_cc_clear_time_ms(double ms); + + void record_young_free_cset_time_ms(double time_ms) { + _recorded_young_free_cset_time_ms = time_ms; + } + + void record_non_young_free_cset_time_ms(double time_ms) { + _recorded_non_young_free_cset_time_ms = time_ms; + } +}; + +#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMESLOG_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp index a13c62eb782..a8146c92386 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp @@ -34,7 +34,7 @@ /***** ALL TIMES ARE IN SECS!!!!!!! *****/ // this is the "interface" -class G1MMUTracker: public CHeapObj { +class G1MMUTracker: public CHeapObj { protected: double _time_slice; double _max_gc_time; // this is per time slice diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp index 61e278a7ff7..4e1761e260b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp @@ -112,7 +112,7 @@ class G1CollectedHeap; // do which is important as we want to keep the eden region allocation // path as low-overhead as possible. -class G1MonitoringSupport : public CHeapObj { +class G1MonitoringSupport : public CHeapObj { friend class VMStructs; G1CollectedHeap* _g1h; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp index 1f366c8c676..c3af182b251 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp @@ -29,6 +29,7 @@ #include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1CollectorPolicy.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" #include "gc_implementation/g1/g1RemSet.inline.hpp" #include "gc_implementation/g1/heapRegionSeq.inline.hpp" @@ -75,7 +76,7 @@ G1RemSet::G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs) { _seq_task = new SubTasksDone(NumSeqTasks); guarantee(n_workers() > 0, "There should be some workers"); - _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers()); + _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers(), mtGC); for (uint i = 0; i < n_workers(); i++) { _cset_rs_update_cl[i] = NULL; } @@ -86,7 +87,7 @@ G1RemSet::~G1RemSet() { for (uint i = 0; i < n_workers(); i++) { assert(_cset_rs_update_cl[i] == NULL, "it should be"); } - FREE_C_HEAP_ARRAY(OopsInHeapRegionClosure*, _cset_rs_update_cl); + FREE_C_HEAP_ARRAY(OopsInHeapRegionClosure*, _cset_rs_update_cl, mtGC); } void CountNonCleanMemRegionClosure::do_MemRegion(MemRegion mr) { @@ -224,7 +225,7 @@ void G1RemSet::scanRS(OopsInHeapRegionClosure* oc, int worker_i) { assert( _cards_scanned != NULL, "invariant" ); _cards_scanned[worker_i] = scanRScl.cards_done(); - _g1p->record_scan_rs_time(worker_i, scan_rs_time_sec * 1000.0); + _g1p->phase_times()->record_scan_rs_time(worker_i, scan_rs_time_sec * 1000.0); } // Closure used for updating RSets and recording references that @@ -276,7 +277,7 @@ void G1RemSet::updateRS(DirtyCardQueue* into_cset_dcq, int worker_i) { guarantee(cl.n() == 0, "Card table should be clean."); } - _g1p->record_update_rs_time(worker_i, (os::elapsedTime() - start) * 1000.0); + _g1p->phase_times()->record_update_rs_time(worker_i, (os::elapsedTime() - start) * 1000.0); } class CountRSSizeClosure: public HeapRegionClosure { @@ -390,13 +391,13 @@ void G1RemSet::oops_into_collection_set_do(OopsInHeapRegionClosure* oc, if (G1UseParallelRSetUpdating || (worker_i == 0)) { updateRS(&into_cset_dcq, worker_i); } else { - _g1p->record_update_rs_processed_buffers(worker_i, 0.0); - _g1p->record_update_rs_time(worker_i, 0.0); + _g1p->phase_times()->record_update_rs_processed_buffers(worker_i, 0.0); + _g1p->phase_times()->record_update_rs_time(worker_i, 0.0); } if (G1UseParallelRSetScanning || (worker_i == 0)) { scanRS(oc, worker_i); } else { - _g1p->record_scan_rs_time(worker_i, 0.0); + _g1p->phase_times()->record_scan_rs_time(worker_i, 0.0); } // We now clear the cached values of _cset_rs_update_cl for this worker @@ -416,7 +417,7 @@ void G1RemSet::prepare_for_oops_into_collection_set_do() { // _seq_task->set_n_termination((int)n_workers()); } guarantee( _cards_scanned == NULL, "invariant" ); - _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers()); + _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers(), mtGC); for (uint i = 0; i < n_workers(); ++i) { _cards_scanned[i] = 0; } @@ -487,7 +488,7 @@ void G1RemSet::cleanup_after_oops_into_collection_set_do() { for (uint i = 0; i < n_workers(); ++i) { _total_cards_scanned += _cards_scanned[i]; } - FREE_C_HEAP_ARRAY(size_t, _cards_scanned); + FREE_C_HEAP_ARRAY(size_t, _cards_scanned, mtGC); _cards_scanned = NULL; // Cleanup after copy _g1->set_refine_cte_cl_concurrency(true); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp index 9c869055afd..edf28a0536b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp @@ -36,7 +36,7 @@ class ConcurrentG1Refine; // external heap references into it. Uses a mod ref bs to track updates, // so that they can be used to update the individual region remsets. -class G1RemSet: public CHeapObj { +class G1RemSet: public CHeapObj { protected: G1CollectedHeap* _g1; unsigned _conc_refine_cards; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index 0378688c015..a589739f7d4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -53,6 +53,9 @@ develop(bool, G1TraceMarkStackOverflow, false, \ "If true, extra debugging code for CM restart for ovflw.") \ \ + develop(bool, G1TraceHeapRegionRememberedSet, false, \ + "Enables heap region remembered set debug logs") \ + \ diagnostic(bool, G1SummarizeConcMark, false, \ "Summarize concurrent mark info") \ \ diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp index a23bd79a7b3..84f7fb0bd5a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @@ -30,29 +30,22 @@ #include "gc_implementation/g1/heapRegionSeq.inline.hpp" #include "memory/allocation.hpp" #include "memory/space.inline.hpp" +#include "oops/oop.inline.hpp" #include "utilities/bitMap.inline.hpp" #include "utilities/globalDefinitions.hpp" -#define HRRS_VERBOSE 0 - -#define PRT_COUNT_OCCUPIED 1 - // OtherRegionsTable -class PerRegionTable: public CHeapObj { +class PerRegionTable: public CHeapObj { friend class OtherRegionsTable; friend class HeapRegionRemSetIterator; HeapRegion* _hr; BitMap _bm; -#if PRT_COUNT_OCCUPIED jint _occupied; -#endif - PerRegionTable* _next_free; - - PerRegionTable* next_free() { return _next_free; } - void set_next_free(PerRegionTable* prt) { _next_free = prt; } + // next pointer for free/allocated lis + PerRegionTable* _next; static PerRegionTable* _free_list; @@ -69,63 +62,25 @@ protected: // We need access in order to union things into the base table. BitMap* bm() { return &_bm; } -#if PRT_COUNT_OCCUPIED void recount_occupied() { _occupied = (jint) bm()->count_one_bits(); } -#endif PerRegionTable(HeapRegion* hr) : _hr(hr), -#if PRT_COUNT_OCCUPIED _occupied(0), -#endif _bm(HeapRegion::CardsPerRegion, false /* in-resource-area */) {} - static void free(PerRegionTable* prt) { - while (true) { - PerRegionTable* fl = _free_list; - prt->set_next_free(fl); - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr(prt, &_free_list, fl); - if (res == fl) return; - } - ShouldNotReachHere(); - } - - static PerRegionTable* alloc(HeapRegion* hr) { - PerRegionTable* fl = _free_list; - while (fl != NULL) { - PerRegionTable* nxt = fl->next_free(); - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr(nxt, &_free_list, fl); - if (res == fl) { - fl->init(hr); - return fl; - } else { - fl = _free_list; - } - } - assert(fl == NULL, "Loop condition."); - return new PerRegionTable(hr); - } - void add_card_work(CardIdx_t from_card, bool par) { if (!_bm.at(from_card)) { if (par) { if (_bm.par_at_put(from_card, 1)) { -#if PRT_COUNT_OCCUPIED Atomic::inc(&_occupied); -#endif } } else { _bm.at_put(from_card, 1); -#if PRT_COUNT_OCCUPIED _occupied++; -#endif } } } @@ -134,10 +89,13 @@ protected: // Must make this robust in case "from" is not in "_hr", because of // concurrency. -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").", - from, *from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").", + from, + UseCompressedOops + ? oopDesc::load_decode_heap_oop((narrowOop*)from) + : oopDesc::load_decode_heap_oop((oop*)from)); + } HeapRegion* loc_hr = hr(); // If the test below fails, then this table was reused concurrently @@ -162,23 +120,16 @@ public: HeapRegion* hr() const { return _hr; } -#if PRT_COUNT_OCCUPIED jint occupied() const { // Overkill, but if we ever need it... // guarantee(_occupied == _bm.count_one_bits(), "Check"); return _occupied; } -#else - jint occupied() const { - return _bm.count_one_bits(); - } -#endif void init(HeapRegion* hr) { _hr = hr; -#if PRT_COUNT_OCCUPIED + _next = NULL; _occupied = 0; -#endif _bm.clear(); } @@ -194,9 +145,7 @@ public: HeapWord* hr_bot = hr()->bottom(); size_t hr_first_card_index = ctbs->index_for(hr_bot); bm()->set_intersection_at_offset(*card_bm, hr_first_card_index); -#if PRT_COUNT_OCCUPIED recount_occupied(); -#endif } void add_card(CardIdx_t from_card_index) { @@ -218,16 +167,6 @@ public: return sizeof(this) + _bm.size_in_words() * HeapWordSize; } - static size_t fl_mem_size() { - PerRegionTable* cur = _free_list; - size_t res = 0; - while (cur != NULL) { - res += sizeof(PerRegionTable); - cur = cur->next_free(); - } - return res; - } - // Requires "from" to be in "hr()". bool contains_reference(OopOrNarrowOopStar from) const { assert(hr()->is_in_reserved(from), "Precondition."); @@ -235,122 +174,29 @@ public: CardTableModRefBS::card_size); return _bm.at(card_ind); } -}; -PerRegionTable* PerRegionTable::_free_list = NULL; + PerRegionTable* next() const { return _next; } + void set_next(PerRegionTable* nxt) { _next = nxt; } + PerRegionTable** next_addr() { return &_next; } - -#define COUNT_PAR_EXPANDS 0 - -#if COUNT_PAR_EXPANDS -static jint n_par_expands = 0; -static jint n_par_contracts = 0; -static jint par_expand_list_len = 0; -static jint max_par_expand_list_len = 0; - -static void print_par_expand() { - Atomic::inc(&n_par_expands); - Atomic::inc(&par_expand_list_len); - if (par_expand_list_len > max_par_expand_list_len) { - max_par_expand_list_len = par_expand_list_len; - } - if ((n_par_expands % 10) == 0) { - gclog_or_tty->print_cr("\n\n%d par expands: %d contracts, " - "len = %d, max_len = %d\n.", - n_par_expands, n_par_contracts, par_expand_list_len, - max_par_expand_list_len); - } -} -#endif - -class PosParPRT: public PerRegionTable { - PerRegionTable** _par_tables; - - enum SomePrivateConstants { - ReserveParTableExpansion = 1 - }; - - void par_contract() { - assert(_par_tables != NULL, "Precondition."); - int n = HeapRegionRemSet::num_par_rem_sets()-1; - for (int i = 0; i < n; i++) { - _par_tables[i]->union_bitmap_into(bm()); - PerRegionTable::free(_par_tables[i]); - _par_tables[i] = NULL; - } -#if PRT_COUNT_OCCUPIED - // We must recount the "occupied." - recount_occupied(); -#endif - FREE_C_HEAP_ARRAY(PerRegionTable*, _par_tables); - _par_tables = NULL; -#if COUNT_PAR_EXPANDS - Atomic::inc(&n_par_contracts); - Atomic::dec(&par_expand_list_len); -#endif - } - - static PerRegionTable** _par_table_fl; - - PosParPRT* _next; - - static PosParPRT* _free_list; - - PerRegionTable** par_tables() const { - assert(uintptr_t(NULL) == 0, "Assumption."); - if (uintptr_t(_par_tables) <= ReserveParTableExpansion) - return NULL; - else - return _par_tables; - } - - PosParPRT* _next_par_expanded; - PosParPRT* next_par_expanded() { return _next_par_expanded; } - void set_next_par_expanded(PosParPRT* ppprt) { _next_par_expanded = ppprt; } - static PosParPRT* _par_expanded_list; - -public: - - PosParPRT(HeapRegion* hr) : PerRegionTable(hr), _par_tables(NULL) {} - - jint occupied() const { - jint res = PerRegionTable::occupied(); - if (par_tables() != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - res += par_tables()[i]->occupied(); - } - } - return res; - } - - void init(HeapRegion* hr) { - PerRegionTable::init(hr); - _next = NULL; - if (par_tables() != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - par_tables()[i]->init(hr); - } - } - } - - static void free(PosParPRT* prt) { + static void free(PerRegionTable* prt) { while (true) { - PosParPRT* fl = _free_list; + PerRegionTable* fl = _free_list; prt->set_next(fl); - PosParPRT* res = - (PosParPRT*) + PerRegionTable* res = + (PerRegionTable*) Atomic::cmpxchg_ptr(prt, &_free_list, fl); if (res == fl) return; } ShouldNotReachHere(); } - static PosParPRT* alloc(HeapRegion* hr) { - PosParPRT* fl = _free_list; + static PerRegionTable* alloc(HeapRegion* hr) { + PerRegionTable* fl = _free_list; while (fl != NULL) { - PosParPRT* nxt = fl->next(); - PosParPRT* res = - (PosParPRT*) + PerRegionTable* nxt = fl->next(); + PerRegionTable* res = + (PerRegionTable*) Atomic::cmpxchg_ptr(nxt, &_free_list, fl); if (res == fl) { fl->init(hr); @@ -360,148 +206,26 @@ public: } } assert(fl == NULL, "Loop condition."); - return new PosParPRT(hr); - } - - PosParPRT* next() const { return _next; } - void set_next(PosParPRT* nxt) { _next = nxt; } - PosParPRT** next_addr() { return &_next; } - - bool should_expand(int tid) { - // Given that we now defer RSet updates for after a GC we don't - // really need to expand the tables any more. This code should be - // cleaned up in the future (see CR 6921087). - return false; - } - - void par_expand() { - int n = HeapRegionRemSet::num_par_rem_sets()-1; - if (n <= 0) return; - if (_par_tables == NULL) { - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr((PerRegionTable*)ReserveParTableExpansion, - &_par_tables, NULL); - if (res != NULL) return; - // Otherwise, we reserved the right to do the expansion. - - PerRegionTable** ptables = NEW_C_HEAP_ARRAY(PerRegionTable*, n); - for (int i = 0; i < n; i++) { - PerRegionTable* ptable = PerRegionTable::alloc(hr()); - ptables[i] = ptable; - } - // Here we do not need an atomic. - _par_tables = ptables; -#if COUNT_PAR_EXPANDS - print_par_expand(); -#endif - // We must put this table on the expanded list. - PosParPRT* exp_head = _par_expanded_list; - while (true) { - set_next_par_expanded(exp_head); - PosParPRT* res = - (PosParPRT*) - Atomic::cmpxchg_ptr(this, &_par_expanded_list, exp_head); - if (res == exp_head) return; - // Otherwise. - exp_head = res; - } - ShouldNotReachHere(); - } - } - - void add_reference(OopOrNarrowOopStar from, int tid) { - // Expand if necessary. - PerRegionTable** pt = par_tables(); - if (pt != NULL) { - // We always have to assume that mods to table 0 are in parallel, - // because of the claiming scheme in parallel expansion. A thread - // with tid != 0 that finds the table to be NULL, but doesn't succeed - // in claiming the right of expanding it, will end up in the else - // clause of the above if test. That thread could be delayed, and a - // thread 0 add reference could see the table expanded, and come - // here. Both threads would be adding in parallel. But we get to - // not use atomics for tids > 0. - if (tid == 0) { - PerRegionTable::add_reference(from); - } else { - pt[tid-1]->seq_add_reference(from); - } - } else { - // Not expanded -- add to the base table. - PerRegionTable::add_reference(from); - } - } - - void scrub(CardTableModRefBS* ctbs, BitMap* card_bm) { - assert(_par_tables == NULL, "Precondition"); - PerRegionTable::scrub(ctbs, card_bm); - } - - size_t mem_size() const { - size_t res = - PerRegionTable::mem_size() + sizeof(this) - sizeof(PerRegionTable); - if (_par_tables != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - res += _par_tables[i]->mem_size(); - } - } - return res; + return new PerRegionTable(hr); } static size_t fl_mem_size() { - PosParPRT* cur = _free_list; + PerRegionTable* cur = _free_list; size_t res = 0; while (cur != NULL) { - res += sizeof(PosParPRT); + res += sizeof(PerRegionTable); cur = cur->next(); } return res; } - - bool contains_reference(OopOrNarrowOopStar from) const { - if (PerRegionTable::contains_reference(from)) return true; - if (_par_tables != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - if (_par_tables[i]->contains_reference(from)) return true; - } - } - return false; - } - - static void par_contract_all(); }; -void PosParPRT::par_contract_all() { - PosParPRT* hd = _par_expanded_list; - while (hd != NULL) { - PosParPRT* nxt = hd->next_par_expanded(); - PosParPRT* res = - (PosParPRT*) - Atomic::cmpxchg_ptr(nxt, &_par_expanded_list, hd); - if (res == hd) { - // We claimed the right to contract this table. - hd->set_next_par_expanded(NULL); - hd->par_contract(); - hd = _par_expanded_list; - } else { - hd = res; - } - } -} - -PosParPRT* PosParPRT::_free_list = NULL; -PosParPRT* PosParPRT::_par_expanded_list = NULL; - -jint OtherRegionsTable::_cache_probes = 0; -jint OtherRegionsTable::_cache_hits = 0; +PerRegionTable* PerRegionTable::_free_list = NULL; size_t OtherRegionsTable::_max_fine_entries = 0; size_t OtherRegionsTable::_mod_max_fine_entries_mask = 0; -#if SAMPLE_FOR_EVICTION size_t OtherRegionsTable::_fine_eviction_stride = 0; size_t OtherRegionsTable::_fine_eviction_sample_size = 0; -#endif OtherRegionsTable::OtherRegionsTable(HeapRegion* hr) : _g1h(G1CollectedHeap::heap()), @@ -511,34 +235,36 @@ OtherRegionsTable::OtherRegionsTable(HeapRegion* hr) : false /* in-resource-area */), _fine_grain_regions(NULL), _n_fine_entries(0), _n_coarse_entries(0), -#if SAMPLE_FOR_EVICTION _fine_eviction_start(0), -#endif _sparse_table(hr) { - typedef PosParPRT* PosParPRTPtr; + typedef PerRegionTable* PerRegionTablePtr; + if (_max_fine_entries == 0) { assert(_mod_max_fine_entries_mask == 0, "Both or none."); size_t max_entries_log = (size_t)log2_long((jlong)G1RSetRegionEntries); _max_fine_entries = (size_t)(1 << max_entries_log); _mod_max_fine_entries_mask = _max_fine_entries - 1; -#if SAMPLE_FOR_EVICTION + assert(_fine_eviction_sample_size == 0 && _fine_eviction_stride == 0, "All init at same time."); _fine_eviction_sample_size = MAX2((size_t)4, max_entries_log); _fine_eviction_stride = _max_fine_entries / _fine_eviction_sample_size; -#endif } - _fine_grain_regions = new PosParPRTPtr[_max_fine_entries]; - if (_fine_grain_regions == NULL) + + _fine_grain_regions = new PerRegionTablePtr[_max_fine_entries]; + + if (_fine_grain_regions == NULL) { vm_exit_out_of_memory(sizeof(void*)*_max_fine_entries, "Failed to allocate _fine_grain_entries."); + } + for (size_t i = 0; i < _max_fine_entries; i++) { _fine_grain_regions[i] = NULL; } } -int** OtherRegionsTable::_from_card_cache = NULL; +int** OtherRegionsTable::_from_card_cache = NULL; size_t OtherRegionsTable::_from_card_cache_max_regions = 0; size_t OtherRegionsTable::_from_card_cache_mem_size = 0; @@ -546,9 +272,9 @@ void OtherRegionsTable::init_from_card_cache(size_t max_regions) { _from_card_cache_max_regions = max_regions; int n_par_rs = HeapRegionRemSet::num_par_rem_sets(); - _from_card_cache = NEW_C_HEAP_ARRAY(int*, n_par_rs); + _from_card_cache = NEW_C_HEAP_ARRAY(int*, n_par_rs, mtGC); for (int i = 0; i < n_par_rs; i++) { - _from_card_cache[i] = NEW_C_HEAP_ARRAY(int, max_regions); + _from_card_cache[i] = NEW_C_HEAP_ARRAY(int, max_regions, mtGC); for (size_t j = 0; j < max_regions; j++) { _from_card_cache[i][j] = -1; // An invalid value. } @@ -579,38 +305,26 @@ void OtherRegionsTable::print_from_card_cache() { void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { size_t cur_hrs_ind = (size_t) hr()->hrs_index(); -#if HRRS_VERBOSE - gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").", - from, - UseCompressedOops - ? oopDesc::load_decode_heap_oop((narrowOop*)from) - : oopDesc::load_decode_heap_oop((oop*)from)); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").", + from, + UseCompressedOops + ? oopDesc::load_decode_heap_oop((narrowOop*)from) + : oopDesc::load_decode_heap_oop((oop*)from)); + } int from_card = (int)(uintptr_t(from) >> CardTableModRefBS::card_shift); -#if HRRS_VERBOSE - gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = %d)", - hr()->bottom(), from_card, - _from_card_cache[tid][cur_hrs_ind]); -#endif - -#define COUNT_CACHE 0 -#if COUNT_CACHE - jint p = Atomic::add(1, &_cache_probes); - if ((p % 10000) == 0) { - jint hits = _cache_hits; - gclog_or_tty->print_cr("%d/%d = %5.2f%% RS cache hits.", - _cache_hits, p, 100.0* (float)hits/(float)p); + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = %d)", + hr()->bottom(), from_card, + _from_card_cache[tid][cur_hrs_ind]); } -#endif + if (from_card == _from_card_cache[tid][cur_hrs_ind]) { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" from-card cache hit."); -#endif -#if COUNT_CACHE - Atomic::inc(&_cache_hits); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" from-card cache hit."); + } assert(contains_reference(from), "We just added it!"); return; } else { @@ -623,16 +337,16 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { // If the region is already coarsened, return. if (_coarse_map.at(from_hrs_ind)) { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" coarse map hit."); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" coarse map hit."); + } assert(contains_reference(from), "We just added it!"); return; } // Otherwise find a per-region table to add it to. size_t ind = from_hrs_ind & _mod_max_fine_entries_mask; - PosParPRT* prt = find_region_table(ind, from_hr); + PerRegionTable* prt = find_region_table(ind, from_hr); if (prt == NULL) { MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); // Confirm that it's really not there... @@ -649,35 +363,35 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { _sparse_table.add_card(from_hrs_ind, card_index)) { if (G1RecordHRRSOops) { HeapRegionRemSet::record(hr(), from); -#if HRRS_VERBOSE - gclog_or_tty->print(" Added card " PTR_FORMAT " to region " - "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", - align_size_down(uintptr_t(from), - CardTableModRefBS::card_size), - hr()->bottom(), from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print(" Added card " PTR_FORMAT " to region " + "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", + align_size_down(uintptr_t(from), + CardTableModRefBS::card_size), + hr()->bottom(), from); + } + } + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" added card to sparse table."); } -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" added card to sparse table."); -#endif assert(contains_reference_locked(from), "We just added it!"); return; } else { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" [tid %d] sparse table entry " - "overflow(f: %d, t: %d)", - tid, from_hrs_ind, cur_hrs_ind); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" [tid %d] sparse table entry " + "overflow(f: %d, t: %d)", + tid, from_hrs_ind, cur_hrs_ind); + } } if (_n_fine_entries == _max_fine_entries) { prt = delete_region_table(); } else { - prt = PosParPRT::alloc(from_hr); + prt = PerRegionTable::alloc(from_hr); } prt->init(from_hr); - PosParPRT* first_prt = _fine_grain_regions[ind]; + PerRegionTable* first_prt = _fine_grain_regions[ind]; prt->set_next(first_prt); // XXX Maybe move to init? _fine_grain_regions[ind] = prt; _n_fine_entries++; @@ -704,38 +418,25 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { // OtherRegionsTable for why this is OK. assert(prt != NULL, "Inv"); - if (prt->should_expand(tid)) { - MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); - HeapRegion* prt_hr = prt->hr(); - if (prt_hr == from_hr) { - // Make sure the table still corresponds to the same region - prt->par_expand(); - prt->add_reference(from, tid); - } - // else: The table has been concurrently coarsened, evicted, and - // the table data structure re-used for another table. So, we - // don't need to add the reference any more given that the table - // has been coarsened and the whole region will be scanned anyway. - } else { - prt->add_reference(from, tid); - } + prt->add_reference(from); + if (G1RecordHRRSOops) { HeapRegionRemSet::record(hr(), from); -#if HRRS_VERBOSE - gclog_or_tty->print("Added card " PTR_FORMAT " to region " - "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", - align_size_down(uintptr_t(from), - CardTableModRefBS::card_size), - hr()->bottom(), from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print("Added card " PTR_FORMAT " to region " + "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", + align_size_down(uintptr_t(from), + CardTableModRefBS::card_size), + hr()->bottom(), from); + } } assert(contains_reference(from), "We just added it!"); } -PosParPRT* +PerRegionTable* OtherRegionsTable::find_region_table(size_t ind, HeapRegion* hr) const { assert(0 <= ind && ind < _max_fine_entries, "Preconditions."); - PosParPRT* prt = _fine_grain_regions[ind]; + PerRegionTable* prt = _fine_grain_regions[ind]; while (prt != NULL && prt->hr() != hr) { prt = prt->next(); } @@ -743,32 +444,16 @@ OtherRegionsTable::find_region_table(size_t ind, HeapRegion* hr) const { return prt; } - -#define DRT_CENSUS 0 - -#if DRT_CENSUS -static const int HistoSize = 6; -static int global_histo[HistoSize] = { 0, 0, 0, 0, 0, 0 }; -static int coarsenings = 0; -static int occ_sum = 0; -#endif - jint OtherRegionsTable::_n_coarsenings = 0; -PosParPRT* OtherRegionsTable::delete_region_table() { -#if DRT_CENSUS - int histo[HistoSize] = { 0, 0, 0, 0, 0, 0 }; - const int histo_limits[] = { 1, 4, 16, 64, 256, 2048 }; -#endif - +PerRegionTable* OtherRegionsTable::delete_region_table() { assert(_m.owned_by_self(), "Precondition"); assert(_n_fine_entries == _max_fine_entries, "Precondition"); - PosParPRT* max = NULL; + PerRegionTable* max = NULL; jint max_occ = 0; - PosParPRT** max_prev; + PerRegionTable** max_prev; size_t max_ind; -#if SAMPLE_FOR_EVICTION size_t i = _fine_eviction_start; for (size_t k = 0; k < _fine_eviction_sample_size; k++) { size_t ii = i; @@ -778,8 +463,8 @@ PosParPRT* OtherRegionsTable::delete_region_table() { if (ii == _max_fine_entries) ii = 0; guarantee(ii != i, "We must find one."); } - PosParPRT** prev = &_fine_grain_regions[ii]; - PosParPRT* cur = *prev; + PerRegionTable** prev = &_fine_grain_regions[ii]; + PerRegionTable* cur = *prev; while (cur != NULL) { jint cur_occ = cur->occupied(); if (max == NULL || cur_occ > max_occ) { @@ -794,64 +479,27 @@ PosParPRT* OtherRegionsTable::delete_region_table() { i = i + _fine_eviction_stride; if (i >= _n_fine_entries) i = i - _n_fine_entries; } + _fine_eviction_start++; - if (_fine_eviction_start >= _n_fine_entries) + + if (_fine_eviction_start >= _n_fine_entries) { _fine_eviction_start -= _n_fine_entries; -#else - for (int i = 0; i < _max_fine_entries; i++) { - PosParPRT** prev = &_fine_grain_regions[i]; - PosParPRT* cur = *prev; - while (cur != NULL) { - jint cur_occ = cur->occupied(); -#if DRT_CENSUS - for (int k = 0; k < HistoSize; k++) { - if (cur_occ <= histo_limits[k]) { - histo[k]++; global_histo[k]++; break; - } - } -#endif - if (max == NULL || cur_occ > max_occ) { - max = cur; - max_prev = prev; - max_ind = i; - max_occ = cur_occ; - } - prev = cur->next_addr(); - cur = cur->next(); - } } -#endif - // XXX + guarantee(max != NULL, "Since _n_fine_entries > 0"); -#if DRT_CENSUS - gclog_or_tty->print_cr("In a coarsening: histo of occs:"); - for (int k = 0; k < HistoSize; k++) { - gclog_or_tty->print_cr(" <= %4d: %5d.", histo_limits[k], histo[k]); - } - coarsenings++; - occ_sum += max_occ; - if ((coarsenings % 100) == 0) { - gclog_or_tty->print_cr("\ncoarsenings = %d; global summary:", coarsenings); - for (int k = 0; k < HistoSize; k++) { - gclog_or_tty->print_cr(" <= %4d: %5d.", histo_limits[k], global_histo[k]); - } - gclog_or_tty->print_cr("Avg occ of deleted region = %6.2f.", - (float)occ_sum/(float)coarsenings); - } -#endif // Set the corresponding coarse bit. size_t max_hrs_index = (size_t) max->hr()->hrs_index(); if (!_coarse_map.at(max_hrs_index)) { _coarse_map.at_put(max_hrs_index, true); _n_coarse_entries++; -#if 0 - gclog_or_tty->print("Coarsened entry in region [" PTR_FORMAT "...] " - "for region [" PTR_FORMAT "...] (%d coarse entries).\n", - hr()->bottom(), - max->hr()->bottom(), - _n_coarse_entries); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print("Coarsened entry in region [" PTR_FORMAT "...] " + "for region [" PTR_FORMAT "...] (%d coarse entries).\n", + hr()->bottom(), + max->hr()->bottom(), + _n_coarse_entries); + } } // Unsplice. @@ -883,10 +531,10 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, // Now do the fine-grained maps. for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; - PosParPRT** prev = &_fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; + PerRegionTable** prev = &_fine_grain_regions[i]; while (cur != NULL) { - PosParPRT* nxt = cur->next(); + PerRegionTable* nxt = cur->next(); // If the entire region is dead, eliminate. if (G1RSScrubVerbose) { gclog_or_tty->print_cr(" For other region %u:", @@ -899,7 +547,7 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, if (G1RSScrubVerbose) { gclog_or_tty->print_cr(" deleted via region map."); } - PosParPRT::free(cur); + PerRegionTable::free(cur); } else { // Do fine-grain elimination. if (G1RSScrubVerbose) { @@ -914,7 +562,7 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, *prev = nxt; cur->set_next(NULL); _n_fine_entries--; - PosParPRT::free(cur); + PerRegionTable::free(cur); } else { prev = cur->next_addr(); } @@ -940,7 +588,7 @@ size_t OtherRegionsTable::occupied() const { size_t OtherRegionsTable::occ_fine() const { size_t sum = 0; for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { sum += cur->occupied(); cur = cur->next(); @@ -962,13 +610,13 @@ size_t OtherRegionsTable::mem_size() const { MutexLockerEx x((Mutex*)&_m, Mutex::_no_safepoint_check_flag); size_t sum = 0; for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { sum += cur->mem_size(); cur = cur->next(); } } - sum += (sizeof(PosParPRT*) * _max_fine_entries); + sum += (sizeof(PerRegionTable*) * _max_fine_entries); sum += (_coarse_map.size_in_words() * HeapWordSize); sum += (_sparse_table.mem_size()); sum += sizeof(*this) - sizeof(_sparse_table); // Avoid double counting above. @@ -980,7 +628,7 @@ size_t OtherRegionsTable::static_mem_size() { } size_t OtherRegionsTable::fl_mem_size() { - return PerRegionTable::fl_mem_size() + PosParPRT::fl_mem_size(); + return PerRegionTable::fl_mem_size(); } void OtherRegionsTable::clear_fcc() { @@ -992,10 +640,10 @@ void OtherRegionsTable::clear_fcc() { void OtherRegionsTable::clear() { MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { - PosParPRT* nxt = cur->next(); - PosParPRT::free(cur); + PerRegionTable* nxt = cur->next(); + PerRegionTable::free(cur); cur = nxt; } _fine_grain_regions[i] = NULL; @@ -1035,8 +683,8 @@ void OtherRegionsTable::clear_incoming_entry(HeapRegion* from_hr) { bool OtherRegionsTable::del_single_region_table(size_t ind, HeapRegion* hr) { assert(0 <= ind && ind < _max_fine_entries, "Preconditions."); - PosParPRT** prev_addr = &_fine_grain_regions[ind]; - PosParPRT* prt = *prev_addr; + PerRegionTable** prev_addr = &_fine_grain_regions[ind]; + PerRegionTable* prt = *prev_addr; while (prt != NULL && prt->hr() != hr) { prev_addr = prt->next_addr(); prt = prt->next(); @@ -1044,7 +692,7 @@ bool OtherRegionsTable::del_single_region_table(size_t ind, if (prt != NULL) { assert(prt->hr() == hr, "Loop postcondition."); *prev_addr = prt->next(); - PosParPRT::free(prt); + PerRegionTable::free(prt); _n_fine_entries--; return true; } else { @@ -1065,7 +713,7 @@ bool OtherRegionsTable::contains_reference_locked(OopOrNarrowOopStar from) const // Is this region in the coarse map? if (_coarse_map.at(hr_ind)) return true; - PosParPRT* prt = find_region_table(hr_ind & _mod_max_fine_entries_mask, + PerRegionTable* prt = find_region_table(hr_ind & _mod_max_fine_entries_mask, hr); if (prt != NULL) { return prt->contains_reference(from); @@ -1106,7 +754,8 @@ HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa, void HeapRegionRemSet::setup_remset_size() { // Setup sparse and fine-grain tables sizes. // table_size = base * (log(region_size / 1M) + 1) - int region_size_log_mb = MAX2((int)HeapRegion::LogOfHRGrainBytes - (int)LOG_M, 0); + const int LOG_M = 20; + int region_size_log_mb = MAX2(HeapRegion::LogOfHRGrainBytes - LOG_M, 0); if (FLAG_IS_DEFAULT(G1RSetSparseRegionEntries)) { G1RSetSparseRegionEntries = G1RSetSparseRegionEntriesBase * (region_size_log_mb + 1); } @@ -1144,7 +793,7 @@ void HeapRegionRemSet::print() const { G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); gclog_or_tty->print_cr(" Card " PTR_FORMAT, card_start); } - // XXX + if (iter.n_yielded() != occupied()) { gclog_or_tty->print_cr("Yielded disagrees with occupied:"); gclog_or_tty->print_cr(" %6d yielded (%6d coarse, %6d fine).", @@ -1162,10 +811,6 @@ void HeapRegionRemSet::cleanup() { SparsePRT::cleanup_all(); } -void HeapRegionRemSet::par_cleanup() { - PosParPRT::par_contract_all(); -} - void HeapRegionRemSet::clear() { _other_regions.clear(); assert(occupied() == 0, "Should be clear."); @@ -1332,9 +977,9 @@ void HeapRegionRemSet::record(HeapRegion* hr, OopOrNarrowOopStar f) { && _recorded_cards == NULL && _recorded_regions == NULL, "Inv"); - _recorded_oops = NEW_C_HEAP_ARRAY(OopOrNarrowOopStar, MaxRecorded); - _recorded_cards = NEW_C_HEAP_ARRAY(HeapWord*, MaxRecorded); - _recorded_regions = NEW_C_HEAP_ARRAY(HeapRegion*, MaxRecorded); + _recorded_oops = NEW_C_HEAP_ARRAY(OopOrNarrowOopStar, MaxRecorded, mtGC); + _recorded_cards = NEW_C_HEAP_ARRAY(HeapWord*, MaxRecorded, mtGC); + _recorded_regions = NEW_C_HEAP_ARRAY(HeapRegion*, MaxRecorded, mtGC); } if (_n_recorded == MaxRecorded) { gclog_or_tty->print_cr("Filled up 'recorded' (%d).", MaxRecorded); @@ -1355,8 +1000,8 @@ void HeapRegionRemSet::record_event(Event evnt) { assert(_n_recorded_events == 0 && _recorded_event_index == NULL, "Inv"); - _recorded_events = NEW_C_HEAP_ARRAY(Event, MaxRecordedEvents); - _recorded_event_index = NEW_C_HEAP_ARRAY(int, MaxRecordedEvents); + _recorded_events = NEW_C_HEAP_ARRAY(Event, MaxRecordedEvents, mtGC); + _recorded_event_index = NEW_C_HEAP_ARRAY(int, MaxRecordedEvents, mtGC); } if (_n_recorded_events == MaxRecordedEvents) { gclog_or_tty->print_cr("Filled up 'recorded_events' (%d).", MaxRecordedEvents); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp index 504afa2ef04..c1ba2e8f112 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ class G1CollectedHeap; class G1BlockOffsetSharedArray; class HeapRegion; class HeapRegionRemSetIterator; -class PosParPRT; +class PerRegionTable; class SparsePRT; // Essentially a wrapper around SparsePRTCleanupTask. See @@ -79,15 +79,14 @@ class OtherRegionsTable VALUE_OBJ_CLASS_SPEC { size_t _n_coarse_entries; static jint _n_coarsenings; - PosParPRT** _fine_grain_regions; - size_t _n_fine_entries; + PerRegionTable** _fine_grain_regions; + size_t _n_fine_entries; -#define SAMPLE_FOR_EVICTION 1 -#if SAMPLE_FOR_EVICTION + // Used to sample a subset of the fine grain PRTs to determine which + // PRT to evict and coarsen. size_t _fine_eviction_start; static size_t _fine_eviction_stride; static size_t _fine_eviction_sample_size; -#endif SparsePRT _sparse_table; @@ -98,21 +97,18 @@ class OtherRegionsTable VALUE_OBJ_CLASS_SPEC { // Requires "prt" to be the first element of the bucket list appropriate // for "hr". If this list contains an entry for "hr", return it, // otherwise return "NULL". - PosParPRT* find_region_table(size_t ind, HeapRegion* hr) const; + PerRegionTable* find_region_table(size_t ind, HeapRegion* hr) const; - // Find, delete, and return a candidate PosParPRT, if any exists, + // Find, delete, and return a candidate PerRegionTable, if any exists, // adding the deleted region to the coarse bitmap. Requires the caller // to hold _m, and the fine-grain table to be full. - PosParPRT* delete_region_table(); + PerRegionTable* delete_region_table(); // If a PRT for "hr" is in the bucket list indicated by "ind" (which must // be the correct index for "hr"), delete it and return true; else return // false. bool del_single_region_table(size_t ind, HeapRegion* hr); - static jint _cache_probes; - static jint _cache_hits; - // Indexed by thread X heap region, to minimize thread contention. static int** _from_card_cache; static size_t _from_card_cache_max_regions; @@ -127,10 +123,6 @@ public: // sense. void add_reference(OopOrNarrowOopStar from, int tid); - void add_reference(OopOrNarrowOopStar from) { - return add_reference(from, 0); - } - // Removes any entries shown by the given bitmaps to contain only dead // objects. void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm); @@ -173,7 +165,7 @@ public: static void print_from_card_cache(); }; -class HeapRegionRemSet : public CHeapObj { +class HeapRegionRemSet : public CHeapObj { friend class VMStructs; friend class HeapRegionRemSetIterator; @@ -233,14 +225,12 @@ public: static jint n_coarsenings() { return OtherRegionsTable::n_coarsenings(); } - /* Used in the sequential case. Returns "true" iff this addition causes - the size limit to be reached. */ + // Used in the sequential case. void add_reference(OopOrNarrowOopStar from) { - _other_regions.add_reference(from); + _other_regions.add_reference(from, 0); } - /* Used in the parallel case. Returns "true" iff this addition causes - the size limit to be reached. */ + // Used in the parallel case. void add_reference(OopOrNarrowOopStar from, int tid) { _other_regions.add_reference(from, tid); } @@ -253,15 +243,6 @@ public: // entries for this region in other remsets. void clear(); - // Forget any entries due to pointers from "from_hr". - void clear_incoming_entry(HeapRegion* from_hr) { - _other_regions.clear_incoming_entry(from_hr); - } - -#if 0 - virtual void cleanup() = 0; -#endif - // Attempt to claim the region. Returns true iff this call caused an // atomic transition from Unclaimed to Claimed. bool claim_iter(); @@ -290,12 +271,6 @@ public: // Initialize the given iterator to iterate over this rem set. void init_iterator(HeapRegionRemSetIterator* iter) const; -#if 0 - // Apply the "do_card" method to the start address of every card in the - // rem set. Returns false if some application of the closure aborted. - virtual bool card_iterate(CardClosure* iter) = 0; -#endif - // The actual # of bytes this hr_remset takes up. size_t mem_size() { return _other_regions.mem_size() @@ -322,10 +297,7 @@ public: void print() const; // Called during a stop-world phase to perform any deferred cleanups. - // The second version may be called by parallel threads after then finish - // collection work. static void cleanup(); - static void par_cleanup(); // Declare the heap size (in # of regions) to the HeapRegionRemSet(s). // (Uses it to initialize from_card_cache). @@ -360,14 +332,14 @@ public: #endif }; -class HeapRegionRemSetIterator : public CHeapObj { +class HeapRegionRemSetIterator : public CHeapObj { // The region over which we're iterating. const HeapRegionRemSet* _hrrs; // Local caching of HRRS fields. const BitMap* _coarse_map; - PosParPRT** _fine_grain_regions; + PerRegionTable** _fine_grain_regions; G1BlockOffsetSharedArray* _bosa; G1CollectedHeap* _g1h; @@ -404,8 +376,9 @@ class HeapRegionRemSetIterator : public CHeapObj { // Index of bucket-list we're working on. int _fine_array_index; + // Per Region Table we're doing within current bucket list. - PosParPRT* _fine_cur_prt; + PerRegionTable* _fine_cur_prt; /* SparsePRT::*/ SparsePRTIter _sparse_iter; @@ -435,12 +408,4 @@ public: } }; -#if 0 -class CardClosure: public Closure { -public: - virtual void do_card(HeapWord* card_start) = 0; -}; - -#endif - #endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp index dfac7d47d29..fcee7cb354b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp @@ -86,7 +86,7 @@ void HeapRegionSeq::initialize(HeapWord* bottom, HeapWord* end, _allocated_length = 0; _max_length = max_length; - _regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length); + _regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length, mtGC); memset(_regions, 0, (size_t) max_length * sizeof(HeapRegion*)); _regions_biased = _regions - ((uintx) bottom >> _region_shift); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp index 94f4c0f7699..b1da14f6bc5 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp @@ -53,7 +53,7 @@ class FreeRegionList; // // and maintain that: _length <= _allocated_length <= _max_length -class HeapRegionSeq: public CHeapObj { +class HeapRegionSeq: public CHeapObj { friend class VMStructs; // The array that holds the HeapRegions. diff --git a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp index 7bf8fec644f..1a756aa3122 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp @@ -126,7 +126,7 @@ void** PtrQueueSet::allocate_buffer() { return res; } else { // Allocate space for the BufferNode in front of the buffer. - char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size()); + char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size(), mtGC); return BufferNode::make_buffer_from_block(b); } } @@ -149,7 +149,7 @@ void PtrQueueSet::reduce_free_list() { assert(_buf_free_list != NULL, "_buf_free_list_sz must be wrong."); void* b = BufferNode::make_block_from_node(_buf_free_list); _buf_free_list = _buf_free_list->next(); - FREE_C_HEAP_ARRAY(char, b); + FREE_C_HEAP_ARRAY(char, b, mtGC); _buf_free_list_sz --; n--; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp index 69b01bc69f5..c87f12dad3e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp @@ -208,7 +208,7 @@ void SATBMarkQueueSet::initialize(Monitor* cbl_mon, Mutex* fl_lock, PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, -1); _shared_satb_queue.set_lock(lock); if (ParallelGCThreads > 0) { - _par_closures = NEW_C_HEAP_ARRAY(ObjectClosure*, ParallelGCThreads); + _par_closures = NEW_C_HEAP_ARRAY(ObjectClosure*, ParallelGCThreads, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp index 64b1be2460f..0daa63512a3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp @@ -148,8 +148,8 @@ void SparsePRTEntry::copy_cards(SparsePRTEntry* e) const { RSHashTable::RSHashTable(size_t capacity) : _capacity(capacity), _capacity_mask(capacity-1), _occupied_entries(0), _occupied_cards(0), - _entries((SparsePRTEntry*)NEW_C_HEAP_ARRAY(char, SparsePRTEntry::size() * capacity)), - _buckets(NEW_C_HEAP_ARRAY(int, capacity)), + _entries((SparsePRTEntry*)NEW_C_HEAP_ARRAY(char, SparsePRTEntry::size() * capacity, mtGC)), + _buckets(NEW_C_HEAP_ARRAY(int, capacity, mtGC)), _free_list(NullEntry), _free_region(0) { clear(); @@ -157,11 +157,11 @@ RSHashTable::RSHashTable(size_t capacity) : RSHashTable::~RSHashTable() { if (_entries != NULL) { - FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries); + FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries, mtGC); _entries = NULL; } if (_buckets != NULL) { - FREE_C_HEAP_ARRAY(int, _buckets); + FREE_C_HEAP_ARRAY(int, _buckets, mtGC); _buckets = NULL; } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp index 6780086795f..6a860295745 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp @@ -42,7 +42,7 @@ // insertions only enqueue old versions for deletions, but do not delete // old versions synchronously. -class SparsePRTEntry: public CHeapObj { +class SparsePRTEntry: public CHeapObj { public: enum SomePublicConstants { NullEntry = -1, @@ -101,7 +101,7 @@ public: }; -class RSHashTable : public CHeapObj { +class RSHashTable : public CHeapObj { friend class RSHashTableIter; diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp index ec44c8e70a8..1232cf390e8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp @@ -43,7 +43,7 @@ SurvRateGroup::SurvRateGroup(G1CollectorPolicy* g1p, reset(); if (summary_surv_rates_len > 0) { size_t length = summary_surv_rates_len; - _summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length); + _summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length, mtGC); for (size_t i = 0; i < length; ++i) { _summary_surv_rates[i] = new NumberSeq(); } @@ -90,9 +90,9 @@ SurvRateGroup::stop_adding_regions() { double* old_accum_surv_rate_pred = _accum_surv_rate_pred; TruncatedSeq** old_surv_rate_pred = _surv_rate_pred; - _surv_rate = NEW_C_HEAP_ARRAY(double, _region_num); - _accum_surv_rate_pred = NEW_C_HEAP_ARRAY(double, _region_num); - _surv_rate_pred = NEW_C_HEAP_ARRAY(TruncatedSeq*, _region_num); + _surv_rate = NEW_C_HEAP_ARRAY(double, _region_num, mtGC); + _accum_surv_rate_pred = NEW_C_HEAP_ARRAY(double, _region_num, mtGC); + _surv_rate_pred = NEW_C_HEAP_ARRAY(TruncatedSeq*, _region_num, mtGC); for (size_t i = 0; i < _stats_arrays_length; ++i) { _surv_rate_pred[i] = old_surv_rate_pred[i]; @@ -104,13 +104,13 @@ SurvRateGroup::stop_adding_regions() { _stats_arrays_length = _region_num; if (old_surv_rate != NULL) { - FREE_C_HEAP_ARRAY(double, old_surv_rate); + FREE_C_HEAP_ARRAY(double, old_surv_rate, mtGC); } if (old_accum_surv_rate_pred != NULL) { - FREE_C_HEAP_ARRAY(double, old_accum_surv_rate_pred); + FREE_C_HEAP_ARRAY(double, old_accum_surv_rate_pred, mtGC); } if (old_surv_rate_pred != NULL) { - FREE_C_HEAP_ARRAY(TruncatedSeq*, old_surv_rate_pred); + FREE_C_HEAP_ARRAY(TruncatedSeq*, old_surv_rate_pred, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp index c9617f2ed2e..abac3e00a72 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp @@ -29,7 +29,7 @@ class G1CollectorPolicy; -class SurvRateGroup : public CHeapObj { +class SurvRateGroup : public CHeapObj { private: G1CollectorPolicy* _g1p; const char* _name; diff --git a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp index 1a330ba6483..cf7488ffebd 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp @@ -42,6 +42,7 @@ VM_G1CollectForAllocation::VM_G1CollectForAllocation( void VM_G1CollectForAllocation::doit() { G1CollectedHeap* g1h = G1CollectedHeap::heap(); + GCCauseSetter x(g1h, _gc_cause); _result = g1h->satisfy_failed_allocation(_word_size, &_pause_succeeded); assert(_result == NULL || _pause_succeeded, "if we get back a result, the pause should have succeeded"); @@ -63,7 +64,7 @@ VM_G1IncCollectionPause::VM_G1IncCollectionPause( _should_initiate_conc_mark(should_initiate_conc_mark), _target_pause_time_ms(target_pause_time_ms), _should_retry_gc(false), - _full_collections_completed_before(0) { + _old_marking_cycles_completed_before(0) { guarantee(target_pause_time_ms > 0.0, err_msg("target_pause_time_ms = %1.6lf should be positive", target_pause_time_ms)); @@ -111,11 +112,11 @@ void VM_G1IncCollectionPause::doit() { GCCauseSetter x(g1h, _gc_cause); if (_should_initiate_conc_mark) { - // It's safer to read full_collections_completed() here, given + // It's safer to read old_marking_cycles_completed() here, given // that noone else will be updating it concurrently. Since we'll // only need it if we're initiating a marking cycle, no point in // setting it earlier. - _full_collections_completed_before = g1h->full_collections_completed(); + _old_marking_cycles_completed_before = g1h->old_marking_cycles_completed(); // At this point we are supposed to start a concurrent cycle. We // will do so if one is not already in progress. @@ -180,17 +181,17 @@ void VM_G1IncCollectionPause::doit_epilogue() { G1CollectedHeap* g1h = G1CollectedHeap::heap(); - // In the doit() method we saved g1h->full_collections_completed() - // in the _full_collections_completed_before field. We have to - // wait until we observe that g1h->full_collections_completed() + // In the doit() method we saved g1h->old_marking_cycles_completed() + // in the _old_marking_cycles_completed_before field. We have to + // wait until we observe that g1h->old_marking_cycles_completed() // has increased by at least one. This can happen if a) we started // a cycle and it completes, b) a cycle already in progress // completes, or c) a Full GC happens. // If the condition has already been reached, there's no point in // actually taking the lock and doing the wait. - if (g1h->full_collections_completed() <= - _full_collections_completed_before) { + if (g1h->old_marking_cycles_completed() <= + _old_marking_cycles_completed_before) { // The following is largely copied from CMS Thread* thr = Thread::current(); @@ -199,8 +200,8 @@ void VM_G1IncCollectionPause::doit_epilogue() { ThreadToNativeFromVM native(jt); MutexLockerEx x(FullGCCount_lock, Mutex::_no_safepoint_check_flag); - while (g1h->full_collections_completed() <= - _full_collections_completed_before) { + while (g1h->old_marking_cycles_completed() <= + _old_marking_cycles_completed_before) { FullGCCount_lock->wait(Mutex::_no_safepoint_check_flag); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp index ea2aeae2108..691812e2edb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp @@ -80,7 +80,7 @@ private: bool _should_initiate_conc_mark; bool _should_retry_gc; double _target_pause_time_ms; - unsigned int _full_collections_completed_before; + unsigned int _old_marking_cycles_completed_before; public: VM_G1IncCollectionPause(unsigned int gc_count_before, size_t word_size, diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp index 25be723aa98..b4b62fc77f9 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp @@ -457,12 +457,12 @@ get_LNC_array_for_space(Space* sp, if (_lowest_non_clean[i] != NULL) { assert(n_chunks != _lowest_non_clean_chunk_size[i], "logical consequence"); - FREE_C_HEAP_ARRAY(CardPtr, _lowest_non_clean[i]); + FREE_C_HEAP_ARRAY(CardPtr, _lowest_non_clean[i], mtGC); _lowest_non_clean[i] = NULL; } // Now allocate a new one if necessary. if (_lowest_non_clean[i] == NULL) { - _lowest_non_clean[i] = NEW_C_HEAP_ARRAY(CardPtr, n_chunks); + _lowest_non_clean[i] = NEW_C_HEAP_ARRAY(CardPtr, n_chunks, mtGC); _lowest_non_clean_chunk_size[i] = n_chunks; _lowest_non_clean_base_chunk_index[i] = addr_to_chunk_index(covered.start()); for (int j = 0; j < (int)n_chunks; j++) diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp index 6d1504a8653..ea2fbf6170e 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp @@ -35,7 +35,7 @@ class PLABStats; // A per-thread allocation buffer used during GC. -class ParGCAllocBuffer: public CHeapObj { +class ParGCAllocBuffer: public CHeapObj { protected: char head[32]; size_t _word_sz; // in HeapWord units diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp index 4f64dff0824..12472f6ad93 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @@ -59,7 +59,7 @@ ParScanThreadState::ParScanThreadState(Space* to_space_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_) : _to_space(to_space_), _old_gen(old_gen_), _young_gen(gen_), _thread_num(thread_num_), @@ -184,7 +184,7 @@ bool ParScanThreadState::take_from_overflow_stack() { assert(ParGCUseLocalOverflow, "Else should not call"); assert(young_gen()->overflow_list() == NULL, "Error"); ObjToScanQueue* queue = work_queue(); - Stack* const of_stack = overflow_stack(); + Stack* const of_stack = overflow_stack(); const size_t num_overflow_elems = of_stack->size(); const size_t space_available = queue->max_elems() - queue->size(); const size_t num_take_elems = MIN3(space_available / 4, @@ -297,7 +297,7 @@ public: ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz, ParallelTaskTerminator& term); @@ -331,7 +331,7 @@ private: ParScanThreadStateSet::ParScanThreadStateSet( int num_threads, Space& to_space, ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - Stack* overflow_stacks, + Stack* overflow_stacks, size_t desired_plab_sz, ParallelTaskTerminator& term) : ResourceArray(sizeof(ParScanThreadState), num_threads), _gen(gen), _next_gen(old_gen), _term(term) @@ -649,9 +649,14 @@ ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level) _overflow_stacks = NULL; if (ParGCUseLocalOverflow) { - _overflow_stacks = NEW_C_HEAP_ARRAY(Stack, ParallelGCThreads); + + // typedef to workaround NEW_C_HEAP_ARRAY macro, which can not deal + // with ',' + typedef Stack GCOopStack; + + _overflow_stacks = NEW_C_HEAP_ARRAY(GCOopStack, ParallelGCThreads, mtGC); for (size_t i = 0; i < ParallelGCThreads; ++i) { - new (_overflow_stacks + i) Stack(); + new (_overflow_stacks + i) Stack(); } } @@ -916,7 +921,7 @@ void ParNewGeneration::collect(bool full, size_policy->minor_collection_begin(); } - TraceTime t1("GC", PrintGC && !PrintGCDetails, true, gclog_or_tty); + TraceTime t1(GCCauseString("GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, gclog_or_tty); // Capture heap used before collection (for printing). size_t gch_prev_used = gch->used(); @@ -1401,7 +1406,7 @@ void ParNewGeneration::push_on_overflow_list(oop from_space_obj, ParScanThreadSt assert(_num_par_pushes > 0, "Tautology"); #endif if (from_space_obj->forwardee() == from_space_obj) { - oopDesc* listhead = NEW_C_HEAP_ARRAY(oopDesc, 1); + oopDesc* listhead = NEW_C_HEAP_ARRAY(oopDesc, 1, mtGC); listhead->forward_to(from_space_obj); from_space_obj = listhead; } @@ -1553,7 +1558,7 @@ bool ParNewGeneration::take_from_overflow_list_work(ParScanThreadState* par_scan // This can become a scaling bottleneck when there is work queue overflow coincident // with promotion failure. oopDesc* f = cur; - FREE_C_HEAP_ARRAY(oopDesc, f); + FREE_C_HEAP_ARRAY(oopDesc, f, mtGC); } else if (par_scan_state->should_be_partially_scanned(obj_to_push, cur)) { assert(arrayOop(cur)->length() == 0, "entire array remaining to be scanned"); obj_to_push = cur; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp index 75eac033b06..5b124a953fd 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp @@ -41,7 +41,7 @@ class ParEvacuateFollowersClosure; // in genOopClosures.inline.hpp. typedef Padded ObjToScanQueue; -typedef GenericTaskQueueSet ObjToScanQueueSet; +typedef GenericTaskQueueSet ObjToScanQueueSet; class ParKeepAliveClosure: public DefNewGeneration::KeepAliveClosure { private: @@ -59,7 +59,7 @@ class ParScanThreadState { friend class ParScanThreadStateSet; private: ObjToScanQueue *_work_queue; - Stack* const _overflow_stack; + Stack* const _overflow_stack; ParGCAllocBuffer _to_space_alloc_buffer; @@ -127,7 +127,7 @@ class ParScanThreadState { ParScanThreadState(Space* to_space_, ParNewGeneration* gen_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_); @@ -151,7 +151,7 @@ class ParScanThreadState { void trim_queues(int max_size); // Private overflow stack usage - Stack* overflow_stack() { return _overflow_stack; } + Stack* overflow_stack() { return _overflow_stack; } bool take_from_overflow_stack(); void push_on_overflow_stack(oop p); @@ -312,7 +312,7 @@ class ParNewGeneration: public DefNewGeneration { ObjToScanQueueSet* _task_queues; // Per-worker-thread local overflow stacks - Stack* _overflow_stacks; + Stack* _overflow_stacks; // Desired size of survivor space plab's PLABStats _plab_stats; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp index 747868fc5f5..4a727e9357a 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp @@ -32,7 +32,7 @@ class ParScanThreadState; class ParNewGeneration; typedef Padded ObjToScanQueue; -typedef GenericTaskQueueSet ObjToScanQueueSet; +typedef GenericTaskQueueSet ObjToScanQueueSet; class ParallelTaskTerminator; class ParScanClosure: public OopsInGenClosure { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp index 77fe9e022e5..3018805fe69 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp @@ -40,7 +40,7 @@ // must be shrunk. Adjusting the boundary between the generations // is called for in this class. -class AdjoiningGenerations : public CHeapObj { +class AdjoiningGenerations : public CHeapObj { friend class VMStructs; private: // The young generation and old generation, respectively diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp index 04424aa5208..b32007eded5 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp @@ -116,7 +116,7 @@ GCTaskQueue* GCTaskQueue::create() { } GCTaskQueue* GCTaskQueue::create_on_c_heap() { - GCTaskQueue* result = new(ResourceObj::C_HEAP) GCTaskQueue(true); + GCTaskQueue* result = new(ResourceObj::C_HEAP, mtGC) GCTaskQueue(true); if (TraceGCTaskQueue) { tty->print_cr("GCTaskQueue::create_on_c_heap()" " returns " INTPTR_FORMAT, @@ -403,19 +403,19 @@ void GCTaskManager::initialize() { _queue = SynchronizedGCTaskQueue::create(unsynchronized_queue, lock()); _noop_task = NoopGCTask::create_on_c_heap(); _idle_inactive_task = WaitForBarrierGCTask::create_on_c_heap(); - _resource_flag = NEW_C_HEAP_ARRAY(bool, workers()); + _resource_flag = NEW_C_HEAP_ARRAY(bool, workers(), mtGC); { // Set up worker threads. // Distribute the workers among the available processors, // unless we were told not to, or if the os doesn't want to. - uint* processor_assignment = NEW_C_HEAP_ARRAY(uint, workers()); + uint* processor_assignment = NEW_C_HEAP_ARRAY(uint, workers(), mtGC); if (!BindGCTaskThreadsToCPUs || !os::distribute_processes(workers(), processor_assignment)) { for (uint a = 0; a < workers(); a += 1) { processor_assignment[a] = sentinel_worker(); } } - _thread = NEW_C_HEAP_ARRAY(GCTaskThread*, workers()); + _thread = NEW_C_HEAP_ARRAY(GCTaskThread*, workers(), mtGC); for (uint t = 0; t < workers(); t += 1) { set_thread(t, GCTaskThread::create(this, t, processor_assignment[t])); } @@ -426,7 +426,7 @@ void GCTaskManager::initialize() { } tty->cr(); } - FREE_C_HEAP_ARRAY(uint, processor_assignment); + FREE_C_HEAP_ARRAY(uint, processor_assignment, mtGC); } reset_busy_workers(); set_unblocked(); @@ -455,11 +455,11 @@ GCTaskManager::~GCTaskManager() { GCTaskThread::destroy(thread(i)); set_thread(i, NULL); } - FREE_C_HEAP_ARRAY(GCTaskThread*, _thread); + FREE_C_HEAP_ARRAY(GCTaskThread*, _thread, mtGC); _thread = NULL; } if (_resource_flag != NULL) { - FREE_C_HEAP_ARRAY(bool, _resource_flag); + FREE_C_HEAP_ARRAY(bool, _resource_flag, mtGC); _resource_flag = NULL; } if (queue() != NULL) { @@ -817,7 +817,7 @@ NoopGCTask* NoopGCTask::create() { } NoopGCTask* NoopGCTask::create_on_c_heap() { - NoopGCTask* result = new(ResourceObj::C_HEAP) NoopGCTask(true); + NoopGCTask* result = new(ResourceObj::C_HEAP, mtGC) NoopGCTask(true); return result; } @@ -848,7 +848,7 @@ IdleGCTask* IdleGCTask::create() { } IdleGCTask* IdleGCTask::create_on_c_heap() { - IdleGCTask* result = new(ResourceObj::C_HEAP) IdleGCTask(true); + IdleGCTask* result = new(ResourceObj::C_HEAP, mtGC) IdleGCTask(true); assert(UseDynamicNumberOfGCThreads, "Should only be used with dynamic GC thread"); return result; @@ -984,7 +984,7 @@ WaitForBarrierGCTask* WaitForBarrierGCTask::create() { WaitForBarrierGCTask* WaitForBarrierGCTask::create_on_c_heap() { WaitForBarrierGCTask* result = - new (ResourceObj::C_HEAP) WaitForBarrierGCTask(true); + new (ResourceObj::C_HEAP, mtGC) WaitForBarrierGCTask(true); return result; } @@ -1114,7 +1114,7 @@ Monitor* MonitorSupply::reserve() { // Lazy initialization. if (freelist() == NULL) { _freelist = - new(ResourceObj::C_HEAP) GrowableArray(ParallelGCThreads, + new(ResourceObj::C_HEAP, mtGC) GrowableArray(ParallelGCThreads, true); } if (! freelist()->is_empty()) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp index 65a8458d3b9..b64f7d9557e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp @@ -216,7 +216,7 @@ protected: // A GCTaskQueue that can be synchronized. // This "has-a" GCTaskQueue and a mutex to do the exclusion. -class SynchronizedGCTaskQueue : public CHeapObj { +class SynchronizedGCTaskQueue : public CHeapObj { private: // Instance state. GCTaskQueue* _unsynchronized_queue; // Has-a unsynchronized queue. @@ -278,7 +278,7 @@ protected: // This is an abstract base class for getting notifications // when a GCTaskManager is done. -class NotifyDoneClosure : public CHeapObj { +class NotifyDoneClosure : public CHeapObj { public: // The notification callback method. virtual void notify(GCTaskManager* manager) = 0; @@ -355,7 +355,7 @@ protected: // held in the GCTaskThread** _thread array in GCTaskManager. -class GCTaskManager : public CHeapObj { +class GCTaskManager : public CHeapObj { friend class ParCompactionManager; friend class PSParallelCompact; friend class PSScavenge; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp index 976d879d5f6..9bbdf49ed75 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp @@ -46,7 +46,7 @@ GCTaskThread::GCTaskThread(GCTaskManager* manager, vm_exit_out_of_memory(0, "Cannot create GC thread. Out of system resources."); if (PrintGCTaskTimeStamps) { - _time_stamps = NEW_C_HEAP_ARRAY(GCTaskTimeStamp, GCTaskTimeStampEntries ); + _time_stamps = NEW_C_HEAP_ARRAY(GCTaskTimeStamp, GCTaskTimeStampEntries, mtGC); guarantee(_time_stamps != NULL, "Sanity"); } @@ -56,7 +56,7 @@ GCTaskThread::GCTaskThread(GCTaskManager* manager, GCTaskThread::~GCTaskThread() { if (_time_stamps != NULL) { - FREE_C_HEAP_ARRAY(GCTaskTimeStamp, _time_stamps); + FREE_C_HEAP_ARRAY(GCTaskTimeStamp, _time_stamps, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp index c8406545e9b..1a77fe060c4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp @@ -90,7 +90,7 @@ protected: void set_is_working(bool v) { _is_working = v; } }; -class GCTaskTimeStamp : public CHeapObj +class GCTaskTimeStamp : public CHeapObj { private: jlong _entry_time; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp index 1b80839213d..8a852cc95e9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp @@ -28,6 +28,7 @@ #include "memory/cardTableModRefBS.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" void ObjectStartArray::initialize(MemRegion reserved_region) { // We're based on the assumption that we use the same @@ -50,6 +51,7 @@ void ObjectStartArray::initialize(MemRegion reserved_region) { if (!backing_store.is_reserved()) { vm_exit_during_initialization("Could not reserve space for ObjectStartArray"); } + MemTracker::record_virtual_memory_type((address)backing_store.base(), mtGC); // We do not commit any memory initially if (!_virtual_space.initialize(backing_store, 0)) { @@ -57,10 +59,14 @@ void ObjectStartArray::initialize(MemRegion reserved_region) { } _raw_base = (jbyte*)_virtual_space.low_boundary(); + if (_raw_base == NULL) { vm_exit_during_initialization("Could not get raw_base address"); } + MemTracker::record_virtual_memory_type((address)_raw_base, mtGC); + + _offset_base = _raw_base - (size_t(reserved_region.start()) >> block_shift); _covered_region.set_start(reserved_region.start()); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp index cea680b58b1..cbd671a06c4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp @@ -35,7 +35,7 @@ // covered region. // -class ObjectStartArray : public CHeapObj { +class ObjectStartArray : public CHeapObj { friend class VerifyObjectStartArrayClosure; private: diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp index 4496a6987de..44ddcba440f 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp @@ -29,6 +29,7 @@ #include "oops/oop.inline.hpp" #include "runtime/os.hpp" #include "utilities/bitMap.inline.hpp" +#include "services/memTracker.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -61,6 +62,9 @@ ParMarkBitMap::initialize(MemRegion covered_region) ReservedSpace rs(bytes, rs_align, rs_align > 0); os::trace_page_sizes("par bitmap", raw_bytes, raw_bytes, page_sz, rs.base(), rs.size()); + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + _virtual_space = new PSVirtualSpace(rs, page_sz); if (_virtual_space != NULL && _virtual_space->expand_by(bytes)) { _region_start = covered_region.start(); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp index e6a07310dbf..9523b7923f6 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp @@ -32,7 +32,7 @@ class oopDesc; class ParMarkBitMapClosure; -class ParMarkBitMap: public CHeapObj +class ParMarkBitMap: public CHeapObj { public: typedef BitMap::idx_t idx_t; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp index 9a8848d5399..a1031a76a61 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp @@ -40,6 +40,7 @@ #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" #include "runtime/vmThread.hpp" +#include "services/memTracker.hpp" #include "utilities/vmError.hpp" PSYoungGen* ParallelScavengeHeap::_young_gen = NULL; @@ -161,6 +162,8 @@ jint ParallelScavengeHeap::initialize() { } } + MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap); + os::trace_page_sizes("ps perm", pg_min_size, pg_max_size, pg_page_sz, heap_rs.base(), pg_max_size); os::trace_page_sizes("ps main", og_min_size + yg_min_size, diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp index ab4ad84796b..fc66dcf52a9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp @@ -81,14 +81,14 @@ void ParCompactionManager::initialize(ParMarkBitMap* mbm) { uint parallel_gc_threads = PSParallelCompact::gc_task_manager()->workers(); assert(_manager_array == NULL, "Attempt to initialize twice"); - _manager_array = NEW_C_HEAP_ARRAY(ParCompactionManager*, parallel_gc_threads+1 ); + _manager_array = NEW_C_HEAP_ARRAY(ParCompactionManager*, parallel_gc_threads+1, mtGC); guarantee(_manager_array != NULL, "Could not allocate manager_array"); _region_list = NEW_C_HEAP_ARRAY(RegionTaskQueue*, - parallel_gc_threads+1); + parallel_gc_threads+1, mtGC); guarantee(_region_list != NULL, "Could not initialize promotion manager"); - _recycled_stack_index = NEW_C_HEAP_ARRAY(uint, parallel_gc_threads); + _recycled_stack_index = NEW_C_HEAP_ARRAY(uint, parallel_gc_threads, mtGC); // parallel_gc-threads + 1 to be consistent with the number of // compaction managers. diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp index a864ac8edf1..73849bebaaf 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp @@ -41,7 +41,7 @@ class ObjectStartArray; class ParallelCompactData; class ParMarkBitMap; -class ParCompactionManager : public CHeapObj { +class ParCompactionManager : public CHeapObj { friend class ParallelTaskTerminator; friend class ParMarkBitMap; friend class PSParallelCompact; @@ -66,8 +66,8 @@ class ParCompactionManager : public CHeapObj { private: // 32-bit: 4K * 8 = 32KiB; 64-bit: 8K * 16 = 128KiB #define QUEUE_SIZE (1 << NOT_LP64(12) LP64_ONLY(13)) - typedef OverflowTaskQueue ObjArrayTaskQueue; - typedef GenericTaskQueueSet ObjArrayTaskQueueSet; + typedef OverflowTaskQueue ObjArrayTaskQueue; + typedef GenericTaskQueueSet ObjArrayTaskQueueSet; #undef QUEUE_SIZE static ParCompactionManager** _manager_array; @@ -78,7 +78,7 @@ class ParCompactionManager : public CHeapObj { static PSOldGen* _old_gen; private: - OverflowTaskQueue _marking_stack; + OverflowTaskQueue _marking_stack; ObjArrayTaskQueue _objarray_stack; // Is there a way to reuse the _marking_stack for the @@ -110,8 +110,8 @@ private: // popped. If -1, there has not been any entry popped. static int _recycled_bottom; - Stack _revisit_klass_stack; - Stack _revisit_mdo_stack; + Stack _revisit_klass_stack; + Stack _revisit_mdo_stack; static ParMarkBitMap* _mark_bitmap; @@ -126,7 +126,7 @@ private: protected: // Array of tasks. Needed by the ParallelTaskTerminator. static RegionTaskQueueSet* region_array() { return _region_array; } - OverflowTaskQueue* marking_stack() { return &_marking_stack; } + OverflowTaskQueue* marking_stack() { return &_marking_stack; } // Pushes onto the marking stack. If the marking stack is full, // pushes onto the overflow stack. @@ -175,8 +175,8 @@ private: bool should_update(); bool should_copy(); - Stack* revisit_klass_stack() { return &_revisit_klass_stack; } - Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } + Stack* revisit_klass_stack() { return &_revisit_klass_stack; } + Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } // Save for later processing. Must not fail. inline void push(oop obj) { _marking_stack.push(obj); } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp index 67378de145e..ccb4298f883 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp @@ -40,7 +40,7 @@ PSGenerationCounters::PSGenerationCounters(const char* name, const char* cns = PerfDataManager::name_space("generation", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp index ad599ae3219..0ef97523630 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp @@ -160,16 +160,10 @@ bool PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) { { HandleMark hm; - const bool is_system_gc = gc_cause == GCCause::_java_lang_system_gc; - // This is useful for debugging but don't change the output the - // the customer sees. - const char* gc_cause_str = "Full GC"; - if (is_system_gc && PrintGCDetails) { - gc_cause_str = "Full GC (System)"; - } + gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - TraceTime t1(gc_cause_str, PrintGC, !PrintGCDetails, gclog_or_tty); + TraceTime t1(GCCauseString("Full GC", gc_cause), PrintGC, !PrintGCDetails, gclog_or_tty); TraceCollectorStats tcs(counters()); TraceMemoryManagerStats tms(true /* Full GC */,gc_cause); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp index 9d721d61bc4..ae92f3690fe 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp @@ -34,7 +34,7 @@ class ObjectStartArray; -class PSMarkSweepDecorator: public CHeapObj { +class PSMarkSweepDecorator: public CHeapObj { private: static PSMarkSweepDecorator* _destination_decorator; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp index ce45376f01e..c07b381bc62 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp @@ -34,7 +34,7 @@ class PSMarkSweepDecorator; -class PSOldGen : public CHeapObj { +class PSOldGen : public CHeapObj { friend class VMStructs; friend class PSPromotionManager; // Uses the cas_allocate methods friend class ParallelScavengeHeap; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp index 354b3d04347..2633197b067 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @@ -53,6 +53,7 @@ #include "runtime/vmThread.hpp" #include "services/management.hpp" #include "services/memoryService.hpp" +#include "services/memTracker.hpp" #include "utilities/events.hpp" #include "utilities/stack.inline.hpp" @@ -405,6 +406,9 @@ ParallelCompactData::create_vspace(size_t count, size_t element_size) ReservedSpace rs(bytes, rs_align, rs_align > 0); os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(), rs.size()); + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz); if (vspace != 0) { if (vspace->expand_by(bytes)) { @@ -2047,17 +2051,9 @@ bool PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { gc_task_manager()->task_idle_workers(); heap->set_par_threads(gc_task_manager()->active_workers()); - const bool is_system_gc = gc_cause == GCCause::_java_lang_system_gc; - - // This is useful for debugging but don't change the output the - // the customer sees. - const char* gc_cause_str = "Full GC"; - if (is_system_gc && PrintGCDetails) { - gc_cause_str = "Full GC (System)"; - } gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - TraceTime t1(gc_cause_str, PrintGC, !PrintGCDetails, gclog_or_tty); + TraceTime t1(GCCauseString("Full GC", gc_cause), PrintGC, !PrintGCDetails, gclog_or_tty); TraceCollectorStats tcs(counters()); TraceMemoryManagerStats tms(true /* Full GC */,gc_cause); @@ -2090,7 +2086,8 @@ bool PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { } #endif // #ifndef PRODUCT - bool max_on_system_gc = UseMaximumCompactionOnSystemGC && is_system_gc; + bool max_on_system_gc = UseMaximumCompactionOnSystemGC + && gc_cause == GCCause::_java_lang_system_gc; summary_phase(vmthread_cm, maximum_heap_compaction || max_on_system_gc); COMPILER2_PRESENT(assert(DerivedPointerTable::is_active(), "Sanity")); @@ -2739,7 +2736,7 @@ PSParallelCompact::follow_weak_klass_links() { for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); KeepAliveClosure keep_alive_closure(cm); - Stack* const rks = cm->revisit_klass_stack(); + Stack* const rks = cm->revisit_klass_stack(); if (PrintRevisitStats) { gclog_or_tty->print_cr("Revisit klass stack[%u] length = " SIZE_FORMAT, i, rks->size()); @@ -2772,7 +2769,7 @@ void PSParallelCompact::follow_mdo_weak_refs() { } for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); - Stack* rms = cm->revisit_mdo_stack(); + Stack* rms = cm->revisit_mdo_stack(); if (PrintRevisitStats) { gclog_or_tty->print_cr("Revisit MDO stack[%u] size = " SIZE_FORMAT, i, rms->size()); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp index fd6a7bf561b..e11ce406eec 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp @@ -36,7 +36,7 @@ class ObjectStartArray; -class PSPromotionLAB : public CHeapObj { +class PSPromotionLAB : public CHeapObj { protected: static size_t filler_header_size; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp index f7249690539..b3f91d51f99 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp @@ -45,7 +45,7 @@ void PSPromotionManager::initialize() { _young_space = heap->young_gen()->to_space(); assert(_manager_array == NULL, "Attempt to initialize twice"); - _manager_array = NEW_C_HEAP_ARRAY(PSPromotionManager*, ParallelGCThreads+1 ); + _manager_array = NEW_C_HEAP_ARRAY(PSPromotionManager*, ParallelGCThreads+1, mtGC); guarantee(_manager_array != NULL, "Could not initialize promotion manager"); _stack_array_depth = new OopStarTaskQueueSet(ParallelGCThreads); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp index 360640eba07..0e429edc660 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp @@ -49,7 +49,7 @@ class MutableSpace; class PSOldGen; class ParCompactionManager; -class PSPromotionManager : public CHeapObj { +class PSPromotionManager : public CHeapObj { friend class PSScavenge; friend class PSRefProcTaskExecutor; private: @@ -77,7 +77,7 @@ class PSPromotionManager : public CHeapObj { bool _old_gen_is_full; OopStarTaskQueue _claimed_stack_depth; - OverflowTaskQueue _claimed_stack_breadth; + OverflowTaskQueue _claimed_stack_breadth; bool _totally_drain; uint _target_stack_size; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp index 984b1a452eb..38d74422deb 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @@ -62,8 +62,8 @@ bool PSScavenge::_survivor_overflow = false; int PSScavenge::_tenuring_threshold = 0; HeapWord* PSScavenge::_young_generation_boundary = NULL; elapsedTimer PSScavenge::_accumulated_time; -Stack PSScavenge::_preserved_mark_stack; -Stack PSScavenge::_preserved_oop_stack; +Stack PSScavenge::_preserved_mark_stack; +Stack PSScavenge::_preserved_oop_stack; CollectorCounters* PSScavenge::_counters = NULL; bool PSScavenge::_promotion_failed = false; @@ -325,7 +325,7 @@ bool PSScavenge::invoke_no_policy() { gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - TraceTime t1("GC", PrintGC, !PrintGCDetails, gclog_or_tty); + TraceTime t1(GCCauseString("GC", gc_cause), PrintGC, !PrintGCDetails, gclog_or_tty); TraceCollectorStats tcs(counters()); TraceMemoryManagerStats tms(false /* not full GC */,gc_cause); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp index 2ff201e4e8b..25416d01141 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp @@ -71,8 +71,8 @@ class PSScavenge: AllStatic { static HeapWord* _young_generation_boundary; // The lowest address possible for the young_gen. // This is used to decide if an oop should be scavenged, // cards should be marked, etc. - static Stack _preserved_mark_stack; // List of marks to be restored after failed promotion - static Stack _preserved_oop_stack; // List of oops that need their mark restored. + static Stack _preserved_mark_stack; // List of marks to be restored after failed promotion + static Stack _preserved_oop_stack; // List of oops that need their mark restored. static CollectorCounters* _counters; // collector performance counters static bool _promotion_failed; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp index da452cab0dc..b90ed979b4e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp @@ -32,7 +32,7 @@ // VirtualSpace is data structure for committing a previously reserved address // range in smaller chunks. -class PSVirtualSpace : public CHeapObj { +class PSVirtualSpace : public CHeapObj { friend class VMStructs; protected: // The space is committed/uncommited in chunks of size _alignment. The diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp index b5a2a14bbbf..7f1c297cc58 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp @@ -33,7 +33,7 @@ class PSMarkSweepDecorator; -class PSYoungGen : public CHeapObj { +class PSYoungGen : public CHeapObj { friend class VMStructs; friend class ParallelScavengeHeap; friend class AdjoiningGenerations; diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp index dd1895e9e06..4becadce84b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp @@ -38,7 +38,7 @@ class elapsedTimer; class CollectorPolicy; -class AdaptiveSizePolicy : public CHeapObj { +class AdaptiveSizePolicy : public CHeapObj { friend class GCAdaptivePolicyCounters; friend class PSGCAdaptivePolicyCounters; friend class CMSGCAdaptivePolicyCounters; diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp index e6820723007..2319ca1a7a2 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp @@ -37,7 +37,7 @@ CSpaceCounters::CSpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp index d4a860eb842..c113a3338fd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp @@ -32,7 +32,7 @@ // A CSpaceCounters is a holder class for performance counters // that track a space; -class CSpaceCounters: public CHeapObj { +class CSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -52,7 +52,7 @@ class CSpaceCounters: public CHeapObj { ContiguousSpace* s, GenerationCounters* gc); ~CSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtInternal); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp index 91dad5e66e1..d5aff5c5d09 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp @@ -34,7 +34,7 @@ CollectorCounters::CollectorCounters(const char* name, int ordinal) { const char* cns = PerfDataManager::name_space("collector", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp index b793f7b24db..52eb44396ad 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp @@ -30,7 +30,7 @@ // CollectorCounters is a holder class for performance counters // that track a collector -class CollectorCounters: public CHeapObj { +class CollectorCounters: public CHeapObj { friend class VMStructs; private: @@ -50,7 +50,7 @@ class CollectorCounters: public CHeapObj { CollectorCounters(const char* name, int ordinal); ~CollectorCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline PerfCounter* invocation_counter() const { return _invocations; } diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp index 3d95950e834..00a96703d57 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp @@ -41,7 +41,7 @@ GSpaceCounters::GSpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp index 85764c4f743..8b901e2e9e0 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp @@ -34,7 +34,7 @@ // A GSpaceCounter is a holder class for performance counters // that track a space; -class GSpaceCounters: public CHeapObj { +class GSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -54,7 +54,7 @@ class GSpaceCounters: public CHeapObj { GenerationCounters* gc, bool sampled=true); ~GSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp index 6d4494c0f4d..10a7bac5144 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp @@ -30,7 +30,7 @@ // GCPolicyCounters is a holder class for performance counters // that track a generation -class GCPolicyCounters: public CHeapObj { +class GCPolicyCounters: public CHeapObj { friend class VMStructs; private: diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp index 070300e9b1a..af16ca63ecf 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp @@ -27,7 +27,7 @@ #include "gc_implementation/shared/gcUtil.hpp" -class GCStats : public CHeapObj { +class GCStats : public CHeapObj { protected: // Avg amount promoted; used for avoiding promotion undo // This class does not update deviations if the sample is zero. diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp index 5325fee218b..3b9fd7a68aa 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.cpp @@ -31,9 +31,15 @@ float AdaptiveWeightedAverage::compute_adaptive_average(float new_sample, float average) { // We smooth the samples by not using weight() directly until we've // had enough data to make it meaningful. We'd like the first weight - // used to be 1, the second to be 1/2, etc until we have 100/weight - // samples. - unsigned count_weight = 100/count(); + // used to be 1, the second to be 1/2, etc until we have + // OLD_THRESHOLD/weight samples. + unsigned count_weight = 0; + + // Avoid division by zero if the counter wraps (7158457) + if (!is_old()) { + count_weight = OLD_THRESHOLD/count(); + } + unsigned adaptive_weight = (MAX2(weight(), count_weight)); float new_avg = exp_avg(average, new_sample, adaptive_weight); @@ -43,8 +49,6 @@ float AdaptiveWeightedAverage::compute_adaptive_average(float new_sample, void AdaptiveWeightedAverage::sample(float new_sample) { increment_count(); - assert(count() != 0, - "Wraparound -- history would be incorrectly discarded"); // Compute the new weighted average float new_avg = compute_adaptive_average(new_sample, average()); diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp index 8dd3258de0a..ba97f7cfd3a 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp @@ -43,18 +43,27 @@ // // This serves as our best estimate of a future unknown. // -class AdaptiveWeightedAverage : public CHeapObj { +class AdaptiveWeightedAverage : public CHeapObj { private: float _average; // The last computed average unsigned _sample_count; // How often we've sampled this average unsigned _weight; // The weight used to smooth the averages // A higher weight favors the most // recent data. + bool _is_old; // Has enough historical data + + const static unsigned OLD_THRESHOLD = 100; protected: float _last_sample; // The last value sampled. - void increment_count() { _sample_count++; } + void increment_count() { + _sample_count++; + if (!_is_old && _sample_count > OLD_THRESHOLD) { + _is_old = true; + } + } + void set_average(float avg) { _average = avg; } // Helper function, computes an adaptive weighted average @@ -64,13 +73,15 @@ class AdaptiveWeightedAverage : public CHeapObj { public: // Input weight must be between 0 and 100 AdaptiveWeightedAverage(unsigned weight, float avg = 0.0) : - _average(avg), _sample_count(0), _weight(weight), _last_sample(0.0) { + _average(avg), _sample_count(0), _weight(weight), _last_sample(0.0), + _is_old(false) { } void clear() { _average = 0; _sample_count = 0; _last_sample = 0; + _is_old = false; } // Useful for modifying static structures after startup. @@ -84,7 +95,8 @@ class AdaptiveWeightedAverage : public CHeapObj { float average() const { return _average; } unsigned weight() const { return _weight; } unsigned count() const { return _sample_count; } - float last_sample() const { return _last_sample; } + float last_sample() const { return _last_sample; } + bool is_old() const { return _is_old; } // Update data with a new sample. void sample(float new_sample); @@ -134,7 +146,7 @@ class AdaptivePaddedAverage : public AdaptiveWeightedAverage { // Placement support void* operator new(size_t ignored, void* p) { return p; } // Allocator - void* operator new(size_t size) { return CHeapObj::operator new(size); } + void* operator new(size_t size) { return CHeapObj::operator new(size); } // Accessor float padded_average() const { return _padded_avg; } @@ -180,7 +192,7 @@ public: // equation. // y = intercept + slope * x -class LinearLeastSquareFit : public CHeapObj { +class LinearLeastSquareFit : public CHeapObj { double _sum_x; // sum of all independent data points x double _sum_x_squared; // sum of all independent data points x**2 double _sum_y; // sum of all dependent data points y diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp index 68ab6ffc17e..8cbfac19bee 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp @@ -35,7 +35,7 @@ void GenerationCounters::initialize(const char* name, int ordinal, int spaces, const char* cns = PerfDataManager::name_space("generation", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp index f399b955819..78c00769101 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp @@ -31,7 +31,7 @@ // A GenerationCounter is a holder class for performance counters // that track a generation -class GenerationCounters: public CHeapObj { +class GenerationCounters: public CHeapObj { friend class VMStructs; private: @@ -69,7 +69,7 @@ private: VirtualSpace* v); ~GenerationCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } virtual void update_all(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp index 17a69fa832e..cc4cccb3bdc 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp @@ -40,7 +40,7 @@ HSpaceCounters::HSpaceCounters(const char* name, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp index a55d443a91f..d33a103fb32 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp @@ -37,7 +37,7 @@ class HeapSpaceUsedHelper; class G1SpaceMonitoringSupport; -class HSpaceCounters: public CHeapObj { +class HSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -55,7 +55,7 @@ class HSpaceCounters: public CHeapObj { size_t initial_capacity, GenerationCounters* gc); ~HSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity(size_t v) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp index 7d6be0d9f85..6152e64e4c9 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp @@ -33,7 +33,7 @@ // Invariant: bottom() and end() are on page_size boundaries and // bottom() <= end() -class ImmutableSpace: public CHeapObj { +class ImmutableSpace: public CHeapObj { friend class VMStructs; protected: HeapWord* _bottom; diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp index 584c24c821a..77678293653 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp @@ -30,13 +30,13 @@ #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" -Stack MarkSweep::_marking_stack; -Stack MarkSweep::_revisit_mdo_stack; -Stack MarkSweep::_revisit_klass_stack; -Stack MarkSweep::_objarray_stack; +Stack MarkSweep::_marking_stack; +Stack MarkSweep::_revisit_mdo_stack; +Stack MarkSweep::_revisit_klass_stack; +Stack MarkSweep::_objarray_stack; -Stack MarkSweep::_preserved_oop_stack; -Stack MarkSweep::_preserved_mark_stack; +Stack MarkSweep::_preserved_oop_stack; +Stack MarkSweep::_preserved_mark_stack; size_t MarkSweep::_preserved_count = 0; size_t MarkSweep::_preserved_count_max = 0; PreservedMark* MarkSweep::_preserved_marks = NULL; @@ -166,7 +166,7 @@ void MarkSweep::adjust_marks() { } // deal with the overflow stack - StackIterator iter(_preserved_oop_stack); + StackIterator iter(_preserved_oop_stack); while (!iter.is_empty()) { oop* p = iter.next_addr(); adjust_pointer(p); diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp index 19bee0ed34e..4decbddc7fd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp @@ -122,16 +122,16 @@ class MarkSweep : AllStatic { // protected: // Traversal stacks used during phase1 - static Stack _marking_stack; - static Stack _objarray_stack; + static Stack _marking_stack; + static Stack _objarray_stack; // Stack for live klasses to revisit at end of marking phase - static Stack _revisit_klass_stack; + static Stack _revisit_klass_stack; // Set (stack) of MDO's to revisit at end of marking phase - static Stack _revisit_mdo_stack; + static Stack _revisit_mdo_stack; // Space for storing/restoring mark word - static Stack _preserved_mark_stack; - static Stack _preserved_oop_stack; + static Stack _preserved_mark_stack; + static Stack _preserved_oop_stack; static size_t _preserved_count; static size_t _preserved_count_max; static PreservedMark* _preserved_marks; diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp index f0f6a49d958..d930b00674b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp @@ -43,7 +43,7 @@ MutableNUMASpace::MutableNUMASpace(size_t alignment) : MutableSpace(alignment) { - _lgrp_spaces = new (ResourceObj::C_HEAP) GrowableArray(0, true); + _lgrp_spaces = new (ResourceObj::C_HEAP, mtGC) GrowableArray(0, true); _page_size = os::vm_page_size(); _adaptation_cycles = 0; _samples_count = 0; @@ -231,7 +231,7 @@ bool MutableNUMASpace::update_layout(bool force) { if (force || changed) { // Compute lgrp intersection. Add/remove spaces. int lgrp_limit = (int)os::numa_get_groups_num(); - int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit); + int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit, mtGC); int lgrp_num = (int)os::numa_get_leaf_groups(lgrp_ids, lgrp_limit); assert(lgrp_num > 0, "There should be at least one locality group"); // Add new spaces for the new nodes @@ -265,7 +265,7 @@ bool MutableNUMASpace::update_layout(bool force) { } } - FREE_C_HEAP_ARRAY(int, lgrp_ids); + FREE_C_HEAP_ARRAY(int, lgrp_ids, mtGC); if (changed) { for (JavaThread *thread = Threads::first(); thread; thread = thread->next()) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp index db7207cc24b..8b8f8d65e21 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp @@ -63,7 +63,7 @@ class MutableNUMASpace : public MutableSpace { friend class VMStructs; - class LGRPSpace : public CHeapObj { + class LGRPSpace : public CHeapObj { int _lgrp_id; MutableSpace* _space; MemRegion _invalid_region; diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp index a5815c921cd..44fc6e16b70 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp @@ -39,7 +39,7 @@ SpaceCounters::SpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp index f75a9f26c1e..1369ee0c313 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp @@ -35,7 +35,7 @@ // A SpaceCounter is a holder class for performance counters // that track a space; -class SpaceCounters: public CHeapObj { +class SpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -55,7 +55,7 @@ class SpaceCounters: public CHeapObj { MutableSpace* m, GenerationCounters* gc); ~SpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp index c41a5eb591b..513735ddf08 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp @@ -70,7 +70,7 @@ class SpaceDecorator: public AllStatic { // These subclasses abstract the differences in the types of spaces used // by each heap. -class SpaceMangler: public CHeapObj { +class SpaceMangler: public CHeapObj { friend class VMStructs; // High water mark for allocations. Typically, the space above diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp index 105e1ea8f24..be42500031d 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp @@ -74,7 +74,7 @@ class GCHeapLog : public EventLogBase { // G1CollectedHeap // ParallelScavengeHeap // -class CollectedHeap : public CHeapObj { +class CollectedHeap : public CHeapObj { friend class VMStructs; friend class IsGCActiveMark; // Block structured external access to _is_gc_active friend class constantPoolCacheKlass; // allocate() method inserts is_conc_safe diff --git a/hotspot/src/share/vm/gc_interface/gcCause.hpp b/hotspot/src/share/vm/gc_interface/gcCause.hpp index ae14115d7e2..8866d7675ce 100644 --- a/hotspot/src/share/vm/gc_interface/gcCause.hpp +++ b/hotspot/src/share/vm/gc_interface/gcCause.hpp @@ -88,4 +88,36 @@ class GCCause : public AllStatic { static const char* to_string(GCCause::Cause cause); }; +// Helper class for doing logging that includes the GC Cause +// as a string. +class GCCauseString : StackObj { + private: + static const int _length = 128; + char _buffer[_length]; + int _position; + + public: + GCCauseString(const char* prefix, GCCause::Cause cause) { + if (PrintGCCause) { + _position = jio_snprintf(_buffer, _length, "%s (%s)", prefix, GCCause::to_string(cause)); + } else { + _position = jio_snprintf(_buffer, _length, "%s", prefix); + } + assert(_position >= 0 && _position <= _length, + err_msg("Need to increase the buffer size in GCCauseString? %d", _position)); + } + + GCCauseString& append(const char* str) { + int res = jio_snprintf(_buffer + _position, _length - _position, "%s", str); + _position += res; + assert(res >= 0 && _position <= _length, + err_msg("Need to increase the buffer size in GCCauseString? %d", res)); + return *this; + } + + operator const char*() { + return _buffer; + } +}; + #endif // SHARE_VM_GC_INTERFACE_GCCAUSE_HPP diff --git a/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp b/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp index a68fac1d63d..756ad88e28b 100644 --- a/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp +++ b/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp @@ -107,6 +107,8 @@ class AbstractInterpreter: AllStatic { java_lang_math_sqrt, // implementation of java.lang.Math.sqrt (x) java_lang_math_log, // implementation of java.lang.Math.log (x) java_lang_math_log10, // implementation of java.lang.Math.log10 (x) + java_lang_math_pow, // implementation of java.lang.Math.pow (x,y) + java_lang_math_exp, // implementation of java.lang.Math.exp (x) java_lang_ref_reference_get, // implementation of java.lang.ref.Reference.get() number_of_method_entries, invalid = -1 diff --git a/hotspot/src/share/vm/interpreter/interpreter.cpp b/hotspot/src/share/vm/interpreter/interpreter.cpp index 137f50ee3f1..7030d572b6c 100644 --- a/hotspot/src/share/vm/interpreter/interpreter.cpp +++ b/hotspot/src/share/vm/interpreter/interpreter.cpp @@ -221,6 +221,8 @@ AbstractInterpreter::MethodKind AbstractInterpreter::method_kind(methodHandle m) case vmIntrinsics::_dsqrt : return java_lang_math_sqrt ; case vmIntrinsics::_dlog : return java_lang_math_log ; case vmIntrinsics::_dlog10: return java_lang_math_log10; + case vmIntrinsics::_dpow : return java_lang_math_pow ; + case vmIntrinsics::_dexp : return java_lang_math_exp ; case vmIntrinsics::_Reference_get: return java_lang_ref_reference_get; diff --git a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp index e1c166587dd..aa1b0adab4d 100644 --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -375,7 +375,6 @@ IRT_ENTRY(address, InterpreterRuntime::exception_handler_for_exception(JavaThrea Handle h_exception(thread, exception); methodHandle h_method (thread, method(thread)); constantPoolHandle h_constants(thread, h_method->constants()); - typeArrayHandle h_extable (thread, h_method->exception_table()); bool should_repeat; int handler_bci; int current_bci = bci(thread); @@ -547,23 +546,6 @@ IRT_ENTRY(void, InterpreterRuntime::resolve_get_put(JavaThread* thread, Bytecode } } - if (is_put && !is_static && klass->is_subclass_of(SystemDictionary::CallSite_klass()) && (info.name() == vmSymbols::target_name())) { - const jint direction = frame::interpreter_frame_expression_stack_direction(); - Handle call_site (THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at(-1 * direction))); - Handle method_handle(THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at( 0 * direction))); - assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "must be"); - assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be"); - - { - // Walk all nmethods depending on this call site. - MutexLocker mu(Compile_lock, thread); - Universe::flush_dependents_on(call_site, method_handle); - } - - // Don't allow fast path for setting CallSite.target and sub-classes. - put_code = (Bytecodes::Code) 0; - } - cache_entry(thread)->set_field( get_code, put_code, @@ -844,6 +826,14 @@ nmethod* InterpreterRuntime::frequency_counter_overflow(JavaThread* thread, addr int bci = method->bci_from(fr.interpreter_frame_bcp()); nm = method->lookup_osr_nmethod_for(bci, CompLevel_none, false); } +#ifndef PRODUCT + if (TraceOnStackReplacement) { + if (nm != NULL) { + tty->print("OSR entry @ pc: " INTPTR_FORMAT ": ", nm->osr_entry()); + nm->print(); + } + } +#endif return nm; } @@ -1110,8 +1100,8 @@ void SignatureHandlerLibrary::initialize() { SignatureHandlerLibrary::buffer_size); _buffer = bb->code_begin(); - _fingerprints = new(ResourceObj::C_HEAP)GrowableArray(32, true); - _handlers = new(ResourceObj::C_HEAP)GrowableArray
    (32, true); + _fingerprints = new(ResourceObj::C_HEAP, mtCode)GrowableArray(32, true); + _handlers = new(ResourceObj::C_HEAP, mtCode)GrowableArray
    (32, true); } address SignatureHandlerLibrary::set_handler(CodeBuffer* buffer) { diff --git a/hotspot/src/share/vm/interpreter/oopMapCache.cpp b/hotspot/src/share/vm/interpreter/oopMapCache.cpp index f5ff6f6c917..01d5753547b 100644 --- a/hotspot/src/share/vm/interpreter/oopMapCache.cpp +++ b/hotspot/src/share/vm/interpreter/oopMapCache.cpp @@ -348,7 +348,7 @@ void OopMapCacheEntry::allocate_bit_mask() { if (mask_size() > small_mask_limit) { assert(_bit_mask[0] == 0, "bit mask should be new or just flushed"); _bit_mask[0] = (intptr_t) - NEW_C_HEAP_ARRAY(uintptr_t, mask_word_size()); + NEW_C_HEAP_ARRAY(uintptr_t, mask_word_size(), mtClass); } } @@ -356,7 +356,7 @@ void OopMapCacheEntry::deallocate_bit_mask() { if (mask_size() > small_mask_limit && _bit_mask[0] != 0) { assert(!Thread::current()->resource_area()->contains((void*)_bit_mask[0]), "This bit mask should not be in the resource area"); - FREE_C_HEAP_ARRAY(uintptr_t, _bit_mask[0]); + FREE_C_HEAP_ARRAY(uintptr_t, _bit_mask[0], mtClass); debug_only(_bit_mask[0] = 0;) } } @@ -506,7 +506,7 @@ inline unsigned int OopMapCache::hash_value_for(methodHandle method, int bci) { OopMapCache::OopMapCache() : _mut(Mutex::leaf, "An OopMapCache lock", true) { - _array = NEW_C_HEAP_ARRAY(OopMapCacheEntry, _size); + _array = NEW_C_HEAP_ARRAY(OopMapCacheEntry, _size, mtClass); // Cannot call flush for initialization, since flush // will check if memory should be deallocated for(int i = 0; i < _size; i++) _array[i].initialize(); @@ -520,7 +520,7 @@ OopMapCache::~OopMapCache() { flush(); // Deallocate array NOT_PRODUCT(_total_memory_usage -= sizeof(OopMapCache) + (sizeof(OopMapCacheEntry) * _size);) - FREE_C_HEAP_ARRAY(OopMapCacheEntry, _array); + FREE_C_HEAP_ARRAY(OopMapCacheEntry, _array, mtClass); } OopMapCacheEntry* OopMapCache::entry_at(int i) const { @@ -639,9 +639,9 @@ void OopMapCache::lookup(methodHandle method, void OopMapCache::compute_one_oop_map(methodHandle method, int bci, InterpreterOopMap* entry) { // Due to the invariants above it's tricky to allocate a temporary OopMapCacheEntry on the stack - OopMapCacheEntry* tmp = NEW_C_HEAP_ARRAY(OopMapCacheEntry, 1); + OopMapCacheEntry* tmp = NEW_C_HEAP_ARRAY(OopMapCacheEntry, 1, mtClass); tmp->initialize(); tmp->fill(method, bci); entry->resource_copy(tmp); - FREE_C_HEAP_ARRAY(OopMapCacheEntry, tmp); + FREE_C_HEAP_ARRAY(OopMapCacheEntry, tmp, mtInternal); } diff --git a/hotspot/src/share/vm/interpreter/oopMapCache.hpp b/hotspot/src/share/vm/interpreter/oopMapCache.hpp index 068e4d3b982..fea9ec09ca9 100644 --- a/hotspot/src/share/vm/interpreter/oopMapCache.hpp +++ b/hotspot/src/share/vm/interpreter/oopMapCache.hpp @@ -156,7 +156,7 @@ class InterpreterOopMap: ResourceObj { #endif }; -class OopMapCache : public CHeapObj { +class OopMapCache : public CHeapObj { private: enum { _size = 32, // Use fixed size for now _probe_depth = 3 // probe depth in case of collisions diff --git a/hotspot/src/share/vm/interpreter/templateInterpreter.cpp b/hotspot/src/share/vm/interpreter/templateInterpreter.cpp index 231c46f8746..459d02f98a4 100644 --- a/hotspot/src/share/vm/interpreter/templateInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/templateInterpreter.cpp @@ -370,6 +370,8 @@ void TemplateInterpreterGenerator::generate_all() { method_entry(java_lang_math_sqrt ) method_entry(java_lang_math_log ) method_entry(java_lang_math_log10) + method_entry(java_lang_math_exp ) + method_entry(java_lang_math_pow ) method_entry(java_lang_ref_reference_get) // all native method kinds (must be one contiguous block) diff --git a/hotspot/src/share/vm/libadt/set.cpp b/hotspot/src/share/vm/libadt/set.cpp index 1849b13b294..c475a21f700 100644 --- a/hotspot/src/share/vm/libadt/set.cpp +++ b/hotspot/src/share/vm/libadt/set.cpp @@ -71,7 +71,7 @@ char *Set::setstr() const set.Sort(); // Sort elements for in-order retrieval uint len = 128; // Total string space - char *buf = NEW_C_HEAP_ARRAY(char,len);// Some initial string space + char *buf = NEW_C_HEAP_ARRAY(char,len, mtCompiler);// Some initial string space register char *s = buf; // Current working string pointer *s++ = '{'; @@ -86,7 +86,7 @@ char *Set::setstr() const if( buf+len-s < 25 ) { // Generous trailing space for upcoming numbers int offset = (int)(s-buf);// Not enuf space; compute offset into buffer len <<= 1; // Double string size - buf = REALLOC_C_HEAP_ARRAY(char,buf,len); // Reallocate doubled size + buf = REALLOC_C_HEAP_ARRAY(char,buf,len, mtCompiler); // Reallocate doubled size s = buf+offset; // Get working pointer into new bigger buffer } if( lo != (uint)-2 ) { // Startup? No! Then print previous range. @@ -101,7 +101,7 @@ char *Set::setstr() const if( buf+len-s < 25 ) { // Generous trailing space for upcoming numbers int offset = (int)(s-buf);// Not enuf space; compute offset into buffer len <<= 1; // Double string size - buf = (char*)ReallocateHeap(buf,len); // Reallocate doubled size + buf = (char*)ReallocateHeap(buf,len, mtCompiler); // Reallocate doubled size s = buf+offset; // Get working pointer into new bigger buffer } if( lo != hi ) sprintf(s,"%d-%d}",lo,hi); diff --git a/hotspot/src/share/vm/libadt/vectset.cpp b/hotspot/src/share/vm/libadt/vectset.cpp index 0042ca762fd..de7bcd81e80 100644 --- a/hotspot/src/share/vm/libadt/vectset.cpp +++ b/hotspot/src/share/vm/libadt/vectset.cpp @@ -362,7 +362,7 @@ public: }; SetI_ *VectorSet::iterate(uint &elem) const { - return new(ResourceObj::C_HEAP) VSetI_(this, elem); + return new(ResourceObj::C_HEAP, mtInternal) VSetI_(this, elem); } //============================================================================= diff --git a/hotspot/src/share/vm/memory/allocation.cpp b/hotspot/src/share/vm/memory/allocation.cpp index 0479e73378f..dfd061214f7 100644 --- a/hotspot/src/share/vm/memory/allocation.cpp +++ b/hotspot/src/share/vm/memory/allocation.cpp @@ -26,10 +26,13 @@ #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" +#include "runtime/atomic.hpp" #include "runtime/os.hpp" #include "runtime/task.hpp" #include "runtime/threadCritical.hpp" +#include "services/memTracker.hpp" #include "utilities/ostream.hpp" + #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -43,32 +46,16 @@ # include "os_bsd.inline.hpp" #endif -void* CHeapObj::operator new(size_t size){ - return (void *) AllocateHeap(size, "CHeapObj-new"); -} - -void* CHeapObj::operator new (size_t size, const std::nothrow_t& nothrow_constant) { - char* p = (char*) os::malloc(size); -#ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); -#endif - return p; -} - -void CHeapObj::operator delete(void* p){ - FreeHeap(p); -} - void* StackObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; void StackObj::operator delete(void* p) { ShouldNotCallThis(); }; void* _ValueObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; void _ValueObj::operator delete(void* p) { ShouldNotCallThis(); }; -void* ResourceObj::operator new(size_t size, allocation_type type) { +void* ResourceObj::operator new(size_t size, allocation_type type, MEMFLAGS flags) { address res; switch (type) { case C_HEAP: - res = (address)AllocateHeap(size, "C_Heap: ResourceOBJ"); + res = (address)AllocateHeap(size, flags, CALLER_PC); DEBUG_ONLY(set_allocation_type(res, C_HEAP);) break; case RESOURCE_AREA: @@ -184,7 +171,7 @@ bool warn_new_operator = false; // see vm_main // MT-safe pool of chunks to reduce malloc/free thrashing // NB: not using Mutex because pools are used before Threads are initialized -class ChunkPool { +class ChunkPool: public CHeapObj { Chunk* _first; // first cached Chunk; its first word points to next chunk size_t _num_chunks; // number of unused chunks in pool size_t _num_used; // number of chunks currently checked out @@ -210,14 +197,16 @@ class ChunkPool { ChunkPool(size_t size) : _size(size) { _first = NULL; _num_chunks = _num_used = 0; } // Allocate a new chunk from the pool (might expand the pool) - void* allocate(size_t bytes) { + _NOINLINE_ void* allocate(size_t bytes) { assert(bytes == _size, "bad size"); void* p = NULL; + // No VM lock can be taken inside ThreadCritical lock, so os::malloc + // should be done outside ThreadCritical lock due to NMT { ThreadCritical tc; _num_used++; p = get_first(); - if (p == NULL) p = os::malloc(bytes); } + if (p == NULL) p = os::malloc(bytes, mtChunk, CURRENT_PC); if (p == NULL) vm_exit_out_of_memory(bytes, "ChunkPool::allocate"); @@ -238,28 +227,34 @@ class ChunkPool { // Prune the pool void free_all_but(size_t n) { + Chunk* cur = NULL; + Chunk* next; + { // if we have more than n chunks, free all of them ThreadCritical tc; if (_num_chunks > n) { // free chunks at end of queue, for better locality - Chunk* cur = _first; + cur = _first; for (size_t i = 0; i < (n - 1) && cur != NULL; i++) cur = cur->next(); if (cur != NULL) { - Chunk* next = cur->next(); + next = cur->next(); cur->set_next(NULL); cur = next; - // Free all remaining chunks - while(cur != NULL) { - next = cur->next(); - os::free(cur); - _num_chunks--; - cur = next; + _num_chunks = n; } } } - } + + // Free all remaining chunks, outside of ThreadCritical + // to avoid deadlock with NMT + while(cur != NULL) { + next = cur->next(); + os::free(cur, mtChunk); + cur = next; + } + } // Accessors to preallocated pool's static ChunkPool* large_pool() { assert(_large_pool != NULL, "must be initialized"); return _large_pool; } @@ -323,7 +318,7 @@ void* Chunk::operator new(size_t requested_size, size_t length) { case Chunk::medium_size: return ChunkPool::medium_pool()->allocate(bytes); case Chunk::init_size: return ChunkPool::small_pool()->allocate(bytes); default: { - void *p = os::malloc(bytes); + void *p = os::malloc(bytes, mtChunk, CALLER_PC); if (p == NULL) vm_exit_out_of_memory(bytes, "Chunk::new"); return p; @@ -337,7 +332,7 @@ void Chunk::operator delete(void* p) { case Chunk::size: ChunkPool::large_pool()->free(c); break; case Chunk::medium_size: ChunkPool::medium_pool()->free(c); break; case Chunk::init_size: ChunkPool::small_pool()->free(c); break; - default: os::free(c); + default: os::free(c, mtChunk); } } @@ -374,6 +369,7 @@ void Chunk::start_chunk_pool_cleaner_task() { } //------------------------------Arena------------------------------------------ +NOT_PRODUCT(volatile jint Arena::_instance_count = 0;) Arena::Arena(size_t init_size) { size_t round_size = (sizeof (char *)) - 1; @@ -382,6 +378,7 @@ Arena::Arena(size_t init_size) { _hwm = _chunk->bottom(); // Save the cached hwm, max _max = _chunk->top(); set_size_in_bytes(init_size); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } Arena::Arena() { @@ -389,12 +386,15 @@ Arena::Arena() { _hwm = _chunk->bottom(); // Save the cached hwm, max _max = _chunk->top(); set_size_in_bytes(Chunk::init_size); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } Arena::Arena(Arena *a) : _chunk(a->_chunk), _hwm(a->_hwm), _max(a->_max), _first(a->_first) { set_size_in_bytes(a->size_in_bytes()); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } + Arena *Arena::move_contents(Arena *copy) { copy->destruct_contents(); copy->_chunk = _chunk; @@ -409,6 +409,42 @@ Arena *Arena::move_contents(Arena *copy) { Arena::~Arena() { destruct_contents(); + NOT_PRODUCT(Atomic::dec(&_instance_count);) +} + +void* Arena::operator new(size_t size) { + assert(false, "Use dynamic memory type binding"); + return NULL; +} + +void* Arena::operator new (size_t size, const std::nothrow_t& nothrow_constant) { + assert(false, "Use dynamic memory type binding"); + return NULL; +} + + // dynamic memory type binding +void* Arena::operator new(size_t size, MEMFLAGS flags) { +#ifdef ASSERT + void* p = (void*)AllocateHeap(size, flags|otArena, CALLER_PC); + if (PrintMallocFree) trace_heap_malloc(size, "Arena-new", p); + return p; +#else + return (void *) AllocateHeap(size, flags|otArena, CALLER_PC); +#endif +} + +void* Arena::operator new(size_t size, const std::nothrow_t& nothrow_constant, MEMFLAGS flags) { +#ifdef ASSERT + void* p = os::malloc(size, flags|otArena, CALLER_PC); + if (PrintMallocFree) trace_heap_malloc(size, "Arena-new", p); + return p; +#else + return os::malloc(size, flags|otArena, CALLER_PC); +#endif +} + +void Arena::operator delete(void* p) { + FreeHeap(p); } // Destroy this arenas contents and reset to empty @@ -421,6 +457,14 @@ void Arena::destruct_contents() { reset(); } +// This is high traffic method, but many calls actually don't +// change the size +void Arena::set_size_in_bytes(size_t size) { + if (_size_in_bytes != size) { + _size_in_bytes = size; + MemTracker::record_arena_size((address)this, size); + } +} // Total of all Chunks in arena size_t Arena::used() const { @@ -448,7 +492,6 @@ void* Arena::grow( size_t x ) { if (_chunk == NULL) { signal_out_of_memory(len * Chunk::aligned_overhead_size(), "Arena::grow"); } - if (k) k->set_next(_chunk); // Append new chunk to end of linked list else _first = _chunk; _hwm = _chunk->bottom(); // Save the cached hwm, max @@ -538,7 +581,7 @@ void* Arena::malloc(size_t size) { assert(UseMallocOnly, "shouldn't call"); // use malloc, but save pointer in res. area for later freeing char** save = (char**)internal_malloc_4(sizeof(char*)); - return (*save = (char*)os::malloc(size)); + return (*save = (char*)os::malloc(size, mtChunk)); } // for debugging with UseMallocOnly diff --git a/hotspot/src/share/vm/memory/allocation.hpp b/hotspot/src/share/vm/memory/allocation.hpp index 4c2f1e8c836..4f0338af983 100644 --- a/hotspot/src/share/vm/memory/allocation.hpp +++ b/hotspot/src/share/vm/memory/allocation.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,6 +40,18 @@ #define ARENA_ALIGN_MASK (~((size_t)ARENA_ALIGN_M1)) #define ARENA_ALIGN(x) ((((size_t)(x)) + ARENA_ALIGN_M1) & ARENA_ALIGN_MASK) + +// noinline attribute +#ifdef _WINDOWS + #define _NOINLINE_ __declspec(noinline) +#else + #if __GNUC__ < 3 // gcc 2.x does not support noinline attribute + #define _NOINLINE_ + #else + #define _NOINLINE_ __attribute__ ((noinline)) + #endif +#endif + // All classes in the virtual machine must be subclassed // by one of the following allocation classes: // @@ -98,12 +110,72 @@ class AllocatedObj { }; #endif -class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { + +/* + * MemoryType bitmap layout: + * | 16 15 14 13 12 11 10 09 | 08 07 06 05 | 04 03 02 01 | + * | memory type | object | reserved | + * | | type | | + */ +enum MemoryType { + // Memory type by sub systems. It occupies lower byte. + mtNone = 0x0000, // undefined + mtClass = 0x0100, // memory class for Java classes + mtThread = 0x0200, // memory for thread objects + mtThreadStack = 0x0300, + mtCode = 0x0400, // memory for generated code + mtGC = 0x0500, // memory for GC + mtCompiler = 0x0600, // memory for compiler + mtInternal = 0x0700, // memory used by VM, but does not belong to + // any of above categories, and not used for + // native memory tracking + mtOther = 0x0800, // memory not used by VM + mtSymbol = 0x0900, // symbol + mtNMT = 0x0A00, // memory used by native memory tracking + mtChunk = 0x0B00, // chunk that holds content of arenas + mtJavaHeap = 0x0C00, // Java heap + mtDontTrack = 0x0D00, // memory we donot or cannot track + mt_number_of_types = 0x000C, // number of memory types + mt_masks = 0x7F00, + + // object type mask + otArena = 0x0010, // an arena object + otNMTRecorder = 0x0020, // memory recorder object + ot_masks = 0x00F0 +}; + +#define IS_MEMORY_TYPE(flags, type) ((flags & mt_masks) == type) +#define HAS_VALID_MEMORY_TYPE(flags)((flags & mt_masks) != mtNone) +#define FLAGS_TO_MEMORY_TYPE(flags) (flags & mt_masks) + +#define IS_ARENA_OBJ(flags) ((flags & ot_masks) == otArena) +#define IS_NMT_RECORDER(flags) ((flags & ot_masks) == otNMTRecorder) +#define NMT_CAN_TRACK(flags) (!IS_NMT_RECORDER(flags) && !(IS_MEMORY_TYPE(flags, mtDontTrack))) + +typedef unsigned short MEMFLAGS; + +extern bool NMT_track_callsite; + +// debug build does not inline +#if defined(_DEBUG_) + #define CURRENT_PC (NMT_track_callsite ? os::get_caller_pc(1) : 0) + #define CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) + #define CALLER_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(3) : 0) +#else + #define CURRENT_PC (NMT_track_callsite? os::get_caller_pc(0) : 0) + #define CALLER_PC (NMT_track_callsite ? os::get_caller_pc(1) : 0) + #define CALLER_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) +#endif + + + +template class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { public: - void* operator new(size_t size); - void* operator new (size_t size, const std::nothrow_t& nothrow_constant); + _NOINLINE_ void* operator new(size_t size, address caller_pc = 0); + _NOINLINE_ void* operator new (size_t size, const std::nothrow_t& nothrow_constant, + address caller_pc = 0); + void operator delete(void* p); - void* new_array(size_t size); }; // Base class for objects allocated on the stack only. @@ -150,7 +222,7 @@ class AllStatic { //------------------------------Chunk------------------------------------------ // Linked list of raw memory chunks -class Chunk: public CHeapObj { +class Chunk: CHeapObj { friend class VMStructs; protected: @@ -197,7 +269,7 @@ class Chunk: public CHeapObj { //------------------------------Arena------------------------------------------ // Fast allocation of memory -class Arena: public CHeapObj { +class Arena : public CHeapObj { protected: friend class ResourceMark; friend class HandleMark; @@ -208,7 +280,8 @@ protected: Chunk *_chunk; // current chunk char *_hwm, *_max; // High water mark and max in current chunk void* grow(size_t x); // Get a new Chunk of at least size x - NOT_PRODUCT(size_t _size_in_bytes;) // Size of arena (used for memory usage tracing) + size_t _size_in_bytes; // Size of arena (used for native memory tracking) + NOT_PRODUCT(static julong _bytes_allocated;) // total #bytes allocated since start friend class AllocStats; debug_only(void* malloc(size_t size);) @@ -231,6 +304,15 @@ protected: void destruct_contents(); char* hwm() const { return _hwm; } + // new operators + void* operator new (size_t size); + void* operator new (size_t size, const std::nothrow_t& nothrow_constant); + + // dynamic memory type tagging + void* operator new(size_t size, MEMFLAGS flags); + void* operator new(size_t size, const std::nothrow_t& nothrow_constant, MEMFLAGS flags); + void operator delete(void* p); + // Fast allocate in the arena. Common case is: pointer test + increment. void* Amalloc(size_t x) { assert(is_power_of_2(ARENA_AMALLOC_ALIGNMENT) , "should be a power of 2"); @@ -306,16 +388,20 @@ protected: size_t used() const; // Total # of bytes used - size_t size_in_bytes() const NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; - void set_size_in_bytes(size_t size) NOT_PRODUCT({ _size_in_bytes = size; }) PRODUCT_RETURN; + size_t size_in_bytes() const { return _size_in_bytes; }; + void set_size_in_bytes(size_t size); + static void free_malloced_objects(Chunk* chunk, char* hwm, char* max, char* hwm2) PRODUCT_RETURN; static void free_all(char** start, char** end) PRODUCT_RETURN; + // how many arena instances + NOT_PRODUCT(static volatile jint _instance_count;) private: // Reset this Arena to empty, access will trigger grow if necessary void reset(void) { _first = _chunk = NULL; _hwm = _max = NULL; + set_size_in_bytes(0); } }; @@ -373,7 +459,7 @@ class ResourceObj ALLOCATION_SUPER_CLASS_SPEC { #endif // ASSERT public: - void* operator new(size_t size, allocation_type type); + void* operator new(size_t size, allocation_type type, MEMFLAGS flags); void* operator new(size_t size, Arena *arena) { address res = (address)arena->Amalloc(size); DEBUG_ONLY(set_allocation_type(res, ARENA);) @@ -409,17 +495,28 @@ class ResourceObj ALLOCATION_SUPER_CLASS_SPEC { #define NEW_RESOURCE_OBJ(type)\ NEW_RESOURCE_ARRAY(type, 1) -#define NEW_C_HEAP_ARRAY(type, size)\ - (type*) (AllocateHeap((size) * sizeof(type), XSTR(type) " in " __FILE__)) +#define NEW_C_HEAP_ARRAY(type, size, memflags)\ + (type*) (AllocateHeap((size) * sizeof(type), memflags)) -#define REALLOC_C_HEAP_ARRAY(type, old, size)\ - (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), XSTR(type) " in " __FILE__)) +#define REALLOC_C_HEAP_ARRAY(type, old, size, memflags)\ + (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags)) -#define FREE_C_HEAP_ARRAY(type,old) \ - FreeHeap((char*)(old)) +#define FREE_C_HEAP_ARRAY(type,old,memflags) \ + FreeHeap((char*)(old), memflags) + +#define NEW_C_HEAP_OBJ(type, memflags)\ + NEW_C_HEAP_ARRAY(type, 1, memflags) + + +#define NEW_C_HEAP_ARRAY2(type, size, memflags, pc)\ + (type*) (AllocateHeap((size) * sizeof(type), memflags, pc)) + +#define REALLOC_C_HEAP_ARRAY2(type, old, size, memflags, pc)\ + (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags, pc)) + +#define NEW_C_HEAP_OBJ2(type, memflags, pc)\ + NEW_C_HEAP_ARRAY2(type, 1, memflags, pc) -#define NEW_C_HEAP_OBJ(type)\ - NEW_C_HEAP_ARRAY(type, 1) extern bool warn_new_operator; diff --git a/hotspot/src/share/vm/memory/allocation.inline.hpp b/hotspot/src/share/vm/memory/allocation.inline.hpp index 795016df838..21e8a3bc94e 100644 --- a/hotspot/src/share/vm/memory/allocation.inline.hpp +++ b/hotspot/src/share/vm/memory/allocation.inline.hpp @@ -48,33 +48,60 @@ inline void inc_stat_counter(volatile julong* dest, julong add_value) { #endif // allocate using malloc; will fail if no memory available -inline char* AllocateHeap(size_t size, const char* name = NULL) { - char* p = (char*) os::malloc(size); +inline char* AllocateHeap(size_t size, MEMFLAGS flags, address pc = 0) { + if (pc == 0) { + pc = CURRENT_PC; + } + char* p = (char*) os::malloc(size, flags, pc); #ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, name, p); - #else - Unused_Variable(name); + if (PrintMallocFree) trace_heap_malloc(size, "AllocateHeap", p); #endif - if (p == NULL) vm_exit_out_of_memory(size, name); + if (p == NULL) vm_exit_out_of_memory(size, "AllocateHeap"); return p; } -inline char* ReallocateHeap(char *old, size_t size, const char* name = NULL) { - char* p = (char*) os::realloc(old,size); +inline char* ReallocateHeap(char *old, size_t size, MEMFLAGS flags) { + char* p = (char*) os::realloc(old, size, flags, CURRENT_PC); #ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, name, p); - #else - Unused_Variable(name); + if (PrintMallocFree) trace_heap_malloc(size, "ReallocateHeap", p); #endif - if (p == NULL) vm_exit_out_of_memory(size, name); + if (p == NULL) vm_exit_out_of_memory(size, "ReallocateHeap"); return p; } -inline void FreeHeap(void* p) { +inline void FreeHeap(void* p, MEMFLAGS memflags = mtInternal) { #ifdef ASSERT if (PrintMallocFree) trace_heap_free(p); #endif - os::free(p); + os::free(p, memflags); } + +template void* CHeapObj::operator new(size_t size, + address caller_pc){ +#ifdef ASSERT + void* p = (void*)AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); + if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); + return p; +#else + return (void *) AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); +#endif + } + +template void* CHeapObj::operator new (size_t size, + const std::nothrow_t& nothrow_constant, address caller_pc) { +#ifdef ASSERT + void* p = os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); + if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); + return p; +#else + return os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); +#endif +} + +template void CHeapObj::operator delete(void* p){ + FreeHeap(p, F); +} + + #endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/barrierSet.hpp b/hotspot/src/share/vm/memory/barrierSet.hpp index d9cf3c29394..bd92616f802 100644 --- a/hotspot/src/share/vm/memory/barrierSet.hpp +++ b/hotspot/src/share/vm/memory/barrierSet.hpp @@ -31,7 +31,7 @@ // This class provides the interface between a barrier implementation and // the rest of the system. -class BarrierSet: public CHeapObj { +class BarrierSet: public CHeapObj { friend class VMStructs; public: enum Name { diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp index 3f4a8a16ac5..08a9b033432 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp @@ -230,7 +230,7 @@ void TreeList::return_chunk_at_tail(TreeChunk* chunk) { link_tail(chunk); assert(!tail() || size() == tail()->size(), "Wrong sized chunk in list"); - FreeList::increment_count(); + increment_count(); debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); @@ -258,7 +258,7 @@ void TreeList::return_chunk_at_head(TreeChunk* chunk) { } head()->link_after(chunk); assert(!head() || size() == head()->size(), "Wrong sized chunk in list"); - FreeList::increment_count(); + increment_count(); debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); @@ -909,6 +909,7 @@ class TreeCensusClosure : public StackObj { template class AscendTreeCensusClosure : public TreeCensusClosure { + using TreeCensusClosure::do_list; public: void do_tree(TreeList* tl) { if (tl != NULL) { @@ -921,6 +922,7 @@ class AscendTreeCensusClosure : public TreeCensusClosure { template class DescendTreeCensusClosure : public TreeCensusClosure { + using TreeCensusClosure::do_list; public: void do_tree(TreeList* tl) { if (tl != NULL) { @@ -987,6 +989,7 @@ class AscendTreeSearchClosure : public TreeSearchClosure { template class DescendTreeSearchClosure : public TreeSearchClosure { + using TreeSearchClosure::do_list; public: bool do_tree(TreeList* tl) { if (tl != NULL) { diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp index 6d25852cb3e..4b8c0d8141b 100644 --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp @@ -60,13 +60,18 @@ class TreeList: public FreeList { TreeList* left() const { return _left; } TreeList* right() const { return _right; } - // Wrapper on call to base class, to get the template to compile. - Chunk* head() const { return FreeList::head(); } - Chunk* tail() const { return FreeList::tail(); } - void set_head(Chunk* head) { FreeList::set_head(head); } - void set_tail(Chunk* tail) { FreeList::set_tail(tail); } + // Explicitly import these names into our namespace to fix name lookup with templates + using FreeList::head; + using FreeList::set_head; - size_t size() const { return FreeList::size(); } + using FreeList::tail; + using FreeList::set_tail; + using FreeList::link_tail; + + using FreeList::increment_count; + NOT_PRODUCT(using FreeList::increment_returned_bytes_by;) + using FreeList::verify_chunk_in_free_list; + using FreeList::size; // Accessors for links in tree. diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.cpp b/hotspot/src/share/vm/memory/blockOffsetTable.cpp index d40965ea813..0d607db803b 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.cpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.cpp @@ -30,6 +30,7 @@ #include "memory/universe.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" ////////////////////////////////////////////////////////////////////// // BlockOffsetSharedArray @@ -44,6 +45,9 @@ BlockOffsetSharedArray::BlockOffsetSharedArray(MemRegion reserved, if (!rs.is_reserved()) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + if (!_vs.initialize(rs, 0)) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.hpp b/hotspot/src/share/vm/memory/blockOffsetTable.hpp index 16f329bddcf..b31865c93aa 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.hpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.hpp @@ -100,7 +100,7 @@ public: ////////////////////////////////////////////////////////////////////////// // BlockOffsetSharedArray ////////////////////////////////////////////////////////////////////////// -class BlockOffsetSharedArray: public CHeapObj { +class BlockOffsetSharedArray: public CHeapObj { friend class BlockOffsetArray; friend class BlockOffsetArrayNonContigSpace; friend class BlockOffsetArrayContigSpace; diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp index acf6413c411..496b2cbbf7d 100644 --- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp +++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp @@ -33,6 +33,7 @@ #include "runtime/java.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/virtualspace.hpp" +#include "services/memTracker.hpp" #ifdef COMPILER1 #include "c1/c1_LIR.hpp" #include "c1/c1_LIRGenerator.hpp" @@ -90,6 +91,9 @@ CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, const size_t rs_align = _page_size == (size_t) os::vm_page_size() ? 0 : MAX2(_page_size, (size_t) os::vm_allocation_granularity()); ReservedSpace heap_rs(_byte_map_size, rs_align, false); + + MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtGC); + os::trace_page_sizes("card table", _guard_index + 1, _guard_index + 1, _page_size, heap_rs.base(), heap_rs.size()); if (!heap_rs.is_reserved()) { @@ -113,16 +117,17 @@ CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, // Do better than this for Merlin vm_exit_out_of_memory(_page_size, "card table last card"); } + *guard_card = last_card; _lowest_non_clean = - NEW_C_HEAP_ARRAY(CardArr, max_covered_regions); + NEW_C_HEAP_ARRAY(CardArr, max_covered_regions, mtGC); _lowest_non_clean_chunk_size = - NEW_C_HEAP_ARRAY(size_t, max_covered_regions); + NEW_C_HEAP_ARRAY(size_t, max_covered_regions, mtGC); _lowest_non_clean_base_chunk_index = - NEW_C_HEAP_ARRAY(uintptr_t, max_covered_regions); + NEW_C_HEAP_ARRAY(uintptr_t, max_covered_regions, mtGC); _last_LNC_resizing_collection = - NEW_C_HEAP_ARRAY(int, max_covered_regions); + NEW_C_HEAP_ARRAY(int, max_covered_regions, mtGC); if (_lowest_non_clean == NULL || _lowest_non_clean_chunk_size == NULL || _lowest_non_clean_base_chunk_index == NULL diff --git a/hotspot/src/share/vm/memory/collectorPolicy.hpp b/hotspot/src/share/vm/memory/collectorPolicy.hpp index 7030eb7b58f..9b6b2d47c29 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.hpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.hpp @@ -56,7 +56,7 @@ class GCPolicyCounters; class PermanentGenerationSpec; class MarkSweepPolicy; -class CollectorPolicy : public CHeapObj { +class CollectorPolicy : public CHeapObj { protected: PermanentGenerationSpec *_permanent_generation; GCPolicyCounters* _gc_policy_counters; diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp index 315a38248c9..452f630730a 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp @@ -548,7 +548,7 @@ void DefNewGeneration::collect(bool full, init_assuming_no_promotion_failure(); - TraceTime t1("GC", PrintGC && !PrintGCDetails, true, gclog_or_tty); + TraceTime t1(GCCauseString("GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, gclog_or_tty); // Capture heap used before collection (for printing). size_t gch_prev_used = gch->used(); diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp index 1d5a4859041..4f959d674af 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.hpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp @@ -89,8 +89,8 @@ protected: // Together, these keep pairs. // They should always contain the same number of elements. - Stack _objs_with_preserved_marks; - Stack _preserved_marks_of_objs; + Stack _objs_with_preserved_marks; + Stack _preserved_marks_of_objs; // Promotion failure handling OopClosure *_promo_failure_scan_stack_closure; @@ -98,7 +98,7 @@ protected: _promo_failure_scan_stack_closure = scan_stack_closure; } - Stack _promo_failure_scan_stack; + Stack _promo_failure_scan_stack; void drain_promo_failure_scan_stack(void); bool _promo_failure_drain_in_progress; diff --git a/hotspot/src/share/vm/memory/dump.cpp b/hotspot/src/share/vm/memory/dump.cpp index af1d7928dca..f9dc8b8b9f7 100644 --- a/hotspot/src/share/vm/memory/dump.cpp +++ b/hotspot/src/share/vm/memory/dump.cpp @@ -62,8 +62,8 @@ public: // written later, increasing the likelihood that the shared page contain // the hash can be shared. // -// NOTE THAT the algorithm in StringTable::hash_string() MUST MATCH the -// algorithm in java.lang.String.hashCode(). +// NOTE THAT we have to call java_lang_String::to_hash() to match the +// algorithm in java.lang.String.toHash(). class StringHashCodeClosure: public OopClosure { private: @@ -78,9 +78,9 @@ public: void do_oop(oop* p) { if (p != NULL) { oop obj = *p; - if (obj->klass() == SystemDictionary::String_klass()) { - - int hash = java_lang_String::hash_string(obj); + if (obj->klass() == SystemDictionary::String_klass() && + java_lang_String::has_hash_field()) { + int hash = java_lang_String::to_hash(obj); obj->int_field_put(hash_offset, hash); } } @@ -231,8 +231,6 @@ public: if (obj->is_constMethod()) { mark_object(obj); mark_object(constMethodOop(obj)->stackmap_data()); - // Exception tables are needed by ci code during compilation. - mark_object(constMethodOop(obj)->exception_table()); } // Mark objects referenced by klass objects which are read-only. @@ -513,7 +511,6 @@ public: for(i = 0; i < methods->length(); i++) { methodOop m = methodOop(methods->obj_at(i)); mark_and_move_for_policy(OP_favor_startup, m->constMethod(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->exception_table(), _move_ro); mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->stackmap_data(), _move_ro); } diff --git a/hotspot/src/share/vm/memory/filemap.hpp b/hotspot/src/share/vm/memory/filemap.hpp index 8d239b8413e..5c03ae38874 100644 --- a/hotspot/src/share/vm/memory/filemap.hpp +++ b/hotspot/src/share/vm/memory/filemap.hpp @@ -44,7 +44,7 @@ static const int JVM_ARCH_MAX = 12; -class FileMapInfo : public CHeapObj { +class FileMapInfo : public CHeapObj { private: enum { _invalid_version = -1, diff --git a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp index 9e3e20a7794..66ce2be57f3 100644 --- a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp @@ -34,7 +34,7 @@ // A FreeBlockDictionary is an abstract superclass that will allow // a number of alternative implementations in the future. template -class FreeBlockDictionary: public CHeapObj { +class FreeBlockDictionary: public CHeapObj { public: enum Dither { atLeast, diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp index 10c3274548d..f8d779224ce 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp @@ -480,26 +480,15 @@ void GenCollectedHeap::do_collection(bool full, const size_t perm_prev_used = perm_gen()->used(); print_heap_before_gc(); - if (Verbose) { - gclog_or_tty->print_cr("GC Cause: %s", GCCause::to_string(gc_cause())); - } { FlagSetting fl(_is_gc_active, true); bool complete = full && (max_level == (n_gens()-1)); - const char* gc_cause_str = "GC "; - if (complete) { - GCCause::Cause cause = gc_cause(); - if (cause == GCCause::_java_lang_system_gc) { - gc_cause_str = "Full GC (System) "; - } else { - gc_cause_str = "Full GC "; - } - } + const char* gc_cause_prefix = complete ? "Full GC" : "GC"; gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - TraceTime t(gc_cause_str, PrintGCDetails, false, gclog_or_tty); + TraceTime t(GCCauseString(gc_cause_prefix, gc_cause()), PrintGCDetails, false, gclog_or_tty); gc_prologue(complete); increment_total_collections(complete); @@ -688,11 +677,6 @@ void GenCollectedHeap::do_collection(bool full, #ifdef TRACESPINNING ParallelTaskTerminator::print_termination_counts(); #endif - - if (ExitAfterGCNum > 0 && total_collections() == ExitAfterGCNum) { - tty->print_cr("Stopping after GC #%d", ExitAfterGCNum); - vm_exit(-1); - } } HeapWord* GenCollectedHeap::satisfy_failed_allocation(size_t size, bool is_tlab) { diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp index d5cf4dc7562..e7097db9dcf 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp @@ -76,7 +76,7 @@ void GenMarkSweep::invoke_at_safepoint(int level, ReferenceProcessor* rp, _ref_processor = rp; rp->setup_policy(clear_all_softrefs); - TraceTime t1("Full GC", PrintGC && !PrintGCDetails, true, gclog_or_tty); + TraceTime t1(GCCauseString("Full GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, gclog_or_tty); // When collecting the permanent generation methodOops may be moving, // so we either have to flush all bcp data or convert it into bci. @@ -203,21 +203,21 @@ void GenMarkSweep::allocate_stacks() { #ifdef VALIDATE_MARK_SWEEP if (ValidateMarkSweep) { - _root_refs_stack = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _other_refs_stack = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _adjusted_pointers = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops_moved_to = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops_size = new (ResourceObj::C_HEAP) GrowableArray(100, true); + _root_refs_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _other_refs_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _adjusted_pointers = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops_moved_to = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops_size = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); } if (RecordMarkSweepCompaction) { if (_cur_gc_live_oops == NULL) { - _cur_gc_live_oops = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _cur_gc_live_oops_moved_to = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _cur_gc_live_oops_size = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops_moved_to = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops_size = new(ResourceObj::C_HEAP) GrowableArray(100, true); + _cur_gc_live_oops = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _cur_gc_live_oops_moved_to = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _cur_gc_live_oops_size = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops_moved_to = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops_size = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); } else { _cur_gc_live_oops->clear(); _cur_gc_live_oops_moved_to->clear(); diff --git a/hotspot/src/share/vm/memory/genOopClosures.hpp b/hotspot/src/share/vm/memory/genOopClosures.hpp index 2c9b5ad0d0b..ded9c6262a2 100644 --- a/hotspot/src/share/vm/memory/genOopClosures.hpp +++ b/hotspot/src/share/vm/memory/genOopClosures.hpp @@ -34,10 +34,10 @@ class CardTableRS; class CardTableModRefBS; class DefNewGeneration; -template class GenericTaskQueue; -typedef GenericTaskQueue OopTaskQueue; -template class GenericTaskQueueSet; -typedef GenericTaskQueueSet OopTaskQueueSet; +template class GenericTaskQueue; +typedef GenericTaskQueue OopTaskQueue; +template class GenericTaskQueueSet; +typedef GenericTaskQueueSet OopTaskQueueSet; // Closure for iterating roots from a particular generation // Note: all classes deriving from this MUST call this do_barrier diff --git a/hotspot/src/share/vm/memory/genRemSet.hpp b/hotspot/src/share/vm/memory/genRemSet.hpp index bf0535f83db..9306d452543 100644 --- a/hotspot/src/share/vm/memory/genRemSet.hpp +++ b/hotspot/src/share/vm/memory/genRemSet.hpp @@ -35,7 +35,7 @@ class BarrierSet; class OopsInGenClosure; class CardTableRS; -class GenRemSet: public CHeapObj { +class GenRemSet: public CHeapObj { friend class Generation; BarrierSet* _bs; diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/memory/generation.hpp index 5c62e8bf2de..96becb638b6 100644 --- a/hotspot/src/share/vm/memory/generation.hpp +++ b/hotspot/src/share/vm/memory/generation.hpp @@ -86,7 +86,7 @@ struct ScratchBlock { }; -class Generation: public CHeapObj { +class Generation: public CHeapObj { friend class VMStructs; private: jlong _time_of_last_gc; // time when last gc on this generation happened (ms) diff --git a/hotspot/src/share/vm/memory/generationSpec.hpp b/hotspot/src/share/vm/memory/generationSpec.hpp index 5aff302b9c9..e602ef7976c 100644 --- a/hotspot/src/share/vm/memory/generationSpec.hpp +++ b/hotspot/src/share/vm/memory/generationSpec.hpp @@ -32,7 +32,7 @@ // some generation-specific behavior. This is done here rather than as a // virtual function of Generation because these methods are needed in // initialization of the Generations. -class GenerationSpec : public CHeapObj { +class GenerationSpec : public CHeapObj { friend class VMStructs; private: Generation::Name _name; @@ -71,7 +71,7 @@ typedef GenerationSpec* GenerationSpecPtr; // The specification of a permanent generation. This class is very // similar to GenerationSpec in use. Due to PermGen's not being a // true Generation, we cannot combine the spec classes either. -class PermanentGenerationSpec : public CHeapObj { +class PermanentGenerationSpec : public CHeapObj { friend class VMStructs; private: PermGen::Name _name; diff --git a/hotspot/src/share/vm/memory/heap.cpp b/hotspot/src/share/vm/memory/heap.cpp index dcf1e41e0e4..95c99082cad 100644 --- a/hotspot/src/share/vm/memory/heap.cpp +++ b/hotspot/src/share/vm/memory/heap.cpp @@ -26,7 +26,7 @@ #include "memory/heap.hpp" #include "oops/oop.inline.hpp" #include "runtime/os.hpp" - +#include "services/memTracker.hpp" size_t CodeHeap::header_size() { return sizeof(HeapBlock); @@ -130,6 +130,9 @@ bool CodeHeap::reserve(size_t reserved_size, size_t committed_size, if (!_segmap.initialize(align_to_page_size(_number_of_reserved_segments), align_to_page_size(_number_of_committed_segments))) { return false; } + + MemTracker::record_virtual_memory_type((address)_segmap.low_boundary(), mtCode); + assert(_segmap.committed_size() >= (size_t) _number_of_committed_segments, "could not commit enough space for segment map"); assert(_segmap.reserved_size() >= (size_t) _number_of_reserved_segments , "could not reserve enough space for segment map"); assert(_segmap.reserved_size() >= _segmap.committed_size() , "just checking"); diff --git a/hotspot/src/share/vm/memory/heap.hpp b/hotspot/src/share/vm/memory/heap.hpp index 4f592a20ce2..74f68ae054a 100644 --- a/hotspot/src/share/vm/memory/heap.hpp +++ b/hotspot/src/share/vm/memory/heap.hpp @@ -77,7 +77,7 @@ class FreeBlock: public HeapBlock { void set_link(FreeBlock* link) { _link = link; } }; -class CodeHeap : public CHeapObj { +class CodeHeap : public CHeapObj { friend class VMStructs; private: VirtualSpace _memory; // the memory holding the blocks diff --git a/hotspot/src/share/vm/memory/heapInspection.cpp b/hotspot/src/share/vm/memory/heapInspection.cpp index 1042ff43b94..998a1ecc56c 100644 --- a/hotspot/src/share/vm/memory/heapInspection.cpp +++ b/hotspot/src/share/vm/memory/heapInspection.cpp @@ -116,7 +116,7 @@ void KlassInfoBucket::empty() { KlassInfoTable::KlassInfoTable(int size, HeapWord* ref) { _size = 0; _ref = ref; - _buckets = NEW_C_HEAP_ARRAY(KlassInfoBucket, size); + _buckets = NEW_C_HEAP_ARRAY(KlassInfoBucket, size, mtInternal); if (_buckets != NULL) { _size = size; for (int index = 0; index < _size; index++) { @@ -130,7 +130,7 @@ KlassInfoTable::~KlassInfoTable() { for (int index = 0; index < _size; index++) { _buckets[index].empty(); } - FREE_C_HEAP_ARRAY(KlassInfoBucket, _buckets); + FREE_C_HEAP_ARRAY(KlassInfoBucket, _buckets, mtInternal); _size = 0; } } @@ -179,7 +179,7 @@ int KlassInfoHisto::sort_helper(KlassInfoEntry** e1, KlassInfoEntry** e2) { KlassInfoHisto::KlassInfoHisto(const char* title, int estimatedCount) : _title(title) { - _elements = new (ResourceObj::C_HEAP) GrowableArray(estimatedCount,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(estimatedCount,true); } KlassInfoHisto::~KlassInfoHisto() { diff --git a/hotspot/src/share/vm/memory/heapInspection.hpp b/hotspot/src/share/vm/memory/heapInspection.hpp index 6d2f544b461..779ff072557 100644 --- a/hotspot/src/share/vm/memory/heapInspection.hpp +++ b/hotspot/src/share/vm/memory/heapInspection.hpp @@ -44,7 +44,7 @@ // to KlassInfoEntry's and is used to sort // the entries. -class KlassInfoEntry: public CHeapObj { +class KlassInfoEntry: public CHeapObj { private: KlassInfoEntry* _next; klassOop _klass; @@ -72,7 +72,7 @@ class KlassInfoClosure: public StackObj { virtual void do_cinfo(KlassInfoEntry* cie) = 0; }; -class KlassInfoBucket: public CHeapObj { +class KlassInfoBucket: public CHeapObj { private: KlassInfoEntry* _list; KlassInfoEntry* list() { return _list; } diff --git a/hotspot/src/share/vm/memory/memRegion.hpp b/hotspot/src/share/vm/memory/memRegion.hpp index 4ed33d7312b..e8de140c654 100644 --- a/hotspot/src/share/vm/memory/memRegion.hpp +++ b/hotspot/src/share/vm/memory/memRegion.hpp @@ -99,8 +99,8 @@ public: class MemRegionClosureRO: public MemRegionClosure { public: - void* operator new(size_t size, ResourceObj::allocation_type type) { - return ResourceObj::operator new(size, type); + void* operator new(size_t size, ResourceObj::allocation_type type, MEMFLAGS flags) { + return ResourceObj::operator new(size, type, flags); } void* operator new(size_t size, Arena *arena) { return ResourceObj::operator new(size, arena); diff --git a/hotspot/src/share/vm/memory/oopFactory.cpp b/hotspot/src/share/vm/memory/oopFactory.cpp index 0dd620650e1..def88ccf14d 100644 --- a/hotspot/src/share/vm/memory/oopFactory.cpp +++ b/hotspot/src/share/vm/memory/oopFactory.cpp @@ -140,14 +140,15 @@ klassOop oopFactory::new_instanceKlass(Symbol* name, int vtable_len, int itable_ constMethodOop oopFactory::new_constMethod(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS) { klassOop cmkObj = Universe::constMethodKlassObj(); constMethodKlass* cmk = constMethodKlass::cast(cmkObj); return cmk->allocate(byte_code_size, compressed_line_number_size, - localvariable_table_length, checked_exceptions_length, - is_conc_safe, + localvariable_table_length, exception_table_length, + checked_exceptions_length, is_conc_safe, CHECK_NULL); } @@ -155,6 +156,7 @@ constMethodOop oopFactory::new_constMethod(int byte_code_size, methodOop oopFactory::new_method(int byte_code_size, AccessFlags access_flags, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS) { @@ -164,6 +166,7 @@ methodOop oopFactory::new_method(int byte_code_size, AccessFlags access_flags, constMethodOop cm = new_constMethod(byte_code_size, compressed_line_number_size, localvariable_table_length, + exception_table_length, checked_exceptions_length, is_conc_safe, CHECK_NULL); constMethodHandle rw(THREAD, cm); diff --git a/hotspot/src/share/vm/memory/oopFactory.hpp b/hotspot/src/share/vm/memory/oopFactory.hpp index 38de1a4f2c2..5fd843ee83d 100644 --- a/hotspot/src/share/vm/memory/oopFactory.hpp +++ b/hotspot/src/share/vm/memory/oopFactory.hpp @@ -86,6 +86,7 @@ private: static constMethodOop new_constMethod(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS); @@ -97,6 +98,7 @@ public: AccessFlags access_flags, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS); diff --git a/hotspot/src/share/vm/memory/permGen.hpp b/hotspot/src/share/vm/memory/permGen.hpp index 7400ed65f46..a6e2c8a6f0a 100644 --- a/hotspot/src/share/vm/memory/permGen.hpp +++ b/hotspot/src/share/vm/memory/permGen.hpp @@ -42,7 +42,7 @@ class CSpaceCounters; // PermGen models the part of the heap used to allocate class meta-data. -class PermGen : public CHeapObj { +class PermGen : public CHeapObj { friend class VMStructs; protected: size_t _capacity_expansion_limit; // maximum expansion allowed without a diff --git a/hotspot/src/share/vm/memory/referencePolicy.hpp b/hotspot/src/share/vm/memory/referencePolicy.hpp index 6616f253c19..99015d01aff 100644 --- a/hotspot/src/share/vm/memory/referencePolicy.hpp +++ b/hotspot/src/share/vm/memory/referencePolicy.hpp @@ -29,7 +29,7 @@ // should be cleared. -class ReferencePolicy : public CHeapObj { +class ReferencePolicy : public CHeapObj { public: virtual bool should_clear_reference(oop p, jlong timestamp_clock) { ShouldNotReachHere(); diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/memory/referenceProcessor.cpp index 2699ecd0f5d..f103dc97944 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp @@ -108,7 +108,8 @@ ReferenceProcessor::ReferenceProcessor(MemRegion span, _num_q = MAX2(1U, mt_processing_degree); _max_num_q = MAX2(_num_q, mt_discovery_degree); _discovered_refs = NEW_C_HEAP_ARRAY(DiscoveredList, - _max_num_q * number_of_subclasses_of_ref()); + _max_num_q * number_of_subclasses_of_ref(), mtGC); + if (_discovered_refs == NULL) { vm_exit_during_initialization("Could not allocated RefProc Array"); } diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/memory/referenceProcessor.hpp index bfa3bdffa9e..9df15bd4d3d 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp @@ -203,7 +203,7 @@ public: } }; -class ReferenceProcessor : public CHeapObj { +class ReferenceProcessor : public CHeapObj { protected: // Compatibility with pre-4965777 JDK's static bool _pending_list_uses_discovered_field; diff --git a/hotspot/src/share/vm/memory/resourceArea.hpp b/hotspot/src/share/vm/memory/resourceArea.hpp index 3d312489769..567f41d400a 100644 --- a/hotspot/src/share/vm/memory/resourceArea.hpp +++ b/hotspot/src/share/vm/memory/resourceArea.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,7 +75,7 @@ public: if (UseMallocOnly) { // use malloc, but save pointer in res. area for later freeing char** save = (char**)internal_malloc_4(sizeof(char*)); - return (*save = (char*)os::malloc(size)); + return (*save = (char*)os::malloc(size, mtThread)); } #endif return (char*)Amalloc(size); @@ -93,18 +93,17 @@ protected: ResourceArea *_area; // Resource area to stack allocate Chunk *_chunk; // saved arena chunk char *_hwm, *_max; - NOT_PRODUCT(size_t _size_in_bytes;) + size_t _size_in_bytes; void initialize(Thread *thread) { _area = thread->resource_area(); _chunk = _area->_chunk; _hwm = _area->_hwm; _max= _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } - public: #ifndef ASSERT @@ -120,7 +119,7 @@ protected: ResourceMark( ResourceArea *r ) : _area(r), _chunk(r->_chunk), _hwm(r->_hwm), _max(r->_max) { - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = r->_size_in_bytes; debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -148,7 +147,7 @@ protected: private: void free_malloced_objects() PRODUCT_RETURN; - size_t size_in_bytes() NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; + size_t size_in_bytes() { return _size_in_bytes; } }; //------------------------------DeoptResourceMark----------------------------------- @@ -180,19 +179,19 @@ protected: // and they would be stack allocated. This leaves open the possibilty of accidental // misuse so we simple duplicate the ResourceMark functionality here. -class DeoptResourceMark: public CHeapObj { +class DeoptResourceMark: public CHeapObj { protected: ResourceArea *_area; // Resource area to stack allocate Chunk *_chunk; // saved arena chunk char *_hwm, *_max; - NOT_PRODUCT(size_t _size_in_bytes;) + size_t _size_in_bytes; void initialize(Thread *thread) { _area = thread->resource_area(); _chunk = _area->_chunk; _hwm = _area->_hwm; _max= _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -212,7 +211,7 @@ protected: DeoptResourceMark( ResourceArea *r ) : _area(r), _chunk(r->_chunk), _hwm(r->_hwm), _max(r->_max) { - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -240,7 +239,7 @@ protected: private: void free_malloced_objects() PRODUCT_RETURN; - size_t size_in_bytes() NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; + size_t size_in_bytes() { return _size_in_bytes; }; }; #endif // SHARE_VM_MEMORY_RESOURCEAREA_HPP diff --git a/hotspot/src/share/vm/memory/restore.cpp b/hotspot/src/share/vm/memory/restore.cpp index 263867e6fff..e2f8b6a6dce 100644 --- a/hotspot/src/share/vm/memory/restore.cpp +++ b/hotspot/src/share/vm/memory/restore.cpp @@ -132,7 +132,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); int number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, + SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, number_of_entries); buffer += symbolTableLen; @@ -144,7 +144,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - StringTable::create_table((HashtableBucket*)buffer, stringTableLen, + StringTable::create_table((HashtableBucket*)buffer, stringTableLen, number_of_entries); buffer += stringTableLen; @@ -157,7 +157,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, + SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, sharedDictionaryLen, number_of_entries); buffer += sharedDictionaryLen; @@ -171,7 +171,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, + ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, number_of_entries); buffer += pkgInfoLen; ClassLoader::verify(); diff --git a/hotspot/src/share/vm/memory/space.hpp b/hotspot/src/share/vm/memory/space.hpp index f81c293a4bf..ef2f2c6e559 100644 --- a/hotspot/src/share/vm/memory/space.hpp +++ b/hotspot/src/share/vm/memory/space.hpp @@ -105,7 +105,7 @@ class SpaceMemRegionOopsIterClosure: public OopClosure { // bottom() <= top() <= end() // top() is inclusive and end() is exclusive. -class Space: public CHeapObj { +class Space: public CHeapObj { friend class VMStructs; protected: HeapWord* _bottom; diff --git a/hotspot/src/share/vm/memory/tenuredGeneration.cpp b/hotspot/src/share/vm/memory/tenuredGeneration.cpp index b88f315ed16..50b2615baea 100644 --- a/hotspot/src/share/vm/memory/tenuredGeneration.cpp +++ b/hotspot/src/share/vm/memory/tenuredGeneration.cpp @@ -65,7 +65,7 @@ TenuredGeneration::TenuredGeneration(ReservedSpace rs, if (UseParNewGC && ParallelGCThreads > 0) { typedef ParGCAllocBufferWithBOT* ParGCAllocBufferWithBOTPtr; _alloc_buffers = NEW_C_HEAP_ARRAY(ParGCAllocBufferWithBOTPtr, - ParallelGCThreads); + ParallelGCThreads, mtGC); if (_alloc_buffers == NULL) vm_exit_during_initialization("Could not allocate alloc_buffers"); for (uint i = 0; i < ParallelGCThreads; i++) { diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp index 1b8bb0a3ca7..c85a59de14e 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp +++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp @@ -36,7 +36,7 @@ class GlobalTLABStats; // It is thread-private at any time, but maybe multiplexed over // time across multiple threads. The park()/unpark() pair is // used to make it avaiable for such multiplexing. -class ThreadLocalAllocBuffer: public CHeapObj { +class ThreadLocalAllocBuffer: public CHeapObj { friend class VMStructs; private: HeapWord* _start; // address of TLAB @@ -172,7 +172,7 @@ public: void verify(); }; -class GlobalTLABStats: public CHeapObj { +class GlobalTLABStats: public CHeapObj { private: // Accumulate perfdata in private variables because diff --git a/hotspot/src/share/vm/memory/universe.cpp b/hotspot/src/share/vm/memory/universe.cpp index 9282828a7e9..4ed723afa57 100644 --- a/hotspot/src/share/vm/memory/universe.cpp +++ b/hotspot/src/share/vm/memory/universe.cpp @@ -764,7 +764,7 @@ jint universe_init() { FileMapInfo* mapinfo = NULL; if (UseSharedSpaces) { - mapinfo = NEW_C_HEAP_OBJ(FileMapInfo); + mapinfo = NEW_C_HEAP_OBJ(FileMapInfo, mtInternal); memset(mapinfo, 0, sizeof(FileMapInfo)); // Open the shared archive file, read and validate the header. If @@ -1546,7 +1546,7 @@ void ActiveMethodOopsCache::add_previous_version(const methodOop method) { // This is the first previous version so make some space. // Start with 2 elements under the assumption that the class // won't be redefined much. - _prev_methods = new (ResourceObj::C_HEAP) GrowableArray(2, true); + _prev_methods = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); } // RC_TRACE macro has an embedded ResourceMark diff --git a/hotspot/src/share/vm/memory/universe.hpp b/hotspot/src/share/vm/memory/universe.hpp index 073a5c2ca75..e2b942e5613 100644 --- a/hotspot/src/share/vm/memory/universe.hpp +++ b/hotspot/src/share/vm/memory/universe.hpp @@ -43,7 +43,7 @@ class DeferredObjAllocEvent; // Common parts of a methodOop cache. This cache safely interacts with // the RedefineClasses API. // -class CommonMethodOopCache : public CHeapObj { +class CommonMethodOopCache : public CHeapObj { // We save the klassOop and the idnum of methodOop in order to get // the current cached methodOop. private: @@ -273,7 +273,7 @@ class Universe: AllStatic { } static klassOop typeArrayKlassObj(BasicType t) { - assert((uint)t < T_VOID+1, "range check"); + assert((uint)t < T_VOID+1, err_msg("range check for type: %s", type2name(t))); assert(_typeArrayKlassObjs[t] != NULL, "domain check"); return _typeArrayKlassObjs[t]; } @@ -455,7 +455,7 @@ class Universe: AllStatic { static int base_vtable_size() { return _base_vtable_size; } }; -class DeferredObjAllocEvent : public CHeapObj { +class DeferredObjAllocEvent : public CHeapObj { private: oop _oop; size_t _bytesize; diff --git a/hotspot/src/share/vm/oops/constMethodKlass.cpp b/hotspot/src/share/vm/oops/constMethodKlass.cpp index 509b4118b74..e74811f54b0 100644 --- a/hotspot/src/share/vm/oops/constMethodKlass.cpp +++ b/hotspot/src/share/vm/oops/constMethodKlass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,6 +65,7 @@ bool constMethodKlass::oop_is_conc_safe(oop obj) const { constMethodOop constMethodKlass::allocate(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS) { @@ -72,6 +73,7 @@ constMethodOop constMethodKlass::allocate(int byte_code_size, int size = constMethodOopDesc::object_size(byte_code_size, compressed_line_number_size, localvariable_table_length, + exception_table_length, checked_exceptions_length); KlassHandle h_k(THREAD, as_klassOop()); constMethodOop cm = (constMethodOop) @@ -80,14 +82,14 @@ constMethodOop constMethodKlass::allocate(int byte_code_size, No_Safepoint_Verifier no_safepoint; cm->set_interpreter_kind(Interpreter::invalid); cm->init_fingerprint(); - cm->set_method(NULL); + cm->set_constants(NULL); cm->set_stackmap_data(NULL); - cm->set_exception_table(NULL); cm->set_code_size(byte_code_size); cm->set_constMethod_size(size); cm->set_inlined_tables_length(checked_exceptions_length, compressed_line_number_size, - localvariable_table_length); + localvariable_table_length, + exception_table_length); assert(cm->size() == size, "wrong size for object"); cm->set_is_conc_safe(is_conc_safe); cm->set_partially_loaded(); @@ -98,9 +100,8 @@ constMethodOop constMethodKlass::allocate(int byte_code_size, void constMethodKlass::oop_follow_contents(oop obj) { assert (obj->is_constMethod(), "object must be constMethod"); constMethodOop cm = constMethodOop(obj); - MarkSweep::mark_and_push(cm->adr_method()); + MarkSweep::mark_and_push(cm->adr_constants()); MarkSweep::mark_and_push(cm->adr_stackmap_data()); - MarkSweep::mark_and_push(cm->adr_exception_table()); // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::constMethodKlassObj never moves. } @@ -110,9 +111,8 @@ void constMethodKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { assert (obj->is_constMethod(), "object must be constMethod"); constMethodOop cm_oop = constMethodOop(obj); - PSParallelCompact::mark_and_push(cm, cm_oop->adr_method()); + PSParallelCompact::mark_and_push(cm, cm_oop->adr_constants()); PSParallelCompact::mark_and_push(cm, cm_oop->adr_stackmap_data()); - PSParallelCompact::mark_and_push(cm, cm_oop->adr_exception_table()); // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::constMethodKlassObj never moves. } @@ -121,9 +121,8 @@ void constMethodKlass::oop_follow_contents(ParCompactionManager* cm, int constMethodKlass::oop_oop_iterate(oop obj, OopClosure* blk) { assert (obj->is_constMethod(), "object must be constMethod"); constMethodOop cm = constMethodOop(obj); - blk->do_oop(cm->adr_method()); + blk->do_oop(cm->adr_constants()); blk->do_oop(cm->adr_stackmap_data()); - blk->do_oop(cm->adr_exception_table()); // Get size before changing pointers. // Don't call size() or oop_size() since that is a virtual call. int size = cm->object_size(); @@ -135,12 +134,10 @@ int constMethodKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) assert (obj->is_constMethod(), "object must be constMethod"); constMethodOop cm = constMethodOop(obj); oop* adr; - adr = cm->adr_method(); + adr = cm->adr_constants(); if (mr.contains(adr)) blk->do_oop(adr); adr = cm->adr_stackmap_data(); if (mr.contains(adr)) blk->do_oop(adr); - adr = cm->adr_exception_table(); - if (mr.contains(adr)) blk->do_oop(adr); // Get size before changing pointers. // Don't call size() or oop_size() since that is a virtual call. int size = cm->object_size(); @@ -153,9 +150,8 @@ int constMethodKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) int constMethodKlass::oop_adjust_pointers(oop obj) { assert(obj->is_constMethod(), "should be constMethod"); constMethodOop cm = constMethodOop(obj); - MarkSweep::adjust_pointer(cm->adr_method()); + MarkSweep::adjust_pointer(cm->adr_constants()); MarkSweep::adjust_pointer(cm->adr_stackmap_data()); - MarkSweep::adjust_pointer(cm->adr_exception_table()); // Get size before changing pointers. // Don't call size() or oop_size() since that is a virtual call. int size = cm->object_size(); @@ -188,9 +184,8 @@ void constMethodKlass::oop_print_on(oop obj, outputStream* st) { assert(obj->is_constMethod(), "must be constMethod"); Klass::oop_print_on(obj, st); constMethodOop m = constMethodOop(obj); - st->print(" - method: " INTPTR_FORMAT " ", (address)m->method()); - m->method()->print_value_on(st); st->cr(); - st->print(" - exceptions: " INTPTR_FORMAT "\n", (address)m->exception_table()); + st->print(" - constants: " INTPTR_FORMAT " ", (address)m->constants()); + m->constants()->print_value_on(st); st->cr(); if (m->has_stackmap_table()) { st->print(" - stackmap data: "); m->stackmap_data()->print_value_on(st); @@ -223,13 +218,11 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { // Verification can occur during oop construction before the method or // other fields have been initialized. if (!obj->partially_loaded()) { - guarantee(m->method()->is_perm(), "should be in permspace"); - guarantee(m->method()->is_method(), "should be method"); + guarantee(m->constants()->is_perm(), "should be in permspace"); + guarantee(m->constants()->is_constantPool(), "should be constant pool"); typeArrayOop stackmap_data = m->stackmap_data(); guarantee(stackmap_data == NULL || stackmap_data->is_perm(), "should be in permspace"); - guarantee(m->exception_table()->is_perm(), "should be in permspace"); - guarantee(m->exception_table()->is_typeArray(), "should be type array"); address m_end = (address)((oop*) m + m->size()); address compressed_table_start = m->code_end(); @@ -244,11 +237,15 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { compressed_table_end += stream.position(); } guarantee(compressed_table_end <= m_end, "invalid method layout"); - // Verify checked exceptions and local variable tables + // Verify checked exceptions, exception table and local variable tables if (m->has_checked_exceptions()) { u2* addr = m->checked_exceptions_length_addr(); guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); } + if (m->has_exception_handler()) { + u2* addr = m->exception_table_length_addr(); + guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); + } if (m->has_localvariable_table()) { u2* addr = m->localvariable_table_length_addr(); guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); @@ -257,12 +254,12 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { u2* uncompressed_table_start; if (m->has_localvariable_table()) { uncompressed_table_start = (u2*) m->localvariable_table_start(); - } else { - if (m->has_checked_exceptions()) { + } else if (m->has_exception_handler()) { + uncompressed_table_start = (u2*) m->exception_table_start(); + } else if (m->has_checked_exceptions()) { uncompressed_table_start = (u2*) m->checked_exceptions_start(); - } else { + } else { uncompressed_table_start = (u2*) m_end; - } } int gap = (intptr_t) uncompressed_table_start - (intptr_t) compressed_table_end; int max_gap = align_object_size(1)*BytesPerWord; @@ -273,8 +270,8 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { bool constMethodKlass::oop_partially_loaded(oop obj) const { assert(obj->is_constMethod(), "object must be klass"); constMethodOop m = constMethodOop(obj); - // check whether exception_table points to self (flag for partially loaded) - return m->exception_table() == (typeArrayOop)obj; + // check whether stackmap_data points to self (flag for partially loaded) + return m->stackmap_data() == (typeArrayOop)obj; } @@ -282,6 +279,6 @@ bool constMethodKlass::oop_partially_loaded(oop obj) const { void constMethodKlass::oop_set_partially_loaded(oop obj) { assert(obj->is_constMethod(), "object must be klass"); constMethodOop m = constMethodOop(obj); - // Temporarily set exception_table to point to self - m->set_exception_table((typeArrayOop)obj); + // Temporarily set stackmap_data to point to self + m->set_stackmap_data((typeArrayOop)obj); } diff --git a/hotspot/src/share/vm/oops/constMethodKlass.hpp b/hotspot/src/share/vm/oops/constMethodKlass.hpp index 1c3e3c83b83..23ba1122782 100644 --- a/hotspot/src/share/vm/oops/constMethodKlass.hpp +++ b/hotspot/src/share/vm/oops/constMethodKlass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ public: DEFINE_ALLOCATE_PERMANENT(constMethodKlass); constMethodOop allocate(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS); diff --git a/hotspot/src/share/vm/oops/constMethodOop.cpp b/hotspot/src/share/vm/oops/constMethodOop.cpp index b52e64ee485..cb9256da662 100644 --- a/hotspot/src/share/vm/oops/constMethodOop.cpp +++ b/hotspot/src/share/vm/oops/constMethodOop.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,6 +35,7 @@ const u2 constMethodOopDesc::UNSET_IDNUM = 0xFFFF; int constMethodOopDesc::object_size(int code_size, int compressed_line_number_size, int local_variable_table_length, + int exception_table_length, int checked_exceptions_length) { int extra_bytes = code_size; if (compressed_line_number_size > 0) { @@ -49,10 +50,18 @@ int constMethodOopDesc::object_size(int code_size, extra_bytes += local_variable_table_length * sizeof(LocalVariableTableElement); } + if (exception_table_length > 0) { + extra_bytes += sizeof(u2); + extra_bytes += exception_table_length * sizeof(ExceptionTableElement); + } int extra_words = align_size_up(extra_bytes, BytesPerWord) / BytesPerWord; return align_object_size(header_size() + extra_words); } +methodOop constMethodOopDesc::method() const { + return instanceKlass::cast(_constants->pool_holder())->method_with_idnum( + _method_idnum); + } // linenumber table - note that length is unknown until decompression, // see class CompressedLineNumberReadStream. @@ -69,23 +78,40 @@ u2* constMethodOopDesc::checked_exceptions_length_addr() const { return last_u2_element(); } -u2* constMethodOopDesc::localvariable_table_length_addr() const { - assert(has_localvariable_table(), "called only if table is present"); +u2* constMethodOopDesc::exception_table_length_addr() const { + assert(has_exception_handler(), "called only if table is present"); if (has_checked_exceptions()) { // If checked_exception present, locate immediately before them. return (u2*) checked_exceptions_start() - 1; } else { - // Else, the linenumber table is at the end of the constMethod. + // Else, the exception table is at the end of the constMethod. return last_u2_element(); } } +u2* constMethodOopDesc::localvariable_table_length_addr() const { + assert(has_localvariable_table(), "called only if table is present"); + if (has_exception_handler()) { + // If exception_table present, locate immediately before them. + return (u2*) exception_table_start() - 1; + } else { + if (has_checked_exceptions()) { + // If checked_exception present, locate immediately before them. + return (u2*) checked_exceptions_start() - 1; + } else { + // Else, the linenumber table is at the end of the constMethod. + return last_u2_element(); + } + } +} + // Update the flags to indicate the presence of these optional fields. void constMethodOopDesc::set_inlined_tables_length( int checked_exceptions_len, int compressed_line_number_size, - int localvariable_table_len) { + int localvariable_table_len, + int exception_table_len) { // Must be done in the order below, otherwise length_addr accessors // will not work. Only set bit in header if length is positive. assert(_flags == 0, "Error"); @@ -96,6 +122,10 @@ void constMethodOopDesc::set_inlined_tables_length( _flags |= _has_checked_exceptions; *(checked_exceptions_length_addr()) = checked_exceptions_len; } + if (exception_table_len > 0) { + _flags |= _has_exception_table; + *(exception_table_length_addr()) = exception_table_len; + } if (localvariable_table_len > 0) { _flags |= _has_localvariable_table; *(localvariable_table_length_addr()) = localvariable_table_len; @@ -129,3 +159,15 @@ LocalVariableTableElement* constMethodOopDesc::localvariable_table_start() const addr -= length * sizeof(LocalVariableTableElement) / sizeof(u2); return (LocalVariableTableElement*) addr; } + +int constMethodOopDesc::exception_table_length() const { + return has_exception_handler() ? *(exception_table_length_addr()) : 0; +} + +ExceptionTableElement* constMethodOopDesc::exception_table_start() const { + u2* addr = exception_table_length_addr(); + u2 length = *addr; + assert(length > 0, "should only be called if table is present"); + addr -= length * sizeof(ExceptionTableElement) / sizeof(u2); + return (ExceptionTableElement*)addr; +} diff --git a/hotspot/src/share/vm/oops/constMethodOop.hpp b/hotspot/src/share/vm/oops/constMethodOop.hpp index 91f97869a0c..549192be7a9 100644 --- a/hotspot/src/share/vm/oops/constMethodOop.hpp +++ b/hotspot/src/share/vm/oops/constMethodOop.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,9 +41,8 @@ // |------------------------------------------------------| // | fingerprint 1 | // | fingerprint 2 | -// | method (oop) | +// | constants (oop) | // | stackmap_data (oop) | -// | exception_table (oop) | // | constMethod_size | // | interp_kind | flags | code_size | // | name index | signature index | @@ -64,7 +63,13 @@ // | (length is u2, elements are 6-tuples of u2) | // | (see class LocalVariableTableElement) | // | (access flags bit tells whether table is present) | -// | (indexed from end of contMethodOop) | +// | (indexed from end of constMethodOop) | +// |------------------------------------------------------| +// | exception table + length (length last) | +// | (length is u2, elements are 4-tuples of u2) | +// | (see class ExceptionTableElement) | +// | (access flags bit tells whether table is present) | +// | (indexed from end of constMethodOop) | // |------------------------------------------------------| // | checked exceptions elements + length (length last) | // | (length is u2, elements are u2) | @@ -93,6 +98,15 @@ class LocalVariableTableElement VALUE_OBJ_CLASS_SPEC { }; +// Utitily class describing elements in exception table +class ExceptionTableElement VALUE_OBJ_CLASS_SPEC { + public: + u2 start_pc; + u2 end_pc; + u2 handler_pc; + u2 catch_type_index; +}; + class constMethodOopDesc : public oopDesc { friend class constMethodKlass; friend class VMStructs; @@ -100,7 +114,8 @@ private: enum { _has_linenumber_table = 1, _has_checked_exceptions = 2, - _has_localvariable_table = 4 + _has_localvariable_table = 4, + _has_exception_table = 8 }; // Bit vector of signature @@ -113,25 +128,19 @@ private: volatile bool _is_conc_safe; // if true, safe for concurrent GC processing public: - oop* oop_block_beg() const { return adr_method(); } - oop* oop_block_end() const { return adr_exception_table() + 1; } + oop* oop_block_beg() const { return adr_constants(); } + oop* oop_block_end() const { return adr_stackmap_data() + 1; } private: // // The oop block. See comment in klass.hpp before making changes. // - // Backpointer to non-const methodOop (needed for some JVMTI operations) - methodOop _method; + constantPoolOop _constants; // Constant pool // Raw stackmap data for the method typeArrayOop _stackmap_data; - // The exception handler table. 4-tuples of ints [start_pc, end_pc, - // handler_pc, catch_type index] For methods with no exceptions the - // table is pointing to Universe::the_empty_int_array - typeArrayOop _exception_table; - // // End of the oop block. // @@ -153,7 +162,8 @@ public: // Inlined tables void set_inlined_tables_length(int checked_exceptions_len, int compressed_line_number_size, - int localvariable_table_len); + int localvariable_table_len, + int exception_table_len); bool has_linenumber_table() const { return (_flags & _has_linenumber_table) != 0; } @@ -164,13 +174,19 @@ public: bool has_localvariable_table() const { return (_flags & _has_localvariable_table) != 0; } + bool has_exception_handler() const + { return (_flags & _has_exception_table) != 0; } + void set_interpreter_kind(int kind) { _interpreter_kind = kind; } int interpreter_kind(void) const { return _interpreter_kind; } - // backpointer to non-const methodOop - methodOop method() const { return _method; } - void set_method(methodOop m) { oop_store_without_check((oop*)&_method, (oop) m); } + // constant pool + constantPoolOop constants() const { return _constants; } + void set_constants(constantPoolOop c) { + oop_store_without_check((oop*)&_constants, (oop)c); + } + methodOop method() const; // stackmap table data typeArrayOop stackmap_data() const { return _stackmap_data; } @@ -179,11 +195,6 @@ public: } bool has_stackmap_table() const { return _stackmap_data != NULL; } - // exception handler table - typeArrayOop exception_table() const { return _exception_table; } - void set_exception_table(typeArrayOop e) { oop_store_without_check((oop*) &_exception_table, (oop) e); } - bool has_exception_handler() const { return exception_table() != NULL && exception_table()->length() > 0; } - void init_fingerprint() { const uint64_t initval = CONST64(0x8000000000000000); _fingerprint = initval; @@ -233,6 +244,7 @@ public: // Object size needed static int object_size(int code_size, int compressed_line_number_size, int local_variable_table_length, + int exception_table_length, int checked_exceptions_length); int object_size() const { return _constMethod_size; } @@ -254,6 +266,7 @@ public: u_char* compressed_linenumber_table() const; // not preserved by gc u2* checked_exceptions_length_addr() const; u2* localvariable_table_length_addr() const; + u2* exception_table_length_addr() const; // checked exceptions int checked_exceptions_length() const; @@ -263,6 +276,10 @@ public: int localvariable_table_length() const; LocalVariableTableElement* localvariable_table_start() const; + // exception table + int exception_table_length() const; + ExceptionTableElement* exception_table_start() const; + // byte codes void set_code(address code) { if (code_size() > 0) { @@ -278,13 +295,12 @@ public: { return in_ByteSize(sizeof(constMethodOopDesc)); } // interpreter support - static ByteSize exception_table_offset() - { return byte_offset_of(constMethodOopDesc, _exception_table); } + static ByteSize constants_offset() + { return byte_offset_of(constMethodOopDesc, _constants); } // Garbage collection support - oop* adr_method() const { return (oop*)&_method; } + oop* adr_constants() const { return (oop*)&_constants; } oop* adr_stackmap_data() const { return (oop*)&_stackmap_data; } - oop* adr_exception_table() const { return (oop*)&_exception_table; } bool is_conc_safe() { return _is_conc_safe; } void set_is_conc_safe(bool v) { _is_conc_safe = v; } diff --git a/hotspot/src/share/vm/oops/constantPoolOop.hpp b/hotspot/src/share/vm/oops/constantPoolOop.hpp index c2f985d7750..a2c046859df 100644 --- a/hotspot/src/share/vm/oops/constantPoolOop.hpp +++ b/hotspot/src/share/vm/oops/constantPoolOop.hpp @@ -764,7 +764,7 @@ class constantPoolOopDesc : public oopDesc { unsigned char *bytes); }; -class SymbolHashMapEntry : public CHeapObj { +class SymbolHashMapEntry : public CHeapObj { private: unsigned int _hash; // 32-bit hash for item SymbolHashMapEntry* _next; // Next element in the linked list for this bucket @@ -790,7 +790,7 @@ class SymbolHashMapEntry : public CHeapObj { }; // End SymbolHashMapEntry class -class SymbolHashMapBucket : public CHeapObj { +class SymbolHashMapBucket : public CHeapObj { private: SymbolHashMapEntry* _entry; @@ -803,7 +803,7 @@ public: }; // End SymbolHashMapBucket class -class SymbolHashMap: public CHeapObj { +class SymbolHashMap: public CHeapObj { private: // Default number of entries in the table @@ -816,7 +816,7 @@ class SymbolHashMap: public CHeapObj { void initialize_table(int table_size) { _table_size = table_size; - _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size); + _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol); for (int index = 0; index < table_size; index++) { _buckets[index].clear(); } diff --git a/hotspot/src/share/vm/oops/fieldInfo.hpp b/hotspot/src/share/vm/oops/fieldInfo.hpp index 69de3aef110..f4cf1a4c40f 100644 --- a/hotspot/src/share/vm/oops/fieldInfo.hpp +++ b/hotspot/src/share/vm/oops/fieldInfo.hpp @@ -50,8 +50,7 @@ class FieldInfo VALUE_OBJ_CLASS_SPEC { initval_index_offset = 3, low_offset = 4, high_offset = 5, - generic_signature_offset = 6, - field_slots = 7 + field_slots = 6 }; private: @@ -60,29 +59,28 @@ class FieldInfo VALUE_OBJ_CLASS_SPEC { void set_name_index(u2 val) { _shorts[name_index_offset] = val; } void set_signature_index(u2 val) { _shorts[signature_index_offset] = val; } void set_initval_index(u2 val) { _shorts[initval_index_offset] = val; } - void set_generic_signature_index(u2 val) { _shorts[generic_signature_offset] = val; } u2 name_index() const { return _shorts[name_index_offset]; } u2 signature_index() const { return _shorts[signature_index_offset]; } u2 initval_index() const { return _shorts[initval_index_offset]; } - u2 generic_signature_index() const { return _shorts[generic_signature_offset]; } public: static FieldInfo* from_field_array(typeArrayOop fields, int index) { return ((FieldInfo*)fields->short_at_addr(index * field_slots)); } + static FieldInfo* from_field_array(u2* fields, int index) { + return ((FieldInfo*)(fields + index * field_slots)); + } void initialize(u2 access_flags, u2 name_index, u2 signature_index, u2 initval_index, - u2 generic_signature_index, u4 offset) { _shorts[access_flags_offset] = access_flags; _shorts[name_index_offset] = name_index; _shorts[signature_index_offset] = signature_index; _shorts[initval_index_offset] = initval_index; - _shorts[generic_signature_offset] = generic_signature_index; set_offset(offset); } @@ -105,14 +103,6 @@ class FieldInfo VALUE_OBJ_CLASS_SPEC { return cp->symbol_at(index); } - Symbol* generic_signature(constantPoolHandle cp) const { - int index = generic_signature_index(); - if (index == 0) { - return NULL; - } - return cp->symbol_at(index); - } - void set_access_flags(u2 val) { _shorts[access_flags_offset] = val; } void set_offset(u4 val) { _shorts[low_offset] = extract_low_short_from_int(val); diff --git a/hotspot/src/share/vm/oops/fieldStreams.hpp b/hotspot/src/share/vm/oops/fieldStreams.hpp index 07c28f32eee..08127bfb0df 100644 --- a/hotspot/src/share/vm/oops/fieldStreams.hpp +++ b/hotspot/src/share/vm/oops/fieldStreams.hpp @@ -42,21 +42,57 @@ class FieldStreamBase : public StackObj { constantPoolHandle _constants; int _index; int _limit; + int _generic_signature_slot; FieldInfo* field() const { return FieldInfo::from_field_array(_fields(), _index); } + int init_generic_signature_start_slot() { + int length = _fields->length(); + int num_fields = 0; + int skipped_generic_signature_slots = 0; + FieldInfo* fi; + AccessFlags flags; + /* Scan from 0 to the current _index. Count the number of generic + signature slots for field[0] to field[_index - 1]. */ + for (int i = 0; i < _index; i++) { + fi = FieldInfo::from_field_array(_fields(), i); + flags.set_flags(fi->access_flags()); + if (flags.field_has_generic_signature()) { + length --; + skipped_generic_signature_slots ++; + } + } + /* Scan from the current _index. */ + for (int i = _index; i*FieldInfo::field_slots < length; i++) { + fi = FieldInfo::from_field_array(_fields(), i); + flags.set_flags(fi->access_flags()); + if (flags.field_has_generic_signature()) { + length --; + } + num_fields ++; + } + _generic_signature_slot = length + skipped_generic_signature_slots; + assert(_generic_signature_slot <= _fields->length(), ""); + return num_fields; + } + FieldStreamBase(typeArrayHandle fields, constantPoolHandle constants, int start, int limit) { _fields = fields; _constants = constants; _index = start; - _limit = limit; + int num_fields = init_generic_signature_start_slot(); + if (limit < start) { + _limit = num_fields; + } else { + _limit = limit; + } } FieldStreamBase(typeArrayHandle fields, constantPoolHandle constants) { _fields = fields; _constants = constants; _index = 0; - _limit = fields->length() / FieldInfo::field_slots; + _limit = init_generic_signature_start_slot(); } public: @@ -65,18 +101,26 @@ class FieldStreamBase : public StackObj { _constants = klass->constants(); _index = 0; _limit = klass->java_fields_count(); + init_generic_signature_start_slot(); } FieldStreamBase(instanceKlassHandle klass) { _fields = klass->fields(); _constants = klass->constants(); _index = 0; _limit = klass->java_fields_count(); + init_generic_signature_start_slot(); } // accessors int index() const { return _index; } - void next() { _index += 1; } + void next() { + if (access_flags().field_has_generic_signature()) { + _generic_signature_slot ++; + assert(_generic_signature_slot <= _fields->length(), ""); + } + _index += 1; + } bool done() const { return _index >= _limit; } // Accessors for current field @@ -103,7 +147,13 @@ class FieldStreamBase : public StackObj { } Symbol* generic_signature() const { - return field()->generic_signature(_constants); + if (access_flags().field_has_generic_signature()) { + assert(_generic_signature_slot < _fields->length(), "out of bounds"); + int index = _fields->short_at(_generic_signature_slot); + return _constants->symbol_at(index); + } else { + return NULL; + } } int offset() const { @@ -139,11 +189,19 @@ class JavaFieldStream : public FieldStreamBase { } int generic_signature_index() const { assert(!field()->is_internal(), "regular only"); - return field()->generic_signature_index(); + if (access_flags().field_has_generic_signature()) { + assert(_generic_signature_slot < _fields->length(), "out of bounds"); + return _fields->short_at(_generic_signature_slot); + } else { + return 0; + } } void set_generic_signature_index(int index) { assert(!field()->is_internal(), "regular only"); - field()->set_generic_signature_index(index); + if (access_flags().field_has_generic_signature()) { + assert(_generic_signature_slot < _fields->length(), "out of bounds"); + _fields->short_at_put(_generic_signature_slot, index); + } } int initval_index() const { assert(!field()->is_internal(), "regular only"); @@ -159,8 +217,8 @@ class JavaFieldStream : public FieldStreamBase { // Iterate over only the internal fields class InternalFieldStream : public FieldStreamBase { public: - InternalFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), k->all_fields_count()) {} - InternalFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), k->all_fields_count()) {} + InternalFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {} + InternalFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {} }; diff --git a/hotspot/src/share/vm/oops/generateOopMap.cpp b/hotspot/src/share/vm/oops/generateOopMap.cpp index 58ef931527f..3a818aad4db 100644 --- a/hotspot/src/share/vm/oops/generateOopMap.cpp +++ b/hotspot/src/share/vm/oops/generateOopMap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -400,10 +400,9 @@ void GenerateOopMap::mark_bbheaders_and_count_gc_points() { bool fellThrough = false; // False to get first BB marked. // First mark all exception handlers as start of a basic-block - typeArrayOop excps = method()->exception_table(); - for(int i = 0; i < excps->length(); i += 4) { - int handler_pc_idx = i+2; - bb_mark_fct(this, excps->int_at(handler_pc_idx), NULL); + ExceptionTable excps(method()); + for(int i = 0; i < excps.length(); i ++) { + bb_mark_fct(this, excps.handler_pc(i), NULL); } // Then iterate through the code @@ -450,10 +449,9 @@ void GenerateOopMap::mark_reachable_code() { // Mark entry basic block as alive and all exception handlers _basic_blocks[0].mark_as_alive(); - typeArrayOop excps = method()->exception_table(); - for(int i = 0; i < excps->length(); i += 4) { - int handler_pc_idx = i+2; - BasicBlock *bb = get_basic_block_at(excps->int_at(handler_pc_idx)); + ExceptionTable excps(method()); + for(int i = 0; i < excps.length(); i++) { + BasicBlock *bb = get_basic_block_at(excps.handler_pc(i)); // If block is not already alive (due to multiple exception handlers to same bb), then // make it alive if (bb->is_dead()) bb->mark_as_alive(); @@ -1181,12 +1179,12 @@ void GenerateOopMap::do_exception_edge(BytecodeStream* itr) { if (_has_exceptions) { int bci = itr->bci(); - typeArrayOop exct = method()->exception_table(); - for(int i = 0; i< exct->length(); i+=4) { - int start_pc = exct->int_at(i); - int end_pc = exct->int_at(i+1); - int handler_pc = exct->int_at(i+2); - int catch_type = exct->int_at(i+3); + ExceptionTable exct(method()); + for(int i = 0; i< exct.length(); i++) { + int start_pc = exct.start_pc(i); + int end_pc = exct.end_pc(i); + int handler_pc = exct.handler_pc(i); + int catch_type = exct.catch_type_index(i); if (start_pc <= bci && bci < end_pc) { BasicBlock *excBB = get_basic_block_at(handler_pc); @@ -2055,7 +2053,7 @@ void GenerateOopMap::compute_map(TRAPS) { _conflict = false; _max_locals = method()->max_locals(); _max_stack = method()->max_stack(); - _has_exceptions = (method()->exception_table()->length() > 0); + _has_exceptions = (method()->has_exception_handler()); _nof_refval_conflicts = 0; _init_vars = new GrowableArray(5); // There are seldom more than 5 init_vars _report_result = false; @@ -2070,9 +2068,10 @@ void GenerateOopMap::compute_map(TRAPS) { if (Verbose) { _method->print_codes(); tty->print_cr("Exception table:"); - typeArrayOop excps = method()->exception_table(); - for(int i = 0; i < excps->length(); i += 4) { - tty->print_cr("[%d - %d] -> %d", excps->int_at(i + 0), excps->int_at(i + 1), excps->int_at(i + 2)); + ExceptionTable excps(method()); + for(int i = 0; i < excps.length(); i ++) { + tty->print_cr("[%d - %d] -> %d", + excps.start_pc(i), excps.end_pc(i), excps.handler_pc(i)); } } } diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp index 794a7e2809f..0c0fd34b6b2 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp @@ -847,7 +847,6 @@ void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) { Klass::shared_symbols_iterate(closure); closure->do_symbol(&_generic_signature); closure->do_symbol(&_source_file_name); - closure->do_symbol(&_source_debug_extension); for (JavaFieldStream fs(this); !fs.done(); fs.next()) { int name_index = fs.name_index(); @@ -989,7 +988,7 @@ void instanceKlass::do_nonstatic_fields(FieldClosure* cl) { fieldDescriptor fd; int length = java_fields_count(); // In DebugInfo nonstatic fields are sorted by offset. - int* fields_sorted = NEW_C_HEAP_ARRAY(int, 2*(length+1)); + int* fields_sorted = NEW_C_HEAP_ARRAY(int, 2*(length+1), mtClass); int j = 0; for (int i = 0; i < length; i += 1) { fd.initialize(as_klassOop(), i); @@ -1009,7 +1008,7 @@ void instanceKlass::do_nonstatic_fields(FieldClosure* cl) { cl->do_field(&fd); } } - FREE_C_HEAP_ARRAY(int, fields_sorted); + FREE_C_HEAP_ARRAY(int, fields_sorted, mtClass); } @@ -1236,7 +1235,7 @@ jmethodID instanceKlass::get_jmethod_id(instanceKlassHandle ik_h, methodHandle m if (length <= idnum) { // allocate a new cache that might be used size_t size = MAX2(idnum+1, (size_t)ik_h->idnum_allocated_count()); - new_jmeths = NEW_C_HEAP_ARRAY(jmethodID, size+1); + new_jmeths = NEW_C_HEAP_ARRAY(jmethodID, size+1, mtClass); memset(new_jmeths, 0, (size+1)*sizeof(jmethodID)); // cache size is stored in element[0], other elements offset by one new_jmeths[0] = (jmethodID)size; @@ -1397,7 +1396,7 @@ void instanceKlass::set_cached_itable_index(size_t idnum, int index) { // cache size is stored in element[0], other elements offset by one if (indices == NULL || (length = (size_t)indices[0]) <= idnum) { size_t size = MAX2(idnum+1, (size_t)idnum_allocated_count()); - int* new_indices = NEW_C_HEAP_ARRAY(int, size+1); + int* new_indices = NEW_C_HEAP_ARRAY(int, size+1, mtClass); new_indices[0] = (int)size; // copy any existing entries size_t i; @@ -1933,7 +1932,7 @@ void instanceKlass::release_C_heap_structures() { // deallocate the cached class file if (_cached_class_file_bytes != NULL) { - os::free(_cached_class_file_bytes); + os::free(_cached_class_file_bytes, mtClass); _cached_class_file_bytes = NULL; _cached_class_file_len = 0; } @@ -1944,9 +1943,10 @@ void instanceKlass::release_C_heap_structures() { // class can't be referenced anymore). if (_array_name != NULL) _array_name->decrement_refcount(); if (_source_file_name != NULL) _source_file_name->decrement_refcount(); - if (_source_debug_extension != NULL) _source_debug_extension->decrement_refcount(); // walk constant pool and decrement symbol reference counts _constants->unreference_symbols(); + + if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(char, _source_debug_extension, mtClass); } void instanceKlass::set_source_file_name(Symbol* n) { @@ -1954,9 +1954,22 @@ void instanceKlass::set_source_file_name(Symbol* n) { if (_source_file_name != NULL) _source_file_name->increment_refcount(); } -void instanceKlass::set_source_debug_extension(Symbol* n) { - _source_debug_extension = n; - if (_source_debug_extension != NULL) _source_debug_extension->increment_refcount(); +void instanceKlass::set_source_debug_extension(char* array, int length) { + if (array == NULL) { + _source_debug_extension = NULL; + } else { + // Adding one to the attribute length in order to store a null terminator + // character could cause an overflow because the attribute length is + // already coded with an u4 in the classfile, but in practice, it's + // unlikely to happen. + assert((length+1) > length, "Overflow checking"); + char* sde = NEW_C_HEAP_ARRAY(char, (length + 1), mtClass); + for (int i = 0; i < length; i++) { + sde[i] = array[i]; + } + sde[length] = '\0'; + _source_debug_extension = sde; + } } address instanceKlass::static_field_addr(int offset) { @@ -2530,7 +2543,7 @@ void instanceKlass::add_previous_version(instanceKlassHandle ikh, // This is the first previous version so make some space. // Start with 2 elements under the assumption that the class // won't be redefined much. - _previous_versions = new (ResourceObj::C_HEAP) + _previous_versions = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); } @@ -2556,7 +2569,7 @@ void instanceKlass::add_previous_version(instanceKlassHandle ikh, ("add: all methods are obsolete; flushing any EMCP weak refs")); } else { int local_count = 0; - GrowableArray* method_refs = new (ResourceObj::C_HEAP) + GrowableArray* method_refs = new (ResourceObj::C_HEAP, mtClass) GrowableArray(emcp_method_count, true); for (int i = 0; i < old_methods->length(); i++) { if (emcp_methods->at(i)) { @@ -2948,7 +2961,7 @@ PreviousVersionInfo* PreviousVersionWalker::next_previous_version() { while (_current_index < length) { PreviousVersionNode * pv_node = _previous_versions->at(_current_index++); - PreviousVersionInfo * pv_info = new (ResourceObj::C_HEAP) + PreviousVersionInfo * pv_info = new (ResourceObj::C_HEAP, mtClass) PreviousVersionInfo(pv_node); constantPoolHandle cp_h = pv_info->prev_constant_pool_handle(); diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp index dd42bce8628..3c24b3f69a1 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp @@ -168,8 +168,19 @@ class instanceKlass: public Klass { objArrayOop _local_interfaces; // Interface (klassOops) this class implements transitively. objArrayOop _transitive_interfaces; - // Instance and static variable information, 5-tuples of shorts [access, name - // index, sig index, initval index, offset]. + // Instance and static variable information, starts with 6-tuples of shorts + // [access, name index, sig index, initval index, low_offset, high_offset] + // for all fields, followed by the generic signature data at the end of + // the array. Only fields with generic signature attributes have the generic + // signature data set in the array. The fields array looks like following: + // + // f1: [access, name index, sig index, initial value index, low_offset, high_offset] + // f2: [access, name index, sig index, initial value index, low_offset, high_offset] + // ... + // fn: [access, name index, sig index, initial value index, low_offset, high_offset] + // [generic signature index] + // [generic signature index] + // ... typeArrayOop _fields; // Constant pool for this class. constantPoolOop _constants; @@ -215,7 +226,9 @@ class instanceKlass: public Klass { // Name of source file containing this klass, NULL if not specified. Symbol* _source_file_name; // the source debug extension for this klass, NULL if not specified. - Symbol* _source_debug_extension; + // Specified as UTF-8 string without terminating zero byte in the classfile, + // it is stored in the instanceklass as a NULL-terminated UTF-8 string + char* _source_debug_extension; // Generic signature, or null if none. Symbol* _generic_signature; // Array name derived from this class which needs unreferencing @@ -351,9 +364,6 @@ class instanceKlass: public Klass { // Number of Java declared fields int java_fields_count() const { return (int)_java_fields_count; } - // Number of fields including any injected fields - int all_fields_count() const { return _fields->length() / FieldInfo::field_slots; } - typeArrayOop fields() const { return _fields; } void set_fields(typeArrayOop f, u2 java_fields_count) { @@ -534,8 +544,8 @@ class instanceKlass: public Klass { void set_major_version(u2 major_version) { _major_version = major_version; } // source debug extension - Symbol* source_debug_extension() const { return _source_debug_extension; } - void set_source_debug_extension(Symbol* n); + char* source_debug_extension() const { return _source_debug_extension; } + void set_source_debug_extension(char* array, int length); // symbol unloading support (refcount already added) Symbol* array_name() { return _array_name; } @@ -1000,7 +1010,7 @@ inline u2 instanceKlass::next_method_idnum() { /* JNIid class for jfieldIDs only */ -class JNIid: public CHeapObj { +class JNIid: public CHeapObj { friend class VMStructs; private: klassOop _holder; @@ -1051,7 +1061,7 @@ class BreakpointInfo; // reference must be used because a weak reference would be seen as // collectible. A GrowableArray of PreviousVersionNodes is attached // to the instanceKlass as needed. See PreviousVersionWalker below. -class PreviousVersionNode : public CHeapObj { +class PreviousVersionNode : public CHeapObj { private: // A shared ConstantPool is never collected so we'll always have // a reference to it so we can update items in the cache. We'll @@ -1146,7 +1156,7 @@ class PreviousVersionWalker : public StackObj { // noticed since an nmethod should be removed as many times are it's // added. // -class nmethodBucket: public CHeapObj { +class nmethodBucket: public CHeapObj { friend class VMStructs; private: nmethod* _nmethod; diff --git a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp index 12ea2234451..d6ccd423f78 100644 --- a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp @@ -421,8 +421,7 @@ instanceKlassKlass::allocate_instance_klass(Symbol* name, int vtable_len, int it ik->set_protection_domain(NULL); ik->set_signers(NULL); ik->set_source_file_name(NULL); - ik->set_source_debug_extension(NULL); - ik->set_source_debug_extension(NULL); + ik->set_source_debug_extension(NULL, 0); ik->set_array_name(NULL); ik->set_inner_classes(NULL); ik->set_static_oop_field_count(0); @@ -531,7 +530,7 @@ void instanceKlassKlass::oop_print_on(oop obj, outputStream* st) { } if (ik->source_debug_extension() != NULL) { st->print(BULLET"source debug extension: "); - ik->source_debug_extension()->print_value_on(st); + st->print_cr("%s", ik->source_debug_extension()); st->cr(); } diff --git a/hotspot/src/share/vm/oops/instanceRefKlass.cpp b/hotspot/src/share/vm/oops/instanceRefKlass.cpp index 1cabe507eae..7db4f039c25 100644 --- a/hotspot/src/share/vm/oops/instanceRefKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceRefKlass.cpp @@ -515,6 +515,12 @@ bool instanceRefKlass::owns_pending_list_lock(JavaThread* thread) { void instanceRefKlass::acquire_pending_list_lock(BasicLock *pending_list_basic_lock) { // we may enter this with pending exception set PRESERVE_EXCEPTION_MARK; // exceptions are never thrown, needed for TRAPS argument + + // Create a HandleMark in case we retry a GC multiple times. + // Each time we attempt the GC, we allocate the handle below + // to hold the pending list lock. We want to free this handle. + HandleMark hm; + Handle h_lock(THREAD, java_lang_ref_Reference::pending_list_lock()); ObjectSynchronizer::fast_enter(h_lock, pending_list_basic_lock, false, THREAD); assert(ObjectSynchronizer::current_thread_holds_lock( @@ -527,7 +533,12 @@ void instanceRefKlass::release_and_notify_pending_list_lock( BasicLock *pending_list_basic_lock) { // we may enter this with pending exception set PRESERVE_EXCEPTION_MARK; // exceptions are never thrown, needed for TRAPS argument - // + + // Create a HandleMark in case we retry a GC multiple times. + // Each time we attempt the GC, we allocate the handle below + // to hold the pending list lock. We want to free this handle. + HandleMark hm; + Handle h_lock(THREAD, java_lang_ref_Reference::pending_list_lock()); assert(ObjectSynchronizer::current_thread_holds_lock( JavaThread::current(), h_lock), diff --git a/hotspot/src/share/vm/oops/methodKlass.cpp b/hotspot/src/share/vm/oops/methodKlass.cpp index b2d62358db8..b88b8b72901 100644 --- a/hotspot/src/share/vm/oops/methodKlass.cpp +++ b/hotspot/src/share/vm/oops/methodKlass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,11 +112,6 @@ methodOop methodKlass::allocate(constMethodHandle xconst, assert(m->is_parsable(), "must be parsable here."); assert(m->size() == size, "wrong size for object"); - // We should not publish an uprasable object's reference - // into one that is parsable, since that presents problems - // for the concurrent parallel marking and precleaning phases - // of concurrent gc (CMS). - xconst->set_method(m); return m; } @@ -127,7 +122,6 @@ void methodKlass::oop_follow_contents(oop obj) { // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::methodKlassObj never moves. MarkSweep::mark_and_push(m->adr_constMethod()); - MarkSweep::mark_and_push(m->adr_constants()); if (m->method_data() != NULL) { MarkSweep::mark_and_push(m->adr_method_data()); } @@ -141,7 +135,6 @@ void methodKlass::oop_follow_contents(ParCompactionManager* cm, // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::methodKlassObj never moves. PSParallelCompact::mark_and_push(cm, m->adr_constMethod()); - PSParallelCompact::mark_and_push(cm, m->adr_constants()); #ifdef COMPILER2 if (m->method_data() != NULL) { PSParallelCompact::mark_and_push(cm, m->adr_method_data()); @@ -159,7 +152,6 @@ int methodKlass::oop_oop_iterate(oop obj, OopClosure* blk) { // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::methodKlassObj never moves blk->do_oop(m->adr_constMethod()); - blk->do_oop(m->adr_constants()); if (m->method_data() != NULL) { blk->do_oop(m->adr_method_data()); } @@ -178,8 +170,6 @@ int methodKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { oop* adr; adr = m->adr_constMethod(); if (mr.contains(adr)) blk->do_oop(adr); - adr = m->adr_constants(); - if (mr.contains(adr)) blk->do_oop(adr); if (m->method_data() != NULL) { adr = m->adr_method_data(); if (mr.contains(adr)) blk->do_oop(adr); @@ -197,7 +187,6 @@ int methodKlass::oop_adjust_pointers(oop obj) { // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::methodKlassObj never moves. MarkSweep::adjust_pointer(m->adr_constMethod()); - MarkSweep::adjust_pointer(m->adr_constants()); if (m->method_data() != NULL) { MarkSweep::adjust_pointer(m->adr_method_data()); } @@ -213,7 +202,6 @@ int methodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { assert(obj->is_method(), "should be method"); methodOop m = methodOop(obj); PSParallelCompact::adjust_pointer(m->adr_constMethod()); - PSParallelCompact::adjust_pointer(m->adr_constants()); #ifdef COMPILER2 if (m->method_data() != NULL) { PSParallelCompact::adjust_pointer(m->adr_method_data()); @@ -339,8 +327,6 @@ void methodKlass::oop_verify_on(oop obj, outputStream* st) { if (!obj->partially_loaded()) { methodOop m = methodOop(obj); guarantee(m->is_perm(), "should be in permspace"); - guarantee(m->constants()->is_perm(), "should be in permspace"); - guarantee(m->constants()->is_constantPool(), "should be constant pool"); guarantee(m->constMethod()->is_constMethod(), "should be constMethodOop"); guarantee(m->constMethod()->is_perm(), "should be in permspace"); methodDataOop method_data = m->method_data(); diff --git a/hotspot/src/share/vm/oops/methodOop.cpp b/hotspot/src/share/vm/oops/methodOop.cpp index 6decdd72b93..ee5ef09bfe1 100644 --- a/hotspot/src/share/vm/oops/methodOop.cpp +++ b/hotspot/src/share/vm/oops/methodOop.cpp @@ -70,11 +70,11 @@ address methodOopDesc::get_c2i_unverified_entry() { return _adapter->get_c2i_unverified_entry(); } -char* methodOopDesc::name_and_sig_as_C_string() { +char* methodOopDesc::name_and_sig_as_C_string() const { return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature()); } -char* methodOopDesc::name_and_sig_as_C_string(char* buf, int size) { +char* methodOopDesc::name_and_sig_as_C_string(char* buf, int size) const { return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature(), buf, size); } @@ -111,25 +111,21 @@ char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, int methodOopDesc::fast_exception_handler_bci_for(KlassHandle ex_klass, int throw_bci, TRAPS) { // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index) - const int beg_bci_offset = 0; - const int end_bci_offset = 1; - const int handler_bci_offset = 2; - const int klass_index_offset = 3; - const int entry_size = 4; // access exception table - typeArrayHandle table (THREAD, constMethod()->exception_table()); - int length = table->length(); - assert(length % entry_size == 0, "exception table format has changed"); + ExceptionTable table(this); + int length = table.length(); // iterate through all entries sequentially constantPoolHandle pool(THREAD, constants()); - for (int i = 0; i < length; i += entry_size) { - int beg_bci = table->int_at(i + beg_bci_offset); - int end_bci = table->int_at(i + end_bci_offset); + for (int i = 0; i < length; i ++) { + //reacquire the table in case a GC happened + ExceptionTable table(this); + int beg_bci = table.start_pc(i); + int end_bci = table.end_pc(i); assert(beg_bci <= end_bci, "inconsistent exception table"); if (beg_bci <= throw_bci && throw_bci < end_bci) { // exception handler bci range covers throw_bci => investigate further - int handler_bci = table->int_at(i + handler_bci_offset); - int klass_index = table->int_at(i + klass_index_offset); + int handler_bci = table.handler_pc(i); + int klass_index = table.catch_type_index(i); if (klass_index == 0) { return handler_bci; } else if (ex_klass.is_null()) { @@ -177,7 +173,8 @@ void methodOopDesc::mask_for(int bci, InterpreterOopMap* mask) { int methodOopDesc::bci_from(address bcp) const { - assert(is_native() && bcp == code_base() || contains(bcp) || is_error_reported(), "bcp doesn't belong to this method"); + assert(is_native() && bcp == code_base() || contains(bcp) || is_error_reported(), + err_msg("bcp doesn't belong to this method: bcp: " INTPTR_FORMAT ", method: %s", bcp, name_and_sig_as_C_string())); return bcp - code_base(); } @@ -531,9 +528,9 @@ int methodOopDesc::line_number_from_bci(int bci) const { bool methodOopDesc::is_klass_loaded_by_klass_index(int klass_index) const { - if( _constants->tag_at(klass_index).is_unresolved_klass() ) { + if( constants()->tag_at(klass_index).is_unresolved_klass() ) { Thread *thread = Thread::current(); - Symbol* klass_name = _constants->klass_name_at(klass_index); + Symbol* klass_name = constants()->klass_name_at(klass_index); Handle loader(thread, instanceKlass::cast(method_holder())->class_loader()); Handle prot (thread, Klass::cast(method_holder())->protection_domain()); return SystemDictionary::find(klass_name, loader, prot, thread) != NULL; @@ -544,7 +541,7 @@ bool methodOopDesc::is_klass_loaded_by_klass_index(int klass_index) const { bool methodOopDesc::is_klass_loaded(int refinfo_index, bool must_be_resolved) const { - int klass_index = _constants->klass_ref_index_at(refinfo_index); + int klass_index = constants()->klass_ref_index_at(refinfo_index); if (must_be_resolved) { // Make sure klass is resolved in constantpool. if (constants()->tag_at(klass_index).is_unresolved_klass()) return false; @@ -886,11 +883,13 @@ oop methodOopDesc::method_handle_type() const { } jint* methodOopDesc::method_type_offsets_chain() { - static jint pchase[] = { -1, -1, -1 }; + static jint pchase[] = { -1, -1, -1, -1 }; if (pchase[0] == -1) { - jint step0 = in_bytes(constants_offset()); - jint step1 = (constantPoolOopDesc::header_size() + _imcp_method_type_value) * HeapWordSize; + jint step0 = in_bytes(const_offset()); + jint step1 = in_bytes(constMethodOopDesc::constants_offset()); + jint step2 = (constantPoolOopDesc::header_size() + _imcp_method_type_value) * HeapWordSize; // do this in reverse to avoid races: + OrderAccess::release_store(&pchase[2], step2); OrderAccess::release_store(&pchase[1], step1); OrderAccess::release_store(&pchase[0], step0); } @@ -977,7 +976,7 @@ methodHandle methodOopDesc::make_invoke_method(KlassHandle holder, { int flags_bits = (JVM_MH_INVOKE_BITS | JVM_ACC_PUBLIC | JVM_ACC_FINAL); methodOop m_oop = oopFactory::new_method(0, accessFlags_from(flags_bits), - 0, 0, 0, IsSafeConc, CHECK_(empty)); + 0, 0, 0, 0, IsSafeConc, CHECK_(empty)); m = methodHandle(THREAD, m_oop); } m->set_constants(cp()); @@ -991,7 +990,6 @@ methodHandle methodOopDesc::make_invoke_method(KlassHandle holder, m->set_result_index(rtf.type()); #endif m->compute_size_of_parameters(THREAD); - m->set_exception_table(Universe::the_empty_int_array()); m->init_intrinsic_id(); assert(m->intrinsic_id() == vmIntrinsics::_invokeExact || m->intrinsic_id() == vmIntrinsics::_invokeGeneric, "must be an invoker"); @@ -1035,6 +1033,7 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod AccessFlags flags = m->access_flags(); int checked_exceptions_len = m->checked_exceptions_length(); int localvariable_len = m->localvariable_table_length(); + int exception_table_len = m->exception_table_length(); // Allocate newm_oop with the is_conc_safe parameter set // to IsUnsafeConc to indicate that newm_oop is not yet // safe for concurrent processing by a GC. @@ -1042,6 +1041,7 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod flags, new_compressed_linenumber_size, localvariable_len, + exception_table_len, checked_exceptions_len, IsUnsafeConc, CHECK_(methodHandle())); @@ -1076,14 +1076,13 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod assert(m->constMethod()->is_parsable(), "Should remain parsable"); // Reset correct method/const method, method size, and parameter info - newcm->set_method(newm()); newm->set_constMethod(newcm); - assert(newcm->method() == newm(), "check"); newm->constMethod()->set_code_size(new_code_length); newm->constMethod()->set_constMethod_size(new_const_method_size); newm->set_method_size(new_method_size); assert(newm->code_size() == new_code_length, "check"); assert(newm->checked_exceptions_length() == checked_exceptions_len, "check"); + assert(newm->exception_table_length() == exception_table_len, "check"); assert(newm->localvariable_table_length() == localvariable_len, "check"); // Copy new byte codes memcpy(newm->code_base(), new_code, new_code_length); @@ -1099,6 +1098,12 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod m->checked_exceptions_start(), checked_exceptions_len * sizeof(CheckedExceptionElement)); } + // Copy exception table + if (exception_table_len > 0) { + memcpy(newm->exception_table_start(), + m->exception_table_start(), + exception_table_len * sizeof(ExceptionTableElement)); + } // Copy local variable number table if (localvariable_len > 0) { memcpy(newm->localvariable_table_start(), diff --git a/hotspot/src/share/vm/oops/methodOop.hpp b/hotspot/src/share/vm/oops/methodOop.hpp index 60bb34bb2cf..4ba480fe5f9 100644 --- a/hotspot/src/share/vm/oops/methodOop.hpp +++ b/hotspot/src/share/vm/oops/methodOop.hpp @@ -64,7 +64,6 @@ // | klass | // |------------------------------------------------------| // | constMethodOop (oop) | -// | constants (oop) | // |------------------------------------------------------| // | methodData (oop) | // | interp_invocation_count | @@ -110,7 +109,6 @@ class methodOopDesc : public oopDesc { friend class VMStructs; private: constMethodOop _constMethod; // Method read-only data. - constantPoolOop _constants; // Constant pool methodDataOop _method_data; int _interpreter_invocation_count; // Count of times invoked (reused as prev_event_count in tiered) AccessFlags _access_flags; // Access flags @@ -124,8 +122,9 @@ class methodOopDesc : public oopDesc { u2 _max_locals; // Number of local variables used by this method u2 _size_of_parameters; // size of the parameter block (receiver + arguments) in words u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) - u1 _jfr_towrite : 1, // Flags - : 7; + u1 _jfr_towrite : 1, // Flags + _force_inline : 1, + : 6; u2 _interpreter_throwout_count; // Count of times method was exited via exception while interpreting u2 _number_of_breakpoints; // fullspeed debugging support InvocationCounter _invocation_counter; // Incremented before each activation of the method - used to trigger frequency-based optimizations @@ -170,17 +169,17 @@ class methodOopDesc : public oopDesc { void set_access_flags(AccessFlags flags) { _access_flags = flags; } // name - Symbol* name() const { return _constants->symbol_at(name_index()); } + Symbol* name() const { return constants()->symbol_at(name_index()); } int name_index() const { return constMethod()->name_index(); } void set_name_index(int index) { constMethod()->set_name_index(index); } // signature - Symbol* signature() const { return _constants->symbol_at(signature_index()); } + Symbol* signature() const { return constants()->symbol_at(signature_index()); } int signature_index() const { return constMethod()->signature_index(); } void set_signature_index(int index) { constMethod()->set_signature_index(index); } // generics support - Symbol* generic_signature() const { int idx = generic_signature_index(); return ((idx != 0) ? _constants->symbol_at(idx) : (Symbol*)NULL); } + Symbol* generic_signature() const { int idx = generic_signature_index(); return ((idx != 0) ? constants()->symbol_at(idx) : (Symbol*)NULL); } int generic_signature_index() const { return constMethod()->generic_signature_index(); } void set_generic_signature_index(int index) { constMethod()->set_generic_signature_index(index); } @@ -198,8 +197,8 @@ class methodOopDesc : public oopDesc { // C string, for the purpose of providing more useful NoSuchMethodErrors // and fatal error handling. The string is allocated in resource // area if a buffer is not provided by the caller. - char* name_and_sig_as_C_string(); - char* name_and_sig_as_C_string(char* buf, int size); + char* name_and_sig_as_C_string() const; + char* name_and_sig_as_C_string(char* buf, int size) const; // Static routine in the situations we don't have a methodOop static char* name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature); @@ -242,8 +241,8 @@ class methodOopDesc : public oopDesc { } // constant pool for klassOop holding this method - constantPoolOop constants() const { return _constants; } - void set_constants(constantPoolOop c) { oop_store_without_check((oop*)&_constants, c); } + constantPoolOop constants() const { return constMethod()->constants(); } + void set_constants(constantPoolOop c) { constMethod()->set_constants(c); } // max stack int max_stack() const { return _max_stack; } @@ -284,12 +283,12 @@ class methodOopDesc : public oopDesc { } // exception handler table - typeArrayOop exception_table() const - { return constMethod()->exception_table(); } - void set_exception_table(typeArrayOop e) - { constMethod()->set_exception_table(e); } bool has_exception_handler() const { return constMethod()->has_exception_handler(); } + int exception_table_length() const + { return constMethod()->exception_table_length(); } + ExceptionTableElement* exception_table_start() const + { return constMethod()->exception_table_start(); } // Finds the first entry point bci of an exception handler for an // exception of klass ex_klass thrown at throw_bci. A value of NULL @@ -453,7 +452,7 @@ class methodOopDesc : public oopDesc { { return constMethod()->compressed_linenumber_table(); } // method holder (the klassOop holding this method) - klassOop method_holder() const { return _constants->pool_holder(); } + klassOop method_holder() const { return constants()->pool_holder(); } void compute_size_of_parameters(Thread *thread); // word size of parameters (receiver if any + arguments) Symbol* klass_name() const; // returns the name of the method holder @@ -544,7 +543,6 @@ class methodOopDesc : public oopDesc { // interpreter support static ByteSize const_offset() { return byte_offset_of(methodOopDesc, _constMethod ); } - static ByteSize constants_offset() { return byte_offset_of(methodOopDesc, _constants ); } static ByteSize access_flags_offset() { return byte_offset_of(methodOopDesc, _access_flags ); } #ifdef CC_INTERP static ByteSize result_index_offset() { return byte_offset_of(methodOopDesc, _result_index ); } @@ -658,6 +656,9 @@ class methodOopDesc : public oopDesc { bool jfr_towrite() { return _jfr_towrite; } void set_jfr_towrite(bool towrite) { _jfr_towrite = towrite; } + bool force_inline() { return _force_inline; } + void set_force_inline(bool fi) { _force_inline = fi; } + // On-stack replacement support bool has_osr_nmethod(int level, bool match_level) { return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL; @@ -723,7 +724,6 @@ class methodOopDesc : public oopDesc { // Garbage collection support oop* adr_constMethod() const { return (oop*)&_constMethod; } - oop* adr_constants() const { return (oop*)&_constants; } oop* adr_method_data() const { return (oop*)&_method_data; } }; @@ -805,7 +805,7 @@ class CompressedLineNumberReadStream: public CompressedReadStream { // breakpoints are written only at safepoints, and are read // concurrently only outside of safepoints. -class BreakpointInfo : public CHeapObj { +class BreakpointInfo : public CHeapObj { friend class VMStructs; private: Bytecodes::Code _orig_bytecode; @@ -839,4 +839,66 @@ class BreakpointInfo : public CHeapObj { void clear(methodOop method); }; +// Utility class for access exception handlers +class ExceptionTable : public StackObj { + private: + ExceptionTableElement* _table; + u2 _length; + + public: + ExceptionTable(methodOop m) { + if (m->has_exception_handler()) { + _table = m->exception_table_start(); + _length = m->exception_table_length(); + } else { + _table = NULL; + _length = 0; + } + } + + int length() const { + return _length; + } + + u2 start_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].start_pc; + } + + void set_start_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].start_pc = value; + } + + u2 end_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].end_pc; + } + + void set_end_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].end_pc = value; + } + + u2 handler_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].handler_pc; + } + + void set_handler_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].handler_pc = value; + } + + u2 catch_type_index(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].catch_type_index; + } + + void set_catch_type_index(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].catch_type_index = value; + } +}; + #endif // SHARE_VM_OOPS_METHODOOP_HPP diff --git a/hotspot/src/share/vm/oops/symbol.cpp b/hotspot/src/share/vm/oops/symbol.cpp index 8db92d1e2fd..cc52c7adb2d 100644 --- a/hotspot/src/share/vm/oops/symbol.cpp +++ b/hotspot/src/share/vm/oops/symbol.cpp @@ -38,7 +38,7 @@ Symbol::Symbol(const u1* name, int length, int refcount) : _refcount(refcount), void* Symbol::operator new(size_t sz, int len, TRAPS) { int alloc_size = object_size(len)*HeapWordSize; - address res = (address) AllocateHeap(alloc_size, "symbol"); + address res = (address) AllocateHeap(alloc_size, mtSymbol); DEBUG_ONLY(set_allocation_type(res, ResourceObj::C_HEAP);) return res; } diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index 4d5424da5f7..cc72fc0a1cf 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -81,6 +81,13 @@ product(intx, MaxLoopPad, (OptoLoopAlignment-1), \ "Align a loop if padding size in bytes is less or equal to this value") \ \ + product(intx, MaxVectorSize, 32, \ + "Max vector size in bytes, " \ + "actual size could be less depending on elements type") \ + \ + product(bool, AlignVector, false, \ + "Perform vector store/load alignment in loop") \ + \ product(intx, NumberOfLoopInstrToAlign, 4, \ "Number of first instructions in a loop to align") \ \ @@ -292,9 +299,12 @@ develop(bool, SuperWordRTDepCheck, false, \ "Enable runtime dependency checks.") \ \ - product(bool, TraceSuperWord, false, \ + notproduct(bool, TraceSuperWord, false, \ "Trace superword transforms") \ \ + notproduct(bool, TraceNewVectors, false, \ + "Trace creation of Vector nodes") \ + \ product_pd(bool, OptoBundling, \ "Generate nops to fill i-cache lines") \ \ diff --git a/hotspot/src/share/vm/opto/callGenerator.cpp b/hotspot/src/share/vm/opto/callGenerator.cpp index 26153217d07..1fef941d9b5 100644 --- a/hotspot/src/share/vm/opto/callGenerator.cpp +++ b/hotspot/src/share/vm/opto/callGenerator.cpp @@ -172,9 +172,11 @@ public: JVMState* DynamicCallGenerator::generate(JVMState* jvms) { GraphKit kit(jvms); + Compile* C = kit.C; + PhaseGVN& gvn = kit.gvn(); - if (kit.C->log() != NULL) { - kit.C->log()->elem("dynamic_call bci='%d'", jvms->bci()); + if (C->log() != NULL) { + C->log()->elem("dynamic_call bci='%d'", jvms->bci()); } // Get the constant pool cache from the caller class. @@ -190,18 +192,21 @@ JVMState* DynamicCallGenerator::generate(JVMState* jvms) { size_t call_site_offset = cpcache->get_f1_offset(index); // Load the CallSite object from the constant pool cache. - const TypeOopPtr* cpcache_ptr = TypeOopPtr::make_from_constant(cpcache); - Node* cpcache_adr = kit.makecon(cpcache_ptr); - Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, cpcache_adr, call_site_offset); - Node* call_site = kit.make_load(kit.control(), call_site_adr, TypeInstPtr::BOTTOM, T_OBJECT, Compile::AliasIdxRaw); + const TypeOopPtr* cpcache_type = TypeOopPtr::make_from_constant(cpcache); // returns TypeAryPtr of type T_OBJECT + const TypeOopPtr* call_site_type = TypeOopPtr::make_from_klass(C->env()->CallSite_klass()); + Node* cpcache_adr = kit.makecon(cpcache_type); + Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, call_site_offset); + // The oops in the constant pool cache are not compressed; load then as raw pointers. + Node* call_site = kit.make_load(kit.control(), call_site_adr, call_site_type, T_ADDRESS, Compile::AliasIdxRaw); // Load the target MethodHandle from the CallSite object. - Node* target_mh_adr = kit.basic_plus_adr(call_site, call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); - Node* target_mh = kit.make_load(kit.control(), target_mh_adr, TypeInstPtr::BOTTOM, T_OBJECT); + const TypeOopPtr* target_type = TypeOopPtr::make_from_klass(C->env()->MethodHandle_klass()); + Node* target_mh_adr = kit.basic_plus_adr(call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); + Node* target_mh = kit.make_load(kit.control(), target_mh_adr, target_type, T_OBJECT); address resolve_stub = SharedRuntime::get_resolve_opt_virtual_call_stub(); - CallStaticJavaNode *call = new (kit.C, tf()->domain()->cnt()) CallStaticJavaNode(tf(), resolve_stub, method(), kit.bci()); + CallStaticJavaNode* call = new (C, tf()->domain()->cnt()) CallStaticJavaNode(tf(), resolve_stub, method(), kit.bci()); // invokedynamic is treated as an optimized invokevirtual. call->set_optimized_virtual(true); // Take extra care (in the presence of argument motion) not to trash the SP: @@ -785,9 +790,10 @@ CallGenerator* CallGenerator::for_invokedynamic_inline(ciCallSite* call_site, JV JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { GraphKit kit(jvms); + Compile* C = kit.C; PhaseGVN& gvn = kit.gvn(); - CompileLog* log = kit.C->log(); + CompileLog* log = C->log(); if (log != NULL) { log->elem("predicted_dynamic_call bci='%d'", jvms->bci()); } @@ -803,8 +809,8 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { Node* receiver = kit.argument(0); // Check if the MethodHandle is the expected one - Node* cmp = gvn.transform(new(kit.C, 3) CmpPNode(receiver, predicted_mh)); - bol = gvn.transform(new(kit.C, 2) BoolNode(cmp, BoolTest::eq) ); + Node* cmp = gvn.transform(new (C, 3) CmpPNode(receiver, predicted_mh)); + bol = gvn.transform(new (C, 2) BoolNode(cmp, BoolTest::eq) ); } else { // Get the constant pool cache from the caller class. ciMethod* caller_method = jvms->method(); @@ -818,22 +824,25 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { size_t call_site_offset = cpcache->get_f1_offset(index); // Load the CallSite object from the constant pool cache. - const TypeOopPtr* cpcache_ptr = TypeOopPtr::make_from_constant(cpcache); - Node* cpcache_adr = kit.makecon(cpcache_ptr); - Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, cpcache_adr, call_site_offset); - Node* call_site = kit.make_load(kit.control(), call_site_adr, TypeInstPtr::BOTTOM, T_OBJECT, Compile::AliasIdxRaw); + const TypeOopPtr* cpcache_type = TypeOopPtr::make_from_constant(cpcache); // returns TypeAryPtr of type T_OBJECT + const TypeOopPtr* call_site_type = TypeOopPtr::make_from_klass(C->env()->CallSite_klass()); + Node* cpcache_adr = kit.makecon(cpcache_type); + Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, call_site_offset); + // The oops in the constant pool cache are not compressed; load then as raw pointers. + Node* call_site = kit.make_load(kit.control(), call_site_adr, call_site_type, T_ADDRESS, Compile::AliasIdxRaw); // Load the target MethodHandle from the CallSite object. + const TypeOopPtr* target_type = TypeOopPtr::make_from_klass(C->env()->MethodHandle_klass()); Node* target_adr = kit.basic_plus_adr(call_site, call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); - Node* target_mh = kit.make_load(kit.control(), target_adr, TypeInstPtr::BOTTOM, T_OBJECT); + Node* target_mh = kit.make_load(kit.control(), target_adr, target_type, T_OBJECT); // Check if the MethodHandle is still the same. - Node* cmp = gvn.transform(new(kit.C, 3) CmpPNode(target_mh, predicted_mh)); - bol = gvn.transform(new(kit.C, 2) BoolNode(cmp, BoolTest::eq) ); + Node* cmp = gvn.transform(new (C, 3) CmpPNode(target_mh, predicted_mh)); + bol = gvn.transform(new (C, 2) BoolNode(cmp, BoolTest::eq) ); } IfNode* iff = kit.create_and_xform_if(kit.control(), bol, _hit_prob, COUNT_UNKNOWN); - kit.set_control( gvn.transform(new(kit.C, 1) IfTrueNode (iff))); - Node* slow_ctl = gvn.transform(new(kit.C, 1) IfFalseNode(iff)); + kit.set_control( gvn.transform(new (C, 1) IfTrueNode (iff))); + Node* slow_ctl = gvn.transform(new (C, 1) IfFalseNode(iff)); SafePointNode* slow_map = NULL; JVMState* slow_jvms; @@ -882,7 +891,7 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { // Finish the diamond. kit.C->set_has_split_ifs(true); // Has chance for split-if optimization - RegionNode* region = new (kit.C, 3) RegionNode(3); + RegionNode* region = new (C, 3) RegionNode(3); region->init_req(1, kit.control()); region->init_req(2, slow_map->control()); kit.set_control(gvn.transform(region)); diff --git a/hotspot/src/share/vm/opto/chaitin.cpp b/hotspot/src/share/vm/opto/chaitin.cpp index a74114add85..00cabcf237f 100644 --- a/hotspot/src/share/vm/opto/chaitin.cpp +++ b/hotspot/src/share/vm/opto/chaitin.cpp @@ -75,6 +75,7 @@ void LRG::dump( ) const { // Flags if( _is_oop ) tty->print("Oop "); if( _is_float ) tty->print("Float "); + if( _is_vector ) tty->print("Vector "); if( _was_spilled1 ) tty->print("Spilled "); if( _was_spilled2 ) tty->print("Spilled2 "); if( _direct_conflict ) tty->print("Direct_conflict "); @@ -479,16 +480,18 @@ void PhaseChaitin::Register_Allocate() { // Move important info out of the live_arena to longer lasting storage. alloc_node_regs(_names.Size()); - for( uint i=0; i < _names.Size(); i++ ) { - if( _names[i] ) { // Live range associated with Node? - LRG &lrg = lrgs( _names[i] ); - if( lrg.num_regs() == 1 ) { - _node_regs[i].set1( lrg.reg() ); + for (uint i=0; i < _names.Size(); i++) { + if (_names[i]) { // Live range associated with Node? + LRG &lrg = lrgs(_names[i]); + if (!lrg.alive()) { + _node_regs[i].set_bad(); + } else if (lrg.num_regs() == 1) { + _node_regs[i].set1(lrg.reg()); } else { // Must be a register-pair - if( !lrg._fat_proj ) { // Must be aligned adjacent register pair + if (!lrg._fat_proj) { // Must be aligned adjacent register pair // Live ranges record the highest register in their mask. // We want the low register for the AD file writer's convenience. - _node_regs[i].set2( OptoReg::add(lrg.reg(),-1) ); + _node_regs[i].set2( OptoReg::add(lrg.reg(),(1-lrg.num_regs())) ); } else { // Misaligned; extract 2 bits OptoReg::Name hi = lrg.reg(); // Get hi register lrg.Remove(hi); // Yank from mask @@ -568,7 +571,7 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // Check for float-vs-int live range (used in register-pressure // calculations) const Type *n_type = n->bottom_type(); - if( n_type->is_floatingpoint() ) + if (n_type->is_floatingpoint()) lrg._is_float = 1; // Check for twice prior spilling. Once prior spilling might have @@ -599,18 +602,28 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // Limit result register mask to acceptable registers const RegMask &rm = n->out_RegMask(); lrg.AND( rm ); - // Check for bound register masks - const RegMask &lrgmask = lrg.mask(); - if( lrgmask.is_bound1() || lrgmask.is_bound2() ) - lrg._is_bound = 1; - - // Check for maximum frequency value - if( lrg._maxfreq < b->_freq ) - lrg._maxfreq = b->_freq; int ireg = n->ideal_reg(); assert( !n->bottom_type()->isa_oop_ptr() || ireg == Op_RegP, "oops must be in Op_RegP's" ); + + // Check for vector live range (only if vector register is used). + // On SPARC vector uses RegD which could be misaligned so it is not + // processes as vector in RA. + if (RegMask::is_vector(ireg)) + lrg._is_vector = 1; + assert(n_type->isa_vect() == NULL || lrg._is_vector || ireg == Op_RegD, + "vector must be in vector registers"); + + // Check for bound register masks + const RegMask &lrgmask = lrg.mask(); + if (lrgmask.is_bound(ireg)) + lrg._is_bound = 1; + + // Check for maximum frequency value + if (lrg._maxfreq < b->_freq) + lrg._maxfreq = b->_freq; + // Check for oop-iness, or long/double // Check for multi-kill projection switch( ireg ) { @@ -689,7 +702,7 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // AND changes how we count interferences. A mis-aligned // double can interfere with TWO aligned pairs, or effectively // FOUR registers! - if( rm.is_misaligned_Pair() ) { + if (rm.is_misaligned_pair()) { lrg._fat_proj = 1; lrg._is_bound = 1; } @@ -706,6 +719,33 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { lrg.set_reg_pressure(1); #endif break; + case Op_VecS: + assert(Matcher::vector_size_supported(T_BYTE,4), "sanity"); + assert(RegMask::num_registers(Op_VecS) == RegMask::SlotsPerVecS, "sanity"); + lrg.set_num_regs(RegMask::SlotsPerVecS); + lrg.set_reg_pressure(1); + break; + case Op_VecD: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecD), "sanity"); + assert(RegMask::num_registers(Op_VecD) == RegMask::SlotsPerVecD, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecD), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecD); + lrg.set_reg_pressure(1); + break; + case Op_VecX: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecX), "sanity"); + assert(RegMask::num_registers(Op_VecX) == RegMask::SlotsPerVecX, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecX), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecX); + lrg.set_reg_pressure(1); + break; + case Op_VecY: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecY), "sanity"); + assert(RegMask::num_registers(Op_VecY) == RegMask::SlotsPerVecY, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecY), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecY); + lrg.set_reg_pressure(1); + break; default: ShouldNotReachHere(); } @@ -763,24 +803,38 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { } else { lrg.AND( rm ); } + // Check for bound register masks const RegMask &lrgmask = lrg.mask(); - if( lrgmask.is_bound1() || lrgmask.is_bound2() ) + int kreg = n->in(k)->ideal_reg(); + bool is_vect = RegMask::is_vector(kreg); + assert(n->in(k)->bottom_type()->isa_vect() == NULL || + is_vect || kreg == Op_RegD, + "vector must be in vector registers"); + if (lrgmask.is_bound(kreg)) lrg._is_bound = 1; + // If this use of a double forces a mis-aligned double, // flag as '_fat_proj' - really flag as allowing misalignment // AND changes how we count interferences. A mis-aligned // double can interfere with TWO aligned pairs, or effectively // FOUR registers! - if( lrg.num_regs() == 2 && !lrg._fat_proj && rm.is_misaligned_Pair() ) { +#ifdef ASSERT + if (is_vect) { + assert(lrgmask.is_aligned_sets(lrg.num_regs()), "vector should be aligned"); + assert(!lrg._fat_proj, "sanity"); + assert(RegMask::num_registers(kreg) == lrg.num_regs(), "sanity"); + } +#endif + if (!is_vect && lrg.num_regs() == 2 && !lrg._fat_proj && rm.is_misaligned_pair()) { lrg._fat_proj = 1; lrg._is_bound = 1; } // if the LRG is an unaligned pair, we will have to spill // so clear the LRG's register mask if it is not already spilled - if ( !n->is_SpillCopy() && - (lrg._def == NULL || lrg.is_multidef() || !lrg._def->is_SpillCopy()) && - lrgmask.is_misaligned_Pair()) { + if (!is_vect && !n->is_SpillCopy() && + (lrg._def == NULL || lrg.is_multidef() || !lrg._def->is_SpillCopy()) && + lrgmask.is_misaligned_pair()) { lrg.Clear(); } @@ -793,12 +847,14 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { } // end for all blocks // Final per-liverange setup - for( uint i2=0; i2<_maxlrg; i2++ ) { + for (uint i2=0; i2<_maxlrg; i2++) { LRG &lrg = lrgs(i2); - if( lrg.num_regs() == 2 && !lrg._fat_proj ) - lrg.ClearToPairs(); + assert(!lrg._is_vector || !lrg._fat_proj, "sanity"); + if (lrg.num_regs() > 1 && !lrg._fat_proj) { + lrg.clear_to_sets(); + } lrg.compute_set_mask_size(); - if( lrg.not_free() ) { // Handle case where we lose from the start + if (lrg.not_free()) { // Handle case where we lose from the start lrg.set_reg(OptoReg::Name(LRG::SPILL_REG)); lrg._direct_conflict = 1; } @@ -1104,22 +1160,17 @@ OptoReg::Name PhaseChaitin::bias_color( LRG &lrg, int chunk ) { // Choose a color which is legal for him RegMask tempmask = lrg.mask(); tempmask.AND(lrgs(copy_lrg).mask()); - OptoReg::Name reg; - if( lrg.num_regs() == 1 ) { - reg = tempmask.find_first_elem(); - } else { - tempmask.ClearToPairs(); - reg = tempmask.find_first_pair(); - } - if( OptoReg::is_valid(reg) ) + tempmask.clear_to_sets(lrg.num_regs()); + OptoReg::Name reg = tempmask.find_first_set(lrg.num_regs()); + if (OptoReg::is_valid(reg)) return reg; } } // If no bias info exists, just go with the register selection ordering - if( lrg.num_regs() == 2 ) { - // Find an aligned pair - return OptoReg::add(lrg.mask().find_first_pair(),chunk); + if (lrg._is_vector || lrg.num_regs() == 2) { + // Find an aligned set + return OptoReg::add(lrg.mask().find_first_set(lrg.num_regs()),chunk); } // CNC - Fun hack. Alternate 1st and 2nd selection. Enables post-allocate @@ -1149,6 +1200,7 @@ OptoReg::Name PhaseChaitin::choose_color( LRG &lrg, int chunk ) { // Use a heuristic to "bias" the color choice return bias_color(lrg, chunk); + assert(!lrg._is_vector, "should be not vector here" ); assert( lrg.num_regs() >= 2, "dead live ranges do not color" ); // Fat-proj case or misaligned double argument. @@ -1238,14 +1290,16 @@ uint PhaseChaitin::Select( ) { } //assert(is_allstack == lrg->mask().is_AllStack(), "nbrs must not change AllStackedness"); // Aligned pairs need aligned masks - if( lrg->num_regs() == 2 && !lrg->_fat_proj ) - lrg->ClearToPairs(); + assert(!lrg->_is_vector || !lrg->_fat_proj, "sanity"); + if (lrg->num_regs() > 1 && !lrg->_fat_proj) { + lrg->clear_to_sets(); + } // Check if a color is available and if so pick the color OptoReg::Name reg = choose_color( *lrg, chunk ); #ifdef SPARC debug_only(lrg->compute_set_mask_size()); - assert(lrg->num_regs() != 2 || lrg->is_bound() || is_even(reg-1), "allocate all doubles aligned"); + assert(lrg->num_regs() < 2 || lrg->is_bound() || is_even(reg-1), "allocate all doubles aligned"); #endif //--------------- @@ -1277,17 +1331,16 @@ uint PhaseChaitin::Select( ) { // If the live range is not bound, then we actually had some choices // to make. In this case, the mask has more bits in it than the colors // chosen. Restrict the mask to just what was picked. - if( lrg->num_regs() == 1 ) { // Size 1 live range + int n_regs = lrg->num_regs(); + assert(!lrg->_is_vector || !lrg->_fat_proj, "sanity"); + if (n_regs == 1 || !lrg->_fat_proj) { + assert(!lrg->_is_vector || n_regs <= RegMask::SlotsPerVecY, "sanity"); lrg->Clear(); // Clear the mask lrg->Insert(reg); // Set regmask to match selected reg - lrg->set_mask_size(1); - } else if( !lrg->_fat_proj ) { - // For pairs, also insert the low bit of the pair - assert( lrg->num_regs() == 2, "unbound fatproj???" ); - lrg->Clear(); // Clear the mask - lrg->Insert(reg); // Set regmask to match selected reg - lrg->Insert(OptoReg::add(reg,-1)); - lrg->set_mask_size(2); + // For vectors and pairs, also insert the low bit of the pair + for (int i = 1; i < n_regs; i++) + lrg->Insert(OptoReg::add(reg,-i)); + lrg->set_mask_size(n_regs); } else { // Else fatproj // mask must be equal to fatproj bits, by definition } @@ -1483,7 +1536,7 @@ Node *PhaseChaitin::find_base_for_derived( Node **derived_base_map, Node *derive // Check for AddP-related opcodes if( !derived->is_Phi() ) { - assert( derived->as_Mach()->ideal_Opcode() == Op_AddP, "" ); + assert(derived->as_Mach()->ideal_Opcode() == Op_AddP, err_msg("but is: %s", derived->Name())); Node *base = derived->in(AddPNode::Base); derived_base_map[derived->_idx] = base; return base; @@ -1860,12 +1913,20 @@ char *PhaseChaitin::dump_register( const Node *n, char *buf ) const { sprintf(buf,"L%d",lidx); // No register binding yet } else if( !lidx ) { // Special, not allocated value strcpy(buf,"Special"); - } else if( (lrgs(lidx).num_regs() == 1) - ? !lrgs(lidx).mask().is_bound1() - : !lrgs(lidx).mask().is_bound2() ) { - sprintf(buf,"L%d",lidx); // No register binding yet - } else { // Hah! We have a bound machine register - print_reg( lrgs(lidx).reg(), this, buf ); + } else { + if (lrgs(lidx)._is_vector) { + if (lrgs(lidx).mask().is_bound_set(lrgs(lidx).num_regs())) + print_reg( lrgs(lidx).reg(), this, buf ); // a bound machine register + else + sprintf(buf,"L%d",lidx); // No register binding yet + } else if( (lrgs(lidx).num_regs() == 1) + ? lrgs(lidx).mask().is_bound1() + : lrgs(lidx).mask().is_bound_pair() ) { + // Hah! We have a bound machine register + print_reg( lrgs(lidx).reg(), this, buf ); + } else { + sprintf(buf,"L%d",lidx); // No register binding yet + } } } return buf+strlen(buf); diff --git a/hotspot/src/share/vm/opto/chaitin.hpp b/hotspot/src/share/vm/opto/chaitin.hpp index 1e6be63c452..c10f18d742e 100644 --- a/hotspot/src/share/vm/opto/chaitin.hpp +++ b/hotspot/src/share/vm/opto/chaitin.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -99,8 +99,15 @@ public: void set_mask_size( int size ) { assert((size == 65535) || (size == (int)_mask.Size()), ""); _mask_size = size; - debug_only(_msize_valid=1;) - debug_only( if( _num_regs == 2 && !_fat_proj ) _mask.VerifyPairs(); ) +#ifdef ASSERT + _msize_valid=1; + if (_is_vector) { + assert(!_fat_proj, "sanity"); + _mask.verify_sets(_num_regs); + } else if (_num_regs == 2 && !_fat_proj) { + _mask.verify_pairs(); + } +#endif } void compute_set_mask_size() { set_mask_size(compute_mask_size()); } int mask_size() const { assert( _msize_valid, "mask size not valid" ); @@ -116,7 +123,8 @@ public: void Set_All() { _mask.Set_All(); debug_only(_msize_valid=1); _mask_size = RegMask::CHUNK_SIZE; } void Insert( OptoReg::Name reg ) { _mask.Insert(reg); debug_only(_msize_valid=0;) } void Remove( OptoReg::Name reg ) { _mask.Remove(reg); debug_only(_msize_valid=0;) } - void ClearToPairs() { _mask.ClearToPairs(); debug_only(_msize_valid=0;) } + void clear_to_pairs() { _mask.clear_to_pairs(); debug_only(_msize_valid=0;) } + void clear_to_sets() { _mask.clear_to_sets(_num_regs); debug_only(_msize_valid=0;) } // Number of registers this live range uses when it colors private: @@ -150,6 +158,7 @@ public: uint _is_oop:1, // Live-range holds an oop _is_float:1, // True if in float registers + _is_vector:1, // True if in vector registers _was_spilled1:1, // True if prior spilling on def _was_spilled2:1, // True if twice prior spilling on def _is_bound:1, // live range starts life with no diff --git a/hotspot/src/share/vm/opto/classes.hpp b/hotspot/src/share/vm/opto/classes.hpp index 19ade906999..bdf18b51f32 100644 --- a/hotspot/src/share/vm/opto/classes.hpp +++ b/hotspot/src/share/vm/opto/classes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -147,7 +147,6 @@ macro(LoadNKlass) macro(LoadL) macro(LoadL_unaligned) macro(LoadPLocked) -macro(LoadLLocked) macro(LoadP) macro(LoadN) macro(LoadRange) @@ -246,14 +245,12 @@ macro(XorI) macro(XorL) macro(Vector) macro(AddVB) -macro(AddVC) macro(AddVS) macro(AddVI) macro(AddVL) macro(AddVF) macro(AddVD) macro(SubVB) -macro(SubVC) macro(SubVS) macro(SubVI) macro(SubVL) @@ -264,74 +261,36 @@ macro(MulVD) macro(DivVF) macro(DivVD) macro(LShiftVB) -macro(LShiftVC) macro(LShiftVS) macro(LShiftVI) -macro(URShiftVB) -macro(URShiftVC) -macro(URShiftVS) -macro(URShiftVI) +macro(RShiftVB) +macro(RShiftVS) +macro(RShiftVI) macro(AndV) macro(OrV) macro(XorV) -macro(VectorLoad) -macro(Load16B) -macro(Load8B) -macro(Load4B) -macro(Load8C) -macro(Load4C) -macro(Load2C) -macro(Load8S) -macro(Load4S) -macro(Load2S) -macro(Load4I) -macro(Load2I) -macro(Load2L) -macro(Load4F) -macro(Load2F) -macro(Load2D) -macro(VectorStore) -macro(Store16B) -macro(Store8B) -macro(Store4B) -macro(Store8C) -macro(Store4C) -macro(Store2C) -macro(Store4I) -macro(Store2I) -macro(Store2L) -macro(Store4F) -macro(Store2F) -macro(Store2D) +macro(LoadVector) +macro(StoreVector) macro(Pack) macro(PackB) macro(PackS) -macro(PackC) macro(PackI) macro(PackL) macro(PackF) macro(PackD) -macro(Pack2x1B) -macro(Pack2x2B) -macro(Replicate16B) -macro(Replicate8B) -macro(Replicate4B) -macro(Replicate8S) -macro(Replicate4S) -macro(Replicate2S) -macro(Replicate8C) -macro(Replicate4C) -macro(Replicate2C) -macro(Replicate4I) -macro(Replicate2I) -macro(Replicate2L) -macro(Replicate4F) -macro(Replicate2F) -macro(Replicate2D) +macro(Pack2L) +macro(Pack2D) +macro(ReplicateB) +macro(ReplicateS) +macro(ReplicateI) +macro(ReplicateL) +macro(ReplicateF) +macro(ReplicateD) macro(Extract) macro(ExtractB) -macro(ExtractS) +macro(ExtractUB) macro(ExtractC) +macro(ExtractS) macro(ExtractI) macro(ExtractL) macro(ExtractF) diff --git a/hotspot/src/share/vm/opto/compile.cpp b/hotspot/src/share/vm/opto/compile.cpp index 0a374d792f2..5331d033fe2 100644 --- a/hotspot/src/share/vm/opto/compile.cpp +++ b/hotspot/src/share/vm/opto/compile.cpp @@ -2297,7 +2297,6 @@ static void final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc ) { case Op_LoadL: case Op_LoadL_unaligned: case Op_LoadPLocked: - case Op_LoadLLocked: case Op_LoadP: case Op_LoadN: case Op_LoadRange: @@ -2592,38 +2591,12 @@ static void final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc ) { } break; - case Op_Load16B: - case Op_Load8B: - case Op_Load4B: - case Op_Load8S: - case Op_Load4S: - case Op_Load2S: - case Op_Load8C: - case Op_Load4C: - case Op_Load2C: - case Op_Load4I: - case Op_Load2I: - case Op_Load2L: - case Op_Load4F: - case Op_Load2F: - case Op_Load2D: - case Op_Store16B: - case Op_Store8B: - case Op_Store4B: - case Op_Store8C: - case Op_Store4C: - case Op_Store2C: - case Op_Store4I: - case Op_Store2I: - case Op_Store2L: - case Op_Store4F: - case Op_Store2F: - case Op_Store2D: + case Op_LoadVector: + case Op_StoreVector: break; case Op_PackB: case Op_PackS: - case Op_PackC: case Op_PackI: case Op_PackF: case Op_PackL: diff --git a/hotspot/src/share/vm/opto/divnode.cpp b/hotspot/src/share/vm/opto/divnode.cpp index 5539410070d..14fa0790bb6 100644 --- a/hotspot/src/share/vm/opto/divnode.cpp +++ b/hotspot/src/share/vm/opto/divnode.cpp @@ -284,9 +284,14 @@ static Node* long_by_long_mulhi(PhaseGVN* phase, Node* dividend, jlong magic_con const int N = 64; + // Dummy node to keep intermediate nodes alive during construction + Node* hook = new (phase->C, 4) Node(4); + // u0 = u & 0xFFFFFFFF; u1 = u >> 32; Node* u0 = phase->transform(new (phase->C, 3) AndLNode(dividend, phase->longcon(0xFFFFFFFF))); Node* u1 = phase->transform(new (phase->C, 3) RShiftLNode(dividend, phase->intcon(N / 2))); + hook->init_req(0, u0); + hook->init_req(1, u1); // v0 = v & 0xFFFFFFFF; v1 = v >> 32; Node* v0 = phase->longcon(magic_const & 0xFFFFFFFF); @@ -299,19 +304,14 @@ static Node* long_by_long_mulhi(PhaseGVN* phase, Node* dividend, jlong magic_con Node* u1v0 = phase->transform(new (phase->C, 3) MulLNode(u1, v0)); Node* temp = phase->transform(new (phase->C, 3) URShiftLNode(w0, phase->intcon(N / 2))); Node* t = phase->transform(new (phase->C, 3) AddLNode(u1v0, temp)); + hook->init_req(2, t); // w1 = t & 0xFFFFFFFF; - Node* w1 = new (phase->C, 3) AndLNode(t, phase->longcon(0xFFFFFFFF)); + Node* w1 = phase->transform(new (phase->C, 3) AndLNode(t, phase->longcon(0xFFFFFFFF))); + hook->init_req(3, w1); // w2 = t >> 32; - Node* w2 = new (phase->C, 3) RShiftLNode(t, phase->intcon(N / 2)); - - // 6732154: Construct both w1 and w2 before transforming, so t - // doesn't go dead prematurely. - // 6837011: We need to transform w2 before w1 because the - // transformation of w1 could return t. - w2 = phase->transform(w2); - w1 = phase->transform(w1); + Node* w2 = phase->transform(new (phase->C, 3) RShiftLNode(t, phase->intcon(N / 2))); // w1 = u0*v1 + w1; Node* u0v1 = phase->transform(new (phase->C, 3) MulLNode(u0, v1)); @@ -322,6 +322,16 @@ static Node* long_by_long_mulhi(PhaseGVN* phase, Node* dividend, jlong magic_con Node* temp1 = phase->transform(new (phase->C, 3) AddLNode(u1v1, w2)); Node* temp2 = phase->transform(new (phase->C, 3) RShiftLNode(w1, phase->intcon(N / 2))); + // Remove the bogus extra edges used to keep things alive + PhaseIterGVN* igvn = phase->is_IterGVN(); + if (igvn != NULL) { + igvn->remove_dead_node(hook); + } else { + for (int i = 0; i < 4; i++) { + hook->set_req(i, NULL); + } + } + return new (phase->C, 3) AddLNode(temp1, temp2); } diff --git a/hotspot/src/share/vm/opto/doCall.cpp b/hotspot/src/share/vm/opto/doCall.cpp index fdbbc108b18..f90f1eac0d4 100644 --- a/hotspot/src/share/vm/opto/doCall.cpp +++ b/hotspot/src/share/vm/opto/doCall.cpp @@ -780,7 +780,7 @@ void Parse::count_compiled_calls(bool at_method_entry, bool is_inline) { if( at_method_entry ) { // bump invocation counter if top method (for statistics) if (CountCompiledCalls && depth() == 1) { - const TypeInstPtr* addr_type = TypeInstPtr::make(method()); + const TypeOopPtr* addr_type = TypeOopPtr::make_from_constant(method()); Node* adr1 = makecon(addr_type); Node* adr2 = basic_plus_adr(adr1, adr1, in_bytes(methodOopDesc::compiled_invocation_counter_offset())); increment_counter(adr2); diff --git a/hotspot/src/share/vm/opto/domgraph.cpp b/hotspot/src/share/vm/opto/domgraph.cpp index ef4e1b17d55..b3a367d53fb 100644 --- a/hotspot/src/share/vm/opto/domgraph.cpp +++ b/hotspot/src/share/vm/opto/domgraph.cpp @@ -465,15 +465,11 @@ void PhaseIdealLoop::Dominators() { // Kill dead input path assert( !visited.test(whead->in(i)->_idx), "input with no loop must be dead" ); - _igvn.hash_delete(whead); - whead->del_req(i); - _igvn._worklist.push(whead); + _igvn.delete_input_of(whead, i); for (DUIterator_Fast jmax, j = whead->fast_outs(jmax); j < jmax; j++) { Node* p = whead->fast_out(j); if( p->is_Phi() ) { - _igvn.hash_delete(p); - p->del_req(i); - _igvn._worklist.push(p); + _igvn.delete_input_of(p, i); } } i--; // Rerun same iteration diff --git a/hotspot/src/share/vm/opto/graphKit.cpp b/hotspot/src/share/vm/opto/graphKit.cpp index 61d922760c5..b3dca953133 100644 --- a/hotspot/src/share/vm/opto/graphKit.cpp +++ b/hotspot/src/share/vm/opto/graphKit.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -3748,3 +3748,81 @@ void GraphKit::g1_write_barrier_post(Node* oop_store, final_sync(ideal); } #undef __ + + + +Node* GraphKit::load_String_offset(Node* ctrl, Node* str) { + if (java_lang_String::has_offset_field()) { + int offset_offset = java_lang_String::offset_offset_in_bytes(); + const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), + false, NULL, 0); + const TypePtr* offset_field_type = string_type->add_offset(offset_offset); + int offset_field_idx = C->get_alias_index(offset_field_type); + return make_load(ctrl, + basic_plus_adr(str, str, offset_offset), + TypeInt::INT, T_INT, offset_field_idx); + } else { + return intcon(0); + } +} + +Node* GraphKit::load_String_length(Node* ctrl, Node* str) { + if (java_lang_String::has_count_field()) { + int count_offset = java_lang_String::count_offset_in_bytes(); + const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), + false, NULL, 0); + const TypePtr* count_field_type = string_type->add_offset(count_offset); + int count_field_idx = C->get_alias_index(count_field_type); + return make_load(ctrl, + basic_plus_adr(str, str, count_offset), + TypeInt::INT, T_INT, count_field_idx); + } else { + return load_array_length(load_String_value(ctrl, str)); + } +} + +Node* GraphKit::load_String_value(Node* ctrl, Node* str) { + int value_offset = java_lang_String::value_offset_in_bytes(); + const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), + false, NULL, 0); + const TypePtr* value_field_type = string_type->add_offset(value_offset); + const TypeAryPtr* value_type = TypeAryPtr::make(TypePtr::NotNull, + TypeAry::make(TypeInt::CHAR,TypeInt::POS), + ciTypeArrayKlass::make(T_CHAR), true, 0); + int value_field_idx = C->get_alias_index(value_field_type); + return make_load(ctrl, basic_plus_adr(str, str, value_offset), + value_type, T_OBJECT, value_field_idx); +} + +void GraphKit::store_String_offset(Node* ctrl, Node* str, Node* value) { + int offset_offset = java_lang_String::offset_offset_in_bytes(); + const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), + false, NULL, 0); + const TypePtr* offset_field_type = string_type->add_offset(offset_offset); + int offset_field_idx = C->get_alias_index(offset_field_type); + store_to_memory(ctrl, basic_plus_adr(str, offset_offset), + value, T_INT, offset_field_idx); +} + +void GraphKit::store_String_value(Node* ctrl, Node* str, Node* value) { + int value_offset = java_lang_String::value_offset_in_bytes(); + const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), + false, NULL, 0); + const TypePtr* value_field_type = string_type->add_offset(value_offset); + const TypeAryPtr* value_type = TypeAryPtr::make(TypePtr::NotNull, + TypeAry::make(TypeInt::CHAR,TypeInt::POS), + ciTypeArrayKlass::make(T_CHAR), true, 0); + int value_field_idx = C->get_alias_index(value_field_type); + store_to_memory(ctrl, basic_plus_adr(str, value_offset), + value, T_OBJECT, value_field_idx); +} + +void GraphKit::store_String_length(Node* ctrl, Node* str, Node* value) { + int count_offset = java_lang_String::count_offset_in_bytes(); + const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), + false, NULL, 0); + const TypePtr* count_field_type = string_type->add_offset(count_offset); + int count_field_idx = C->get_alias_index(count_field_type); + store_to_memory(ctrl, basic_plus_adr(str, count_offset), + value, T_INT, count_field_idx); +} diff --git a/hotspot/src/share/vm/opto/graphKit.hpp b/hotspot/src/share/vm/opto/graphKit.hpp index bffebc8798e..723e65e3b05 100644 --- a/hotspot/src/share/vm/opto/graphKit.hpp +++ b/hotspot/src/share/vm/opto/graphKit.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -781,6 +781,14 @@ class GraphKit : public Phase { Node* new_array(Node* klass_node, Node* count_val, int nargs, Node* *return_size_val = NULL); + // java.lang.String helpers + Node* load_String_offset(Node* ctrl, Node* str); + Node* load_String_length(Node* ctrl, Node* str); + Node* load_String_value(Node* ctrl, Node* str); + void store_String_offset(Node* ctrl, Node* str, Node* value); + void store_String_length(Node* ctrl, Node* str, Node* value); + void store_String_value(Node* ctrl, Node* str, Node* value); + // Handy for making control flow IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) { IfNode* iff = new (C, 2) IfNode(ctrl, tst, prob, cnt);// New IfNode's diff --git a/hotspot/src/share/vm/opto/idealGraphPrinter.cpp b/hotspot/src/share/vm/opto/idealGraphPrinter.cpp index f9f40a37d7a..3344ce29c8e 100644 --- a/hotspot/src/share/vm/opto/idealGraphPrinter.cpp +++ b/hotspot/src/share/vm/opto/idealGraphPrinter.cpp @@ -130,15 +130,15 @@ IdealGraphPrinter::IdealGraphPrinter() { } else { st.print("%s%d", PrintIdealGraphFile, _file_count); } - fileStream *stream = new (ResourceObj::C_HEAP) fileStream(st.as_string()); + fileStream *stream = new (ResourceObj::C_HEAP, mtCompiler) fileStream(st.as_string()); _output = stream; } else { - fileStream *stream = new (ResourceObj::C_HEAP) fileStream(PrintIdealGraphFile); + fileStream *stream = new (ResourceObj::C_HEAP, mtCompiler) fileStream(PrintIdealGraphFile); _output = stream; } _file_count++; } else { - _stream = new (ResourceObj::C_HEAP) networkStream(); + _stream = new (ResourceObj::C_HEAP, mtCompiler) networkStream(); // Try to connect to visualizer if (_stream->connect(PrintIdealGraphAddress, PrintIdealGraphPort)) { @@ -160,7 +160,7 @@ IdealGraphPrinter::IdealGraphPrinter() { } } - _xml = new (ResourceObj::C_HEAP) xmlStream(_output); + _xml = new (ResourceObj::C_HEAP, mtCompiler) xmlStream(_output); head(TOP_ELEMENT); } diff --git a/hotspot/src/share/vm/opto/ifg.cpp b/hotspot/src/share/vm/opto/ifg.cpp index 3a225456503..4827a17d8df 100644 --- a/hotspot/src/share/vm/opto/ifg.cpp +++ b/hotspot/src/share/vm/opto/ifg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -416,6 +416,7 @@ uint PhaseChaitin::count_int_pressure( IndexSet *liveout ) { if( lrgs(lidx).mask().is_UP() && lrgs(lidx).mask_size() && !lrgs(lidx)._is_float && + !lrgs(lidx)._is_vector && lrgs(lidx).mask().overlap(*Matcher::idealreg2regmask[Op_RegI]) ) cnt += lrgs(lidx).reg_pressure(); } @@ -430,7 +431,7 @@ uint PhaseChaitin::count_float_pressure( IndexSet *liveout ) { while ((lidx = elements.next()) != 0) { if( lrgs(lidx).mask().is_UP() && lrgs(lidx).mask_size() && - lrgs(lidx)._is_float ) + (lrgs(lidx)._is_float || lrgs(lidx)._is_vector)) cnt += lrgs(lidx).reg_pressure(); } return cnt; @@ -439,8 +440,8 @@ uint PhaseChaitin::count_float_pressure( IndexSet *liveout ) { //------------------------------lower_pressure--------------------------------- // Adjust register pressure down by 1. Capture last hi-to-low transition, static void lower_pressure( LRG *lrg, uint where, Block *b, uint *pressure, uint *hrp_index ) { - if( lrg->mask().is_UP() && lrg->mask_size() ) { - if( lrg->_is_float ) { + if (lrg->mask().is_UP() && lrg->mask_size()) { + if (lrg->_is_float || lrg->_is_vector) { pressure[1] -= lrg->reg_pressure(); if( pressure[1] == (uint)FLOATPRESSURE ) { hrp_index[1] = where; @@ -522,8 +523,8 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { LRG &lrg = lrgs(lidx); lrg._area += cost; // Compute initial register pressure - if( lrg.mask().is_UP() && lrg.mask_size() ) { - if( lrg._is_float ) { // Count float pressure + if (lrg.mask().is_UP() && lrg.mask_size()) { + if (lrg._is_float || lrg._is_vector) { // Count float pressure pressure[1] += lrg.reg_pressure(); #ifdef EXACT_PRESSURE if( pressure[1] > b->_freg_pressure ) @@ -681,13 +682,10 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // according to its bindings. const RegMask &rmask = lrgs(r).mask(); if( lrgs(r).is_bound() && !(n->rematerialize()) && rmask.is_NotEmpty() ) { - // Smear odd bits; leave only aligned pairs of bits. - RegMask r2mask = rmask; - r2mask.SmearToPairs(); // Check for common case int r_size = lrgs(r).num_regs(); OptoReg::Name r_reg = (r_size == 1) ? rmask.find_first_elem() : OptoReg::Physical; - + // Smear odd bits IndexSetIterator elements(&liveout); uint l; while ((l = elements.next()) != 0) { @@ -701,10 +699,15 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // Remove the bits from LRG 'r' from LRG 'l' so 'l' no // longer interferes with 'r'. If 'l' requires aligned // adjacent pairs, subtract out bit pairs. - if( lrg.num_regs() == 2 && !lrg._fat_proj ) { + assert(!lrg._is_vector || !lrg._fat_proj, "sanity"); + if (lrg.num_regs() > 1 && !lrg._fat_proj) { + RegMask r2mask = rmask; + // Leave only aligned set of bits. + r2mask.smear_to_sets(lrg.num_regs()); + // It includes vector case. lrg.SUBTRACT( r2mask ); lrg.compute_set_mask_size(); - } else if( r_size != 1 ) { + } else if( r_size != 1 ) { // fat proj lrg.SUBTRACT( rmask ); lrg.compute_set_mask_size(); } else { // Common case: size 1 bound removal @@ -763,8 +766,8 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // Newly live things assumed live from here to top of block lrg._area += cost; // Adjust register pressure - if( lrg.mask().is_UP() && lrg.mask_size() ) { - if( lrg._is_float ) { + if (lrg.mask().is_UP() && lrg.mask_size()) { + if (lrg._is_float || lrg._is_vector) { pressure[1] += lrg.reg_pressure(); #ifdef EXACT_PRESSURE if( pressure[1] > b->_freg_pressure ) diff --git a/hotspot/src/share/vm/opto/ifnode.cpp b/hotspot/src/share/vm/opto/ifnode.cpp index ce84f649f9b..c48e982bab9 100644 --- a/hotspot/src/share/vm/opto/ifnode.cpp +++ b/hotspot/src/share/vm/opto/ifnode.cpp @@ -338,8 +338,7 @@ static Node* split_if(IfNode *iff, PhaseIterGVN *igvn) { Node *phi_f = NULL; // do not construct unless needed for (DUIterator_Last i2min, i2 = phi->last_outs(i2min); i2 >= i2min; --i2) { Node* v = phi->last_out(i2);// User of the phi - igvn->hash_delete(v); // Have to fixup other Phi users - igvn->_worklist.push(v); + igvn->rehash_node_delayed(v); // Have to fixup other Phi users uint vop = v->Opcode(); Node *proj = NULL; if( vop == Op_Phi ) { // Remote merge point @@ -552,9 +551,8 @@ static void adjust_check(Node* proj, Node* range, Node* index, if( new_cmp == cmp ) return; // Else, adjust existing check Node *new_bol = gvn->transform( new (gvn->C, 2) BoolNode( new_cmp, bol->as_Bool()->_test._test ) ); - igvn->hash_delete( iff ); + igvn->rehash_node_delayed( iff ); iff->set_req_X( 1, new_bol, igvn ); - igvn->_worklist.push( iff ); } //------------------------------up_one_dom------------------------------------- @@ -732,9 +730,7 @@ Node* IfNode::fold_compares(PhaseGVN* phase) { Node* adjusted = phase->transform(new (phase->C, 3) SubINode(n, phase->intcon(failtype->_lo))); Node* newcmp = phase->transform(new (phase->C, 3) CmpUNode(adjusted, phase->intcon(bound))); Node* newbool = phase->transform(new (phase->C, 2) BoolNode(newcmp, cond)); - phase->hash_delete(dom_iff); - dom_iff->set_req(1, phase->intcon(ctrl->as_Proj()->_con)); - phase->is_IterGVN()->_worklist.push(dom_iff); + phase->is_IterGVN()->replace_input_of(dom_iff, 1, phase->intcon(ctrl->as_Proj()->_con)); phase->hash_delete(this); set_req(1, newbool); return this; @@ -1042,17 +1038,15 @@ void IfNode::dominated_by( Node *prev_dom, PhaseIterGVN *igvn ) { // Loop ends when projection has no more uses. for (DUIterator_Last jmin, j = ifp->last_outs(jmin); j >= jmin; --j) { Node* s = ifp->last_out(j); // Get child of IfTrue/IfFalse - igvn->hash_delete(s); // Yank from hash table before edge hacking if( !s->depends_only_on_test() ) { // Find the control input matching this def-use edge. // For Regions it may not be in slot 0. uint l; for( l = 0; s->in(l) != ifp; l++ ) { } - s->set_req(l, ctrl_target); + igvn->replace_input_of(s, l, ctrl_target); } else { // Else, for control producers, - s->set_req(0, data_target); // Move child to data-target + igvn->replace_input_of(s, 0, data_target); // Move child to data-target } - igvn->_worklist.push(s); // Revisit collapsed Phis } // End for each child of a projection igvn->remove_dead_node(ifp); diff --git a/hotspot/src/share/vm/opto/lcm.cpp b/hotspot/src/share/vm/opto/lcm.cpp index 1ad9f0b1f0c..2f272eb55c7 100644 --- a/hotspot/src/share/vm/opto/lcm.cpp +++ b/hotspot/src/share/vm/opto/lcm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,6 +139,7 @@ void Block::implicit_null_check(PhaseCFG *cfg, Node *proj, Node *val, int allowe int iop = mach->ideal_Opcode(); switch( iop ) { case Op_LoadB: + case Op_LoadUB: case Op_LoadUS: case Op_LoadD: case Op_LoadF: @@ -445,6 +446,11 @@ Node *Block::select(PhaseCFG *cfg, Node_List &worklist, GrowableArray &read if( e->is_MachNullCheck() && e->in(1) == n ) continue; + // Schedule IV increment last. + if (e->is_Mach() && e->as_Mach()->ideal_Opcode() == Op_CountedLoopEnd && + e->in(1)->in(1) == n && n->is_iteratively_computed()) + continue; + uint n_choice = 2; // See if this instruction is consumed by a branch. If so, then (as the diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index 13c3a4327ce..981a241a4f1 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -147,7 +147,8 @@ class LibraryCallKit : public GraphKit { return generate_method_call(method_id, true, false); } - Node* make_string_method_node(int opcode, Node* str1, Node* cnt1, Node* str2, Node* cnt2); + Node* make_string_method_node(int opcode, Node* str1_start, Node* cnt1, Node* str2_start, Node* cnt2); + Node* make_string_method_node(int opcode, Node* str1, Node* str2); bool inline_string_compareTo(); bool inline_string_indexOf(); Node* string_indexOf(Node* string_object, ciTypeArray* target_array, jint offset, jint cache_i, jint md2_i); @@ -159,6 +160,7 @@ class LibraryCallKit : public GraphKit { bool inline_trans(vmIntrinsics::ID id); bool inline_abs(vmIntrinsics::ID id); bool inline_sqrt(vmIntrinsics::ID id); + void finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName); bool inline_pow(vmIntrinsics::ID id); bool inline_exp(vmIntrinsics::ID id); bool inline_min_max(vmIntrinsics::ID id); @@ -191,8 +193,6 @@ class LibraryCallKit : public GraphKit { void copy_to_clone(Node* obj, Node* alloc_obj, Node* obj_size, bool is_array, bool card_mark); bool inline_native_clone(bool is_virtual); bool inline_native_Reflection_getCallerClass(); - bool inline_native_AtomicLong_get(); - bool inline_native_AtomicLong_attemptUpdate(); bool is_method_invoke_or_aux_frame(JVMState* jvms); // Helper function for inlining native object hash method bool inline_native_hashcode(bool is_virtual, bool is_static); @@ -330,11 +330,6 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) { // We do not intrinsify this. The optimizer does fine with it. return NULL; - case vmIntrinsics::_get_AtomicLong: - case vmIntrinsics::_attemptUpdate: - if (!InlineAtomicLong) return NULL; - break; - case vmIntrinsics::_getCallerClass: if (!UseNewReflection) return NULL; if (!InlineReflectionGetCallerClass) return NULL; @@ -710,11 +705,6 @@ bool LibraryCallKit::try_to_inline() { case vmIntrinsics::_reverseBytes_c: return inline_reverseBytes((vmIntrinsics::ID) intrinsic_id()); - case vmIntrinsics::_get_AtomicLong: - return inline_native_AtomicLong_get(); - case vmIntrinsics::_attemptUpdate: - return inline_native_AtomicLong_attemptUpdate(); - case vmIntrinsics::_getCallerClass: return inline_native_Reflection_getCallerClass(); @@ -873,48 +863,76 @@ Node* LibraryCallKit::generate_current_thread(Node* &tls_output) { //------------------------------make_string_method_node------------------------ -// Helper method for String intrinsic finctions. -Node* LibraryCallKit::make_string_method_node(int opcode, Node* str1, Node* cnt1, Node* str2, Node* cnt2) { - const int value_offset = java_lang_String::value_offset_in_bytes(); - const int count_offset = java_lang_String::count_offset_in_bytes(); - const int offset_offset = java_lang_String::offset_offset_in_bytes(); - +// Helper method for String intrinsic functions. This version is called +// with str1 and str2 pointing to String object nodes. +// +Node* LibraryCallKit::make_string_method_node(int opcode, Node* str1, Node* str2) { Node* no_ctrl = NULL; - ciInstanceKlass* klass = env()->String_klass(); - const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); - - const TypeAryPtr* value_type = - TypeAryPtr::make(TypePtr::NotNull, - TypeAry::make(TypeInt::CHAR,TypeInt::POS), - ciTypeArrayKlass::make(T_CHAR), true, 0); - - // Get start addr of string and substring - Node* str1_valuea = basic_plus_adr(str1, str1, value_offset); - Node* str1_value = make_load(no_ctrl, str1_valuea, value_type, T_OBJECT, string_type->add_offset(value_offset)); - Node* str1_offseta = basic_plus_adr(str1, str1, offset_offset); - Node* str1_offset = make_load(no_ctrl, str1_offseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset)); + // Get start addr of string + Node* str1_value = load_String_value(no_ctrl, str1); + Node* str1_offset = load_String_offset(no_ctrl, str1); Node* str1_start = array_element_address(str1_value, str1_offset, T_CHAR); - Node* str2_valuea = basic_plus_adr(str2, str2, value_offset); - Node* str2_value = make_load(no_ctrl, str2_valuea, value_type, T_OBJECT, string_type->add_offset(value_offset)); - Node* str2_offseta = basic_plus_adr(str2, str2, offset_offset); - Node* str2_offset = make_load(no_ctrl, str2_offseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset)); + // Get length of string 1 + Node* str1_len = load_String_length(no_ctrl, str1); + + Node* str2_value = load_String_value(no_ctrl, str2); + Node* str2_offset = load_String_offset(no_ctrl, str2); Node* str2_start = array_element_address(str2_value, str2_offset, T_CHAR); + Node* str2_len = NULL; + Node* result = NULL; + + switch (opcode) { + case Op_StrIndexOf: + // Get length of string 2 + str2_len = load_String_length(no_ctrl, str2); + + result = new (C, 6) StrIndexOfNode(control(), memory(TypeAryPtr::CHARS), + str1_start, str1_len, str2_start, str2_len); + break; + case Op_StrComp: + // Get length of string 2 + str2_len = load_String_length(no_ctrl, str2); + + result = new (C, 6) StrCompNode(control(), memory(TypeAryPtr::CHARS), + str1_start, str1_len, str2_start, str2_len); + break; + case Op_StrEquals: + result = new (C, 5) StrEqualsNode(control(), memory(TypeAryPtr::CHARS), + str1_start, str2_start, str1_len); + break; + default: + ShouldNotReachHere(); + return NULL; + } + + // All these intrinsics have checks. + C->set_has_split_ifs(true); // Has chance for split-if optimization + + return _gvn.transform(result); +} + +// Helper method for String intrinsic functions. This version is called +// with str1 and str2 pointing to char[] nodes, with cnt1 and cnt2 pointing +// to Int nodes containing the lenghts of str1 and str2. +// +Node* LibraryCallKit::make_string_method_node(int opcode, Node* str1_start, Node* cnt1, Node* str2_start, Node* cnt2) { + Node* result = NULL; switch (opcode) { case Op_StrIndexOf: result = new (C, 6) StrIndexOfNode(control(), memory(TypeAryPtr::CHARS), - str1_start, cnt1, str2_start, cnt2); + str1_start, cnt1, str2_start, cnt2); break; case Op_StrComp: result = new (C, 6) StrCompNode(control(), memory(TypeAryPtr::CHARS), - str1_start, cnt1, str2_start, cnt2); + str1_start, cnt1, str2_start, cnt2); break; case Op_StrEquals: result = new (C, 5) StrEqualsNode(control(), memory(TypeAryPtr::CHARS), - str1_start, str2_start, cnt1); + str1_start, str2_start, cnt1); break; default: ShouldNotReachHere(); @@ -932,10 +950,6 @@ bool LibraryCallKit::inline_string_compareTo() { if (!Matcher::has_match_rule(Op_StrComp)) return false; - const int value_offset = java_lang_String::value_offset_in_bytes(); - const int count_offset = java_lang_String::count_offset_in_bytes(); - const int offset_offset = java_lang_String::offset_offset_in_bytes(); - _sp += 2; Node *argument = pop(); // pop non-receiver first: it was pushed second Node *receiver = pop(); @@ -952,18 +966,7 @@ bool LibraryCallKit::inline_string_compareTo() { return true; } - ciInstanceKlass* klass = env()->String_klass(); - const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); - Node* no_ctrl = NULL; - - // Get counts for string and argument - Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset); - Node* receiver_cnt = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); - - Node* argument_cnta = basic_plus_adr(argument, argument, count_offset); - Node* argument_cnt = make_load(no_ctrl, argument_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); - - Node* compare = make_string_method_node(Op_StrComp, receiver, receiver_cnt, argument, argument_cnt); + Node* compare = make_string_method_node(Op_StrComp, receiver, argument); push(compare); return true; } @@ -973,10 +976,6 @@ bool LibraryCallKit::inline_string_equals() { if (!Matcher::has_match_rule(Op_StrEquals)) return false; - const int value_offset = java_lang_String::value_offset_in_bytes(); - const int count_offset = java_lang_String::count_offset_in_bytes(); - const int offset_offset = java_lang_String::offset_offset_in_bytes(); - int nargs = 2; _sp += nargs; Node* argument = pop(); // pop non-receiver first: it was pushed second @@ -1030,24 +1029,31 @@ bool LibraryCallKit::inline_string_equals() { } } - const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); - - Node* no_ctrl = NULL; - Node* receiver_cnt; - Node* argument_cnt; - if (!stopped()) { + const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); + // Properly cast the argument to String argument = _gvn.transform(new (C, 2) CheckCastPPNode(control(), argument, string_type)); // This path is taken only when argument's type is String:NotNull. argument = cast_not_null(argument, false); - // Get counts for string and argument - Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset); - receiver_cnt = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); + Node* no_ctrl = NULL; - Node* argument_cnta = basic_plus_adr(argument, argument, count_offset); - argument_cnt = make_load(no_ctrl, argument_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); + // Get start addr of receiver + Node* receiver_val = load_String_value(no_ctrl, receiver); + Node* receiver_offset = load_String_offset(no_ctrl, receiver); + Node* receiver_start = array_element_address(receiver_val, receiver_offset, T_CHAR); + + // Get length of receiver + Node* receiver_cnt = load_String_length(no_ctrl, receiver); + + // Get start addr of argument + Node* argument_val = load_String_value(no_ctrl, argument); + Node* argument_offset = load_String_offset(no_ctrl, argument); + Node* argument_start = array_element_address(argument_val, argument_offset, T_CHAR); + + // Get length of argument + Node* argument_cnt = load_String_length(no_ctrl, argument); // Check for receiver count != argument count Node* cmp = _gvn.transform( new(C, 3) CmpINode(receiver_cnt, argument_cnt) ); @@ -1057,14 +1063,14 @@ bool LibraryCallKit::inline_string_equals() { phi->init_req(4, intcon(0)); region->init_req(4, if_ne); } - } - // Check for count == 0 is done by mach node StrEquals. + // Check for count == 0 is done by assembler code for StrEquals. - if (!stopped()) { - Node* equals = make_string_method_node(Op_StrEquals, receiver, receiver_cnt, argument, argument_cnt); - phi->init_req(1, equals); - region->init_req(1, control()); + if (!stopped()) { + Node* equals = make_string_method_node(Op_StrEquals, receiver_start, receiver_cnt, argument_start, argument_cnt); + phi->init_req(1, equals); + region->init_req(1, control()); + } } // post merge @@ -1162,20 +1168,9 @@ Node* LibraryCallKit::string_indexOf(Node* string_object, ciTypeArray* target_ar const int nargs = 2; // number of arguments to push back for uncommon trap in predicate - const int value_offset = java_lang_String::value_offset_in_bytes(); - const int count_offset = java_lang_String::count_offset_in_bytes(); - const int offset_offset = java_lang_String::offset_offset_in_bytes(); - - ciInstanceKlass* klass = env()->String_klass(); - const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass); - const TypeAryPtr* source_type = TypeAryPtr::make(TypePtr::NotNull, TypeAry::make(TypeInt::CHAR,TypeInt::POS), ciTypeArrayKlass::make(T_CHAR), true, 0); - - Node* sourceOffseta = basic_plus_adr(string_object, string_object, offset_offset); - Node* sourceOffset = make_load(no_ctrl, sourceOffseta, TypeInt::INT, T_INT, string_type->add_offset(offset_offset)); - Node* sourceCounta = basic_plus_adr(string_object, string_object, count_offset); - Node* sourceCount = make_load(no_ctrl, sourceCounta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); - Node* sourcea = basic_plus_adr(string_object, string_object, value_offset); - Node* source = make_load(no_ctrl, sourcea, source_type, T_OBJECT, string_type->add_offset(value_offset)); + Node* source = load_String_value(no_ctrl, string_object); + Node* sourceOffset = load_String_offset(no_ctrl, string_object); + Node* sourceCount = load_String_length(no_ctrl, string_object); Node* target = _gvn.transform( makecon(TypeOopPtr::make_from_constant(target_array, true)) ); jint target_length = target_array->length(); @@ -1243,10 +1238,6 @@ Node* LibraryCallKit::string_indexOf(Node* string_object, ciTypeArray* target_ar //------------------------------inline_string_indexOf------------------------ bool LibraryCallKit::inline_string_indexOf() { - const int value_offset = java_lang_String::value_offset_in_bytes(); - const int count_offset = java_lang_String::count_offset_in_bytes(); - const int offset_offset = java_lang_String::offset_offset_in_bytes(); - _sp += 2; Node *argument = pop(); // pop non-receiver first: it was pushed second Node *receiver = pop(); @@ -1280,12 +1271,21 @@ bool LibraryCallKit::inline_string_indexOf() { Node* result_phi = new (C, 4) PhiNode(result_rgn, TypeInt::INT); Node* no_ctrl = NULL; - // Get counts for string and substr - Node* source_cnta = basic_plus_adr(receiver, receiver, count_offset); - Node* source_cnt = make_load(no_ctrl, source_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); + // Get start addr of source string + Node* source = load_String_value(no_ctrl, receiver); + Node* source_offset = load_String_offset(no_ctrl, receiver); + Node* source_start = array_element_address(source, source_offset, T_CHAR); - Node* substr_cnta = basic_plus_adr(argument, argument, count_offset); - Node* substr_cnt = make_load(no_ctrl, substr_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset)); + // Get length of source string + Node* source_cnt = load_String_length(no_ctrl, receiver); + + // Get start addr of substring + Node* substr = load_String_value(no_ctrl, argument); + Node* substr_offset = load_String_offset(no_ctrl, argument); + Node* substr_start = array_element_address(substr, substr_offset, T_CHAR); + + // Get length of source string + Node* substr_cnt = load_String_length(no_ctrl, argument); // Check for substr count > string count Node* cmp = _gvn.transform( new(C, 3) CmpINode(substr_cnt, source_cnt) ); @@ -1308,7 +1308,7 @@ bool LibraryCallKit::inline_string_indexOf() { } if (!stopped()) { - result = make_string_method_node(Op_StrIndexOf, receiver, source_cnt, argument, substr_cnt); + result = make_string_method_node(Op_StrIndexOf, source_start, source_cnt, substr_start, substr_cnt); result_phi->init_req(1, result); result_rgn->init_req(1, control()); } @@ -1333,11 +1333,19 @@ bool LibraryCallKit::inline_string_indexOf() { ciInstance* str = str_const->as_instance(); assert(str != NULL, "must be instance"); - ciObject* v = str->field_value_by_offset(value_offset).as_object(); - int o = str->field_value_by_offset(offset_offset).as_int(); - int c = str->field_value_by_offset(count_offset).as_int(); + ciObject* v = str->field_value_by_offset(java_lang_String::value_offset_in_bytes()).as_object(); ciTypeArray* pat = v->as_type_array(); // pattern (argument) character array + int o; + int c; + if (java_lang_String::has_offset_field()) { + o = str->field_value_by_offset(java_lang_String::offset_offset_in_bytes()).as_int(); + c = str->field_value_by_offset(java_lang_String::count_offset_in_bytes()).as_int(); + } else { + o = 0; + c = pat->length(); + } + // constant strings have no offset and count == length which // simplifies the resulting code somewhat so lets optimize for that. if (o != 0 || c != pat->length()) { @@ -1528,43 +1536,79 @@ bool LibraryCallKit::inline_abs(vmIntrinsics::ID id) { return true; } +void LibraryCallKit::finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName) { + //------------------- + //result=(result.isNaN())? funcAddr():result; + // Check: If isNaN() by checking result!=result? then either trap + // or go to runtime + Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); + // Build the boolean node + Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); + + if (!too_many_traps(Deoptimization::Reason_intrinsic)) { + { + BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); + // End the current control-flow path + push_pair(x); + if (y != NULL) { + push_pair(y); + } + // The pow or exp intrinsic returned a NaN, which requires a call + // to the runtime. Recompile with the runtime call. + uncommon_trap(Deoptimization::Reason_intrinsic, + Deoptimization::Action_make_not_entrant); + } + push_pair(result); + } else { + // If this inlining ever returned NaN in the past, we compile a call + // to the runtime to properly handle corner cases + + IfNode* iff = create_and_xform_if(control(), bolisnum, PROB_STATIC_FREQUENT, COUNT_UNKNOWN); + Node* if_slow = _gvn.transform( new (C, 1) IfFalseNode(iff) ); + Node* if_fast = _gvn.transform( new (C, 1) IfTrueNode(iff) ); + + if (!if_slow->is_top()) { + RegionNode* result_region = new(C, 3) RegionNode(3); + PhiNode* result_val = new (C, 3) PhiNode(result_region, Type::DOUBLE); + + result_region->init_req(1, if_fast); + result_val->init_req(1, result); + + set_control(if_slow); + + const TypePtr* no_memory_effects = NULL; + Node* rt = make_runtime_call(RC_LEAF, call_type, funcAddr, funcName, + no_memory_effects, + x, top(), y, y ? top() : NULL); + Node* value = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+0)); +#ifdef ASSERT + Node* value_top = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+1)); + assert(value_top == top(), "second value must be top"); +#endif + + result_region->init_req(2, control()); + result_val->init_req(2, value); + push_result(result_region, result_val); + } else { + push_pair(result); + } + } +} + //------------------------------inline_exp------------------------------------- // Inline exp instructions, if possible. The Intel hardware only misses // really odd corner cases (+/- Infinity). Just uncommon-trap them. bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) { assert(id == vmIntrinsics::_dexp, "Not exp"); - // If this inlining ever returned NaN in the past, we do not intrinsify it - // every again. NaN results requires StrictMath.exp handling. - if (too_many_traps(Deoptimization::Reason_intrinsic)) return false; - - // Do not intrinsify on older platforms which lack cmove. - if (ConditionalMoveLimit == 0) return false; - _sp += arg_size(); // restore stack pointer Node *x = pop_math_arg(); Node *result = _gvn.transform(new (C, 2) ExpDNode(0,x)); - //------------------- - //result=(result.isNaN())? StrictMath::exp():result; - // Check: If isNaN() by checking result!=result? then go to Strict Math - Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); - // Build the boolean node - Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); - - { BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); - // End the current control-flow path - push_pair(x); - // Math.exp intrinsic returned a NaN, which requires StrictMath.exp - // to handle. Recompile without intrinsifying Math.exp - uncommon_trap(Deoptimization::Reason_intrinsic, - Deoptimization::Action_make_not_entrant); - } + finish_pow_exp(result, x, NULL, OptoRuntime::Math_D_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dexp), "EXP"); C->set_has_split_ifs(true); // Has chance for split-if optimization - push_pair(result); - return true; } @@ -1573,17 +1617,12 @@ bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) { bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { assert(id == vmIntrinsics::_dpow, "Not pow"); - // If this inlining ever returned NaN in the past, we do not intrinsify it - // every again. NaN results requires StrictMath.pow handling. - if (too_many_traps(Deoptimization::Reason_intrinsic)) return false; - - // Do not intrinsify on older platforms which lack cmove. - if (ConditionalMoveLimit == 0) return false; - // Pseudocode for pow // if (x <= 0.0) { - // if ((double)((int)y)==y) { // if y is int - // result = ((1&(int)y)==0)?-DPow(abs(x), y):DPow(abs(x), y) + // long longy = (long)y; + // if ((double)longy == y) { // if y is long + // if (y + 1 == y) longy = 0; // huge number: even + // result = ((1&longy) == 0)?-DPow(abs(x), y):DPow(abs(x), y); // } else { // result = NaN; // } @@ -1591,7 +1630,7 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { // result = DPow(x,y); // } // if (result != result)? { - // uncommon_trap(); + // result = uncommon_trap() or runtime_call(); // } // return result; @@ -1599,15 +1638,14 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { Node* y = pop_math_arg(); Node* x = pop_math_arg(); - Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); + Node* result = NULL; - // Short form: if not top-level (i.e., Math.pow but inlining Math.pow - // inside of something) then skip the fancy tests and just check for - // NaN result. - Node *result = NULL; - if( jvms()->depth() >= 1 ) { - result = fast_result; + if (!too_many_traps(Deoptimization::Reason_intrinsic)) { + // Short form: skip the fancy tests and just check for NaN result. + result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); } else { + // If this inlining ever returned NaN in the past, include all + // checks + call to the runtime. // Set the merge point for If node with condition of (x <= 0.0) // There are four possible paths to region node and phi node @@ -1623,55 +1661,95 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { Node *bol1 = _gvn.transform( new (C, 2) BoolNode( cmp, BoolTest::le ) ); // Branch either way IfNode *if1 = create_and_xform_if(control(),bol1, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN); - Node *opt_test = _gvn.transform(if1); - //assert( opt_test->is_If(), "Expect an IfNode"); - IfNode *opt_if1 = (IfNode*)opt_test; // Fast path taken; set region slot 3 - Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(opt_if1) ); + Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(if1) ); r->init_req(3,fast_taken); // Capture fast-control // Fast path not-taken, i.e. slow path - Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(opt_if1) ); + Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(if1) ); // Set fast path result - Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, y, x) ); + Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); phi->init_req(3, fast_result); // Complex path - // Build the second if node (if y is int) - // Node for (int)y - Node *inty = _gvn.transform( new (C, 2) ConvD2INode(y)); - // Node for (double)((int) y) - Node *doubleinty= _gvn.transform( new (C, 2) ConvI2DNode(inty)); - // Check (double)((int) y) : y - Node *cmpinty= _gvn.transform(new (C, 3) CmpDNode(doubleinty, y)); - // Check if (y isn't int) then go to slow path + // Build the second if node (if y is long) + // Node for (long)y + Node *longy = _gvn.transform( new (C, 2) ConvD2LNode(y)); + // Node for (double)((long) y) + Node *doublelongy= _gvn.transform( new (C, 2) ConvL2DNode(longy)); + // Check (double)((long) y) : y + Node *cmplongy= _gvn.transform(new (C, 3) CmpDNode(doublelongy, y)); + // Check if (y isn't long) then go to slow path - Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmpinty, BoolTest::ne ) ); + Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmplongy, BoolTest::ne ) ); // Branch either way IfNode *if2 = create_and_xform_if(complex_path,bol2, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN); - Node *slow_path = opt_iff(r,if2); // Set region path 2 + Node* ylong_path = _gvn.transform( new (C, 1) IfFalseNode(if2)); - // Calculate DPow(abs(x), y)*(1 & (int)y) + Node *slow_path = _gvn.transform( new (C, 1) IfTrueNode(if2) ); + + // Calculate DPow(abs(x), y)*(1 & (long)y) // Node for constant 1 - Node *conone = intcon(1); - // 1& (int)y - Node *signnode= _gvn.transform( new (C, 3) AndINode(conone, inty) ); + Node *conone = longcon(1); + // 1& (long)y + Node *signnode= _gvn.transform( new (C, 3) AndLNode(conone, longy) ); + + // A huge number is always even. Detect a huge number by checking + // if y + 1 == y and set integer to be tested for parity to 0. + // Required for corner case: + // (long)9.223372036854776E18 = max_jlong + // (double)(long)9.223372036854776E18 = 9.223372036854776E18 + // max_jlong is odd but 9.223372036854776E18 is even + Node* yplus1 = _gvn.transform( new (C, 3) AddDNode(y, makecon(TypeD::make(1)))); + Node *cmpyplus1= _gvn.transform(new (C, 3) CmpDNode(yplus1, y)); + Node *bolyplus1 = _gvn.transform( new (C, 2) BoolNode( cmpyplus1, BoolTest::eq ) ); + Node* correctedsign = NULL; + if (ConditionalMoveLimit != 0) { + correctedsign = _gvn.transform( CMoveNode::make(C, NULL, bolyplus1, signnode, longcon(0), TypeLong::LONG)); + } else { + IfNode *ifyplus1 = create_and_xform_if(ylong_path,bolyplus1, PROB_FAIR, COUNT_UNKNOWN); + RegionNode *r = new (C, 3) RegionNode(3); + Node *phi = new (C, 3) PhiNode(r, TypeLong::LONG); + r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyplus1))); + r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyplus1))); + phi->init_req(1, signnode); + phi->init_req(2, longcon(0)); + correctedsign = _gvn.transform(phi); + ylong_path = _gvn.transform(r); + record_for_igvn(r); + } + // zero node - Node *conzero = intcon(0); - // Check (1&(int)y)==0? - Node *cmpeq1 = _gvn.transform(new (C, 3) CmpINode(signnode, conzero)); - // Check if (1&(int)y)!=0?, if so the result is negative + Node *conzero = longcon(0); + // Check (1&(long)y)==0? + Node *cmpeq1 = _gvn.transform(new (C, 3) CmpLNode(correctedsign, conzero)); + // Check if (1&(long)y)!=0?, if so the result is negative Node *bol3 = _gvn.transform( new (C, 2) BoolNode( cmpeq1, BoolTest::ne ) ); // abs(x) Node *absx=_gvn.transform( new (C, 2) AbsDNode(x)); // abs(x)^y - Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, y, absx) ); + Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, absx, y) ); // -abs(x)^y Node *negabsxpowy = _gvn.transform(new (C, 2) NegDNode (absxpowy)); - // (1&(int)y)==1?-DPow(abs(x), y):DPow(abs(x), y) - Node *signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE)); + // (1&(long)y)==1?-DPow(abs(x), y):DPow(abs(x), y) + Node *signresult = NULL; + if (ConditionalMoveLimit != 0) { + signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE)); + } else { + IfNode *ifyeven = create_and_xform_if(ylong_path,bol3, PROB_FAIR, COUNT_UNKNOWN); + RegionNode *r = new (C, 3) RegionNode(3); + Node *phi = new (C, 3) PhiNode(r, Type::DOUBLE); + r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyeven))); + r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyeven))); + phi->init_req(1, absxpowy); + phi->init_req(2, negabsxpowy); + signresult = _gvn.transform(phi); + ylong_path = _gvn.transform(r); + record_for_igvn(r); + } // Set complex path fast result + r->init_req(2, ylong_path); phi->init_req(2, signresult); static const jlong nan_bits = CONST64(0x7ff8000000000000); @@ -1685,27 +1763,10 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { result=_gvn.transform(phi); } - //------------------- - //result=(result.isNaN())? uncommon_trap():result; - // Check: If isNaN() by checking result!=result? then go to Strict Math - Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); - // Build the boolean node - Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); - - { BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); - // End the current control-flow path - push_pair(x); - push_pair(y); - // Math.pow intrinsic returned a NaN, which requires StrictMath.pow - // to handle. Recompile without intrinsifying Math.pow. - uncommon_trap(Deoptimization::Reason_intrinsic, - Deoptimization::Action_make_not_entrant); - } + finish_pow_exp(result, x, y, OptoRuntime::Math_DD_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dpow), "POW"); C->set_has_split_ifs(true); // Has chance for split-if optimization - push_pair(result); - return true; } @@ -1783,15 +1844,11 @@ bool LibraryCallKit::inline_math_native(vmIntrinsics::ID id) { case vmIntrinsics::_dsqrt: return Matcher::has_match_rule(Op_SqrtD) ? inline_sqrt(id) : false; case vmIntrinsics::_dabs: return Matcher::has_match_rule(Op_AbsD) ? inline_abs(id) : false; - // These intrinsics don't work on X86. The ad implementation doesn't - // handle NaN's properly. Instead of returning infinity, the ad - // implementation returns a NaN on overflow. See bug: 6304089 - // Once the ad implementations are fixed, change the code below - // to match the intrinsics above - case vmIntrinsics::_dexp: return + Matcher::has_match_rule(Op_ExpD) ? inline_exp(id) : runtime_math(OptoRuntime::Math_D_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dexp), "EXP"); case vmIntrinsics::_dpow: return + Matcher::has_match_rule(Op_PowD) ? inline_pow(id) : runtime_math(OptoRuntime::Math_DD_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dpow), "POW"); // These intrinsics are not yet correctly implemented @@ -3592,8 +3649,10 @@ bool LibraryCallKit::inline_array_copyOf(bool is_copyOfRange) { } // Bail out if length is negative. - // ...Not needed, since the new_array will throw the right exception. - //generate_negative_guard(length, bailout, &length); + // Without this the new_array would throw + // NegativeArraySizeException but IllegalArgumentException is what + // should be thrown + generate_negative_guard(length, bailout, &length); if (bailout->req() > 1) { PreserveJVMState pjvms(this); @@ -3617,7 +3676,9 @@ bool LibraryCallKit::inline_array_copyOf(bool is_copyOfRange) { // Extreme case: Arrays.copyOf((Integer[])x, 10, String[].class). // This will fail a store-check if x contains any non-nulls. bool disjoint_bases = true; - bool length_never_negative = true; + // if start > orig_length then the length of the copy may be + // negative. + bool length_never_negative = !is_copyOfRange; generate_arraycopy(TypeAryPtr::OOPS, T_OBJECT, original, start, newcopy, intcon(0), moved, disjoint_bases, length_never_negative); @@ -3994,113 +4055,6 @@ bool LibraryCallKit::is_method_invoke_or_aux_frame(JVMState* jvms) { return false; } -static int value_field_offset = -1; // offset of the "value" field of AtomicLongCSImpl. This is needed by - // inline_native_AtomicLong_attemptUpdate() but it has no way of - // computing it since there is no lookup field by name function in the - // CI interface. This is computed and set by inline_native_AtomicLong_get(). - // Using a static variable here is safe even if we have multiple compilation - // threads because the offset is constant. At worst the same offset will be - // computed and stored multiple - -bool LibraryCallKit::inline_native_AtomicLong_get() { - // Restore the stack and pop off the argument - _sp+=1; - Node *obj = pop(); - - // get the offset of the "value" field. Since the CI interfaces - // does not provide a way to look up a field by name, we scan the bytecodes - // to get the field index. We expect the first 2 instructions of the method - // to be: - // 0 aload_0 - // 1 getfield "value" - ciMethod* method = callee(); - if (value_field_offset == -1) - { - ciField* value_field; - ciBytecodeStream iter(method); - Bytecodes::Code bc = iter.next(); - - if ((bc != Bytecodes::_aload_0) && - ((bc != Bytecodes::_aload) || (iter.get_index() != 0))) - return false; - bc = iter.next(); - if (bc != Bytecodes::_getfield) - return false; - bool ignore; - value_field = iter.get_field(ignore); - value_field_offset = value_field->offset_in_bytes(); - } - - // Null check without removing any arguments. - _sp++; - obj = do_null_check(obj, T_OBJECT); - _sp--; - // Check for locking null object - if (stopped()) return true; - - Node *adr = basic_plus_adr(obj, obj, value_field_offset); - const TypePtr *adr_type = _gvn.type(adr)->is_ptr(); - int alias_idx = C->get_alias_index(adr_type); - - Node *result = _gvn.transform(new (C, 3) LoadLLockedNode(control(), memory(alias_idx), adr)); - - push_pair(result); - - return true; -} - -bool LibraryCallKit::inline_native_AtomicLong_attemptUpdate() { - // Restore the stack and pop off the arguments - _sp+=5; - Node *newVal = pop_pair(); - Node *oldVal = pop_pair(); - Node *obj = pop(); - - // we need the offset of the "value" field which was computed when - // inlining the get() method. Give up if we don't have it. - if (value_field_offset == -1) - return false; - - // Null check without removing any arguments. - _sp+=5; - obj = do_null_check(obj, T_OBJECT); - _sp-=5; - // Check for locking null object - if (stopped()) return true; - - Node *adr = basic_plus_adr(obj, obj, value_field_offset); - const TypePtr *adr_type = _gvn.type(adr)->is_ptr(); - int alias_idx = C->get_alias_index(adr_type); - - Node *cas = _gvn.transform(new (C, 5) StoreLConditionalNode(control(), memory(alias_idx), adr, newVal, oldVal)); - Node *store_proj = _gvn.transform( new (C, 1) SCMemProjNode(cas)); - set_memory(store_proj, alias_idx); - Node *bol = _gvn.transform( new (C, 2) BoolNode( cas, BoolTest::eq ) ); - - Node *result; - // CMove node is not used to be able fold a possible check code - // after attemptUpdate() call. This code could be transformed - // into CMove node by loop optimizations. - { - RegionNode *r = new (C, 3) RegionNode(3); - result = new (C, 3) PhiNode(r, TypeInt::BOOL); - - Node *iff = create_and_xform_if(control(), bol, PROB_FAIR, COUNT_UNKNOWN); - Node *iftrue = opt_iff(r, iff); - r->init_req(1, iftrue); - result->init_req(1, intcon(1)); - result->init_req(2, intcon(0)); - - set_control(_gvn.transform(r)); - record_for_igvn(r); - - C->set_has_split_ifs(true); // Has chance for split-if optimization - } - - push(_gvn.transform(result)); - return true; -} - bool LibraryCallKit::inline_fp_conversions(vmIntrinsics::ID id) { // restore the arguments _sp += arg_size(); diff --git a/hotspot/src/share/vm/opto/loopPredicate.cpp b/hotspot/src/share/vm/opto/loopPredicate.cpp index d4a575d7b55..048cba894f3 100644 --- a/hotspot/src/share/vm/opto/loopPredicate.cpp +++ b/hotspot/src/share/vm/opto/loopPredicate.cpp @@ -212,9 +212,8 @@ ProjNode* PhaseIdealLoop::create_new_if_for_predicate(ProjNode* cont_proj, Node* Node* use = rgn->fast_out(i); if (use->is_Phi() && use->outcnt() > 0) { assert(use->in(0) == rgn, ""); - _igvn.hash_delete(use); + _igvn.rehash_node_delayed(use); use->add_req(use->in(proj_index)); - _igvn._worklist.push(use); has_phi = true; } } @@ -284,9 +283,8 @@ ProjNode* PhaseIterGVN::create_new_if_for_predicate(ProjNode* cont_proj, Node* n for (DUIterator_Fast imax, i = rgn->fast_outs(imax); i < imax; i++) { Node* use = rgn->fast_out(i); if (use->is_Phi() && use->outcnt() > 0) { - hash_delete(use); + rehash_node_delayed(use); use->add_req(use->in(proj_index)); - _worklist.push(use); has_phi = true; } } diff --git a/hotspot/src/share/vm/opto/loopTransform.cpp b/hotspot/src/share/vm/opto/loopTransform.cpp index eee153a8904..0ee3436c73a 100644 --- a/hotspot/src/share/vm/opto/loopTransform.cpp +++ b/hotspot/src/share/vm/opto/loopTransform.cpp @@ -961,9 +961,7 @@ void PhaseIdealLoop::insert_pre_post_loops( IdealLoopTree *loop, Node_List &old_ set_loop(zer_iff, loop->_parent); // Plug in the false-path, taken if we need to skip post-loop - _igvn.hash_delete( main_exit ); - main_exit->set_req(0, zer_iff); - _igvn._worklist.push(main_exit); + _igvn.replace_input_of(main_exit, 0, zer_iff); set_idom(main_exit, zer_iff, dd_main_exit); set_idom(main_exit->unique_out(), zer_iff, dd_main_exit); // Make the true-path, must enter the post loop @@ -1956,9 +1954,7 @@ void PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) { C->set_major_progress(); Node *kill_con = _igvn.intcon( 1-flip ); set_ctrl(kill_con, C->root()); - _igvn.hash_delete(iff); - iff->set_req(1, kill_con); - _igvn._worklist.push(iff); + _igvn.replace_input_of(iff, 1, kill_con); // Find surviving projection assert(iff->is_If(), ""); ProjNode* dp = ((IfNode*)iff)->proj_out(1-flip); @@ -1966,11 +1962,9 @@ void PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) { for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) { Node* cd = dp->fast_out(i); // Control-dependent node if( cd->is_Load() ) { // Loads can now float around in the loop - _igvn.hash_delete(cd); // Allow the load to float around in the loop, or before it // but NOT before the pre-loop. - cd->set_req(0, ctrl); // ctrl, not NULL - _igvn._worklist.push(cd); + _igvn.replace_input_of(cd, 0, ctrl); // ctrl, not NULL --i; --imax; } @@ -2029,14 +2023,10 @@ void PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) { main_bol->set_req(1,main_cmp); } // Hack the now-private loop bounds - _igvn.hash_delete(main_cmp); - main_cmp->set_req(2, main_limit); - _igvn._worklist.push(main_cmp); + _igvn.replace_input_of(main_cmp, 2, main_limit); // The OpaqueNode is unshared by design - _igvn.hash_delete(opqzm); assert( opqzm->outcnt() == 1, "cannot hack shared node" ); - opqzm->set_req(1,main_limit); - _igvn._worklist.push(opqzm); + _igvn.replace_input_of(opqzm, 1, main_limit); } //------------------------------DCE_loop_body---------------------------------- @@ -2178,9 +2168,7 @@ bool IdealLoopTree::policy_do_remove_empty_loop( PhaseIdealLoop *phase ) { Node* cmp = cl->loopexit()->cmp_node(); assert(cl->limit() == cmp->in(2), "sanity"); phase->_igvn._worklist.push(cmp->in(2)); // put limit on worklist - phase->_igvn.hash_delete(cmp); - cmp->set_req(2, exact_limit); - phase->_igvn._worklist.push(cmp); // put cmp on worklist + phase->_igvn.replace_input_of(cmp, 2, exact_limit); // put cmp on worklist } // Note: the final value after increment should not overflow since // counted loop has limit check predicate. diff --git a/hotspot/src/share/vm/opto/loopUnswitch.cpp b/hotspot/src/share/vm/opto/loopUnswitch.cpp index 20ddf782730..47e3990fd15 100644 --- a/hotspot/src/share/vm/opto/loopUnswitch.cpp +++ b/hotspot/src/share/vm/opto/loopUnswitch.cpp @@ -174,27 +174,21 @@ void PhaseIdealLoop::do_unswitching (IdealLoopTree *loop, Node_List &old_new) { Node* use = worklist.pop(); Node* nuse = use->clone(); nuse->set_req(0, invar_proj); - _igvn.hash_delete(use); - use->set_req(1, nuse); - _igvn._worklist.push(use); + _igvn.replace_input_of(use, 1, nuse); register_new_node(nuse, invar_proj); // Same for the clone Node* use_clone = old_new[use->_idx]; - _igvn.hash_delete(use_clone); - use_clone->set_req(1, nuse); - _igvn._worklist.push(use_clone); + _igvn.replace_input_of(use_clone, 1, nuse); } } // Hardwire the control paths in the loops into if(true) and if(false) - _igvn.hash_delete(unswitch_iff); + _igvn.rehash_node_delayed(unswitch_iff); short_circuit_if(unswitch_iff, proj_true); - _igvn._worklist.push(unswitch_iff); IfNode* unswitch_iff_clone = old_new[unswitch_iff->_idx]->as_If(); - _igvn.hash_delete(unswitch_iff_clone); + _igvn.rehash_node_delayed(unswitch_iff_clone); short_circuit_if(unswitch_iff_clone, proj_false); - _igvn._worklist.push(unswitch_iff_clone); // Reoptimize loops loop->record_for_igvn(); @@ -224,8 +218,7 @@ ProjNode* PhaseIdealLoop::create_slow_version_of_loop(IdealLoopTree *loop, LoopNode* head = loop->_head->as_Loop(); bool counted_loop = head->is_CountedLoop(); Node* entry = head->in(LoopNode::EntryControl); - _igvn.hash_delete(entry); - _igvn._worklist.push(entry); + _igvn.rehash_node_delayed(entry); IdealLoopTree* outer_loop = loop->_parent; Node *cont = _igvn.intcon(1); @@ -249,18 +242,14 @@ ProjNode* PhaseIdealLoop::create_slow_version_of_loop(IdealLoopTree *loop, // Fast (true) control Node* iffast_pred = clone_loop_predicates(entry, iffast, !counted_loop); - _igvn.hash_delete(head); - head->set_req(LoopNode::EntryControl, iffast_pred); + _igvn.replace_input_of(head, LoopNode::EntryControl, iffast_pred); set_idom(head, iffast_pred, dom_depth(head)); - _igvn._worklist.push(head); // Slow (false) control Node* ifslow_pred = clone_loop_predicates(entry, ifslow, !counted_loop); LoopNode* slow_head = old_new[head->_idx]->as_Loop(); - _igvn.hash_delete(slow_head); - slow_head->set_req(LoopNode::EntryControl, ifslow_pred); + _igvn.replace_input_of(slow_head, LoopNode::EntryControl, ifslow_pred); set_idom(slow_head, ifslow_pred, dom_depth(slow_head)); - _igvn._worklist.push(slow_head); recompute_dom_depth(); diff --git a/hotspot/src/share/vm/opto/loopnode.cpp b/hotspot/src/share/vm/opto/loopnode.cpp index 2d045e47d95..43def731478 100644 --- a/hotspot/src/share/vm/opto/loopnode.cpp +++ b/hotspot/src/share/vm/opto/loopnode.cpp @@ -1129,8 +1129,7 @@ void IdealLoopTree::split_fall_in( PhaseIdealLoop *phase, int fall_in_cnt ) { // I'm mid-iteration over the Region's uses. for (DUIterator_Last imin, i = old_phi->last_outs(imin); i >= imin; ) { Node* use = old_phi->last_out(i); - igvn.hash_delete(use); - igvn._worklist.push(use); + igvn.rehash_node_delayed(use); uint uses_found = 0; for (uint j = 0; j < use->len(); j++) { if (use->in(j) == old_phi) { @@ -1186,10 +1185,8 @@ void IdealLoopTree::split_outer_loop( PhaseIdealLoop *phase ) { phi->init_req(LoopNode::LoopBackControl, old_phi->in(outer_idx)); phi = igvn.register_new_node_with_optimizer(phi, old_phi); // Make old Phi point to new Phi on the fall-in path - igvn.hash_delete(old_phi); - old_phi->set_req(LoopNode::EntryControl, phi); + igvn.replace_input_of(old_phi, LoopNode::EntryControl, phi); old_phi->del_req(outer_idx); - igvn._worklist.push(old_phi); } } @@ -1992,9 +1989,7 @@ void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts) // we do it here. for( uint i = 1; i < C->root()->req(); i++ ) { if( !_nodes[C->root()->in(i)->_idx] ) { // Dead path into Root? - _igvn.hash_delete(C->root()); - C->root()->del_req(i); - _igvn._worklist.push(C->root()); + _igvn.delete_input_of(C->root(), i); i--; // Rerun same iteration on compressed edges } } @@ -2756,7 +2751,8 @@ int PhaseIdealLoop::build_loop_tree_impl( Node *n, int pre_order ) { // Do not count uncommon calls if( !n->is_CallStaticJava() || !n->as_CallStaticJava()->_name ) { Node *iff = n->in(0)->in(0); - if( !iff->is_If() || + // No any calls for vectorized loops. + if( UseSuperWord || !iff->is_If() || (n->in(0)->Opcode() == Op_IfFalse && (1.0 - iff->as_If()->_prob) >= 0.01) || (iff->as_If()->_prob >= 0.01) ) @@ -3221,7 +3217,8 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) { case Op_ModF: case Op_ModD: case Op_LoadB: // Same with Loads; they can sink - case Op_LoadUS: // during loop optimizations. + case Op_LoadUB: // during loop optimizations. + case Op_LoadUS: case Op_LoadD: case Op_LoadF: case Op_LoadI: diff --git a/hotspot/src/share/vm/opto/loopopts.cpp b/hotspot/src/share/vm/opto/loopopts.cpp index e93fb4d088d..ee6c36d22df 100644 --- a/hotspot/src/share/vm/opto/loopopts.cpp +++ b/hotspot/src/share/vm/opto/loopopts.cpp @@ -216,9 +216,7 @@ void PhaseIdealLoop::dominated_by( Node *prevdom, Node *iff, bool flip, bool exc Node *con = _igvn.makecon(pop == Op_IfTrue ? TypeInt::ONE : TypeInt::ZERO); set_ctrl(con, C->root()); // Constant gets a new use // Hack the dominated test - _igvn.hash_delete(iff); - iff->set_req(1, con); - _igvn._worklist.push(iff); + _igvn.replace_input_of(iff, 1, con); // If I dont have a reachable TRUE and FALSE path following the IfNode then // I can assume this path reaches an infinite loop. In this case it's not @@ -245,10 +243,8 @@ void PhaseIdealLoop::dominated_by( Node *prevdom, Node *iff, bool flip, bool exc Node* cd = dp->fast_out(i); // Control-dependent node if (cd->depends_only_on_test()) { assert(cd->in(0) == dp, ""); - _igvn.hash_delete(cd); - cd->set_req(0, prevdom); + _igvn.replace_input_of(cd, 0, prevdom); set_early_ctrl(cd); - _igvn._worklist.push(cd); IdealLoopTree *new_loop = get_loop(get_ctrl(cd)); if (old_loop != new_loop) { if (!old_loop->_child) old_loop->_body.yank(cd); @@ -952,8 +948,7 @@ void PhaseIdealLoop::split_if_with_blocks_post( Node *n ) { if (!n->is_Load() || late_load_ctrl != n_ctrl) { for (DUIterator_Last jmin, j = n->last_outs(jmin); j >= jmin; ) { Node *u = n->last_out(j); // Clone private computation per use - _igvn.hash_delete(u); - _igvn._worklist.push(u); + _igvn.rehash_node_delayed(u); Node *x = n->clone(); // Clone computation Node *x_ctrl = NULL; if( u->is_Phi() ) { @@ -1089,9 +1084,7 @@ BoolNode *PhaseIdealLoop::clone_iff( PhiNode *phi, IdealLoopTree *loop ) { for( i = 1; i < phi->req(); i++ ) { Node *b = phi->in(i); if( b->is_Phi() ) { - _igvn.hash_delete(phi); - _igvn._worklist.push(phi); - phi->set_req(i, clone_iff( b->as_Phi(), loop )); + _igvn.replace_input_of(phi, i, clone_iff( b->as_Phi(), loop )); } else { assert( b->is_Bool(), "" ); } @@ -1161,9 +1154,7 @@ CmpNode *PhaseIdealLoop::clone_bool( PhiNode *phi, IdealLoopTree *loop ) { for( i = 1; i < phi->req(); i++ ) { Node *b = phi->in(i); if( b->is_Phi() ) { - _igvn.hash_delete(phi); - _igvn._worklist.push(phi); - phi->set_req(i, clone_bool( b->as_Phi(), loop )); + _igvn.replace_input_of(phi, i, clone_bool( b->as_Phi(), loop )); } else { assert( b->is_Cmp() || b->is_top(), "inputs are all Cmp or TOP" ); } @@ -1347,8 +1338,7 @@ void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd // The original user of 'use' uses 'r' instead. for (DUIterator_Last lmin, l = use->last_outs(lmin); l >= lmin;) { Node* useuse = use->last_out(l); - _igvn.hash_delete(useuse); - _igvn._worklist.push(useuse); + _igvn.rehash_node_delayed(useuse); uint uses_found = 0; if( useuse->in(0) == use ) { useuse->set_req(0, r); @@ -1435,9 +1425,7 @@ void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd if( use->is_Phi() ) // Phi use is in prior block cfg = prev->in(idx); // NOT in block of Phi itself if (cfg->is_top()) { // Use is dead? - _igvn.hash_delete(use); - _igvn._worklist.push(use); - use->set_req(idx, C->top()); + _igvn.replace_input_of(use, idx, C->top()); continue; } @@ -1487,9 +1475,7 @@ void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd set_ctrl(phi, prev); } // Make 'use' use the Phi instead of the old loop body exit value - _igvn.hash_delete(use); - _igvn._worklist.push(use); - use->set_req(idx, phi); + _igvn.replace_input_of(use, idx, phi); if( use->_idx >= new_counter ) { // If updating new phis // Not needed for correctness, but prevents a weak assert // in AddPNode from tripping (when we end up with different @@ -1517,9 +1503,7 @@ void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd Node *iff = split_if_set->pop(); if( iff->in(1)->is_Phi() ) { BoolNode *b = clone_iff( iff->in(1)->as_Phi(), loop ); - _igvn.hash_delete(iff); - _igvn._worklist.push(iff); - iff->set_req(1, b); + _igvn.replace_input_of(iff, 1, b); } } } @@ -1529,9 +1513,7 @@ void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd Node *phi = b->in(1); assert( phi->is_Phi(), "" ); CmpNode *cmp = clone_bool( (PhiNode*)phi, loop ); - _igvn.hash_delete(b); - _igvn._worklist.push(b); - b->set_req(1, cmp); + _igvn.replace_input_of(b, 1, cmp); } } if( split_cex_set ) { @@ -1686,10 +1668,8 @@ ProjNode* PhaseIdealLoop::insert_if_before_proj(Node* left, bool Signed, BoolTes ProjNode *other_proj = iff->proj_out(!proj->is_IfTrue())->as_Proj(); int ddepth = dom_depth(proj); - _igvn.hash_delete(iff); - _igvn._worklist.push(iff); - _igvn.hash_delete(proj); - _igvn._worklist.push(proj); + _igvn.rehash_node_delayed(iff); + _igvn.rehash_node_delayed(proj); proj->set_req(0, NULL); // temporary disconnect ProjNode* proj2 = proj_clone(proj, iff); @@ -1745,10 +1725,8 @@ RegionNode* PhaseIdealLoop::insert_region_before_proj(ProjNode* proj) { ProjNode *other_proj = iff->proj_out(!proj->is_IfTrue())->as_Proj(); int ddepth = dom_depth(proj); - _igvn.hash_delete(iff); - _igvn._worklist.push(iff); - _igvn.hash_delete(proj); - _igvn._worklist.push(proj); + _igvn.rehash_node_delayed(iff); + _igvn.rehash_node_delayed(proj); proj->set_req(0, NULL); // temporary disconnect ProjNode* proj2 = proj_clone(proj, iff); @@ -1970,9 +1948,7 @@ void PhaseIdealLoop::clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, N // clone "n" and insert it between the inputs of "n" and the use outside the loop Node* n_clone = n->clone(); - _igvn.hash_delete(use); - use->set_req(j, n_clone); - _igvn._worklist.push(use); + _igvn.replace_input_of(use, j, n_clone); Node* use_c; if (!use->is_Phi()) { use_c = has_ctrl(use) ? get_ctrl(use) : use->in(0); @@ -2028,8 +2004,7 @@ void PhaseIdealLoop::clone_for_special_use_inside_loop( IdealLoopTree *loop, Nod #endif while( worklist.size() ) { Node *use = worklist.pop(); - _igvn.hash_delete(use); - _igvn._worklist.push(use); + _igvn.rehash_node_delayed(use); for (uint j = 1; j < use->req(); j++) { if (use->in(j) == n) { use->set_req(j, n_clone); @@ -2055,9 +2030,7 @@ void PhaseIdealLoop::insert_phi_for_loop( Node* use, uint idx, Node* lp_entry_va _igvn.remove_dead_node(phi); phi = hit; } - _igvn.hash_delete(use); - _igvn._worklist.push(use); - use->set_req(idx, phi); + _igvn.replace_input_of(use, idx, phi); } #ifdef ASSERT @@ -2630,9 +2603,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) { // use is in loop if (old_new[use->_idx] != NULL) { // null for dead code Node* use_clone = old_new[use->_idx]; - _igvn.hash_delete(use); - use->set_req(j, C->top()); - _igvn._worklist.push(use); + _igvn.replace_input_of(use, j, C->top()); insert_phi_for_loop( use_clone, j, old_new[def->_idx], def, new_head_clone ); } } else { @@ -2667,46 +2638,35 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) { if (!n->is_CFG() && n->in(0) != NULL && not_peel.test(n->_idx) && peel.test(n->in(0)->_idx)) { Node* n_clone = old_new[n->_idx]; - _igvn.hash_delete(n_clone); - n_clone->set_req(0, new_head_clone); - _igvn._worklist.push(n_clone); + _igvn.replace_input_of(n_clone, 0, new_head_clone); } } // Backedge of the surviving new_head (the clone) is original last_peel - _igvn.hash_delete(new_head_clone); - new_head_clone->set_req(LoopNode::LoopBackControl, last_peel); - _igvn._worklist.push(new_head_clone); + _igvn.replace_input_of(new_head_clone, LoopNode::LoopBackControl, last_peel); // Cut first node in original not_peel set - _igvn.hash_delete(new_head); - new_head->set_req(LoopNode::EntryControl, C->top()); - new_head->set_req(LoopNode::LoopBackControl, C->top()); - _igvn._worklist.push(new_head); + _igvn.rehash_node_delayed(new_head); // Multiple edge updates: + new_head->set_req(LoopNode::EntryControl, C->top()); // use rehash_node_delayed / set_req instead of + new_head->set_req(LoopNode::LoopBackControl, C->top()); // multiple replace_input_of calls // Copy head_clone back-branch info to original head // and remove original head's loop entry and // clone head's back-branch - _igvn.hash_delete(head); - _igvn.hash_delete(head_clone); - head->set_req(LoopNode::EntryControl, head_clone->in(LoopNode::LoopBackControl)); + _igvn.rehash_node_delayed(head); // Multiple edge updates + head->set_req(LoopNode::EntryControl, head_clone->in(LoopNode::LoopBackControl)); head->set_req(LoopNode::LoopBackControl, C->top()); - head_clone->set_req(LoopNode::LoopBackControl, C->top()); - _igvn._worklist.push(head); - _igvn._worklist.push(head_clone); + _igvn.replace_input_of(head_clone, LoopNode::LoopBackControl, C->top()); // Similarly modify the phis for (DUIterator_Fast kmax, k = head->fast_outs(kmax); k < kmax; k++) { Node* use = head->fast_out(k); if (use->is_Phi() && use->outcnt() > 0) { Node* use_clone = old_new[use->_idx]; - _igvn.hash_delete(use); - _igvn.hash_delete(use_clone); - use->set_req(LoopNode::EntryControl, use_clone->in(LoopNode::LoopBackControl)); + _igvn.rehash_node_delayed(use); // Multiple edge updates + use->set_req(LoopNode::EntryControl, use_clone->in(LoopNode::LoopBackControl)); use->set_req(LoopNode::LoopBackControl, C->top()); - use_clone->set_req(LoopNode::LoopBackControl, C->top()); - _igvn._worklist.push(use); - _igvn._worklist.push(use_clone); + _igvn.replace_input_of(use_clone, LoopNode::LoopBackControl, C->top()); } } @@ -2792,8 +2752,7 @@ void PhaseIdealLoop::reorg_offsets(IdealLoopTree *loop) { set_ctrl(neg_stride, C->root()); Node *post = new (C, 3) AddINode( opaq, neg_stride); register_new_node( post, u_ctrl ); - _igvn.hash_delete(use); - _igvn._worklist.push(use); + _igvn.rehash_node_delayed(use); for (uint j = 1; j < use->req(); j++) { if (use->in(j) == phi) use->set_req(j, post); diff --git a/hotspot/src/share/vm/opto/machnode.cpp b/hotspot/src/share/vm/opto/machnode.cpp index 7bc5877854c..88bb23b370f 100644 --- a/hotspot/src/share/vm/opto/machnode.cpp +++ b/hotspot/src/share/vm/opto/machnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -439,9 +439,9 @@ bool MachNode::rematerialize() const { // Don't remateralize somebody with bound inputs - it stretches a // fixed register lifetime. uint idx = oper_input_base(); - if( req() > idx ) { + if (req() > idx) { const RegMask &rm = in_RegMask(idx); - if( rm.is_bound1() || rm.is_bound2() ) + if (rm.is_bound(ideal_reg())) return false; } diff --git a/hotspot/src/share/vm/opto/machnode.hpp b/hotspot/src/share/vm/opto/machnode.hpp index 566e031d1a1..4db1154e8df 100644 --- a/hotspot/src/share/vm/opto/machnode.hpp +++ b/hotspot/src/share/vm/opto/machnode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -319,6 +319,7 @@ public: class MachTypeNode : public MachNode { virtual uint size_of() const { return sizeof(*this); } // Size is bigger public: + MachTypeNode( ) {} const Type *_bottom_type; virtual const class Type *bottom_type() const { return _bottom_type; } @@ -370,12 +371,12 @@ public: //------------------------------MachConstantNode------------------------------- // Machine node that holds a constant which is stored in the constant table. -class MachConstantNode : public MachNode { +class MachConstantNode : public MachTypeNode { protected: Compile::Constant _constant; // This node's constant. public: - MachConstantNode() : MachNode() { + MachConstantNode() : MachTypeNode() { init_class_id(Class_MachConstant); } diff --git a/hotspot/src/share/vm/opto/macro.cpp b/hotspot/src/share/vm/opto/macro.cpp index 11416ac4758..fee17c48a95 100644 --- a/hotspot/src/share/vm/opto/macro.cpp +++ b/hotspot/src/share/vm/opto/macro.cpp @@ -409,7 +409,7 @@ Node *PhaseMacroExpand::value_from_mem_phi(Node *mem, BasicType ft, const Type * Node *alloc_mem = alloc->in(TypeFunc::Memory); uint length = mem->req(); - GrowableArray values(length, length, NULL); + GrowableArray values(length, length, NULL, false); // create a new Phi for the value PhiNode *phi = new (C, length) PhiNode(mem->in(0), phi_type, NULL, instance_id, alias_idx, offset); @@ -1447,9 +1447,8 @@ void PhaseMacroExpand::expand_allocate_common( if (!always_slow && _memproj_fallthrough != NULL) { for (DUIterator_Fast imax, i = _memproj_fallthrough->fast_outs(imax); i < imax; i++) { Node *use = _memproj_fallthrough->fast_out(i); - _igvn.hash_delete(use); + _igvn.rehash_node_delayed(use); imax -= replace_input(use, _memproj_fallthrough, result_phi_rawmem); - _igvn._worklist.push(use); // back up iterator --i; } @@ -1463,9 +1462,8 @@ void PhaseMacroExpand::expand_allocate_common( } for (DUIterator_Fast imax, i = _memproj_catchall->fast_outs(imax); i < imax; i++) { Node *use = _memproj_catchall->fast_out(i); - _igvn.hash_delete(use); + _igvn.rehash_node_delayed(use); imax -= replace_input(use, _memproj_catchall, _memproj_fallthrough); - _igvn._worklist.push(use); // back up iterator --i; } @@ -1481,9 +1479,8 @@ void PhaseMacroExpand::expand_allocate_common( if (_ioproj_fallthrough != NULL) { for (DUIterator_Fast imax, i = _ioproj_fallthrough->fast_outs(imax); i < imax; i++) { Node *use = _ioproj_fallthrough->fast_out(i); - _igvn.hash_delete(use); + _igvn.rehash_node_delayed(use); imax -= replace_input(use, _ioproj_fallthrough, result_phi_i_o); - _igvn._worklist.push(use); // back up iterator --i; } @@ -1497,9 +1494,8 @@ void PhaseMacroExpand::expand_allocate_common( } for (DUIterator_Fast imax, i = _ioproj_catchall->fast_outs(imax); i < imax; i++) { Node *use = _ioproj_catchall->fast_out(i); - _igvn.hash_delete(use); + _igvn.rehash_node_delayed(use); imax -= replace_input(use, _ioproj_catchall, _ioproj_fallthrough); - _igvn._worklist.push(use); // back up iterator --i; } @@ -1857,18 +1853,16 @@ void PhaseMacroExpand::mark_eliminated_box(Node* oldbox, Node* obj) { if (alock->box_node() == oldbox && alock->obj_node()->eqv_uncast(obj)) { // Replace Box and mark eliminated all related locks and unlocks. alock->set_non_esc_obj(); - _igvn.hash_delete(alock); + _igvn.rehash_node_delayed(alock); alock->set_box_node(newbox); - _igvn._worklist.push(alock); next_edge = false; } } if (u->is_FastLock() && u->as_FastLock()->obj_node()->eqv_uncast(obj)) { FastLockNode* flock = u->as_FastLock(); assert(flock->box_node() == oldbox, "sanity"); - _igvn.hash_delete(flock); + _igvn.rehash_node_delayed(flock); flock->set_box_node(newbox); - _igvn._worklist.push(flock); next_edge = false; } @@ -1886,9 +1880,7 @@ void PhaseMacroExpand::mark_eliminated_box(Node* oldbox, Node* obj) { Node* box_node = sfn->monitor_box(jvms, idx); if (box_node == oldbox && obj_node->eqv_uncast(obj)) { int j = jvms->monitor_box_offset(idx); - _igvn.hash_delete(u); - u->set_req(j, newbox); - _igvn._worklist.push(u); + _igvn.replace_input_of(u, j, newbox); next_edge = false; } } diff --git a/hotspot/src/share/vm/opto/matcher.cpp b/hotspot/src/share/vm/opto/matcher.cpp index 397385670d2..f6bb30769cd 100644 --- a/hotspot/src/share/vm/opto/matcher.cpp +++ b/hotspot/src/share/vm/opto/matcher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,6 +35,7 @@ #include "opto/rootnode.hpp" #include "opto/runtime.hpp" #include "opto/type.hpp" +#include "opto/vectornode.hpp" #include "runtime/atomic.hpp" #include "runtime/os.hpp" #ifdef TARGET_ARCH_MODEL_x86_32 @@ -58,18 +59,6 @@ OptoReg::Name OptoReg::c_frame_pointer; - - -const int Matcher::base2reg[Type::lastype] = { - Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, - Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ - Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ - 0, 0/*abio*/, - Op_RegP /* Return address */, 0, /* the memories */ - Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, - 0 /*bottom*/ -}; - const RegMask *Matcher::idealreg2regmask[_last_machine_leaf]; RegMask Matcher::mreg2regmask[_last_Mach_Reg]; RegMask Matcher::STACK_ONLY_mask; @@ -107,6 +96,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2spillmask [Op_RegF] = NULL; idealreg2spillmask [Op_RegD] = NULL; idealreg2spillmask [Op_RegP] = NULL; + idealreg2spillmask [Op_VecS] = NULL; + idealreg2spillmask [Op_VecD] = NULL; + idealreg2spillmask [Op_VecX] = NULL; + idealreg2spillmask [Op_VecY] = NULL; idealreg2debugmask [Op_RegI] = NULL; idealreg2debugmask [Op_RegN] = NULL; @@ -114,6 +107,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2debugmask [Op_RegF] = NULL; idealreg2debugmask [Op_RegD] = NULL; idealreg2debugmask [Op_RegP] = NULL; + idealreg2debugmask [Op_VecS] = NULL; + idealreg2debugmask [Op_VecD] = NULL; + idealreg2debugmask [Op_VecX] = NULL; + idealreg2debugmask [Op_VecY] = NULL; idealreg2mhdebugmask[Op_RegI] = NULL; idealreg2mhdebugmask[Op_RegN] = NULL; @@ -121,6 +118,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2mhdebugmask[Op_RegF] = NULL; idealreg2mhdebugmask[Op_RegD] = NULL; idealreg2mhdebugmask[Op_RegP] = NULL; + idealreg2mhdebugmask[Op_VecS] = NULL; + idealreg2mhdebugmask[Op_VecD] = NULL; + idealreg2mhdebugmask[Op_VecX] = NULL; + idealreg2mhdebugmask[Op_VecY] = NULL; debug_only(_mem_node = NULL;) // Ideal memory node consumed by mach node } @@ -134,7 +135,7 @@ OptoReg::Name Matcher::warp_incoming_stk_arg( VMReg reg ) { warped = OptoReg::add(warped, C->out_preserve_stack_slots()); if( warped >= _in_arg_limit ) _in_arg_limit = OptoReg::add(warped, 1); // Bump max stack slot seen - if (!RegMask::can_represent(warped)) { + if (!RegMask::can_represent_arg(warped)) { // the compiler cannot represent this method's calling sequence C->record_method_not_compilable_all_tiers("unsupported incoming calling sequence"); return OptoReg::Bad; @@ -302,7 +303,7 @@ void Matcher::match( ) { _out_arg_limit = OptoReg::add(_new_SP, C->out_preserve_stack_slots()); assert( is_even(_out_arg_limit), "out_preserve must be even" ); - if (!RegMask::can_represent(OptoReg::add(_out_arg_limit,-1))) { + if (!RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1))) { // the compiler cannot represent this method's calling sequence C->record_method_not_compilable("must be able to represent all call arguments in reg mask"); } @@ -428,7 +429,7 @@ static RegMask *init_input_masks( uint size, RegMask &ret_adr, RegMask &fp ) { void Matcher::init_first_stack_mask() { // Allocate storage for spill masks as masks for the appropriate load type. - RegMask *rms = (RegMask*)C->comp_arena()->Amalloc_D(sizeof(RegMask) * 3*6); + RegMask *rms = (RegMask*)C->comp_arena()->Amalloc_D(sizeof(RegMask) * (3*6+4)); idealreg2spillmask [Op_RegN] = &rms[0]; idealreg2spillmask [Op_RegI] = &rms[1]; @@ -451,6 +452,11 @@ void Matcher::init_first_stack_mask() { idealreg2mhdebugmask[Op_RegD] = &rms[16]; idealreg2mhdebugmask[Op_RegP] = &rms[17]; + idealreg2spillmask [Op_VecS] = &rms[18]; + idealreg2spillmask [Op_VecD] = &rms[19]; + idealreg2spillmask [Op_VecX] = &rms[20]; + idealreg2spillmask [Op_VecY] = &rms[21]; + OptoReg::Name i; // At first, start with the empty mask @@ -462,7 +468,7 @@ void Matcher::init_first_stack_mask() { C->FIRST_STACK_mask().Insert(i); // Add in all bits past the outgoing argument area - guarantee(RegMask::can_represent(OptoReg::add(_out_arg_limit,-1)), + guarantee(RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1)), "must be able to represent all call arguments in reg mask"); init = _out_arg_limit; for (i = init; RegMask::can_represent(i); i = OptoReg::add(i,1)) @@ -472,21 +478,48 @@ void Matcher::init_first_stack_mask() { C->FIRST_STACK_mask().set_AllStack(); // Make spill masks. Registers for their class, plus FIRST_STACK_mask. + RegMask aligned_stack_mask = C->FIRST_STACK_mask(); + // Keep spill masks aligned. + aligned_stack_mask.clear_to_pairs(); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + + *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP]; #ifdef _LP64 *idealreg2spillmask[Op_RegN] = *idealreg2regmask[Op_RegN]; idealreg2spillmask[Op_RegN]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegP]->OR(aligned_stack_mask); +#else + idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask()); #endif *idealreg2spillmask[Op_RegI] = *idealreg2regmask[Op_RegI]; idealreg2spillmask[Op_RegI]->OR(C->FIRST_STACK_mask()); *idealreg2spillmask[Op_RegL] = *idealreg2regmask[Op_RegL]; - idealreg2spillmask[Op_RegL]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegL]->OR(aligned_stack_mask); *idealreg2spillmask[Op_RegF] = *idealreg2regmask[Op_RegF]; idealreg2spillmask[Op_RegF]->OR(C->FIRST_STACK_mask()); *idealreg2spillmask[Op_RegD] = *idealreg2regmask[Op_RegD]; - idealreg2spillmask[Op_RegD]->OR(C->FIRST_STACK_mask()); - *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP]; - idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegD]->OR(aligned_stack_mask); + if (Matcher::vector_size_supported(T_BYTE,4)) { + *idealreg2spillmask[Op_VecS] = *idealreg2regmask[Op_VecS]; + idealreg2spillmask[Op_VecS]->OR(C->FIRST_STACK_mask()); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + *idealreg2spillmask[Op_VecD] = *idealreg2regmask[Op_VecD]; + idealreg2spillmask[Op_VecD]->OR(aligned_stack_mask); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecX); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + *idealreg2spillmask[Op_VecX] = *idealreg2regmask[Op_VecX]; + idealreg2spillmask[Op_VecX]->OR(aligned_stack_mask); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecY); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + *idealreg2spillmask[Op_VecY] = *idealreg2regmask[Op_VecY]; + idealreg2spillmask[Op_VecY]->OR(aligned_stack_mask); + } if (UseFPUForSpilling) { // This mask logic assumes that the spill operations are // symmetric and that the registers involved are the same size. @@ -807,6 +840,25 @@ void Matcher::init_spill_mask( Node *ret ) { idealreg2regmask[Op_RegF] = &spillF->out_RegMask(); idealreg2regmask[Op_RegD] = &spillD->out_RegMask(); idealreg2regmask[Op_RegP] = &spillP->out_RegMask(); + + // Vector regmasks. + if (Matcher::vector_size_supported(T_BYTE,4)) { + TypeVect::VECTS = TypeVect::make(T_BYTE, 4); + MachNode *spillVectS = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTS)); + idealreg2regmask[Op_VecS] = &spillVectS->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + MachNode *spillVectD = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTD)); + idealreg2regmask[Op_VecD] = &spillVectD->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + MachNode *spillVectX = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTX)); + idealreg2regmask[Op_VecX] = &spillVectX->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + MachNode *spillVectY = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTY)); + idealreg2regmask[Op_VecY] = &spillVectY->out_RegMask(); + } } #ifdef ASSERT @@ -1063,7 +1115,7 @@ OptoReg::Name Matcher::warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out // that is killed by the call. if( warped >= out_arg_limit_per_call ) out_arg_limit_per_call = OptoReg::add(warped,1); - if (!RegMask::can_represent(warped)) { + if (!RegMask::can_represent_arg(warped)) { C->record_method_not_compilable_all_tiers("unsupported calling sequence"); return OptoReg::Bad; } @@ -1251,7 +1303,7 @@ MachNode *Matcher::match_sfpt( SafePointNode *sfpt ) { // this killed area. uint r_cnt = mcall->tf()->range()->cnt(); MachProjNode *proj = new (C, 1) MachProjNode( mcall, r_cnt+10000, RegMask::Empty, MachProjNode::fat_proj ); - if (!RegMask::can_represent(OptoReg::Name(out_arg_limit_per_call-1))) { + if (!RegMask::can_represent_arg(OptoReg::Name(out_arg_limit_per_call-1))) { C->record_method_not_compilable_all_tiers("unsupported outgoing calling sequence"); } else { for (int i = begin_out_arg_area; i < out_arg_limit_per_call; i++) diff --git a/hotspot/src/share/vm/opto/matcher.hpp b/hotspot/src/share/vm/opto/matcher.hpp index e6aae28b317..0597cb54345 100644 --- a/hotspot/src/share/vm/opto/matcher.hpp +++ b/hotspot/src/share/vm/opto/matcher.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -250,10 +250,21 @@ public: static const bool convL2FSupported(void); // Vector width in bytes - static const uint vector_width_in_bytes(void); + static const int vector_width_in_bytes(BasicType bt); + + // Limits on vector size (number of elements). + static const int max_vector_size(const BasicType bt); + static const int min_vector_size(const BasicType bt); + static const bool vector_size_supported(const BasicType bt, int size) { + return (Matcher::max_vector_size(bt) >= size && + Matcher::min_vector_size(bt) <= size); + } // Vector ideal reg - static const uint vector_ideal_reg(void); + static const int vector_ideal_reg(int len); + + // CPU supports misaligned vectors store/load. + static const bool misaligned_vectors_ok(); // Used to determine a "low complexity" 64-bit constant. (Zero is simple.) // The standard of comparison is one (StoreL ConL) vs. two (StoreI ConI). diff --git a/hotspot/src/share/vm/opto/memnode.cpp b/hotspot/src/share/vm/opto/memnode.cpp index 8c40e9c0fe2..799c2ba14d0 100644 --- a/hotspot/src/share/vm/opto/memnode.cpp +++ b/hotspot/src/share/vm/opto/memnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -717,6 +717,22 @@ Node *MemNode::Ideal_common_DU_postCCP( PhaseCCP *ccp, Node* n, Node* adr ) { adr = adr->in(1); continue; + case Op_EncodeP: + // EncodeP node's control edge could be set by this method + // when EncodeP node depends on CastPP node. + // + // Use its control edge for memory op because EncodeP may go away + // later when it is folded with following or preceding DecodeN node. + if (adr->in(0) == NULL) { + // Keep looking for cast nodes. + adr = adr->in(1); + continue; + } + ccp->hash_delete(n); + n->set_req(MemNode::Control, adr->in(0)); + ccp->hash_insert(n); + return n; + case Op_CastPP: // If the CastPP is useless, just peek on through it. if( ccp->type(adr) == ccp->type(adr->in(1)) ) { @@ -1527,6 +1543,7 @@ const Type *LoadNode::Value( PhaseTransform *phase ) const { // had an original form like p1:(AddP x x (LShiftL quux 3)), where the // expression (LShiftL quux 3) independently optimized to the constant 8. if ((t->isa_int() == NULL) && (t->isa_long() == NULL) + && (_type->isa_vect() == NULL) && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) { // t might actually be lower than _type, if _type is a unique // concrete subclass of abstract class t. diff --git a/hotspot/src/share/vm/opto/memnode.hpp b/hotspot/src/share/vm/opto/memnode.hpp index 36623a87a6d..f79f615d18f 100644 --- a/hotspot/src/share/vm/opto/memnode.hpp +++ b/hotspot/src/share/vm/opto/memnode.hpp @@ -636,17 +636,6 @@ public: virtual bool depends_only_on_test() const { return true; } }; -//------------------------------LoadLLockedNode--------------------------------- -// Load-locked a pointer from memory (either object or array). -// On Sparc & Intel this is implemented as a normal long load. -class LoadLLockedNode : public LoadLNode { -public: - LoadLLockedNode( Node *c, Node *mem, Node *adr ) - : LoadLNode(c,mem,adr,TypeRawPtr::BOTTOM, TypeLong::LONG) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_StoreLConditional; } -}; - //------------------------------SCMemProjNode--------------------------------------- // This class defines a projection of the memory state of a store conditional node. // These nodes return a value, but also update memory. diff --git a/hotspot/src/share/vm/opto/mulnode.hpp b/hotspot/src/share/vm/opto/mulnode.hpp index 11cc77145a5..c3adc433fda 100644 --- a/hotspot/src/share/vm/opto/mulnode.hpp +++ b/hotspot/src/share/vm/opto/mulnode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,9 @@ class PhaseTransform; class MulNode : public Node { virtual uint hash() const; public: - MulNode( Node *in1, Node *in2 ): Node(0,in1,in2) {} + MulNode( Node *in1, Node *in2 ): Node(0,in1,in2) { + init_class_id(Class_Mul); + } // Handle algebraic identities here. If we have an identity, return the Node // we are equivalent to. We look for "add of zero" as an identity. diff --git a/hotspot/src/share/vm/opto/node.cpp b/hotspot/src/share/vm/opto/node.cpp index 4bd752feda5..2cb44ad0e55 100644 --- a/hotspot/src/share/vm/opto/node.cpp +++ b/hotspot/src/share/vm/opto/node.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1576,6 +1576,9 @@ void Node::dump() const { } else { tty->print("no type"); } + } else if (t->isa_vect() && this->is_MachSpillCopy()) { + // Dump MachSpillcopy vector type. + t->dump(); } if (is_new) { debug_only(dump_orig(debug_orig())); diff --git a/hotspot/src/share/vm/opto/node.hpp b/hotspot/src/share/vm/opto/node.hpp index 5ddae2f0b19..f63a967b6f2 100644 --- a/hotspot/src/share/vm/opto/node.hpp +++ b/hotspot/src/share/vm/opto/node.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -100,6 +100,7 @@ class MemBarNode; class MemBarStoreStoreNode; class MemNode; class MergeMemNode; +class MulNode; class MultiNode; class MultiBranchNode; class NeverBranchNode; @@ -133,8 +134,8 @@ class Type; class TypeNode; class UnlockNode; class VectorNode; -class VectorLoadNode; -class VectorStoreNode; +class LoadVectorNode; +class StoreVectorNode; class VectorSet; typedef void (*NFunc)(Node&,void*); extern "C" { @@ -609,9 +610,9 @@ public: DEFINE_CLASS_ID(Mem, Node, 4) DEFINE_CLASS_ID(Load, Mem, 0) - DEFINE_CLASS_ID(VectorLoad, Load, 0) + DEFINE_CLASS_ID(LoadVector, Load, 0) DEFINE_CLASS_ID(Store, Mem, 1) - DEFINE_CLASS_ID(VectorStore, Store, 0) + DEFINE_CLASS_ID(StoreVector, Store, 0) DEFINE_CLASS_ID(LoadStore, Mem, 2) DEFINE_CLASS_ID(Region, Node, 5) @@ -629,8 +630,9 @@ public: DEFINE_CLASS_ID(AddP, Node, 9) DEFINE_CLASS_ID(BoxLock, Node, 10) DEFINE_CLASS_ID(Add, Node, 11) - DEFINE_CLASS_ID(Vector, Node, 12) - DEFINE_CLASS_ID(ClearArray, Node, 13) + DEFINE_CLASS_ID(Mul, Node, 12) + DEFINE_CLASS_ID(Vector, Node, 13) + DEFINE_CLASS_ID(ClearArray, Node, 14) _max_classes = ClassMask_ClearArray }; @@ -752,6 +754,7 @@ public: DEFINE_CLASS_QUERY(MemBar) DEFINE_CLASS_QUERY(MemBarStoreStore) DEFINE_CLASS_QUERY(MergeMem) + DEFINE_CLASS_QUERY(Mul) DEFINE_CLASS_QUERY(Multi) DEFINE_CLASS_QUERY(MultiBranch) DEFINE_CLASS_QUERY(Parm) @@ -767,8 +770,8 @@ public: DEFINE_CLASS_QUERY(Sub) DEFINE_CLASS_QUERY(Type) DEFINE_CLASS_QUERY(Vector) - DEFINE_CLASS_QUERY(VectorLoad) - DEFINE_CLASS_QUERY(VectorStore) + DEFINE_CLASS_QUERY(LoadVector) + DEFINE_CLASS_QUERY(StoreVector) DEFINE_CLASS_QUERY(Unlock) #undef DEFINE_CLASS_QUERY diff --git a/hotspot/src/share/vm/opto/opcodes.cpp b/hotspot/src/share/vm/opto/opcodes.cpp index 58489db0adb..83310568b50 100644 --- a/hotspot/src/share/vm/opto/opcodes.cpp +++ b/hotspot/src/share/vm/opto/opcodes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,6 +38,10 @@ const char *NodeClassNames[] = { "RegD", "RegL", "RegFlags", + "VecS", + "VecD", + "VecX", + "VecY", "_last_machine_leaf", #include "classes.hpp" "_last_class_name", diff --git a/hotspot/src/share/vm/opto/opcodes.hpp b/hotspot/src/share/vm/opto/opcodes.hpp index 9eb5b8a7ccc..4baec83feca 100644 --- a/hotspot/src/share/vm/opto/opcodes.hpp +++ b/hotspot/src/share/vm/opto/opcodes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,10 @@ enum Opcodes { macro(RegF) // Machine float register macro(RegD) // Machine double register macro(RegL) // Machine long register + macro(VecS) // Machine vectors register + macro(VecD) // Machine vectord register + macro(VecX) // Machine vectorx register + macro(VecY) // Machine vectory register macro(RegFlags) // Machine flags register _last_machine_leaf, // Split between regular opcodes and machine #include "classes.hpp" diff --git a/hotspot/src/share/vm/opto/parse.hpp b/hotspot/src/share/vm/opto/parse.hpp index ec9a08358c5..d05ed9b9b60 100644 --- a/hotspot/src/share/vm/opto/parse.hpp +++ b/hotspot/src/share/vm/opto/parse.hpp @@ -527,6 +527,9 @@ class Parse : public GraphKit { int repush_if_args(); void adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, Block* path, Block* other_path); + void sharpen_type_after_if(BoolTest::mask btest, + Node* con, const Type* tcon, + Node* val, const Type* tval); IfNode* jump_if_fork_int(Node* a, Node* b, BoolTest::mask mask); Node* jump_if_join(Node* iffalse, Node* iftrue); void jump_if_true_fork(IfNode *ifNode, int dest_bci_if_true, int prof_table_index); diff --git a/hotspot/src/share/vm/opto/parse2.cpp b/hotspot/src/share/vm/opto/parse2.cpp index 5e8007da298..4982a1d76fc 100644 --- a/hotspot/src/share/vm/opto/parse2.cpp +++ b/hotspot/src/share/vm/opto/parse2.cpp @@ -1233,6 +1233,71 @@ void Parse::adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, if (!have_con) // remaining adjustments need a con return; + sharpen_type_after_if(btest, con, tcon, val, tval); +} + + +static Node* extract_obj_from_klass_load(PhaseGVN* gvn, Node* n) { + Node* ldk; + if (n->is_DecodeN()) { + if (n->in(1)->Opcode() != Op_LoadNKlass) { + return NULL; + } else { + ldk = n->in(1); + } + } else if (n->Opcode() != Op_LoadKlass) { + return NULL; + } else { + ldk = n; + } + assert(ldk != NULL && ldk->is_Load(), "should have found a LoadKlass or LoadNKlass node"); + + Node* adr = ldk->in(MemNode::Address); + intptr_t off = 0; + Node* obj = AddPNode::Ideal_base_and_offset(adr, gvn, off); + if (obj == NULL || off != oopDesc::klass_offset_in_bytes()) // loading oopDesc::_klass? + return NULL; + const TypePtr* tp = gvn->type(obj)->is_ptr(); + if (tp == NULL || !(tp->isa_instptr() || tp->isa_aryptr())) // is obj a Java object ptr? + return NULL; + + return obj; +} + +void Parse::sharpen_type_after_if(BoolTest::mask btest, + Node* con, const Type* tcon, + Node* val, const Type* tval) { + // Look for opportunities to sharpen the type of a node + // whose klass is compared with a constant klass. + if (btest == BoolTest::eq && tcon->isa_klassptr()) { + Node* obj = extract_obj_from_klass_load(&_gvn, val); + const TypeOopPtr* con_type = tcon->isa_klassptr()->as_instance_type(); + if (obj != NULL && (con_type->isa_instptr() || con_type->isa_aryptr())) { + // Found: + // Bool(CmpP(LoadKlass(obj._klass), ConP(Foo.klass)), [eq]) + // or the narrowOop equivalent. + const Type* obj_type = _gvn.type(obj); + const TypeOopPtr* tboth = obj_type->join(con_type)->isa_oopptr(); + if (tboth != NULL && tboth->klass_is_exact() && tboth != obj_type && + tboth->higher_equal(obj_type)) { + // obj has to be of the exact type Foo if the CmpP succeeds. + int obj_in_map = map()->find_edge(obj); + JVMState* jvms = this->jvms(); + if (obj_in_map >= 0 && + (jvms->is_loc(obj_in_map) || jvms->is_stk(obj_in_map))) { + TypeNode* ccast = new (C, 2) CheckCastPPNode(control(), obj, tboth); + const Type* tcc = ccast->as_Type()->type(); + assert(tcc != obj_type && tcc->higher_equal(obj_type), "must improve"); + // Delay transform() call to allow recovery of pre-cast value + // at the control merge. + _gvn.set_type_bottom(ccast); + record_for_igvn(ccast); + // Here's the payoff. + replace_in_map(obj, ccast); + } + } + } + } int val_in_map = map()->find_edge(val); if (val_in_map < 0) return; // replace_in_map would be useless @@ -1265,6 +1330,7 @@ void Parse::adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, // Exclude tests vs float/double 0 as these could be // either +0 or -0. Just because you are equal to +0 // doesn't mean you ARE +0! + // Note, following code also replaces Long and Oop values. if ((!tf || tf->_f != 0.0) && (!td || td->_d != 0.0)) cast = con; // Replace non-constant val by con. diff --git a/hotspot/src/share/vm/opto/phaseX.cpp b/hotspot/src/share/vm/opto/phaseX.cpp index 99b7393b4cf..0fbcf4d09e1 100644 --- a/hotspot/src/share/vm/opto/phaseX.cpp +++ b/hotspot/src/share/vm/opto/phaseX.cpp @@ -757,6 +757,7 @@ void PhaseGVN::dead_loop_check( Node *n ) { //------------------------------PhaseIterGVN----------------------------------- // Initialize hash table to fresh and clean for +VerifyOpto PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ) : PhaseGVN(igvn,dummy), _worklist( ), + _stack(C->unique() >> 1), _delay_transform(false) { } @@ -764,6 +765,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ) : PhaseGVN(i // Initialize with previous PhaseIterGVN info; used by PhaseCCP PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn ) : PhaseGVN(igvn), _worklist( igvn->_worklist ), + _stack( igvn->_stack ), _delay_transform(igvn->_delay_transform) { } @@ -772,6 +774,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn ) : PhaseGVN(igvn), // Initialize with previous PhaseGVN info from Parser PhaseIterGVN::PhaseIterGVN( PhaseGVN *gvn ) : PhaseGVN(gvn), _worklist(*C->for_igvn()), + _stack(C->unique() >> 1), _delay_transform(false) { uint max; @@ -1138,51 +1141,77 @@ const Type* PhaseIterGVN::saturate(const Type* new_type, const Type* old_type, // Kill a globally dead Node. All uses are also globally dead and are // aggressively trimmed. void PhaseIterGVN::remove_globally_dead_node( Node *dead ) { - assert(dead != C->root(), "killing root, eh?"); - if (dead->is_top()) return; - NOT_PRODUCT( set_progress(); ) - // Remove from iterative worklist - _worklist.remove(dead); - if (!dead->is_Con()) { // Don't kill cons but uses - // Remove from hash table - _table.hash_delete( dead ); - // Smash all inputs to 'dead', isolating him completely - for( uint i = 0; i < dead->req(); i++ ) { - Node *in = dead->in(i); - if( in ) { // Points to something? - dead->set_req(i,NULL); // Kill the edge - if (in->outcnt() == 0 && in != C->top()) {// Made input go dead? - remove_dead_node(in); // Recursively remove - } else if (in->outcnt() == 1 && - in->has_special_unique_user()) { - _worklist.push(in->unique_out()); - } else if (in->outcnt() <= 2 && dead->is_Phi()) { - if( in->Opcode() == Op_Region ) - _worklist.push(in); - else if( in->is_Store() ) { - DUIterator_Fast imax, i = in->fast_outs(imax); - _worklist.push(in->fast_out(i)); - i++; - if(in->outcnt() == 2) { - _worklist.push(in->fast_out(i)); - i++; + enum DeleteProgress { + PROCESS_INPUTS, + PROCESS_OUTPUTS + }; + assert(_stack.is_empty(), "not empty"); + _stack.push(dead, PROCESS_INPUTS); + + while (_stack.is_nonempty()) { + dead = _stack.node(); + uint progress_state = _stack.index(); + assert(dead != C->root(), "killing root, eh?"); + assert(!dead->is_top(), "add check for top when pushing"); + NOT_PRODUCT( set_progress(); ) + if (progress_state == PROCESS_INPUTS) { + // After following inputs, continue to outputs + _stack.set_index(PROCESS_OUTPUTS); + // Remove from iterative worklist + _worklist.remove(dead); + if (!dead->is_Con()) { // Don't kill cons but uses + bool recurse = false; + // Remove from hash table + _table.hash_delete( dead ); + // Smash all inputs to 'dead', isolating him completely + for( uint i = 0; i < dead->req(); i++ ) { + Node *in = dead->in(i); + if( in ) { // Points to something? + dead->set_req(i,NULL); // Kill the edge + if (in->outcnt() == 0 && in != C->top()) {// Made input go dead? + _stack.push(in, PROCESS_INPUTS); // Recursively remove + recurse = true; + } else if (in->outcnt() == 1 && + in->has_special_unique_user()) { + _worklist.push(in->unique_out()); + } else if (in->outcnt() <= 2 && dead->is_Phi()) { + if( in->Opcode() == Op_Region ) + _worklist.push(in); + else if( in->is_Store() ) { + DUIterator_Fast imax, i = in->fast_outs(imax); + _worklist.push(in->fast_out(i)); + i++; + if(in->outcnt() == 2) { + _worklist.push(in->fast_out(i)); + i++; + } + assert(!(i < imax), "sanity"); + } } - assert(!(i < imax), "sanity"); } } + + if (dead->is_macro()) { + C->remove_macro_node(dead); + } + + if (recurse) { + continue; + } } } - if (dead->is_macro()) { - C->remove_macro_node(dead); + // Aggressively kill globally dead uses + // (Rather than pushing all the outs at once, we push one at a time, + // plus the parent to resume later, because of the indefinite number + // of edge deletions per loop trip.) + if (dead->outcnt() > 0) { + // Recursively remove + _stack.push(dead->raw_out(0), PROCESS_INPUTS); + } else { + _stack.pop(); } } - // Aggressively kill globally dead uses - // (Cannot use DUIterator_Last because of the indefinite number - // of edge deletions per loop trip.) - while (dead->outcnt() > 0) { - remove_globally_dead_node(dead->raw_out(0)); - } } //------------------------------subsume_node----------------------------------- diff --git a/hotspot/src/share/vm/opto/phaseX.hpp b/hotspot/src/share/vm/opto/phaseX.hpp index ef5bbb55fc3..8a58a9d8927 100644 --- a/hotspot/src/share/vm/opto/phaseX.hpp +++ b/hotspot/src/share/vm/opto/phaseX.hpp @@ -403,6 +403,8 @@ class PhaseIterGVN : public PhaseGVN { // Subsume users of node 'old' into node 'nn' void subsume_node( Node *old, Node *nn ); + Node_Stack _stack; // Stack used to avoid recursion + protected: // Idealize new Node 'n' with respect to its inputs and its value @@ -438,8 +440,8 @@ public: // It is significant only for debugging and profiling. Node* register_new_node_with_optimizer(Node* n, Node* orig = NULL); - // Kill a globally dead Node. It is allowed to have uses which are - // assumed dead and left 'in limbo'. + // Kill a globally dead Node. All uses are also globally dead and are + // aggressively trimmed. void remove_globally_dead_node( Node *dead ); // Kill all inputs to a dead node, recursively making more dead nodes. @@ -460,6 +462,25 @@ public: subsume_node(old, nn); } + // Delayed node rehash: remove a node from the hash table and rehash it during + // next optimizing pass + void rehash_node_delayed(Node* n) { + hash_delete(n); + _worklist.push(n); + } + + // Replace ith edge of "n" with "in" + void replace_input_of(Node* n, int i, Node* in) { + rehash_node_delayed(n); + n->set_req(i, in); + } + + // Delete ith edge of "n" + void delete_input_of(Node* n, int i) { + rehash_node_delayed(n); + n->del_req(i); + } + bool delay_transform() const { return _delay_transform; } void set_delay_transform(bool delay) { diff --git a/hotspot/src/share/vm/opto/postaloc.cpp b/hotspot/src/share/vm/opto/postaloc.cpp index 1a7553bc5cd..912e07704e7 100644 --- a/hotspot/src/share/vm/opto/postaloc.cpp +++ b/hotspot/src/share/vm/opto/postaloc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,13 +27,15 @@ #include "opto/chaitin.hpp" #include "opto/machnode.hpp" -// see if this register kind does not requires two registers -static bool is_single_register(uint x) { -#ifdef _LP64 - return (x != Op_RegD && x != Op_RegL && x != Op_RegP); -#else - return (x != Op_RegD && x != Op_RegL); -#endif +// See if this register (or pairs, or vector) already contains the value. +static bool register_contains_value(Node* val, OptoReg::Name reg, int n_regs, + Node_List& value) { + for (int i = 0; i < n_regs; i++) { + OptoReg::Name nreg = OptoReg::add(reg,-i); + if (value[nreg] != val) + return false; + } + return true; } //---------------------------may_be_copy_of_callee----------------------------- @@ -167,9 +169,11 @@ int PhaseChaitin::use_prior_register( Node *n, uint idx, Node *def, Block *curre const RegMask &use_mask = n->in_RegMask(idx); bool can_use = ( RegMask::can_represent(def_reg) ? (use_mask.Member(def_reg) != 0) : (use_mask.is_AllStack() != 0)); - // Check for a copy to or from a misaligned pair. - can_use = can_use && !use_mask.is_misaligned_Pair() && !def_lrg.mask().is_misaligned_Pair(); - + if (!RegMask::is_vector(def->ideal_reg())) { + // Check for a copy to or from a misaligned pair. + // It is workaround for a sparc with misaligned pairs. + can_use = can_use && !use_mask.is_misaligned_pair() && !def_lrg.mask().is_misaligned_pair(); + } if (!can_use) return 0; @@ -263,18 +267,16 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v val = skip_copies(n->in(k)); } - if( val == x ) return blk_adjust; // No progress? + if (val == x) return blk_adjust; // No progress? - bool single = is_single_register(val->ideal_reg()); + int n_regs = RegMask::num_registers(val->ideal_reg()); uint val_idx = n2lidx(val); OptoReg::Name val_reg = lrgs(val_idx).reg(); // See if it happens to already be in the correct register! // (either Phi's direct register, or the common case of the name // never-clobbered original-def register) - if( value[val_reg] == val && - // Doubles check both halves - ( single || value[val_reg-1] == val ) ) { + if (register_contains_value(val, val_reg, n_regs, value)) { blk_adjust += use_prior_register(n,k,regnd[val_reg],current_block,value,regnd); if( n->in(k) == regnd[val_reg] ) // Success! Quit trying return blk_adjust; @@ -306,9 +308,10 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v } Node *vv = value[reg]; - if( !single ) { // Doubles check for aligned-adjacent pair - if( (reg&1)==0 ) continue; // Wrong half of a pair - if( vv != value[reg-1] ) continue; // Not a complete pair + if (n_regs > 1) { // Doubles and vectors check for aligned-adjacent set + uint last = (n_regs-1); // Looking for the last part of a set + if ((reg&last) != last) continue; // Wrong part of a set + if (!register_contains_value(vv, reg, n_regs, value)) continue; // Different value } if( vv == val || // Got a direct hit? (t && vv && vv->bottom_type() == t && vv->is_Mach() && @@ -526,8 +529,9 @@ void PhaseChaitin::post_allocate_copy_removal() { if( pidx ) { value.map(preg,phi); regnd.map(preg,phi); - OptoReg::Name preg_lo = OptoReg::add(preg,-1); - if( !is_single_register(phi->ideal_reg()) ) { + int n_regs = RegMask::num_registers(phi->ideal_reg()); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name preg_lo = OptoReg::add(preg,-l); value.map(preg_lo,phi); regnd.map(preg_lo,phi); } @@ -568,13 +572,16 @@ void PhaseChaitin::post_allocate_copy_removal() { value.map(ureg,valdef); // record improved reaching-def info regnd.map(ureg, def); // Record other half of doubles - OptoReg::Name ureg_lo = OptoReg::add(ureg,-1); - if( !is_single_register(def->ideal_reg()) && - ( !RegMask::can_represent(ureg_lo) || - lrgs(useidx).mask().Member(ureg_lo) ) && // Nearly always adjacent - !value[ureg_lo] ) { - value.map(ureg_lo,valdef); // record improved reaching-def info - regnd.map(ureg_lo, def); + uint def_ideal_reg = def->ideal_reg(); + int n_regs = RegMask::num_registers(def_ideal_reg); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name ureg_lo = OptoReg::add(ureg,-l); + if (!value[ureg_lo] && + (!RegMask::can_represent(ureg_lo) || + lrgs(useidx).mask().Member(ureg_lo))) { // Nearly always adjacent + value.map(ureg_lo,valdef); // record improved reaching-def info + regnd.map(ureg_lo, def); + } } } } @@ -607,7 +614,8 @@ void PhaseChaitin::post_allocate_copy_removal() { } uint n_ideal_reg = n->ideal_reg(); - if( is_single_register(n_ideal_reg) ) { + int n_regs = RegMask::num_registers(n_ideal_reg); + if (n_regs == 1) { // If Node 'n' does not change the value mapped by the register, // then 'n' is a useless copy. Do not update the register->node // mapping so 'n' will go dead. @@ -625,6 +633,25 @@ void PhaseChaitin::post_allocate_copy_removal() { assert( n->is_Copy(), "" ); j -= replace_and_yank_if_dead(n, nreg, b, value, regnd); } + } else if (RegMask::is_vector(n_ideal_reg)) { + // If Node 'n' does not change the value mapped by the register, + // then 'n' is a useless copy. Do not update the register->node + // mapping so 'n' will go dead. + if (!register_contains_value(val, nreg, n_regs, value)) { + // Update the mapping: record new Node defined by the register + regnd.map(nreg,n); + // Update mapping for defined *value*, which is the defined + // Node after skipping all copies. + value.map(nreg,val); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name nreg_lo = OptoReg::add(nreg,-l); + regnd.map(nreg_lo, n ); + value.map(nreg_lo,val); + } + } else if (n->is_Copy()) { + // Note: vector can't be constant and can't be copy of calee. + j -= replace_and_yank_if_dead(n, nreg, b, value, regnd); + } } else { // If the value occupies a register pair, record same info // in both registers. diff --git a/hotspot/src/share/vm/opto/reg_split.cpp b/hotspot/src/share/vm/opto/reg_split.cpp index 63a11fe8f0f..cae363bea7a 100644 --- a/hotspot/src/share/vm/opto/reg_split.cpp +++ b/hotspot/src/share/vm/opto/reg_split.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,12 +74,13 @@ Node *PhaseChaitin::get_spillcopy_wide( Node *def, Node *use, uint uidx ) { const RegMask *w_i_mask = w_mask->overlap( *i_mask ) ? w_mask : i_mask; const RegMask *w_o_mask; + int num_regs = RegMask::num_registers(ireg); + bool is_vect = RegMask::is_vector(ireg); if( w_mask->overlap( *o_mask ) && // Overlap AND - ((ireg != Op_RegL && ireg != Op_RegD // Single use or aligned -#ifdef _LP64 - && ireg != Op_RegP -#endif - ) || o_mask->is_aligned_Pairs()) ) { + ((num_regs == 1) // Single use or aligned + || is_vect // or vector + || !is_vect && o_mask->is_aligned_pairs()) ) { + assert(!is_vect || o_mask->is_aligned_sets(num_regs), "vectors are aligned"); // Don't come here for mis-aligned doubles w_o_mask = w_mask; } else { // wide ideal mask does not overlap with o_mask @@ -400,15 +401,17 @@ bool PhaseChaitin::is_high_pressure( Block *b, LRG *lrg, uint insidx ) { // CNC - Turned off 7/8/99, causes too much spilling // if( lrg->_is_bound ) return false; + // Use float pressure numbers for vectors. + bool is_float_or_vector = lrg->_is_float || lrg->_is_vector; // Not yet reached the high-pressure cutoff point, so low pressure - uint hrp_idx = lrg->_is_float ? b->_fhrp_index : b->_ihrp_index; + uint hrp_idx = is_float_or_vector ? b->_fhrp_index : b->_ihrp_index; if( insidx < hrp_idx ) return false; // Register pressure for the block as a whole depends on reg class - int block_pres = lrg->_is_float ? b->_freg_pressure : b->_reg_pressure; + int block_pres = is_float_or_vector ? b->_freg_pressure : b->_reg_pressure; // Bound live ranges will split at the binding points first; // Intermediate splits should assume the live range's register set // got "freed up" and that num_regs will become INT_PRESSURE. - int bound_pres = lrg->_is_float ? FLOATPRESSURE : INTPRESSURE; + int bound_pres = is_float_or_vector ? FLOATPRESSURE : INTPRESSURE; // Effective register pressure limit. int lrg_pres = (lrg->get_invalid_mask_size() > lrg->num_regs()) ? (lrg->get_invalid_mask_size() >> (lrg->num_regs()-1)) : bound_pres; @@ -794,12 +797,15 @@ uint PhaseChaitin::Split( uint maxlrg ) { if( i < n->req() ) break; insert_point--; } + uint orig_eidx = b->end_idx(); maxlrg = split_DEF( n1, b, insert_point, maxlrg, Reachblock, debug_defs, splits, slidx); // If it wasn't split bail if (!maxlrg) { return 0; } - insidx++; + // Spill of NULL check mem op goes into the following block. + if (b->end_idx() > orig_eidx) + insidx++; } // This is a new DEF, so update UP UPblock[slidx] = false; @@ -960,7 +966,7 @@ uint PhaseChaitin::Split( uint maxlrg ) { // Grab register mask info const RegMask &dmask = def->out_RegMask(); const RegMask &umask = n->in_RegMask(inpidx); - + bool is_vect = RegMask::is_vector(def->ideal_reg()); assert(inpidx < oopoff, "cannot use-split oop map info"); bool dup = UPblock[slidx]; @@ -972,7 +978,7 @@ uint PhaseChaitin::Split( uint maxlrg ) { if( !umask.is_AllStack() && (int)umask.Size() <= lrgs(useidx).num_regs() && (!def->rematerialize() || - umask.is_misaligned_Pair())) { + !is_vect && umask.is_misaligned_pair())) { // These need a Split regardless of overlap or pressure // SPLIT - NO DEF - NO CISC SPILL maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx); @@ -1123,10 +1129,12 @@ uint PhaseChaitin::Split( uint maxlrg ) { // Grab UP info for DEF const RegMask &dmask = n->out_RegMask(); bool defup = dmask.is_UP(); + int ireg = n->ideal_reg(); + bool is_vect = RegMask::is_vector(ireg); // Only split at Def if this is a HRP block or bound (and spilled once) if( !n->rematerialize() && - (((dmask.is_bound1() || dmask.is_bound2() || dmask.is_misaligned_Pair()) && - (deflrg._direct_conflict || deflrg._must_spill)) || + (((dmask.is_bound(ireg) || !is_vect && dmask.is_misaligned_pair()) && + (deflrg._direct_conflict || deflrg._must_spill)) || // Check for LRG being up in a register and we are inside a high // pressure area. Spill it down immediately. (defup && is_high_pressure(b,&deflrg,insidx))) ) { diff --git a/hotspot/src/share/vm/opto/regmask.cpp b/hotspot/src/share/vm/opto/regmask.cpp index ce220f01be9..59413388ca7 100644 --- a/hotspot/src/share/vm/opto/regmask.cpp +++ b/hotspot/src/share/vm/opto/regmask.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -129,11 +129,34 @@ const RegMask RegMask::Empty( 0 ); +//============================================================================= +bool RegMask::is_vector(uint ireg) { + return (ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY); +} + +int RegMask::num_registers(uint ireg) { + switch(ireg) { + case Op_VecY: + return 8; + case Op_VecX: + return 4; + case Op_VecD: + case Op_RegD: + case Op_RegL: +#ifdef _LP64 + case Op_RegP: +#endif + return 2; + } + // Op_VecS and the rest ideal registers. + return 1; +} + //------------------------------find_first_pair-------------------------------- // Find the lowest-numbered register pair in the mask. Return the // HIGHEST register number in the pair, or BAD if no pairs. OptoReg::Name RegMask::find_first_pair() const { - VerifyPairs(); + verify_pairs(); for( int i = 0; i < RM_SIZE; i++ ) { if( _A[i] ) { // Found some bits int bit = _A[i] & -_A[i]; // Extract low bit @@ -146,30 +169,30 @@ OptoReg::Name RegMask::find_first_pair() const { //------------------------------ClearToPairs----------------------------------- // Clear out partial bits; leave only bit pairs -void RegMask::ClearToPairs() { +void RegMask::clear_to_pairs() { for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; bits &= ((bits & 0x55555555)<<1); // 1 hi-bit set for each pair bits |= (bits>>1); // Smear 1 hi-bit into a pair _A[i] = bits; } - VerifyPairs(); + verify_pairs(); } //------------------------------SmearToPairs----------------------------------- // Smear out partial bits; leave only bit pairs -void RegMask::SmearToPairs() { +void RegMask::smear_to_pairs() { for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; bits |= ((bits & 0x55555555)<<1); // Smear lo bit hi per pair bits |= ((bits & 0xAAAAAAAA)>>1); // Smear hi bit lo per pair _A[i] = bits; } - VerifyPairs(); + verify_pairs(); } //------------------------------is_aligned_pairs------------------------------- -bool RegMask::is_aligned_Pairs() const { +bool RegMask::is_aligned_pairs() const { // Assert that the register mask contains only bit pairs. for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; @@ -204,7 +227,7 @@ int RegMask::is_bound1() const { //------------------------------is_bound2-------------------------------------- // Return TRUE if the mask contains an adjacent pair of bits and no other bits. -int RegMask::is_bound2() const { +int RegMask::is_bound_pair() const { if( is_AllStack() ) return false; int bit = -1; // Set to hold the one bit allowed @@ -226,6 +249,132 @@ int RegMask::is_bound2() const { return true; } +static int low_bits[3] = { 0x55555555, 0x11111111, 0x01010101 }; +//------------------------------find_first_set--------------------------------- +// Find the lowest-numbered register set in the mask. Return the +// HIGHEST register number in the set, or BAD if no sets. +// Works also for size 1. +OptoReg::Name RegMask::find_first_set(int size) const { + verify_sets(size); + for (int i = 0; i < RM_SIZE; i++) { + if (_A[i]) { // Found some bits + int bit = _A[i] & -_A[i]; // Extract low bit + // Convert to bit number, return hi bit in pair + return OptoReg::Name((i<<_LogWordBits)+find_lowest_bit(bit)+(size-1)); + } + } + return OptoReg::Bad; +} + +//------------------------------clear_to_sets---------------------------------- +// Clear out partial bits; leave only aligned adjacent bit pairs +void RegMask::clear_to_sets(int size) { + if (size == 1) return; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + int sets = (bits & low_bits_mask); + for (int j = 1; j < size; j++) { + sets = (bits & (sets<<1)); // filter bits which produce whole sets + } + sets |= (sets>>1); // Smear 1 hi-bit into a set + if (size > 2) { + sets |= (sets>>2); // Smear 2 hi-bits into a set + if (size > 4) { + sets |= (sets>>4); // Smear 4 hi-bits into a set + } + } + _A[i] = sets; + } + verify_sets(size); +} + +//------------------------------smear_to_sets---------------------------------- +// Smear out partial bits to aligned adjacent bit sets +void RegMask::smear_to_sets(int size) { + if (size == 1) return; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + int sets = 0; + for (int j = 0; j < size; j++) { + sets |= (bits & low_bits_mask); // collect partial bits + bits = bits>>1; + } + sets |= (sets<<1); // Smear 1 lo-bit into a set + if (size > 2) { + sets |= (sets<<2); // Smear 2 lo-bits into a set + if (size > 4) { + sets |= (sets<<4); // Smear 4 lo-bits into a set + } + } + _A[i] = sets; + } + verify_sets(size); +} + +//------------------------------is_aligned_set-------------------------------- +bool RegMask::is_aligned_sets(int size) const { + if (size == 1) return true; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + // Assert that the register mask contains only bit sets. + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + while (bits) { // Check bits for pairing + int bit = bits & -bits; // Extract low bit + // Low bit is not odd means its mis-aligned. + if ((bit & low_bits_mask) == 0) return false; + // Do extra work since (bit << size) may overflow. + int hi_bit = bit << (size-1); // high bit + int set = hi_bit + ((hi_bit-1) & ~(bit-1)); + // Check for aligned adjacent bits in this set + if ((bits & set) != set) return false; + bits -= set; // Remove this set + } + } + return true; +} + +//------------------------------is_bound_set----------------------------------- +// Return TRUE if the mask contains one adjacent set of bits and no other bits. +// Works also for size 1. +int RegMask::is_bound_set(int size) const { + if( is_AllStack() ) return false; + assert(1 <= size && size <= 8, "update low bits table"); + int bit = -1; // Set to hold the one bit allowed + for (int i = 0; i < RM_SIZE; i++) { + if (_A[i] ) { // Found some bits + if (bit != -1) + return false; // Already had bits, so fail + bit = _A[i] & -_A[i]; // Extract 1 bit from mask + int hi_bit = bit << (size-1); // high bit + if (hi_bit != 0) { // Bit set stays in same word? + int set = hi_bit + ((hi_bit-1) & ~(bit-1)); + if (set != _A[i]) + return false; // Require adjacent bit set and no more bits + } else { // Else its a split-set case + if (((-1) & ~(bit-1)) != _A[i]) + return false; // Found many bits, so fail + i++; // Skip iteration forward and check high part + assert(size <= 8, "update next code"); + // The lower 24 bits should be 0 since it is split case and size <= 8. + int set = bit>>24; + set = set & -set; // Remove sign extension. + set = (((set << size) - 1) >> 8); + if (_A[i] != set) return false; // Require 1 lo bit in next word + } + } + } + // True for both the empty mask and for a bit set + return true; +} + //------------------------------is_UP------------------------------------------ // UP means register only, Register plus stack, or stack only is DOWN bool RegMask::is_UP() const { diff --git a/hotspot/src/share/vm/opto/regmask.hpp b/hotspot/src/share/vm/opto/regmask.hpp index e50ff84ca16..e4c31dcefb2 100644 --- a/hotspot/src/share/vm/opto/regmask.hpp +++ b/hotspot/src/share/vm/opto/regmask.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -113,7 +113,11 @@ public: // the controlling alignment constraint. Note that this alignment // requirement is internal to the allocator, and independent of any // particular platform. - enum { SlotsPerLong = 2 }; + enum { SlotsPerLong = 2, + SlotsPerVecS = 1, + SlotsPerVecD = 2, + SlotsPerVecX = 4, + SlotsPerVecY = 8 }; // A constructor only used by the ADLC output. All mask fields are filled // in directly. Calls to this look something like RM(1,2,3,4); @@ -193,20 +197,53 @@ public: OptoReg::Name find_first_pair() const; // Clear out partial bits; leave only aligned adjacent bit pairs. - void ClearToPairs(); + void clear_to_pairs(); // Smear out partial bits; leave only aligned adjacent bit pairs. - void SmearToPairs(); + void smear_to_pairs(); // Verify that the mask contains only aligned adjacent bit pairs - void VerifyPairs() const { assert( is_aligned_Pairs(), "mask is not aligned, adjacent pairs" ); } + void verify_pairs() const { assert( is_aligned_pairs(), "mask is not aligned, adjacent pairs" ); } // Test that the mask contains only aligned adjacent bit pairs - bool is_aligned_Pairs() const; + bool is_aligned_pairs() const; // mask is a pair of misaligned registers - bool is_misaligned_Pair() const { return Size()==2 && !is_aligned_Pairs();} + bool is_misaligned_pair() const { return Size()==2 && !is_aligned_pairs(); } // Test for single register int is_bound1() const; // Test for a single adjacent pair - int is_bound2() const; + int is_bound_pair() const; + // Test for a single adjacent set of ideal register's size. + int is_bound(uint ireg) const { + if (is_vector(ireg)) { + if (is_bound_set(num_registers(ireg))) + return true; + } else if (is_bound1() || is_bound_pair()) { + return true; + } + return false; + } + + // Find the lowest-numbered register set in the mask. Return the + // HIGHEST register number in the set, or BAD if no sets. + // Assert that the mask contains only bit sets. + OptoReg::Name find_first_set(int size) const; + + // Clear out partial bits; leave only aligned adjacent bit sets of size. + void clear_to_sets(int size); + // Smear out partial bits to aligned adjacent bit sets. + void smear_to_sets(int size); + // Verify that the mask contains only aligned adjacent bit sets + void verify_sets(int size) const { assert(is_aligned_sets(size), "mask is not aligned, adjacent sets"); } + // Test that the mask contains only aligned adjacent bit sets + bool is_aligned_sets(int size) const; + + // mask is a set of misaligned registers + bool is_misaligned_set(int size) const { return (int)Size()==size && !is_aligned_sets(size);} + + // Test for a single adjacent set + int is_bound_set(int size) const; + + static bool is_vector(uint ireg); + static int num_registers(uint ireg); // Fast overlap test. Non-zero if any registers in common. int overlap( const RegMask &rm ) const { @@ -280,9 +317,15 @@ public: static bool can_represent(OptoReg::Name reg) { // NOTE: -1 in computation reflects the usage of the last - // bit of the regmask as an infinite stack flag. + // bit of the regmask as an infinite stack flag and + // -7 is to keep mask aligned for largest value (VecY). return (int)reg < (int)(CHUNK_SIZE-1); } + static bool can_represent_arg(OptoReg::Name reg) { + // NOTE: -SlotsPerVecY in computation reflects the need + // to keep mask aligned for largest value (VecY). + return (int)reg < (int)(CHUNK_SIZE-SlotsPerVecY); + } }; // Do not use this constant directly in client code! diff --git a/hotspot/src/share/vm/opto/runtime.hpp b/hotspot/src/share/vm/opto/runtime.hpp index 11b5434a54d..6037d19f2bc 100644 --- a/hotspot/src/share/vm/opto/runtime.hpp +++ b/hotspot/src/share/vm/opto/runtime.hpp @@ -55,7 +55,7 @@ class CallInfo; // code in various ways. Currently they are used by the lock coarsening code // -class NamedCounter : public CHeapObj { +class NamedCounter : public CHeapObj { public: enum CounterTag { NoTag, diff --git a/hotspot/src/share/vm/opto/split_if.cpp b/hotspot/src/share/vm/opto/split_if.cpp index 55de3d70ef8..bd5eec94215 100644 --- a/hotspot/src/share/vm/opto/split_if.cpp +++ b/hotspot/src/share/vm/opto/split_if.cpp @@ -137,9 +137,7 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) { Node *iff_ctrl = iff->is_If() ? iff->in(0) : get_ctrl(iff); Node *x = bol->clone(); register_new_node(x, iff_ctrl); - _igvn.hash_delete(iff); - iff->set_req(1, x); - _igvn._worklist.push(iff); + _igvn.replace_input_of(iff, 1, x); } _igvn.remove_dead_node( bol ); --i; @@ -151,9 +149,7 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) { assert( bol->in(1) == n, "" ); Node *x = n->clone(); register_new_node(x, get_ctrl(bol)); - _igvn.hash_delete(bol); - bol->set_req(1, x); - _igvn._worklist.push(bol); + _igvn.replace_input_of(bol, 1, x); } _igvn.remove_dead_node( n ); @@ -387,9 +383,7 @@ void PhaseIdealLoop::handle_use( Node *use, Node *def, small_cache *cache, Node if( use->in(i) == def ) break; assert( i < use->req(), "def should be among use's inputs" ); - _igvn.hash_delete(use); - use->set_req(i, new_def); - _igvn._worklist.push(use); + _igvn.replace_input_of(use, i, new_def); } //------------------------------do_split_if------------------------------------ diff --git a/hotspot/src/share/vm/opto/stringopts.cpp b/hotspot/src/share/vm/opto/stringopts.cpp index 496e7a883d1..803b1389932 100644 --- a/hotspot/src/share/vm/opto/stringopts.cpp +++ b/hotspot/src/share/vm/opto/stringopts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,6 +112,7 @@ class StringConcat : public ResourceObj { _arguments->ins_req(0, value); _mode.insert_before(0, mode); } + void push_string(Node* value) { push(value, StringMode); } @@ -125,9 +126,56 @@ class StringConcat : public ResourceObj { push(value, CharMode); } + static bool is_SB_toString(Node* call) { + if (call->is_CallStaticJava()) { + CallStaticJavaNode* csj = call->as_CallStaticJava(); + ciMethod* m = csj->method(); + if (m != NULL && + (m->intrinsic_id() == vmIntrinsics::_StringBuilder_toString || + m->intrinsic_id() == vmIntrinsics::_StringBuffer_toString)) { + return true; + } + } + return false; + } + + static Node* skip_string_null_check(Node* value) { + // Look for a diamond shaped Null check of toString() result + // (could be code from String.valueOf()): + // (Proj == NULL) ? "null":"CastPP(Proj)#NotNULL + if (value->is_Phi()) { + int true_path = value->as_Phi()->is_diamond_phi(); + if (true_path != 0) { + // phi->region->if_proj->ifnode->bool + BoolNode* b = value->in(0)->in(1)->in(0)->in(1)->as_Bool(); + Node* cmp = b->in(1); + Node* v1 = cmp->in(1); + Node* v2 = cmp->in(2); + // Null check of the return of toString which can simply be skipped. + if (b->_test._test == BoolTest::ne && + v2->bottom_type() == TypePtr::NULL_PTR && + value->in(true_path)->Opcode() == Op_CastPP && + value->in(true_path)->in(1) == v1 && + v1->is_Proj() && is_SB_toString(v1->in(0))) { + return v1; + } + } + } + return value; + } + Node* argument(int i) { return _arguments->in(i); } + Node* argument_uncast(int i) { + Node* arg = argument(i); + int amode = mode(i); + if (amode == StringConcat::StringMode || + amode == StringConcat::StringNullCheckMode) { + arg = skip_string_null_check(arg); + } + return arg; + } void set_argument(int i, Node* value) { _arguments->set_req(i, value); } @@ -206,9 +254,11 @@ class StringConcat : public ResourceObj { void StringConcat::eliminate_unneeded_control() { - eliminate_initialize(begin()->initialization()); for (uint i = 0; i < _control.size(); i++) { Node* n = _control.at(i); + if (n->is_Allocate()) { + eliminate_initialize(n->as_Allocate()->initialization()); + } if (n->is_Call()) { if (n != _end) { eliminate_call(n->as_Call()); @@ -239,14 +289,15 @@ StringConcat* StringConcat::merge(StringConcat* other, Node* arg) { assert(result->_control.contains(other->_end), "what?"); assert(result->_control.contains(_begin), "what?"); for (int x = 0; x < num_arguments(); x++) { - if (argument(x) == arg) { + Node* argx = argument_uncast(x); + if (argx == arg) { // replace the toString result with the all the arguments that // made up the other StringConcat for (int y = 0; y < other->num_arguments(); y++) { result->append(other->argument(y), other->mode(y)); } } else { - result->append(argument(x), mode(x)); + result->append(argx, mode(x)); } } result->set_allocation(other->_begin); @@ -327,14 +378,9 @@ Node_List PhaseStringOpts::collect_toString_calls() { while (worklist.size() > 0) { Node* ctrl = worklist.pop(); - if (ctrl->is_CallStaticJava()) { + if (StringConcat::is_SB_toString(ctrl)) { CallStaticJavaNode* csj = ctrl->as_CallStaticJava(); - ciMethod* m = csj->method(); - if (m != NULL && - (m->intrinsic_id() == vmIntrinsics::_StringBuffer_toString || - m->intrinsic_id() == vmIntrinsics::_StringBuilder_toString)) { - string_calls.push(csj); - } + string_calls.push(csj); } if (ctrl->in(0) != NULL && !_visited.test_set(ctrl->in(0)->_idx)) { worklist.push(ctrl->in(0)); @@ -487,7 +533,17 @@ StringConcat* PhaseStringOpts::build_candidate(CallStaticJavaNode* call) { if (arg->is_Proj() && arg->in(0)->is_CallStaticJava()) { CallStaticJavaNode* csj = arg->in(0)->as_CallStaticJava(); if (csj->method() != NULL && - csj->method()->intrinsic_id() == vmIntrinsics::_Integer_toString) { + csj->method()->intrinsic_id() == vmIntrinsics::_Integer_toString && + arg->outcnt() == 1) { + // _control is the list of StringBuilder calls nodes which + // will be replaced by new String code after this optimization. + // Integer::toString() call is not part of StringBuilder calls + // chain. It could be eliminated only if its result is used + // only by this SB calls chain. + // Another limitation: it should be used only once because + // it is unknown that it is used only by this SB calls chain + // until all related SB calls nodes are collected. + assert(arg->unique_out() == cnode, "sanity"); sc->add_control(csj); sc->push_int(csj->in(TypeFunc::Parms)); continue; @@ -528,16 +584,6 @@ PhaseStringOpts::PhaseStringOpts(PhaseGVN* gvn, Unique_Node_List*): } // Collect the types needed to talk about the various slices of memory - const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(), - false, NULL, 0); - - const TypePtr* value_field_type = string_type->add_offset(java_lang_String::value_offset_in_bytes()); - const TypePtr* offset_field_type = string_type->add_offset(java_lang_String::offset_offset_in_bytes()); - const TypePtr* count_field_type = string_type->add_offset(java_lang_String::count_offset_in_bytes()); - - value_field_idx = C->get_alias_index(value_field_type); - count_field_idx = C->get_alias_index(count_field_type); - offset_field_idx = C->get_alias_index(offset_field_type); char_adr_idx = C->get_alias_index(TypeAryPtr::CHARS); // For each locally allocated StringBuffer see if the usages can be @@ -560,44 +606,40 @@ PhaseStringOpts::PhaseStringOpts(PhaseGVN* gvn, Unique_Node_List*): for (int c = 0; c < concats.length(); c++) { StringConcat* sc = concats.at(c); for (int i = 0; i < sc->num_arguments(); i++) { - Node* arg = sc->argument(i); - if (arg->is_Proj() && arg->in(0)->is_CallStaticJava()) { + Node* arg = sc->argument_uncast(i); + if (arg->is_Proj() && StringConcat::is_SB_toString(arg->in(0))) { CallStaticJavaNode* csj = arg->in(0)->as_CallStaticJava(); - if (csj->method() != NULL && - (csj->method()->intrinsic_id() == vmIntrinsics::_StringBuilder_toString || - csj->method()->intrinsic_id() == vmIntrinsics::_StringBuffer_toString)) { - for (int o = 0; o < concats.length(); o++) { - if (c == o) continue; - StringConcat* other = concats.at(o); - if (other->end() == csj) { + for (int o = 0; o < concats.length(); o++) { + if (c == o) continue; + StringConcat* other = concats.at(o); + if (other->end() == csj) { #ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("considering stacked concats"); - } + if (PrintOptimizeStringConcat) { + tty->print_cr("considering stacked concats"); + } #endif - StringConcat* merged = sc->merge(other, arg); - if (merged->validate_control_flow()) { + StringConcat* merged = sc->merge(other, arg); + if (merged->validate_control_flow()) { #ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("stacking would succeed"); - } -#endif - if (c < o) { - concats.remove_at(o); - concats.at_put(c, merged); - } else { - concats.remove_at(c); - concats.at_put(o, merged); - } - goto restart; - } else { -#ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("stacking would fail"); - } -#endif + if (PrintOptimizeStringConcat) { + tty->print_cr("stacking would succeed"); } +#endif + if (c < o) { + concats.remove_at(o); + concats.at_put(c, merged); + } else { + concats.remove_at(c); + concats.at_put(o, merged); + } + goto restart; + } else { +#ifndef PRODUCT + if (PrintOptimizeStringConcat) { + tty->print_cr("stacking would fail"); + } +#endif } } } @@ -1174,18 +1216,9 @@ void PhaseStringOpts::int_getChars(GraphKit& kit, Node* arg, Node* char_array, N Node* PhaseStringOpts::copy_string(GraphKit& kit, Node* str, Node* char_array, Node* start) { Node* string = str; - Node* offset = kit.make_load(kit.control(), - kit.basic_plus_adr(string, string, java_lang_String::offset_offset_in_bytes()), - TypeInt::INT, T_INT, offset_field_idx); - Node* count = kit.make_load(kit.control(), - kit.basic_plus_adr(string, string, java_lang_String::count_offset_in_bytes()), - TypeInt::INT, T_INT, count_field_idx); - const TypeAryPtr* value_type = TypeAryPtr::make(TypePtr::NotNull, - TypeAry::make(TypeInt::CHAR,TypeInt::POS), - ciTypeArrayKlass::make(T_CHAR), true, 0); - Node* value = kit.make_load(kit.control(), - kit.basic_plus_adr(string, string, java_lang_String::value_offset_in_bytes()), - value_type, T_OBJECT, value_field_idx); + Node* offset = kit.load_String_offset(kit.control(), string); + Node* count = kit.load_String_length(kit.control(), string); + Node* value = kit.load_String_value (kit.control(), string); // copy the contents if (offset->is_Con() && count->is_Con() && value->is_Con() && count->get_int() < unroll_string_copy_length) { @@ -1342,10 +1375,9 @@ void PhaseStringOpts::replace_string_concat(StringConcat* sc) { arg = phi; sc->set_argument(argi, arg); } - // Node* offset = kit.make_load(NULL, kit.basic_plus_adr(arg, arg, offset_offset), - // TypeInt::INT, T_INT, offset_field_idx); - Node* count = kit.make_load(kit.control(), kit.basic_plus_adr(arg, arg, java_lang_String::count_offset_in_bytes()), - TypeInt::INT, T_INT, count_field_idx); + + Node* count = kit.load_String_length(kit.control(), arg); + length = __ AddI(length, count); string_sizes->init_req(argi, NULL); break; @@ -1436,12 +1468,11 @@ void PhaseStringOpts::replace_string_concat(StringConcat* sc) { } // Intialize the string - kit.store_to_memory(kit.control(), kit.basic_plus_adr(result, java_lang_String::offset_offset_in_bytes()), - __ intcon(0), T_INT, offset_field_idx); - kit.store_to_memory(kit.control(), kit.basic_plus_adr(result, java_lang_String::count_offset_in_bytes()), - length, T_INT, count_field_idx); - kit.store_to_memory(kit.control(), kit.basic_plus_adr(result, java_lang_String::value_offset_in_bytes()), - char_array, T_OBJECT, value_field_idx); + if (java_lang_String::has_offset_field()) { + kit.store_String_offset(kit.control(), result, __ intcon(0)); + kit.store_String_length(kit.control(), result, length); + } + kit.store_String_value(kit.control(), result, char_array); // hook up the outgoing control and result kit.replace_call(sc->end(), result); diff --git a/hotspot/src/share/vm/opto/stringopts.hpp b/hotspot/src/share/vm/opto/stringopts.hpp index 1ffe6c3092d..0fb1ed70f64 100644 --- a/hotspot/src/share/vm/opto/stringopts.hpp +++ b/hotspot/src/share/vm/opto/stringopts.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,9 +41,6 @@ class PhaseStringOpts : public Phase { // Memory slices needed for code gen int char_adr_idx; - int value_field_idx; - int count_field_idx; - int offset_field_idx; // Integer.sizeTable - used for int to String conversion ciField* size_table_field; diff --git a/hotspot/src/share/vm/opto/subnode.cpp b/hotspot/src/share/vm/opto/subnode.cpp index 51212cff57f..02a6a64953c 100644 --- a/hotspot/src/share/vm/opto/subnode.cpp +++ b/hotspot/src/share/vm/opto/subnode.cpp @@ -554,9 +554,7 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const { return TypeInt::CC_GE; } else if (hi0 <= lo1) { // Check for special case in Hashtable::get. (See below.) - if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && - in(1)->Opcode() == Op_ModI && - in(1)->in(2) == in(2) ) + if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check()) return TypeInt::CC_LT; return TypeInt::CC_LE; } @@ -567,13 +565,17 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const { // to be positive. // (This is a gross hack, since the sub method never // looks at the structure of the node in any other case.) - if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && - in(1)->Opcode() == Op_ModI && - in(1)->in(2)->uncast() == in(2)->uncast()) + if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check()) return TypeInt::CC_LT; return TypeInt::CC; // else use worst case results } +bool CmpUNode::is_index_range_check() const { + // Check for the "(X ModI Y) CmpU Y" shape + return (in(1)->Opcode() == Op_ModI && + in(1)->in(2)->eqv_uncast(in(2))); +} + //------------------------------Idealize--------------------------------------- Node *CmpINode::Ideal( PhaseGVN *phase, bool can_reshape ) { if (phase->type(in(2))->higher_equal(TypeInt::ZERO)) { @@ -702,12 +704,84 @@ const Type *CmpPNode::sub( const Type *t1, const Type *t2 ) const { return TypeInt::CC; } +static inline Node* isa_java_mirror_load(PhaseGVN* phase, Node* n) { + // Return the klass node for + // LoadP(AddP(foo:Klass, #java_mirror)) + // or NULL if not matching. + if (n->Opcode() != Op_LoadP) return NULL; + + const TypeInstPtr* tp = phase->type(n)->isa_instptr(); + if (!tp || tp->klass() != phase->C->env()->Class_klass()) return NULL; + + Node* adr = n->in(MemNode::Address); + intptr_t off = 0; + Node* k = AddPNode::Ideal_base_and_offset(adr, phase, off); + if (k == NULL) return NULL; + const TypeKlassPtr* tkp = phase->type(k)->isa_klassptr(); + if (!tkp || off != in_bytes(Klass::java_mirror_offset())) return NULL; + + // We've found the klass node of a Java mirror load. + return k; +} + +static inline Node* isa_const_java_mirror(PhaseGVN* phase, Node* n) { + // for ConP(Foo.class) return ConP(Foo.klass) + // otherwise return NULL + if (!n->is_Con()) return NULL; + + const TypeInstPtr* tp = phase->type(n)->isa_instptr(); + if (!tp) return NULL; + + ciType* mirror_type = tp->java_mirror_type(); + // TypeInstPtr::java_mirror_type() returns non-NULL for compile- + // time Class constants only. + if (!mirror_type) return NULL; + + // x.getClass() == int.class can never be true (for all primitive types) + // Return a ConP(NULL) node for this case. + if (mirror_type->is_classless()) { + return phase->makecon(TypePtr::NULL_PTR); + } + + // return the ConP(Foo.klass) + assert(mirror_type->is_klass(), "mirror_type should represent a klassOop"); + return phase->makecon(TypeKlassPtr::make(mirror_type->as_klass())); +} + //------------------------------Ideal------------------------------------------ -// Check for the case of comparing an unknown klass loaded from the primary +// Normalize comparisons between Java mirror loads to compare the klass instead. +// +// Also check for the case of comparing an unknown klass loaded from the primary // super-type array vs a known klass with no subtypes. This amounts to // checking to see an unknown klass subtypes a known klass with no subtypes; // this only happens on an exact match. We can shorten this test by 1 load. Node *CmpPNode::Ideal( PhaseGVN *phase, bool can_reshape ) { + // Normalize comparisons between Java mirrors into comparisons of the low- + // level klass, where a dependent load could be shortened. + // + // The new pattern has a nice effect of matching the same pattern used in the + // fast path of instanceof/checkcast/Class.isInstance(), which allows + // redundant exact type check be optimized away by GVN. + // For example, in + // if (x.getClass() == Foo.class) { + // Foo foo = (Foo) x; + // // ... use a ... + // } + // a CmpPNode could be shared between if_acmpne and checkcast + { + Node* k1 = isa_java_mirror_load(phase, in(1)); + Node* k2 = isa_java_mirror_load(phase, in(2)); + Node* conk2 = isa_const_java_mirror(phase, in(2)); + + if (k1 && (k2 || conk2)) { + Node* lhs = k1; + Node* rhs = (k2 != NULL) ? k2 : conk2; + this->set_req(1, lhs); + this->set_req(2, rhs); + return this; + } + } + // Constant pointer on right? const TypeKlassPtr* t2 = phase->type(in(2))->isa_klassptr(); if (t2 == NULL || !t2->klass_is_exact()) @@ -1314,7 +1388,5 @@ const Type *PowDNode::Value( PhaseTransform *phase ) const { if( t2->base() != Type::DoubleCon ) return Type::DOUBLE; double d1 = t1->getd(); double d2 = t2->getd(); - if( d1 < 0.0 ) return Type::DOUBLE; - if( d2 < 0.0 ) return Type::DOUBLE; return TypeD::make( StubRoutines::intrinsic_pow( d1, d2 ) ); } diff --git a/hotspot/src/share/vm/opto/subnode.hpp b/hotspot/src/share/vm/opto/subnode.hpp index bacd1065a0c..2b33e90f9e5 100644 --- a/hotspot/src/share/vm/opto/subnode.hpp +++ b/hotspot/src/share/vm/opto/subnode.hpp @@ -158,6 +158,7 @@ public: CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} virtual int Opcode() const; virtual const Type *sub( const Type *, const Type * ) const; + bool is_index_range_check() const; }; //------------------------------CmpPNode--------------------------------------- diff --git a/hotspot/src/share/vm/opto/superword.cpp b/hotspot/src/share/vm/opto/superword.cpp index 28c4cfe4153..cfeb47e507b 100644 --- a/hotspot/src/share/vm/opto/superword.cpp +++ b/hotspot/src/share/vm/opto/superword.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,6 +67,10 @@ SuperWord::SuperWord(PhaseIdealLoop* phase) : //------------------------------transform_loop--------------------------- void SuperWord::transform_loop(IdealLoopTree* lpt) { + assert(UseSuperWord, "should be"); + // Do vectors exist on this architecture? + if (Matcher::vector_width_in_bytes(T_BYTE) < 2) return; + assert(lpt->_head->is_CountedLoop(), "must be"); CountedLoopNode *cl = lpt->_head->as_CountedLoop(); @@ -89,15 +93,12 @@ void SuperWord::transform_loop(IdealLoopTree* lpt) { Node *pre_opaq1 = pre_end->limit(); if (pre_opaq1->Opcode() != Op_Opaque1) return; - // Do vectors exist on this architecture? - if (vector_width_in_bytes() == 0) return; - init(); // initialize data structures set_lpt(lpt); set_lp(cl); - // For now, define one block which is the entire loop body + // For now, define one block which is the entire loop body set_bb(cl); assert(_packset.length() == 0, "packset must be empty"); @@ -177,7 +178,7 @@ void SuperWord::find_adjacent_refs() { Node_List memops; for (int i = 0; i < _block.length(); i++) { Node* n = _block.at(i); - if (n->is_Mem() && in_bb(n) && + if (n->is_Mem() && !n->is_LoadStore() && in_bb(n) && is_java_primitive(n->as_Mem()->memory_type())) { int align = memory_alignment(n->as_Mem(), 0); if (align != bottom_align) { @@ -185,54 +186,141 @@ void SuperWord::find_adjacent_refs() { } } } - if (memops.size() == 0) return; - // Find a memory reference to align to. The pre-loop trip count - // is modified to align this reference to a vector-aligned address - find_align_to_ref(memops); - if (align_to_ref() == NULL) return; + Node_List align_to_refs; + int best_iv_adjustment = 0; + MemNode* best_align_to_mem_ref = NULL; - SWPointer align_to_ref_p(align_to_ref(), this); - int offset = align_to_ref_p.offset_in_bytes(); - int scale = align_to_ref_p.scale_in_bytes(); - int vw = vector_width_in_bytes(); - int stride_sign = (scale * iv_stride()) > 0 ? 1 : -1; - int iv_adjustment = (stride_sign * vw - (offset % vw)) % vw; + while (memops.size() != 0) { + // Find a memory reference to align to. + MemNode* mem_ref = find_align_to_ref(memops); + if (mem_ref == NULL) break; + align_to_refs.push(mem_ref); + int iv_adjustment = get_iv_adjustment(mem_ref); -#ifndef PRODUCT - if (TraceSuperWord) - tty->print_cr("\noffset = %d iv_adjustment = %d elt_align = %d scale = %d iv_stride = %d", - offset, iv_adjustment, align_to_ref_p.memory_size(), align_to_ref_p.scale_in_bytes(), iv_stride()); -#endif - - // Set alignment relative to "align_to_ref" - for (int i = memops.size() - 1; i >= 0; i--) { - MemNode* s = memops.at(i)->as_Mem(); - SWPointer p2(s, this); - if (p2.comparable(align_to_ref_p)) { - int align = memory_alignment(s, iv_adjustment); - set_alignment(s, align); - } else { - memops.remove(i); + if (best_align_to_mem_ref == NULL) { + // Set memory reference which is the best from all memory operations + // to be used for alignment. The pre-loop trip count is modified to align + // this reference to a vector-aligned address. + best_align_to_mem_ref = mem_ref; + best_iv_adjustment = iv_adjustment; } - } - // Create initial pack pairs of memory operations - for (uint i = 0; i < memops.size(); i++) { - Node* s1 = memops.at(i); - for (uint j = 0; j < memops.size(); j++) { - Node* s2 = memops.at(j); - if (s1 != s2 && are_adjacent_refs(s1, s2)) { - int align = alignment(s1); - if (stmts_can_pack(s1, s2, align)) { - Node_List* pair = new Node_List(); - pair->push(s1); - pair->push(s2); - _packset.append(pair); + SWPointer align_to_ref_p(mem_ref, this); + // Set alignment relative to "align_to_ref" for all related memory operations. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* s = memops.at(i)->as_Mem(); + if (isomorphic(s, mem_ref)) { + SWPointer p2(s, this); + if (p2.comparable(align_to_ref_p)) { + int align = memory_alignment(s, iv_adjustment); + set_alignment(s, align); } } } - } + + // Create initial pack pairs of memory operations for which + // alignment is set and vectors will be aligned. + bool create_pack = true; + if (memory_alignment(mem_ref, best_iv_adjustment) == 0) { + if (!Matcher::misaligned_vectors_ok()) { + int vw = vector_width(mem_ref); + int vw_best = vector_width(best_align_to_mem_ref); + if (vw > vw_best) { + // Do not vectorize a memory access with more elements per vector + // if unaligned memory access is not allowed because number of + // iterations in pre-loop will be not enough to align it. + create_pack = false; + } + } + } else { + if (same_velt_type(mem_ref, best_align_to_mem_ref)) { + // Can't allow vectorization of unaligned memory accesses with the + // same type since it could be overlapped accesses to the same array. + create_pack = false; + } else { + // Allow independent (different type) unaligned memory operations + // if HW supports them. + if (!Matcher::misaligned_vectors_ok()) { + create_pack = false; + } else { + // Check if packs of the same memory type but + // with a different alignment were created before. + for (uint i = 0; i < align_to_refs.size(); i++) { + MemNode* mr = align_to_refs.at(i)->as_Mem(); + if (same_velt_type(mr, mem_ref) && + memory_alignment(mr, iv_adjustment) != 0) + create_pack = false; + } + } + } + } + if (create_pack) { + for (uint i = 0; i < memops.size(); i++) { + Node* s1 = memops.at(i); + int align = alignment(s1); + if (align == top_align) continue; + for (uint j = 0; j < memops.size(); j++) { + Node* s2 = memops.at(j); + if (alignment(s2) == top_align) continue; + if (s1 != s2 && are_adjacent_refs(s1, s2)) { + if (stmts_can_pack(s1, s2, align)) { + Node_List* pair = new Node_List(); + pair->push(s1); + pair->push(s2); + _packset.append(pair); + } + } + } + } + } else { // Don't create unaligned pack + // First, remove remaining memory ops of the same type from the list. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* s = memops.at(i)->as_Mem(); + if (same_velt_type(s, mem_ref)) { + memops.remove(i); + } + } + + // Second, remove already constructed packs of the same type. + for (int i = _packset.length() - 1; i >= 0; i--) { + Node_List* p = _packset.at(i); + MemNode* s = p->at(0)->as_Mem(); + if (same_velt_type(s, mem_ref)) { + remove_pack_at(i); + } + } + + // If needed find the best memory reference for loop alignment again. + if (same_velt_type(mem_ref, best_align_to_mem_ref)) { + // Put memory ops from remaining packs back on memops list for + // the best alignment search. + uint orig_msize = memops.size(); + for (int i = 0; i < _packset.length(); i++) { + Node_List* p = _packset.at(i); + MemNode* s = p->at(0)->as_Mem(); + assert(!same_velt_type(s, mem_ref), "sanity"); + memops.push(s); + } + MemNode* best_align_to_mem_ref = find_align_to_ref(memops); + if (best_align_to_mem_ref == NULL) break; + best_iv_adjustment = get_iv_adjustment(best_align_to_mem_ref); + // Restore list. + while (memops.size() > orig_msize) + (void)memops.pop(); + } + } // unaligned memory accesses + + // Remove used mem nodes. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* m = memops.at(i)->as_Mem(); + if (alignment(m) != top_align) { + memops.remove(i); + } + } + + } // while (memops.size() != 0 + set_align_to_ref(best_align_to_mem_ref); #ifndef PRODUCT if (TraceSuperWord) { @@ -246,7 +334,7 @@ void SuperWord::find_adjacent_refs() { // Find a memory reference to align the loop induction variable to. // Looks first at stores then at loads, looking for a memory reference // with the largest number of references similar to it. -void SuperWord::find_align_to_ref(Node_List &memops) { +MemNode* SuperWord::find_align_to_ref(Node_List &memops) { GrowableArray cmp_ct(arena(), memops.size(), memops.size(), 0); // Count number of comparable memory ops @@ -270,20 +358,28 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } - // Find Store (or Load) with the greatest number of "comparable" references + // Find Store (or Load) with the greatest number of "comparable" references, + // biggest vector size, smallest data size and smallest iv offset. int max_ct = 0; + int max_vw = 0; int max_idx = -1; int min_size = max_jint; int min_iv_offset = max_jint; for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Store()) { + int vw = vector_width_in_bytes(s); + assert(vw > 1, "sanity"); SWPointer p(s, this); - if (cmp_ct.at(j) > max_ct || - cmp_ct.at(j) == max_ct && (data_size(s) < min_size || - data_size(s) == min_size && - p.offset_in_bytes() < min_iv_offset)) { + if (cmp_ct.at(j) > max_ct || + cmp_ct.at(j) == max_ct && + (vw > max_vw || + vw == max_vw && + (data_size(s) < min_size || + data_size(s) == min_size && + (p.offset_in_bytes() < min_iv_offset)))) { max_ct = cmp_ct.at(j); + max_vw = vw; max_idx = j; min_size = data_size(s); min_iv_offset = p.offset_in_bytes(); @@ -295,12 +391,18 @@ void SuperWord::find_align_to_ref(Node_List &memops) { for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Load()) { + int vw = vector_width_in_bytes(s); + assert(vw > 1, "sanity"); SWPointer p(s, this); - if (cmp_ct.at(j) > max_ct || - cmp_ct.at(j) == max_ct && (data_size(s) < min_size || - data_size(s) == min_size && - p.offset_in_bytes() < min_iv_offset)) { + if (cmp_ct.at(j) > max_ct || + cmp_ct.at(j) == max_ct && + (vw > max_vw || + vw == max_vw && + (data_size(s) < min_size || + data_size(s) == min_size && + (p.offset_in_bytes() < min_iv_offset)))) { max_ct = cmp_ct.at(j); + max_vw = vw; max_idx = j; min_size = data_size(s); min_iv_offset = p.offset_in_bytes(); @@ -309,10 +411,7 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } - if (max_ct > 0) - set_align_to_ref(memops.at(max_idx)->as_Mem()); - -#ifndef PRODUCT +#ifdef ASSERT if (TraceSuperWord && Verbose) { tty->print_cr("\nVector memops after find_align_to_refs"); for (uint i = 0; i < memops.size(); i++) { @@ -321,6 +420,17 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } #endif + + if (max_ct > 0) { +#ifdef ASSERT + if (TraceSuperWord) { + tty->print("\nVector align to node: "); + memops.at(max_idx)->as_Mem()->dump(); + } +#endif + return memops.at(max_idx)->as_Mem(); + } + return NULL; } //------------------------------ref_is_alignable--------------------------- @@ -341,7 +451,8 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { // If initial offset from start of object is computable, // compute alignment within the vector. - int vw = vector_width_in_bytes(); + int vw = vector_width_in_bytes(p.mem()); + assert(vw > 1, "sanity"); if (vw % span == 0) { Node* init_nd = pre_end->init_trip(); if (init_nd->is_Con() && p.invar() == NULL) { @@ -361,6 +472,25 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { return false; } +//---------------------------get_iv_adjustment--------------------------- +// Calculate loop's iv adjustment for this memory ops. +int SuperWord::get_iv_adjustment(MemNode* mem_ref) { + SWPointer align_to_ref_p(mem_ref, this); + int offset = align_to_ref_p.offset_in_bytes(); + int scale = align_to_ref_p.scale_in_bytes(); + int vw = vector_width_in_bytes(mem_ref); + assert(vw > 1, "sanity"); + int stride_sign = (scale * iv_stride()) > 0 ? 1 : -1; + int iv_adjustment = (stride_sign * vw - (offset % vw)) % vw; + +#ifndef PRODUCT + if (TraceSuperWord) + tty->print_cr("\noffset = %d iv_adjust = %d elt_size = %d scale = %d iv_stride = %d vect_size %d", + offset, iv_adjustment, align_to_ref_p.memory_size(), scale, iv_stride(), vw); +#endif + return iv_adjustment; +} + //---------------------------dependence_graph--------------------------- // Construct dependency graph. // Add dependence edges to load/store nodes for memory dependence @@ -488,9 +618,13 @@ void SuperWord::mem_slice_preds(Node* start, Node* stop, GrowableArray &p bool SuperWord::stmts_can_pack(Node* s1, Node* s2, int align) { // Do not use superword for non-primitives - if((s1->is_Mem() && !is_java_primitive(s1->as_Mem()->memory_type())) || - (s2->is_Mem() && !is_java_primitive(s2->as_Mem()->memory_type()))) + BasicType bt1 = velt_basic_type(s1); + BasicType bt2 = velt_basic_type(s2); + if(!is_java_primitive(bt1) || !is_java_primitive(bt2)) return false; + if (Matcher::max_vector_size(bt1) < 2) { + return false; // No vectors for this type + } if (isomorphic(s1, s2)) { if (independent(s1, s2)) { @@ -552,7 +686,7 @@ bool SuperWord::isomorphic(Node* s1, Node* s2) { if (s1->Opcode() != s2->Opcode()) return false; if (s1->req() != s2->req()) return false; if (s1->in(0) != s2->in(0)) return false; - if (velt_type(s1) != velt_type(s2)) return false; + if (!same_velt_type(s1, s2)) return false; return true; } @@ -595,14 +729,16 @@ bool SuperWord::independent_path(Node* shallow, Node* deep, uint dp) { //------------------------------set_alignment--------------------------- void SuperWord::set_alignment(Node* s1, Node* s2, int align) { set_alignment(s1, align); - set_alignment(s2, align + data_size(s1)); + if (align == top_align || align == bottom_align) { + set_alignment(s2, align); + } else { + set_alignment(s2, align + data_size(s1)); + } } //------------------------------data_size--------------------------- int SuperWord::data_size(Node* s) { - const Type* t = velt_type(s); - BasicType bt = t->array_element_basic_type(); - int bsize = type2aelembytes(bt); + int bsize = type2aelembytes(velt_basic_type(s)); assert(bsize != 0, "valid size"); return bsize; } @@ -631,9 +767,9 @@ void SuperWord::extend_packlist() { //------------------------------follow_use_defs--------------------------- // Extend the packset by visiting operand definitions of nodes in pack p bool SuperWord::follow_use_defs(Node_List* p) { + assert(p->size() == 2, "just checking"); Node* s1 = p->at(0); Node* s2 = p->at(1); - assert(p->size() == 2, "just checking"); assert(s1->req() == s2->req(), "just checking"); assert(alignment(s1) + data_size(s1) == alignment(s2), "just checking"); @@ -718,7 +854,12 @@ bool SuperWord::opnd_positions_match(Node* d1, Node* u1, Node* d2, Node* u2) { for (i1++; i1 < ct; i1++) if (u1->in(i1) == d1) break; for (i2++; i2 < ct; i2++) if (u2->in(i2) == d2) break; if (i1 != i2) { - return false; + if ((i1 == (3-i2)) && (u2->is_Add() || u2->is_Mul())) { + // Further analysis relies on operands position matching. + u2->swap_edges(i1, i2); + } else { + return false; + } } } while (i1 < ct); return true; @@ -727,7 +868,7 @@ bool SuperWord::opnd_positions_match(Node* d1, Node* u1, Node* d2, Node* u2) { //------------------------------est_savings--------------------------- // Estimate the savings from executing s1 and s2 as a pack int SuperWord::est_savings(Node* s1, Node* s2) { - int save = 2 - 1; // 2 operations per instruction in packed form + int save_in = 2 - 1; // 2 operations per instruction in packed form // inputs for (uint i = 1; i < s1->req(); i++) { @@ -735,17 +876,18 @@ int SuperWord::est_savings(Node* s1, Node* s2) { Node* x2 = s2->in(i); if (x1 != x2) { if (are_adjacent_refs(x1, x2)) { - save += adjacent_profit(x1, x2); + save_in += adjacent_profit(x1, x2); } else if (!in_packset(x1, x2)) { - save -= pack_cost(2); + save_in -= pack_cost(2); } else { - save += unpack_cost(2); + save_in += unpack_cost(2); } } } // uses of result uint ct = 0; + int save_use = 0; for (DUIterator_Fast imax, i = s1->fast_outs(imax); i < imax; i++) { Node* s1_use = s1->fast_out(i); for (int j = 0; j < _packset.length(); j++) { @@ -756,7 +898,7 @@ int SuperWord::est_savings(Node* s1, Node* s2) { if (p->at(p->size()-1) == s2_use) { ct++; if (are_adjacent_refs(s1_use, s2_use)) { - save += adjacent_profit(s1_use, s2_use); + save_use += adjacent_profit(s1_use, s2_use); } } } @@ -764,10 +906,10 @@ int SuperWord::est_savings(Node* s1, Node* s2) { } } - if (ct < s1->outcnt()) save += unpack_cost(1); - if (ct < s2->outcnt()) save += unpack_cost(1); + if (ct < s1->outcnt()) save_use += unpack_cost(1); + if (ct < s2->outcnt()) save_use += unpack_cost(1); - return save; + return MAX2(save_in, save_use); } //------------------------------costs--------------------------- @@ -778,8 +920,9 @@ int SuperWord::unpack_cost(int ct) { return ct; } //------------------------------combine_packs--------------------------- // Combine packs A and B with A.last == B.first into A.first..,A.last,B.second,..B.last void SuperWord::combine_packs() { - bool changed; - do { + bool changed = true; + // Combine packs regardless max vector size. + while (changed) { changed = false; for (int i = 0; i < _packset.length(); i++) { Node_List* p1 = _packset.at(i); @@ -787,6 +930,7 @@ void SuperWord::combine_packs() { for (int j = 0; j < _packset.length(); j++) { Node_List* p2 = _packset.at(j); if (p2 == NULL) continue; + if (i == j) continue; if (p1->at(p1->size()-1) == p2->at(0)) { for (uint k = 1; k < p2->size(); k++) { p1->push(p2->at(k)); @@ -796,8 +940,39 @@ void SuperWord::combine_packs() { } } } - } while (changed); + } + // Split packs which have size greater then max vector size. + for (int i = 0; i < _packset.length(); i++) { + Node_List* p1 = _packset.at(i); + if (p1 != NULL) { + BasicType bt = velt_basic_type(p1->at(0)); + uint max_vlen = Matcher::max_vector_size(bt); // Max elements in vector + assert(is_power_of_2(max_vlen), "sanity"); + uint psize = p1->size(); + if (!is_power_of_2(psize)) { + // Skip pack which can't be vector. + // case1: for(...) { a[i] = i; } elements values are different (i+x) + // case2: for(...) { a[i] = b[i+1]; } can't align both, load and store + _packset.at_put(i, NULL); + continue; + } + if (psize > max_vlen) { + Node_List* pack = new Node_List(); + for (uint j = 0; j < psize; j++) { + pack->push(p1->at(j)); + if (pack->size() >= max_vlen) { + assert(is_power_of_2(pack->size()), "sanity"); + _packset.append(pack); + pack = new Node_List(); + } + } + _packset.at_put(i, NULL); + } + } + } + + // Compress list. for (int i = _packset.length() - 1; i >= 0; i--) { Node_List* p1 = _packset.at(i); if (p1 == NULL) { @@ -880,8 +1055,7 @@ void SuperWord::filter_packs() { // Can code be generated for pack p? bool SuperWord::implemented(Node_List* p) { Node* p0 = p->at(0); - int vopc = VectorNode::opcode(p0->Opcode(), p->size(), velt_type(p0)); - return vopc > 0 && Matcher::has_match_rule(vopc); + return VectorNode::implemented(p0->Opcode(), p->size(), velt_basic_type(p0)); } //------------------------------profitable--------------------------- @@ -939,62 +1113,56 @@ void SuperWord::schedule() { } //-------------------------------remove_and_insert------------------- -//remove "current" from its current position in the memory graph and insert -//it after the appropriate insertion point (lip or uip) +// Remove "current" from its current position in the memory graph and insert +// it after the appropriate insertion point (lip or uip). void SuperWord::remove_and_insert(MemNode *current, MemNode *prev, MemNode *lip, Node *uip, Unique_Node_List &sched_before) { Node* my_mem = current->in(MemNode::Memory); - _igvn.hash_delete(current); - _igvn.hash_delete(my_mem); + bool sched_up = sched_before.member(current); - //remove current_store from its current position in the memmory graph + // remove current_store from its current position in the memmory graph for (DUIterator i = current->outs(); current->has_out(i); i++) { Node* use = current->out(i); if (use->is_Mem()) { assert(use->in(MemNode::Memory) == current, "must be"); - _igvn.hash_delete(use); if (use == prev) { // connect prev to my_mem - use->set_req(MemNode::Memory, my_mem); + _igvn.replace_input_of(use, MemNode::Memory, my_mem); + --i; //deleted this edge; rescan position } else if (sched_before.member(use)) { - _igvn.hash_delete(uip); - use->set_req(MemNode::Memory, uip); + if (!sched_up) { // Will be moved together with current + _igvn.replace_input_of(use, MemNode::Memory, uip); + --i; //deleted this edge; rescan position + } } else { - _igvn.hash_delete(lip); - use->set_req(MemNode::Memory, lip); + if (sched_up) { // Will be moved together with current + _igvn.replace_input_of(use, MemNode::Memory, lip); + --i; //deleted this edge; rescan position + } } - _igvn._worklist.push(use); - --i; //deleted this edge; rescan position } } - bool sched_up = sched_before.member(current); Node *insert_pt = sched_up ? uip : lip; - _igvn.hash_delete(insert_pt); // all uses of insert_pt's memory state should use current's instead for (DUIterator i = insert_pt->outs(); insert_pt->has_out(i); i++) { Node* use = insert_pt->out(i); if (use->is_Mem()) { assert(use->in(MemNode::Memory) == insert_pt, "must be"); - _igvn.hash_delete(use); - use->set_req(MemNode::Memory, current); - _igvn._worklist.push(use); + _igvn.replace_input_of(use, MemNode::Memory, current); --i; //deleted this edge; rescan position } else if (!sched_up && use->is_Phi() && use->bottom_type() == Type::MEMORY) { uint pos; //lip (lower insert point) must be the last one in the memory slice - _igvn.hash_delete(use); for (pos=1; pos < use->req(); pos++) { if (use->in(pos) == insert_pt) break; } - use->set_req(pos, current); - _igvn._worklist.push(use); + _igvn.replace_input_of(use, pos, current); --i; } } //connect current to insert_pt - current->set_req(MemNode::Memory, insert_pt); - _igvn._worklist.push(current); + _igvn.replace_input_of(current, MemNode::Memory, insert_pt); } //------------------------------co_locate_pack---------------------------------- @@ -1031,7 +1199,7 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (use->is_Mem() && use != previous) memops.push(use); } - if(current == first) break; + if (current == first) break; previous = current; current = current->in(MemNode::Memory)->as_Mem(); } @@ -1044,27 +1212,37 @@ void SuperWord::co_locate_pack(Node_List* pk) { Node *s2 = memops.at(j); if (!independent(s1, s2)) { if (in_pack(s2, pk) || schedule_before_pack.member(s2)) { - schedule_before_pack.push(s1); //s1 must be scheduled before + schedule_before_pack.push(s1); // s1 must be scheduled before Node_List* mem_pk = my_pack(s1); if (mem_pk != NULL) { for (uint ii = 0; ii < mem_pk->size(); ii++) { - Node* s = mem_pk->at(ii); // follow partner + Node* s = mem_pk->at(ii); // follow partner if (memops.member(s) && !schedule_before_pack.member(s)) schedule_before_pack.push(s); } } + break; } } } } } - MemNode* lower_insert_pt = last; Node* upper_insert_pt = first->in(MemNode::Memory); + // Following code moves loads connected to upper_insert_pt below aliased stores. + // Collect such loads here and reconnect them back to upper_insert_pt later. + memops.clear(); + for (DUIterator i = upper_insert_pt->outs(); upper_insert_pt->has_out(i); i++) { + Node* use = upper_insert_pt->out(i); + if (!use->is_Store()) + memops.push(use); + } + + MemNode* lower_insert_pt = last; previous = last; //previous store in pk current = last->in(MemNode::Memory)->as_Mem(); - //start scheduling from "last" to "first" + // start scheduling from "last" to "first" while (true) { assert(in_bb(current), "stay in block"); assert(in_pack(previous, pk), "previous stays in pack"); @@ -1072,20 +1250,15 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (in_pack(current, pk)) { // Forward users of my memory state (except "previous) to my input memory state - _igvn.hash_delete(current); for (DUIterator i = current->outs(); current->has_out(i); i++) { Node* use = current->out(i); if (use->is_Mem() && use != previous) { assert(use->in(MemNode::Memory) == current, "must be"); - _igvn.hash_delete(use); if (schedule_before_pack.member(use)) { - _igvn.hash_delete(upper_insert_pt); - use->set_req(MemNode::Memory, upper_insert_pt); + _igvn.replace_input_of(use, MemNode::Memory, upper_insert_pt); } else { - _igvn.hash_delete(lower_insert_pt); - use->set_req(MemNode::Memory, lower_insert_pt); + _igvn.replace_input_of(use, MemNode::Memory, lower_insert_pt); } - _igvn._worklist.push(use); --i; // deleted this edge; rescan position } } @@ -1097,6 +1270,14 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (current == first) break; current = my_mem->as_Mem(); } // end while + + // Reconnect loads back to upper_insert_pt. + for (uint i = 0; i < memops.size(); i++) { + Node *ld = memops.at(i); + if (ld->in(MemNode::Memory) != upper_insert_pt) { + _igvn.replace_input_of(ld, MemNode::Memory, upper_insert_pt); + } + } } else if (pk->at(0)->is_Load()) { //load // all loads in the pack should have the same memory state. By default, // we use the memory state of the last load. However, if any load could @@ -1122,9 +1303,7 @@ void SuperWord::co_locate_pack(Node_List* pk) { // Give each load the same memory state for (uint i = 0; i < pk->size(); i++) { LoadNode* ld = pk->at(i)->as_Load(); - _igvn.hash_delete(ld); - ld->set_req(MemNode::Memory, mem_input); - _igvn._worklist.push(ld); + _igvn.replace_input_of(ld, MemNode::Memory, mem_input); } } } @@ -1159,35 +1338,30 @@ void SuperWord::output() { Node* vn = NULL; Node* low_adr = p->at(0); Node* first = executed_first(p); + int opc = n->Opcode(); if (n->is_Load()) { - int opc = n->Opcode(); Node* ctl = n->in(MemNode::Control); Node* mem = first->in(MemNode::Memory); Node* adr = low_adr->in(MemNode::Address); const TypePtr* atyp = n->adr_type(); - vn = VectorLoadNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen); - + vn = LoadVectorNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen, velt_basic_type(n)); } else if (n->is_Store()) { // Promote value to be stored to vector Node* val = vector_opd(p, MemNode::ValueIn); - - int opc = n->Opcode(); Node* ctl = n->in(MemNode::Control); Node* mem = first->in(MemNode::Memory); Node* adr = low_adr->in(MemNode::Address); const TypePtr* atyp = n->adr_type(); - vn = VectorStoreNode::make(_phase->C, opc, ctl, mem, adr, atyp, val, vlen); - + vn = StoreVectorNode::make(_phase->C, opc, ctl, mem, adr, atyp, val, vlen); } else if (n->req() == 3) { // Promote operands to vector Node* in1 = vector_opd(p, 1); Node* in2 = vector_opd(p, 2); - vn = VectorNode::make(_phase->C, n->Opcode(), in1, in2, vlen, velt_type(n)); - + vn = VectorNode::make(_phase->C, opc, in1, in2, vlen, velt_basic_type(n)); } else { ShouldNotReachHere(); } - + assert(vn != NULL, "sanity"); _phase->_igvn.register_new_node_with_optimizer(vn); _phase->set_ctrl(vn, _phase->get_ctrl(p->at(0))); for (uint j = 0; j < p->size(); j++) { @@ -1195,6 +1369,12 @@ void SuperWord::output() { _igvn.replace_node(pm, vn); } _igvn._worklist.push(vn); +#ifdef ASSERT + if (TraceNewVectors) { + tty->print("new Vector node: "); + vn->dump(); + } +#endif } } } @@ -1217,10 +1397,10 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { } if (same_opd) { - if (opd->is_Vector() || opd->is_VectorLoad()) { + if (opd->is_Vector() || opd->is_LoadVector()) { return opd; // input is matching vector } - assert(!opd->is_VectorStore(), "such vector is not expected here"); + assert(!opd->is_StoreVector(), "such vector is not expected here"); // Convert scalar input to vector with the same number of elements as // p0's vector. Use p0's type because size of operand's container in // vector should match p0's size regardless operand's size. @@ -1229,12 +1409,18 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { _phase->_igvn.register_new_node_with_optimizer(vn); _phase->set_ctrl(vn, _phase->get_ctrl(opd)); +#ifdef ASSERT + if (TraceNewVectors) { + tty->print("new Vector node: "); + vn->dump(); + } +#endif return vn; } // Insert pack operation - const Type* p0_t = velt_type(p0); - PackNode* pk = PackNode::make(_phase->C, opd, p0_t); + BasicType bt = velt_basic_type(p0); + PackNode* pk = PackNode::make(_phase->C, opd, vlen, bt); DEBUG_ONLY( const BasicType opd_bt = opd->bottom_type()->basic_type(); ) for (uint i = 1; i < vlen; i++) { @@ -1242,10 +1428,16 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { Node* in = pi->in(opd_idx); assert(my_pack(in) == NULL, "Should already have been unpacked"); assert(opd_bt == in->bottom_type()->basic_type(), "all same type"); - pk->add_opd(in); + pk->add_opd(i, in); } _phase->_igvn.register_new_node_with_optimizer(pk); _phase->set_ctrl(pk, _phase->get_ctrl(opd)); +#ifdef ASSERT + if (TraceNewVectors) { + tty->print("new Vector node: "); + pk->dump(); + } +#endif return pk; } @@ -1282,19 +1474,16 @@ void SuperWord::insert_extracts(Node_List* p) { // Insert extract operation _igvn.hash_delete(def); - _igvn.hash_delete(use); int def_pos = alignment(def) / data_size(def); - const Type* def_t = velt_type(def); - Node* ex = ExtractNode::make(_phase->C, def, def_pos, def_t); + Node* ex = ExtractNode::make(_phase->C, def, def_pos, velt_basic_type(def)); _phase->_igvn.register_new_node_with_optimizer(ex); _phase->set_ctrl(ex, _phase->get_ctrl(def)); - use->set_req(idx, ex); + _igvn.replace_input_of(use, idx, ex); _igvn._worklist.push(def); - _igvn._worklist.push(use); bb_insert_after(ex, bb_idx(def)); - set_velt_type(ex, def_t); + set_velt_type(ex, velt_type(def)); } } @@ -1521,10 +1710,7 @@ void SuperWord::compute_vector_element_type() { // Initial type for (int i = 0; i < _block.length(); i++) { Node* n = _block.at(i); - const Type* t = n->is_Mem() ? Type::get_const_basic_type(n->as_Mem()->memory_type()) - : _igvn.type(n); - const Type* vt = container_type(t); - set_velt_type(n, vt); + set_velt_type(n, container_type(n)); } // Propagate narrowed type backwards through operations @@ -1555,7 +1741,7 @@ void SuperWord::compute_vector_element_type() { bool same_type = true; for (DUIterator_Fast kmax, k = in->fast_outs(kmax); k < kmax; k++) { Node *use = in->fast_out(k); - if (!in_bb(use) || velt_type(use) != vt) { + if (!in_bb(use) || !same_velt_type(use, n)) { same_type = false; break; } @@ -1587,20 +1773,24 @@ int SuperWord::memory_alignment(MemNode* s, int iv_adjust_in_bytes) { if (!p.valid()) { return bottom_align; } + int vw = vector_width_in_bytes(s); + if (vw < 2) { + return bottom_align; // No vectors for this type + } int offset = p.offset_in_bytes(); offset += iv_adjust_in_bytes; - int off_rem = offset % vector_width_in_bytes(); - int off_mod = off_rem >= 0 ? off_rem : off_rem + vector_width_in_bytes(); + int off_rem = offset % vw; + int off_mod = off_rem >= 0 ? off_rem : off_rem + vw; return off_mod; } //---------------------------container_type--------------------------- // Smallest type containing range of values -const Type* SuperWord::container_type(const Type* t) { - const Type* tp = t->make_ptr(); - if (tp && tp->isa_aryptr()) { - t = tp->is_aryptr()->elem(); +const Type* SuperWord::container_type(Node* n) { + if (n->is_Mem()) { + return Type::get_const_basic_type(n->as_Mem()->memory_type()); } + const Type* t = _igvn.type(n); if (t->basic_type() == T_INT) { if (t->higher_equal(TypeInt::BOOL)) return TypeInt::BOOL; if (t->higher_equal(TypeInt::BYTE)) return TypeInt::BYTE; @@ -1611,11 +1801,22 @@ const Type* SuperWord::container_type(const Type* t) { return t; } +bool SuperWord::same_velt_type(Node* n1, Node* n2) { + const Type* vt1 = velt_type(n1); + const Type* vt2 = velt_type(n1); + if (vt1->basic_type() == T_INT && vt2->basic_type() == T_INT) { + // Compare vectors element sizes for integer types. + return data_size(n1) == data_size(n2); + } + return vt1 == vt2; +} + //-------------------------vector_opd_range----------------------- // (Start, end] half-open range defining which operands are vector void SuperWord::vector_opd_range(Node* n, uint* start, uint* end) { switch (n->Opcode()) { - case Op_LoadB: case Op_LoadUS: + case Op_LoadB: case Op_LoadUB: + case Op_LoadS: case Op_LoadUS: case Op_LoadI: case Op_LoadL: case Op_LoadF: case Op_LoadD: case Op_LoadP: @@ -1733,6 +1934,7 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { assert(orig_limit != NULL && _igvn.type(orig_limit) != Type::TOP, ""); SWPointer align_to_ref_p(align_to_ref, this); + assert(align_to_ref_p.valid(), "sanity"); // Given: // lim0 == original pre loop limit @@ -1785,10 +1987,12 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { // N = (V - (e - lim0)) % V // lim = lim0 - (V - (e - lim0)) % V + int vw = vector_width_in_bytes(align_to_ref); int stride = iv_stride(); int scale = align_to_ref_p.scale_in_bytes(); int elt_size = align_to_ref_p.memory_size(); - int v_align = vector_width_in_bytes() / elt_size; + int v_align = vw / elt_size; + assert(v_align > 1, "sanity"); int k = align_to_ref_p.offset_in_bytes() / elt_size; Node *kn = _igvn.intcon(k); @@ -1808,6 +2012,25 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { _phase->_igvn.register_new_node_with_optimizer(e); _phase->set_ctrl(e, pre_ctrl); } + if (vw > ObjectAlignmentInBytes) { + // incorporate base e +/- base && Mask >>> log2(elt) + Node* mask = _igvn.MakeConX(~(-1 << exact_log2(vw))); + Node* xbase = new(_phase->C, 2) CastP2XNode(NULL, align_to_ref_p.base()); + _phase->_igvn.register_new_node_with_optimizer(xbase); + Node* masked_xbase = new (_phase->C, 3) AndXNode(xbase, mask); + _phase->_igvn.register_new_node_with_optimizer(masked_xbase); +#ifdef _LP64 + masked_xbase = new (_phase->C, 2) ConvL2INode(masked_xbase); + _phase->_igvn.register_new_node_with_optimizer(masked_xbase); +#endif + Node* log2_elt = _igvn.intcon(exact_log2(elt_size)); + Node* bref = new (_phase->C, 3) URShiftINode(masked_xbase, log2_elt); + _phase->_igvn.register_new_node_with_optimizer(bref); + _phase->set_ctrl(bref, pre_ctrl); + e = new (_phase->C, 3) AddINode(e, bref); + _phase->_igvn.register_new_node_with_optimizer(e); + _phase->set_ctrl(e, pre_ctrl); + } // compute e +/- lim0 if (scale < 0) { diff --git a/hotspot/src/share/vm/opto/superword.hpp b/hotspot/src/share/vm/opto/superword.hpp index 50937671265..050ce9ea2df 100644 --- a/hotspot/src/share/vm/opto/superword.hpp +++ b/hotspot/src/share/vm/opto/superword.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -264,8 +264,14 @@ class SuperWord : public ResourceObj { _iv = lp->as_CountedLoop()->phi()->as_Phi(); } int iv_stride() { return lp()->as_CountedLoop()->stride_con(); } - int vector_width_in_bytes() { return Matcher::vector_width_in_bytes(); } - + int vector_width(Node* n) { + BasicType bt = velt_basic_type(n); + return MIN2(ABS(iv_stride()), Matcher::max_vector_size(bt)); + } + int vector_width_in_bytes(Node* n) { + BasicType bt = velt_basic_type(n); + return vector_width(n)*type2aelembytes(bt); + } MemNode* align_to_ref() { return _align_to_ref; } void set_align_to_ref(MemNode* m) { _align_to_ref = m; } @@ -298,7 +304,9 @@ class SuperWord : public ResourceObj { // vector element type const Type* velt_type(Node* n) { return _node_info.adr_at(bb_idx(n))->_velt_type; } + BasicType velt_basic_type(Node* n) { return velt_type(n)->array_element_basic_type(); } void set_velt_type(Node* n, const Type* t) { int i = bb_idx(n); grow_node_info(i); _node_info.adr_at(i)->_velt_type = t; } + bool same_velt_type(Node* n1, Node* n2); // my_pack Node_List* my_pack(Node* n) { return !in_bb(n) ? NULL : _node_info.adr_at(bb_idx(n))->_my_pack; } @@ -311,7 +319,9 @@ class SuperWord : public ResourceObj { // Find the adjacent memory references and create pack pairs for them. void find_adjacent_refs(); // Find a memory reference to align the loop induction variable to. - void find_align_to_ref(Node_List &memops); + MemNode* find_align_to_ref(Node_List &memops); + // Calculate loop's iv adjustment for this memory ops. + int get_iv_adjustment(MemNode* mem); // Can the preloop align the reference to position zero in the vector? bool ref_is_alignable(SWPointer& p); // Construct dependency graph. @@ -394,7 +404,7 @@ class SuperWord : public ResourceObj { // (Start, end] half-open range defining which operands are vector void vector_opd_range(Node* n, uint* start, uint* end); // Smallest type containing range of values - static const Type* container_type(const Type* t); + const Type* container_type(Node* n); // Adjust pre-loop limit so that in main loop, a load/store reference // to align_to_ref will be a position zero in the vector. void align_initial_loop_index(MemNode* align_to_ref); @@ -462,6 +472,7 @@ class SWPointer VALUE_OBJ_CLASS_SPEC { Node* base() { return _base; } Node* adr() { return _adr; } + MemNode* mem() { return _mem; } int scale_in_bytes() { return _scale; } Node* invar() { return _invar; } bool negate_invar() { return _negate_invar; } diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index af118139e2b..80d5830428d 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,10 @@ const BasicType Type::_basic_type[Type::lastype] = { T_ILLEGAL, // Tuple T_ARRAY, // Array + T_ILLEGAL, // VectorS + T_ILLEGAL, // VectorD + T_ILLEGAL, // VectorX + T_ILLEGAL, // VectorY T_ADDRESS, // AnyPtr // shows up in factory methods for NULL_PTR T_ADDRESS, // RawPtr @@ -208,7 +212,7 @@ void Type::Initialize_shared(Compile* current) { // locking. Arena* save = current->type_arena(); - Arena* shared_type_arena = new Arena(); + Arena* shared_type_arena = new (mtCompiler)Arena(); current->set_type_arena(shared_type_arena); _shared_type_dict = @@ -414,6 +418,24 @@ void Type::Initialize_shared(Compile* current) { // get_zero_type() should not happen for T_CONFLICT _zero_type[T_CONFLICT]= NULL; + // Vector predefined types, it needs initialized _const_basic_type[]. + if (Matcher::vector_size_supported(T_BYTE,4)) { + TypeVect::VECTS = TypeVect::make(T_BYTE,4); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + TypeVect::VECTD = TypeVect::make(T_FLOAT,2); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + TypeVect::VECTX = TypeVect::make(T_FLOAT,4); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + TypeVect::VECTY = TypeVect::make(T_FLOAT,8); + } + mreg2type[Op_VecS] = TypeVect::VECTS; + mreg2type[Op_VecD] = TypeVect::VECTD; + mreg2type[Op_VecX] = TypeVect::VECTX; + mreg2type[Op_VecY] = TypeVect::VECTY; + // Restore working type arena. current->set_type_arena(save); current->set_type_dict(NULL); @@ -668,6 +690,10 @@ const Type::TYPES Type::dual_type[Type::lastype] = { Bad, // Tuple - handled in v-call Bad, // Array - handled in v-call + Bad, // VectorS - handled in v-call + Bad, // VectorD - handled in v-call + Bad, // VectorX - handled in v-call + Bad, // VectorY - handled in v-call Bad, // AnyPtr - handled in v-call Bad, // RawPtr - handled in v-call @@ -728,8 +754,8 @@ void Type::dump_on(outputStream *st) const { //------------------------------data------------------------------------------- const char * const Type::msg[Type::lastype] = { "bad","control","top","int:","long:","half", "narrowoop:", - "tuple:", "aryptr", - "anyptr:", "rawptr:", "java:", "inst:", "ary:", "klass:", + "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", + "anyptr:", "rawptr:", "java:", "inst:", "aryptr:", "klass:", "func", "abIO", "return_address", "memory", "float_top", "ftcon:", "float", "double_top", "dblcon:", "double", @@ -790,7 +816,7 @@ void Type::typerr( const Type *t ) const { //------------------------------isa_oop_ptr------------------------------------ // Return true if type is an oop pointer type. False for raw pointers. static char isa_oop_ptr_tbl[Type::lastype] = { - 0,0,0,0,0,0,0/*narrowoop*/,0/*tuple*/, 0/*ary*/, + 0,0,0,0,0,0,0/*narrowoop*/,0/*tuple*/, 0/*array*/, 0, 0, 0, 0/*vector*/, 0/*anyptr*/,0/*rawptr*/,1/*OopPtr*/,1/*InstPtr*/,1/*AryPtr*/,1/*KlassPtr*/, 0/*func*/,0,0/*return_address*/,0, /*floats*/0,0,0, /*doubles*/0,0,0, @@ -1926,6 +1952,121 @@ bool TypeAry::ary_must_be_exact() const { return false; } +//==============================TypeVect======================================= +// Convenience common pre-built types. +const TypeVect *TypeVect::VECTS = NULL; // 32-bit vectors +const TypeVect *TypeVect::VECTD = NULL; // 64-bit vectors +const TypeVect *TypeVect::VECTX = NULL; // 128-bit vectors +const TypeVect *TypeVect::VECTY = NULL; // 256-bit vectors + +//------------------------------make------------------------------------------- +const TypeVect* TypeVect::make(const Type *elem, uint length) { + BasicType elem_bt = elem->array_element_basic_type(); + assert(is_java_primitive(elem_bt), "only primitive types in vector"); + assert(length > 1 && is_power_of_2(length), "vector length is power of 2"); + assert(Matcher::vector_size_supported(elem_bt, length), "length in range"); + int size = length * type2aelembytes(elem_bt); + switch (Matcher::vector_ideal_reg(size)) { + case Op_VecS: + return (TypeVect*)(new TypeVectS(elem, length))->hashcons(); + case Op_VecD: + case Op_RegD: + return (TypeVect*)(new TypeVectD(elem, length))->hashcons(); + case Op_VecX: + return (TypeVect*)(new TypeVectX(elem, length))->hashcons(); + case Op_VecY: + return (TypeVect*)(new TypeVectY(elem, length))->hashcons(); + } + ShouldNotReachHere(); + return NULL; +} + +//------------------------------meet------------------------------------------- +// Compute the MEET of two types. It returns a new Type object. +const Type *TypeVect::xmeet( const Type *t ) const { + // Perform a fast test for common case; meeting the same types together. + if( this == t ) return this; // Meeting same type-rep? + + // Current "this->_base" is Vector + switch (t->base()) { // switch on original type + + case Bottom: // Ye Olde Default + return t; + + default: // All else is a mistake + typerr(t); + + case VectorS: + case VectorD: + case VectorX: + case VectorY: { // Meeting 2 vectors? + const TypeVect* v = t->is_vect(); + assert( base() == v->base(), ""); + assert(length() == v->length(), ""); + assert(element_basic_type() == v->element_basic_type(), ""); + return TypeVect::make(_elem->xmeet(v->_elem), _length); + } + case Top: + break; + } + return this; +} + +//------------------------------xdual------------------------------------------ +// Dual: compute field-by-field dual +const Type *TypeVect::xdual() const { + return new TypeVect(base(), _elem->dual(), _length); +} + +//------------------------------eq--------------------------------------------- +// Structural equality check for Type representations +bool TypeVect::eq(const Type *t) const { + const TypeVect *v = t->is_vect(); + return (_elem == v->_elem) && (_length == v->_length); +} + +//------------------------------hash------------------------------------------- +// Type-specific hashing function. +int TypeVect::hash(void) const { + return (intptr_t)_elem + (intptr_t)_length; +} + +//------------------------------singleton-------------------------------------- +// TRUE if Type is a singleton type, FALSE otherwise. Singletons are simple +// constants (Ldi nodes). Vector is singleton if all elements are the same +// constant value (when vector is created with Replicate code). +bool TypeVect::singleton(void) const { +// There is no Con node for vectors yet. +// return _elem->singleton(); + return false; +} + +bool TypeVect::empty(void) const { + return _elem->empty(); +} + +//------------------------------dump2------------------------------------------ +#ifndef PRODUCT +void TypeVect::dump2(Dict &d, uint depth, outputStream *st) const { + switch (base()) { + case VectorS: + st->print("vectors["); break; + case VectorD: + st->print("vectord["); break; + case VectorX: + st->print("vectorx["); break; + case VectorY: + st->print("vectory["); break; + default: + ShouldNotReachHere(); + } + st->print("%d]:{", _length); + _elem->dump2(d, depth, st); + st->print("}"); +} +#endif + + //============================================================================= // Convenience common pre-built types. const TypePtr *TypePtr::NULL_PTR; @@ -2472,18 +2613,26 @@ const TypeOopPtr* TypeOopPtr::make_from_klass_common(ciKlass *klass, bool klass_ //------------------------------make_from_constant----------------------------- // Make a java pointer from an oop constant const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_constant) { - if (o->is_method_data() || o->is_method() || o->is_cpcache()) { + if (o->is_method_data() || o->is_method()) { // Treat much like a typeArray of bytes, like below, but fake the type... - const Type* etype = (Type*)get_const_basic_type(T_BYTE); + const BasicType bt = T_BYTE; + const Type* etype = get_const_basic_type(bt); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); - ciKlass *klass = ciTypeArrayKlass::make((BasicType) T_BYTE); - assert(o->can_be_constant(), "method data oops should be tenured"); - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); + assert(o->can_be_constant(), "should be tenured"); + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); + } else if (o->is_cpcache()) { + // Treat much like a objArray, like below, but fake the type... + const BasicType bt = T_OBJECT; + const Type* etype = get_const_basic_type(bt); + const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); + ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); + assert(o->can_be_constant(), "should be tenured"); + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } else { assert(o->is_java_object(), "must be java language object"); assert(!o->is_null_object(), "null object not yet handled here."); - ciKlass *klass = o->klass(); + ciKlass* klass = o->klass(); if (klass->is_instance_klass()) { // Element is an instance if (require_constant) { @@ -2494,8 +2643,7 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const return TypeInstPtr::make(o); } else if (klass->is_obj_array_klass()) { // Element is an object array. Recursively call ourself. - const Type *etype = - TypeOopPtr::make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); + const Type *etype = make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the sub-arrays // are all not-null. This is not true in generally, as code can @@ -2505,12 +2653,10 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } else if (klass->is_type_array_klass()) { // Element is an typeArray - const Type* etype = - (Type*)get_const_basic_type(klass->as_type_array_klass()->element_type()); + const Type* etype = get_const_basic_type(klass->as_type_array_klass()->element_type()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the array pointer // is not-null. That was not true in general. @@ -2519,12 +2665,11 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } } - ShouldNotReachHere(); + fatal("unhandled object type"); return NULL; } @@ -4140,7 +4285,7 @@ void TypeFunc::dump2( Dict &d, uint depth, outputStream *st ) const { // Print a 'flattened' signature static const char * const flat_type_msg[Type::lastype] = { "bad","control","top","int","long","_", "narrowoop", - "tuple:", "array:", + "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", "ptr", "rawptr", "ptr", "ptr", "ptr", "ptr", "func", "abIO", "return_address", "mem", "float_top", "ftcon:", "flt", diff --git a/hotspot/src/share/vm/opto/type.hpp b/hotspot/src/share/vm/opto/type.hpp index 133ce78f061..a4b5487d78b 100644 --- a/hotspot/src/share/vm/opto/type.hpp +++ b/hotspot/src/share/vm/opto/type.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,11 @@ class TypeLong; class TypeNarrowOop; class TypeAry; class TypeTuple; +class TypeVect; +class TypeVectS; +class TypeVectD; +class TypeVectX; +class TypeVectY; class TypePtr; class TypeRawPtr; class TypeOopPtr; @@ -78,6 +83,10 @@ public: Tuple, // Method signature or object layout Array, // Array types + VectorS, // 32bit Vector types + VectorD, // 64bit Vector types + VectorX, // 128bit Vector types + VectorY, // 256bit Vector types AnyPtr, // Any old raw, klass, inst, or array pointer RawPtr, // Raw (non-oop) pointers @@ -222,6 +231,8 @@ public: const TypeF *isa_float_constant() const; // Returns NULL if not a FloatCon const TypeTuple *is_tuple() const; // Collection of fields, NOT a pointer const TypeAry *is_ary() const; // Array, NOT array pointer + const TypeVect *is_vect() const; // Vector + const TypeVect *isa_vect() const; // Returns NULL if not a Vector const TypePtr *is_ptr() const; // Asserts it is a ptr type const TypePtr *isa_ptr() const; // Returns NULL if not ptr type const TypeRawPtr *isa_rawptr() const; // NOT Java oop @@ -574,6 +585,69 @@ public: #endif }; +//------------------------------TypeVect--------------------------------------- +// Class of Vector Types +class TypeVect : public Type { + const Type* _elem; // Vector's element type + const uint _length; // Elements in vector (power of 2) + +protected: + TypeVect(TYPES t, const Type* elem, uint length) : Type(t), + _elem(elem), _length(length) {} + +public: + const Type* element_type() const { return _elem; } + BasicType element_basic_type() const { return _elem->array_element_basic_type(); } + uint length() const { return _length; } + uint length_in_bytes() const { + return _length * type2aelembytes(element_basic_type()); + } + + virtual bool eq(const Type *t) const; + virtual int hash() const; // Type specific hashing + virtual bool singleton(void) const; // TRUE if type is a singleton + virtual bool empty(void) const; // TRUE if type is vacuous + + static const TypeVect *make(const BasicType elem_bt, uint length) { + // Use bottom primitive type. + return make(get_const_basic_type(elem_bt), length); + } + // Used directly by Replicate nodes to construct singleton vector. + static const TypeVect *make(const Type* elem, uint length); + + virtual const Type *xmeet( const Type *t) const; + virtual const Type *xdual() const; // Compute dual right now. + + static const TypeVect *VECTS; + static const TypeVect *VECTD; + static const TypeVect *VECTX; + static const TypeVect *VECTY; + +#ifndef PRODUCT + virtual void dump2(Dict &d, uint, outputStream *st) const; // Specialized per-Type dumping +#endif +}; + +class TypeVectS : public TypeVect { + friend class TypeVect; + TypeVectS(const Type* elem, uint length) : TypeVect(VectorS, elem, length) {} +}; + +class TypeVectD : public TypeVect { + friend class TypeVect; + TypeVectD(const Type* elem, uint length) : TypeVect(VectorD, elem, length) {} +}; + +class TypeVectX : public TypeVect { + friend class TypeVect; + TypeVectX(const Type* elem, uint length) : TypeVect(VectorX, elem, length) {} +}; + +class TypeVectY : public TypeVect { + friend class TypeVect; + TypeVectY(const Type* elem, uint length) : TypeVect(VectorY, elem, length) {} +}; + //------------------------------TypePtr---------------------------------------- // Class of machine Pointer Types: raw data, instances or arrays. // If the _base enum is AnyPtr, then this refers to all of the above. @@ -1113,6 +1187,15 @@ inline const TypeAry *Type::is_ary() const { return (TypeAry*)this; } +inline const TypeVect *Type::is_vect() const { + assert( _base >= VectorS && _base <= VectorY, "Not a Vector" ); + return (TypeVect*)this; +} + +inline const TypeVect *Type::isa_vect() const { + return (_base >= VectorS && _base <= VectorY) ? (TypeVect*)this : NULL; +} + inline const TypePtr *Type::is_ptr() const { // AnyPtr is the first Ptr and KlassPtr the last, with no non-ptrs between. assert(_base >= AnyPtr && _base <= KlassPtr, "Not a pointer"); diff --git a/hotspot/src/share/vm/opto/vectornode.cpp b/hotspot/src/share/vm/opto/vectornode.cpp index 885a1c89839..c786754cd08 100644 --- a/hotspot/src/share/vm/opto/vectornode.cpp +++ b/hotspot/src/share/vm/opto/vectornode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,147 +28,16 @@ //------------------------------VectorNode-------------------------------------- -// Return vector type for an element type and vector length. -const Type* VectorNode::vect_type(BasicType elt_bt, uint len) { - assert(len <= VectorNode::max_vlen(elt_bt), "len in range"); - switch(elt_bt) { - case T_BOOLEAN: - case T_BYTE: - switch(len) { - case 2: return TypeInt::CHAR; - case 4: return TypeInt::INT; - case 8: return TypeLong::LONG; - } - break; - case T_CHAR: - case T_SHORT: - switch(len) { - case 2: return TypeInt::INT; - case 4: return TypeLong::LONG; - } - break; - case T_INT: - switch(len) { - case 2: return TypeLong::LONG; - } - break; - case T_LONG: - break; - case T_FLOAT: - switch(len) { - case 2: return Type::DOUBLE; - } - break; - case T_DOUBLE: - break; - } - ShouldNotReachHere(); - return NULL; -} - -// Scalar promotion -VectorNode* VectorNode::scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - assert(vlen <= VectorNode::max_vlen(bt), "vlen in range"); - switch (bt) { - case T_BOOLEAN: - case T_BYTE: - if (vlen == 16) return new (C, 2) Replicate16BNode(s); - if (vlen == 8) return new (C, 2) Replicate8BNode(s); - if (vlen == 4) return new (C, 2) Replicate4BNode(s); - break; - case T_CHAR: - if (vlen == 8) return new (C, 2) Replicate8CNode(s); - if (vlen == 4) return new (C, 2) Replicate4CNode(s); - if (vlen == 2) return new (C, 2) Replicate2CNode(s); - break; - case T_SHORT: - if (vlen == 8) return new (C, 2) Replicate8SNode(s); - if (vlen == 4) return new (C, 2) Replicate4SNode(s); - if (vlen == 2) return new (C, 2) Replicate2SNode(s); - break; - case T_INT: - if (vlen == 4) return new (C, 2) Replicate4INode(s); - if (vlen == 2) return new (C, 2) Replicate2INode(s); - break; - case T_LONG: - if (vlen == 2) return new (C, 2) Replicate2LNode(s); - break; - case T_FLOAT: - if (vlen == 4) return new (C, 2) Replicate4FNode(s); - if (vlen == 2) return new (C, 2) Replicate2FNode(s); - break; - case T_DOUBLE: - if (vlen == 2) return new (C, 2) Replicate2DNode(s); - break; - } - ShouldNotReachHere(); - return NULL; -} - -// Return initial Pack node. Additional operands added with add_opd() calls. -PackNode* PackNode::make(Compile* C, Node* s, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - switch (bt) { - case T_BOOLEAN: - case T_BYTE: - return new (C, 2) PackBNode(s); - case T_CHAR: - return new (C, 2) PackCNode(s); - case T_SHORT: - return new (C, 2) PackSNode(s); - case T_INT: - return new (C, 2) PackINode(s); - case T_LONG: - return new (C, 2) PackLNode(s); - case T_FLOAT: - return new (C, 2) PackFNode(s); - case T_DOUBLE: - return new (C, 2) PackDNode(s); - } - ShouldNotReachHere(); - return NULL; -} - -// Create a binary tree form for Packs. [lo, hi) (half-open) range -Node* PackNode::binaryTreePack(Compile* C, int lo, int hi) { - int ct = hi - lo; - assert(is_power_of_2(ct), "power of 2"); - int mid = lo + ct/2; - Node* n1 = ct == 2 ? in(lo) : binaryTreePack(C, lo, mid); - Node* n2 = ct == 2 ? in(lo+1) : binaryTreePack(C, mid, hi ); - int rslt_bsize = ct * type2aelembytes(elt_basic_type()); - if (bottom_type()->is_floatingpoint()) { - switch (rslt_bsize) { - case 8: return new (C, 3) PackFNode(n1, n2); - case 16: return new (C, 3) PackDNode(n1, n2); - } - } else { - assert(bottom_type()->isa_int() || bottom_type()->isa_long(), "int or long"); - switch (rslt_bsize) { - case 2: return new (C, 3) Pack2x1BNode(n1, n2); - case 4: return new (C, 3) Pack2x2BNode(n1, n2); - case 8: return new (C, 3) PackINode(n1, n2); - case 16: return new (C, 3) PackLNode(n1, n2); - } - } - ShouldNotReachHere(); - return NULL; -} - // Return the vector operator for the specified scalar operation -// and vector length. One use is to check if the code generator +// and vector length. Also used to check if the code generator // supports the vector operation. -int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - if (!(is_power_of_2(vlen) && vlen <= max_vlen(bt))) - return 0; // unimplemented +int VectorNode::opcode(int sopc, uint vlen, BasicType bt) { switch (sopc) { case Op_AddI: switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_AddVB; - case T_CHAR: return Op_AddVC; + case T_CHAR: case T_SHORT: return Op_AddVS; case T_INT: return Op_AddVI; } @@ -186,7 +55,7 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_SubVB; - case T_CHAR: return Op_SubVC; + case T_CHAR: case T_SHORT: return Op_SubVS; case T_INT: return Op_SubVI; } @@ -216,18 +85,18 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_LShiftVB; - case T_CHAR: return Op_LShiftVC; + case T_CHAR: case T_SHORT: return Op_LShiftVS; case T_INT: return Op_LShiftVI; } ShouldNotReachHere(); - case Op_URShiftI: + case Op_RShiftI: switch (bt) { case T_BOOLEAN: - case T_BYTE: return Op_URShiftVB; - case T_CHAR: return Op_URShiftVC; - case T_SHORT: return Op_URShiftVS; - case T_INT: return Op_URShiftVI; + case T_BYTE: return Op_RShiftVB; + case T_CHAR: + case T_SHORT: return Op_RShiftVS; + case T_INT: return Op_RShiftVI; } ShouldNotReachHere(); case Op_AndI: @@ -241,13 +110,14 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { return Op_XorV; case Op_LoadB: + case Op_LoadUB: case Op_LoadUS: case Op_LoadS: case Op_LoadI: case Op_LoadL: case Op_LoadF: case Op_LoadD: - return VectorLoadNode::opcode(sopc, vlen); + return Op_LoadVector; case Op_StoreB: case Op_StoreC: @@ -255,211 +125,170 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { case Op_StoreL: case Op_StoreF: case Op_StoreD: - return VectorStoreNode::opcode(sopc, vlen); + return Op_StoreVector; } return 0; // Unimplemented } -// Helper for above. -int VectorLoadNode::opcode(int sopc, uint vlen) { - switch (sopc) { - case Op_LoadB: - switch (vlen) { - case 2: return 0; // Unimplemented - case 4: return Op_Load4B; - case 8: return Op_Load8B; - case 16: return Op_Load16B; - } - break; - case Op_LoadUS: - switch (vlen) { - case 2: return Op_Load2C; - case 4: return Op_Load4C; - case 8: return Op_Load8C; - } - break; - case Op_LoadS: - switch (vlen) { - case 2: return Op_Load2S; - case 4: return Op_Load4S; - case 8: return Op_Load8S; - } - break; - case Op_LoadI: - switch (vlen) { - case 2: return Op_Load2I; - case 4: return Op_Load4I; - } - break; - case Op_LoadL: - if (vlen == 2) return Op_Load2L; - break; - case Op_LoadF: - switch (vlen) { - case 2: return Op_Load2F; - case 4: return Op_Load4F; - } - break; - case Op_LoadD: - if (vlen == 2) return Op_Load2D; - break; +bool VectorNode::implemented(int opc, uint vlen, BasicType bt) { + if (is_java_primitive(bt) && + (vlen > 1) && is_power_of_2(vlen) && + Matcher::vector_size_supported(bt, vlen)) { + int vopc = VectorNode::opcode(opc, vlen, bt); + return vopc > 0 && Matcher::has_match_rule(vopc); } - return 0; // Unimplemented -} - -// Helper for above -int VectorStoreNode::opcode(int sopc, uint vlen) { - switch (sopc) { - case Op_StoreB: - switch (vlen) { - case 2: return 0; // Unimplemented - case 4: return Op_Store4B; - case 8: return Op_Store8B; - case 16: return Op_Store16B; - } - break; - case Op_StoreC: - switch (vlen) { - case 2: return Op_Store2C; - case 4: return Op_Store4C; - case 8: return Op_Store8C; - } - break; - case Op_StoreI: - switch (vlen) { - case 2: return Op_Store2I; - case 4: return Op_Store4I; - } - break; - case Op_StoreL: - if (vlen == 2) return Op_Store2L; - break; - case Op_StoreF: - switch (vlen) { - case 2: return Op_Store2F; - case 4: return Op_Store4F; - } - break; - case Op_StoreD: - if (vlen == 2) return Op_Store2D; - break; - } - return 0; // Unimplemented + return false; } // Return the vector version of a scalar operation node. -VectorNode* VectorNode::make(Compile* C, int sopc, Node* n1, Node* n2, uint vlen, const Type* opd_t) { - int vopc = opcode(sopc, vlen, opd_t); +VectorNode* VectorNode::make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + int vopc = VectorNode::opcode(opc, vlen, bt); switch (vopc) { - case Op_AddVB: return new (C, 3) AddVBNode(n1, n2, vlen); - case Op_AddVC: return new (C, 3) AddVCNode(n1, n2, vlen); - case Op_AddVS: return new (C, 3) AddVSNode(n1, n2, vlen); - case Op_AddVI: return new (C, 3) AddVINode(n1, n2, vlen); - case Op_AddVL: return new (C, 3) AddVLNode(n1, n2, vlen); - case Op_AddVF: return new (C, 3) AddVFNode(n1, n2, vlen); - case Op_AddVD: return new (C, 3) AddVDNode(n1, n2, vlen); + case Op_AddVB: return new (C, 3) AddVBNode(n1, n2, vt); + case Op_AddVS: return new (C, 3) AddVSNode(n1, n2, vt); + case Op_AddVI: return new (C, 3) AddVINode(n1, n2, vt); + case Op_AddVL: return new (C, 3) AddVLNode(n1, n2, vt); + case Op_AddVF: return new (C, 3) AddVFNode(n1, n2, vt); + case Op_AddVD: return new (C, 3) AddVDNode(n1, n2, vt); - case Op_SubVB: return new (C, 3) SubVBNode(n1, n2, vlen); - case Op_SubVC: return new (C, 3) SubVCNode(n1, n2, vlen); - case Op_SubVS: return new (C, 3) SubVSNode(n1, n2, vlen); - case Op_SubVI: return new (C, 3) SubVINode(n1, n2, vlen); - case Op_SubVL: return new (C, 3) SubVLNode(n1, n2, vlen); - case Op_SubVF: return new (C, 3) SubVFNode(n1, n2, vlen); - case Op_SubVD: return new (C, 3) SubVDNode(n1, n2, vlen); + case Op_SubVB: return new (C, 3) SubVBNode(n1, n2, vt); + case Op_SubVS: return new (C, 3) SubVSNode(n1, n2, vt); + case Op_SubVI: return new (C, 3) SubVINode(n1, n2, vt); + case Op_SubVL: return new (C, 3) SubVLNode(n1, n2, vt); + case Op_SubVF: return new (C, 3) SubVFNode(n1, n2, vt); + case Op_SubVD: return new (C, 3) SubVDNode(n1, n2, vt); - case Op_MulVF: return new (C, 3) MulVFNode(n1, n2, vlen); - case Op_MulVD: return new (C, 3) MulVDNode(n1, n2, vlen); + case Op_MulVF: return new (C, 3) MulVFNode(n1, n2, vt); + case Op_MulVD: return new (C, 3) MulVDNode(n1, n2, vt); - case Op_DivVF: return new (C, 3) DivVFNode(n1, n2, vlen); - case Op_DivVD: return new (C, 3) DivVDNode(n1, n2, vlen); + case Op_DivVF: return new (C, 3) DivVFNode(n1, n2, vt); + case Op_DivVD: return new (C, 3) DivVDNode(n1, n2, vt); - case Op_LShiftVB: return new (C, 3) LShiftVBNode(n1, n2, vlen); - case Op_LShiftVC: return new (C, 3) LShiftVCNode(n1, n2, vlen); - case Op_LShiftVS: return new (C, 3) LShiftVSNode(n1, n2, vlen); - case Op_LShiftVI: return new (C, 3) LShiftVINode(n1, n2, vlen); + case Op_LShiftVB: return new (C, 3) LShiftVBNode(n1, n2, vt); + case Op_LShiftVS: return new (C, 3) LShiftVSNode(n1, n2, vt); + case Op_LShiftVI: return new (C, 3) LShiftVINode(n1, n2, vt); - case Op_URShiftVB: return new (C, 3) URShiftVBNode(n1, n2, vlen); - case Op_URShiftVC: return new (C, 3) URShiftVCNode(n1, n2, vlen); - case Op_URShiftVS: return new (C, 3) URShiftVSNode(n1, n2, vlen); - case Op_URShiftVI: return new (C, 3) URShiftVINode(n1, n2, vlen); + case Op_RShiftVB: return new (C, 3) RShiftVBNode(n1, n2, vt); + case Op_RShiftVS: return new (C, 3) RShiftVSNode(n1, n2, vt); + case Op_RShiftVI: return new (C, 3) RShiftVINode(n1, n2, vt); - case Op_AndV: return new (C, 3) AndVNode(n1, n2, vlen, opd_t->array_element_basic_type()); - case Op_OrV: return new (C, 3) OrVNode (n1, n2, vlen, opd_t->array_element_basic_type()); - case Op_XorV: return new (C, 3) XorVNode(n1, n2, vlen, opd_t->array_element_basic_type()); + case Op_AndV: return new (C, 3) AndVNode(n1, n2, vt); + case Op_OrV: return new (C, 3) OrVNode (n1, n2, vt); + case Op_XorV: return new (C, 3) XorVNode(n1, n2, vt); } ShouldNotReachHere(); return NULL; + +} + +// Scalar promotion +VectorNode* VectorNode::scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t) { + BasicType bt = opd_t->array_element_basic_type(); + const TypeVect* vt = opd_t->singleton() ? TypeVect::make(opd_t, vlen) + : TypeVect::make(bt, vlen); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, 2) ReplicateBNode(s, vt); + case T_CHAR: + case T_SHORT: + return new (C, 2) ReplicateSNode(s, vt); + case T_INT: + return new (C, 2) ReplicateINode(s, vt); + case T_LONG: + return new (C, 2) ReplicateLNode(s, vt); + case T_FLOAT: + return new (C, 2) ReplicateFNode(s, vt); + case T_DOUBLE: + return new (C, 2) ReplicateDNode(s, vt); + } + ShouldNotReachHere(); + return NULL; +} + +// Return initial Pack node. Additional operands added with add_opd() calls. +PackNode* PackNode::make(Compile* C, Node* s, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, vlen+1) PackBNode(s, vt); + case T_CHAR: + case T_SHORT: + return new (C, vlen+1) PackSNode(s, vt); + case T_INT: + return new (C, vlen+1) PackINode(s, vt); + case T_LONG: + return new (C, vlen+1) PackLNode(s, vt); + case T_FLOAT: + return new (C, vlen+1) PackFNode(s, vt); + case T_DOUBLE: + return new (C, vlen+1) PackDNode(s, vt); + } + ShouldNotReachHere(); + return NULL; +} + +// Create a binary tree form for Packs. [lo, hi) (half-open) range +Node* PackNode::binaryTreePack(Compile* C, int lo, int hi) { + int ct = hi - lo; + assert(is_power_of_2(ct), "power of 2"); + if (ct == 2) { + PackNode* pk = PackNode::make(C, in(lo), 2, vect_type()->element_basic_type()); + pk->add_opd(1, in(lo+1)); + return pk; + + } else { + int mid = lo + ct/2; + Node* n1 = binaryTreePack(C, lo, mid); + Node* n2 = binaryTreePack(C, mid, hi ); + + BasicType bt = vect_type()->element_basic_type(); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, 3) PackSNode(n1, n2, TypeVect::make(T_SHORT, 2)); + case T_CHAR: + case T_SHORT: + return new (C, 3) PackINode(n1, n2, TypeVect::make(T_INT, 2)); + case T_INT: + return new (C, 3) PackLNode(n1, n2, TypeVect::make(T_LONG, 2)); + case T_LONG: + return new (C, 3) Pack2LNode(n1, n2, TypeVect::make(T_LONG, 2)); + case T_FLOAT: + return new (C, 3) PackDNode(n1, n2, TypeVect::make(T_DOUBLE, 2)); + case T_DOUBLE: + return new (C, 3) Pack2DNode(n1, n2, TypeVect::make(T_DOUBLE, 2)); + } + ShouldNotReachHere(); + } + return NULL; } // Return the vector version of a scalar load node. -VectorLoadNode* VectorLoadNode::make(Compile* C, int opc, Node* ctl, Node* mem, - Node* adr, const TypePtr* atyp, uint vlen) { - int vopc = opcode(opc, vlen); - - switch(vopc) { - case Op_Load16B: return new (C, 3) Load16BNode(ctl, mem, adr, atyp); - case Op_Load8B: return new (C, 3) Load8BNode(ctl, mem, adr, atyp); - case Op_Load4B: return new (C, 3) Load4BNode(ctl, mem, adr, atyp); - - case Op_Load8C: return new (C, 3) Load8CNode(ctl, mem, adr, atyp); - case Op_Load4C: return new (C, 3) Load4CNode(ctl, mem, adr, atyp); - case Op_Load2C: return new (C, 3) Load2CNode(ctl, mem, adr, atyp); - - case Op_Load8S: return new (C, 3) Load8SNode(ctl, mem, adr, atyp); - case Op_Load4S: return new (C, 3) Load4SNode(ctl, mem, adr, atyp); - case Op_Load2S: return new (C, 3) Load2SNode(ctl, mem, adr, atyp); - - case Op_Load4I: return new (C, 3) Load4INode(ctl, mem, adr, atyp); - case Op_Load2I: return new (C, 3) Load2INode(ctl, mem, adr, atyp); - - case Op_Load2L: return new (C, 3) Load2LNode(ctl, mem, adr, atyp); - - case Op_Load4F: return new (C, 3) Load4FNode(ctl, mem, adr, atyp); - case Op_Load2F: return new (C, 3) Load2FNode(ctl, mem, adr, atyp); - - case Op_Load2D: return new (C, 3) Load2DNode(ctl, mem, adr, atyp); - } - ShouldNotReachHere(); +LoadVectorNode* LoadVectorNode::make(Compile* C, int opc, Node* ctl, Node* mem, + Node* adr, const TypePtr* atyp, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + return new (C, 3) LoadVectorNode(ctl, mem, adr, atyp, vt); return NULL; } // Return the vector version of a scalar store node. -VectorStoreNode* VectorStoreNode::make(Compile* C, int opc, Node* ctl, Node* mem, +StoreVectorNode* StoreVectorNode::make(Compile* C, int opc, Node* ctl, Node* mem, Node* adr, const TypePtr* atyp, Node* val, uint vlen) { - int vopc = opcode(opc, vlen); - - switch(vopc) { - case Op_Store16B: return new (C, 4) Store16BNode(ctl, mem, adr, atyp, val); - case Op_Store8B: return new (C, 4) Store8BNode(ctl, mem, adr, atyp, val); - case Op_Store4B: return new (C, 4) Store4BNode(ctl, mem, adr, atyp, val); - - case Op_Store8C: return new (C, 4) Store8CNode(ctl, mem, adr, atyp, val); - case Op_Store4C: return new (C, 4) Store4CNode(ctl, mem, adr, atyp, val); - case Op_Store2C: return new (C, 4) Store2CNode(ctl, mem, adr, atyp, val); - - case Op_Store4I: return new (C, 4) Store4INode(ctl, mem, adr, atyp, val); - case Op_Store2I: return new (C, 4) Store2INode(ctl, mem, adr, atyp, val); - - case Op_Store2L: return new (C, 4) Store2LNode(ctl, mem, adr, atyp, val); - - case Op_Store4F: return new (C, 4) Store4FNode(ctl, mem, adr, atyp, val); - case Op_Store2F: return new (C, 4) Store2FNode(ctl, mem, adr, atyp, val); - - case Op_Store2D: return new (C, 4) Store2DNode(ctl, mem, adr, atyp, val); - } - ShouldNotReachHere(); - return NULL; + return new (C, 4) StoreVectorNode(ctl, mem, adr, atyp, val); } // Extract a scalar element of vector. -Node* ExtractNode::make(Compile* C, Node* v, uint position, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - assert(position < VectorNode::max_vlen(bt), "pos in range"); +Node* ExtractNode::make(Compile* C, Node* v, uint position, BasicType bt) { + assert((int)position < Matcher::max_vector_size(bt), "pos in range"); ConINode* pos = ConINode::make(C, (int)position); switch (bt) { case T_BOOLEAN: + return new (C, 3) ExtractUBNode(v, pos); case T_BYTE: return new (C, 3) ExtractBNode(v, pos); case T_CHAR: @@ -478,3 +307,4 @@ Node* ExtractNode::make(Compile* C, Node* v, uint position, const Type* opd_t) { ShouldNotReachHere(); return NULL; } + diff --git a/hotspot/src/share/vm/opto/vectornode.hpp b/hotspot/src/share/vm/opto/vectornode.hpp index 7d1905c7fb5..602ee94c54c 100644 --- a/hotspot/src/share/vm/opto/vectornode.hpp +++ b/hotspot/src/share/vm/opto/vectornode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,48 +31,32 @@ //------------------------------VectorNode-------------------------------------- // Vector Operation -class VectorNode : public Node { - virtual uint size_of() const { return sizeof(*this); } - protected: - uint _length; // vector length - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - - static const Type* vect_type(BasicType elt_bt, uint len); - static const Type* vect_type(const Type* elt_type, uint len) { - return vect_type(elt_type->array_element_basic_type(), len); - } - +class VectorNode : public TypeNode { public: - friend class VectorLoadNode; // For vect_type - friend class VectorStoreNode; // ditto. - VectorNode(Node* n1, uint vlen) : Node(NULL, n1), _length(vlen) { + VectorNode(Node* n1, const TypeVect* vt) : TypeNode(vt, 2) { init_class_id(Class_Vector); + init_req(1, n1); } - VectorNode(Node* n1, Node* n2, uint vlen) : Node(NULL, n1, n2), _length(vlen) { + VectorNode(Node* n1, Node* n2, const TypeVect* vt) : TypeNode(vt, 3) { init_class_id(Class_Vector); + init_req(1, n1); + init_req(2, n2); } + + const TypeVect* vect_type() const { return type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - uint length() const { return _length; } // Vector length - - static uint max_vlen(BasicType bt) { // max vector length - return (uint)(Matcher::vector_width_in_bytes() / type2aelembytes(bt)); - } - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return vect_type(elt_basic_type(), length()); } - - virtual const Type *bottom_type() const { return vect_type(); } - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } - - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen, const Type* opd_t); + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); } static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t); - static VectorNode* make(Compile* C, int sopc, Node* n1, Node* n2, uint vlen, const Type* elt_t); + static VectorNode* make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt); + + static int opcode(int opc, uint vlen, BasicType bt); + static bool implemented(int opc, uint vlen, BasicType bt); }; @@ -81,981 +65,393 @@ class VectorNode : public Node { //------------------------------AddVBNode--------------------------------------- // Vector add byte class AddVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - AddVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------AddVCNode--------------------------------------- -// Vector add char -class AddVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - AddVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVSNode--------------------------------------- -// Vector add short +// Vector add char/short class AddVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - AddVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVINode--------------------------------------- // Vector add int class AddVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - AddVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVLNode--------------------------------------- // Vector add long class AddVLNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - AddVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVFNode--------------------------------------- // Vector add float class AddVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - AddVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVDNode--------------------------------------- // Vector add double class AddVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - AddVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVBNode--------------------------------------- // Vector subtract byte class SubVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - SubVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------SubVCNode--------------------------------------- -// Vector subtract char -class SubVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - SubVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVSNode--------------------------------------- // Vector subtract short class SubVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - SubVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVINode--------------------------------------- // Vector subtract int class SubVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - SubVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVLNode--------------------------------------- // Vector subtract long class SubVLNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - SubVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVFNode--------------------------------------- // Vector subtract float class SubVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - SubVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVDNode--------------------------------------- // Vector subtract double class SubVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - SubVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------MulVFNode--------------------------------------- // Vector multiply float class MulVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - MulVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + MulVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------MulVDNode--------------------------------------- // Vector multiply double class MulVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - MulVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + MulVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------DivVFNode--------------------------------------- // Vector divide float class DivVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - DivVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + DivVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------DivVDNode--------------------------------------- // Vector Divide double class DivVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - DivVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + DivVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVBNode--------------------------------------- // Vector lshift byte class LShiftVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - LShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------LShiftVCNode--------------------------------------- -// Vector lshift chars -class LShiftVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - LShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVSNode--------------------------------------- // Vector lshift shorts class LShiftVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - LShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVINode--------------------------------------- // Vector lshift ints class LShiftVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - LShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVBNode--------------------------------------- // Vector urshift bytes -class URShiftVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +class RShiftVBNode : public VectorNode { public: - URShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------URShiftVCNode--------------------------------------- -// Vector urshift char -class URShiftVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - URShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVSNode--------------------------------------- // Vector urshift shorts -class URShiftVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } +class RShiftVSNode : public VectorNode { public: - URShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVINode--------------------------------------- // Vector urshift ints -class URShiftVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } +class RShiftVINode : public VectorNode { public: - URShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AndVNode--------------------------------------- // Vector and class AndVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - AndVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + AndVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------OrVNode--------------------------------------- // Vector or class OrVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - OrVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------XorVNode--------------------------------------- // Vector xor class XorVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - XorVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; -//================================= M E M O R Y ================================== - - -//------------------------------VectorLoadNode-------------------------------------- -// Vector Load from memory -class VectorLoadNode : public LoadNode { - virtual uint size_of() const { return sizeof(*this); } - - protected: - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - // For use in constructor - static const Type* vect_type(const Type* elt_type, uint len) { - return VectorNode::vect_type(elt_type, len); - } +//================================= M E M O R Y =============================== +//------------------------------LoadVectorNode--------------------------------- +// Load Vector from memory +class LoadVectorNode : public LoadNode { public: - VectorLoadNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *rt) - : LoadNode(c,mem,adr,at,rt) { - init_class_id(Class_VectorLoad); + LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt) + : LoadNode(c, mem, adr, at, vt) { + init_class_id(Class_LoadVector); } + + const TypeVect* vect_type() const { return type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - virtual uint length() const = 0; // Vector length - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); } - - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); } virtual BasicType memory_type() const { return T_VOID; } - virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); } + virtual int memory_size() const { return vect_type()->length_in_bytes(); } - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen); + virtual int store_Opcode() const { return Op_StoreVector; } - static VectorLoadNode* make(Compile* C, int opc, Node* ctl, Node* mem, - Node* adr, const TypePtr* atyp, uint vlen); + static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem, + Node* adr, const TypePtr* atyp, uint vlen, BasicType bt); }; -//------------------------------Load16BNode-------------------------------------- -// Vector load of 16 bytes (8bits signed) from memory -class Load16BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------StoreVectorNode-------------------------------- +// Store Vector to memory +class StoreVectorNode : public StoreNode { public: - Load16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,16)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store16B; } - virtual uint length() const { return 16; } -}; - -//------------------------------Load8BNode-------------------------------------- -// Vector load of 8 bytes (8bits signed) from memory -class Load8BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Load8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8B; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4BNode-------------------------------------- -// Vector load of 4 bytes (8bits signed) from memory -class Load4BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Load4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4B; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load8CNode-------------------------------------- -// Vector load of 8 chars (16bits unsigned) from memory -class Load8CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8C; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4CNode-------------------------------------- -// Vector load of 4 chars (16bits unsigned) from memory -class Load4CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4C; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2CNode-------------------------------------- -// Vector load of 2 chars (16bits unsigned) from memory -class Load2CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2C; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load8SNode-------------------------------------- -// Vector load of 8 shorts (16bits signed) from memory -class Load8SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load8SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8C; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4SNode-------------------------------------- -// Vector load of 4 shorts (16bits signed) from memory -class Load4SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load4SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4C; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2SNode-------------------------------------- -// Vector load of 2 shorts (16bits signed) from memory -class Load2SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load2SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2C; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load4INode-------------------------------------- -// Vector load of 4 integers (32bits signed) from memory -class Load4INode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Load4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4I; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2INode-------------------------------------- -// Vector load of 2 integers (32bits signed) from memory -class Load2INode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Load2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2I; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load2LNode-------------------------------------- -// Vector load of 2 longs (64bits signed) from memory -class Load2LNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Load2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeLong *tl = TypeLong::LONG) - : VectorLoadNode(c,mem,adr,at,vect_type(tl,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2L; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load4FNode-------------------------------------- -// Vector load of 4 floats (32bits) from memory -class Load4FNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Load4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT) - : VectorLoadNode(c,mem,adr,at,vect_type(t,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4F; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2FNode-------------------------------------- -// Vector load of 2 floats (32bits) from memory -class Load2FNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Load2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT) - : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2F; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load2DNode-------------------------------------- -// Vector load of 2 doubles (64bits) from memory -class Load2DNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Load2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::DOUBLE) - : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2D; } - virtual uint length() const { return 2; } -}; - - -//------------------------------VectorStoreNode-------------------------------------- -// Vector Store to memory -class VectorStoreNode : public StoreNode { - virtual uint size_of() const { return sizeof(*this); } - - protected: - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - - public: - VectorStoreNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : StoreNode(c,mem,adr,at,val) { - init_class_id(Class_VectorStore); + StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) + : StoreNode(c, mem, adr, at, val) { + assert(val->is_Vector() || val->is_LoadVector(), "sanity"); + init_class_id(Class_StoreVector); } + + const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - virtual uint length() const = 0; // Vector length - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); } - - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); } virtual BasicType memory_type() const { return T_VOID; } - virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); } + virtual int memory_size() const { return vect_type()->length_in_bytes(); } - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen); - - static VectorStoreNode* make(Compile* C, int opc, Node* ctl, Node* mem, + static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem, Node* adr, const TypePtr* atyp, Node* val, uint vlen); }; -//------------------------------Store16BNode-------------------------------------- -// Vector store of 16 bytes (8bits signed) to memory -class Store16BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Store16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 16; } -}; -//------------------------------Store8BNode-------------------------------------- -// Vector store of 8 bytes (8bits signed) to memory -class Store8BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Store8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 8; } -}; +//=========================Promote_Scalar_to_Vector============================ -//------------------------------Store4BNode-------------------------------------- -// Vector store of 4 bytes (8bits signed) to memory -class Store4BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateBNode--------------------------------- +// Replicate byte scalar to be vector +class ReplicateBNode : public VectorNode { public: - Store4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store8CNode-------------------------------------- -// Vector store of 8 chars (16bits signed/unsigned) to memory -class Store8CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 8; } -}; - -//------------------------------Store4CNode-------------------------------------- -// Vector store of 4 chars (16bits signed/unsigned) to memory -class Store4CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2CNode-------------------------------------- -// Vector store of 2 chars (16bits signed/unsigned) to memory -class Store2CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store4INode-------------------------------------- -// Vector store of 4 integers (32bits signed) to memory -class Store4INode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Store4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2INode-------------------------------------- -// Vector store of 2 integers (32bits signed) to memory -class Store2INode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Store2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store2LNode-------------------------------------- -// Vector store of 2 longs (64bits signed) to memory -class Store2LNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Store2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store4FNode-------------------------------------- -// Vector store of 4 floats (32bits) to memory -class Store4FNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Store4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2FNode-------------------------------------- -// Vector store of 2 floats (32bits) to memory -class Store2FNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Store2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store2DNode-------------------------------------- -// Vector store of 2 doubles (64bits) to memory -class Store2DNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Store2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//=========================Promote_Scalar_to_Vector==================================== - -//------------------------------Replicate16BNode--------------------------------------- -// Replicate byte scalar to be vector of 16 bytes -class Replicate16BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Replicate16BNode(Node* in1) : VectorNode(in1, 16) {} + ReplicateBNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8BNode--------------------------------------- -// Replicate byte scalar to be vector of 8 bytes -class Replicate8BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateSNode--------------------------------- +// Replicate short scalar to be vector +class ReplicateSNode : public VectorNode { public: - Replicate8BNode(Node* in1) : VectorNode(in1, 8) {} + ReplicateSNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate4BNode--------------------------------------- -// Replicate byte scalar to be vector of 4 bytes -class Replicate4BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateINode--------------------------------- +// Replicate int scalar to be vector +class ReplicateINode : public VectorNode { public: - Replicate4BNode(Node* in1) : VectorNode(in1, 4) {} + ReplicateINode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8CNode--------------------------------------- -// Replicate char scalar to be vector of 8 chars -class Replicate8CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateLNode--------------------------------- +// Replicate long scalar to be vector +class ReplicateLNode : public VectorNode { public: - Replicate8CNode(Node* in1) : VectorNode(in1, 8) {} + ReplicateLNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate4CNode--------------------------------------- -// Replicate char scalar to be vector of 4 chars -class Replicate4CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateFNode--------------------------------- +// Replicate float scalar to be vector +class ReplicateFNode : public VectorNode { public: - Replicate4CNode(Node* in1) : VectorNode(in1, 4) {} + ReplicateFNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate2CNode--------------------------------------- -// Replicate char scalar to be vector of 2 chars -class Replicate2CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateDNode--------------------------------- +// Replicate double scalar to be vector +class ReplicateDNode : public VectorNode { public: - Replicate2CNode(Node* in1) : VectorNode(in1, 2) {} + ReplicateDNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8SNode--------------------------------------- -// Replicate short scalar to be vector of 8 shorts -class Replicate8SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate8SNode(Node* in1) : VectorNode(in1, 8) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4SNode--------------------------------------- -// Replicate short scalar to be vector of 4 shorts -class Replicate4SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate4SNode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2SNode--------------------------------------- -// Replicate short scalar to be vector of 2 shorts -class Replicate2SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate2SNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4INode--------------------------------------- -// Replicate int scalar to be vector of 4 ints -class Replicate4INode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Replicate4INode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2INode--------------------------------------- -// Replicate int scalar to be vector of 2 ints -class Replicate2INode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Replicate2INode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2LNode--------------------------------------- -// Replicate long scalar to be vector of 2 longs -class Replicate2LNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Replicate2LNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4FNode--------------------------------------- -// Replicate float scalar to be vector of 4 floats -class Replicate4FNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Replicate4FNode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2FNode--------------------------------------- -// Replicate float scalar to be vector of 2 floats -class Replicate2FNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Replicate2FNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2DNode--------------------------------------- -// Replicate double scalar to be vector of 2 doubles -class Replicate2DNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Replicate2DNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//========================Pack_Scalars_into_a_Vector============================== +//========================Pack_Scalars_into_a_Vector=========================== //------------------------------PackNode--------------------------------------- // Pack parent class (not for code generation). class PackNode : public VectorNode { public: - PackNode(Node* in1) : VectorNode(in1, 1) {} - PackNode(Node* in1, Node* n2) : VectorNode(in1, n2, 2) {} + PackNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} + PackNode(Node* in1, Node* n2, const TypeVect* vt) : VectorNode(in1, n2, vt) {} virtual int Opcode() const; - void add_opd(Node* n) { - add_req(n); - _length++; - assert(_length == req() - 1, "vector length matches edge count"); + void add_opd(uint i, Node* n) { + init_req(i+1, n); } // Create a binary tree form for Packs. [lo, hi) (half-open) range Node* binaryTreePack(Compile* C, int lo, int hi); - static PackNode* make(Compile* C, Node* s, const Type* elt_t); + static PackNode* make(Compile* C, Node* s, uint vlen, BasicType bt); }; //------------------------------PackBNode--------------------------------------- // Pack byte scalars into vector class PackBNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - PackBNode(Node* in1) : PackNode(in1) {} - virtual int Opcode() const; -}; - -//------------------------------PackCNode--------------------------------------- -// Pack char scalars into vector -class PackCNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - PackCNode(Node* in1) : PackNode(in1) {} + PackBNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} virtual int Opcode() const; }; //------------------------------PackSNode--------------------------------------- // Pack short scalars into a vector class PackSNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - PackSNode(Node* in1) : PackNode(in1) {} + PackSNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackSNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackINode--------------------------------------- // Pack integer scalars into a vector class PackINode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - PackINode(Node* in1) : PackNode(in1) {} - PackINode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackINode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackINode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackLNode--------------------------------------- // Pack long scalars into a vector class PackLNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - PackLNode(Node* in1) : PackNode(in1) {} - PackLNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackLNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackLNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} + virtual int Opcode() const; +}; + +//------------------------------Pack2LNode-------------------------------------- +// Pack 2 long scalars into a vector +class Pack2LNode : public PackNode { + public: + Pack2LNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackFNode--------------------------------------- // Pack float scalars into vector class PackFNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - PackFNode(Node* in1) : PackNode(in1) {} - PackFNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackFNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackFNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackDNode--------------------------------------- // Pack double scalars into a vector class PackDNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - PackDNode(Node* in1) : PackNode(in1) {} - PackDNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackDNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackDNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; -// The Pack2xN nodes assist code generation. They are created from -// Pack4C, etc. nodes in final_graph_reshape in the form of a -// balanced, binary tree. - -//------------------------------Pack2x1BNode----------------------------------------- -// Pack 2 1-byte integers into vector of 2 bytes -class Pack2x1BNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------Pack2DNode-------------------------------------- +// Pack 2 double scalars into a vector +class Pack2DNode : public PackNode { public: - Pack2x1BNode(Node *in1, Node* in2) : PackNode(in1, in2) {} + Pack2DNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegI; } }; -//------------------------------Pack2x2BNode--------------------------------------- -// Pack 2 2-byte integers into vector of 4 bytes -class Pack2x2BNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Pack2x2BNode(Node *in1, Node* in2) : PackNode(in1, in2) {} - virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegI; } -}; //========================Extract_Scalar_from_Vector=============================== @@ -1069,7 +465,7 @@ class ExtractNode : public Node { virtual int Opcode() const; uint pos() const { return in(2)->get_int(); } - static Node* make(Compile* C, Node* v, uint position, const Type* opd_t); + static Node* make(Compile* C, Node* v, uint position, BasicType bt); }; //------------------------------ExtractBNode--------------------------------------- @@ -1082,6 +478,16 @@ class ExtractBNode : public ExtractNode { virtual uint ideal_reg() const { return Op_RegI; } }; +//------------------------------ExtractUBNode-------------------------------------- +// Extract a boolean from a vector at position "pos" +class ExtractUBNode : public ExtractNode { + public: + ExtractUBNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} + virtual int Opcode() const; + virtual const Type *bottom_type() const { return TypeInt::INT; } + virtual uint ideal_reg() const { return Op_RegI; } +}; + //------------------------------ExtractCNode--------------------------------------- // Extract a char from a vector at position "pos" class ExtractCNode : public ExtractNode { diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp index 833f6f1810c..cf032489568 100644 --- a/hotspot/src/share/vm/prims/jni.cpp +++ b/hotspot/src/share/vm/prims/jni.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/classLoader.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" @@ -32,6 +33,7 @@ #ifndef SERIALGC #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #endif // SERIALGC +#include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "memory/gcLocker.inline.hpp" #include "memory/oopFactory.hpp" @@ -378,6 +380,7 @@ JNI_ENTRY(jclass, jni_DefineClass(JNIEnv *env, const char *name, jobject loaderR jclass cls = NULL; DT_RETURN_MARK(DefineClass, jclass, (const jclass&)cls); + TempNewSymbol class_name = NULL; // Since exceptions can be thrown, class initialization can take place // if name is NULL no check for class name in .class stream has to be made. if (name != NULL) { @@ -387,9 +390,8 @@ JNI_ENTRY(jclass, jni_DefineClass(JNIEnv *env, const char *name, jobject loaderR // into the constant pool. THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), name); } + class_name = SymbolTable::new_symbol(name, CHECK_NULL); } - TempNewSymbol class_name = SymbolTable::new_symbol(name, THREAD); - ResourceMark rm(THREAD); ClassFileStream st((u1*) buf, bufLen, NULL); Handle class_loader (THREAD, JNIHandles::resolve(loaderRef)); @@ -3269,7 +3271,7 @@ JNI_QUICK_ENTRY(const jchar*, jni_GetStringChars( int s_len = java_lang_String::length(s); typeArrayOop s_value = java_lang_String::value(s); int s_offset = java_lang_String::offset(s); - jchar* buf = NEW_C_HEAP_ARRAY(jchar, s_len + 1); // add one for zero termination + jchar* buf = NEW_C_HEAP_ARRAY(jchar, s_len + 1, mtInternal); // add one for zero termination if (s_len > 0) { memcpy(buf, s_value->char_at_addr(s_offset), sizeof(jchar)*s_len); } @@ -3362,7 +3364,7 @@ JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboole #endif /* USDT2 */ oop java_string = JNIHandles::resolve_non_null(string); size_t length = java_lang_String::utf8_length(java_string); - char* result = AllocateHeap(length + 1, "GetStringUTFChars"); + char* result = AllocateHeap(length + 1, mtInternal); java_lang_String::as_utf8_string(java_string, result, (int) length + 1); if (isCopy != NULL) *isCopy = JNI_TRUE; #ifndef USDT2 @@ -3618,7 +3620,7 @@ JNI_QUICK_ENTRY(ElementType*, \ * Avoid asserts in typeArrayOop. */ \ result = (ElementType*)get_bad_address(); \ } else { \ - result = NEW_C_HEAP_ARRAY(ElementType, len); \ + result = NEW_C_HEAP_ARRAY(ElementType, len, mtInternal); \ /* copy the array to the c chunk */ \ memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ } \ @@ -3655,7 +3657,7 @@ JNI_QUICK_ENTRY(ElementType*, \ * Avoid asserts in typeArrayOop. */ \ result = (ElementType*)get_bad_address(); \ } else { \ - result = NEW_C_HEAP_ARRAY(ElementType, len); \ + result = NEW_C_HEAP_ARRAY(ElementType, len, mtInternal); \ /* copy the array to the c chunk */ \ memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ } \ @@ -5053,6 +5055,7 @@ void execute_internal_vm_tests() { run_unit_test(arrayOopDesc::test_max_array_length()); run_unit_test(CollectedHeap::test_is_in()); run_unit_test(QuickSort::test_quick_sort()); + run_unit_test(AltHashing::test_alt_hash()); tty->print_cr("All internal VM tests passed"); } } diff --git a/hotspot/src/share/vm/prims/jniCheck.cpp b/hotspot/src/share/vm/prims/jniCheck.cpp index 3bf4ecd1a7f..7e30b58828f 100644 --- a/hotspot/src/share/vm/prims/jniCheck.cpp +++ b/hotspot/src/share/vm/prims/jniCheck.cpp @@ -1308,7 +1308,7 @@ JNI_ENTRY_CHECKED(const jchar *, assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringChars didn't return a copy as expected"); size_t len = UNCHECKED()->GetStringLength(env,str) + 1; // + 1 for NULL termination - jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), "checked_jni_GetStringChars"); + jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), mtInternal); *tagLocation = STRING_TAG; jchar* newResult = (jchar*) (tagLocation + 1); memcpy(newResult, result, len * sizeof(jchar)); @@ -1378,13 +1378,13 @@ JNI_ENTRY_CHECKED(const char *, assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringUTFChars didn't return a copy as expected"); size_t len = strlen(result) + 1; // + 1 for NULL termination - jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), "checked_jni_GetStringUTFChars"); + jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), mtInternal); *tagLocation = STRING_UTF_TAG; char* newResult = (char*) (tagLocation + 1); strcpy(newResult, result); // Avoiding call to UNCHECKED()->ReleaseStringUTFChars() since that will fire unexpected dtrace probes // Note that the dtrace arguments for the allocated memory will not match up with this solution. - FreeHeap((char*)result); + FreeHeap((char*)result, mtInternal); functionExit(env); return newResult; diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp index 3f097819e3d..a211004a3d4 100644 --- a/hotspot/src/share/vm/prims/jvm.cpp +++ b/hotspot/src/share/vm/prims/jvm.cpp @@ -35,6 +35,7 @@ #include "oops/fieldStreams.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayKlass.hpp" +#include "oops/methodOop.hpp" #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "prims/jvmtiExport.hpp" @@ -345,9 +346,13 @@ JVM_ENTRY(jobject, JVM_InitProperties(JNIEnv *env, jobject properties)) // Do this after setting user properties to prevent people // from setting the value with a -D option, as requested. { - char as_chars[256]; - jio_snprintf(as_chars, sizeof(as_chars), INTX_FORMAT, MaxDirectMemorySize); - PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars); + if (FLAG_IS_DEFAULT(MaxDirectMemorySize)) { + PUTPROP(props, "sun.nio.MaxDirectMemorySize", "-1"); + } else { + char as_chars[256]; + jio_snprintf(as_chars, sizeof(as_chars), UINTX_FORMAT, MaxDirectMemorySize); + PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars); + } } // JVM monitoring and management support @@ -2179,11 +2184,11 @@ JVM_QUICK_ENTRY(void, JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cls klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - typeArrayOop extable = methodOop(method)->exception_table(); - entry->start_pc = extable->int_at(entry_index * 4); - entry->end_pc = extable->int_at(entry_index * 4 + 1); - entry->handler_pc = extable->int_at(entry_index * 4 + 2); - entry->catchType = extable->int_at(entry_index * 4 + 3); + ExceptionTable extable((methodOop(method))); + entry->start_pc = extable.start_pc(entry_index); + entry->end_pc = extable.end_pc(entry_index); + entry->handler_pc = extable.handler_pc(entry_index); + entry->catchType = extable.catch_type_index(entry_index); JVM_END @@ -2192,7 +2197,7 @@ JVM_QUICK_ENTRY(jint, JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cl klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->exception_table()->length() / 4; + return methodOop(method)->exception_table_length(); JVM_END diff --git a/hotspot/src/share/vm/prims/jvm.h b/hotspot/src/share/vm/prims/jvm.h index a9b322c2ce1..a514f374a6f 100644 --- a/hotspot/src/share/vm/prims/jvm.h +++ b/hotspot/src/share/vm/prims/jvm.h @@ -634,7 +634,7 @@ JNIEXPORT jobject JNICALL JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused); /* - * sun.misc.AtomicLong + * java.util.concurrent.atomic.AtomicLong */ JNIEXPORT jboolean JNICALL JVM_SupportsCX8(void); diff --git a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp index d7dfea5a99e..82655695571 100644 --- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp +++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp @@ -191,15 +191,14 @@ void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) { } } - typeArrayHandle exception_table(thread(), const_method->exception_table()); - int exception_table_length = exception_table->length(); - int exception_table_entries = exception_table_length / 4; + ExceptionTable exception_table(method()); + int exception_table_length = exception_table.length(); int code_size = const_method->code_size(); int size = 2+2+4 + // max_stack, max_locals, code_length code_size + // code 2 + // exception_table_length - (2+2+2+2) * exception_table_entries + // exception_table + (2+2+2+2) * exception_table_length + // exception_table 2 + // attributes_count attr_size; // attributes @@ -209,12 +208,12 @@ void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) { write_u2(method->max_locals()); write_u4(code_size); copy_bytecodes(method, (unsigned char*)writeable_address(code_size)); - write_u2(exception_table_entries); - for (int index = 0; index < exception_table_length; ) { - write_u2(exception_table->int_at(index++)); - write_u2(exception_table->int_at(index++)); - write_u2(exception_table->int_at(index++)); - write_u2(exception_table->int_at(index++)); + write_u2(exception_table_length); + for (int index = 0; index < exception_table_length; index++) { + write_u2(exception_table.start_pc(index)); + write_u2(exception_table.end_pc(index)); + write_u2(exception_table.handler_pc(index)); + write_u2(exception_table.catch_type_index(index)); } write_u2(attr_count); if (line_num_cnt != 0) { @@ -268,14 +267,18 @@ void JvmtiClassFileReconstituter::write_source_file_attribute() { // JSR45| SourceDebugExtension_attribute { // JSR45| u2 attribute_name_index; // JSR45| u4 attribute_length; -// JSR45| u2 sourcefile_index; +// JSR45| u1 debug_extension[attribute_length]; // JSR45| } void JvmtiClassFileReconstituter::write_source_debug_extension_attribute() { assert(ikh()->source_debug_extension() != NULL, "caller must check"); write_attribute_name_index("SourceDebugExtension"); - write_u4(2); // always length 2 - write_u2(symbol_to_cpool_index(ikh()->source_debug_extension())); + int len = (int)strlen(ikh()->source_debug_extension()); + write_u4(len); + u1* ext = (u1*)ikh()->source_debug_extension(); + for (int i=0; i(50,true); + _global_code_blobs = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(50,true); // iterate over the stub code descriptors and put them in the list first. int index = 0; @@ -247,7 +247,7 @@ void JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nmethod *nm, int pcds_in_method; pcds_in_method = (nm->scopes_pcs_end() - nm->scopes_pcs_begin()); - map = NEW_C_HEAP_ARRAY(jvmtiAddrLocationMap, pcds_in_method); + map = NEW_C_HEAP_ARRAY(jvmtiAddrLocationMap, pcds_in_method, mtInternal); address scopes_data = nm->scopes_data_begin(); for( pcd = nm->scopes_pcs_begin(); pcd < nm->scopes_pcs_end(); ++pcd ) { diff --git a/hotspot/src/share/vm/prims/jvmtiEnv.cpp b/hotspot/src/share/vm/prims/jvmtiEnv.cpp index 46519bb5796..20f5cf83748 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1012,7 +1012,7 @@ JvmtiEnv::GetOwnedMonitorInfo(JavaThread* java_thread, jint* owned_monitor_count // growable array of jvmti monitors info on the C-heap GrowableArray *owned_monitors_list = - new (ResourceObj::C_HEAP) GrowableArray(1, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); uint32_t debug_bits = 0; if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { @@ -1057,7 +1057,7 @@ JvmtiEnv::GetOwnedMonitorStackDepthInfo(JavaThread* java_thread, jint* monitor_i // growable array of jvmti monitors info on the C-heap GrowableArray *owned_monitors_list = - new (ResourceObj::C_HEAP) GrowableArray(1, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); uint32_t debug_bits = 0; if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { @@ -2541,15 +2541,12 @@ JvmtiEnv::GetSourceDebugExtension(oop k_mirror, char** source_debug_extension_pt if (!Klass::cast(k)->oop_is_instance()) { return JVMTI_ERROR_ABSENT_INFORMATION; } - Symbol* sdeOop = instanceKlass::cast(k)->source_debug_extension(); - NULL_CHECK(sdeOop, JVMTI_ERROR_ABSENT_INFORMATION); + char* sde = instanceKlass::cast(k)->source_debug_extension(); + NULL_CHECK(sde, JVMTI_ERROR_ABSENT_INFORMATION); { - JavaThread* current_thread = JavaThread::current(); - ResourceMark rm(current_thread); - const char* sdecp = (const char*) sdeOop->as_C_string(); - *source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sdecp)+1); - strcpy(*source_debug_extension_ptr, sdecp); + *source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sde)+1); + strcpy(*source_debug_extension_ptr, sde); } } diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp index fd426422b13..2a6fd143b90 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp @@ -381,7 +381,7 @@ JvmtiEnvBase::set_native_method_prefixes(jint prefix_count, char** prefixes) { _native_method_prefixes = NULL; } else { // there are prefixes, allocate an array to hold them, and fill it - char** new_prefixes = (char**)os::malloc((prefix_count) * sizeof(char*)); + char** new_prefixes = (char**)os::malloc((prefix_count) * sizeof(char*), mtInternal); if (new_prefixes == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -1150,7 +1150,7 @@ JvmtiEnvBase::get_object_monitor_usage(JavaThread* calling_thread, jobject objec ResourceTracker::ResourceTracker(JvmtiEnv* env) { _env = env; - _allocations = new (ResourceObj::C_HEAP) GrowableArray(20, true); + _allocations = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(20, true); _failed = false; } ResourceTracker::~ResourceTracker() { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp index ba0374648e5..29604db13b7 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp @@ -52,7 +52,7 @@ class JvmtiTagMap; // done via JNI GetEnv() call. Multiple attachments are // allowed in jvmti. -class JvmtiEnvBase : public CHeapObj { +class JvmtiEnvBase : public CHeapObj { private: @@ -175,7 +175,7 @@ class JvmtiEnvBase : public CHeapObj { if (size == 0) { *mem_ptr = NULL; } else { - *mem_ptr = (unsigned char *)os::malloc((size_t)size); + *mem_ptr = (unsigned char *)os::malloc((size_t)size, mtInternal); if (*mem_ptr == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -185,7 +185,7 @@ class JvmtiEnvBase : public CHeapObj { jvmtiError deallocate(unsigned char* mem) { if (mem != NULL) { - os::free(mem); + os::free(mem, mtInternal); } return JVMTI_ERROR_NONE; } diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp index 9df767eb681..8e5214002c2 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp @@ -95,7 +95,7 @@ JvmtiFramePops::clear_to(JvmtiFramePop& fp) { // JvmtiFramePops::JvmtiFramePops() { - _pops = new (ResourceObj::C_HEAP) GrowableArray (2, true); + _pops = new (ResourceObj::C_HEAP, mtInternal) GrowableArray (2, true); } JvmtiFramePops::~JvmtiFramePops() { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp index e2273df0835..f9e686c0874 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp @@ -76,7 +76,7 @@ class JvmtiFramePop VALUE_OBJ_CLASS_SPEC { // It records what frames on a threads stack should post frame_pop events when they're exited. // -class JvmtiFramePops : public CHeapObj { +class JvmtiFramePops : public CHeapObj { private: GrowableArray* _pops; @@ -107,7 +107,7 @@ class JvmtiFramePops : public CHeapObj { // 3: Location of last executed instruction, used to filter out duplicate // events due to instruction rewriting. -class JvmtiEnvThreadState : public CHeapObj { +class JvmtiEnvThreadState : public CHeapObj { private: friend class JvmtiEnv; JavaThread *_thread; diff --git a/hotspot/src/share/vm/prims/jvmtiExport.cpp b/hotspot/src/share/vm/prims/jvmtiExport.cpp index 5325073b620..70c5c71c9c9 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp @@ -617,7 +617,7 @@ class JvmtiClassFileLoadHookPoster : public StackObj { if (caching_needed && *_cached_data_ptr == NULL) { // data has been changed by the new retransformable agent // and it hasn't already been cached, cache it - *_cached_data_ptr = (unsigned char *)os::malloc(_curr_len); + *_cached_data_ptr = (unsigned char *)os::malloc(_curr_len, mtInternal); memcpy(*_cached_data_ptr, _curr_data, _curr_len); *_cached_length_ptr = _curr_len; } @@ -720,7 +720,7 @@ class JvmtiCompiledMethodLoadEventMark : public JvmtiMethodEventMark { JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nm, &_map, &_map_length); } ~JvmtiCompiledMethodLoadEventMark() { - FREE_C_HEAP_ARRAY(jvmtiAddrLocationMap, _map); + FREE_C_HEAP_ARRAY(jvmtiAddrLocationMap, _map, mtInternal); } jint code_size() { return _code_size; } @@ -2323,7 +2323,7 @@ JvmtiDynamicCodeEventCollector::~JvmtiDynamicCodeEventCollector() { // register a stub void JvmtiDynamicCodeEventCollector::register_stub(const char* name, address start, address end) { if (_code_blobs == NULL) { - _code_blobs = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _code_blobs = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); } _code_blobs->append(new JvmtiCodeBlobDesc(name, start, end)); } @@ -2357,7 +2357,7 @@ JvmtiVMObjectAllocEventCollector::~JvmtiVMObjectAllocEventCollector() { void JvmtiVMObjectAllocEventCollector::record_allocation(oop obj) { assert(is_enabled(), "VM object alloc event collector is not enabled"); if (_allocated == NULL) { - _allocated = new (ResourceObj::C_HEAP) GrowableArray(1, true); + _allocated = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); } _allocated->push(obj); } diff --git a/hotspot/src/share/vm/prims/jvmtiExport.hpp b/hotspot/src/share/vm/prims/jvmtiExport.hpp index 31ee1ec93e8..4f6e6c6ae49 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.hpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp @@ -350,7 +350,7 @@ class JvmtiExport : public AllStatic { // Support class used by JvmtiDynamicCodeEventCollector and others. It // describes a single code blob by name and address range. -class JvmtiCodeBlobDesc : public CHeapObj { +class JvmtiCodeBlobDesc : public CHeapObj { private: char _name[64]; address _code_begin; diff --git a/hotspot/src/share/vm/prims/jvmtiExtensions.cpp b/hotspot/src/share/vm/prims/jvmtiExtensions.cpp index 00f99720101..9f6a1b101ec 100644 --- a/hotspot/src/share/vm/prims/jvmtiExtensions.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExtensions.cpp @@ -49,8 +49,8 @@ static jvmtiError JNICALL IsClassUnloadingEnabled(const jvmtiEnv* env, jboolean* // event. The function and the event are registered here. // void JvmtiExtensions::register_extensions() { - _ext_functions = new (ResourceObj::C_HEAP) GrowableArray(1,true); - _ext_events = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _ext_functions = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); + _ext_events = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); // register our extension function static jvmtiParamInfo func_params[] = { diff --git a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp index dd07a295ad1..050aa60177e 100644 --- a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp @@ -152,7 +152,7 @@ class JvmtiGetLoadedClassesClosure : public StackObj { // Public methods that get called within the scope of the closure void allocate() { - _list = NEW_C_HEAP_ARRAY(Handle, _count); + _list = NEW_C_HEAP_ARRAY(Handle, _count, mtInternal); assert(_list != NULL, "Out of memory"); if (_list == NULL) { _count = 0; diff --git a/hotspot/src/share/vm/prims/jvmtiImpl.cpp b/hotspot/src/share/vm/prims/jvmtiImpl.cpp index e0d809d4541..2244d81d9d7 100644 --- a/hotspot/src/share/vm/prims/jvmtiImpl.cpp +++ b/hotspot/src/share/vm/prims/jvmtiImpl.cpp @@ -98,8 +98,8 @@ JvmtiAgentThread::call_start_function() { void GrowableCache::recache() { int len = _elements->length(); - FREE_C_HEAP_ARRAY(address, _cache); - _cache = NEW_C_HEAP_ARRAY(address,len+1); + FREE_C_HEAP_ARRAY(address, _cache, mtInternal); + _cache = NEW_C_HEAP_ARRAY(address,len+1, mtInternal); for (int i=0; iat(i)->getCacheValue(); @@ -142,13 +142,13 @@ GrowableCache::GrowableCache() { GrowableCache::~GrowableCache() { clear(); delete _elements; - FREE_C_HEAP_ARRAY(address, _cache); + FREE_C_HEAP_ARRAY(address, _cache, mtInternal); } void GrowableCache::initialize(void *this_obj, void listener_fun(void *, address*) ) { _this_obj = this_obj; _listener_fun = listener_fun; - _elements = new (ResourceObj::C_HEAP) GrowableArray(5,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(5,true); recache(); } diff --git a/hotspot/src/share/vm/prims/jvmtiImpl.hpp b/hotspot/src/share/vm/prims/jvmtiImpl.hpp index 704d287a8f3..f80d63144d4 100644 --- a/hotspot/src/share/vm/prims/jvmtiImpl.hpp +++ b/hotspot/src/share/vm/prims/jvmtiImpl.hpp @@ -64,7 +64,7 @@ class JvmtiBreakpoints; // to update its pointer to the address cache. // -class GrowableElement : public CHeapObj { +class GrowableElement : public CHeapObj { public: virtual address getCacheValue() =0; virtual bool equals(GrowableElement* e) =0; @@ -130,7 +130,7 @@ public: // Note : typesafe wrapper for GrowableCache of JvmtiBreakpoint // -class JvmtiBreakpointCache : public CHeapObj { +class JvmtiBreakpointCache : public CHeapObj { private: GrowableCache _cache; @@ -258,7 +258,7 @@ public: // CHeap allocated to emphasize its similarity to JvmtiFramePops. // -class JvmtiBreakpoints : public CHeapObj { +class JvmtiBreakpoints : public CHeapObj { private: JvmtiBreakpointCache _bps; @@ -496,7 +496,7 @@ class JvmtiDeferredEvent VALUE_OBJ_CLASS_SPEC { class JvmtiDeferredEventQueue : AllStatic { friend class JvmtiDeferredEvent; private: - class QueueNode : public CHeapObj { + class QueueNode : public CHeapObj { private: JvmtiDeferredEvent _event; QueueNode* _next; diff --git a/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp b/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp index 89cac00bb5c..9031bbb290a 100644 --- a/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp @@ -27,7 +27,7 @@ #include "runtime/interfaceSupport.hpp" #include "runtime/thread.hpp" -GrowableArray *JvmtiPendingMonitors::_monitors = new (ResourceObj::C_HEAP) GrowableArray(1,true); +GrowableArray *JvmtiPendingMonitors::_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); void JvmtiPendingMonitors::transition_raw_monitors() { assert((Threads::number_of_threads()==1), @@ -53,7 +53,7 @@ is running. Raw monitor transition will not work"); JvmtiRawMonitor::JvmtiRawMonitor(const char *name) { #ifdef ASSERT - _name = strcpy(NEW_C_HEAP_ARRAY(char, strlen(name) + 1), name); + _name = strcpy(NEW_C_HEAP_ARRAY(char, strlen(name) + 1, mtInternal), name); #else _name = NULL; #endif diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp index 2caecf680bb..2c0550e9e6f 100644 --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -831,7 +831,7 @@ bool VM_RedefineClasses::is_unresolved_string_mismatch(constantPoolHandle cp1, jvmtiError VM_RedefineClasses::load_new_class_versions(TRAPS) { // For consistency allocate memory using os::malloc wrapper. _scratch_classes = (instanceKlassHandle *) - os::malloc(sizeof(instanceKlassHandle) * _class_count); + os::malloc(sizeof(instanceKlassHandle) * _class_count, mtInternal); if (_scratch_classes == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -2478,23 +2478,17 @@ void VM_RedefineClasses::set_new_constant_pool( // to use new constant pool indices as needed. The exception table // holds quadruple entries of the form: // (beg_bci, end_bci, handler_bci, klass_index) - const int beg_bci_offset = 0; - const int end_bci_offset = 1; - const int handler_bci_offset = 2; - const int klass_index_offset = 3; - const int entry_size = 4; - typeArrayHandle ex_table (THREAD, method->exception_table()); - int ext_length = ex_table->length(); - assert(ext_length % entry_size == 0, "exception table format has changed"); + ExceptionTable ex_table(method()); + int ext_length = ex_table.length(); - for (int j = 0; j < ext_length; j += entry_size) { - int cur_index = ex_table->int_at(j + klass_index_offset); + for (int j = 0; j < ext_length; j ++) { + int cur_index = ex_table.catch_type_index(j); int new_index = find_new_index(cur_index); if (new_index != 0) { RC_TRACE_WITH_THREAD(0x00080000, THREAD, ("ext-klass_index change: %d to %d", cur_index, new_index)); - ex_table->int_at_put(j + klass_index_offset, new_index); + ex_table.set_catch_type_index(j, new_index); } } // end for each exception table entry @@ -3236,7 +3230,9 @@ void VM_RedefineClasses::redefine_single_class(jclass the_jclass, // Copy the "source debug extension" attribute from new class version the_class->set_source_debug_extension( - scratch_class->source_debug_extension()); + scratch_class->source_debug_extension(), + scratch_class->source_debug_extension() == NULL ? 0 : + (int)strlen(scratch_class->source_debug_extension())); // Use of javac -g could be different in the old and the new if (scratch_class->access_flags().has_localvariable_table() != diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp index a425430bf61..ba77093a7f8 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp @@ -55,7 +55,7 @@ // and the tag value. In addition an entry includes a next pointer which // is used to chain entries together. -class JvmtiTagHashmapEntry : public CHeapObj { +class JvmtiTagHashmapEntry : public CHeapObj { private: friend class JvmtiTagMap; @@ -106,7 +106,7 @@ class JvmtiTagHashmapEntry : public CHeapObj { // entries. It also provides a function to iterate over all entries // in the hashmap. -class JvmtiTagHashmap : public CHeapObj { +class JvmtiTagHashmap : public CHeapObj { private: friend class JvmtiTagMap; @@ -150,7 +150,7 @@ class JvmtiTagHashmap : public CHeapObj { _resize_threshold = (int)(_load_factor * _size); _resizing_enabled = true; size_t s = initial_size * sizeof(JvmtiTagHashmapEntry*); - _table = (JvmtiTagHashmapEntry**)os::malloc(s); + _table = (JvmtiTagHashmapEntry**)os::malloc(s, mtInternal); if (_table == NULL) { vm_exit_out_of_memory(s, "unable to allocate initial hashtable for jvmti object tags"); } @@ -188,7 +188,7 @@ class JvmtiTagHashmap : public CHeapObj { // allocate new table size_t s = new_size * sizeof(JvmtiTagHashmapEntry*); - JvmtiTagHashmapEntry** new_table = (JvmtiTagHashmapEntry**)os::malloc(s); + JvmtiTagHashmapEntry** new_table = (JvmtiTagHashmapEntry**)os::malloc(s, mtInternal); if (new_table == NULL) { warning("unable to allocate larger hashtable for jvmti object tags"); set_resizing_enabled(false); @@ -585,7 +585,7 @@ class CallbackWrapper : public StackObj { _o = klassOop_if_java_lang_Class(o); // object size - _obj_size = _o->size() * wordSize; + _obj_size = (jlong)_o->size() * wordSize; // record the context _tag_map = tag_map; @@ -776,7 +776,7 @@ jlong JvmtiTagMap::get_tag(jobject object) { // For each field it holds the field index (as defined by the JVMTI specification), // the field type, and the offset. -class ClassFieldDescriptor: public CHeapObj { +class ClassFieldDescriptor: public CHeapObj { private: int _field_index; int _field_offset; @@ -790,7 +790,7 @@ class ClassFieldDescriptor: public CHeapObj { int field_offset() const { return _field_offset; } }; -class ClassFieldMap: public CHeapObj { +class ClassFieldMap: public CHeapObj { private: enum { initial_field_count = 5 @@ -821,7 +821,8 @@ class ClassFieldMap: public CHeapObj { }; ClassFieldMap::ClassFieldMap() { - _fields = new (ResourceObj::C_HEAP) GrowableArray(initial_field_count, true); + _fields = new (ResourceObj::C_HEAP, mtInternal) + GrowableArray(initial_field_count, true); } ClassFieldMap::~ClassFieldMap() { @@ -892,7 +893,7 @@ ClassFieldMap* ClassFieldMap::create_map_of_instance_fields(oop obj) { // heap iteration and avoid creating a field map for each object in the heap // (only need to create the map when the first instance of a class is encountered). // -class JvmtiCachedClassFieldMap : public CHeapObj { +class JvmtiCachedClassFieldMap : public CHeapObj { private: enum { initial_class_count = 200 @@ -957,7 +958,8 @@ bool ClassFieldMapCacheMark::_is_active; // record that the given instanceKlass is caching a field map void JvmtiCachedClassFieldMap::add_to_class_list(instanceKlass* ik) { if (_class_list == NULL) { - _class_list = new (ResourceObj::C_HEAP) GrowableArray(initial_class_count, true); + _class_list = new (ResourceObj::C_HEAP, mtInternal) + GrowableArray(initial_class_count, true); } _class_list->push(ik); } @@ -1526,8 +1528,8 @@ class TagObjectCollector : public JvmtiTagHashmapEntryClosure { _env = env; _tags = (jlong*)tags; _tag_count = tag_count; - _object_results = new (ResourceObj::C_HEAP) GrowableArray(1,true); - _tag_results = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _object_results = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); + _tag_results = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); } ~TagObjectCollector() { @@ -1672,8 +1674,8 @@ void ObjectMarker::init() { Universe::heap()->ensure_parsability(false); // no need to retire TLABs // create stacks for interesting headers - _saved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); - _saved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); + _saved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(4000, true); + _saved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(4000, true); if (UseBiasedLocking) { BiasedLocking::preserve_marks(); @@ -2712,7 +2714,7 @@ class VM_HeapWalkOperation: public VM_Operation { bool _reporting_string_values; GrowableArray* create_visit_stack() { - return new (ResourceObj::C_HEAP) GrowableArray(initial_visit_stack_size, true); + return new (ResourceObj::C_HEAP, mtInternal) GrowableArray(initial_visit_stack_size, true); } // accessors diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp index 2a460edc1e0..ede639efe7e 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp @@ -41,7 +41,7 @@ class JvmtiTagHashmap; class JvmtiTagHashmapEntry; class JvmtiTagHashmapEntryClosure; -class JvmtiTagMap : public CHeapObj { +class JvmtiTagMap : public CHeapObj { private: enum{ diff --git a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp index 87d2f0b03a4..6cc4e275d85 100644 --- a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp +++ b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp @@ -72,7 +72,7 @@ class JvmtiEnvThreadStateIterator : public StackObj { // // The Jvmti state for each thread (across all JvmtiEnv): // 1. Local table of enabled events. -class JvmtiThreadState : public CHeapObj { +class JvmtiThreadState : public CHeapObj { private: friend class JvmtiEnv; JavaThread *_thread; diff --git a/hotspot/src/share/vm/prims/jvmtiUtil.cpp b/hotspot/src/share/vm/prims/jvmtiUtil.cpp index 6671d48e995..425ca1d9803 100644 --- a/hotspot/src/share/vm/prims/jvmtiUtil.cpp +++ b/hotspot/src/share/vm/prims/jvmtiUtil.cpp @@ -40,7 +40,7 @@ ResourceArea* JvmtiUtil::single_threaded_resource_area() { if (_single_threaded_resource_area == NULL) { // lazily create the single threaded resource area // pick a size which is not a standard since the pools don't exist yet - _single_threaded_resource_area = new ResourceArea(Chunk::non_pool_size); + _single_threaded_resource_area = new (mtInternal) ResourceArea(Chunk::non_pool_size); } return _single_threaded_resource_area; } diff --git a/hotspot/src/share/vm/prims/methodHandleWalk.cpp b/hotspot/src/share/vm/prims/methodHandleWalk.cpp index d4d9a7130a5..68e83bdc7d6 100644 --- a/hotspot/src/share/vm/prims/methodHandleWalk.cpp +++ b/hotspot/src/share/vm/prims/methodHandleWalk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1796,7 +1796,7 @@ methodHandle MethodHandleCompiler::get_method_oop(TRAPS) { { methodOop m_oop = oopFactory::new_method(bytecode_length(), accessFlags_from(flags_bits), - 0, 0, 0, oopDesc::IsSafeConc, CHECK_(empty)); + 0, 0, 0, 0, oopDesc::IsSafeConc, CHECK_(empty)); m = methodHandle(THREAD, m_oop); } @@ -1812,9 +1812,6 @@ methodHandle MethodHandleCompiler::get_method_oop(TRAPS) { m->set_max_locals(max_locals()); m->set_size_of_parameters(_num_params); - typeArrayHandle exception_handlers(THREAD, Universe::the_empty_int_array()); - m->set_exception_table(exception_handlers()); - // Rewrite the method and set up the constant pool cache. objArrayOop m_array = oopFactory::new_system_objArray(1, CHECK_(empty)); objArrayHandle methods(THREAD, m_array); diff --git a/hotspot/src/share/vm/prims/methodHandles.cpp b/hotspot/src/share/vm/prims/methodHandles.cpp index 552fbe6a803..0501496fdc0 100644 --- a/hotspot/src/share/vm/prims/methodHandles.cpp +++ b/hotspot/src/share/vm/prims/methodHandles.cpp @@ -3180,17 +3180,15 @@ JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class)) jclass MH_class = env->FindClass(MH_name); status = env->RegisterNatives(MH_class, invoke_methods, sizeof(invoke_methods)/sizeof(JNINativeMethod)); } + if (!env->ExceptionOccurred()) { + status = env->RegisterNatives(MHN_class, call_site_methods, sizeof(call_site_methods)/sizeof(JNINativeMethod)); + } if (env->ExceptionOccurred()) { warning("JSR 292 method handle code is mismatched to this JVM. Disabling support."); enable_MH = false; env->ExceptionClear(); } - status = env->RegisterNatives(MHN_class, call_site_methods, sizeof(call_site_methods)/sizeof(JNINativeMethod)); - if (env->ExceptionOccurred()) { - // Exception is okay until 7087357 - env->ExceptionClear(); - } } if (enable_MH) { diff --git a/hotspot/src/share/vm/prims/unsafe.cpp b/hotspot/src/share/vm/prims/unsafe.cpp index 19f77a5f160..c8f532d9bfe 100644 --- a/hotspot/src/share/vm/prims/unsafe.cpp +++ b/hotspot/src/share/vm/prims/unsafe.cpp @@ -178,17 +178,6 @@ jint Unsafe_invocation_key_to_method_slot(jint key) { v = *(oop*)index_oop_from_field_offset_long(p, offset); \ } -#define GET_OOP_FIELD_VOLATILE(obj, offset, v) \ - oop p = JNIHandles::resolve(obj); \ - volatile oop v; \ - if (UseCompressedOops) { \ - volatile narrowOop n = *(volatile narrowOop*)index_oop_from_field_offset_long(p, offset); \ - v = oopDesc::decode_heap_oop(n); \ - } else { \ - v = *(volatile oop*)index_oop_from_field_offset_long(p, offset); \ - } \ - OrderAccess::acquire(); - // Get/SetObject must be special-cased, since it works with handles. @@ -296,28 +285,21 @@ UNSAFE_END UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) UnsafeWrapper("Unsafe_GetObjectVolatile"); - GET_OOP_FIELD_VOLATILE(obj, offset, v) + oop p = JNIHandles::resolve(obj); + void* addr = index_oop_from_field_offset_long(p, offset); + volatile oop v; + if (UseCompressedOops) { + volatile narrowOop n = *(volatile narrowOop*) addr; + v = oopDesc::decode_heap_oop(n); + } else { + v = *(volatile oop*) addr; + } + OrderAccess::acquire(); return JNIHandles::make_local(env, v); UNSAFE_END UNSAFE_ENTRY(void, Unsafe_SetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) UnsafeWrapper("Unsafe_SetObjectVolatile"); - { - // Catch VolatileCallSite.target stores (via - // CallSite.setTargetVolatile) and check call site dependencies. - oop p = JNIHandles::resolve(obj); - if ((offset == java_lang_invoke_CallSite::target_offset_in_bytes()) && p->is_a(SystemDictionary::CallSite_klass())) { - Handle call_site (THREAD, p); - Handle method_handle(THREAD, JNIHandles::resolve(x_h)); - assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "must be"); - assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be"); - { - // Walk all nmethods depending on this call site. - MutexLocker mu(Compile_lock, thread); - Universe::flush_dependents_on(call_site(), method_handle()); - } - } - } oop x = JNIHandles::resolve(x_h); oop p = JNIHandles::resolve(obj); void* addr = index_oop_from_field_offset_long(p, offset); @@ -596,7 +578,7 @@ UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory(JNIEnv *env, jobject unsafe, jlong siz return 0; } sz = round_to(sz, HeapWordSize); - void* x = os::malloc(sz); + void* x = os::malloc(sz, mtInternal); if (x == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -616,7 +598,7 @@ UNSAFE_ENTRY(jlong, Unsafe_ReallocateMemory(JNIEnv *env, jobject unsafe, jlong a return 0; } sz = round_to(sz, HeapWordSize); - void* x = (p == NULL) ? os::malloc(sz) : os::realloc(p, sz); + void* x = (p == NULL) ? os::malloc(sz, mtInternal) : os::realloc(p, sz, mtInternal); if (x == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -877,7 +859,7 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int return 0; } - body = NEW_C_HEAP_ARRAY(jbyte, length); + body = NEW_C_HEAP_ARRAY(jbyte, length, mtInternal); if (body == 0) { throw_new(env, "OutOfMemoryError"); @@ -893,7 +875,7 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int uint len = env->GetStringUTFLength(name); int unicode_len = env->GetStringLength(name); if (len >= sizeof(buf)) { - utfName = NEW_C_HEAP_ARRAY(char, len + 1); + utfName = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); if (utfName == NULL) { throw_new(env, "OutOfMemoryError"); goto free_body; @@ -913,10 +895,10 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int result = JVM_DefineClass(env, utfName, loader, body, length, pd); if (utfName && utfName != buf) - FREE_C_HEAP_ARRAY(char, utfName); + FREE_C_HEAP_ARRAY(char, utfName, mtInternal); free_body: - FREE_C_HEAP_ARRAY(jbyte, body); + FREE_C_HEAP_ARRAY(jbyte, body, mtInternal); return result; } } @@ -1011,7 +993,7 @@ Unsafe_DefineAnonymousClass_impl(JNIEnv *env, jint length = typeArrayOop(JNIHandles::resolve_non_null(data))->length(); jint word_length = (length + sizeof(HeapWord)-1) / sizeof(HeapWord); - HeapWord* body = NEW_C_HEAP_ARRAY(HeapWord, word_length); + HeapWord* body = NEW_C_HEAP_ARRAY(HeapWord, word_length, mtInternal); if (body == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -1095,7 +1077,7 @@ UNSAFE_ENTRY(jclass, Unsafe_DefineAnonymousClass(JNIEnv *env, jobject unsafe, jc // try/finally clause: if (temp_alloc != NULL) { - FREE_C_HEAP_ARRAY(HeapWord, temp_alloc); + FREE_C_HEAP_ARRAY(HeapWord, temp_alloc, mtInternal); } return (jclass) res_jh; diff --git a/hotspot/src/share/vm/prims/whitebox.cpp b/hotspot/src/share/vm/prims/whitebox.cpp index eadc7df523f..e93b9104b44 100644 --- a/hotspot/src/share/vm/prims/whitebox.cpp +++ b/hotspot/src/share/vm/prims/whitebox.cpp @@ -113,6 +113,9 @@ const char* WhiteBox::lookup_jstring(const char* field_name, oop object) { int offset = offset_for_field(field_name, object, vmSymbols::string_signature()); oop string = object->obj_field(offset); + if (string == NULL) { + return NULL; + } const char* ret = java_lang_String::as_utf8_string(string); return ret; } diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 7eceb7f984f..bddefb77501 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -35,6 +35,7 @@ #include "runtime/globals_extension.hpp" #include "runtime/java.hpp" #include "services/management.hpp" +#include "services/memTracker.hpp" #include "utilities/defaultStream.hpp" #include "utilities/taskqueue.hpp" #ifdef TARGET_OS_FAMILY_linux @@ -368,7 +369,7 @@ inline void SysClassPath::add_suffix(const char* suffix) { inline void SysClassPath::reset_item_at(int index) { assert(index < _scp_nitems && index != _scp_base, "just checking"); if (_items[index] != NULL) { - FREE_C_HEAP_ARRAY(char, _items[index]); + FREE_C_HEAP_ARRAY(char, _items[index], mtInternal); _items[index] = NULL; } } @@ -400,11 +401,11 @@ void SysClassPath::expand_endorsed() { expanded_path = add_jars_to_path(expanded_path, path); path = end; } else { - char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1); + char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1, mtInternal); memcpy(dirpath, path, tmp_end - path); dirpath[tmp_end - path] = '\0'; expanded_path = add_jars_to_path(expanded_path, dirpath); - FREE_C_HEAP_ARRAY(char, dirpath); + FREE_C_HEAP_ARRAY(char, dirpath, mtInternal); path = tmp_end + 1; } } @@ -435,7 +436,7 @@ char* SysClassPath::combined_path() { assert(total_len > 0, "empty sysclasspath not allowed"); // Copy the _items to a single string. - char* cp = NEW_C_HEAP_ARRAY(char, total_len); + char* cp = NEW_C_HEAP_ARRAY(char, total_len, mtInternal); char* cp_tmp = cp; for (i = 0; i < _scp_nitems; ++i) { if (_items[i] != NULL) { @@ -456,7 +457,7 @@ SysClassPath::add_to_path(const char* path, const char* str, bool prepend) { assert(str != NULL, "just checking"); if (path == NULL) { size_t len = strlen(str) + 1; - cp = NEW_C_HEAP_ARRAY(char, len); + cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); memcpy(cp, str, len); // copy the trailing null } else { const char separator = *os::path_separator(); @@ -465,15 +466,15 @@ SysClassPath::add_to_path(const char* path, const char* str, bool prepend) { size_t len = old_len + str_len + 2; if (prepend) { - cp = NEW_C_HEAP_ARRAY(char, len); + cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); char* cp_tmp = cp; memcpy(cp_tmp, str, str_len); cp_tmp += str_len; *cp_tmp = separator; memcpy(++cp_tmp, path, old_len + 1); // copy the trailing null - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } else { - cp = REALLOC_C_HEAP_ARRAY(char, path, len); + cp = REALLOC_C_HEAP_ARRAY(char, path, len, mtInternal); char* cp_tmp = cp + old_len; *cp_tmp = separator; memcpy(++cp_tmp, str, str_len + 1); // copy the trailing null @@ -495,7 +496,7 @@ char* SysClassPath::add_jars_to_path(char* path, const char* directory) { /* Scan the directory for jars/zips, appending them to path. */ struct dirent *entry; - char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory)); + char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory), mtInternal); while ((entry = os::readdir(dir, (dirent *) dbuf)) != NULL) { const char* name = entry->d_name; const char* ext = name + strlen(name) - 4; @@ -503,13 +504,13 @@ char* SysClassPath::add_jars_to_path(char* path, const char* directory) { (os::file_name_strcmp(ext, ".jar") == 0 || os::file_name_strcmp(ext, ".zip") == 0); if (isJarOrZip) { - char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name)); + char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name), mtInternal); sprintf(jarpath, "%s%s%s", directory, dir_sep, name); path = add_to_path(path, jarpath, false); - FREE_C_HEAP_ARRAY(char, jarpath); + FREE_C_HEAP_ARRAY(char, jarpath, mtInternal); } } - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); os::closedir(dir); return path; } @@ -631,7 +632,7 @@ static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) { static bool set_string_flag(char* name, const char* value, FlagValueOrigin origin) { if (!CommandLineFlags::ccstrAtPut(name, &value, origin)) return false; // Contract: CommandLineFlags always returns a pointer that needs freeing. - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); return true; } @@ -647,7 +648,7 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr } else if (new_len == 0) { value = old_value; } else { - char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1); + char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1, mtInternal); // each new setting adds another LINE to the switch: sprintf(buf, "%s\n%s", old_value, new_value); value = buf; @@ -655,10 +656,10 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr } (void) CommandLineFlags::ccstrAtPut(name, &value, origin); // CommandLineFlags always returns a pointer that needs freeing. - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); if (free_this_too != NULL) { // CommandLineFlags made its own copy, so I must delete my own temp. buffer. - FREE_C_HEAP_ARRAY(char, free_this_too); + FREE_C_HEAP_ARRAY(char, free_this_too, mtInternal); } return true; } @@ -735,9 +736,9 @@ void Arguments::add_string(char*** bldarray, int* count, const char* arg) { // expand the array and add arg to the last element (*count)++; if (*bldarray == NULL) { - *bldarray = NEW_C_HEAP_ARRAY(char*, *count); + *bldarray = NEW_C_HEAP_ARRAY(char*, *count, mtInternal); } else { - *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, *count); + *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, *count, mtInternal); } (*bldarray)[index] = strdup(arg); } @@ -917,13 +918,13 @@ bool Arguments::add_property(const char* prop) { char* value = (char *)ns; size_t key_len = (eq == NULL) ? strlen(prop) : (eq - prop); - key = AllocateHeap(key_len + 1, "add_property"); + key = AllocateHeap(key_len + 1, mtInternal); strncpy(key, prop, key_len); key[key_len] = '\0'; if (eq != NULL) { size_t value_len = strlen(prop) - key_len - 1; - value = AllocateHeap(value_len + 1, "add_property"); + value = AllocateHeap(value_len + 1, mtInternal); strncpy(value, &prop[key_len + 1], value_len + 1); } @@ -2058,12 +2059,12 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { const char* altclasses_jar = "alt-rt.jar"; size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 + strlen(altclasses_jar); - char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len); + char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len, mtInternal); strcpy(altclasses_path, get_meta_index_dir()); strcat(altclasses_path, altclasses_jar); scp.add_suffix_to_prefix(altclasses_path); scp_assembly_required = true; - FREE_C_HEAP_ARRAY(char, altclasses_path); + FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal); } if (WhiteBoxAPI) { @@ -2071,12 +2072,12 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { const char* wb_jar = "wb.jar"; size_t wb_path_len = strlen(get_meta_index_dir()) + 1 + strlen(wb_jar); - char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len); + char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len, mtInternal); strcpy(wb_path, get_meta_index_dir()); strcat(wb_path, wb_jar); scp.add_suffix(wb_path); scp_assembly_required = true; - FREE_C_HEAP_ARRAY(char, wb_path); + FREE_C_HEAP_ARRAY(char, wb_path, mtInternal); } // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) @@ -2161,13 +2162,13 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, if (tail != NULL) { const char* pos = strchr(tail, ':'); size_t len = (pos == NULL) ? strlen(tail) : pos - tail; - char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1), tail, len); + char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); name[len] = '\0'; char *options = NULL; if(pos != NULL) { size_t len2 = strlen(pos+1) + 1; // options start after ':'. Final zero must be copied. - options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2), pos+1, len2); + options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2, mtInternal), pos+1, len2); } #ifdef JVMTI_KERNEL if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { @@ -2182,12 +2183,12 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, if(tail != NULL) { const char* pos = strchr(tail, '='); size_t len = (pos == NULL) ? strlen(tail) : pos - tail; - char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1), tail, len); + char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); name[len] = '\0'; char *options = NULL; if(pos != NULL) { - options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1), pos + 1); + options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1, mtInternal), pos + 1); } #ifdef JVMTI_KERNEL if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { @@ -2200,7 +2201,7 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, // -javaagent } else if (match_option(option, "-javaagent:", &tail)) { if(tail != NULL) { - char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1), tail); + char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1, mtInternal), tail); add_init_agent("instrument", options, false); } // -Xnoclassgc @@ -2708,6 +2709,17 @@ SOLARIS_ONLY( return JNI_EINVAL; } FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads); + } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) { + julong max_direct_memory_size = 0; + ArgsRange errcode = parse_memory_size(tail, &max_direct_memory_size, 0); + if (errcode != arg_in_range) { + jio_fprintf(defaultStream::error_stream(), + "Invalid maximum direct memory size: %s\n", + option->optionString); + describe_range_error(errcode); + return JNI_EINVAL; + } + FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size); } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx // Skip -XX:Flags= since that case has already been handled if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { @@ -2958,7 +2970,7 @@ jint Arguments::parse(const JavaVMInitArgs* args) { char *end = strrchr(jvm_path, *os::file_separator()); if (end != NULL) *end = '\0'; char *shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(jvm_path) + - strlen(os::file_separator()) + 20); + strlen(os::file_separator()) + 20, mtInternal); if (shared_archive_path == NULL) return JNI_ENOMEM; strcpy(shared_archive_path, jvm_path); strcat(shared_archive_path, os::file_separator()); @@ -2971,7 +2983,10 @@ jint Arguments::parse(const JavaVMInitArgs* args) { const char* tail; // If flag "-XX:Flags=flags-file" is used it will be the first option to be processed. + const char* hotspotrc = ".hotspotrc"; bool settings_file_specified = false; + bool needs_hotspotrc_warning = false; + const char* flags_file; int index; for (index = 0; index < args->nOptions; index++) { @@ -2996,6 +3011,10 @@ jint Arguments::parse(const JavaVMInitArgs* args) { CommandLineFlags::printFlags(tty, false); vm_exit(0); } + if (match_option(option, "-XX:NativeMemoryTracking", &tail)) { + MemTracker::init_tracking_options(tail); + } + #ifndef PRODUCT if (match_option(option, "-XX:+PrintFlagsWithComments", &tail)) { @@ -3015,16 +3034,19 @@ jint Arguments::parse(const JavaVMInitArgs* args) { if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) { return JNI_EINVAL; } - } - + } else { #ifdef ASSERT - // Parse default .hotspotrc settings file - if (!settings_file_specified) { + // Parse default .hotspotrc settings file if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) { return JNI_EINVAL; } - } +#else + struct stat buf; + if (os::stat(hotspotrc, &buf) == 0) { + needs_hotspotrc_warning = true; + } #endif + } if (PrintVMOptions) { for (index = 0; index < args->nOptions; index++) { @@ -3041,7 +3063,15 @@ jint Arguments::parse(const JavaVMInitArgs* args) { return result; } -#ifdef JAVASE_EMBEDDED + // Delay warning until here so that we've had a chance to process + // the -XX:-PrintWarnings flag + if (needs_hotspotrc_warning) { + warning("%s file is present but has been ignored. " + "Run with -XX:Flags=%s to load the file.", + hotspotrc, hotspotrc); + } + +#if (defined JAVASE_EMBEDDED || defined ARM) UNSUPPORTED_OPTION(UseG1GC, "G1 GC"); #endif @@ -3094,6 +3124,14 @@ jint Arguments::parse(const JavaVMInitArgs* args) { PrintGC = true; } + if (!JDK_Version::is_gte_jdk18x_version()) { + // To avoid changing the log format for 7 updates this flag is only + // true by default in JDK8 and above. + if (FLAG_IS_DEFAULT(PrintGCCause)) { + FLAG_SET_DEFAULT(PrintGCCause, false); + } + } + // Set object alignment values. set_object_alignment(); @@ -3325,7 +3363,7 @@ char *Arguments::get_kernel_properties() { } } // Add one for null terminator. - char *props = AllocateHeap(length + 1, "get_kernel_properties"); + char *props = AllocateHeap(length + 1, mtInternal); if (length != 0) { int pos = 0; for (prop = _system_properties; prop != NULL; prop = prop->next()) { diff --git a/hotspot/src/share/vm/runtime/arguments.hpp b/hotspot/src/share/vm/runtime/arguments.hpp index 076b4861db1..e78e45c912c 100644 --- a/hotspot/src/share/vm/runtime/arguments.hpp +++ b/hotspot/src/share/vm/runtime/arguments.hpp @@ -44,7 +44,7 @@ class SysClassPath; // Element describing System and User (-Dkey=value flags) defined property. -class SystemProperty: public CHeapObj { +class SystemProperty: public CHeapObj { private: char* _key; char* _value; @@ -63,7 +63,7 @@ class SystemProperty: public CHeapObj { if (_value != NULL) { FreeHeap(_value); } - _value = AllocateHeap(strlen(value)+1); + _value = AllocateHeap(strlen(value)+1, mtInternal); if (_value != NULL) { strcpy(_value, value); } @@ -80,7 +80,7 @@ class SystemProperty: public CHeapObj { if (_value != NULL) { len += strlen(_value); } - sp = AllocateHeap(len+2); + sp = AllocateHeap(len+2, mtInternal); if (sp != NULL) { if (_value != NULL) { strcpy(sp, _value); @@ -100,13 +100,13 @@ class SystemProperty: public CHeapObj { if (key == NULL) { _key = NULL; } else { - _key = AllocateHeap(strlen(key)+1); + _key = AllocateHeap(strlen(key)+1, mtInternal); strcpy(_key, key); } if (value == NULL) { _value = NULL; } else { - _value = AllocateHeap(strlen(value)+1); + _value = AllocateHeap(strlen(value)+1, mtInternal); strcpy(_value, value); } _next = NULL; @@ -116,7 +116,7 @@ class SystemProperty: public CHeapObj { // For use by -agentlib, -agentpath and -Xrun -class AgentLibrary : public CHeapObj { +class AgentLibrary : public CHeapObj { friend class AgentLibraryList; private: char* _name; @@ -136,12 +136,12 @@ class AgentLibrary : public CHeapObj { // Constructor AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) { - _name = AllocateHeap(strlen(name)+1); + _name = AllocateHeap(strlen(name)+1, mtInternal); strcpy(_name, name); if (options == NULL) { _options = NULL; } else { - _options = AllocateHeap(strlen(options)+1); + _options = AllocateHeap(strlen(options)+1, mtInternal); strcpy(_options, options); } _is_absolute_path = is_absolute_path; diff --git a/hotspot/src/share/vm/runtime/biasedLocking.cpp b/hotspot/src/share/vm/runtime/biasedLocking.cpp index ba49d80de08..de739ecafb1 100644 --- a/hotspot/src/share/vm/runtime/biasedLocking.cpp +++ b/hotspot/src/share/vm/runtime/biasedLocking.cpp @@ -687,8 +687,8 @@ void BiasedLocking::preserve_marks() { // monitors in a prepass and, if they are biased, preserve their // mark words here. This should be a relatively small set of objects // especially compared to the number of objects in the heap. - _preserved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(10, true); - _preserved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(10, true); + _preserved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); + _preserved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); ResourceMark rm; Thread* cur = Thread::current(); diff --git a/hotspot/src/share/vm/runtime/compilationPolicy.hpp b/hotspot/src/share/vm/runtime/compilationPolicy.hpp index 1d8427cf2fd..a0912beaf5a 100644 --- a/hotspot/src/share/vm/runtime/compilationPolicy.hpp +++ b/hotspot/src/share/vm/runtime/compilationPolicy.hpp @@ -37,7 +37,7 @@ class CompileTask; class CompileQueue; -class CompilationPolicy : public CHeapObj { +class CompilationPolicy : public CHeapObj { static CompilationPolicy* _policy; // Accumulated time static elapsedTimer _accumulated_time; diff --git a/hotspot/src/share/vm/runtime/deoptimization.cpp b/hotspot/src/share/vm/runtime/deoptimization.cpp index 0e2a9839bc5..bbb5bc3cc81 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.cpp +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp @@ -101,7 +101,7 @@ Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame, _number_of_frames = number_of_frames; _frame_sizes = frame_sizes; _frame_pcs = frame_pcs; - _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2); + _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2, mtCompiler); _return_type = return_type; _initial_info = 0; // PD (x86 only) @@ -114,9 +114,9 @@ Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame, Deoptimization::UnrollBlock::~UnrollBlock() { - FREE_C_HEAP_ARRAY(intptr_t, _frame_sizes); - FREE_C_HEAP_ARRAY(intptr_t, _frame_pcs); - FREE_C_HEAP_ARRAY(intptr_t, _register_block); + FREE_C_HEAP_ARRAY(intptr_t, _frame_sizes, mtCompiler); + FREE_C_HEAP_ARRAY(intptr_t, _frame_pcs, mtCompiler); + FREE_C_HEAP_ARRAY(intptr_t, _register_block, mtCompiler); } @@ -358,9 +358,9 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread // Compute the vframes' sizes. Note that frame_sizes[] entries are ordered from outermost to innermost // virtual activation, which is the reverse of the elements in the vframes array. - intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames); + intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames, mtCompiler); // +1 because we always have an interpreter return address for the final slot. - address* frame_pcs = NEW_C_HEAP_ARRAY(address, number_of_frames + 1); + address* frame_pcs = NEW_C_HEAP_ARRAY(address, number_of_frames + 1, mtCompiler); int popframe_extra_args = 0; // Create an interpreter return address for the stub to use as its return // address so the skeletal frames are perfectly walkable diff --git a/hotspot/src/share/vm/runtime/deoptimization.hpp b/hotspot/src/share/vm/runtime/deoptimization.hpp index 18225467921..23870b4e8a6 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.hpp +++ b/hotspot/src/share/vm/runtime/deoptimization.hpp @@ -129,7 +129,7 @@ class Deoptimization : AllStatic { // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob). // This is only a CheapObj to ease debugging after a deopt failure - class UnrollBlock : public CHeapObj { + class UnrollBlock : public CHeapObj { private: int _size_of_deoptimized_frame; // Size, in bytes, of current deoptimized frame int _caller_adjustment; // Adjustment, in bytes, to caller's SP by initial interpreted frame diff --git a/hotspot/src/share/vm/runtime/dtraceJSDT.hpp b/hotspot/src/share/vm/runtime/dtraceJSDT.hpp index bff43108439..670eabfef44 100644 --- a/hotspot/src/share/vm/runtime/dtraceJSDT.hpp +++ b/hotspot/src/share/vm/runtime/dtraceJSDT.hpp @@ -63,7 +63,7 @@ class DTraceJSDT : AllStatic { static jboolean is_supported(); }; -class RegisteredProbes : public CHeapObj { +class RegisteredProbes : public CHeapObj { private: nmethod** _nmethods; // all the probe methods size_t _count; // number of probe methods @@ -72,7 +72,7 @@ class RegisteredProbes : public CHeapObj { public: RegisteredProbes(size_t count) { _count = count; - _nmethods = NEW_C_HEAP_ARRAY(nmethod*, count); + _nmethods = NEW_C_HEAP_ARRAY(nmethod*, count, mtInternal); } ~RegisteredProbes() { @@ -81,7 +81,7 @@ class RegisteredProbes : public CHeapObj { _nmethods[i]->make_not_entrant(); _nmethods[i]->method()->clear_code(); } - FREE_C_HEAP_ARRAY(nmethod*, _nmethods); + FREE_C_HEAP_ARRAY(nmethod*, _nmethods, mtInternal); _nmethods = NULL; _count = 0; } diff --git a/hotspot/src/share/vm/runtime/fieldDescriptor.cpp b/hotspot/src/share/vm/runtime/fieldDescriptor.cpp index 1fb0ce0c5e8..3d5213f03a2 100644 --- a/hotspot/src/share/vm/runtime/fieldDescriptor.cpp +++ b/hotspot/src/share/vm/runtime/fieldDescriptor.cpp @@ -28,6 +28,7 @@ #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" +#include "oops/fieldStreams.hpp" #include "runtime/fieldDescriptor.hpp" #include "runtime/handles.inline.hpp" #include "runtime/signature.hpp" @@ -37,6 +38,24 @@ oop fieldDescriptor::loader() const { return instanceKlass::cast(_cp->pool_holder())->class_loader(); } +Symbol* fieldDescriptor::generic_signature() const { + if (!has_generic_signature()) { + return NULL; + } + + int idx = 0; + instanceKlass* ik = instanceKlass::cast(field_holder()); + for (AllFieldStream fs(ik); !fs.done(); fs.next()) { + if (idx == _index) { + return fs.generic_signature(); + } else { + idx ++; + } + } + assert(false, "should never happen"); + return NULL; +} + typeArrayOop fieldDescriptor::annotations() const { instanceKlass* ik = instanceKlass::cast(field_holder()); objArrayOop md = ik->fields_annotations(); diff --git a/hotspot/src/share/vm/runtime/fieldDescriptor.hpp b/hotspot/src/share/vm/runtime/fieldDescriptor.hpp index e68b5c5f005..ff6649cdad4 100644 --- a/hotspot/src/share/vm/runtime/fieldDescriptor.hpp +++ b/hotspot/src/share/vm/runtime/fieldDescriptor.hpp @@ -67,7 +67,7 @@ class fieldDescriptor VALUE_OBJ_CLASS_SPEC { oop loader() const; // Offset (in words) of field from start of instanceOop / klassOop int offset() const { return field()->offset(); } - Symbol* generic_signature() const { return field()->generic_signature(_cp); } + Symbol* generic_signature() const; int index() const { return _index; } typeArrayOop annotations() const; @@ -100,6 +100,7 @@ class fieldDescriptor VALUE_OBJ_CLASS_SPEC { bool is_field_access_watched() const { return access_flags().is_field_access_watched(); } bool is_field_modification_watched() const { return access_flags().is_field_modification_watched(); } + bool has_generic_signature() const { return access_flags().field_has_generic_signature(); } void set_is_field_access_watched(const bool value) { _access_flags.set_is_field_access_watched(value); diff --git a/hotspot/src/share/vm/runtime/fprofiler.cpp b/hotspot/src/share/vm/runtime/fprofiler.cpp index 3c100aa4c98..9901fb9fa80 100644 --- a/hotspot/src/share/vm/runtime/fprofiler.cpp +++ b/hotspot/src/share/vm/runtime/fprofiler.cpp @@ -70,12 +70,12 @@ IntervalData* FlatProfiler::interval_data = NULL; ThreadProfiler::ThreadProfiler() { // Space for the ProfilerNodes const int area_size = 1 * ProfilerNodeSize * 1024; - area_bottom = AllocateHeap(area_size, "fprofiler"); + area_bottom = AllocateHeap(area_size, mtInternal); area_top = area_bottom; area_limit = area_bottom + area_size; // ProfilerNode pointer table - table = NEW_C_HEAP_ARRAY(ProfilerNode*, table_size); + table = NEW_C_HEAP_ARRAY(ProfilerNode*, table_size, mtInternal); initialize(); engaged = false; } @@ -157,7 +157,7 @@ address PCRecorder::base = NULL; void PCRecorder::init() { MutexLockerEx lm(CodeCache_lock, Mutex::_no_safepoint_check_flag); int s = size(); - counters = NEW_C_HEAP_ARRAY(int, s); + counters = NEW_C_HEAP_ARRAY(int, s, mtInternal); for (int index = 0; index < s; index++) { counters[index] = 0; } @@ -850,7 +850,7 @@ void FlatProfiler::record_thread_ticks() { if (Threads_lock->try_lock()) { { // Threads_lock scope maxthreads = Threads::number_of_threads(); - threadsList = NEW_C_HEAP_ARRAY(JavaThread *, maxthreads); + threadsList = NEW_C_HEAP_ARRAY(JavaThread *, maxthreads, mtInternal); suspendedthreadcount = 0; for (JavaThread* tp = Threads::first(); tp != NULL; tp = tp->next()) { if (tp->is_Compiler_thread()) { @@ -1195,8 +1195,8 @@ void ThreadProfiler::reset() { void FlatProfiler::allocate_table() { { // Bytecode table - bytecode_ticks = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes); - bytecode_ticks_stub = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes); + bytecode_ticks = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes, mtInternal); + bytecode_ticks_stub = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes, mtInternal); for(int index = 0; index < Bytecodes::number_of_codes; index++) { bytecode_ticks[index] = 0; bytecode_ticks_stub[index] = 0; @@ -1205,7 +1205,7 @@ void FlatProfiler::allocate_table() { if (ProfilerRecordPC) PCRecorder::init(); - interval_data = NEW_C_HEAP_ARRAY(IntervalData, interval_print_size); + interval_data = NEW_C_HEAP_ARRAY(IntervalData, interval_print_size, mtInternal); FlatProfiler::interval_reset(); } diff --git a/hotspot/src/share/vm/runtime/fprofiler.hpp b/hotspot/src/share/vm/runtime/fprofiler.hpp index 2f8d6158c29..25c2f2a10dc 100644 --- a/hotspot/src/share/vm/runtime/fprofiler.hpp +++ b/hotspot/src/share/vm/runtime/fprofiler.hpp @@ -121,7 +121,7 @@ public: }; #endif // FPROF_KERNEL -class ThreadProfiler: public CHeapObj { +class ThreadProfiler: public CHeapObj { public: ThreadProfiler() KERNEL_RETURN; ~ThreadProfiler() KERNEL_RETURN; diff --git a/hotspot/src/share/vm/runtime/globals.cpp b/hotspot/src/share/vm/runtime/globals.cpp index 474090a2a4b..3dad7a0f05d 100644 --- a/hotspot/src/share/vm/runtime/globals.cpp +++ b/hotspot/src/share/vm/runtime/globals.cpp @@ -465,13 +465,13 @@ bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValu ccstr old_value = result->get_ccstr(); char* new_value = NULL; if (*value != NULL) { - new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1); + new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); strcpy(new_value, *value); } result->set_ccstr(new_value); if (result->origin == DEFAULT && old_value != NULL) { // Prior value is NOT heap allocated, but was a literal constant. - char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1); + char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1, mtInternal); strcpy(old_value_to_free, old_value); old_value = old_value_to_free; } @@ -485,12 +485,12 @@ void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, F Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); ccstr old_value = faddr->get_ccstr(); - char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1); + char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); strcpy(new_value, value); faddr->set_ccstr(new_value); if (faddr->origin != DEFAULT && old_value != NULL) { // Prior value is heap allocated so free it. - FREE_C_HEAP_ARRAY(char, old_value); + FREE_C_HEAP_ARRAY(char, old_value, mtInternal); } faddr->origin = origin; } @@ -511,7 +511,7 @@ void CommandLineFlags::printSetFlags(outputStream* out) { while (flagTable[length].name != NULL) length++; // Sort - Flag** array = NEW_C_HEAP_ARRAY(Flag*, length); + Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal); for (int index = 0; index < length; index++) { array[index] = &flagTable[index]; } @@ -525,7 +525,7 @@ void CommandLineFlags::printSetFlags(outputStream* out) { } } out->cr(); - FREE_C_HEAP_ARRAY(Flag*, array); + FREE_C_HEAP_ARRAY(Flag*, array, mtInternal); } #ifndef PRODUCT @@ -547,7 +547,7 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) { while (flagTable[length].name != NULL) length++; // Sort - Flag** array = NEW_C_HEAP_ARRAY(Flag*, length); + Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal); for (int index = 0; index < length; index++) { array[index] = &flagTable[index]; } @@ -560,5 +560,5 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) { array[i]->print_on(out, withComments); } } - FREE_C_HEAP_ARRAY(Flag*, array); + FREE_C_HEAP_ARRAY(Flag*, array, mtInternal); } diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 7ad4f9a042c..f57a9b218c4 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -190,7 +190,6 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G); #endif // no compilers - // string type aliases used only in this file typedef const char* ccstr; typedef const char* ccstrlist; // represents string arguments which accumulate @@ -631,9 +630,6 @@ class CommandLineFlags { develop(bool, InlineClassNatives, true, \ "inline Class.isInstance, etc") \ \ - develop(bool, InlineAtomicLong, true, \ - "inline sun.misc.AtomicLong") \ - \ develop(bool, InlineThreadNatives, true, \ "inline Thread.currentThread, etc") \ \ @@ -899,6 +895,9 @@ class CommandLineFlags { develop(bool, UseFakeTimers, false, \ "Tells whether the VM should use system time or a fake timer") \ \ + product(ccstr, NativeMemoryTracking, "off", \ + "Native memory tracking options") \ + \ diagnostic(bool, LogCompilation, false, \ "Log compilation activity in detail to hotspot.log or LogFile") \ \ @@ -2662,6 +2661,9 @@ class CommandLineFlags { product(bool, UseHeavyMonitors, false, \ "use heavyweight instead of lightweight Java monitors") \ \ + product(bool, PrintStringTableStatistics, false, \ + "print statistics about the StringTable and SymbolTable") \ + \ notproduct(bool, PrintSymbolTableSizeHistogram, false, \ "print histogram of the symbol table") \ \ @@ -3285,9 +3287,6 @@ class CommandLineFlags { diagnostic(intx, VerifyGCLevel, 0, \ "Generation level at which to start +VerifyBefore/AfterGC") \ \ - develop(uintx, ExitAfterGCNum, 0, \ - "If non-zero, exit after this GC.") \ - \ product(intx, MaxTenuringThreshold, 15, \ "Maximum value for tenuring threshold") \ \ @@ -3706,7 +3705,7 @@ class CommandLineFlags { \ /* Properties for Java libraries */ \ \ - product(intx, MaxDirectMemorySize, -1, \ + product(uintx, MaxDirectMemorySize, 0, \ "Maximum total size of NIO direct-buffer allocations") \ \ /* temporary developer defined flags */ \ @@ -3902,7 +3901,10 @@ class CommandLineFlags { " of this flag is true for JDK 6 and earlier") \ \ diagnostic(bool, WhiteBoxAPI, false, \ - "Enable internal testing APIs") + "Enable internal testing APIs") \ + \ + product(bool, PrintGCCause, true, \ + "Include GC cause in GC logging") /* * Macros for factoring of globals diff --git a/hotspot/src/share/vm/runtime/handles.cpp b/hotspot/src/share/vm/runtime/handles.cpp index 3c24f81ce0d..1ddbacc444b 100644 --- a/hotspot/src/share/vm/runtime/handles.cpp +++ b/hotspot/src/share/vm/runtime/handles.cpp @@ -111,7 +111,7 @@ void HandleMark::initialize(Thread* thread) { _chunk = _area->_chunk; _hwm = _area->_hwm; _max = _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->_size_in_bytes;) + _size_in_bytes = _area->_size_in_bytes; debug_only(_area->_handle_mark_nesting++); assert(_area->_handle_mark_nesting > 0, "must stack allocate HandleMarks"); debug_only(Atomic::inc(&_nof_handlemarks);) @@ -159,7 +159,7 @@ HandleMark::~HandleMark() { area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);) + area->set_size_in_bytes(_size_in_bytes); #ifdef ASSERT // clear out first chunk (to detect allocation bugs) if (ZapVMHandleArea) { diff --git a/hotspot/src/share/vm/runtime/handles.hpp b/hotspot/src/share/vm/runtime/handles.hpp index d9d71e67010..e2b2d49713e 100644 --- a/hotspot/src/share/vm/runtime/handles.hpp +++ b/hotspot/src/share/vm/runtime/handles.hpp @@ -238,7 +238,6 @@ DEF_KLASS_HANDLE(constantPoolCacheKlass, oop_is_constantPool ) //------------------------------------------------------------------------------------------------------------------------ // Thread local handle area - class HandleArea: public Arena { friend class HandleMark; friend class NoHandleMark; @@ -312,7 +311,7 @@ class HandleMark { HandleArea *_area; // saved handle area Chunk *_chunk; // saved arena chunk char *_hwm, *_max; // saved arena info - NOT_PRODUCT(size_t _size_in_bytes;) // size of handle area + size_t _size_in_bytes; // size of handle area // Link to previous active HandleMark in thread HandleMark* _previous_handle_mark; diff --git a/hotspot/src/share/vm/runtime/handles.inline.hpp b/hotspot/src/share/vm/runtime/handles.inline.hpp index 3bd42fb2e17..806d66fca9b 100644 --- a/hotspot/src/share/vm/runtime/handles.inline.hpp +++ b/hotspot/src/share/vm/runtime/handles.inline.hpp @@ -85,7 +85,7 @@ inline void HandleMark::pop_and_restore() { area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);) + area->set_size_in_bytes(_size_in_bytes); debug_only(area->_handle_mark_nesting--); } diff --git a/hotspot/src/share/vm/runtime/init.cpp b/hotspot/src/share/vm/runtime/init.cpp index c0e870ea26e..d46de5c6532 100644 --- a/hotspot/src/share/vm/runtime/init.cpp +++ b/hotspot/src/share/vm/runtime/init.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "code/icBuffer.hpp" #include "gc_interface/collectedHeap.hpp" #include "interpreter/bytecodes.hpp" @@ -157,6 +158,10 @@ void exit_globals() { // Print the collected safepoint statistics. SafepointSynchronize::print_stat_on_exit(); } + if (PrintStringTableStatistics) { + SymbolTable::dump(tty); + StringTable::dump(tty); + } ostream_exit(); } } diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp index f256e515e9c..ed888adb43f 100644 --- a/hotspot/src/share/vm/runtime/java.cpp +++ b/hotspot/src/share/vm/runtime/java.cpp @@ -384,7 +384,7 @@ extern "C" { typedef void (*__exit_proc)(void); } -class ExitProc : public CHeapObj { +class ExitProc : public CHeapObj { private: __exit_proc _proc; // void (*_proc)(void); @@ -660,6 +660,7 @@ void vm_shutdown_during_initialization(const char* error, const char* message) { } JDK_Version JDK_Version::_current; +const char* JDK_Version::_runtime_name; void JDK_Version::initialize() { jdk_version_info info; diff --git a/hotspot/src/share/vm/runtime/java.hpp b/hotspot/src/share/vm/runtime/java.hpp index 307fcc2fb36..1d2b45b6967 100644 --- a/hotspot/src/share/vm/runtime/java.hpp +++ b/hotspot/src/share/vm/runtime/java.hpp @@ -74,6 +74,7 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { private: static JDK_Version _current; + static const char* _runtime_name; // In this class, we promote the minor version of release to be the // major version for releases >= 5 in anticipation of the JDK doing the @@ -181,6 +182,13 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { void to_string(char* buffer, size_t buflen) const; + static const char* runtime_name() { + return _runtime_name; + } + static void set_runtime_name(const char* name) { + _runtime_name = name; + } + // Convenience methods for queries on the current major/minor version static bool is_jdk12x_version() { return current().compare_major(2) == 0; @@ -206,6 +214,10 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { return current().compare_major(7) == 0; } + static bool is_jdk18x_version() { + return current().compare_major(8) == 0; + } + static bool is_gte_jdk13x_version() { return current().compare_major(3) >= 0; } @@ -225,6 +237,10 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { static bool is_gte_jdk17x_version() { return current().compare_major(7) >= 0; } + + static bool is_gte_jdk18x_version() { + return current().compare_major(8) >= 0; + } }; #endif // SHARE_VM_RUNTIME_JAVA_HPP diff --git a/hotspot/src/share/vm/runtime/jniHandles.hpp b/hotspot/src/share/vm/runtime/jniHandles.hpp index a3b2f9c4c29..71bb1dd8949 100644 --- a/hotspot/src/share/vm/runtime/jniHandles.hpp +++ b/hotspot/src/share/vm/runtime/jniHandles.hpp @@ -109,7 +109,7 @@ class JNIHandles : AllStatic { // JNI handle blocks holding local/global JNI handles -class JNIHandleBlock : public CHeapObj { +class JNIHandleBlock : public CHeapObj { friend class VMStructs; friend class CppInterpreter; diff --git a/hotspot/src/share/vm/runtime/monitorChunk.cpp b/hotspot/src/share/vm/runtime/monitorChunk.cpp index 1a4be7920e8..f8793fdeaee 100644 --- a/hotspot/src/share/vm/runtime/monitorChunk.cpp +++ b/hotspot/src/share/vm/runtime/monitorChunk.cpp @@ -29,7 +29,7 @@ MonitorChunk::MonitorChunk(int number_on_monitors) { _number_of_monitors = number_on_monitors; - _monitors = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors); + _monitors = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors, mtInternal); _next = NULL; } diff --git a/hotspot/src/share/vm/runtime/monitorChunk.hpp b/hotspot/src/share/vm/runtime/monitorChunk.hpp index 66d62438c57..eca92a6b4a7 100644 --- a/hotspot/src/share/vm/runtime/monitorChunk.hpp +++ b/hotspot/src/share/vm/runtime/monitorChunk.hpp @@ -30,7 +30,7 @@ // Data structure for holding monitors for one activation during // deoptimization. -class MonitorChunk: public CHeapObj { +class MonitorChunk: public CHeapObj { private: int _number_of_monitors; BasicObjectLock* _monitors; diff --git a/hotspot/src/share/vm/runtime/mutex.hpp b/hotspot/src/share/vm/runtime/mutex.hpp index 66a3295c857..7d2cd82724f 100644 --- a/hotspot/src/share/vm/runtime/mutex.hpp +++ b/hotspot/src/share/vm/runtime/mutex.hpp @@ -84,7 +84,7 @@ class ParkEvent ; // The default length of monitor name is chosen to be 64 to avoid false sharing. static const int MONITOR_NAME_LEN = 64; -class Monitor : public CHeapObj { +class Monitor : public CHeapObj { public: // A special lock: Is a lock where you are guaranteed not to block while you are diff --git a/hotspot/src/share/vm/runtime/os.cpp b/hotspot/src/share/vm/runtime/os.cpp index 33495d66d43..d9395b3ad0c 100644 --- a/hotspot/src/share/vm/runtime/os.cpp +++ b/hotspot/src/share/vm/runtime/os.cpp @@ -45,6 +45,7 @@ #include "runtime/os.hpp" #include "runtime/stubRoutines.hpp" #include "services/attachListener.hpp" +#include "services/memTracker.hpp" #include "services/threadService.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" @@ -433,9 +434,9 @@ void* os::native_java_library() { // --------------------- heap allocation utilities --------------------- -char *os::strdup(const char *str) { +char *os::strdup(const char *str, MEMFLAGS flags) { size_t size = strlen(str); - char *dup_str = (char *)malloc(size + 1); + char *dup_str = (char *)malloc(size + 1, flags); if (dup_str == NULL) return NULL; strcpy(dup_str, str); return dup_str; @@ -559,7 +560,7 @@ void verify_block(void* memblock) { } #endif -void* os::malloc(size_t size) { +void* os::malloc(size_t size, MEMFLAGS memflags, address caller) { NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); @@ -571,6 +572,7 @@ void* os::malloc(size_t size) { NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap()); u_char* ptr = (u_char*)::malloc(size + space_before + space_after); + #ifdef ASSERT if (ptr == NULL) return NULL; if (MallocCushion) { @@ -589,18 +591,29 @@ void* os::malloc(size_t size) { } debug_only(if (paranoid) verify_block(memblock)); if (PrintMalloc && tty != NULL) tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, memblock); + + // we do not track MallocCushion memory + if (MemTracker::is_on()) { + MemTracker::record_malloc((address)memblock, size, memflags, caller == 0 ? CALLER_PC : caller); + } + return memblock; } -void* os::realloc(void *memblock, size_t size) { +void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller) { #ifndef ASSERT NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); - return ::realloc(memblock, size); + void* ptr = ::realloc(memblock, size); + if (ptr != NULL && MemTracker::is_on()) { + MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags, + caller == 0 ? CALLER_PC : caller); + } + return ptr; #else if (memblock == NULL) { - return malloc(size); + return malloc(size, memflags, (caller == 0 ? CALLER_PC : caller)); } if ((intptr_t)memblock == (intptr_t)MallocCatchPtr) { tty->print_cr("os::realloc caught " PTR_FORMAT, memblock); @@ -610,7 +623,7 @@ void* os::realloc(void *memblock, size_t size) { NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap()); if (size == 0) return NULL; // always move the block - void* ptr = malloc(size); + void* ptr = malloc(size, memflags, caller == 0 ? CALLER_PC : caller); if (PrintMalloc) tty->print_cr("os::remalloc " SIZE_FORMAT " bytes, " PTR_FORMAT " --> " PTR_FORMAT, size, memblock, ptr); // Copy to new memory if malloc didn't fail if ( ptr != NULL ) { @@ -627,7 +640,7 @@ void* os::realloc(void *memblock, size_t size) { } -void os::free(void *memblock) { +void os::free(void *memblock, MEMFLAGS memflags) { NOT_PRODUCT(inc_stat_counter(&num_frees, 1)); #ifdef ASSERT if (memblock == NULL) return; @@ -660,6 +673,8 @@ void os::free(void *memblock) { fprintf(stderr, "os::free " PTR_FORMAT "\n", (uintptr_t)memblock); } #endif + MemTracker::record_free((address)memblock, memflags); + ::free((char*)memblock - space_before); } @@ -1048,7 +1063,7 @@ char* os::format_boot_path(const char* format_string, ++formatted_path_len; } - char* formatted_path = NEW_C_HEAP_ARRAY(char, formatted_path_len + 1); + char* formatted_path = NEW_C_HEAP_ARRAY(char, formatted_path_len + 1, mtInternal); if (formatted_path == NULL) { return NULL; } @@ -1127,7 +1142,7 @@ char** os::split_path(const char* path, int* n) { return NULL; } const char psepchar = *os::path_separator(); - char* inpath = (char*)NEW_C_HEAP_ARRAY(char, strlen(path) + 1); + char* inpath = (char*)NEW_C_HEAP_ARRAY(char, strlen(path) + 1, mtInternal); if (inpath == NULL) { return NULL; } @@ -1140,7 +1155,7 @@ char** os::split_path(const char* path, int* n) { p++; p = strchr(p, psepchar); } - char** opath = (char**) NEW_C_HEAP_ARRAY(char*, count); + char** opath = (char**) NEW_C_HEAP_ARRAY(char*, count, mtInternal); if (opath == NULL) { return NULL; } @@ -1153,7 +1168,7 @@ char** os::split_path(const char* path, int* n) { return NULL; } // allocate the string and add terminator storage - char* s = (char*)NEW_C_HEAP_ARRAY(char, len + 1); + char* s = (char*)NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); if (s == NULL) { return NULL; } @@ -1162,7 +1177,7 @@ char** os::split_path(const char* path, int* n) { opath[i] = s; p += len + 1; } - FREE_C_HEAP_ARRAY(char, inpath); + FREE_C_HEAP_ARRAY(char, inpath, mtInternal); *n = count; return opath; } @@ -1366,3 +1381,97 @@ int os::get_line_chars(int fd, char* buf, const size_t bsize){ return (int) i; } + +bool os::create_stack_guard_pages(char* addr, size_t bytes) { + return os::pd_create_stack_guard_pages(addr, bytes); +} + + +char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { + char* result = pd_reserve_memory(bytes, addr, alignment_hint); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + + return result; +} +char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { + char* result = pd_attempt_reserve_memory_at(bytes, addr); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + return result; +} + +void os::split_reserved_memory(char *base, size_t size, + size_t split, bool realloc) { + pd_split_reserved_memory(base, size, split, realloc); +} + +bool os::commit_memory(char* addr, size_t bytes, bool executable) { + bool res = pd_commit_memory(addr, bytes, executable); + if (res && MemTracker::is_on()) { + MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC); + } + return res; +} + +bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, + bool executable) { + bool res = os::pd_commit_memory(addr, size, alignment_hint, executable); + if (res && MemTracker::is_on()) { + MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); + } + return res; +} + +bool os::uncommit_memory(char* addr, size_t bytes) { + bool res = pd_uncommit_memory(addr, bytes); + if (res) { + MemTracker::record_virtual_memory_uncommit((address)addr, bytes); + } + return res; +} + +bool os::release_memory(char* addr, size_t bytes) { + bool res = pd_release_memory(addr, bytes); + if (res) { + MemTracker::record_virtual_memory_release((address)addr, bytes); + } + return res; +} + + +char* os::map_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + return result; +} + +char* os::remap_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + return pd_remap_memory(fd, file_name, file_offset, addr, bytes, + read_only, allow_exec); +} + +bool os::unmap_memory(char *addr, size_t bytes) { + bool result = pd_unmap_memory(addr, bytes); + if (result) { + MemTracker::record_virtual_memory_release((address)addr, bytes); + } + return result; +} + +void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { + pd_free_memory(addr, bytes, alignment_hint); +} + +void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { + pd_realign_memory(addr, bytes, alignment_hint); +} + diff --git a/hotspot/src/share/vm/runtime/os.hpp b/hotspot/src/share/vm/runtime/os.hpp index dd163e9a958..508edba8a3e 100644 --- a/hotspot/src/share/vm/runtime/os.hpp +++ b/hotspot/src/share/vm/runtime/os.hpp @@ -99,6 +99,28 @@ class os: AllStatic { _page_sizes[1] = 0; // sentinel } + static char* pd_reserve_memory(size_t bytes, char* addr = 0, + size_t alignment_hint = 0); + static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); + static void pd_split_reserved_memory(char *base, size_t size, + size_t split, bool realloc); + static bool pd_commit_memory(char* addr, size_t bytes, bool executable = false); + static bool pd_commit_memory(char* addr, size_t size, size_t alignment_hint, + bool executable = false); + static bool pd_uncommit_memory(char* addr, size_t bytes); + static bool pd_release_memory(char* addr, size_t bytes); + + static char* pd_map_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only = false, + bool allow_exec = false); + static char* pd_remap_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec); + static bool pd_unmap_memory(char *addr, size_t bytes); + static void pd_free_memory(char *addr, size_t bytes, size_t alignment_hint); + static void pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint); + + public: static void init(void); // Called before command line parsing static jint init_2(void); // Called after command line parsing @@ -236,8 +258,7 @@ class os: AllStatic { static char* attempt_reserve_memory_at(size_t bytes, char* addr); static void split_reserved_memory(char *base, size_t size, size_t split, bool realloc); - static bool commit_memory(char* addr, size_t bytes, - bool executable = false); + static bool commit_memory(char* addr, size_t bytes, bool executable = false); static bool commit_memory(char* addr, size_t size, size_t alignment_hint, bool executable = false); static bool uncommit_memory(char* addr, size_t bytes); @@ -250,6 +271,7 @@ class os: AllStatic { static bool guard_memory(char* addr, size_t bytes); static bool unguard_memory(char* addr, size_t bytes); static bool create_stack_guard_pages(char* addr, size_t bytes); + static bool pd_create_stack_guard_pages(char* addr, size_t bytes); static bool remove_stack_guard_pages(char* addr, size_t bytes); static char* map_memory(int fd, const char* file_name, size_t file_offset, @@ -492,6 +514,7 @@ class os: AllStatic { // Print out system information; they are called by fatal error handler. // Output format may be different on different platforms. static void print_os_info(outputStream* st); + static void print_os_info_brief(outputStream* st); static void print_cpu_info(outputStream* st); static void pd_print_cpu_info(outputStream* st); static void print_memory_info(outputStream* st); @@ -572,12 +595,15 @@ class os: AllStatic { static void* thread_local_storage_at(int index); static void free_thread_local_storage(int index); + // Stack walk + static address get_caller_pc(int n = 0); + // General allocation (must be MT-safe) - static void* malloc (size_t size); - static void* realloc (void *memblock, size_t size); - static void free (void *memblock); + static void* malloc (size_t size, MEMFLAGS flags, address caller_pc = 0); + static void* realloc (void *memblock, size_t size, MEMFLAGS flags, address caller_pc = 0); + static void free (void *memblock, MEMFLAGS flags = mtNone); static bool check_heap(bool force = false); // verify C heap integrity - static char* strdup(const char *); // Like strdup + static char* strdup(const char *, MEMFLAGS flags = mtInternal); // Like strdup #ifndef PRODUCT static julong num_mallocs; // # of calls to malloc/realloc @@ -639,6 +665,10 @@ class os: AllStatic { // On Windows this will create an actual minidump, on Linux/Solaris it will simply check core dump limits static void check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize); + // Get the default path to the core file + // Returns the length of the string + static int get_core_path(char* buffer, size_t bufferSize); + // JVMTI & JVM monitoring and management support // The thread_cpu_time() and current_thread_cpu_time() are only // supported if is_thread_cpu_time_supported() returns true. @@ -685,14 +715,17 @@ class os: AllStatic { // Platform dependent stuff #ifdef TARGET_OS_FAMILY_linux # include "os_linux.hpp" +# include "os_posix.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "os_solaris.hpp" +# include "os_posix.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "os_windows.hpp" #endif #ifdef TARGET_OS_FAMILY_bsd +# include "os_posix.hpp" # include "os_bsd.hpp" #endif #ifdef TARGET_OS_ARCH_linux_x86 diff --git a/hotspot/src/share/vm/runtime/osThread.hpp b/hotspot/src/share/vm/runtime/osThread.hpp index bb3fd79637b..1dfcb376163 100644 --- a/hotspot/src/share/vm/runtime/osThread.hpp +++ b/hotspot/src/share/vm/runtime/osThread.hpp @@ -58,10 +58,9 @@ enum ThreadState { // the main thread into its own Thread at will. -class OSThread: public CHeapObj { +class OSThread: public CHeapObj { friend class VMStructs; private: - //void* _start_proc; // Thread start routine OSThreadStartFunc _start_proc; // Thread start routine void* _start_parm; // Thread start routine parameter volatile ThreadState _state; // Thread state *hint* @@ -77,10 +76,7 @@ class OSThread: public CHeapObj { void set_state(ThreadState state) { _state = state; } ThreadState get_state() { return _state; } - // Constructor OSThread(OSThreadStartFunc start_proc, void* start_parm); - - // Destructor ~OSThread(); // Accessors @@ -98,7 +94,6 @@ class OSThread: public CHeapObj { // For java intrinsics: static ByteSize interrupted_offset() { return byte_offset_of(OSThread, _interrupted); } - static ByteSize thread_id_offset() { return byte_offset_of(OSThread, _thread_id); } // Platform dependent stuff #ifdef TARGET_OS_FAMILY_linux @@ -114,6 +109,19 @@ class OSThread: public CHeapObj { # include "osThread_bsd.hpp" #endif + public: + static ByteSize thread_id_offset() { return byte_offset_of(OSThread, _thread_id); } + static size_t thread_id_size() { return sizeof(thread_id_t); } + + thread_id_t thread_id() const { return _thread_id; } + + void set_thread_id(thread_id_t id) { _thread_id = id; } + + private: + // _thread_id is kernel thread id (similar to LWP id on Solaris). Each + // thread has a unique thread_id (BsdThreads or NPTL). It can be used + // to access /proc. + thread_id_t _thread_id; }; diff --git a/hotspot/src/share/vm/runtime/park.cpp b/hotspot/src/share/vm/runtime/park.cpp index 1be5733321a..8d91d0b6887 100644 --- a/hotspot/src/share/vm/runtime/park.cpp +++ b/hotspot/src/share/vm/runtime/park.cpp @@ -141,7 +141,7 @@ void ParkEvent::Release (ParkEvent * ev) { // although Niagara's hash function should help. void * ParkEvent::operator new (size_t sz) { - return (void *) ((intptr_t (CHeapObj::operator new (sz + 256)) + 256) & -256) ; + return (void *) ((intptr_t (AllocateHeap(sz + 256, mtInternal, CALLER_PC)) + 256) & -256) ; } void ParkEvent::operator delete (void * a) { diff --git a/hotspot/src/share/vm/runtime/perfData.cpp b/hotspot/src/share/vm/runtime/perfData.cpp index 04631ec260b..3d4bf2da8a4 100644 --- a/hotspot/src/share/vm/runtime/perfData.cpp +++ b/hotspot/src/share/vm/runtime/perfData.cpp @@ -81,7 +81,7 @@ PerfData::PerfData(CounterNS ns, const char* name, Units u, Variability v) const char* prefix = PerfDataManager::ns_to_string(ns); - _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2); + _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2, mtInternal); assert(_name != NULL && strlen(name) != 0, "invalid name"); if (ns == NULL_NS) { @@ -111,10 +111,10 @@ PerfData::PerfData(CounterNS ns, const char* name, Units u, Variability v) PerfData::~PerfData() { if (_name != NULL) { - FREE_C_HEAP_ARRAY(char, _name); + FREE_C_HEAP_ARRAY(char, _name, mtInternal); } if (is_on_c_heap()) { - FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep); + FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep, mtInternal); } } @@ -137,7 +137,7 @@ void PerfData::create_entry(BasicType dtype, size_t dsize, size_t vlen) { if (psmp == NULL) { // out of PerfMemory memory resources. allocate on the C heap // to avoid vm termination. - psmp = NEW_C_HEAP_ARRAY(char, size); + psmp = NEW_C_HEAP_ARRAY(char, size, mtInternal); _on_c_heap = true; } @@ -559,12 +559,12 @@ PerfLongCounter* PerfDataManager::create_long_counter(CounterNS ns, PerfDataList::PerfDataList(int length) { - _set = new(ResourceObj::C_HEAP) PerfDataArray(length, true); + _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(length, true); } PerfDataList::PerfDataList(PerfDataList* p) { - _set = new(ResourceObj::C_HEAP) PerfDataArray(p->length(), true); + _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(p->length(), true); _set->appendAll(p->get_impl()); } diff --git a/hotspot/src/share/vm/runtime/perfData.hpp b/hotspot/src/share/vm/runtime/perfData.hpp index 2f84ee62008..2552fe8badb 100644 --- a/hotspot/src/share/vm/runtime/perfData.hpp +++ b/hotspot/src/share/vm/runtime/perfData.hpp @@ -240,7 +240,7 @@ enum CounterNS { * be removed from the product in the future. * */ -class PerfData : public CHeapObj { +class PerfData : public CHeapObj { friend class StatSampler; // for access to protected void sample() friend class PerfDataManager; // for access to protected destructor @@ -342,7 +342,7 @@ class PerfData : public CHeapObj { * invoke the take_sample() method and write the value returned to its * appropriate location in the PerfData memory region. */ -class PerfLongSampleHelper : public CHeapObj { +class PerfLongSampleHelper : public CHeapObj { public: virtual jlong take_sample() = 0; }; @@ -591,7 +591,7 @@ class PerfStringVariable : public PerfString { * some other implementation, as long as that implementation provides * a mechanism to iterate over the container by index. */ -class PerfDataList : public CHeapObj { +class PerfDataList : public CHeapObj { private: diff --git a/hotspot/src/share/vm/runtime/perfMemory.cpp b/hotspot/src/share/vm/runtime/perfMemory.cpp index 0855b38c97f..26ef55e5f58 100644 --- a/hotspot/src/share/vm/runtime/perfMemory.cpp +++ b/hotspot/src/share/vm/runtime/perfMemory.cpp @@ -112,7 +112,7 @@ void PerfMemory::initialize() { warning("Could not create PerfData Memory region, reverting to malloc"); } - _prologue = NEW_C_HEAP_OBJ(PerfDataPrologue); + _prologue = NEW_C_HEAP_OBJ(PerfDataPrologue, mtInternal); } else { @@ -244,10 +244,10 @@ char* PerfMemory::get_perfdata_file_path() { if (PerfDataSaveFile != NULL) { // dest_file_name stores the validated file name if file_name // contains %p which will be replaced by pid. - dest_file = NEW_C_HEAP_ARRAY(char, JVM_MAXPATHLEN); + dest_file = NEW_C_HEAP_ARRAY(char, JVM_MAXPATHLEN, mtInternal); if(!Arguments::copy_expand_pid(PerfDataSaveFile, strlen(PerfDataSaveFile), dest_file, JVM_MAXPATHLEN)) { - FREE_C_HEAP_ARRAY(char, dest_file); + FREE_C_HEAP_ARRAY(char, dest_file, mtInternal); if (PrintMiscellaneous && Verbose) { warning("Invalid performance data file path name specified, "\ "fall back to a default name"); @@ -257,7 +257,7 @@ char* PerfMemory::get_perfdata_file_path() { } } // create the name of the file for retaining the instrumentation memory. - dest_file = NEW_C_HEAP_ARRAY(char, PERFDATA_FILENAME_LEN); + dest_file = NEW_C_HEAP_ARRAY(char, PERFDATA_FILENAME_LEN, mtInternal); jio_snprintf(dest_file, PERFDATA_FILENAME_LEN, "%s_%d", PERFDATA_NAME, os::current_process_id()); diff --git a/hotspot/src/share/vm/runtime/reflection.cpp b/hotspot/src/share/vm/runtime/reflection.cpp index 04b896722d1..001d87b2853 100644 --- a/hotspot/src/share/vm/runtime/reflection.cpp +++ b/hotspot/src/share/vm/runtime/reflection.cpp @@ -829,7 +829,7 @@ oop Reflection::new_field(fieldDescriptor* fd, bool intern_name, TRAPS) { java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS); java_lang_reflect_Field::set_override(rh(), false); if (java_lang_reflect_Field::has_signature_field() && - fd->generic_signature() != NULL) { + fd->has_generic_signature()) { Symbol* gs = fd->generic_signature(); Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL); java_lang_reflect_Field::set_signature(rh(), sig()); diff --git a/hotspot/src/share/vm/runtime/reflectionUtils.cpp b/hotspot/src/share/vm/runtime/reflectionUtils.cpp index 6c6e8c361b6..e8a986ab346 100644 --- a/hotspot/src/share/vm/runtime/reflectionUtils.cpp +++ b/hotspot/src/share/vm/runtime/reflectionUtils.cpp @@ -59,7 +59,7 @@ bool KlassStream::eos() { GrowableArray *FilteredFieldsMap::_filtered_fields = - new (ResourceObj::C_HEAP) GrowableArray(3,true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(3,true); void FilteredFieldsMap::initialize() { diff --git a/hotspot/src/share/vm/runtime/relocator.cpp b/hotspot/src/share/vm/runtime/relocator.cpp index a3970907761..e385b22fee7 100644 --- a/hotspot/src/share/vm/runtime/relocator.cpp +++ b/hotspot/src/share/vm/runtime/relocator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -392,16 +392,16 @@ void Relocator::change_jumps(int break_bci, int delta) { // The width of instruction at "pc" is changing by "delta". Adjust the // exception table, if any, of "rc->mb". void Relocator::adjust_exception_table(int bci, int delta) { - typeArrayOop table = method()->exception_table(); - for (int index = 0; index < table->length(); index +=4) { - if (table->int_at(index) > bci) { - table->int_at_put(index+0, table->int_at(index+0) + delta); - table->int_at_put(index+1, table->int_at(index+1) + delta); - } else if (bci < table->int_at(index+1)) { - table->int_at_put(index+1, table->int_at(index+1) + delta); + ExceptionTable table(_method()); + for (int index = 0; index < table.length(); index ++) { + if (table.start_pc(index) > bci) { + table.set_start_pc(index, table.start_pc(index) + delta); + table.set_end_pc(index, table.end_pc(index) + delta); + } else if (bci < table.end_pc(index)) { + table.set_end_pc(index, table.end_pc(index) + delta); } - if (table->int_at(index+2) > bci) - table->int_at_put(index+2, table->int_at(index+2) + delta); + if (table.handler_pc(index) > bci) + table.set_handler_pc(index, table.handler_pc(index) + delta); } } diff --git a/hotspot/src/share/vm/runtime/safepoint.cpp b/hotspot/src/share/vm/runtime/safepoint.cpp index 514e7c97657..31b33e320ec 100644 --- a/hotspot/src/share/vm/runtime/safepoint.cpp +++ b/hotspot/src/share/vm/runtime/safepoint.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" @@ -47,6 +48,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/sweeper.hpp" #include "runtime/synchronizer.hpp" +#include "services/memTracker.hpp" #include "services/runtimeService.hpp" #include "utilities/events.hpp" #ifdef TARGET_ARCH_x86 @@ -526,13 +528,29 @@ void SafepointSynchronize::do_cleanup_tasks() { CompilationPolicy::policy()->do_safepoint_work(); } - TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime); - NMethodSweeper::scan_stacks(); + { + TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime); + NMethodSweeper::scan_stacks(); + } + + if (SymbolTable::needs_rehashing()) { + TraceTime t5("rehashing symbol table", TraceSafepointCleanupTime); + SymbolTable::rehash_table(); + } + + if (StringTable::needs_rehashing()) { + TraceTime t6("rehashing string table", TraceSafepointCleanupTime); + StringTable::rehash_table(); + } // rotate log files? if (UseGCLogFileRotation) { gclog_or_tty->rotate_log(); } + + if (MemTracker::is_on()) { + MemTracker::sync(); + } } @@ -1144,7 +1162,7 @@ void SafepointSynchronize::deferred_initialize_stat() { stats_array_size = PrintSafepointStatisticsCount; } _safepoint_stats = (SafepointStats*)os::malloc(stats_array_size - * sizeof(SafepointStats)); + * sizeof(SafepointStats), mtInternal); guarantee(_safepoint_stats != NULL, "not enough memory for safepoint instrumentation data"); diff --git a/hotspot/src/share/vm/runtime/safepoint.hpp b/hotspot/src/share/vm/runtime/safepoint.hpp index 71255a27d48..005ea4d0360 100644 --- a/hotspot/src/share/vm/runtime/safepoint.hpp +++ b/hotspot/src/share/vm/runtime/safepoint.hpp @@ -190,7 +190,7 @@ public: }; // State class for a thread suspended at a safepoint -class ThreadSafepointState: public CHeapObj { +class ThreadSafepointState: public CHeapObj { public: // These states are maintained by VM thread while threads are being brought // to a safepoint. After SafepointSynchronize::end(), they are reset to diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index 503ad0719fd..7c74f493008 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -2117,7 +2117,7 @@ void SharedRuntime::print_call_statistics(int comp_total) { // A simple wrapper class around the calling convention information // that allows sharing of adapters for the same calling convention. -class AdapterFingerPrint : public CHeapObj { +class AdapterFingerPrint : public CHeapObj { private: union { int _compact[3]; @@ -2174,7 +2174,7 @@ class AdapterFingerPrint : public CHeapObj { ptr = _value._compact; } else { _length = len; - _value._fingerprint = NEW_C_HEAP_ARRAY(int, _length); + _value._fingerprint = NEW_C_HEAP_ARRAY(int, _length, mtCode); ptr = _value._fingerprint; } @@ -2193,7 +2193,7 @@ class AdapterFingerPrint : public CHeapObj { ~AdapterFingerPrint() { if (_length > 0) { - FREE_C_HEAP_ARRAY(int, _value._fingerprint); + FREE_C_HEAP_ARRAY(int, _value._fingerprint, mtCode); } } @@ -2251,7 +2251,7 @@ class AdapterFingerPrint : public CHeapObj { // A hashtable mapping from AdapterFingerPrints to AdapterHandlerEntries -class AdapterHandlerTable : public BasicHashtable { +class AdapterHandlerTable : public BasicHashtable { friend class AdapterHandlerTableIterator; private: @@ -2265,16 +2265,16 @@ class AdapterHandlerTable : public BasicHashtable { #endif AdapterHandlerEntry* bucket(int i) { - return (AdapterHandlerEntry*)BasicHashtable::bucket(i); + return (AdapterHandlerEntry*)BasicHashtable::bucket(i); } public: AdapterHandlerTable() - : BasicHashtable(293, sizeof(AdapterHandlerEntry)) { } + : BasicHashtable(293, sizeof(AdapterHandlerEntry)) { } // Create a new entry suitable for insertion in the table AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) { - AdapterHandlerEntry* entry = (AdapterHandlerEntry*)BasicHashtable::new_entry(fingerprint->compute_hash()); + AdapterHandlerEntry* entry = (AdapterHandlerEntry*)BasicHashtable::new_entry(fingerprint->compute_hash()); entry->init(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); return entry; } @@ -2287,7 +2287,7 @@ class AdapterHandlerTable : public BasicHashtable { void free_entry(AdapterHandlerEntry* entry) { entry->deallocate(); - BasicHashtable::free_entry(entry); + BasicHashtable::free_entry(entry); } // Find a entry with the same fingerprint if it exists @@ -2572,8 +2572,8 @@ void AdapterHandlerEntry::relocate(address new_base) { void AdapterHandlerEntry::deallocate() { delete _fingerprint; #ifdef ASSERT - if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code); - if (_saved_sig) FREE_C_HEAP_ARRAY(Basictype, _saved_sig); + if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code, mtCode); + if (_saved_sig) FREE_C_HEAP_ARRAY(Basictype, _saved_sig, mtCode); #endif } @@ -2583,11 +2583,11 @@ void AdapterHandlerEntry::deallocate() { // against other versions. If the code is captured after relocation // then relative instructions won't be equivalent. void AdapterHandlerEntry::save_code(unsigned char* buffer, int length, int total_args_passed, BasicType* sig_bt) { - _saved_code = NEW_C_HEAP_ARRAY(unsigned char, length); + _saved_code = NEW_C_HEAP_ARRAY(unsigned char, length, mtCode); _code_length = length; memcpy(_saved_code, buffer, length); _total_args_passed = total_args_passed; - _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed); + _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed, mtCode); memcpy(_saved_sig, sig_bt, _total_args_passed * sizeof(BasicType)); } @@ -2893,7 +2893,7 @@ JRT_LEAF(intptr_t*, SharedRuntime::OSR_migration_begin( JavaThread *thread) ) int max_locals = moop->max_locals(); // Allocate temp buffer, 1 word per local & 2 per active monitor int buf_size_words = max_locals + active_monitor_count*2; - intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words); + intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words, mtCode); // Copy the locals. Order is preserved so that loading of longs works. // Since there's no GC I can copy the oops blindly. @@ -2923,7 +2923,7 @@ JRT_LEAF(intptr_t*, SharedRuntime::OSR_migration_begin( JavaThread *thread) ) JRT_END JRT_LEAF(void, SharedRuntime::OSR_migration_end( intptr_t* buf) ) - FREE_C_HEAP_ARRAY(intptr_t,buf); + FREE_C_HEAP_ARRAY(intptr_t,buf, mtCode); JRT_END bool AdapterHandlerLibrary::contains(CodeBlob* b) { diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.hpp b/hotspot/src/share/vm/runtime/sharedRuntime.hpp index 9650c6e11c7..cb955c46db2 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp @@ -610,7 +610,7 @@ class SharedRuntime: AllStatic { // used by the adapters. The code generation happens here because it's very // similar to what the adapters have to do. -class AdapterHandlerEntry : public BasicHashtableEntry { +class AdapterHandlerEntry : public BasicHashtableEntry { friend class AdapterHandlerTable; private: @@ -656,7 +656,7 @@ class AdapterHandlerEntry : public BasicHashtableEntry { AdapterFingerPrint* fingerprint() { return _fingerprint; } AdapterHandlerEntry* next() { - return (AdapterHandlerEntry*)BasicHashtableEntry::next(); + return (AdapterHandlerEntry*)BasicHashtableEntry::next(); } #ifdef ASSERT diff --git a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp index bc81f5a30ec..3fb5161f8fa 100644 --- a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp +++ b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp @@ -36,7 +36,7 @@ // Currently, code descriptors are simply chained in a linked list, // this may have to change if searching becomes too slow. -class StubCodeDesc: public CHeapObj { +class StubCodeDesc: public CHeapObj { protected: static StubCodeDesc* _list; // the list of all descriptors static int _count; // length of list diff --git a/hotspot/src/share/vm/runtime/sweeper.cpp b/hotspot/src/share/vm/runtime/sweeper.cpp index 7f8561b6b3b..2dea6d7ba7c 100644 --- a/hotspot/src/share/vm/runtime/sweeper.cpp +++ b/hotspot/src/share/vm/runtime/sweeper.cpp @@ -228,7 +228,7 @@ void NMethodSweeper::possibly_sweep() { #ifdef ASSERT if (LogSweeper && _records == NULL) { // Create the ring buffer for the logging code - _records = NEW_C_HEAP_ARRAY(SweeperRecord, SweeperLogEntries); + _records = NEW_C_HEAP_ARRAY(SweeperRecord, SweeperLogEntries, mtGC); memset(_records, 0, sizeof(SweeperRecord) * SweeperLogEntries); } #endif diff --git a/hotspot/src/share/vm/runtime/task.hpp b/hotspot/src/share/vm/runtime/task.hpp index 2357e835fb0..206442d765b 100644 --- a/hotspot/src/share/vm/runtime/task.hpp +++ b/hotspot/src/share/vm/runtime/task.hpp @@ -35,7 +35,7 @@ // ... // pf.disenroll(); -class PeriodicTask: public CHeapObj { +class PeriodicTask: public CHeapObj { public: // Useful constants. // The interval constants are used to ensure the declared interval diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index 76865f6ff2c..76d0c8de168 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -73,6 +73,7 @@ #include "runtime/vm_operations.hpp" #include "services/attachListener.hpp" #include "services/management.hpp" +#include "services/memTracker.hpp" #include "services/threadService.hpp" #include "trace/traceEventTypes.hpp" #include "utilities/defaultStream.hpp" @@ -159,6 +160,7 @@ HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, #endif // ndef DTRACE_ENABLED + // Class hierarchy // - Thread // - VMThread @@ -168,13 +170,13 @@ HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, // - CompilerThread // ======= Thread ======== - // Support for forcing alignment of thread objects for biased locking -void* Thread::operator new(size_t size) { +void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) { if (UseBiasedLocking) { const int alignment = markOopDesc::biased_lock_alignment; size_t aligned_size = size + (alignment - sizeof(intptr_t)); - void* real_malloc_addr = CHeapObj::operator new(aligned_size); + void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC) + : os::malloc(aligned_size, flags, CURRENT_PC); void* aligned_addr = (void*) align_size_up((intptr_t) real_malloc_addr, alignment); assert(((uintptr_t) aligned_addr + (uintptr_t) size) <= ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size), @@ -187,16 +189,17 @@ void* Thread::operator new(size_t size) { ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr; return aligned_addr; } else { - return CHeapObj::operator new(size); + return throw_excpt? AllocateHeap(size, flags, CURRENT_PC) + : os::malloc(size, flags, CURRENT_PC); } } void Thread::operator delete(void* p) { if (UseBiasedLocking) { void* real_malloc_addr = ((Thread*) p)->_real_malloc_address; - CHeapObj::operator delete(real_malloc_addr); + FreeHeap(real_malloc_addr, mtThread); } else { - CHeapObj::operator delete(p); + FreeHeap(p, mtThread); } } @@ -214,8 +217,8 @@ Thread::Thread() { // allocated data structures set_osthread(NULL); - set_resource_area(new ResourceArea()); - set_handle_area(new HandleArea(NULL)); + set_resource_area(new (mtThread)ResourceArea()); + set_handle_area(new (mtThread) HandleArea(NULL)); set_active_handles(NULL); set_free_handle_block(NULL); set_last_handle_mark(NULL); @@ -306,12 +309,17 @@ void Thread::initialize_thread_local_storage() { // set up any platform-specific state. os::initialize_thread(); - } void Thread::record_stack_base_and_size() { set_stack_base(os::current_stack_base()); set_stack_size(os::current_stack_size()); + + // record thread's native stack, stack grows downward + address vm_base = _stack_base - _stack_size; + MemTracker::record_virtual_memory_reserve(vm_base, _stack_size, + CURRENT_PC, this); + MemTracker::record_virtual_memory_type(vm_base, mtThreadStack); } @@ -319,6 +327,9 @@ Thread::~Thread() { // Reclaim the objectmonitors from the omFreeList of the moribund thread. ObjectSynchronizer::omFlush (this) ; + MemTracker::record_virtual_memory_release((_stack_base - _stack_size), + _stack_size, this); + // deallocate data structures delete resource_area(); // since the handle marks are using the handle area, we have to deallocated the root @@ -996,6 +1007,29 @@ static void call_initializeSystemClass(TRAPS) { vmSymbols::void_method_signature(), CHECK); } +char java_runtime_name[128] = ""; + +// extract the JRE name from sun.misc.Version.java_runtime_name +static const char* get_java_runtime_name(TRAPS) { + klassOop k = SystemDictionary::find(vmSymbols::sun_misc_Version(), + Handle(), Handle(), CHECK_AND_CLEAR_NULL); + fieldDescriptor fd; + bool found = k != NULL && + instanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(), + vmSymbols::string_signature(), &fd); + if (found) { + oop name_oop = k->java_mirror()->obj_field(fd.offset()); + if (name_oop == NULL) + return NULL; + const char* name = java_lang_String::as_utf8_string(name_oop, + java_runtime_name, + sizeof(java_runtime_name)); + return name; + } else { + return NULL; + } +} + // 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) { @@ -1105,14 +1139,14 @@ NamedThread::NamedThread() : Thread() { NamedThread::~NamedThread() { if (_name != NULL) { - FREE_C_HEAP_ARRAY(char, _name); + FREE_C_HEAP_ARRAY(char, _name, mtThread); _name = NULL; } } void NamedThread::set_name(const char* format, ...) { guarantee(_name == NULL, "Only get to set name once."); - _name = NEW_C_HEAP_ARRAY(char, max_name_len); + _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread); guarantee(_name != NULL, "alloc failure"); va_list ap; va_start(ap, format); @@ -1295,6 +1329,7 @@ void JavaThread::initialize() { set_monitor_chunks(NULL); set_next(NULL); set_thread_state(_thread_new); + set_recorder(NULL); _terminated = _not_terminated; _privileged_stack_top = NULL; _array_for_gc = NULL; @@ -1370,6 +1405,7 @@ JavaThread::JavaThread(bool is_attaching_via_jni) : _jni_attach_state = _not_attaching_via_jni; } assert(_deferred_card_mark.is_empty(), "Default MemRegion ctor"); + _safepoint_visible = false; } bool JavaThread::reguard_stack(address cur_sp) { @@ -1432,7 +1468,7 @@ JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) : thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread : os::java_thread; os::create_thread(this, thr_type, stack_sz); - + _safepoint_visible = false; // The _osthread may be NULL here because we ran out of memory (too many threads active). // We need to throw and OutOfMemoryError - however we cannot do this here because the caller // may hold a lock and all locks must be unlocked before throwing the exception (throwing @@ -1450,6 +1486,11 @@ JavaThread::~JavaThread() { tty->print_cr("terminate thread %p", this); } + // Info NMT that this JavaThread is exiting, its memory + // recorder should be collected + assert(!is_safepoint_visible(), "wrong state"); + MemTracker::thread_exiting(this); + // JSR166 -- return the parker to the free list Parker::Release(_parker); _parker = NULL ; @@ -2892,7 +2933,7 @@ void JavaThread::print_stack_on(outputStream* st) { void JavaThread::popframe_preserve_args(ByteSize size_in_bytes, void* start) { assert(_popframe_preserved_args == NULL, "should not wipe out old PopFrame preserved arguments"); if (in_bytes(size_in_bytes) != 0) { - _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes)); + _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes), mtThread); _popframe_preserved_args_size = in_bytes(size_in_bytes); Copy::conjoint_jbytes(start, _popframe_preserved_args, _popframe_preserved_args_size); } @@ -2914,7 +2955,7 @@ WordSize JavaThread::popframe_preserved_args_size_in_words() { void JavaThread::popframe_free_preserved_args() { assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice"); - FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args); + FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args, mtThread); _popframe_preserved_args = NULL; _popframe_preserved_args_size = 0; } @@ -3163,6 +3204,14 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { jint os_init_2_result = os::init_2(); if (os_init_2_result != JNI_OK) return os_init_2_result; + // intialize TLS + ThreadLocalStorage::init(); + + // Bootstrap native memory tracking, so it can start recording memory + // activities before worker thread is started. This is the first phase + // of bootstrapping, VM is currently running in single-thread mode. + MemTracker::bootstrap_single_thread(); + // Initialize output stream logging ostream_init_log(); @@ -3182,9 +3231,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { _number_of_threads = 0; _number_of_non_daemon_threads = 0; - // Initialize TLS - ThreadLocalStorage::init(); - // Initialize global data structures and create system classes in heap vm_init_globals(); @@ -3216,6 +3262,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Initialize Java-Level synchronization subsystem ObjectMonitor::Initialize() ; + // Second phase of bootstrapping, VM is about entering multi-thread mode + MemTracker::bootstrap_multi_thread(); + // Initialize global modules jint status = init_globals(); if (status != JNI_OK) { @@ -3243,6 +3292,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { Universe::verify(); // make sure we're starting with a clean slate } + // Fully start NMT + MemTracker::start(); + // Create the VMThread { TraceTime timer("Start VMThread", TraceStartupTime); VMThread::create(); @@ -3352,6 +3404,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // The VM creates & returns objects of this class. Make sure it's initialized. initialize_class(vmSymbols::java_lang_Class(), CHECK_0); call_initializeSystemClass(CHECK_0); + + // get the Java runtime name after java.lang.System is initialized + JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); } else { warning("java.lang.System not initialized"); } @@ -3544,11 +3599,11 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym if (library == NULL) { const char *sub_msg = " in absolute path, with error: "; size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; - char *buf = NEW_C_HEAP_ARRAY(char, len); + char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); // If we can't find the agent, exit. vm_exit_during_initialization(buf, NULL); - FREE_C_HEAP_ARRAY(char, buf); + FREE_C_HEAP_ARRAY(char, buf, mtThread); } } else { // Try to load the agent from the standard dll directory @@ -3562,7 +3617,7 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym const char *fmt = "%s/bin/java %s -Dkernel.background.download=false" " sun.jkernel.DownloadManager -download client_jvm"; size_t length = strlen(props) + strlen(home) + strlen(fmt) + 1; - char *cmd = NEW_C_HEAP_ARRAY(char, length); + char *cmd = NEW_C_HEAP_ARRAY(char, length, mtThread); jio_snprintf(cmd, length, fmt, home, props); int status = os::fork_and_exec(cmd); FreeHeap(props); @@ -3571,7 +3626,7 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym vm_exit_during_initialization("fork_and_exec failed: %s", strerror(errno)); } - FREE_C_HEAP_ARRAY(char, cmd); + FREE_C_HEAP_ARRAY(char, cmd, mtThread); // when this comes back the instrument.dll should be where it belongs. library = os::dll_load(buffer, ebuf, sizeof ebuf); } @@ -3583,11 +3638,11 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym if (library == NULL) { const char *sub_msg = " on the library path, with error: "; size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; - char *buf = NEW_C_HEAP_ARRAY(char, len); + char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); // If we can't find the agent, exit. vm_exit_during_initialization(buf, NULL); - FREE_C_HEAP_ARRAY(char, buf); + FREE_C_HEAP_ARRAY(char, buf, mtThread); } } } @@ -3756,6 +3811,7 @@ void JavaThread::invoke_shutdown_hooks() { // and VM_Exit op at VM level. // // Shutdown sequence: +// + Shutdown native memory tracking if it is on // + Wait until we are the last non-daemon thread to execute // <-- every thing is still working at this moment --> // + Call java.lang.Shutdown.shutdown(), which will invoke Java level @@ -3801,6 +3857,10 @@ bool Threads::destroy_vm() { Mutex::_as_suspend_equivalent_flag); } + // Shutdown NMT before exit. Otherwise, + // it will run into trouble when system destroys static variables. + MemTracker::shutdown(MemTracker::NMT_normal); + // Hang forever on exit if we are reporting an error. if (ShowMessageBoxOnError && is_error_reported()) { os::infinite_sleep(); @@ -3907,6 +3967,8 @@ void Threads::add(JavaThread* p, bool force_daemon) { daemon = false; } + p->set_safepoint_visible(true); + ThreadService::add_thread(p, daemon); // Possible GC point. @@ -3952,6 +4014,10 @@ void Threads::remove(JavaThread* p) { // to do callbacks into the safepoint code. However, the safepoint code is not aware // of this thread since it is removed from the queue. p->set_terminated_value(); + + // Now, this thread is not visible to safepoint + p->set_safepoint_visible(false); + } // unlock Threads_lock // Since Events::log uses a lock, we grab it outside the Threads_lock diff --git a/hotspot/src/share/vm/runtime/thread.hpp b/hotspot/src/share/vm/runtime/thread.hpp index 7846cc07058..a375f264ff8 100644 --- a/hotspot/src/share/vm/runtime/thread.hpp +++ b/hotspot/src/share/vm/runtime/thread.hpp @@ -41,6 +41,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/threadLocalStorage.hpp" #include "runtime/unhandledOops.hpp" +#include "services/memRecorder.hpp" #include "trace/tracing.hpp" #include "utilities/exceptions.hpp" #include "utilities/top.hpp" @@ -100,12 +101,16 @@ class Thread: public ThreadShadow { //oop _pending_exception; // pending exception for current thread // const char* _exception_file; // file information for exception (debugging only) // int _exception_line; // line information for exception (debugging only) - + protected: // Support for forcing alignment of thread objects for biased locking void* _real_malloc_address; public: - void* operator new(size_t size); + void* operator new(size_t size) { return allocate(size, true); } + void* operator new(size_t size, std::nothrow_t& nothrow_constant) { return allocate(size, false); } void operator delete(void* p); + + protected: + static void* allocate(size_t size, bool throw_excpt, MEMFLAGS flags = mtThread); private: // *************************************************************** @@ -548,7 +553,6 @@ public: virtual void print_on_error(outputStream* st, char* buf, int buflen) const; // Debug-only code - #ifdef ASSERT private: // Deadlock detection support for Mutex locks. List of locks own by thread. @@ -1027,9 +1031,15 @@ class JavaThread: public Thread { bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; } void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; } + // native memory tracking + inline MemRecorder* get_recorder() const { return (MemRecorder*)_recorder; } + inline void set_recorder(MemRecorder* rc) { _recorder = (volatile MemRecorder*)rc; } + + private: + // per-thread memory recorder + volatile MemRecorder* _recorder; // Suspend/resume support for JavaThread - private: void set_ext_suspended() { set_suspend_flag (_ext_suspended); } void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); } @@ -1453,6 +1463,18 @@ public: return result; } + // NMT (Native memory tracking) support. + // This flag helps NMT to determine if this JavaThread will be blocked + // at safepoint. If not, ThreadCritical is needed for writing memory records. + // JavaThread is only safepoint visible when it is in Threads' thread list, + // it is not visible until it is added to the list and becomes invisible + // once it is removed from the list. + public: + bool is_safepoint_visible() const { return _safepoint_visible; } + void set_safepoint_visible(bool visible) { _safepoint_visible = visible; } + private: + bool _safepoint_visible; + // Static operations public: // Returns the running thread as a JavaThread diff --git a/hotspot/src/share/vm/runtime/unhandledOops.cpp b/hotspot/src/share/vm/runtime/unhandledOops.cpp index 9b7211c8d1d..3216da1f2c0 100644 --- a/hotspot/src/share/vm/runtime/unhandledOops.cpp +++ b/hotspot/src/share/vm/runtime/unhandledOops.cpp @@ -37,7 +37,7 @@ const int free_list_size = 256; UnhandledOops::UnhandledOops(Thread* thread) { _thread = thread; - _oop_list = new (ResourceObj::C_HEAP) + _oop_list = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(free_list_size, true); _level = 0; } diff --git a/hotspot/src/share/vm/runtime/vframeArray.cpp b/hotspot/src/share/vm/runtime/vframeArray.cpp index 52b08099922..742197394d8 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.cpp +++ b/hotspot/src/share/vm/runtime/vframeArray.cpp @@ -443,7 +443,7 @@ vframeArray* vframeArray::allocate(JavaThread* thread, int frame_size, GrowableA // Allocate the vframeArray vframeArray * result = (vframeArray*) AllocateHeap(sizeof(vframeArray) + // fixed part sizeof(vframeArrayElement) * (chunk->length() - 1), // variable part - "vframeArray::allocate"); + mtCompiler); result->_frames = chunk->length(); result->_owner_thread = thread; result->_sender = sender; diff --git a/hotspot/src/share/vm/runtime/vframeArray.hpp b/hotspot/src/share/vm/runtime/vframeArray.hpp index 6f8d436c6ca..2eeeb39e60e 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.hpp +++ b/hotspot/src/share/vm/runtime/vframeArray.hpp @@ -108,7 +108,7 @@ class vframeArrayElement : public _ValueObj { // but it does make debugging easier even if we can't look // at the data in each vframeElement -class vframeArray: public CHeapObj { +class vframeArray: public CHeapObj { friend class VMStructs; private: diff --git a/hotspot/src/share/vm/runtime/vframe_hp.cpp b/hotspot/src/share/vm/runtime/vframe_hp.cpp index 274bfc604ce..4f63575d9d6 100644 --- a/hotspot/src/share/vm/runtime/vframe_hp.cpp +++ b/hotspot/src/share/vm/runtime/vframe_hp.cpp @@ -154,7 +154,7 @@ void compiledVFrame::update_local(BasicType type, int index, jvalue value) { } else { // No deferred updates pending for this thread. // allocate in C heap - deferred = new(ResourceObj::C_HEAP) GrowableArray (1, true); + deferred = new(ResourceObj::C_HEAP, mtCompiler) GrowableArray (1, true); thread()->set_deferred_locals(deferred); } deferred->push(new jvmtiDeferredLocalVariableSet(method(), bci(), fr().id())); @@ -323,7 +323,7 @@ jvmtiDeferredLocalVariableSet::jvmtiDeferredLocalVariableSet(methodOop method, i _bci = bci; _id = id; // Alway will need at least one, must be on C heap - _locals = new(ResourceObj::C_HEAP) GrowableArray (1, true); + _locals = new(ResourceObj::C_HEAP, mtCompiler) GrowableArray (1, true); } jvmtiDeferredLocalVariableSet::~jvmtiDeferredLocalVariableSet() { diff --git a/hotspot/src/share/vm/runtime/vframe_hp.hpp b/hotspot/src/share/vm/runtime/vframe_hp.hpp index 6d0bd376482..4edb53bc888 100644 --- a/hotspot/src/share/vm/runtime/vframe_hp.hpp +++ b/hotspot/src/share/vm/runtime/vframe_hp.hpp @@ -89,7 +89,7 @@ class compiledVFrame: public javaVFrame { // any updated locals. class jvmtiDeferredLocalVariable; -class jvmtiDeferredLocalVariableSet : public CHeapObj { +class jvmtiDeferredLocalVariableSet : public CHeapObj { private: methodOop _method; // must be GC'd @@ -119,7 +119,7 @@ private: }; -class jvmtiDeferredLocalVariable : public CHeapObj { +class jvmtiDeferredLocalVariable : public CHeapObj { public: jvmtiDeferredLocalVariable(int index, BasicType type, jvalue value); diff --git a/hotspot/src/share/vm/runtime/virtualspace.cpp b/hotspot/src/share/vm/runtime/virtualspace.cpp index c7e6bf80f4b..38f434dce40 100644 --- a/hotspot/src/share/vm/runtime/virtualspace.cpp +++ b/hotspot/src/share/vm/runtime/virtualspace.cpp @@ -26,6 +26,7 @@ #include "oops/markOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/virtualspace.hpp" +#include "services/memTracker.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -489,6 +490,10 @@ ReservedHeapSpace::ReservedHeapSpace(size_t size, size_t alignment, (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && Universe::narrow_oop_use_implicit_null_checks()) ? lcm(os::vm_page_size(), alignment) : 0) { + if (base() > 0) { + MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); + } + // Only reserved space for the java heap should have a noaccess_prefix // if using compressed oops. protect_noaccess_prefix(size); @@ -504,6 +509,10 @@ ReservedHeapSpace::ReservedHeapSpace(const size_t prefix_size, (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && Universe::narrow_oop_use_implicit_null_checks()) ? lcm(os::vm_page_size(), prefix_align) : 0) { + if (base() > 0) { + MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); + } + protect_noaccess_prefix(prefix_size+suffix_size); } @@ -513,6 +522,7 @@ ReservedCodeSpace::ReservedCodeSpace(size_t r_size, size_t rs_align, bool large) : ReservedSpace(r_size, rs_align, large, /*executable*/ true) { + MemTracker::record_virtual_memory_type((address)base(), mtCode); } // VirtualSpace diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index cc2d0783430..60d87ff937c 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -235,7 +235,6 @@ #ifndef REG_COUNT #define REG_COUNT 0 #endif - // whole purpose of this function is to work around bug c++/27724 in gcc 4.1.1 // with optimization turned on it doesn't affect produced code static inline uint64_t cast_uint64_t(size_t x) @@ -244,6 +243,16 @@ static inline uint64_t cast_uint64_t(size_t x) } +typedef HashtableEntry IntptrHashtableEntry; +typedef Hashtable IntptrHashtable; +typedef Hashtable SymbolHashtable; +typedef HashtableEntry SymbolHashtableEntry; +typedef Hashtable StringHashtable; +typedef TwoOopHashtable klassOopTwoOopHashtable; +typedef Hashtable klassOopHashtable; +typedef HashtableEntry klassHashtableEntry; +typedef TwoOopHashtable SymbolTwoOopHashtable; + //-------------------------------------------------------------------------------- // VM_STRUCTS // @@ -299,7 +308,7 @@ static inline uint64_t cast_uint64_t(size_t x) nonstatic_field(instanceKlass, _protection_domain, oop) \ nonstatic_field(instanceKlass, _signers, objArrayOop) \ nonstatic_field(instanceKlass, _source_file_name, Symbol*) \ - nonstatic_field(instanceKlass, _source_debug_extension, Symbol*) \ + nonstatic_field(instanceKlass, _source_debug_extension, char*) \ nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \ nonstatic_field(instanceKlass, _nonstatic_field_size, int) \ nonstatic_field(instanceKlass, _static_field_size, int) \ @@ -358,7 +367,6 @@ static inline uint64_t cast_uint64_t(size_t x) nonstatic_field(methodDataOopDesc, _arg_stack, intx) \ nonstatic_field(methodDataOopDesc, _arg_returned, intx) \ nonstatic_field(methodOopDesc, _constMethod, constMethodOop) \ - nonstatic_field(methodOopDesc, _constants, constantPoolOop) \ nonstatic_field(methodOopDesc, _method_data, methodDataOop) \ nonstatic_field(methodOopDesc, _interpreter_invocation_count, int) \ nonstatic_field(methodOopDesc, _access_flags, AccessFlags) \ @@ -378,9 +386,8 @@ static inline uint64_t cast_uint64_t(size_t x) volatile_nonstatic_field(methodOopDesc, _from_compiled_entry, address) \ volatile_nonstatic_field(methodOopDesc, _from_interpreted_entry, address) \ volatile_nonstatic_field(constMethodOopDesc, _fingerprint, uint64_t) \ - nonstatic_field(constMethodOopDesc, _method, methodOop) \ + nonstatic_field(constMethodOopDesc, _constants, constantPoolOop) \ nonstatic_field(constMethodOopDesc, _stackmap_data, typeArrayOop) \ - nonstatic_field(constMethodOopDesc, _exception_table, typeArrayOop) \ nonstatic_field(constMethodOopDesc, _constMethod_size, int) \ nonstatic_field(constMethodOopDesc, _interpreter_kind, jbyte) \ nonstatic_field(constMethodOopDesc, _flags, jbyte) \ @@ -417,6 +424,10 @@ static inline uint64_t cast_uint64_t(size_t x) nonstatic_field(LocalVariableTableElement, descriptor_cp_index, u2) \ nonstatic_field(LocalVariableTableElement, signature_cp_index, u2) \ nonstatic_field(LocalVariableTableElement, slot, u2) \ + nonstatic_field(ExceptionTableElement, start_pc, u2) \ + nonstatic_field(ExceptionTableElement, end_pc, u2) \ + nonstatic_field(ExceptionTableElement, handler_pc, u2) \ + nonstatic_field(ExceptionTableElement, catch_type_index, u2) \ nonstatic_field(BreakpointInfo, _orig_bytecode, Bytecodes::Code) \ nonstatic_field(BreakpointInfo, _bci, int) \ nonstatic_field(BreakpointInfo, _name_index, u2) \ @@ -712,26 +723,26 @@ static inline uint64_t cast_uint64_t(size_t x) /* HashtableBucket */ \ /*******************/ \ \ - nonstatic_field(HashtableBucket, _entry, BasicHashtableEntry*) \ + nonstatic_field(HashtableBucket, _entry, BasicHashtableEntry*) \ \ /******************/ \ /* HashtableEntry */ \ /******************/ \ \ - nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ - nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ - nonstatic_field(HashtableEntry, _literal, intptr_t) \ + nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ + nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ + nonstatic_field(IntptrHashtableEntry, _literal, intptr_t) \ \ /*************/ \ /* Hashtable */ \ /*************/ \ \ - nonstatic_field(BasicHashtable, _table_size, int) \ - nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ - nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ - nonstatic_field(BasicHashtable, _first_free_entry, char*) \ - nonstatic_field(BasicHashtable, _end_block, char*) \ - nonstatic_field(BasicHashtable, _entry_size, int) \ + nonstatic_field(BasicHashtable, _table_size, int) \ + nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ + nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ + nonstatic_field(BasicHashtable, _first_free_entry, char*) \ + nonstatic_field(BasicHashtable, _end_block, char*) \ + nonstatic_field(BasicHashtable, _entry_size, int) \ \ /*******************/ \ /* DictionaryEntry */ \ @@ -1452,6 +1463,7 @@ static inline uint64_t cast_uint64_t(size_t x) \ declare_toplevel_type(CheckedExceptionElement) \ declare_toplevel_type(LocalVariableTableElement) \ + declare_toplevel_type(ExceptionTableElement) \ \ /******************************************/ \ /* Generation and space hierarchies */ \ @@ -1539,20 +1551,20 @@ static inline uint64_t cast_uint64_t(size_t x) /* SymbolTable, SystemDictionary */ \ /*********************************/ \ \ - declare_toplevel_type(BasicHashtable) \ - declare_type(Hashtable, BasicHashtable) \ - declare_type(SymbolTable, Hashtable) \ - declare_type(StringTable, Hashtable) \ - declare_type(LoaderConstraintTable, Hashtable) \ - declare_type(TwoOopHashtable, Hashtable) \ - declare_type(Dictionary, TwoOopHashtable) \ - declare_type(PlaceholderTable, TwoOopHashtable) \ - declare_toplevel_type(BasicHashtableEntry) \ - declare_type(HashtableEntry, BasicHashtableEntry) \ - declare_type(DictionaryEntry, HashtableEntry) \ - declare_type(PlaceholderEntry, HashtableEntry) \ - declare_type(LoaderConstraintEntry, HashtableEntry) \ - declare_toplevel_type(HashtableBucket) \ + declare_toplevel_type(BasicHashtable) \ + declare_type(IntptrHashtable, BasicHashtable) \ + declare_type(SymbolTable, SymbolHashtable) \ + declare_type(StringTable, StringHashtable) \ + declare_type(LoaderConstraintTable, klassOopHashtable) \ + declare_type(klassOopTwoOopHashtable, klassOopHashtable) \ + declare_type(Dictionary, klassOopTwoOopHashtable) \ + declare_type(PlaceholderTable, SymbolTwoOopHashtable) \ + declare_toplevel_type(BasicHashtableEntry) \ + declare_type(IntptrHashtableEntry, BasicHashtableEntry) \ + declare_type(DictionaryEntry, klassHashtableEntry) \ + declare_type(PlaceholderEntry, SymbolHashtableEntry) \ + declare_type(LoaderConstraintEntry, klassHashtableEntry) \ + declare_toplevel_type(HashtableBucket) \ declare_toplevel_type(SystemDictionary) \ declare_toplevel_type(vmSymbols) \ declare_toplevel_type(ProtectionDomainEntry) \ @@ -1876,7 +1888,6 @@ static inline uint64_t cast_uint64_t(size_t x) declare_c2_type(StoreNNode, StoreNode) \ declare_c2_type(StoreCMNode, StoreNode) \ declare_c2_type(LoadPLockedNode, LoadPNode) \ - declare_c2_type(LoadLLockedNode, LoadLNode) \ declare_c2_type(SCMemProjNode, ProjNode) \ declare_c2_type(LoadStoreNode, Node) \ declare_c2_type(StorePConditionalNode, LoadStoreNode) \ @@ -1946,14 +1957,12 @@ static inline uint64_t cast_uint64_t(size_t x) declare_c2_type(ReverseBytesLNode, Node) \ declare_c2_type(VectorNode, Node) \ declare_c2_type(AddVBNode, VectorNode) \ - declare_c2_type(AddVCNode, VectorNode) \ declare_c2_type(AddVSNode, VectorNode) \ declare_c2_type(AddVINode, VectorNode) \ declare_c2_type(AddVLNode, VectorNode) \ declare_c2_type(AddVFNode, VectorNode) \ declare_c2_type(AddVDNode, VectorNode) \ declare_c2_type(SubVBNode, VectorNode) \ - declare_c2_type(SubVCNode, VectorNode) \ declare_c2_type(SubVSNode, VectorNode) \ declare_c2_type(SubVINode, VectorNode) \ declare_c2_type(SubVLNode, VectorNode) \ @@ -1964,73 +1973,33 @@ static inline uint64_t cast_uint64_t(size_t x) declare_c2_type(DivVFNode, VectorNode) \ declare_c2_type(DivVDNode, VectorNode) \ declare_c2_type(LShiftVBNode, VectorNode) \ - declare_c2_type(LShiftVCNode, VectorNode) \ declare_c2_type(LShiftVSNode, VectorNode) \ declare_c2_type(LShiftVINode, VectorNode) \ - declare_c2_type(URShiftVBNode, VectorNode) \ - declare_c2_type(URShiftVCNode, VectorNode) \ - declare_c2_type(URShiftVSNode, VectorNode) \ - declare_c2_type(URShiftVINode, VectorNode) \ + declare_c2_type(RShiftVBNode, VectorNode) \ + declare_c2_type(RShiftVSNode, VectorNode) \ + declare_c2_type(RShiftVINode, VectorNode) \ declare_c2_type(AndVNode, VectorNode) \ declare_c2_type(OrVNode, VectorNode) \ declare_c2_type(XorVNode, VectorNode) \ - declare_c2_type(VectorLoadNode, LoadNode) \ - declare_c2_type(Load16BNode, VectorLoadNode) \ - declare_c2_type(Load8BNode, VectorLoadNode) \ - declare_c2_type(Load4BNode, VectorLoadNode) \ - declare_c2_type(Load8CNode, VectorLoadNode) \ - declare_c2_type(Load4CNode, VectorLoadNode) \ - declare_c2_type(Load2CNode, VectorLoadNode) \ - declare_c2_type(Load8SNode, VectorLoadNode) \ - declare_c2_type(Load4SNode, VectorLoadNode) \ - declare_c2_type(Load2SNode, VectorLoadNode) \ - declare_c2_type(Load4INode, VectorLoadNode) \ - declare_c2_type(Load2INode, VectorLoadNode) \ - declare_c2_type(Load2LNode, VectorLoadNode) \ - declare_c2_type(Load4FNode, VectorLoadNode) \ - declare_c2_type(Load2FNode, VectorLoadNode) \ - declare_c2_type(Load2DNode, VectorLoadNode) \ - declare_c2_type(VectorStoreNode, StoreNode) \ - declare_c2_type(Store16BNode, VectorStoreNode) \ - declare_c2_type(Store8BNode, VectorStoreNode) \ - declare_c2_type(Store4BNode, VectorStoreNode) \ - declare_c2_type(Store8CNode, VectorStoreNode) \ - declare_c2_type(Store4CNode, VectorStoreNode) \ - declare_c2_type(Store2CNode, VectorStoreNode) \ - declare_c2_type(Store4INode, VectorStoreNode) \ - declare_c2_type(Store2INode, VectorStoreNode) \ - declare_c2_type(Store2LNode, VectorStoreNode) \ - declare_c2_type(Store4FNode, VectorStoreNode) \ - declare_c2_type(Store2FNode, VectorStoreNode) \ - declare_c2_type(Store2DNode, VectorStoreNode) \ - declare_c2_type(Replicate16BNode, VectorNode) \ - declare_c2_type(Replicate8BNode, VectorNode) \ - declare_c2_type(Replicate4BNode, VectorNode) \ - declare_c2_type(Replicate8CNode, VectorNode) \ - declare_c2_type(Replicate4CNode, VectorNode) \ - declare_c2_type(Replicate2CNode, VectorNode) \ - declare_c2_type(Replicate8SNode, VectorNode) \ - declare_c2_type(Replicate4SNode, VectorNode) \ - declare_c2_type(Replicate2SNode, VectorNode) \ - declare_c2_type(Replicate4INode, VectorNode) \ - declare_c2_type(Replicate2INode, VectorNode) \ - declare_c2_type(Replicate2LNode, VectorNode) \ - declare_c2_type(Replicate4FNode, VectorNode) \ - declare_c2_type(Replicate2FNode, VectorNode) \ - declare_c2_type(Replicate2DNode, VectorNode) \ + declare_c2_type(LoadVectorNode, LoadNode) \ + declare_c2_type(StoreVectorNode, StoreNode) \ + declare_c2_type(ReplicateBNode, VectorNode) \ + declare_c2_type(ReplicateSNode, VectorNode) \ + declare_c2_type(ReplicateINode, VectorNode) \ + declare_c2_type(ReplicateLNode, VectorNode) \ + declare_c2_type(ReplicateFNode, VectorNode) \ + declare_c2_type(ReplicateDNode, VectorNode) \ declare_c2_type(PackNode, VectorNode) \ declare_c2_type(PackBNode, PackNode) \ - declare_c2_type(PackCNode, PackNode) \ declare_c2_type(PackSNode, PackNode) \ declare_c2_type(PackINode, PackNode) \ declare_c2_type(PackLNode, PackNode) \ declare_c2_type(PackFNode, PackNode) \ declare_c2_type(PackDNode, PackNode) \ - declare_c2_type(Pack2x1BNode, PackNode) \ - declare_c2_type(Pack2x2BNode, PackNode) \ + declare_c2_type(Pack2LNode, PackNode) \ + declare_c2_type(Pack2DNode, PackNode) \ declare_c2_type(ExtractNode, Node) \ declare_c2_type(ExtractBNode, ExtractNode) \ - declare_c2_type(ExtractCNode, ExtractNode) \ declare_c2_type(ExtractSNode, ExtractNode) \ declare_c2_type(ExtractINode, ExtractNode) \ declare_c2_type(ExtractLNode, ExtractNode) \ @@ -2336,6 +2305,7 @@ static inline uint64_t cast_uint64_t(size_t x) declare_constant(constMethodOopDesc::_has_linenumber_table) \ declare_constant(constMethodOopDesc::_has_checked_exceptions) \ declare_constant(constMethodOopDesc::_has_localvariable_table) \ + declare_constant(constMethodOopDesc::_has_exception_table) \ \ /*************************************/ \ /* instanceKlass enum */ \ @@ -2352,7 +2322,6 @@ static inline uint64_t cast_uint64_t(size_t x) declare_constant(FieldInfo::initval_index_offset) \ declare_constant(FieldInfo::low_offset) \ declare_constant(FieldInfo::high_offset) \ - declare_constant(FieldInfo::generic_signature_offset) \ declare_constant(FieldInfo::field_slots) \ \ /************************************************/ \ diff --git a/hotspot/src/share/vm/runtime/vmThread.hpp b/hotspot/src/share/vm/runtime/vmThread.hpp index f78449676b7..acf95842bf1 100644 --- a/hotspot/src/share/vm/runtime/vmThread.hpp +++ b/hotspot/src/share/vm/runtime/vmThread.hpp @@ -46,7 +46,7 @@ // Encapsulates both queue management and // and priority policy // -class VMOperationQueue : public CHeapObj { +class VMOperationQueue : public CHeapObj { private: enum Priorities { SafepointPriority, // Highest priority (operation executed at a safepoint) diff --git a/hotspot/src/share/vm/runtime/vm_operations.hpp b/hotspot/src/share/vm/runtime/vm_operations.hpp index 081c428a62b..ccbad94b728 100644 --- a/hotspot/src/share/vm/runtime/vm_operations.hpp +++ b/hotspot/src/share/vm/runtime/vm_operations.hpp @@ -96,7 +96,7 @@ template(JFRCheckpoint) \ template(Exit) \ -class VM_Operation: public CHeapObj { +class VM_Operation: public CHeapObj { public: enum Mode { _safepoint, // blocking, safepoint, vm_op C-heap allocated diff --git a/hotspot/src/share/vm/services/attachListener.cpp b/hotspot/src/share/vm/services/attachListener.cpp index 3753a64cc95..14b4aa08eca 100644 --- a/hotspot/src/share/vm/services/attachListener.cpp +++ b/hotspot/src/share/vm/services/attachListener.cpp @@ -320,7 +320,7 @@ static jint set_ccstr_flag(const char* name, AttachOperation* op, outputStream* } bool res = CommandLineFlags::ccstrAtPut((char*)name, &value, ATTACH_ON_DEMAND); if (res) { - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); } else { out->print_cr("setting flag %s failed", name); } diff --git a/hotspot/src/share/vm/services/attachListener.hpp b/hotspot/src/share/vm/services/attachListener.hpp index ba8fb93227b..e39c3fde3f9 100644 --- a/hotspot/src/share/vm/services/attachListener.hpp +++ b/hotspot/src/share/vm/services/attachListener.hpp @@ -98,7 +98,7 @@ class AttachListener: AllStatic { }; #ifndef SERVICES_KERNEL -class AttachOperation: public CHeapObj { +class AttachOperation: public CHeapObj { public: enum { name_length_max = 16, // maximum length of name diff --git a/hotspot/src/share/vm/services/diagnosticArgument.cpp b/hotspot/src/share/vm/services/diagnosticArgument.cpp index e2ced389105..23267fae520 100644 --- a/hotspot/src/share/vm/services/diagnosticArgument.cpp +++ b/hotspot/src/share/vm/services/diagnosticArgument.cpp @@ -140,7 +140,7 @@ template <> void DCmdArgument::parse_value(const char* str, if (str == NULL) { _value = NULL; } else { - _value = NEW_C_HEAP_ARRAY(char, len+1); + _value = NEW_C_HEAP_ARRAY(char, len+1, mtInternal); strncpy(_value, str, len); _value[len] = 0; } @@ -159,7 +159,7 @@ template <> void DCmdArgument::init_value(TRAPS) { template <> void DCmdArgument::destroy_value() { if (_value != NULL) { - FREE_C_HEAP_ARRAY(char, _value); + FREE_C_HEAP_ARRAY(char, _value, mtInternal); set_value(NULL); } } diff --git a/hotspot/src/share/vm/services/diagnosticArgument.hpp b/hotspot/src/share/vm/services/diagnosticArgument.hpp index 8881e99556c..596353b0752 100644 --- a/hotspot/src/share/vm/services/diagnosticArgument.hpp +++ b/hotspot/src/share/vm/services/diagnosticArgument.hpp @@ -31,17 +31,17 @@ #include "runtime/thread.hpp" #include "utilities/exceptions.hpp" -class StringArrayArgument : public CHeapObj { +class StringArrayArgument : public CHeapObj { private: GrowableArray* _array; public: StringArrayArgument() { - _array = new(ResourceObj::C_HEAP)GrowableArray(32, true); + _array = new(ResourceObj::C_HEAP, mtInternal)GrowableArray(32, true); assert(_array != NULL, "Sanity check"); } void add(const char* str, size_t len) { if (str != NULL) { - char* ptr = NEW_C_HEAP_ARRAY(char, len+1); + char* ptr = NEW_C_HEAP_ARRAY(char, len+1, mtInternal); strncpy(ptr, str, len); ptr[len] = 0; _array->append(ptr); @@ -53,7 +53,7 @@ public: ~StringArrayArgument() { for (int i=0; i<_array->length(); i++) { if(_array->at(i) != NULL) { // Safety check - FREE_C_HEAP_ARRAY(char, _array->at(i)); + FREE_C_HEAP_ARRAY(char, _array->at(i), mtInternal); } } delete _array; diff --git a/hotspot/src/share/vm/services/diagnosticCommand.hpp b/hotspot/src/share/vm/services/diagnosticCommand.hpp index d5c5cd172aa..cf4134f4123 100644 --- a/hotspot/src/share/vm/services/diagnosticCommand.hpp +++ b/hotspot/src/share/vm/services/diagnosticCommand.hpp @@ -48,7 +48,7 @@ public: "With no argument this will show a list of available commands. " "'help all' will show help for all commands."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments(); virtual void execute(TRAPS); }; @@ -60,7 +60,7 @@ public: static const char* description() { return "Print JVM version information."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS); }; @@ -72,7 +72,7 @@ public: static const char* description() { return "Print the command line used to start this VM instance."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS) { Arguments::print_on(_output); @@ -88,7 +88,7 @@ public: return "Print system properties."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS); @@ -105,7 +105,7 @@ public: return "Print VM flag options and their current values."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments(); virtual void execute(TRAPS); @@ -121,7 +121,7 @@ public: return "Print VM uptime."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments(); virtual void execute(TRAPS); diff --git a/hotspot/src/share/vm/services/diagnosticFramework.cpp b/hotspot/src/share/vm/services/diagnosticFramework.cpp index 73e9bdc540c..2ae7866f6c6 100644 --- a/hotspot/src/share/vm/services/diagnosticFramework.cpp +++ b/hotspot/src/share/vm/services/diagnosticFramework.cpp @@ -75,11 +75,13 @@ bool DCmdArgIter::next(TRAPS) { } // extracting first item, argument or option name _key_addr = &_buffer[_cursor]; + bool arg_had_quotes = false; while (_cursor <= _len - 1 && _buffer[_cursor] != '=' && _buffer[_cursor] != _delim) { // argument can be surrounded by single or double quotes if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') { _key_addr++; char quote = _buffer[_cursor]; + arg_had_quotes = true; while (_cursor < _len - 1) { _cursor++; if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') { @@ -95,16 +97,22 @@ bool DCmdArgIter::next(TRAPS) { _cursor++; } _key_len = &_buffer[_cursor] - _key_addr; + if (arg_had_quotes) { + // if the argument was quoted, we need to step past the last quote here + _cursor++; + } // check if the argument has the = format if (_cursor <= _len -1 && _buffer[_cursor] == '=') { _cursor++; _value_addr = &_buffer[_cursor]; + bool value_had_quotes = false; // extract the value while (_cursor <= _len - 1 && _buffer[_cursor] != _delim) { // value can be surrounded by simple or double quotes if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') { _value_addr++; char quote = _buffer[_cursor]; + value_had_quotes = true; while (_cursor < _len - 1) { _cursor++; if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') { @@ -120,6 +128,10 @@ bool DCmdArgIter::next(TRAPS) { _cursor++; } _value_len = &_buffer[_cursor] - _value_addr; + if (value_had_quotes) { + // if the value was quoted, we need to step past the last quote here + _cursor++; + } } else { _value_addr = NULL; _value_len = 0; @@ -185,8 +197,17 @@ void DCmdParser::parse(CmdLine* line, char delim, TRAPS) { arg->read_value(iter.key_addr(), iter.key_length(), CHECK); next_argument = next_argument->next(); } else { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Unknown argument in diagnostic command"); + const size_t buflen = 120; + const size_t argbuflen = 30; + char buf[buflen]; + char argbuf[argbuflen]; + size_t len = MIN2(iter.key_length(), argbuflen - 1); + + strncpy(argbuf, iter.key_addr(), len); + argbuf[len] = '\0'; + jio_snprintf(buf, buflen - 1, "Unknown argument '%s' in diagnostic command.", argbuf); + + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } } cont = iter.next(CHECK); @@ -207,19 +228,21 @@ GenDCmdArgument* DCmdParser::lookup_dcmd_option(const char* name, size_t len) { } void DCmdParser::check(TRAPS) { + const size_t buflen = 256; + char buf[buflen]; GenDCmdArgument* arg = _arguments_list; while (arg != NULL) { if (arg->is_mandatory() && !arg->has_value()) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Missing argument for diagnostic command"); + jio_snprintf(buf, buflen - 1, "The argument '%s' is mandatory.", arg->name()); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } arg = arg->next(); } arg = _options; while (arg != NULL) { if (arg->is_mandatory() && !arg->has_value()) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Missing option for diagnostic command"); + jio_snprintf(buf, buflen - 1, "The option '%s' is mandatory.", arg->name()); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } arg = arg->next(); } diff --git a/hotspot/src/share/vm/services/diagnosticFramework.hpp b/hotspot/src/share/vm/services/diagnosticFramework.hpp index f9ea562344c..08b24e07f33 100644 --- a/hotspot/src/share/vm/services/diagnosticFramework.hpp +++ b/hotspot/src/share/vm/services/diagnosticFramework.hpp @@ -238,6 +238,16 @@ public: static const char* name() { return "No Name";} static const char* description() { return "No Help";} static const char* disabled_message() { return "Diagnostic command currently disabled"; } + // The impact() method returns a description of the intrusiveness of the diagnostic + // command on the Java Virtual Machine behavior. The rational for this method is that some + // diagnostic commands can seriously disrupt the behavior of the Java Virtual Machine + // (for instance a Thread Dump for an application with several tens of thousands of threads, + // or a Head Dump with a 40GB+ heap size) and other diagnostic commands have no serious + // impact on the JVM (for instance, getting the command line arguments or the JVM version). + // The recommended format for the description is : [longer description], + // where the impact level is selected among this list: {Low, Medium, High}. The optional + // longer description can provide more specific details like the fact that Thread Dump + // impact depends on the heap size. static const char* impact() { return "Low: No impact"; } static int num_arguments() { return 0; } outputStream* output() { return _output; } @@ -250,7 +260,7 @@ public: bool has_arg = iter.next(CHECK); if (has_arg) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Unknown argument in diagnostic command"); + "The argument list of this diagnostic command should be empty."); } } virtual void execute(TRAPS) { } @@ -310,7 +320,7 @@ public: // manages the status of the diagnostic command (hidden, enabled). A DCmdFactory // has to be registered to make the diagnostic command available (see // management.cpp) -class DCmdFactory: public CHeapObj { +class DCmdFactory: public CHeapObj { private: static Mutex* _dcmdFactory_lock; // Pointer to the next factory in the singly-linked list of registered @@ -368,7 +378,7 @@ public: DCmdFactory(DCmdClass::num_arguments(), enabled, hidden) { } // Returns a C-heap allocated instance virtual DCmd* create_Cheap_instance(outputStream* output) { - return new (ResourceObj::C_HEAP) DCmdClass(output, true); + return new (ResourceObj::C_HEAP, mtInternal) DCmdClass(output, true); } // Returns a resourceArea allocated instance virtual DCmd* create_resource_instance(outputStream* output) { diff --git a/hotspot/src/share/vm/services/gcNotifier.cpp b/hotspot/src/share/vm/services/gcNotifier.cpp index c43dadead0b..abb2dd6e798 100644 --- a/hotspot/src/share/vm/services/gcNotifier.cpp +++ b/hotspot/src/share/vm/services/gcNotifier.cpp @@ -45,7 +45,7 @@ void GCNotifier::pushNotification(GCMemoryManager *mgr, const char *action, cons // GC may occur between now and the creation of the notification int num_pools = MemoryService::num_memory_pools(); // stat is deallocated inside GCNotificationRequest - GCStatInfo* stat = new(ResourceObj::C_HEAP) GCStatInfo(num_pools); + GCStatInfo* stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(num_pools); mgr->get_last_gc_stat(stat); GCNotificationRequest *request = new GCNotificationRequest(os::javaTimeMillis(),mgr,action,cause,stat); addRequest(request); diff --git a/hotspot/src/share/vm/services/gcNotifier.hpp b/hotspot/src/share/vm/services/gcNotifier.hpp index c26765e824e..1ac807ba592 100644 --- a/hotspot/src/share/vm/services/gcNotifier.hpp +++ b/hotspot/src/share/vm/services/gcNotifier.hpp @@ -30,7 +30,7 @@ #include "services/memoryService.hpp" #include "services/memoryManager.hpp" -class GCNotificationRequest : public CHeapObj { +class GCNotificationRequest : public CHeapObj { friend class GCNotifier; GCNotificationRequest *next; jlong timestamp; diff --git a/hotspot/src/share/vm/services/heapDumper.cpp b/hotspot/src/share/vm/services/heapDumper.cpp index 3cc0e5b6813..73f4a9b6120 100644 --- a/hotspot/src/share/vm/services/heapDumper.cpp +++ b/hotspot/src/share/vm/services/heapDumper.cpp @@ -436,7 +436,7 @@ DumpWriter::DumpWriter(const char* path) { // sufficient memory then reduce size until we can allocate something. _size = io_buffer_size; do { - _buffer = (char*)os::malloc(_size); + _buffer = (char*)os::malloc(_size, mtInternal); if (_buffer == NULL) { _size = _size >> 1; } @@ -1405,7 +1405,7 @@ class VM_HeapDumper : public VM_GC_Operation { _gc_before_heap_dump = gc_before_heap_dump; _is_segmented_dump = false; _dump_start = (jlong)-1; - _klass_map = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_CLASS_COUNT, true); + _klass_map = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_CLASS_COUNT, true); _stack_traces = NULL; _num_threads = 0; if (oome) { @@ -1426,7 +1426,7 @@ class VM_HeapDumper : public VM_GC_Operation { for (int i=0; i < _num_threads; i++) { delete _stack_traces[i]; } - FREE_C_HEAP_ARRAY(ThreadStackTrace*, _stack_traces); + FREE_C_HEAP_ARRAY(ThreadStackTrace*, _stack_traces, mtInternal); } delete _klass_map; } @@ -1806,7 +1806,7 @@ void VM_HeapDumper::dump_stack_traces() { writer()->write_u4(0); // thread number writer()->write_u4(0); // frame count - _stack_traces = NEW_C_HEAP_ARRAY(ThreadStackTrace*, Threads::number_of_threads()); + _stack_traces = NEW_C_HEAP_ARRAY(ThreadStackTrace*, Threads::number_of_threads(), mtInternal); int frame_serial_num = 0; for (JavaThread* thread = Threads::first(); thread != NULL ; thread = thread->next()) { oop threadObj = thread->threadObj(); @@ -2005,7 +2005,7 @@ void HeapDumper::dump_heap(bool oome) { dump_file_name, os::current_process_id(), dump_file_ext); } const size_t len = strlen(base_path) + 1; - my_path = (char*)os::malloc(len); + my_path = (char*)os::malloc(len, mtInternal); if (my_path == NULL) { warning("Cannot create heap dump file. Out of system memory."); return; @@ -2014,7 +2014,7 @@ void HeapDumper::dump_heap(bool oome) { } else { // Append a sequence number id for dumps following the first const size_t len = strlen(base_path) + max_digit_chars + 2; // for '.' and \0 - my_path = (char*)os::malloc(len); + my_path = (char*)os::malloc(len, mtInternal); if (my_path == NULL) { warning("Cannot create heap dump file. Out of system memory."); return; diff --git a/hotspot/src/share/vm/services/lowMemoryDetector.hpp b/hotspot/src/share/vm/services/lowMemoryDetector.hpp index ce15bad2e21..311a3a418f6 100644 --- a/hotspot/src/share/vm/services/lowMemoryDetector.hpp +++ b/hotspot/src/share/vm/services/lowMemoryDetector.hpp @@ -63,7 +63,7 @@ class OopClosure; class MemoryPool; -class ThresholdSupport : public CHeapObj { +class ThresholdSupport : public CHeapObj { private: bool _support_high_threshold; bool _support_low_threshold; @@ -112,7 +112,7 @@ class ThresholdSupport : public CHeapObj { } }; -class SensorInfo : public CHeapObj { +class SensorInfo : public CHeapObj { private: instanceOop _sensor_obj; bool _sensor_on; diff --git a/hotspot/src/share/vm/services/management.cpp b/hotspot/src/share/vm/services/management.cpp index 48a5b6a0997..7d917e7217d 100644 --- a/hotspot/src/share/vm/services/management.cpp +++ b/hotspot/src/share/vm/services/management.cpp @@ -47,6 +47,7 @@ #include "services/jmm.h" #include "services/lowMemoryDetector.hpp" #include "services/gcNotifier.hpp" +#include "services/nmtDCmd.hpp" #include "services/management.hpp" #include "services/memoryManager.hpp" #include "services/memoryPool.hpp" @@ -121,6 +122,7 @@ void Management::init() { // Registration of the diagnostic commands DCmdRegistrant::register_dcmds(); DCmdRegistrant::register_dcmds_ext(); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(true, false)); } void Management::initialize(TRAPS) { diff --git a/hotspot/src/share/vm/services/memBaseline.cpp b/hotspot/src/share/vm/services/memBaseline.cpp new file mode 100644 index 00000000000..5b829751649 --- /dev/null +++ b/hotspot/src/share/vm/services/memBaseline.cpp @@ -0,0 +1,387 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "memory/allocation.hpp" +#include "services/memBaseline.hpp" +#include "services/memTracker.hpp" + +MemType2Name MemBaseline::MemType2NameMap[NUMBER_OF_MEMORY_TYPE] = { + {mtJavaHeap, "Java Heap"}, + {mtClass, "Class"}, + {mtThreadStack,"Thread Stack"}, + {mtThread, "Thread"}, + {mtCode, "Code"}, + {mtGC, "GC"}, + {mtCompiler, "Compiler"}, + {mtInternal, "Internal"}, + {mtOther, "Other"}, + {mtSymbol, "Symbol"}, + {mtNMT, "Memory Tracking"}, + {mtChunk, "Pooled Free Chunks"}, + {mtNone, "Unknown"} // It can happen when type tagging records are lagging + // behind +}; + +MemBaseline::MemBaseline() { + _baselined = false; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index].set_type(MemType2NameMap[index]._flag); + _vm_data[index].set_type(MemType2NameMap[index]._flag); + _arena_data[index].set_type(MemType2NameMap[index]._flag); + } + + _malloc_cs = NULL; + _vm_cs = NULL; + + _number_of_classes = 0; + _number_of_threads = 0; +} + + +void MemBaseline::clear() { + if (_malloc_cs != NULL) { + delete _malloc_cs; + _malloc_cs = NULL; + } + + if (_vm_cs != NULL) { + delete _vm_cs; + _vm_cs = NULL; + } + + reset(); +} + + +void MemBaseline::reset() { + _baselined = false; + _total_vm_reserved = 0; + _total_vm_committed = 0; + _total_malloced = 0; + _number_of_classes = 0; + + if (_malloc_cs != NULL) _malloc_cs->clear(); + if (_vm_cs != NULL) _vm_cs->clear(); + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index].clear(); + _vm_data[index].clear(); + _arena_data[index].clear(); + } +} + +MemBaseline::~MemBaseline() { + if (_malloc_cs != NULL) { + delete _malloc_cs; + } + + if (_vm_cs != NULL) { + delete _vm_cs; + } +} + +// baseline malloc'd memory records, generate overall summary and summaries by +// memory types +bool MemBaseline::baseline_malloc_summary(const MemPointerArray* malloc_records) { + MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); + MemPointerRecord* mptr = (MemPointerRecord*)mItr.current(); + size_t used_arena_size = 0; + int index; + while (mptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(mptr->flags())); + size_t size = mptr->size(); + _total_malloced += size; + _malloc_data[index].inc(size); + if (MemPointerRecord::is_arena_record(mptr->flags())) { + // see if arena size record present + MemPointerRecord* next_p = (MemPointerRecordEx*)mItr.peek_next(); + if (MemPointerRecord::is_arena_size_record(next_p->flags())) { + assert(next_p->is_size_record_of_arena(mptr), "arena records do not match"); + size = next_p->size(); + _arena_data[index].inc(size); + used_arena_size += size; + mItr.next(); + } + } + mptr = (MemPointerRecordEx*)mItr.next(); + } + + // substract used arena size to get size of arena chunk in free list + index = flag2index(mtChunk); + _malloc_data[index].reduce(used_arena_size); + // we really don't know how many chunks in free list, so just set to + // 0 + _malloc_data[index].overwrite_counter(0); + + return true; +} + +// baseline mmap'd memory records, generate overall summary and summaries by +// memory types +bool MemBaseline::baseline_vm_summary(const MemPointerArray* vm_records) { + MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); + VMMemRegion* vptr = (VMMemRegion*)vItr.current(); + int index; + while (vptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(vptr->flags())); + + // we use the number of thread stack to count threads + if (IS_MEMORY_TYPE(vptr->flags(), mtThreadStack)) { + _number_of_threads ++; + } + _total_vm_reserved += vptr->reserved_size(); + _total_vm_committed += vptr->committed_size(); + _vm_data[index].inc(vptr->reserved_size(), vptr->committed_size()); + vptr = (VMMemRegion*)vItr.next(); + } + return true; +} + +// baseline malloc'd memory by callsites, but only the callsites with memory allocation +// over 1KB are stored. +bool MemBaseline::baseline_malloc_details(const MemPointerArray* malloc_records) { + assert(MemTracker::track_callsite(), "detail tracking is off"); + + MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); + MemPointerRecordEx* mptr = (MemPointerRecordEx*)mItr.current(); + MallocCallsitePointer mp; + + if (_malloc_cs == NULL) { + _malloc_cs = new (std::nothrow) MemPointerArrayImpl(64); + // out of native memory + if (_malloc_cs == NULL) { + return false; + } + } else { + _malloc_cs->clear(); + } + + // baseline memory that is totaled over 1 KB + while (mptr != NULL) { + if (!MemPointerRecord::is_arena_size_record(mptr->flags())) { + // skip thread stacks + if (!IS_MEMORY_TYPE(mptr->flags(), mtThreadStack)) { + if (mp.addr() != mptr->pc()) { + if ((mp.amount()/K) > 0) { + if (!_malloc_cs->append(&mp)) { + return false; + } + } + mp = MallocCallsitePointer(mptr->pc()); + } + mp.inc(mptr->size()); + } + } + mptr = (MemPointerRecordEx*)mItr.next(); + } + + if (mp.addr() != 0 && (mp.amount()/K) > 0) { + if (!_malloc_cs->append(&mp)) { + return false; + } + } + return true; +} + +// baseline mmap'd memory by callsites +bool MemBaseline::baseline_vm_details(const MemPointerArray* vm_records) { + assert(MemTracker::track_callsite(), "detail tracking is off"); + + VMCallsitePointer vp; + MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); + VMMemRegionEx* vptr = (VMMemRegionEx*)vItr.current(); + + if (_vm_cs == NULL) { + _vm_cs = new (std::nothrow) MemPointerArrayImpl(64); + if (_vm_cs == NULL) { + return false; + } + } else { + _vm_cs->clear(); + } + + while (vptr != NULL) { + if (vp.addr() != vptr->pc()) { + if (!_vm_cs->append(&vp)) { + return false; + } + vp = VMCallsitePointer(vptr->pc()); + } + vp.inc(vptr->size(), vptr->committed_size()); + vptr = (VMMemRegionEx*)vItr.next(); + } + if (vp.addr() != 0) { + if (!_vm_cs->append(&vp)) { + return false; + } + } + return true; +} + +// baseline a snapshot. If summary_only = false, memory usages aggregated by +// callsites are also baselined. +bool MemBaseline::baseline(MemSnapshot& snapshot, bool summary_only) { + MutexLockerEx snapshot_locker(snapshot._lock, true); + reset(); + _baselined = baseline_malloc_summary(snapshot._alloc_ptrs) && + baseline_vm_summary(snapshot._vm_ptrs); + _number_of_classes = SystemDictionary::number_of_classes(); + + if (!summary_only && MemTracker::track_callsite() && _baselined) { + ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_pc); + ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_pc); + _baselined = baseline_malloc_details(snapshot._alloc_ptrs) && + baseline_vm_details(snapshot._vm_ptrs); + ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_addr); + ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_addr); + } + return _baselined; +} + + +int MemBaseline::flag2index(MEMFLAGS flag) const { + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + if (MemType2NameMap[index]._flag == flag) { + return index; + } + } + assert(false, "no type"); + return -1; +} + +const char* MemBaseline::type2name(MEMFLAGS type) { + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + if (MemType2NameMap[index]._flag == type) { + return MemType2NameMap[index]._name; + } + } + assert(false, "no type"); + return NULL; +} + + +MemBaseline& MemBaseline::operator=(const MemBaseline& other) { + _total_malloced = other._total_malloced; + _total_vm_reserved = other._total_vm_reserved; + _total_vm_committed = other._total_vm_committed; + + _baselined = other._baselined; + _number_of_classes = other._number_of_classes; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index] = other._malloc_data[index]; + _vm_data[index] = other._vm_data[index]; + _arena_data[index] = other._arena_data[index]; + } + + if (MemTracker::track_callsite()) { + assert(_malloc_cs != NULL && _vm_cs != NULL, "out of memory"); + assert(other._malloc_cs != NULL && other._vm_cs != NULL, + "not properly baselined"); + _malloc_cs->clear(); + _vm_cs->clear(); + int index; + for (index = 0; index < other._malloc_cs->length(); index ++) { + _malloc_cs->append(other._malloc_cs->at(index)); + } + + for (index = 0; index < other._vm_cs->length(); index ++) { + _vm_cs->append(other._vm_cs->at(index)); + } + } + return *this; +} + +/* compare functions for sorting */ + +// sort snapshot malloc'd records in callsite pc order +int MemBaseline::malloc_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::track_callsite(),"Just check"); + const MemPointerRecordEx* mp1 = (const MemPointerRecordEx*)p1; + const MemPointerRecordEx* mp2 = (const MemPointerRecordEx*)p2; + return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); +} + +// sort baselined malloc'd records in size order +int MemBaseline::bl_malloc_sort_by_size(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MallocCallsitePointer* mp1 = (const MallocCallsitePointer*)p1; + const MallocCallsitePointer* mp2 = (const MallocCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp2->amount(), mp1->amount()); +} + +// sort baselined malloc'd records in callsite pc order +int MemBaseline::bl_malloc_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MallocCallsitePointer* mp1 = (const MallocCallsitePointer*)p1; + const MallocCallsitePointer* mp2 = (const MallocCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); +} + +// sort snapshot mmap'd records in callsite pc order +int MemBaseline::vm_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::track_callsite(),"Just check"); + const VMMemRegionEx* mp1 = (const VMMemRegionEx*)p1; + const VMMemRegionEx* mp2 = (const VMMemRegionEx*)p2; + return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); +} + +// sort baselined mmap'd records in size (reserved size) order +int MemBaseline::bl_vm_sort_by_size(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMCallsitePointer* mp1 = (const VMCallsitePointer*)p1; + const VMCallsitePointer* mp2 = (const VMCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp2->reserved_amount(), mp1->reserved_amount()); +} + +// sort baselined mmap'd records in callsite pc order +int MemBaseline::bl_vm_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMCallsitePointer* mp1 = (const VMCallsitePointer*)p1; + const VMCallsitePointer* mp2 = (const VMCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); +} + + +// sort snapshot malloc'd records in memory block address order +int MemBaseline::malloc_sort_by_addr(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MemPointerRecord* mp1 = (const MemPointerRecord*)p1; + const MemPointerRecord* mp2 = (const MemPointerRecord*)p2; + int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); + assert(delta != 0, "dup pointer"); + return delta; +} + +// sort snapshot mmap'd records in memory block address order +int MemBaseline::vm_sort_by_addr(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMMemRegion* mp1 = (const VMMemRegion*)p1; + const VMMemRegion* mp2 = (const VMMemRegion*)p2; + int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); + assert(delta != 0, "dup pointer"); + return delta; +} diff --git a/hotspot/src/share/vm/services/memBaseline.hpp b/hotspot/src/share/vm/services/memBaseline.hpp new file mode 100644 index 00000000000..2affa2b96ca --- /dev/null +++ b/hotspot/src/share/vm/services/memBaseline.hpp @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_BASELINE_HPP +#define SHARE_VM_SERVICES_MEM_BASELINE_HPP + +#include "memory/allocation.hpp" +#include "runtime/mutex.hpp" +#include "services/memPtr.hpp" +#include "services/memSnapshot.hpp" + +// compare unsigned number +#define UNSIGNED_COMPARE(a, b) ((a > b) ? 1 : ((a == b) ? 0 : -1)) + +/* + * MallocCallsitePointer and VMCallsitePointer are used + * to baseline memory blocks with their callsite information. + * They are only available when detail tracking is turned + * on. + */ + +/* baselined malloc record aggregated by callsite */ +class MallocCallsitePointer : public MemPointer { + private: + size_t _count; // number of malloc invocation from this callsite + size_t _amount; // total amount of memory malloc-ed from this callsite + + public: + MallocCallsitePointer() { + _count = 0; + _amount = 0; + } + + MallocCallsitePointer(address pc) : MemPointer(pc) { + _count = 0; + _amount = 0; + } + + MallocCallsitePointer& operator=(const MallocCallsitePointer& p) { + MemPointer::operator=(p); + _count = p.count(); + _amount = p.amount(); + return *this; + } + + inline void inc(size_t size) { + _count ++; + _amount += size; + }; + + inline size_t count() const { + return _count; + } + + inline size_t amount() const { + return _amount; + } +}; + +// baselined virtual memory record aggregated by callsite +class VMCallsitePointer : public MemPointer { + private: + size_t _count; // number of invocation from this callsite + size_t _reserved_amount; // total reserved amount + size_t _committed_amount; // total committed amount + + public: + VMCallsitePointer() { + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMCallsitePointer(address pc) : MemPointer(pc) { + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMCallsitePointer& operator=(const VMCallsitePointer& p) { + MemPointer::operator=(p); + _count = p.count(); + _reserved_amount = p.reserved_amount(); + _committed_amount = p.committed_amount(); + return *this; + } + + inline void inc(size_t reserved, size_t committed) { + _count ++; + _reserved_amount += reserved; + _committed_amount += committed; + } + + inline size_t count() const { + return _count; + } + + inline size_t reserved_amount() const { + return _reserved_amount; + } + + inline size_t committed_amount() const { + return _committed_amount; + } +}; + +// maps a memory type flag to readable name +typedef struct _memType2Name { + MEMFLAGS _flag; + const char* _name; +} MemType2Name; + + +// This class aggregates malloc'd records by memory type +class MallocMem : public _ValueObj { + private: + MEMFLAGS _type; + + size_t _count; + size_t _amount; + + public: + MallocMem() { + _type = mtNone; + _count = 0; + _amount = 0; + } + + MallocMem(MEMFLAGS flags) { + assert(HAS_VALID_MEMORY_TYPE(flags), "no type"); + _type = FLAGS_TO_MEMORY_TYPE(flags); + _count = 0; + _amount = 0; + } + + inline void set_type(MEMFLAGS flag) { + _type = flag; + } + + inline void clear() { + _count = 0; + _amount = 0; + _type = mtNone; + } + + MallocMem& operator=(const MallocMem& m) { + assert(_type == m.type(), "different type"); + _count = m.count(); + _amount = m.amount(); + return *this; + } + + inline void inc(size_t amt) { + _amount += amt; + _count ++; + } + + inline void reduce(size_t amt) { + assert(_amount >= amt, "Just check"); + _amount -= amt; + } + + inline void overwrite_counter(size_t count) { + _count = count; + } + + inline MEMFLAGS type() const { + return _type; + } + + inline bool is_type(MEMFLAGS flags) const { + return FLAGS_TO_MEMORY_TYPE(flags) == _type; + } + + inline size_t count() const { + return _count; + } + + inline size_t amount() const { + return _amount; + } +}; + +// This class records live arena's memory usage +class ArenaMem : public MallocMem { + public: + ArenaMem(MEMFLAGS typeflag): MallocMem(typeflag) { + } + ArenaMem() { } +}; + +// This class aggregates virtual memory by its memory type +class VMMem : public _ValueObj { + private: + MEMFLAGS _type; + + size_t _count; + size_t _reserved_amount; + size_t _committed_amount; + + public: + VMMem() { + _type = mtNone; + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMMem(MEMFLAGS flags) { + assert(HAS_VALID_MEMORY_TYPE(flags), "no type"); + _type = FLAGS_TO_MEMORY_TYPE(flags); + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + inline void clear() { + _type = mtNone; + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + inline void set_type(MEMFLAGS flags) { + _type = FLAGS_TO_MEMORY_TYPE(flags); + } + + VMMem& operator=(const VMMem& m) { + assert(_type == m.type(), "different type"); + + _count = m.count(); + _reserved_amount = m.reserved_amount(); + _committed_amount = m.committed_amount(); + return *this; + } + + + inline MEMFLAGS type() const { + return _type; + } + + inline bool is_type(MEMFLAGS flags) const { + return FLAGS_TO_MEMORY_TYPE(flags) == _type; + } + + inline void inc(size_t reserved_amt, size_t committed_amt) { + _reserved_amount += reserved_amt; + _committed_amount += committed_amt; + _count ++; + } + + inline size_t count() const { + return _count; + } + + inline size_t reserved_amount() const { + return _reserved_amount; + } + + inline size_t committed_amount() const { + return _committed_amount; + } +}; + + + +#define NUMBER_OF_MEMORY_TYPE (mt_number_of_types + 1) + +class BaselineReporter; +class BaselineComparisonReporter; + +/* + * This class baselines current memory snapshot. + * A memory baseline summarizes memory usage by memory type, + * aggregates memory usage by callsites when detail tracking + * is on. + */ +class MemBaseline : public _ValueObj { + friend class BaselineReporter; + friend class BaselineComparisonReporter; + + private: + // overall summaries + size_t _total_malloced; + size_t _total_vm_reserved; + size_t _total_vm_committed; + size_t _number_of_classes; + size_t _number_of_threads; + + // if it has properly baselined + bool _baselined; + + // we categorize memory into three categories within the memory type + MallocMem _malloc_data[NUMBER_OF_MEMORY_TYPE]; + VMMem _vm_data[NUMBER_OF_MEMORY_TYPE]; + ArenaMem _arena_data[NUMBER_OF_MEMORY_TYPE]; + + // memory records that aggregate memory usage by callsites. + // only available when detail tracking is on. + MemPointerArray* _malloc_cs; + MemPointerArray* _vm_cs; + + private: + static MemType2Name MemType2NameMap[NUMBER_OF_MEMORY_TYPE]; + + private: + // should not use copy constructor + MemBaseline(MemBaseline& copy) { ShouldNotReachHere(); } + + public: + // create a memory baseline + MemBaseline(); + + virtual ~MemBaseline(); + + inline bool baselined() const { + return _baselined; + } + + MemBaseline& operator=(const MemBaseline& other); + + // reset the baseline for reuse + void clear(); + + // baseline the snapshot + bool baseline(MemSnapshot& snapshot, bool summary_only = true); + + bool baseline(const MemPointerArray* malloc_records, + const MemPointerArray* vm_records, + bool summary_only = true); + + // total malloc'd memory of specified memory type + inline size_t malloc_amount(MEMFLAGS flag) const { + return _malloc_data[flag2index(flag)].amount(); + } + // number of malloc'd memory blocks of specified memory type + inline size_t malloc_count(MEMFLAGS flag) const { + return _malloc_data[flag2index(flag)].count(); + } + // total memory used by arenas of specified memory type + inline size_t arena_amount(MEMFLAGS flag) const { + return _arena_data[flag2index(flag)].amount(); + } + // number of arenas of specified memory type + inline size_t arena_count(MEMFLAGS flag) const { + return _arena_data[flag2index(flag)].count(); + } + // total reserved memory of specified memory type + inline size_t reserved_amount(MEMFLAGS flag) const { + return _vm_data[flag2index(flag)].reserved_amount(); + } + // total committed memory of specified memory type + inline size_t committed_amount(MEMFLAGS flag) const { + return _vm_data[flag2index(flag)].committed_amount(); + } + // total memory (malloc'd + mmap'd + arena) of specified + // memory type + inline size_t total_amount(MEMFLAGS flag) const { + int index = flag2index(flag); + return _malloc_data[index].amount() + + _vm_data[index].reserved_amount() + + _arena_data[index].amount(); + } + + /* overall summaries */ + + // total malloc'd memory in snapshot + inline size_t total_malloc_amount() const { + return _total_malloced; + } + // total mmap'd memory in snapshot + inline size_t total_reserved_amount() const { + return _total_vm_reserved; + } + // total committed memory in snapshot + inline size_t total_committed_amount() const { + return _total_vm_committed; + } + // number of loaded classes + inline size_t number_of_classes() const { + return _number_of_classes; + } + // number of running threads + inline size_t number_of_threads() const { + return _number_of_threads; + } + // lookup human readable name of a memory type + static const char* type2name(MEMFLAGS type); + + private: + // convert memory flag to the index to mapping table + int flag2index(MEMFLAGS flag) const; + + // reset baseline values + void reset(); + + // summarize the records in global snapshot + bool baseline_malloc_summary(const MemPointerArray* malloc_records); + bool baseline_vm_summary(const MemPointerArray* vm_records); + bool baseline_malloc_details(const MemPointerArray* malloc_records); + bool baseline_vm_details(const MemPointerArray* vm_records); + + // print a line of malloc'd memory aggregated by callsite + void print_malloc_callsite(outputStream* st, address pc, size_t size, + size_t count, int diff_amt, int diff_count) const; + // print a line of mmap'd memory aggregated by callsite + void print_vm_callsite(outputStream* st, address pc, size_t rsz, + size_t csz, int diff_rsz, int diff_csz) const; + + // sorting functions for raw records + static int malloc_sort_by_pc(const void* p1, const void* p2); + static int malloc_sort_by_addr(const void* p1, const void* p2); + + static int vm_sort_by_pc(const void* p1, const void* p2); + static int vm_sort_by_addr(const void* p1, const void* p2); + + private: + // sorting functions for baselined records + static int bl_malloc_sort_by_size(const void* p1, const void* p2); + static int bl_vm_sort_by_size(const void* p1, const void* p2); + static int bl_malloc_sort_by_pc(const void* p1, const void* p2); + static int bl_vm_sort_by_pc(const void* p1, const void* p2); +}; + + +#endif // SHARE_VM_SERVICES_MEM_BASELINE_HPP diff --git a/hotspot/src/share/vm/services/memPtr.cpp b/hotspot/src/share/vm/services/memPtr.cpp new file mode 100644 index 00000000000..c11c374fd14 --- /dev/null +++ b/hotspot/src/share/vm/services/memPtr.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "services/memPtr.hpp" +#include "services/memTracker.hpp" + +volatile jint SequenceGenerator::_seq_number = 1; +DEBUG_ONLY(jint SequenceGenerator::_max_seq_number = 1;) +DEBUG_ONLY(volatile unsigned long SequenceGenerator::_generation = 0;) + +jint SequenceGenerator::next() { + jint seq = Atomic::add(1, &_seq_number); + if (seq < 0) { + MemTracker::shutdown(MemTracker::NMT_sequence_overflow); + } + assert(seq > 0, "counter overflow"); + DEBUG_ONLY(_max_seq_number = (seq > _max_seq_number) ? seq : _max_seq_number;) + return seq; +} + + + +bool VMMemRegion::contains(const VMMemRegion* mr) const { + assert(base() != 0, "no base address"); + assert(size() != 0 || committed_size() != 0, + "no range"); + address base_addr = base(); + address end_addr = base_addr + + (is_reserve_record()? reserved_size(): committed_size()); + if (mr->is_reserve_record()) { + if (mr->base() == base_addr && mr->size() == size()) { + // the same range + return true; + } + return false; + } else if (mr->is_commit_record() || mr->is_uncommit_record()) { + assert(mr->base() != 0 && mr->committed_size() > 0, + "bad record"); + return (mr->base() >= base_addr && + (mr->base() + mr->committed_size()) <= end_addr); + } else if (mr->is_type_tagging_record()) { + assert(mr->base() != 0, "no base"); + return mr->base() == base_addr; + } else if (mr->is_release_record()) { + assert(mr->base() != 0 && mr->size() > 0, + "bad record"); + return (mr->base() == base_addr && mr->size() == size()); + } else { + assert(false, "what happened?"); + return false; + } +} diff --git a/hotspot/src/share/vm/services/memPtr.hpp b/hotspot/src/share/vm/services/memPtr.hpp new file mode 100644 index 00000000000..b8b41c326f1 --- /dev/null +++ b/hotspot/src/share/vm/services/memPtr.hpp @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_PTR_HPP +#define SHARE_VM_SERVICES_MEM_PTR_HPP + +#include "memory/allocation.hpp" +#include "runtime/atomic.hpp" +#include "runtime/os.hpp" +#include "runtime/safepoint.hpp" + +/* + * global sequence generator that generates sequence numbers to serialize + * memory records. + */ +class SequenceGenerator : AllStatic { + public: + static jint next(); + + // peek last sequence number + static jint peek() { + return _seq_number; + } + + // reset sequence number + static void reset() { + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + _seq_number = 1; + DEBUG_ONLY(_generation ++;) + }; + + DEBUG_ONLY(static unsigned long current_generation() { return (unsigned long)_generation; }) + DEBUG_ONLY(static jint max_seq_num() { return _max_seq_number; }) + + private: + static volatile jint _seq_number; + DEBUG_ONLY(static jint _max_seq_number; ) + DEBUG_ONLY(static volatile unsigned long _generation; ) +}; + +/* + * followings are the classes that are used to hold memory activity records in different stages. + * MemPointer + * |--------MemPointerRecord + * | + * |----MemPointerRecordEx + * | | + * | |-------SeqMemPointerRecordEx + * | + * |----SeqMemPointerRecord + * | + * |----VMMemRegion + * | + * |-----VMMemRegionEx + * + * + * prefix 'Seq' - sequenced, the record contains a sequence number + * surfix 'Ex' - extension, the record contains a caller's pc + * + * per-thread recorder : SeqMemPointerRecord(Ex) + * snapshot staging : SeqMemPointerRecord(Ex) + * snapshot : MemPointerRecord(Ex) and VMMemRegion(Ex) + * + */ + +/* + * class that wraps an address to a memory block, + * the memory pointer either points to a malloc'd + * memory block, or a mmap'd memory block + */ +class MemPointer : public _ValueObj { + public: + MemPointer(): _addr(0) { } + MemPointer(address addr): _addr(addr) { } + + MemPointer(const MemPointer& copy_from) { + _addr = copy_from.addr(); + } + + inline address addr() const { + return _addr; + } + + inline operator address() const { + return addr(); + } + + inline bool operator == (const MemPointer& other) const { + return addr() == other.addr(); + } + + inline MemPointer& operator = (const MemPointer& other) { + _addr = other.addr(); + return *this; + } + + protected: + inline void set_addr(address addr) { _addr = addr; } + + protected: + // memory address + address _addr; +}; + +/* MemPointerRecord records an activityand associated + * attributes on a memory block. + */ +class MemPointerRecord : public MemPointer { + private: + MEMFLAGS _flags; + size_t _size; + +public: + /* extension of MemoryType enum + * see share/vm/memory/allocation.hpp for details. + * + * The tag values are associated to sorting orders, so be + * careful if changes are needed. + * The allocation records should be sorted ahead of tagging + * records, which in turn ahead of deallocation records + */ + enum MemPointerTags { + tag_alloc = 0x0001, // malloc or reserve record + tag_commit = 0x0002, // commit record + tag_type = 0x0003, // tag virtual memory to a memory type + tag_uncommit = 0x0004, // uncommit record + tag_release = 0x0005, // free or release record + tag_size = 0x0006, // arena size + tag_masks = 0x0007, // all tag bits + vmBit = 0x0008 + }; + + /* helper functions to interpret the tagging flags */ + + inline static bool is_allocation_record(MEMFLAGS flags) { + return (flags & tag_masks) == tag_alloc; + } + + inline static bool is_deallocation_record(MEMFLAGS flags) { + return (flags & tag_masks) == tag_release; + } + + inline static bool is_arena_record(MEMFLAGS flags) { + return (flags & (otArena | tag_size)) == otArena; + } + + inline static bool is_arena_size_record(MEMFLAGS flags) { + return (flags & (otArena | tag_size)) == (otArena | tag_size); + } + + inline static bool is_virtual_memory_record(MEMFLAGS flags) { + return (flags & vmBit) != 0; + } + + inline static bool is_virtual_memory_reserve_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_alloc | vmBit); + } + + inline static bool is_virtual_memory_commit_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_commit | vmBit); + } + + inline static bool is_virtual_memory_uncommit_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_uncommit | vmBit); + } + + inline static bool is_virtual_memory_release_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_release | vmBit); + } + + inline static bool is_virtual_memory_type_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_type | vmBit); + } + + /* tagging flags */ + inline static MEMFLAGS malloc_tag() { return tag_alloc; } + inline static MEMFLAGS free_tag() { return tag_release; } + inline static MEMFLAGS arena_size_tag() { return tag_size | otArena; } + inline static MEMFLAGS virtual_memory_tag() { return vmBit; } + inline static MEMFLAGS virtual_memory_reserve_tag() { return (tag_alloc | vmBit); } + inline static MEMFLAGS virtual_memory_commit_tag() { return (tag_commit | vmBit); } + inline static MEMFLAGS virtual_memory_uncommit_tag(){ return (tag_uncommit | vmBit); } + inline static MEMFLAGS virtual_memory_release_tag() { return (tag_release | vmBit); } + inline static MEMFLAGS virtual_memory_type_tag() { return (tag_type | vmBit); } + + public: + MemPointerRecord(): _size(0), _flags(mtNone) { } + + MemPointerRecord(address addr, MEMFLAGS memflags, size_t size = 0): + MemPointer(addr), _flags(memflags), _size(size) { } + + MemPointerRecord(const MemPointerRecord& copy_from): + MemPointer(copy_from), _flags(copy_from.flags()), + _size(copy_from.size()) { + } + + /* MemPointerRecord is not sequenced, it always return + * 0 to indicate non-sequenced + */ + virtual jint seq() const { return 0; } + + inline size_t size() const { return _size; } + inline void set_size(size_t size) { _size = size; } + + inline MEMFLAGS flags() const { return _flags; } + inline void set_flags(MEMFLAGS flags) { _flags = flags; } + + MemPointerRecord& operator= (const MemPointerRecord& ptr) { + MemPointer::operator=(ptr); + _flags = ptr.flags(); +#ifdef ASSERT + if (IS_ARENA_OBJ(_flags)) { + assert(!is_vm_pointer(), "wrong flags"); + assert((_flags & ot_masks) == otArena, "wrong flags"); + } +#endif + _size = ptr.size(); + return *this; + } + + // if the pointer represents a malloc-ed memory address + inline bool is_malloced_pointer() const { + return !is_vm_pointer(); + } + + // if the pointer represents a virtual memory address + inline bool is_vm_pointer() const { + return is_virtual_memory_record(_flags); + } + + // if this record records a 'malloc' or virtual memory + // 'reserve' call + inline bool is_allocation_record() const { + return is_allocation_record(_flags); + } + + // if this record records a size information of an arena + inline bool is_arena_size_record() const { + return is_arena_size_record(_flags); + } + + // if this pointer represents an address to an arena object + inline bool is_arena_record() const { + return is_arena_record(_flags); + } + + // if this record represents a size information of specific arena + inline bool is_size_record_of_arena(const MemPointerRecord* arena_rc) { + assert(is_arena_size_record(), "not size record"); + assert(arena_rc->is_arena_record(), "not arena record"); + return (arena_rc->addr() + sizeof(void*)) == addr(); + } + + // if this record records a 'free' or virtual memory 'free' call + inline bool is_deallocation_record() const { + return is_deallocation_record(_flags); + } + + // if this record records a virtual memory 'commit' call + inline bool is_commit_record() const { + return is_virtual_memory_commit_record(_flags); + } + + // if this record records a virtual memory 'uncommit' call + inline bool is_uncommit_record() const { + return is_virtual_memory_uncommit_record(_flags); + } + + // if this record is a tagging record of a virtual memory block + inline bool is_type_tagging_record() const { + return is_virtual_memory_type_record(_flags); + } +}; + +// MemPointerRecordEx also records callsite pc, from where +// the memory block is allocated +class MemPointerRecordEx : public MemPointerRecord { + private: + address _pc; // callsite pc + + public: + MemPointerRecordEx(): _pc(0) { } + + MemPointerRecordEx(address addr, MEMFLAGS memflags, size_t size = 0, address pc = 0): + MemPointerRecord(addr, memflags, size), _pc(pc) {} + + MemPointerRecordEx(const MemPointerRecordEx& copy_from): + MemPointerRecord(copy_from), _pc(copy_from.pc()) {} + + inline address pc() const { return _pc; } + + void init(const MemPointerRecordEx* mpe) { + MemPointerRecord::operator=(*mpe); + _pc = mpe->pc(); + } + + void init(const MemPointerRecord* mp) { + MemPointerRecord::operator=(*mp); + _pc = 0; + } +}; + +// a virtual memory region +class VMMemRegion : public MemPointerRecord { + private: + // committed size + size_t _committed_size; + +public: + VMMemRegion(): _committed_size(0) { } + + void init(const MemPointerRecord* mp) { + assert(mp->is_vm_pointer(), "not virtual memory pointer"); + _addr = mp->addr(); + if (mp->is_commit_record() || mp->is_uncommit_record()) { + _committed_size = mp->size(); + set_size(_committed_size); + } else { + set_size(mp->size()); + _committed_size = 0; + } + set_flags(mp->flags()); + } + + VMMemRegion& operator=(const VMMemRegion& other) { + MemPointerRecord::operator=(other); + _committed_size = other.committed_size(); + return *this; + } + + inline bool is_reserve_record() const { + return is_virtual_memory_reserve_record(flags()); + } + + inline bool is_release_record() const { + return is_virtual_memory_release_record(flags()); + } + + // resize reserved VM range + inline void set_reserved_size(size_t new_size) { + assert(new_size >= committed_size(), "resize"); + set_size(new_size); + } + + inline void commit(size_t size) { + _committed_size += size; + } + + inline void uncommit(size_t size) { + if (_committed_size >= size) { + _committed_size -= size; + } else { + _committed_size = 0; + } + } + + /* + * if this virtual memory range covers whole range of + * the other VMMemRegion + */ + bool contains(const VMMemRegion* mr) const; + + /* base address of this virtual memory range */ + inline address base() const { + return addr(); + } + + /* tag this virtual memory range to the specified memory type */ + inline void tag(MEMFLAGS f) { + set_flags(flags() | (f & mt_masks)); + } + + // release part of memory range + inline void partial_release(address add, size_t sz) { + assert(add >= addr() && add < addr() + size(), "not valid address"); + // for now, it can partially release from the both ends, + // but not in the middle + assert(add == addr() || (add + sz) == (addr() + size()), + "release in the middle"); + if (add == addr()) { + set_addr(add + sz); + set_size(size() - sz); + } else { + set_size(size() - sz); + } + } + + // the committed size of the virtual memory block + inline size_t committed_size() const { + return _committed_size; + } + + // the reserved size of the virtual memory block + inline size_t reserved_size() const { + return size(); + } +}; + +class VMMemRegionEx : public VMMemRegion { + private: + jint _seq; // sequence number + + public: + VMMemRegionEx(): _pc(0) { } + + void init(const MemPointerRecordEx* mpe) { + VMMemRegion::init(mpe); + _pc = mpe->pc(); + } + + void init(const MemPointerRecord* mpe) { + VMMemRegion::init(mpe); + _pc = 0; + } + + VMMemRegionEx& operator=(const VMMemRegionEx& other) { + VMMemRegion::operator=(other); + _pc = other.pc(); + return *this; + } + + inline address pc() const { return _pc; } + private: + address _pc; +}; + +/* + * Sequenced memory record + */ +class SeqMemPointerRecord : public MemPointerRecord { + private: + jint _seq; // sequence number + + public: + SeqMemPointerRecord(): _seq(0){ } + + SeqMemPointerRecord(address addr, MEMFLAGS flags, size_t size) + : MemPointerRecord(addr, flags, size) { + _seq = SequenceGenerator::next(); + } + + SeqMemPointerRecord(const SeqMemPointerRecord& copy_from) + : MemPointerRecord(copy_from) { + _seq = copy_from.seq(); + } + + SeqMemPointerRecord& operator= (const SeqMemPointerRecord& ptr) { + MemPointerRecord::operator=(ptr); + _seq = ptr.seq(); + return *this; + } + + inline jint seq() const { + return _seq; + } +}; + + + +class SeqMemPointerRecordEx : public MemPointerRecordEx { + private: + jint _seq; // sequence number + + public: + SeqMemPointerRecordEx(): _seq(0) { } + + SeqMemPointerRecordEx(address addr, MEMFLAGS flags, size_t size, + address pc): MemPointerRecordEx(addr, flags, size, pc) { + _seq = SequenceGenerator::next(); + } + + SeqMemPointerRecordEx(const SeqMemPointerRecordEx& copy_from) + : MemPointerRecordEx(copy_from) { + _seq = copy_from.seq(); + } + + SeqMemPointerRecordEx& operator= (const SeqMemPointerRecordEx& ptr) { + MemPointerRecordEx::operator=(ptr); + _seq = ptr.seq(); + return *this; + } + + inline jint seq() const { + return _seq; + } +}; + +#endif // SHARE_VM_SERVICES_MEM_PTR_HPP diff --git a/hotspot/src/share/vm/services/memPtrArray.hpp b/hotspot/src/share/vm/services/memPtrArray.hpp new file mode 100644 index 00000000000..1b1b570ac0f --- /dev/null +++ b/hotspot/src/share/vm/services/memPtrArray.hpp @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#ifndef SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP +#define SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP + +#include "memory/allocation.hpp" +#include "services/memPtr.hpp" + +class MemPtr; +class MemRecorder; +class ArenaInfo; +class MemSnapshot; + +extern "C" { + typedef int (*FN_SORT)(const void *, const void *); +} + + +// Memory pointer array interface. This array is used by NMT to hold +// various memory block information. +// The memory pointer arrays are usually walked with their iterators. + +class MemPointerArray : public CHeapObj { + public: + virtual ~MemPointerArray() { } + + // return true if it can not allocate storage for the data + virtual bool out_of_memory() const = 0; + virtual bool is_empty() const = 0; + virtual bool is_full() = 0; + virtual int length() const = 0; + virtual void clear() = 0; + virtual bool append(MemPointer* ptr) = 0; + virtual bool insert_at(MemPointer* ptr, int pos) = 0; + virtual bool remove_at(int pos) = 0; + virtual MemPointer* at(int index) const = 0; + virtual void sort(FN_SORT fn) = 0; + virtual size_t instance_size() const = 0; + virtual bool shrink() = 0; + + debug_only(virtual int capacity() const = 0;) +}; + +// Iterator interface +class MemPointerArrayIterator VALUE_OBJ_CLASS_SPEC { + public: + // return the pointer at current position + virtual MemPointer* current() const = 0; + // return the next pointer and advance current position + virtual MemPointer* next() = 0; + // return next pointer without advancing current position + virtual MemPointer* peek_next() const = 0; + // return previous pointer without changing current position + virtual MemPointer* peek_prev() const = 0; + // remove the pointer at current position + virtual void remove() = 0; + // insert the pointer at current position + virtual bool insert(MemPointer* ptr) = 0; + // insert specified element after current position and + // move current position to newly inserted position + virtual bool insert_after(MemPointer* ptr) = 0; +}; + +// implementation class +class MemPointerArrayIteratorImpl : public MemPointerArrayIterator { +#ifdef ASSERT + protected: +#else + private: +#endif + MemPointerArray* _array; + int _pos; + + public: + MemPointerArrayIteratorImpl(MemPointerArray* arr) { + assert(arr != NULL, "Parameter check"); + _array = arr; + _pos = 0; + } + + virtual MemPointer* current() const { + if (_pos < _array->length()) { + return _array->at(_pos); + } + return NULL; + } + + virtual MemPointer* next() { + if (_pos + 1 < _array->length()) { + return _array->at(++_pos); + } + _pos = _array->length(); + return NULL; + } + + virtual MemPointer* peek_next() const { + if (_pos + 1 < _array->length()) { + return _array->at(_pos + 1); + } + return NULL; + } + + virtual MemPointer* peek_prev() const { + if (_pos > 0) { + return _array->at(_pos - 1); + } + return NULL; + } + + virtual void remove() { + if (_pos < _array->length()) { + _array->remove_at(_pos); + } + } + + virtual bool insert(MemPointer* ptr) { + return _array->insert_at(ptr, _pos); + } + + virtual bool insert_after(MemPointer* ptr) { + if (_array->insert_at(ptr, _pos + 1)) { + _pos ++; + return true; + } + return false; + } +}; + + + +// Memory pointer array implementation. +// This implementation implements expandable array +#define DEFAULT_PTR_ARRAY_SIZE 1024 + +template class MemPointerArrayImpl : public MemPointerArray { + private: + int _max_size; + int _size; + bool _init_elements; + E* _data; + + public: + MemPointerArrayImpl(int initial_size = DEFAULT_PTR_ARRAY_SIZE, bool init_elements = true): + _max_size(initial_size), _size(0), _init_elements(init_elements) { + _data = (E*)raw_allocate(sizeof(E), initial_size); + if (_init_elements) { + for (int index = 0; index < _max_size; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + } + + virtual ~MemPointerArrayImpl() { + if (_data != NULL) { + raw_free(_data); + } + } + + public: + bool out_of_memory() const { + return (_data == NULL); + } + + size_t instance_size() const { + return sizeof(MemPointerArrayImpl) + _max_size * sizeof(E); + } + + bool is_empty() const { + assert(_data != NULL, "Just check"); + return _size == 0; + } + + bool is_full() { + assert(_data != NULL, "Just check"); + if (_size < _max_size) { + return false; + } else { + return !expand_array(); + } + } + + int length() const { + assert(_data != NULL, "Just check"); + return _size; + } + + debug_only(int capacity() const { return _max_size; }) + + void clear() { + assert(_data != NULL, "Just check"); + _size = 0; + } + + bool append(MemPointer* ptr) { + assert(_data != NULL, "Just check"); + if (is_full()) { + return false; + } + _data[_size ++] = *(E*)ptr; + return true; + } + + bool insert_at(MemPointer* ptr, int pos) { + assert(_data != NULL, "Just check"); + if (is_full()) { + return false; + } + for (int index = _size; index > pos; index --) { + _data[index] = _data[index - 1]; + } + _data[pos] = *(E*)ptr; + _size ++; + return true; + } + + bool remove_at(int pos) { + assert(_data != NULL, "Just check"); + if (_size <= pos && pos >= 0) { + return false; + } + -- _size; + + for (int index = pos; index < _size; index ++) { + _data[index] = _data[index + 1]; + } + return true; + } + + MemPointer* at(int index) const { + assert(_data != NULL, "Just check"); + assert(index >= 0 && index < _size, "illegal index"); + return &_data[index]; + } + + bool shrink() { + float used = ((float)_size) / ((float)_max_size); + if (used < 0.40) { + E* old_ptr = _data; + int new_size = ((_max_size) / (2 * DEFAULT_PTR_ARRAY_SIZE) + 1) * DEFAULT_PTR_ARRAY_SIZE; + _data = (E*)raw_reallocate(_data, sizeof(E), new_size); + if (_data == NULL) { + _data = old_ptr; + return false; + } else { + _max_size = new_size; + return true; + } + } + return false; + } + + void sort(FN_SORT fn) { + assert(_data != NULL, "Just check"); + qsort((void*)_data, _size, sizeof(E), fn); + } + + private: + bool expand_array() { + assert(_data != NULL, "Not yet allocated"); + E* old_ptr = _data; + if ((_data = (E*)raw_reallocate((void*)_data, sizeof(E), + _max_size + DEFAULT_PTR_ARRAY_SIZE)) == NULL) { + _data = old_ptr; + return false; + } else { + _max_size += DEFAULT_PTR_ARRAY_SIZE; + if (_init_elements) { + for (int index = _size; index < _max_size; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + return true; + } + } + + void* raw_allocate(size_t elementSize, int items) { + return os::malloc(elementSize * items, mtNMT); + } + + void* raw_reallocate(void* ptr, size_t elementSize, int items) { + return os::realloc(ptr, elementSize * items, mtNMT); + } + + void raw_free(void* ptr) { + os::free(ptr, mtNMT); + } +}; + +#endif // SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP diff --git a/hotspot/src/share/vm/services/memRecorder.cpp b/hotspot/src/share/vm/services/memRecorder.cpp new file mode 100644 index 00000000000..33db875af31 --- /dev/null +++ b/hotspot/src/share/vm/services/memRecorder.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" + +#include "runtime/atomic.hpp" +#include "services/memBaseline.hpp" +#include "services/memRecorder.hpp" +#include "services/memPtr.hpp" +#include "services/memTracker.hpp" + +MemPointer* SequencedRecordIterator::next_record() { + MemPointer* itr_cur = _itr.current(); + if (itr_cur == NULL) return NULL; + MemPointer* itr_next = _itr.next(); + + while (itr_next != NULL && + same_kind((MemPointerRecord*)itr_cur, (MemPointerRecord*)itr_next)) { + itr_cur = itr_next; + itr_next = _itr.next(); + } + + return itr_cur; +} + + +volatile jint MemRecorder::_instance_count = 0; + +MemRecorder::MemRecorder() { + assert(MemTracker::is_on(), "Native memory tracking is off"); + Atomic::inc(&_instance_count); + debug_only(set_generation();) + + if (MemTracker::track_callsite()) { + _pointer_records = new (std::nothrow)FixedSizeMemPointerArray(); + } else { + _pointer_records = new (std::nothrow)FixedSizeMemPointerArray(); + } + _next = NULL; + + + if (_pointer_records != NULL) { + // recode itself + record((address)this, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder), + sizeof(MemRecorder), CALLER_PC); + record((address)_pointer_records, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder), + _pointer_records->instance_size(),CURRENT_PC); + } +} + +MemRecorder::~MemRecorder() { + if (_pointer_records != NULL) { + if (MemTracker::is_on()) { + MemTracker::record_free((address)_pointer_records, mtNMT); + MemTracker::record_free((address)this, mtNMT); + } + delete _pointer_records; + } + if (_next != NULL) { + delete _next; + } + + Atomic::dec(&_instance_count); +} + +// Sorting order: +// 1. memory block address +// 2. mem pointer record tags +// 3. sequence number +int MemRecorder::sort_record_fn(const void* e1, const void* e2) { + const MemPointerRecord* p1 = (const MemPointerRecord*)e1; + const MemPointerRecord* p2 = (const MemPointerRecord*)e2; + int delta = UNSIGNED_COMPARE(p1->addr(), p2->addr()); + if (delta == 0) { + int df = UNSIGNED_COMPARE((p1->flags() & MemPointerRecord::tag_masks), + (p2->flags() & MemPointerRecord::tag_masks)); + if (df == 0) { + assert(p1->seq() != p2->seq(), "dup seq"); + return p1->seq() - p2->seq(); + } else { + return df; + } + } else { + return delta; + } +} + +bool MemRecorder::record(address p, MEMFLAGS flags, size_t size, address pc) { +#ifdef ASSERT + if (MemPointerRecord::is_virtual_memory_record(flags)) { + assert((flags & MemPointerRecord::tag_masks) != 0, "bad virtual memory record"); + } else { + assert((flags & MemPointerRecord::tag_masks) == MemPointerRecord::malloc_tag() || + (flags & MemPointerRecord::tag_masks) == MemPointerRecord::free_tag() || + IS_ARENA_OBJ(flags), + "bad malloc record"); + } + // a recorder should only hold records within the same generation + unsigned long cur_generation = SequenceGenerator::current_generation(); + assert(cur_generation == _generation, + "this thread did not enter sync point"); +#endif + + if (MemTracker::track_callsite()) { + SeqMemPointerRecordEx ap(p, flags, size, pc); + debug_only(check_dup_seq(ap.seq());) + return _pointer_records->append(&ap); + } else { + SeqMemPointerRecord ap(p, flags, size); + debug_only(check_dup_seq(ap.seq());) + return _pointer_records->append(&ap); + } +} + + // iterator for alloc pointers +SequencedRecordIterator MemRecorder::pointer_itr() { + assert(_pointer_records != NULL, "just check"); + _pointer_records->sort((FN_SORT)sort_record_fn); + return SequencedRecordIterator(_pointer_records); +} + + +#ifdef ASSERT +void MemRecorder::set_generation() { + _generation = SequenceGenerator::current_generation(); +} + +void MemRecorder::check_dup_seq(jint seq) const { + MemPointerArrayIteratorImpl itr(_pointer_records); + MemPointerRecord* rc = (MemPointerRecord*)itr.current(); + while (rc != NULL) { + assert(rc->seq() != seq, "dup seq"); + rc = (MemPointerRecord*)itr.next(); + } +} + +#endif diff --git a/hotspot/src/share/vm/services/memRecorder.hpp b/hotspot/src/share/vm/services/memRecorder.hpp new file mode 100644 index 00000000000..313af97db7f --- /dev/null +++ b/hotspot/src/share/vm/services/memRecorder.hpp @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_RECORDER_HPP +#define SHARE_VM_SERVICES_MEM_RECORDER_HPP + +#include "memory/allocation.hpp" +#include "runtime/os.hpp" +#include "services/memPtrArray.hpp" + +class MemSnapshot; +class MemTracker; +class MemTrackWorker; + +// Fixed size memory pointer array implementation +template class FixedSizeMemPointerArray : + public MemPointerArray { + // This implementation is for memory recorder only + friend class MemRecorder; + + private: + E _data[SIZE]; + int _size; + + protected: + FixedSizeMemPointerArray(bool init_elements = false): + _size(0){ + if (init_elements) { + for (int index = 0; index < SIZE; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + } + + void* operator new(size_t size, const std::nothrow_t& nothrow_constant) { + // the instance is part of memRecorder, needs to be tagged with 'otNMTRecorder' + // to avoid recursion + return os::malloc(size, (mtNMT | otNMTRecorder)); + } + + void* operator new(size_t size) { + assert(false, "use nothrow version"); + return NULL; + } + + void operator delete(void* p) { + os::free(p, (mtNMT | otNMTRecorder)); + } + + // instance size + inline size_t instance_size() const { + return sizeof(FixedSizeMemPointerArray); + } + + debug_only(int capacity() const { return SIZE; }) + + public: + // implementation of public interface + bool out_of_memory() const { return false; } + bool is_empty() const { return _size == 0; } + bool is_full() { return length() >= SIZE; } + int length() const { return _size; } + + void clear() { + _size = 0; + } + + bool append(MemPointer* ptr) { + if (is_full()) return false; + _data[_size ++] = *(E*)ptr; + return true; + } + + virtual bool insert_at(MemPointer* p, int pos) { + assert(false, "append only"); + return false; + } + + virtual bool remove_at(int pos) { + assert(false, "not supported"); + return false; + } + + MemPointer* at(int index) const { + assert(index >= 0 && index < length(), + "parameter check"); + return ((E*)&_data[index]); + } + + void sort(FN_SORT fn) { + qsort((void*)_data, _size, sizeof(E), fn); + } + + bool shrink() { + return false; + } +}; + + +// This iterator requires pre-sorted MemPointerArray, which is sorted by: +// 1. address +// 2. allocation type +// 3. sequence number +// During the array walking, iterator collapses pointers with the same +// address and allocation type, and only returns the one with highest +// sequence number. +// +// This is read-only iterator, update methods are asserted. +class SequencedRecordIterator : public MemPointerArrayIterator { + private: + MemPointerArrayIteratorImpl _itr; + MemPointer* _cur; + + public: + SequencedRecordIterator(const MemPointerArray* arr): + _itr(const_cast(arr)) { + _cur = next_record(); + } + + SequencedRecordIterator(const SequencedRecordIterator& itr): + _itr(itr._itr) { + _cur = next_record(); + } + + // return the pointer at current position + virtual MemPointer* current() const { + return _cur; + }; + + // return the next pointer and advance current position + virtual MemPointer* next() { + _cur = next_record(); + return _cur; + } + + // return the next pointer without advancing current position + virtual MemPointer* peek_next() const { + assert(false, "not implemented"); + return NULL; + + } + // return the previous pointer without changing current position + virtual MemPointer* peek_prev() const { + assert(false, "not implemented"); + return NULL; + } + + // remove the pointer at current position + virtual void remove() { + assert(false, "read-only iterator"); + }; + // insert the pointer at current position + virtual bool insert(MemPointer* ptr) { + assert(false, "read-only iterator"); + return false; + } + + virtual bool insert_after(MemPointer* ptr) { + assert(false, "read-only iterator"); + return false; + } + private: + // collapse the 'same kind' of records, and return this 'kind' of + // record with highest sequence number + MemPointer* next_record(); + + // Test if the two records are the same kind: the same memory block and allocation + // type. + inline bool same_kind(const MemPointerRecord* p1, const MemPointerRecord* p2) const { + return (p1->addr() == p2->addr() && + (p1->flags() &MemPointerRecord::tag_masks) == + (p2->flags() & MemPointerRecord::tag_masks)); + } +}; + + + +#define DEFAULT_RECORDER_PTR_ARRAY_SIZE 512 + +class MemRecorder : public CHeapObj { + friend class MemSnapshot; + friend class MemTracker; + friend class MemTrackWorker; + + protected: + // the array that holds memory records + MemPointerArray* _pointer_records; + + private: + // used for linked list + MemRecorder* _next; + // active recorder can only record a certain generation data + debug_only(unsigned long _generation;) + + protected: + _NOINLINE_ MemRecorder(); + ~MemRecorder(); + + // record a memory operation + bool record(address addr, MEMFLAGS flags, size_t size, address caller_pc = 0); + + // linked list support + inline void set_next(MemRecorder* rec) { + _next = rec; + } + + inline MemRecorder* next() const { + return _next; + } + + // if the recorder is full + inline bool is_full() const { + assert(_pointer_records != NULL, "just check"); + return _pointer_records->is_full(); + } + + // if running out of memory when initializing recorder's internal + // data + inline bool out_of_memory() const { + return (_pointer_records == NULL || + _pointer_records->out_of_memory()); + } + + inline void clear() { + assert(_pointer_records != NULL, "Just check"); + _pointer_records->clear(); + } + + SequencedRecordIterator pointer_itr(); + + protected: + // number of MemRecorder instance + static volatile jint _instance_count; + + private: + // sorting function, sort records into following order + // 1. memory address + // 2. allocation type + // 3. sequence number + static int sort_record_fn(const void* e1, const void* e2); + + debug_only(void check_dup_seq(jint seq) const;) + debug_only(void set_generation();) +}; + +#endif // SHARE_VM_SERVICES_MEM_RECORDER_HPP diff --git a/hotspot/src/share/vm/services/memReporter.cpp b/hotspot/src/share/vm/services/memReporter.cpp new file mode 100644 index 00000000000..783d951de14 --- /dev/null +++ b/hotspot/src/share/vm/services/memReporter.cpp @@ -0,0 +1,560 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "runtime/os.hpp" +#include "services/memReporter.hpp" +#include "services/memPtrArray.hpp" +#include "services/memTracker.hpp" + +const char* BaselineOutputer::memory_unit(size_t scale) { + switch(scale) { + case K: return "KB"; + case M: return "MB"; + case G: return "GB"; + } + ShouldNotReachHere(); + return NULL; +} + + +void BaselineReporter::report_baseline(const MemBaseline& baseline, bool summary_only) { + assert(MemTracker::is_on(), "Native memory tracking is off"); + _outputer.start(scale()); + _outputer.total_usage( + amount_in_current_scale(baseline.total_malloc_amount() + baseline.total_reserved_amount()), + amount_in_current_scale(baseline.total_malloc_amount() + baseline.total_committed_amount())); + + _outputer.num_of_classes(baseline.number_of_classes()); + _outputer.num_of_threads(baseline.number_of_threads()); + + report_summaries(baseline); + if (!summary_only && MemTracker::track_callsite()) { + report_callsites(baseline); + } + _outputer.done(); +} + +void BaselineReporter::report_summaries(const MemBaseline& baseline) { + _outputer.start_category_summary(); + MEMFLAGS type; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + type = MemBaseline::MemType2NameMap[index]._flag; + _outputer.category_summary(type, + amount_in_current_scale(baseline.reserved_amount(type)), + amount_in_current_scale(baseline.committed_amount(type)), + amount_in_current_scale(baseline.malloc_amount(type)), + baseline.malloc_count(type), + amount_in_current_scale(baseline.arena_amount(type)), + baseline.arena_count(type)); + } + + _outputer.done_category_summary(); +} + +void BaselineReporter::report_callsites(const MemBaseline& baseline) { + _outputer.start_callsite(); + MemBaseline* pBL = const_cast(&baseline); + + pBL->_malloc_cs->sort((FN_SORT)MemBaseline::bl_malloc_sort_by_size); + pBL->_vm_cs->sort((FN_SORT)MemBaseline::bl_vm_sort_by_size); + + // walk malloc callsites + MemPointerArrayIteratorImpl malloc_itr(pBL->_malloc_cs); + MallocCallsitePointer* malloc_callsite = + (MallocCallsitePointer*)malloc_itr.current(); + while (malloc_callsite != NULL) { + _outputer.malloc_callsite(malloc_callsite->addr(), + amount_in_current_scale(malloc_callsite->amount()), malloc_callsite->count()); + malloc_callsite = (MallocCallsitePointer*)malloc_itr.next(); + } + + // walk virtual memory callsite + MemPointerArrayIteratorImpl vm_itr(pBL->_vm_cs); + VMCallsitePointer* vm_callsite = (VMCallsitePointer*)vm_itr.current(); + while (vm_callsite != NULL) { + _outputer.virtual_memory_callsite(vm_callsite->addr(), + amount_in_current_scale(vm_callsite->reserved_amount()), + amount_in_current_scale(vm_callsite->committed_amount())); + vm_callsite = (VMCallsitePointer*)vm_itr.next(); + } + pBL->_malloc_cs->sort((FN_SORT)MemBaseline::bl_malloc_sort_by_pc); + pBL->_vm_cs->sort((FN_SORT)MemBaseline::bl_vm_sort_by_pc); + _outputer.done_callsite(); +} + +void BaselineReporter::diff_baselines(const MemBaseline& cur, const MemBaseline& prev, + bool summary_only) { + assert(MemTracker::is_on(), "Native memory tracking is off"); + _outputer.start(scale()); + size_t total_reserved = cur.total_malloc_amount() + cur.total_reserved_amount(); + size_t total_committed = cur.total_malloc_amount() + cur.total_committed_amount(); + + _outputer.diff_total_usage( + amount_in_current_scale(total_reserved), amount_in_current_scale(total_committed), + diff_in_current_scale(total_reserved, (prev.total_malloc_amount() + prev.total_reserved_amount())), + diff_in_current_scale(total_committed, (prev.total_committed_amount() + prev.total_malloc_amount()))); + + _outputer.diff_num_of_classes(cur.number_of_classes(), + diff(cur.number_of_classes(), prev.number_of_classes())); + _outputer.diff_num_of_threads(cur.number_of_threads(), + diff(cur.number_of_threads(), prev.number_of_threads())); + + diff_summaries(cur, prev); + if (!summary_only && MemTracker::track_callsite()) { + diff_callsites(cur, prev); + } + _outputer.done(); +} + +void BaselineReporter::diff_summaries(const MemBaseline& cur, const MemBaseline& prev) { + _outputer.start_category_summary(); + MEMFLAGS type; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + type = MemBaseline::MemType2NameMap[index]._flag; + _outputer.diff_category_summary(type, + amount_in_current_scale(cur.reserved_amount(type)), + amount_in_current_scale(cur.committed_amount(type)), + amount_in_current_scale(cur.malloc_amount(type)), + cur.malloc_count(type), + amount_in_current_scale(cur.arena_amount(type)), + cur.arena_count(type), + diff_in_current_scale(cur.reserved_amount(type), prev.reserved_amount(type)), + diff_in_current_scale(cur.committed_amount(type), prev.committed_amount(type)), + diff_in_current_scale(cur.malloc_amount(type), prev.malloc_amount(type)), + diff(cur.malloc_count(type), prev.malloc_count(type)), + diff_in_current_scale(cur.arena_amount(type), prev.arena_amount(type)), + diff(cur.arena_count(type), prev.arena_count(type))); + } + + _outputer.done_category_summary(); +} + +void BaselineReporter::diff_callsites(const MemBaseline& cur, const MemBaseline& prev) { + _outputer.start_callsite(); + MemBaseline* pBL_cur = const_cast(&cur); + MemBaseline* pBL_prev = const_cast(&prev); + + // walk malloc callsites + MemPointerArrayIteratorImpl cur_malloc_itr(pBL_cur->_malloc_cs); + MemPointerArrayIteratorImpl prev_malloc_itr(pBL_prev->_malloc_cs); + + MallocCallsitePointer* cur_malloc_callsite = + (MallocCallsitePointer*)cur_malloc_itr.current(); + MallocCallsitePointer* prev_malloc_callsite = + (MallocCallsitePointer*)prev_malloc_itr.current(); + + while (cur_malloc_callsite != NULL || prev_malloc_callsite != NULL) { + if (prev_malloc_callsite == NULL || + cur_malloc_callsite->addr() < prev_malloc_callsite->addr()) { + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(cur_malloc_callsite->amount()), + cur_malloc_callsite->count(), + diff_in_current_scale(cur_malloc_callsite->amount(), 0), + diff(cur_malloc_callsite->count(), 0)); + cur_malloc_callsite = (MallocCallsitePointer*)cur_malloc_itr.next(); + } else if (prev_malloc_callsite == NULL || + cur_malloc_callsite->addr() > prev_malloc_callsite->addr()) { + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(prev_malloc_callsite->amount()), + prev_malloc_callsite->count(), + diff_in_current_scale(0, prev_malloc_callsite->amount()), + diff(0, prev_malloc_callsite->count())); + prev_malloc_callsite = (MallocCallsitePointer*)prev_malloc_itr.next(); + } else { // the same callsite + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(cur_malloc_callsite->amount()), + cur_malloc_callsite->count(), + diff_in_current_scale(cur_malloc_callsite->amount(), prev_malloc_callsite->amount()), + diff(cur_malloc_callsite->count(), prev_malloc_callsite->count())); + cur_malloc_callsite = (MallocCallsitePointer*)cur_malloc_itr.next(); + prev_malloc_callsite = (MallocCallsitePointer*)prev_malloc_itr.next(); + } + } + + // walk virtual memory callsite + MemPointerArrayIteratorImpl cur_vm_itr(pBL_cur->_vm_cs); + MemPointerArrayIteratorImpl prev_vm_itr(pBL_prev->_vm_cs); + VMCallsitePointer* cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.current(); + VMCallsitePointer* prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.current(); + while (cur_vm_callsite != NULL || prev_vm_callsite != NULL) { + if (prev_vm_callsite == NULL || cur_vm_callsite->addr() < prev_vm_callsite->addr()) { + _outputer.diff_virtual_memory_callsite(cur_vm_callsite->addr(), + amount_in_current_scale(cur_vm_callsite->reserved_amount()), + amount_in_current_scale(cur_vm_callsite->committed_amount()), + diff_in_current_scale(cur_vm_callsite->reserved_amount(), 0), + diff_in_current_scale(cur_vm_callsite->committed_amount(), 0)); + cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.next(); + } else if (cur_vm_callsite == NULL || cur_vm_callsite->addr() > prev_vm_callsite->addr()) { + _outputer.diff_virtual_memory_callsite(prev_vm_callsite->addr(), + amount_in_current_scale(prev_vm_callsite->reserved_amount()), + amount_in_current_scale(prev_vm_callsite->committed_amount()), + diff_in_current_scale(0, prev_vm_callsite->reserved_amount()), + diff_in_current_scale(0, prev_vm_callsite->committed_amount())); + prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.next(); + } else { // the same callsite + _outputer.diff_virtual_memory_callsite(cur_vm_callsite->addr(), + amount_in_current_scale(cur_vm_callsite->reserved_amount()), + amount_in_current_scale(cur_vm_callsite->committed_amount()), + diff_in_current_scale(cur_vm_callsite->reserved_amount(), prev_vm_callsite->reserved_amount()), + diff_in_current_scale(cur_vm_callsite->committed_amount(), prev_vm_callsite->committed_amount())); + cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.next(); + prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.next(); + } + } + + _outputer.done_callsite(); +} + +size_t BaselineReporter::amount_in_current_scale(size_t amt) const { + return (size_t)(((float)amt/(float)_scale) + 0.5); +} + +int BaselineReporter::diff_in_current_scale(size_t value1, size_t value2) const { + return (int)(((float)value1 - (float)value2)/((float)_scale) + 0.5); +} + +int BaselineReporter::diff(size_t value1, size_t value2) const { + return ((int)value1 - (int)value2); +} + +void BaselineTTYOutputer::start(size_t scale, bool report_diff) { + _scale = scale; + _output->print_cr(" "); + _output->print_cr("Native Memory Tracking:"); + _output->print_cr(" "); +} + +void BaselineTTYOutputer::done() { + +} + +void BaselineTTYOutputer::total_usage(size_t total_reserved, size_t total_committed) { + const char* unit = memory_unit(_scale); + _output->print_cr("Total: reserved=%d%s, committed=%d%s", + total_reserved, unit, total_committed, unit); +} + +void BaselineTTYOutputer::start_category_summary() { + _output->print_cr(" "); +} + +/** + * report a summary of memory type + */ +void BaselineTTYOutputer::category_summary(MEMFLAGS type, + size_t reserved_amt, size_t committed_amt, size_t malloc_amt, + size_t malloc_count, size_t arena_amt, size_t arena_count) { + + // we report mtThreadStack under mtThread category + if (type == mtThreadStack) { + assert(malloc_amt == 0 && malloc_count == 0 && arena_amt == 0, + "Just check"); + _thread_stack_reserved = reserved_amt; + _thread_stack_committed = committed_amt; + } else { + const char* unit = memory_unit(_scale); + size_t total_reserved = (reserved_amt + malloc_amt + arena_amt); + size_t total_committed = (committed_amt + malloc_amt + arena_amt); + if (type == mtThread) { + total_reserved += _thread_stack_reserved; + total_committed += _thread_stack_committed; + } + + if (total_reserved > 0) { + _output->print_cr("-%26s (reserved=%d%s, committed=%d%s)", + MemBaseline::type2name(type), total_reserved, unit, + total_committed, unit); + + if (type == mtClass) { + _output->print_cr("%27s (classes #%d)", " ", _num_of_classes); + } else if (type == mtThread) { + _output->print_cr("%27s (thread #%d)", " ", _num_of_threads); + _output->print_cr("%27s (stack: reserved=%d%s, committed=%d%s)", " ", + _thread_stack_reserved, unit, _thread_stack_committed, unit); + } + + if (malloc_amt > 0) { + if (type != mtChunk) { + _output->print_cr("%27s (malloc=%d%s, #%d)", " ", malloc_amt, unit, + malloc_count); + } else { + _output->print_cr("%27s (malloc=%d%s)", " ", malloc_amt, unit); + } + } + + if (reserved_amt > 0) { + _output->print_cr("%27s (mmap: reserved=%d%s, committed=%d%s)", + " ", reserved_amt, unit, committed_amt, unit); + } + + if (arena_amt > 0) { + _output->print_cr("%27s (arena=%d%s, #%d)", " ", arena_amt, unit, arena_count); + } + + _output->print_cr(" "); + } + } +} + +void BaselineTTYOutputer::done_category_summary() { + _output->print_cr(" "); +} + +void BaselineTTYOutputer::start_callsite() { + _output->print_cr("Details:"); + _output->print_cr(" "); +} + +void BaselineTTYOutputer::done_callsite() { + _output->print_cr(" "); +} + +void BaselineTTYOutputer::malloc_callsite(address pc, size_t malloc_amt, + size_t malloc_count) { + if (malloc_amt > 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print("[BOOTSTRAP]%18s", " "); + } else if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", pc, " "); + } + + _output->print_cr("(malloc=%d%s #%d)", malloc_amt, unit, malloc_count); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::virtual_memory_callsite(address pc, size_t reserved_amt, + size_t committed_amt) { + if (reserved_amt > 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print("[BOOTSTRAP]%18s", " "); + } else if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", " "); + } + + _output->print_cr("(mmap: reserved=%d%s, committed=%d%s)", + reserved_amt, unit, committed_amt, unit); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_total_usage(size_t total_reserved, + size_t total_committed, int reserved_diff, int committed_diff) { + const char* unit = memory_unit(_scale); + _output->print_cr("Total: reserved=%d%s %+d%s, committed=%d%s %+d%s", + total_reserved, unit, reserved_diff, unit, total_committed, unit, + committed_diff, unit); +} + +void BaselineTTYOutputer::diff_category_summary(MEMFLAGS type, + size_t cur_reserved_amt, size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, int arena_count_diff) { + + if (type == mtThreadStack) { + assert(cur_malloc_amt == 0 && cur_malloc_count == 0 && + cur_arena_amt == 0, "Just check"); + _thread_stack_reserved = cur_reserved_amt; + _thread_stack_committed = cur_committed_amt; + _thread_stack_reserved_diff = reserved_diff; + _thread_stack_committed_diff = committed_diff; + } else { + const char* unit = memory_unit(_scale); + size_t total_reserved = (cur_reserved_amt + cur_malloc_amt + cur_arena_amt); + // nothing to report in this category + if (total_reserved == 0) { + return; + } + int diff_reserved = (reserved_diff + malloc_diff + arena_diff); + + // category summary + _output->print("-%26s (reserved=%d%s", MemBaseline::type2name(type), + total_reserved, unit); + + if (diff_reserved != 0) { + _output->print(" %+d%s", diff_reserved, unit); + } + + size_t total_committed = cur_committed_amt + cur_malloc_amt + cur_arena_amt; + _output->print(", committed=%d%s", total_committed, unit); + + int total_committed_diff = committed_diff + malloc_diff + arena_diff; + if (total_committed_diff != 0) { + _output->print(" %+d%s", total_committed_diff, unit); + } + + _output->print_cr(")"); + + // special cases + if (type == mtClass) { + _output->print("%27s (classes #%d", " ", _num_of_classes); + if (_num_of_classes_diff != 0) { + _output->print(" %+d", _num_of_classes_diff); + } + _output->print_cr(")"); + } else if (type == mtThread) { + // thread count + _output->print("%27s (thread #%d", " ", _num_of_threads); + if (_num_of_threads_diff != 0) { + _output->print_cr(" %+d)", _num_of_threads_diff); + } else { + _output->print_cr(")"); + } + _output->print("%27s (stack: reserved=%d%s", " ", _thread_stack_reserved, unit); + if (_thread_stack_reserved_diff != 0) { + _output->print(" %+d%s", _thread_stack_reserved_diff, unit); + } + + _output->print(", committed=%d%s", _thread_stack_committed, unit); + if (_thread_stack_committed_diff != 0) { + _output->print(" %+d%s",_thread_stack_committed_diff, unit); + } + + _output->print_cr(")"); + } + + // malloc'd memory + if (cur_malloc_amt > 0) { + _output->print("%27s (malloc=%d%s", " ", cur_malloc_amt, unit); + if (malloc_diff != 0) { + _output->print(" %+d%s", malloc_diff, unit); + } + if (type != mtChunk) { + _output->print(", #%d", cur_malloc_count); + if (malloc_count_diff) { + _output->print(" %+d", malloc_count_diff); + } + } + _output->print_cr(")"); + } + + // mmap'd memory + if (cur_reserved_amt > 0) { + _output->print("%27s (mmap: reserved=%d%s", " ", cur_reserved_amt, unit); + if (reserved_diff != 0) { + _output->print(" %+d%s", reserved_diff, unit); + } + + _output->print(", committed=%d%s", cur_committed_amt, unit); + if (committed_diff != 0) { + _output->print(" %+d%s", committed_diff, unit); + } + _output->print_cr(")"); + } + + // arena memory + if (cur_arena_amt > 0) { + _output->print("%27s (arena=%d%s", " ", cur_arena_amt, unit); + if (arena_diff != 0) { + _output->print(" %+d%s", arena_diff, unit); + } + _output->print(", #%d", cur_arena_count); + if (arena_count_diff != 0) { + _output->print(" %+d", arena_count_diff); + } + _output->print_cr(")"); + } + + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_malloc_callsite(address pc, + size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff) { + if (malloc_diff != 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print_cr("[BOOTSTRAP]%18s", " "); + } else { + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", pc, " "); + } + } + + _output->print("(malloc=%d%s", cur_malloc_amt, unit); + if (malloc_diff != 0) { + _output->print(" %+d%s", malloc_diff, unit); + } + _output->print(", #%d", cur_malloc_count); + if (malloc_count_diff != 0) { + _output->print(" %+d", malloc_count_diff); + } + _output->print_cr(")"); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_virtual_memory_callsite(address pc, + size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff) { + if (reserved_diff != 0 || committed_diff != 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print_cr("[BOOSTRAP]%18s", " "); + } else { + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", " "); + } + } + + _output->print("(mmap: reserved=%d%s", cur_reserved_amt, unit); + if (reserved_diff != 0) { + _output->print(" %+d%s", reserved_diff, unit); + } + _output->print(", committed=%d%s", cur_committed_amt, unit); + if (committed_diff != 0) { + _output->print(" %+d%s", committed_diff, unit); + } + _output->print_cr(")"); + _output->print_cr(" "); + } +} diff --git a/hotspot/src/share/vm/services/memReporter.hpp b/hotspot/src/share/vm/services/memReporter.hpp new file mode 100644 index 00000000000..4ce64ba2d31 --- /dev/null +++ b/hotspot/src/share/vm/services/memReporter.hpp @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_REPORTER_HPP +#define SHARE_VM_SERVICES_MEM_REPORTER_HPP + +#include "runtime/mutexLocker.hpp" +#include "services/memBaseline.hpp" +#include "services/memTracker.hpp" +#include "utilities/ostream.hpp" + +/* + * MemBaselineReporter reports data to this outputer class, + * ReportOutputer is responsible for format, store and redirect + * the data to the final destination. + */ +class BaselineOutputer : public StackObj { + public: + // start to report memory usage in specified scale. + // if report_diff = true, the reporter reports baseline comparison + // information. + + virtual void start(size_t scale, bool report_diff = false) = 0; + // Done reporting + virtual void done() = 0; + + /* report baseline summary information */ + virtual void total_usage(size_t total_reserved, + size_t total_committed) = 0; + virtual void num_of_classes(size_t classes) = 0; + virtual void num_of_threads(size_t threads) = 0; + + virtual void thread_info(size_t stack_reserved_amt, size_t stack_committed_amt) = 0; + + /* report baseline summary comparison */ + virtual void diff_total_usage(size_t total_reserved, + size_t total_committed, + int reserved_diff, + int committed_diff) = 0; + virtual void diff_num_of_classes(size_t classes, int diff) = 0; + virtual void diff_num_of_threads(size_t threads, int diff) = 0; + + virtual void diff_thread_info(size_t stack_reserved, size_t stack_committed, + int stack_reserved_diff, int stack_committed_diff) = 0; + + + /* + * memory summary by memory types. + * for each memory type, following summaries are reported: + * - reserved amount, committed amount + * - malloc'd amount, malloc count + * - arena amount, arena count + */ + + // start reporting memory summary by memory type + virtual void start_category_summary() = 0; + + virtual void category_summary(MEMFLAGS type, size_t reserved_amt, + size_t committed_amt, + size_t malloc_amt, size_t malloc_count, + size_t arena_amt, size_t arena_count) = 0; + + virtual void diff_category_summary(MEMFLAGS type, size_t cur_reserved_amt, + size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, + int arena_count_diff) = 0; + + virtual void done_category_summary() = 0; + + /* + * Report callsite information + */ + virtual void start_callsite() = 0; + virtual void malloc_callsite(address pc, size_t malloc_amt, size_t malloc_count) = 0; + virtual void virtual_memory_callsite(address pc, size_t reserved_amt, size_t committed_amt) = 0; + + virtual void diff_malloc_callsite(address pc, size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff) = 0; + virtual void diff_virtual_memory_callsite(address pc, size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff) = 0; + + virtual void done_callsite() = 0; + + // return current scale in "KB", "MB" or "GB" + static const char* memory_unit(size_t scale); +}; + +/* + * This class reports processed data from a baseline or + * the changes between the two baseline. + */ +class BaselineReporter : public StackObj { + private: + BaselineOutputer& _outputer; + size_t _scale; + + public: + // construct a reporter that reports memory usage + // in specified scale + BaselineReporter(BaselineOutputer& outputer, size_t scale = K): + _outputer(outputer) { + _scale = scale; + } + virtual void report_baseline(const MemBaseline& baseline, bool summary_only = false); + virtual void diff_baselines(const MemBaseline& cur, const MemBaseline& prev, + bool summary_only = false); + + void set_scale(size_t scale); + size_t scale() const { return _scale; } + + private: + void report_summaries(const MemBaseline& baseline); + void report_callsites(const MemBaseline& baseline); + + void diff_summaries(const MemBaseline& cur, const MemBaseline& prev); + void diff_callsites(const MemBaseline& cur, const MemBaseline& prev); + + // calculate memory size in current memory scale + size_t amount_in_current_scale(size_t amt) const; + // diff two unsigned values in current memory scale + int diff_in_current_scale(size_t value1, size_t value2) const; + // diff two unsigned value + int diff(size_t value1, size_t value2) const; +}; + +/* + * tty output implementation. Native memory tracking + * DCmd uses this outputer. + */ +class BaselineTTYOutputer : public BaselineOutputer { + private: + size_t _scale; + + size_t _num_of_classes; + size_t _num_of_threads; + size_t _thread_stack_reserved; + size_t _thread_stack_committed; + + int _num_of_classes_diff; + int _num_of_threads_diff; + int _thread_stack_reserved_diff; + int _thread_stack_committed_diff; + + outputStream* _output; + + public: + BaselineTTYOutputer(outputStream* st) { + _scale = K; + _num_of_classes = 0; + _num_of_threads = 0; + _thread_stack_reserved = 0; + _thread_stack_committed = 0; + _num_of_classes_diff = 0; + _num_of_threads_diff = 0; + _thread_stack_reserved_diff = 0; + _thread_stack_committed_diff = 0; + _output = st; + } + + // begin reporting memory usage in specified scale + void start(size_t scale, bool report_diff = false); + // done reporting + void done(); + + // total memory usage + void total_usage(size_t total_reserved, + size_t total_committed); + // report total loaded classes + void num_of_classes(size_t classes) { + _num_of_classes = classes; + } + + void num_of_threads(size_t threads) { + _num_of_threads = threads; + } + + void thread_info(size_t stack_reserved_amt, size_t stack_committed_amt) { + _thread_stack_reserved = stack_reserved_amt; + _thread_stack_committed = stack_committed_amt; + } + + void diff_total_usage(size_t total_reserved, + size_t total_committed, + int reserved_diff, + int committed_diff); + + void diff_num_of_classes(size_t classes, int diff) { + _num_of_classes = classes; + _num_of_classes_diff = diff; + } + + void diff_num_of_threads(size_t threads, int diff) { + _num_of_threads = threads; + _num_of_threads_diff = diff; + } + + void diff_thread_info(size_t stack_reserved_amt, size_t stack_committed_amt, + int stack_reserved_diff, int stack_committed_diff) { + _thread_stack_reserved = stack_reserved_amt; + _thread_stack_committed = stack_committed_amt; + _thread_stack_reserved_diff = stack_reserved_diff; + _thread_stack_committed_diff = stack_committed_diff; + } + + /* + * Report memory summary categoriuzed by memory types. + * For each memory type, following summaries are reported: + * - reserved amount, committed amount + * - malloc-ed amount, malloc count + * - arena amount, arena count + */ + // start reporting memory summary by memory type + void start_category_summary(); + void category_summary(MEMFLAGS type, size_t reserved_amt, size_t committed_amt, + size_t malloc_amt, size_t malloc_count, + size_t arena_amt, size_t arena_count); + + void diff_category_summary(MEMFLAGS type, size_t cur_reserved_amt, + size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, + int arena_count_diff); + + void done_category_summary(); + + /* + * Report callsite information + */ + void start_callsite(); + void malloc_callsite(address pc, size_t malloc_amt, size_t malloc_count); + void virtual_memory_callsite(address pc, size_t reserved_amt, size_t committed_amt); + + void diff_malloc_callsite(address pc, size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff); + void diff_virtual_memory_callsite(address pc, size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff); + + void done_callsite(); +}; + + +#endif // SHARE_VM_SERVICES_MEM_REPORTER_HPP diff --git a/hotspot/src/share/vm/services/memSnapshot.cpp b/hotspot/src/share/vm/services/memSnapshot.cpp new file mode 100644 index 00000000000..30288e546d4 --- /dev/null +++ b/hotspot/src/share/vm/services/memSnapshot.cpp @@ -0,0 +1,463 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "runtime/mutexLocker.hpp" +#include "utilities/decoder.hpp" +#include "services/memBaseline.hpp" +#include "services/memPtr.hpp" +#include "services/memPtrArray.hpp" +#include "services/memSnapshot.hpp" +#include "services/memTracker.hpp" + + +// stagging data groups the data of a VM memory range, so we can consolidate +// them into one record during the walk +bool StagingWalker::consolidate_vm_records(VMMemRegionEx* vm_rec) { + MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); + assert(cur != NULL && cur->is_vm_pointer(), "not a virtual memory pointer"); + + jint cur_seq; + jint next_seq; + + bool trackCallsite = MemTracker::track_callsite(); + + if (trackCallsite) { + vm_rec->init((MemPointerRecordEx*)cur); + cur_seq = ((SeqMemPointerRecordEx*)cur)->seq(); + } else { + vm_rec->init((MemPointerRecord*)cur); + cur_seq = ((SeqMemPointerRecord*)cur)->seq(); + } + + // only can consolidate when we have allocation record, + // which contains virtual memory range + if (!cur->is_allocation_record()) { + _itr.next(); + return true; + } + + // allocation range + address base = cur->addr(); + address end = base + cur->size(); + + MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); + // if the memory range is alive + bool live_vm_rec = true; + while (next != NULL && next->is_vm_pointer()) { + if (next->is_allocation_record()) { + assert(next->addr() >= base, "sorting order or overlapping"); + break; + } + + if (trackCallsite) { + next_seq = ((SeqMemPointerRecordEx*)next)->seq(); + } else { + next_seq = ((SeqMemPointerRecord*)next)->seq(); + } + + if (next_seq < cur_seq) { + _itr.next(); + next = (MemPointerRecord*)_itr.peek_next(); + continue; + } + + if (next->is_deallocation_record()) { + if (next->addr() == base && next->size() == cur->size()) { + // the virtual memory range has been released + _itr.next(); + live_vm_rec = false; + break; + } else if (next->addr() < end) { // partial release + vm_rec->partial_release(next->addr(), next->size()); + _itr.next(); + } else { + break; + } + } else if (next->is_commit_record()) { + if (next->addr() >= base && next->addr() + next->size() <= end) { + vm_rec->commit(next->size()); + _itr.next(); + } else { + assert(next->addr() >= base, "sorting order or overlapping"); + break; + } + } else if (next->is_uncommit_record()) { + if (next->addr() >= base && next->addr() + next->size() <= end) { + vm_rec->uncommit(next->size()); + _itr.next(); + } else { + assert(next->addr() >= end, "sorting order or overlapping"); + break; + } + } else if (next->is_type_tagging_record()) { + if (next->addr() >= base && next->addr() < end ) { + vm_rec->tag(next->flags()); + _itr.next(); + } else { + break; + } + } else { + assert(false, "unknown record type"); + } + next = (MemPointerRecord*)_itr.peek_next(); + } + _itr.next(); + return live_vm_rec; +} + +MemPointer* StagingWalker::next() { + MemPointerRecord* cur_p = (MemPointerRecord*)_itr.current(); + if (cur_p == NULL) { + _end_of_array = true; + return NULL; + } + + MemPointerRecord* next_p; + if (cur_p->is_vm_pointer()) { + _is_vm_record = true; + if (!consolidate_vm_records(&_vm_record)) { + return next(); + } + } else { // malloc-ed pointer + _is_vm_record = false; + next_p = (MemPointerRecord*)_itr.peek_next(); + if (next_p != NULL && next_p->addr() == cur_p->addr()) { + assert(cur_p->is_allocation_record(), "sorting order"); + assert(!next_p->is_allocation_record(), "sorting order"); + _itr.next(); + if (cur_p->seq() < next_p->seq()) { + cur_p = next_p; + } + } + if (MemTracker::track_callsite()) { + _malloc_record.init((MemPointerRecordEx*)cur_p); + } else { + _malloc_record.init((MemPointerRecord*)cur_p); + } + + _itr.next(); + } + return current(); +} + +MemSnapshot::MemSnapshot() { + if (MemTracker::track_callsite()) { + _alloc_ptrs = new (std::nothrow) MemPointerArrayImpl(); + _vm_ptrs = new (std::nothrow)MemPointerArrayImpl(64, true); + _staging_area = new (std::nothrow)MemPointerArrayImpl(); + } else { + _alloc_ptrs = new (std::nothrow) MemPointerArrayImpl(); + _vm_ptrs = new (std::nothrow)MemPointerArrayImpl(64, true); + _staging_area = new (std::nothrow)MemPointerArrayImpl(); + } + + _lock = new (std::nothrow) Mutex(Monitor::max_nonleaf - 1, "memSnapshotLock"); + NOT_PRODUCT(_untracked_count = 0;) +} + +MemSnapshot::~MemSnapshot() { + assert(MemTracker::shutdown_in_progress(), "native memory tracking still on"); + { + MutexLockerEx locker(_lock); + if (_staging_area != NULL) { + delete _staging_area; + _staging_area = NULL; + } + + if (_alloc_ptrs != NULL) { + delete _alloc_ptrs; + _alloc_ptrs = NULL; + } + + if (_vm_ptrs != NULL) { + delete _vm_ptrs; + _vm_ptrs = NULL; + } + } + + if (_lock != NULL) { + delete _lock; + _lock = NULL; + } +} + +void MemSnapshot::copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src) { + assert(dest != NULL && src != NULL, "Just check"); + assert(dest->addr() == src->addr(), "Just check"); + + MEMFLAGS flags = dest->flags(); + + if (MemTracker::track_callsite()) { + *(MemPointerRecordEx*)dest = *(MemPointerRecordEx*)src; + } else { + *dest = *src; + } +} + + +// merge a per-thread memory recorder to the staging area +bool MemSnapshot::merge(MemRecorder* rec) { + assert(rec != NULL && !rec->out_of_memory(), "Just check"); + + // out of memory + if (_staging_area == NULL || _staging_area->out_of_memory()) { + return false; + } + + SequencedRecordIterator itr(rec->pointer_itr()); + + MutexLockerEx lock(_lock, true); + MemPointerIterator staging_itr(_staging_area); + MemPointerRecord *p1, *p2; + p1 = (MemPointerRecord*) itr.current(); + while (p1 != NULL) { + p2 = (MemPointerRecord*)staging_itr.locate(p1->addr()); + // we have not seen this memory block, so just add to staging area + if (p2 == NULL) { + if (!staging_itr.insert(p1)) { + return false; + } + } else if (p1->addr() == p2->addr()) { + MemPointerRecord* staging_next = (MemPointerRecord*)staging_itr.peek_next(); + // a memory block can have many tagging records, find right one to replace or + // right position to insert + while (staging_next != NULL && staging_next->addr() == p1->addr()) { + if ((staging_next->flags() & MemPointerRecord::tag_masks) <= + (p1->flags() & MemPointerRecord::tag_masks)) { + p2 = (MemPointerRecord*)staging_itr.next(); + staging_next = (MemPointerRecord*)staging_itr.peek_next(); + } else { + break; + } + } + int df = (p1->flags() & MemPointerRecord::tag_masks) - + (p2->flags() & MemPointerRecord::tag_masks); + if (df == 0) { + assert(p1->seq() > 0, "not sequenced"); + assert(p2->seq() > 0, "not sequenced"); + if (p1->seq() > p2->seq()) { + copy_pointer(p2, p1); + } + } else if (df < 0) { + if (!staging_itr.insert(p1)) { + return false; + } + } else { + if (!staging_itr.insert_after(p1)) { + return false; + } + } + } else if (p1->addr() < p2->addr()) { + if (!staging_itr.insert(p1)) { + return false; + } + } else { + if (!staging_itr.insert_after(p1)) { + return false; + } + } + p1 = (MemPointerRecord*)itr.next(); + } + NOT_PRODUCT(void check_staging_data();) + return true; +} + + + +// promote data to next generation +void MemSnapshot::promote() { + assert(_alloc_ptrs != NULL && _staging_area != NULL && _vm_ptrs != NULL, + "Just check"); + MutexLockerEx lock(_lock, true); + StagingWalker walker(_staging_area); + MemPointerIterator malloc_itr(_alloc_ptrs); + VMMemPointerIterator vm_itr(_vm_ptrs); + MemPointer* cur = walker.current(); + while (cur != NULL) { + if (walker.is_vm_record()) { + VMMemRegion* cur_vm = (VMMemRegion*)cur; + VMMemRegion* p = (VMMemRegion*)vm_itr.locate(cur_vm->addr()); + cur_vm = (VMMemRegion*)cur; + if (p != NULL && (p->contains(cur_vm) || p->base() == cur_vm->base())) { + assert(p->is_reserve_record() || + p->is_commit_record(), "wrong vm record type"); + // resize existing reserved range + if (cur_vm->is_reserve_record() && p->base() == cur_vm->base()) { + assert(cur_vm->size() >= p->committed_size(), "incorrect resizing"); + p->set_reserved_size(cur_vm->size()); + } else if (cur_vm->is_commit_record()) { + p->commit(cur_vm->committed_size()); + } else if (cur_vm->is_uncommit_record()) { + p->uncommit(cur_vm->committed_size()); + if (!p->is_reserve_record() && p->committed_size() == 0) { + vm_itr.remove(); + } + } else if (cur_vm->is_type_tagging_record()) { + p->tag(cur_vm->flags()); + } else if (cur_vm->is_release_record()) { + if (cur_vm->base() == p->base() && cur_vm->size() == p->size()) { + // release the whole range + vm_itr.remove(); + } else { + // partial release + p->partial_release(cur_vm->base(), cur_vm->size()); + } + } else { + // we do see multiple reserver on the same vm range + assert((cur_vm->is_commit_record() || cur_vm->is_reserve_record()) && + cur_vm->base() == p->base() && cur_vm->size() == p->size(), "bad record"); + p->tag(cur_vm->flags()); + } + } else { + if(cur_vm->is_reserve_record()) { + if (p == NULL || p->base() > cur_vm->base()) { + vm_itr.insert(cur_vm); + } else { + vm_itr.insert_after(cur_vm); + } + } else { +#ifdef ASSERT + // In theory, we should assert without conditions. However, in case of native + // thread stack, NMT explicitly releases the thread stack in Thread's destructor, + // due to platform dependent behaviors. On some platforms, we see uncommit/release + // native thread stack, but some, we don't. + if (!cur_vm->is_uncommit_record() && !cur_vm->is_deallocation_record()) { + ShouldNotReachHere(); + } +#endif + } + } + } else { + MemPointerRecord* cur_p = (MemPointerRecord*)cur; + MemPointerRecord* p = (MemPointerRecord*)malloc_itr.locate(cur->addr()); + if (p != NULL && cur_p->addr() == p->addr()) { + assert(p->is_allocation_record() || p->is_arena_size_record(), "untracked"); + if (cur_p->is_allocation_record() || cur_p->is_arena_size_record()) { + copy_pointer(p, cur_p); + } else { // deallocation record + assert(cur_p->is_deallocation_record(), "wrong record type"); + + // we are removing an arena record, we also need to remove its 'size' + // record behind it + if (p->is_arena_record()) { + MemPointerRecord* next_p = (MemPointerRecord*)malloc_itr.peek_next(); + if (next_p->is_arena_size_record()) { + assert(next_p->is_size_record_of_arena(p), "arena records dont match"); + malloc_itr.remove(); + } + } + malloc_itr.remove(); + } + } else { + if (cur_p->is_arena_size_record()) { + MemPointerRecord* prev_p = (MemPointerRecord*)malloc_itr.peek_prev(); + if (prev_p != NULL && + (!prev_p->is_arena_record() || !cur_p->is_size_record_of_arena(prev_p))) { + // arena already deallocated + cur_p = NULL; + } + } + if (cur_p != NULL) { + if (cur_p->is_allocation_record() || cur_p->is_arena_size_record()) { + if (p != NULL && cur_p->addr() > p->addr()) { + malloc_itr.insert_after(cur); + } else { + malloc_itr.insert(cur); + } + } +#ifndef PRODUCT + else if (!has_allocation_record(cur_p->addr())){ + // NMT can not track some startup memory, which allocated before NMT + // is enabled + _untracked_count ++; + } +#endif + } + } + } + + cur = walker.next(); + } + NOT_PRODUCT(check_malloc_pointers();) + _staging_area->shrink(); + _staging_area->clear(); +} + + +#ifdef ASSERT +void MemSnapshot::print_snapshot_stats(outputStream* st) { + st->print_cr("Snapshot:"); + st->print_cr("\tMalloced: %d/%d [%5.2f%%] %dKB", _alloc_ptrs->length(), _alloc_ptrs->capacity(), + (100.0 * (float)_alloc_ptrs->length()) / (float)_alloc_ptrs->capacity(), _alloc_ptrs->instance_size()/K); + + st->print_cr("\tVM: %d/%d [%5.2f%%] %dKB", _vm_ptrs->length(), _vm_ptrs->capacity(), + (100.0 * (float)_vm_ptrs->length()) / (float)_vm_ptrs->capacity(), _vm_ptrs->instance_size()/K); + + st->print_cr("\tStaging: %d/%d [%5.2f%%] %dKB", _staging_area->length(), _staging_area->capacity(), + (100.0 * (float)_staging_area->length()) / (float)_staging_area->capacity(), _staging_area->instance_size()/K); + + st->print_cr("\tUntracked allocation: %d", _untracked_count); +} + +void MemSnapshot::check_malloc_pointers() { + MemPointerArrayIteratorImpl mItr(_alloc_ptrs); + MemPointerRecord* p = (MemPointerRecord*)mItr.current(); + MemPointerRecord* prev = NULL; + while (p != NULL) { + if (prev != NULL) { + assert(p->addr() >= prev->addr(), "sorting order"); + } + prev = p; + p = (MemPointerRecord*)mItr.next(); + } +} + +void MemSnapshot::check_staging_data() { + MemPointerArrayIteratorImpl itr(_staging_area); + MemPointerRecord* cur = (MemPointerRecord*)itr.current(); + MemPointerRecord* next = (MemPointerRecord*)itr.next(); + while (next != NULL) { + assert((next->addr() > cur->addr()) || + ((next->flags() & MemPointerRecord::tag_masks) > + (cur->flags() & MemPointerRecord::tag_masks)), + "sorting order"); + cur = next; + next = (MemPointerRecord*)itr.next(); + } +} + +bool MemSnapshot::has_allocation_record(address addr) { + MemPointerArrayIteratorImpl itr(_staging_area); + MemPointerRecord* cur = (MemPointerRecord*)itr.current(); + while (cur != NULL) { + if (cur->addr() == addr && cur->is_allocation_record()) { + return true; + } + cur = (MemPointerRecord*)itr.next(); + } + return false; +} + +#endif diff --git a/hotspot/src/share/vm/services/memSnapshot.hpp b/hotspot/src/share/vm/services/memSnapshot.hpp new file mode 100644 index 00000000000..8b2376e5f79 --- /dev/null +++ b/hotspot/src/share/vm/services/memSnapshot.hpp @@ -0,0 +1,286 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP +#define SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP + +#include "memory/allocation.hpp" +#include "runtime/mutex.hpp" +#include "runtime/mutexLocker.hpp" +#include "services/memBaseline.hpp" +#include "services/memPtrArray.hpp" + + +// Snapshot pointer array iterator + +// The pointer array contains malloc-ed pointers +class MemPointerIterator : public MemPointerArrayIteratorImpl { + public: + MemPointerIterator(MemPointerArray* arr): + MemPointerArrayIteratorImpl(arr) { + assert(arr != NULL, "null array"); + } + +#ifdef ASSERT + virtual bool is_dup_pointer(const MemPointer* ptr1, + const MemPointer* ptr2) const { + MemPointerRecord* p1 = (MemPointerRecord*)ptr1; + MemPointerRecord* p2 = (MemPointerRecord*)ptr2; + + if (p1->addr() != p2->addr()) return false; + if ((p1->flags() & MemPointerRecord::tag_masks) != + (p2->flags() & MemPointerRecord::tag_masks)) { + return false; + } + // we do see multiple commit/uncommit on the same memory, it is ok + return (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_alloc || + (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; + } + + virtual bool insert(MemPointer* ptr) { + if (_pos > 0) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_pos < _array->length() -1) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + return _array->insert_at(ptr, _pos); + } + + virtual bool insert_after(MemPointer* ptr) { + if (_pos > 0) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_pos < _array->length() - 1) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); + + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_array->insert_at(ptr, _pos + 1)) { + _pos ++; + return true; + } + return false; + } +#endif + + virtual MemPointer* locate(address addr) { + MemPointer* cur = current(); + while (cur != NULL && cur->addr() < addr) { + cur = next(); + } + return cur; + } +}; + +class VMMemPointerIterator : public MemPointerIterator { + public: + VMMemPointerIterator(MemPointerArray* arr): + MemPointerIterator(arr) { + } + + // locate an exiting record that contains specified address, or + // the record, where the record with specified address, should + // be inserted + virtual MemPointer* locate(address addr) { + VMMemRegion* cur = (VMMemRegion*)current(); + VMMemRegion* next_p; + + while (cur != NULL) { + if (cur->base() > addr) { + return cur; + } else { + // find nearest existing range that has base address <= addr + next_p = (VMMemRegion*)peek_next(); + if (next_p != NULL && next_p->base() <= addr) { + cur = (VMMemRegion*)next(); + continue; + } + } + + if (cur->is_reserve_record() && + cur->base() <= addr && + (cur->base() + cur->size() > addr)) { + return cur; + } else if (cur->is_commit_record() && + cur->base() <= addr && + (cur->base() + cur->committed_size() > addr)) { + return cur; + } + cur = (VMMemRegion*)next(); + } + return NULL; + } + +#ifdef ASSERT + virtual bool is_dup_pointer(const MemPointer* ptr1, + const MemPointer* ptr2) const { + VMMemRegion* p1 = (VMMemRegion*)ptr1; + VMMemRegion* p2 = (VMMemRegion*)ptr2; + + if (p1->addr() != p2->addr()) return false; + if ((p1->flags() & MemPointerRecord::tag_masks) != + (p2->flags() & MemPointerRecord::tag_masks)) { + return false; + } + // we do see multiple commit/uncommit on the same memory, it is ok + return (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_alloc || + (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; + } +#endif +}; + +class StagingWalker : public MemPointerArrayIterator { + private: + MemPointerArrayIteratorImpl _itr; + bool _is_vm_record; + bool _end_of_array; + VMMemRegionEx _vm_record; + MemPointerRecordEx _malloc_record; + + public: + StagingWalker(MemPointerArray* arr): _itr(arr) { + _end_of_array = false; + next(); + } + + // return the pointer at current position + MemPointer* current() const { + if (_end_of_array) { + return NULL; + } + if (is_vm_record()) { + return (MemPointer*)&_vm_record; + } else { + return (MemPointer*)&_malloc_record; + } + } + + // return the next pointer and advance current position + MemPointer* next(); + + // type of 'current' record + bool is_vm_record() const { + return _is_vm_record; + } + + // return the next poinger without advancing current position + MemPointer* peek_next() const { + assert(false, "not supported"); + return NULL; + } + + MemPointer* peek_prev() const { + assert(false, "not supported"); + return NULL; + } + // remove the pointer at current position + void remove() { + assert(false, "not supported"); + } + + // insert the pointer at current position + bool insert(MemPointer* ptr) { + assert(false, "not supported"); + return false; + } + + bool insert_after(MemPointer* ptr) { + assert(false, "not supported"); + return false; + } + + private: + // consolidate all records referring to this vm region + bool consolidate_vm_records(VMMemRegionEx* vm_rec); +}; + +class MemBaseline; + +class MemSnapshot : public CHeapObj { + private: + // the following two arrays contain records of all known lived memory blocks + // live malloc-ed memory pointers + MemPointerArray* _alloc_ptrs; + // live virtual memory pointers + MemPointerArray* _vm_ptrs; + + // stagging a generation's data, before + // it can be prompted to snapshot + MemPointerArray* _staging_area; + + // the lock to protect this snapshot + Monitor* _lock; + + NOT_PRODUCT(size_t _untracked_count;) + friend class MemBaseline; + + public: + MemSnapshot(); + virtual ~MemSnapshot(); + + // if we are running out of native memory + bool out_of_memory() const { + return (_alloc_ptrs == NULL || _staging_area == NULL || + _vm_ptrs == NULL || _lock == NULL || + _alloc_ptrs->out_of_memory() || + _staging_area->out_of_memory() || + _vm_ptrs->out_of_memory()); + } + + // merge a per-thread memory recorder into staging area + bool merge(MemRecorder* rec); + // promote staged data to snapshot + void promote(); + + + void wait(long timeout) { + assert(_lock != NULL, "Just check"); + MonitorLockerEx locker(_lock); + locker.wait(true, timeout); + } + + NOT_PRODUCT(void print_snapshot_stats(outputStream* st);) + NOT_PRODUCT(void check_staging_data();) + NOT_PRODUCT(void check_malloc_pointers();) + NOT_PRODUCT(bool has_allocation_record(address addr);) + + private: + // copy pointer data from src to dest + void copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src); +}; + + +#endif // SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP diff --git a/hotspot/src/share/vm/services/memTrackWorker.cpp b/hotspot/src/share/vm/services/memTrackWorker.cpp new file mode 100644 index 00000000000..b82a305ed72 --- /dev/null +++ b/hotspot/src/share/vm/services/memTrackWorker.cpp @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "runtime/threadCritical.hpp" +#include "services/memTracker.hpp" +#include "services/memTrackWorker.hpp" +#include "utilities/decoder.hpp" +#include "utilities/vmError.hpp" + +MemTrackWorker::MemTrackWorker() { + // create thread uses cgc thread type for now. We should revisit + // the option, or create new thread type. + _has_error = !os::create_thread(this, os::cgc_thread); + set_name("MemTrackWorker", 0); + + // initial generation circuit buffer + if (!has_error()) { + _head = _tail = 0; + for(int index = 0; index < MAX_GENERATIONS; index ++) { + _gen[index] = NULL; + } + } + NOT_PRODUCT(_sync_point_count = 0;) + NOT_PRODUCT(_merge_count = 0;) + NOT_PRODUCT(_last_gen_in_use = 0;) +} + +MemTrackWorker::~MemTrackWorker() { + for (int index = 0; index < MAX_GENERATIONS; index ++) { + MemRecorder* rc = _gen[index]; + if (rc != NULL) { + delete rc; + } + } +} + +void* MemTrackWorker::operator new(size_t size) { + assert(false, "use nothrow version"); + return NULL; +} + +void* MemTrackWorker::operator new(size_t size, const std::nothrow_t& nothrow_constant) { + return allocate(size, false, mtNMT); +} + +void MemTrackWorker::start() { + os::start_thread(this); +} + +/* + * Native memory tracking worker thread loop: + * 1. merge one generation of memory recorders to staging area + * 2. promote staging data to memory snapshot + * + * This thread can run through safepoint. + */ + +void MemTrackWorker::run() { + assert(MemTracker::is_on(), "native memory tracking is off"); + this->initialize_thread_local_storage(); + this->record_stack_base_and_size(); + MemSnapshot* snapshot = MemTracker::get_snapshot(); + assert(snapshot != NULL, "Worker should not be started"); + MemRecorder* rec; + + while (!MemTracker::shutdown_in_progress()) { + NOT_PRODUCT(_last_gen_in_use = generations_in_use();) + { + // take a recorder from earliest generation in buffer + ThreadCritical tc; + rec = _gen[_head]; + if (rec != NULL) { + _gen[_head] = rec->next(); + } + assert(count_recorder(_gen[_head]) <= MemRecorder::_instance_count, + "infinite loop after dequeue"); + } + if (rec != NULL) { + // merge the recorder into staging area + bool result = snapshot->merge(rec); + assert(result, "merge failed"); + debug_only(_merge_count ++;) + MemTracker::release_thread_recorder(rec); + } else { + // no more recorder to merge, promote staging area + // to snapshot + if (_head != _tail) { + { + ThreadCritical tc; + if (_gen[_head] != NULL || _head == _tail) { + continue; + } + // done with this generation, increment _head pointer + _head = (_head + 1) % MAX_GENERATIONS; + } + // promote this generation data to snapshot + snapshot->promote(); + } else { + snapshot->wait(1000); + ThreadCritical tc; + // check if more data arrived + if (_gen[_head] == NULL) { + _gen[_head] = MemTracker::get_pending_recorders(); + } + } + } + } + assert(MemTracker::shutdown_in_progress(), "just check"); + + // transites to final shutdown + MemTracker::final_shutdown(); +} + +// at synchronization point, where 'safepoint visible' Java threads are blocked +// at a safepoint, and the rest of threads are blocked on ThreadCritical lock. +// The caller MemTracker::sync() already takes ThreadCritical before calling this +// method. +// +// Following tasks are performed: +// 1. add all recorders in pending queue to current generation +// 2. increase generation + +void MemTrackWorker::at_sync_point(MemRecorder* rec) { + NOT_PRODUCT(_sync_point_count ++;) + assert(count_recorder(rec) <= MemRecorder::_instance_count, + "pending queue has infinite loop"); + + bool out_of_generation_buffer = false; + // check shutdown state inside ThreadCritical + if (MemTracker::shutdown_in_progress()) return; + // append the recorders to the end of the generation + if( rec != NULL) { + MemRecorder* cur_head = _gen[_tail]; + if (cur_head == NULL) { + _gen[_tail] = rec; + } else { + while (cur_head->next() != NULL) { + cur_head = cur_head->next(); + } + cur_head->set_next(rec); + } + } + assert(count_recorder(rec) <= MemRecorder::_instance_count, + "after add to current generation has infinite loop"); + // we have collected all recorders for this generation. If there is data, + // we need to increment _tail to start a new generation. + if (_gen[_tail] != NULL || _head == _tail) { + _tail = (_tail + 1) % MAX_GENERATIONS; + out_of_generation_buffer = (_tail == _head); + } + + if (out_of_generation_buffer) { + MemTracker::shutdown(MemTracker::NMT_out_of_generation); + } +} + +#ifndef PRODUCT +int MemTrackWorker::count_recorder(const MemRecorder* head) { + int count = 0; + while(head != NULL) { + count ++; + head = head->next(); + } + return count; +} + +int MemTrackWorker::count_pending_recorders() const { + int count = 0; + for (int index = 0; index < MAX_GENERATIONS; index ++) { + MemRecorder* head = _gen[index]; + if (head != NULL) { + count += count_recorder(head); + } + } + return count; +} +#endif diff --git a/hotspot/src/share/vm/services/memTrackWorker.hpp b/hotspot/src/share/vm/services/memTrackWorker.hpp new file mode 100644 index 00000000000..969828cabee --- /dev/null +++ b/hotspot/src/share/vm/services/memTrackWorker.hpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP +#define SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP + +#include "memory/allocation.hpp" +#include "runtime/thread.hpp" +#include "services/memRecorder.hpp" + +// Maximum MAX_GENERATIONS generation data can be tracked. +#define MAX_GENERATIONS 512 + + +class MemTrackWorker : public NamedThread { + private: + // circular buffer. This buffer contains recorders to be merged into global + // snaphsot. + // Each slot holds a linked list of memory recorders, that contains one + // generation of memory data. + MemRecorder* _gen[MAX_GENERATIONS]; + int _head, _tail; // head and tail pointers to above circular buffer + + bool _has_error; + + public: + MemTrackWorker(); + ~MemTrackWorker(); + _NOINLINE_ void* operator new(size_t size); + _NOINLINE_ void* operator new(size_t size, const std::nothrow_t& nothrow_constant); + + void start(); + void run(); + + inline bool has_error() const { return _has_error; } + + // task at synchronization point + void at_sync_point(MemRecorder* pending_recorders); + + // for debugging purpose, they are not thread safe. + NOT_PRODUCT(static int count_recorder(const MemRecorder* head);) + NOT_PRODUCT(int count_pending_recorders() const;) + + NOT_PRODUCT(int _sync_point_count;) + NOT_PRODUCT(int _merge_count;) + NOT_PRODUCT(int _last_gen_in_use;) + + inline int generations_in_use() const { + return (_tail >= _head ? (_tail - _head + 1) : (MAX_GENERATIONS - (_head - _tail) + 1)); + } +}; + +#endif // SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP diff --git a/hotspot/src/share/vm/services/memTracker.cpp b/hotspot/src/share/vm/services/memTracker.cpp new file mode 100644 index 00000000000..a0067f834ba --- /dev/null +++ b/hotspot/src/share/vm/services/memTracker.cpp @@ -0,0 +1,625 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" + +#include "runtime/atomic.hpp" +#include "runtime/interfaceSupport.hpp" +#include "runtime/mutexLocker.hpp" +#include "runtime/safepoint.hpp" +#include "runtime/threadCritical.hpp" +#include "services/memPtr.hpp" +#include "services/memReporter.hpp" +#include "services/memTracker.hpp" +#include "utilities/decoder.hpp" +#include "utilities/globalDefinitions.hpp" + +bool NMT_track_callsite = false; + +// walk all 'known' threads at NMT sync point, and collect their recorders +void SyncThreadRecorderClosure::do_thread(Thread* thread) { + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + if (thread->is_Java_thread()) { + JavaThread* javaThread = (JavaThread*)thread; + MemRecorder* recorder = javaThread->get_recorder(); + if (recorder != NULL) { + MemTracker::enqueue_pending_recorder(recorder); + javaThread->set_recorder(NULL); + } + } + _thread_count ++; +} + + +MemRecorder* MemTracker::_global_recorder = NULL; +MemSnapshot* MemTracker::_snapshot = NULL; +MemBaseline MemTracker::_baseline; +Mutex* MemTracker::_query_lock = NULL; +volatile MemRecorder* MemTracker::_merge_pending_queue = NULL; +volatile MemRecorder* MemTracker::_pooled_recorders = NULL; +MemTrackWorker* MemTracker::_worker_thread = NULL; +int MemTracker::_sync_point_skip_count = 0; +MemTracker::NMTLevel MemTracker::_tracking_level = MemTracker::NMT_off; +volatile MemTracker::NMTStates MemTracker::_state = NMT_uninited; +MemTracker::ShutdownReason MemTracker::_reason = NMT_shutdown_none; +int MemTracker::_thread_count = 255; +volatile jint MemTracker::_pooled_recorder_count = 0; +debug_only(intx MemTracker::_main_thread_tid = 0;) +debug_only(volatile jint MemTracker::_pending_recorder_count = 0;) + +void MemTracker::init_tracking_options(const char* option_line) { + _tracking_level = NMT_off; + if (strncmp(option_line, "=summary", 8) == 0) { + _tracking_level = NMT_summary; + } else if (strncmp(option_line, "=detail", 8) == 0) { + _tracking_level = NMT_detail; + } +} + +// first phase of bootstrapping, when VM is still in single-threaded mode. +void MemTracker::bootstrap_single_thread() { + if (_tracking_level > NMT_off) { + assert(_state == NMT_uninited, "wrong state"); + + // NMT is not supported with UseMallocOnly is on. NMT can NOT + // handle the amount of malloc data without significantly impacting + // runtime performance when this flag is on. + if (UseMallocOnly) { + shutdown(NMT_use_malloc_only); + return; + } + + _query_lock = new (std::nothrow) Mutex(Monitor::max_nonleaf, "NMT_queryLock"); + if (_query_lock == NULL) { + shutdown(NMT_out_of_memory); + return; + } + + debug_only(_main_thread_tid = os::current_thread_id();) + _state = NMT_bootstrapping_single_thread; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + } +} + +// second phase of bootstrapping, when VM is about to or already entered multi-theaded mode. +void MemTracker::bootstrap_multi_thread() { + if (_tracking_level > NMT_off && _state == NMT_bootstrapping_single_thread) { + // create nmt lock for multi-thread execution + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + _state = NMT_bootstrapping_multi_thread; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + } +} + +// fully start nmt +void MemTracker::start() { + // Native memory tracking is off from command line option + if (_tracking_level == NMT_off || shutdown_in_progress()) return; + + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + assert(_state == NMT_bootstrapping_multi_thread, "wrong state"); + + _snapshot = new (std::nothrow)MemSnapshot(); + if (_snapshot != NULL && !_snapshot->out_of_memory()) { + if (start_worker()) { + _state = NMT_started; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + return; + } + } + + // fail to start native memory tracking, shut it down + shutdown(NMT_initialization); +} + +/** + * Shutting down native memory tracking. + * We can not shutdown native memory tracking immediately, so we just + * setup shutdown pending flag, every native memory tracking component + * should orderly shut itself down. + * + * The shutdown sequences: + * 1. MemTracker::shutdown() sets MemTracker to shutdown pending state + * 2. Worker thread calls MemTracker::final_shutdown(), which transites + * MemTracker to final shutdown state. + * 3. At sync point, MemTracker does final cleanup, before sets memory + * tracking level to off to complete shutdown. + */ +void MemTracker::shutdown(ShutdownReason reason) { + if (_tracking_level == NMT_off) return; + + if (_state <= NMT_bootstrapping_single_thread) { + // we still in single thread mode, there is not contention + _state = NMT_shutdown_pending; + _reason = reason; + } else { + // we want to know who initialized shutdown + if ((jint)NMT_started == Atomic::cmpxchg((jint)NMT_shutdown_pending, + (jint*)&_state, (jint)NMT_started)) { + _reason = reason; + } + } +} + +// final phase of shutdown +void MemTracker::final_shutdown() { + // delete all pending recorders and pooled recorders + delete_all_pending_recorders(); + delete_all_pooled_recorders(); + + { + // shared baseline and snapshot are the only objects needed to + // create query results + MutexLockerEx locker(_query_lock, true); + // cleanup baseline data and snapshot + _baseline.clear(); + delete _snapshot; + _snapshot = NULL; + } + + // shutdown shared decoder instance, since it is only + // used by native memory tracking so far. + Decoder::shutdown(); + + MemTrackWorker* worker = NULL; + { + ThreadCritical tc; + // can not delete worker inside the thread critical + if (_worker_thread != NULL && Thread::current() == _worker_thread) { + worker = _worker_thread; + _worker_thread = NULL; + } + } + if (worker != NULL) { + delete worker; + } + _state = NMT_final_shutdown; +} + +// delete all pooled recorders +void MemTracker::delete_all_pooled_recorders() { + // free all pooled recorders + volatile MemRecorder* cur_head = _pooled_recorders; + if (cur_head != NULL) { + MemRecorder* null_ptr = NULL; + while (cur_head != NULL && (void*)cur_head != Atomic::cmpxchg_ptr((void*)null_ptr, + (void*)&_pooled_recorders, (void*)cur_head)) { + cur_head = _pooled_recorders; + } + if (cur_head != NULL) { + delete cur_head; + _pooled_recorder_count = 0; + } + } +} + +// delete all recorders in pending queue +void MemTracker::delete_all_pending_recorders() { + // free all pending recorders + MemRecorder* pending_head = get_pending_recorders(); + if (pending_head != NULL) { + delete pending_head; + } +} + +/* + * retrieve per-thread recorder of specified thread. + * if thread == NULL, it means global recorder + */ +MemRecorder* MemTracker::get_thread_recorder(JavaThread* thread) { + if (shutdown_in_progress()) return NULL; + + MemRecorder* rc; + if (thread == NULL) { + rc = _global_recorder; + } else { + rc = thread->get_recorder(); + } + + if (rc != NULL && rc->is_full()) { + enqueue_pending_recorder(rc); + rc = NULL; + } + + if (rc == NULL) { + rc = get_new_or_pooled_instance(); + if (thread == NULL) { + _global_recorder = rc; + } else { + thread->set_recorder(rc); + } + } + return rc; +} + +/* + * get a per-thread recorder from pool, or create a new one if + * there is not one available. + */ +MemRecorder* MemTracker::get_new_or_pooled_instance() { + MemRecorder* cur_head = const_cast (_pooled_recorders); + if (cur_head == NULL) { + MemRecorder* rec = new (std::nothrow)MemRecorder(); + if (rec == NULL || rec->out_of_memory()) { + shutdown(NMT_out_of_memory); + if (rec != NULL) { + delete rec; + rec = NULL; + } + } + return rec; + } else { + MemRecorder* next_head = cur_head->next(); + if ((void*)cur_head != Atomic::cmpxchg_ptr((void*)next_head, (void*)&_pooled_recorders, + (void*)cur_head)) { + return get_new_or_pooled_instance(); + } + cur_head->set_next(NULL); + Atomic::dec(&_pooled_recorder_count); + debug_only(cur_head->set_generation();) + return cur_head; + } +} + +/* + * retrieve all recorders in pending queue, and empty the queue + */ +MemRecorder* MemTracker::get_pending_recorders() { + MemRecorder* cur_head = const_cast(_merge_pending_queue); + MemRecorder* null_ptr = NULL; + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)null_ptr, (void*)&_merge_pending_queue, + (void*)cur_head)) { + cur_head = const_cast(_merge_pending_queue); + } + debug_only(Atomic::store(0, &_pending_recorder_count)); + return cur_head; +} + +/* + * release a recorder to recorder pool. + */ +void MemTracker::release_thread_recorder(MemRecorder* rec) { + assert(rec != NULL, "null recorder"); + // we don't want to pool too many recorders + rec->set_next(NULL); + if (shutdown_in_progress() || _pooled_recorder_count > _thread_count * 2) { + delete rec; + return; + } + + rec->clear(); + MemRecorder* cur_head = const_cast(_pooled_recorders); + rec->set_next(cur_head); + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)rec, (void*)&_pooled_recorders, + (void*)cur_head)) { + cur_head = const_cast(_pooled_recorders); + rec->set_next(cur_head); + } + Atomic::inc(&_pooled_recorder_count); +} + +/* + * This is the most important method in whole nmt implementation. + * + * Create a memory record. + * 1. When nmt is in single-threaded bootstrapping mode, no lock is needed as VM + * still in single thread mode. + * 2. For all threads other than JavaThread, ThreadCritical is needed + * to write to recorders to global recorder. + * 3. For JavaThreads that are not longer visible by safepoint, also + * need to take ThreadCritical and records are written to global + * recorders, since these threads are NOT walked by Threads.do_thread(). + * 4. JavaThreads that are running in native state, have to transition + * to VM state before writing to per-thread recorders. + * 5. JavaThreads that are running in VM state do not need any lock and + * records are written to per-thread recorders. + * 6. For a thread has yet to attach VM 'Thread', they need to take + * ThreadCritical to write to global recorder. + * + * Important note: + * NO LOCK should be taken inside ThreadCritical lock !!! + */ +void MemTracker::create_memory_record(address addr, MEMFLAGS flags, + size_t size, address pc, Thread* thread) { + if (!shutdown_in_progress()) { + // single thread, we just write records direct to global recorder,' + // with any lock + if (_state == NMT_bootstrapping_single_thread) { + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + thread = NULL; + } else { + if (thread == NULL) { + // don't use Thread::current(), since it is possible that + // the calling thread has yet to attach to VM 'Thread', + // which will result assertion failure + thread = ThreadLocalStorage::thread(); + } + } + + if (thread != NULL) { + if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) { + JavaThread* java_thread = static_cast(thread); + JavaThreadState state = java_thread->thread_state(); + if (SafepointSynchronize::safepoint_safe(java_thread, state)) { + // JavaThreads that are safepoint safe, can run through safepoint, + // so ThreadCritical is needed to ensure no threads at safepoint create + // new records while the records are being gathered and the sequence number is changing + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, java_thread); + } else { + create_record_in_recorder(addr, flags, size, pc, java_thread); + } + } else { + // other threads, such as worker and watcher threads, etc. need to + // take ThreadCritical to write to global recorder + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, NULL); + } + } else { + if (_state == NMT_bootstrapping_single_thread) { + // single thread, no lock needed + create_record_in_recorder(addr, flags, size, pc, NULL); + } else { + // for thread has yet to attach VM 'Thread', we can not use VM mutex. + // use native thread critical instead + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, NULL); + } + } + } +} + +// write a record to proper recorder. No lock can be taken from this method +// down. +void MemTracker::create_record_in_recorder(address addr, MEMFLAGS flags, + size_t size, address pc, JavaThread* thread) { + + MemRecorder* rc = get_thread_recorder(thread); + if (rc != NULL) { + rc->record(addr, flags, size, pc); + } +} + +/** + * enqueue a recorder to pending queue + */ +void MemTracker::enqueue_pending_recorder(MemRecorder* rec) { + assert(rec != NULL, "null recorder"); + + // we are shutting down, so just delete it + if (shutdown_in_progress()) { + rec->set_next(NULL); + delete rec; + return; + } + + MemRecorder* cur_head = const_cast(_merge_pending_queue); + rec->set_next(cur_head); + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)rec, (void*)&_merge_pending_queue, + (void*)cur_head)) { + cur_head = const_cast(_merge_pending_queue); + rec->set_next(cur_head); + } + debug_only(Atomic::inc(&_pending_recorder_count);) +} + +/* + * The method is called at global safepoint + * during it synchronization process. + * 1. enqueue all JavaThreads' per-thread recorders + * 2. enqueue global recorder + * 3. retrieve all pending recorders + * 4. reset global sequence number generator + * 5. call worker's sync + */ +#define MAX_SAFEPOINTS_TO_SKIP 128 +#define SAFE_SEQUENCE_THRESHOLD 30 +#define HIGH_GENERATION_THRESHOLD 60 + +void MemTracker::sync() { + assert(_tracking_level > NMT_off, "NMT is not enabled"); + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + + // Some GC tests hit large number of safepoints in short period of time + // without meaningful activities. We should prevent going to + // sync point in these cases, which can potentially exhaust generation buffer. + // Here is the factots to determine if we should go into sync point: + // 1. not to overflow sequence number + // 2. if we are in danger to overflow generation buffer + // 3. how many safepoints we already skipped sync point + if (_state == NMT_started) { + // worker thread is not ready, no one can manage generation + // buffer, so skip this safepoint + if (_worker_thread == NULL) return; + + if (_sync_point_skip_count < MAX_SAFEPOINTS_TO_SKIP) { + int per_seq_in_use = SequenceGenerator::peek() * 100 / max_jint; + int per_gen_in_use = _worker_thread->generations_in_use() * 100 / MAX_GENERATIONS; + if (per_seq_in_use < SAFE_SEQUENCE_THRESHOLD && per_gen_in_use >= HIGH_GENERATION_THRESHOLD) { + _sync_point_skip_count ++; + return; + } + } + _sync_point_skip_count = 0; + { + // This method is running at safepoint, with ThreadCritical lock, + // it should guarantee that NMT is fully sync-ed. + ThreadCritical tc; + + // walk all JavaThreads to collect recorders + SyncThreadRecorderClosure stc; + Threads::threads_do(&stc); + + _thread_count = stc.get_thread_count(); + MemRecorder* pending_recorders = get_pending_recorders(); + + if (_global_recorder != NULL) { + _global_recorder->set_next(pending_recorders); + pending_recorders = _global_recorder; + _global_recorder = NULL; + } + SequenceGenerator::reset(); + // check _worker_thread with lock to avoid racing condition + if (_worker_thread != NULL) { + _worker_thread->at_sync_point(pending_recorders); + } + } + } + + // now, it is the time to shut whole things off + if (_state == NMT_final_shutdown) { + // walk all JavaThreads to delete all recorders + SyncThreadRecorderClosure stc; + Threads::threads_do(&stc); + // delete global recorder + { + ThreadCritical tc; + if (_global_recorder != NULL) { + delete _global_recorder; + _global_recorder = NULL; + } + } + MemRecorder* pending_recorders = get_pending_recorders(); + if (pending_recorders != NULL) { + delete pending_recorders; + } + // try at a later sync point to ensure MemRecorder instance drops to zero to + // completely shutdown NMT + if (MemRecorder::_instance_count == 0) { + _state = NMT_shutdown; + _tracking_level = NMT_off; + } + } +} + +/* + * Start worker thread. + */ +bool MemTracker::start_worker() { + assert(_worker_thread == NULL, "Just Check"); + _worker_thread = new (std::nothrow) MemTrackWorker(); + if (_worker_thread == NULL || _worker_thread->has_error()) { + shutdown(NMT_initialization); + return false; + } + _worker_thread->start(); + return true; +} + +/* + * We need to collect a JavaThread's per-thread recorder + * before it exits. + */ +void MemTracker::thread_exiting(JavaThread* thread) { + if (is_on()) { + MemRecorder* rec = thread->get_recorder(); + if (rec != NULL) { + enqueue_pending_recorder(rec); + thread->set_recorder(NULL); + } + } +} + +// baseline current memory snapshot +bool MemTracker::baseline() { + MutexLockerEx lock(_query_lock, true); + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL) { + return _baseline.baseline(*snapshot, false); + } + return false; +} + +// print memory usage from current snapshot +bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { + MemBaseline baseline; + MutexLockerEx lock(_query_lock, true); + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { + BaselineReporter reporter(out, unit); + reporter.report_baseline(baseline, summary_only); + return true; + } + return false; +} + +// compare memory usage between current snapshot and baseline +bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { + MutexLockerEx lock(_query_lock, true); + if (_baseline.baselined()) { + MemBaseline baseline; + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { + BaselineReporter reporter(out, unit); + reporter.diff_baselines(baseline, _baseline, summary_only); + return true; + } + } + return false; +} + +#ifndef PRODUCT +void MemTracker::walk_stack(int toSkip, char* buf, int len) { + int cur_len = 0; + char tmp[1024]; + address pc; + + while (cur_len < len) { + pc = os::get_caller_pc(toSkip + 1); + if (pc != NULL && os::dll_address_to_function_name(pc, tmp, sizeof(tmp), NULL)) { + jio_snprintf(&buf[cur_len], (len - cur_len), "%s\n", tmp); + cur_len = (int)strlen(buf); + } else { + buf[cur_len] = '\0'; + break; + } + toSkip ++; + } +} + +void MemTracker::print_tracker_stats(outputStream* st) { + st->print_cr("\nMemory Tracker Stats:"); + st->print_cr("\tMax sequence number = %d", SequenceGenerator::max_seq_num()); + st->print_cr("\tthead count = %d", _thread_count); + st->print_cr("\tArena instance = %d", Arena::_instance_count); + st->print_cr("\tpooled recorder count = %d", _pooled_recorder_count); + st->print_cr("\tqueued recorder count = %d", _pending_recorder_count); + st->print_cr("\tmemory recorder instance count = %d", MemRecorder::_instance_count); + if (_worker_thread != NULL) { + st->print_cr("\tWorker thread:"); + st->print_cr("\t\tSync point count = %d", _worker_thread->_sync_point_count); + st->print_cr("\t\tpending recorder count = %d", _worker_thread->count_pending_recorders()); + st->print_cr("\t\tmerge count = %d", _worker_thread->_merge_count); + } else { + st->print_cr("\tWorker thread is not started"); + } + st->print_cr(" "); + + if (_snapshot != NULL) { + _snapshot->print_snapshot_stats(st); + } else { + st->print_cr("No snapshot"); + } +} +#endif + diff --git a/hotspot/src/share/vm/services/memTracker.hpp b/hotspot/src/share/vm/services/memTracker.hpp new file mode 100644 index 00000000000..c0c6d798163 --- /dev/null +++ b/hotspot/src/share/vm/services/memTracker.hpp @@ -0,0 +1,386 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_TRACKER_HPP +#define SHARE_VM_SERVICES_MEM_TRACKER_HPP + +#include "memory/allocation.hpp" +#include "runtime/globals.hpp" +#include "runtime/mutex.hpp" +#include "runtime/os.hpp" +#include "runtime/thread.hpp" +#include "services/memPtr.hpp" +#include "services/memRecorder.hpp" +#include "services/memSnapshot.hpp" +#include "services/memTrackWorker.hpp" + +#ifdef SOLARIS +#include "thread_solaris.inline.hpp" +#endif + +#ifdef _DEBUG_ + #define DEBUG_CALLER_PC os::get_caller_pc(3) +#else + #define DEBUG_CALLER_PC 0 +#endif + +// The thread closure walks threads to collect per-thread +// memory recorders at NMT sync point +class SyncThreadRecorderClosure : public ThreadClosure { + private: + int _thread_count; + + public: + SyncThreadRecorderClosure() { + _thread_count =0; + } + + void do_thread(Thread* thread); + int get_thread_count() const { + return _thread_count; + } +}; + +class BaselineOutputer; +class MemSnapshot; +class MemTrackWorker; +class Thread; +/* + * MemTracker is the 'gate' class to native memory tracking runtime. + */ +class MemTracker : AllStatic { + friend class MemTrackWorker; + friend class MemSnapshot; + friend class SyncThreadRecorderClosure; + + // NMT state + enum NMTStates { + NMT_uninited, // not yet initialized + NMT_bootstrapping_single_thread, // bootstrapping, VM is in single thread mode + NMT_bootstrapping_multi_thread, // bootstrapping, VM is about to enter multi-thread mode + NMT_started, // NMT fully started + NMT_shutdown_pending, // shutdown pending + NMT_final_shutdown, // in final phase of shutdown + NMT_shutdown // shutdown + }; + + + // native memory tracking level + enum NMTLevel { + NMT_off, // native memory tracking is off + NMT_summary, // don't track callsite + NMT_detail // track callsite also + }; + + public: + enum ShutdownReason { + NMT_shutdown_none, // no shutdown requested + NMT_shutdown_user, // user requested shutdown + NMT_normal, // normal shutdown, process exit + NMT_out_of_memory, // shutdown due to out of memory + NMT_initialization, // shutdown due to initialization failure + NMT_use_malloc_only, // can not combine NMT with UseMallocOnly flag + NMT_error_reporting, // shutdown by vmError::report_and_die() + NMT_out_of_generation, // running out of generation queue + NMT_sequence_overflow // overflow the sequence number + }; + + public: + // initialize NMT tracking level from command line options, called + // from VM command line parsing code + static void init_tracking_options(const char* option_line); + + // if NMT is enabled to record memory activities + static inline bool is_on() { + return (_tracking_level >= NMT_summary && + _state >= NMT_bootstrapping_single_thread); + } + + // user readable reason for shutting down NMT + static const char* reason() { + switch(_reason) { + case NMT_shutdown_none: + return "Native memory tracking is not enabled"; + case NMT_shutdown_user: + return "Native memory tracking has been shutdown by user"; + case NMT_normal: + return "Native memory tracking has been shutdown due to process exiting"; + case NMT_out_of_memory: + return "Native memory tracking has been shutdown due to out of native memory"; + case NMT_initialization: + return "Native memory tracking failed to initialize"; + case NMT_error_reporting: + return "Native memory tracking has been shutdown due to error reporting"; + case NMT_out_of_generation: + return "Native memory tracking has been shutdown due to running out of generation buffer"; + case NMT_sequence_overflow: + return "Native memory tracking has been shutdown due to overflow the sequence number"; + case NMT_use_malloc_only: + return "Native memory tracking is not supported when UseMallocOnly is on"; + default: + ShouldNotReachHere(); + return NULL; + } + } + + // test if we can walk native stack + static bool can_walk_stack() { + // native stack is not walkable during bootstrapping on sparc +#if defined(SPARC) + return (_state == NMT_started); +#else + return (_state >= NMT_bootstrapping_single_thread && _state <= NMT_started); +#endif + } + + // if native memory tracking tracks callsite + static inline bool track_callsite() { return _tracking_level == NMT_detail; } + + // shutdown native memory tracking capability. Native memory tracking + // can be shutdown by VM when it encounters low memory scenarios. + // Memory tracker should gracefully shutdown itself, and preserve the + // latest memory statistics for post morten diagnosis. + static void shutdown(ShutdownReason reason); + + // if there is shutdown requested + static inline bool shutdown_in_progress() { + return (_state >= NMT_shutdown_pending); + } + + // bootstrap native memory tracking, so it can start to collect raw data + // before worker thread can start + + // the first phase of bootstrapping, when VM still in single-threaded mode + static void bootstrap_single_thread(); + // the second phase of bootstrapping, VM is about or already in multi-threaded mode + static void bootstrap_multi_thread(); + + + // start() has to be called when VM still in single thread mode, but after + // command line option parsing is done. + static void start(); + + // record a 'malloc' call + static inline void record_malloc(address addr, size_t size, MEMFLAGS flags, + address pc = 0, Thread* thread = NULL) { + assert(is_on(), "check by caller"); + if (NMT_CAN_TRACK(flags)) { + create_memory_record(addr, (flags|MemPointerRecord::malloc_tag()), size, pc, thread); + } + } + // record a 'free' call + static inline void record_free(address addr, MEMFLAGS flags, Thread* thread = NULL) { + if (is_on() && NMT_CAN_TRACK(flags)) { + create_memory_record(addr, MemPointerRecord::free_tag(), 0, 0, thread); + } + } + // record a 'realloc' call + static inline void record_realloc(address old_addr, address new_addr, size_t size, + MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { + if (is_on()) { + record_free(old_addr, flags, thread); + record_malloc(new_addr, size, flags, pc, thread); + } + } + + // record arena size + static inline void record_arena_size(address addr, size_t size) { + // we add a positive offset to arena address, so we can have arena size record + // sorted after arena record + if (is_on() && !UseMallocOnly) { + create_memory_record((addr + sizeof(void*)), MemPointerRecord::arena_size_tag(), size, + 0, NULL); + } + } + + // record a virtual memory 'reserve' call + static inline void record_virtual_memory_reserve(address addr, size_t size, + address pc = 0, Thread* thread = NULL) { + if (is_on()) { + assert(size > 0, "reserve szero size"); + create_memory_record(addr, MemPointerRecord::virtual_memory_reserve_tag(), + size, pc, thread); + } + } + + // record a virtual memory 'commit' call + static inline void record_virtual_memory_commit(address addr, size_t size, + address pc = 0, Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_commit_tag(), + size, pc, thread); + } + } + + // record a virtual memory 'uncommit' call + static inline void record_virtual_memory_uncommit(address addr, size_t size, + Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_uncommit_tag(), + size, 0, thread); + } + } + + // record a virtual memory 'release' call + static inline void record_virtual_memory_release(address addr, size_t size, + Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_release_tag(), + size, 0, thread); + } + } + + // record memory type on virtual memory base address + static inline void record_virtual_memory_type(address base, MEMFLAGS flags, + Thread* thread = NULL) { + if (is_on()) { + assert(base > 0, "wrong base address"); + assert((flags & (~mt_masks)) == 0, "memory type only"); + create_memory_record(base, (flags | MemPointerRecord::virtual_memory_type_tag()), + 0, 0, thread); + } + } + + + // create memory baseline of current memory snapshot + static bool baseline(); + // is there a memory baseline + static bool has_baseline() { + return _baseline.baselined(); + } + + // print memory usage from current snapshot + static bool print_memory_usage(BaselineOutputer& out, size_t unit, + bool summary_only = true); + // compare memory usage between current snapshot and baseline + static bool compare_memory_usage(BaselineOutputer& out, size_t unit, + bool summary_only = true); + + // sync is called within global safepoint to synchronize nmt data + static void sync(); + + // called when a thread is about to exit + static void thread_exiting(JavaThread* thread); + + // retrieve global snapshot + static MemSnapshot* get_snapshot() { + assert(is_on(), "native memory tracking is off"); + if (shutdown_in_progress()) { + return NULL; + } + return _snapshot; + } + + // print tracker stats + NOT_PRODUCT(static void print_tracker_stats(outputStream* st);) + NOT_PRODUCT(static void walk_stack(int toSkip, char* buf, int len);) + + private: + // start native memory tracking worker thread + static bool start_worker(); + + // called by worker thread to complete shutdown process + static void final_shutdown(); + + protected: + // retrieve per-thread recorder of the specified thread. + // if the recorder is full, it will be enqueued to overflow + // queue, a new recorder is acquired from recorder pool or a + // new instance is created. + // when thread == NULL, it means global recorder + static MemRecorder* get_thread_recorder(JavaThread* thread); + + // per-thread recorder pool + static void release_thread_recorder(MemRecorder* rec); + static void delete_all_pooled_recorders(); + + // pending recorder queue. Recorders are queued to pending queue + // when they are overflowed or collected at nmt sync point. + static void enqueue_pending_recorder(MemRecorder* rec); + static MemRecorder* get_pending_recorders(); + static void delete_all_pending_recorders(); + + private: + // retrieve a pooled memory record or create new one if there is not + // one available + static MemRecorder* get_new_or_pooled_instance(); + static void create_memory_record(address addr, MEMFLAGS type, + size_t size, address pc, Thread* thread); + static void create_record_in_recorder(address addr, MEMFLAGS type, + size_t size, address pc, JavaThread* thread); + + private: + // global memory snapshot + static MemSnapshot* _snapshot; + + // a memory baseline of snapshot + static MemBaseline _baseline; + + // query lock + static Mutex* _query_lock; + + // a thread can start to allocate memory before it is attached + // to VM 'Thread', those memory activities are recorded here. + // ThreadCritical is required to guard this global recorder. + static MemRecorder* _global_recorder; + + // main thread id + debug_only(static intx _main_thread_tid;) + + // pending recorders to be merged + static volatile MemRecorder* _merge_pending_queue; + + NOT_PRODUCT(static volatile jint _pending_recorder_count;) + + // pooled memory recorders + static volatile MemRecorder* _pooled_recorders; + + // memory recorder pool management, uses following + // counter to determine if a released memory recorder + // should be pooled + + // latest thread count + static int _thread_count; + // pooled recorder count + static volatile jint _pooled_recorder_count; + + + // worker thread to merge pending recorders into snapshot + static MemTrackWorker* _worker_thread; + + // how many safepoints we skipped without entering sync point + static int _sync_point_skip_count; + + // if the tracker is properly intialized + static bool _is_tracker_ready; + // tracking level (off, summary and detail) + static enum NMTLevel _tracking_level; + + // current nmt state + static volatile enum NMTStates _state; + // the reason for shutting down nmt + static enum ShutdownReason _reason; +}; + +#endif // SHARE_VM_SERVICES_MEM_TRACKER_HPP diff --git a/hotspot/src/share/vm/services/memoryManager.cpp b/hotspot/src/share/vm/services/memoryManager.cpp index 0666223bed5..8852f9ffc4b 100644 --- a/hotspot/src/share/vm/services/memoryManager.cpp +++ b/hotspot/src/share/vm/services/memoryManager.cpp @@ -166,15 +166,15 @@ void MemoryManager::oops_do(OopClosure* f) { GCStatInfo::GCStatInfo(int num_pools) { // initialize the arrays for memory usage - _before_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools); - _after_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools); + _before_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools, mtInternal); + _after_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools, mtInternal); _usage_array_size = num_pools; clear(); } GCStatInfo::~GCStatInfo() { - FREE_C_HEAP_ARRAY(MemoryUsage*, _before_gc_usage_array); - FREE_C_HEAP_ARRAY(MemoryUsage*, _after_gc_usage_array); + FREE_C_HEAP_ARRAY(MemoryUsage*, _before_gc_usage_array, mtInternal); + FREE_C_HEAP_ARRAY(MemoryUsage*, _after_gc_usage_array, mtInternal); } void GCStatInfo::set_gc_usage(int pool_index, MemoryUsage usage, bool before_gc) { @@ -214,8 +214,8 @@ GCMemoryManager::~GCMemoryManager() { void GCMemoryManager::initialize_gc_stat_info() { assert(MemoryService::num_memory_pools() > 0, "should have one or more memory pools"); - _last_gc_stat = new(ResourceObj::C_HEAP) GCStatInfo(MemoryService::num_memory_pools()); - _current_gc_stat = new(ResourceObj::C_HEAP) GCStatInfo(MemoryService::num_memory_pools()); + _last_gc_stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(MemoryService::num_memory_pools()); + _current_gc_stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(MemoryService::num_memory_pools()); // tracking concurrent collections we need two objects: one to update, and one to // hold the publicly available "last (completed) gc" information. } diff --git a/hotspot/src/share/vm/services/memoryManager.hpp b/hotspot/src/share/vm/services/memoryManager.hpp index eb0d9699c1f..bb6a8112d4a 100644 --- a/hotspot/src/share/vm/services/memoryManager.hpp +++ b/hotspot/src/share/vm/services/memoryManager.hpp @@ -40,7 +40,7 @@ class MemoryPool; class GCMemoryManager; class OopClosure; -class MemoryManager : public CHeapObj { +class MemoryManager : public CHeapObj { private: enum { max_num_pools = 10 diff --git a/hotspot/src/share/vm/services/memoryPool.hpp b/hotspot/src/share/vm/services/memoryPool.hpp index 441df25915c..db560dbeded 100644 --- a/hotspot/src/share/vm/services/memoryPool.hpp +++ b/hotspot/src/share/vm/services/memoryPool.hpp @@ -50,7 +50,7 @@ class PSPermGen; class PermGen; class ThresholdSupport; -class MemoryPool : public CHeapObj { +class MemoryPool : public CHeapObj { friend class MemoryManager; public: enum PoolType { diff --git a/hotspot/src/share/vm/services/memoryService.cpp b/hotspot/src/share/vm/services/memoryService.cpp index d1bb9c2d60e..621cb7ab01f 100644 --- a/hotspot/src/share/vm/services/memoryService.cpp +++ b/hotspot/src/share/vm/services/memoryService.cpp @@ -58,9 +58,9 @@ #endif GrowableArray* MemoryService::_pools_list = - new (ResourceObj::C_HEAP) GrowableArray(init_pools_list_size, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(init_pools_list_size, true); GrowableArray* MemoryService::_managers_list = - new (ResourceObj::C_HEAP) GrowableArray(init_managers_list_size, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(init_managers_list_size, true); GCMemoryManager* MemoryService::_minor_gc_manager = NULL; GCMemoryManager* MemoryService::_major_gc_manager = NULL; diff --git a/hotspot/src/share/vm/services/nmtDCmd.cpp b/hotspot/src/share/vm/services/nmtDCmd.cpp new file mode 100644 index 00000000000..47f460e6e97 --- /dev/null +++ b/hotspot/src/share/vm/services/nmtDCmd.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" +#include "services/nmtDCmd.hpp" +#include "services/memReporter.hpp" +#include "services/memTracker.hpp" +#include "utilities/globalDefinitions.hpp" + +NMTDCmd::NMTDCmd(outputStream* output, + bool heap): DCmdWithParser(output, heap), + _summary("summary", "request runtime to report current memory summary, " \ + "which includes total reserved and committed memory, along " \ + "with memory usage summary by each subsytem.", + "BOOLEAN", false, "false"), + _detail("detail", "request runtime to report memory allocation >= " + "1K by each callsite.", + "BOOLEAN", false, "false"), + _baseline("baseline", "request runtime to baseline current memory usage, " \ + "so it can be compared against in later time.", + "BOOLEAN", false, "false"), + _summary_diff("summary.diff", "request runtime to report memory summary " \ + "comparison against previous baseline.", + "BOOLEAN", false, "false"), + _detail_diff("detail.diff", "request runtime to report memory detail " \ + "comparison against previous baseline, which shows the memory " \ + "allocation activities at different callsites.", + "BOOLEAN", false, "false"), + _shutdown("shutdown", "request runtime to shutdown itself and free the " \ + "memory used by runtime.", + "BOOLEAN", false, "false"), +#ifndef PRODUCT + _debug("debug", "print tracker statistics. Debug only, not thread safe", \ + "BOOLEAN", false, "false"), +#endif + _scale("scale", "Memory usage in which scale, KB, MB or GB", + "STRING", false, "KB") { + _dcmdparser.add_dcmd_option(&_summary); + _dcmdparser.add_dcmd_option(&_detail); + _dcmdparser.add_dcmd_option(&_baseline); + _dcmdparser.add_dcmd_option(&_summary_diff); + _dcmdparser.add_dcmd_option(&_detail_diff); + _dcmdparser.add_dcmd_option(&_shutdown); +#ifndef PRODUCT + _dcmdparser.add_dcmd_option(&_debug); +#endif + _dcmdparser.add_dcmd_option(&_scale); +} + +void NMTDCmd::execute(TRAPS) { + const char* scale_value = _scale.value(); + size_t scale_unit; + if (strcmp(scale_value, "KB") == 0 || strcmp(scale_value, "kb") == 0) { + scale_unit = K; + } else if (strcmp(scale_value, "MB") == 0 || + strcmp(scale_value, "mb") == 0) { + scale_unit = M; + } else if (strcmp(scale_value, "GB") == 0 || + strcmp(scale_value, "gb") == 0) { + scale_unit = G; + } else { + output()->print_cr("Incorrect scale value: %s", scale_value); + return; + } + + int nopt = 0; + if(_summary.is_set()) { ++nopt; } + if(_detail.is_set()) { ++nopt; } + if(_baseline.is_set()) { ++nopt; } + if(_summary_diff.is_set()) { ++nopt; } + if(_detail_diff.is_set()) { ++nopt; } + if(_shutdown.is_set()) { ++nopt; } +#ifndef PRODUCT + if(_debug.is_set()) { ++nopt; } +#endif + + if(nopt > 1) { + output()->print_cr("At most one of the following option can be specified: " \ + "summary, detail, baseline, summary.diff, detail.diff, shutdown" +#ifndef PRODUCT + " ,debug" +#endif + ); + return; + } + + if(nopt == 0) { + _summary.set_value(true); + } + +#ifndef PRODUCT + if (_debug.value()) { + output()->print_cr("debug command is NOT thread-safe, may cause crash"); + MemTracker::print_tracker_stats(output()); + return; + } +#endif + + // native memory tracking has to be on + if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) { + // if it is not on, what's the reason? + output()->print_cr(MemTracker::reason()); + return; + } + + if (_summary.value()) { + BaselineTTYOutputer outputer(output()); + MemTracker::print_memory_usage(outputer, scale_unit, true); + } else if (_detail.value()) { + BaselineTTYOutputer outputer(output()); + MemTracker::print_memory_usage(outputer, scale_unit, false); + } else if (_baseline.value()) { + if (MemTracker::baseline()) { + output()->print_cr("Successfully baselined."); + } else { + output()->print_cr("Baseline failed."); + } + } else if (_summary_diff.value()) { + if (MemTracker::has_baseline()) { + BaselineTTYOutputer outputer(output()); + MemTracker::compare_memory_usage(outputer, scale_unit, true); + } else { + output()->print_cr("No baseline to compare, run 'baseline' command first"); + } + } else if (_detail_diff.value()) { + if (MemTracker::has_baseline()) { + BaselineTTYOutputer outputer(output()); + MemTracker::compare_memory_usage(outputer, scale_unit, false); + } else { + output()->print_cr("No baseline to compare to, run 'baseline' command first"); + } + } else if (_shutdown.value()) { + MemTracker::shutdown(MemTracker::NMT_shutdown_user); + output()->print_cr("Shutdown is in progress, it will take a few moments to " \ + "completely shutdown"); + } else { + ShouldNotReachHere(); + output()->print_cr("Unknown command"); + } +} + +int NMTDCmd::num_arguments() { + ResourceMark rm; + NMTDCmd* dcmd = new NMTDCmd(NULL, false); + if (dcmd != NULL) { + DCmdMark mark(dcmd); + return dcmd->_dcmdparser.num_arguments(); + } else { + return 0; + } +} + diff --git a/hotspot/src/share/vm/services/nmtDCmd.hpp b/hotspot/src/share/vm/services/nmtDCmd.hpp new file mode 100644 index 00000000000..0c8c8657a72 --- /dev/null +++ b/hotspot/src/share/vm/services/nmtDCmd.hpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_NMT_DCMD_HPP +#define SHARE_VM_SERVICES_NMT_DCMD_HPP + +#include "services/diagnosticArgument.hpp" +#include "services/diagnosticFramework.hpp" + +/** + * Native memory tracking DCmd implementation + */ +class NMTDCmd: public DCmdWithParser { + protected: + DCmdArgument _summary; + DCmdArgument _detail; + DCmdArgument _baseline; + DCmdArgument _summary_diff; + DCmdArgument _detail_diff; + DCmdArgument _shutdown; +#ifndef PRODUCT + DCmdArgument _debug; +#endif + DCmdArgument _scale; + + public: + NMTDCmd(outputStream* output, bool heap); + static const char* name() { return "VM.native_memory"; } + static const char* description() { + return "Print native memory usage"; + } + static const char* impact() { + return "Medium:"; + } + static int num_arguments(); + virtual void execute(TRAPS); +}; + +#endif // SHARE_VM_SERVICES_NMT_DCMD_HPP diff --git a/hotspot/src/share/vm/services/threadService.cpp b/hotspot/src/share/vm/services/threadService.cpp index 5c70fe99baa..325c236b5f7 100644 --- a/hotspot/src/share/vm/services/threadService.cpp +++ b/hotspot/src/share/vm/services/threadService.cpp @@ -437,7 +437,7 @@ StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) { GrowableArray* list = jvf->locked_monitors(); int length = list->length(); if (length > 0) { - _locked_monitors = new (ResourceObj::C_HEAP) GrowableArray(length, true); + _locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(length, true); for (int i = 0; i < length; i++) { MonitorInfo* monitor = list->at(i); assert(monitor->owner(), "This monitor must have an owning object"); @@ -491,11 +491,11 @@ public: ThreadStackTrace::ThreadStackTrace(JavaThread* t, bool with_locked_monitors) { _thread = t; - _frames = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _frames = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _depth = 0; _with_locked_monitors = with_locked_monitors; if (_with_locked_monitors) { - _jni_locked_monitors = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _jni_locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); } else { _jni_locked_monitors = NULL; } @@ -689,7 +689,7 @@ void ConcurrentLocksDump::print_locks_on(JavaThread* t, outputStream* st) { ThreadConcurrentLocks::ThreadConcurrentLocks(JavaThread* thread) { _thread = thread; - _owned_locks = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _owned_locks = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _next = NULL; } @@ -803,7 +803,7 @@ void ThreadSnapshot::oops_do(OopClosure* f) { DeadlockCycle::DeadlockCycle() { _is_deadlock = false; - _threads = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _threads = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _next = NULL; } diff --git a/hotspot/src/share/vm/services/threadService.hpp b/hotspot/src/share/vm/services/threadService.hpp index bd1395a7d4b..9f91edf7a60 100644 --- a/hotspot/src/share/vm/services/threadService.hpp +++ b/hotspot/src/share/vm/services/threadService.hpp @@ -116,7 +116,7 @@ public: }; // Per-thread Statistics for synchronization -class ThreadStatistics : public CHeapObj { +class ThreadStatistics : public CHeapObj { private: // The following contention statistics are only updated by // the thread owning these statistics when contention occurs. @@ -186,7 +186,7 @@ public: }; // Thread snapshot to represent the thread state and statistics -class ThreadSnapshot : public CHeapObj { +class ThreadSnapshot : public CHeapObj { private: JavaThread* _thread; oop _threadObj; @@ -244,7 +244,7 @@ public: void oops_do(OopClosure* f); }; -class ThreadStackTrace : public CHeapObj { +class ThreadStackTrace : public CHeapObj { private: JavaThread* _thread; int _depth; // number of stack frames added @@ -275,7 +275,7 @@ class ThreadStackTrace : public CHeapObj { // StackFrameInfo for keeping methodOop and bci during // stack walking for later construction of StackTraceElement[] // Java instances -class StackFrameInfo : public CHeapObj { +class StackFrameInfo : public CHeapObj { private: methodOop _method; int _bci; @@ -299,7 +299,7 @@ class StackFrameInfo : public CHeapObj { void print_on(outputStream* st) const; }; -class ThreadConcurrentLocks : public CHeapObj { +class ThreadConcurrentLocks : public CHeapObj { private: GrowableArray* _owned_locks; ThreadConcurrentLocks* _next; @@ -356,7 +356,7 @@ class ThreadDumpResult : public StackObj { void oops_do(OopClosure* f); }; -class DeadlockCycle : public CHeapObj { +class DeadlockCycle : public CHeapObj { private: bool _is_deadlock; GrowableArray* _threads; diff --git a/hotspot/src/share/vm/utilities/accessFlags.hpp b/hotspot/src/share/vm/utilities/accessFlags.hpp index 484ce4f3f8d..2e86497b682 100644 --- a/hotspot/src/share/vm/utilities/accessFlags.hpp +++ b/hotspot/src/share/vm/utilities/accessFlags.hpp @@ -80,10 +80,12 @@ enum { JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000, // field access is watched by JVMTI JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000, // field modification is watched by JVMTI JVM_ACC_FIELD_INTERNAL = 0x00000400, // internal field, same as JVM_ACC_ABSTRACT + JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE = 0x00000800, // field has generic signature JVM_ACC_FIELD_INTERNAL_FLAGS = JVM_ACC_FIELD_ACCESS_WATCHED | JVM_ACC_FIELD_MODIFICATION_WATCHED | - JVM_ACC_FIELD_INTERNAL, + JVM_ACC_FIELD_INTERNAL | + JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE, // flags accepted by set_field_flags() JVM_ACC_FIELD_FLAGS = JVM_RECOGNIZED_FIELD_MODIFIERS | JVM_ACC_FIELD_INTERNAL_FLAGS @@ -156,6 +158,8 @@ class AccessFlags VALUE_OBJ_CLASS_SPEC { bool is_field_modification_watched() const { return (_flags & JVM_ACC_FIELD_MODIFICATION_WATCHED) != 0; } bool is_internal() const { return (_flags & JVM_ACC_FIELD_INTERNAL) != 0; } + bool field_has_generic_signature() const + { return (_flags & JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE) != 0; } // get .class file flags jint get_flags () const { return (_flags & JVM_ACC_WRITTEN_FLAGS); } @@ -225,6 +229,10 @@ class AccessFlags VALUE_OBJ_CLASS_SPEC { atomic_clear_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED); } } + void set_field_has_generic_signature() + { + atomic_set_bits(JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE); + } // Conversion jshort as_short() const { return (jshort)_flags; } diff --git a/hotspot/src/share/vm/utilities/array.cpp b/hotspot/src/share/vm/utilities/array.cpp index 44782ea8937..b1c7a61d970 100644 --- a/hotspot/src/share/vm/utilities/array.cpp +++ b/hotspot/src/share/vm/utilities/array.cpp @@ -49,7 +49,7 @@ void ResourceArray::init_nesting() { void ResourceArray::sort(size_t esize, ftype f) { if (!is_empty()) qsort(_data, length(), esize, f); } -void CHeapArray::sort(size_t esize, ftype f) { +template void CHeapArray::sort(size_t esize, ftype f) { if (!is_empty()) qsort(_data, length(), esize, f); } @@ -70,14 +70,14 @@ void ResourceArray::expand(size_t esize, int i, int& size) { } -void CHeapArray::expand(size_t esize, int i, int& size) { +template void CHeapArray::expand(size_t esize, int i, int& size) { // determine new size if (size == 0) size = 4; // prevent endless loop while (i >= size) size *= 2; // allocate and initialize new data section - void* data = NEW_C_HEAP_ARRAY(char*, esize * size); + void* data = NEW_C_HEAP_ARRAY(char*, esize * size, F); memcpy(data, _data, esize * length()); - FREE_C_HEAP_ARRAY(char*, _data); + FREE_C_HEAP_ARRAY(char*, _data, F); _data = data; } @@ -91,7 +91,7 @@ void ResourceArray::remove_at(size_t esize, int i) { memmove(dst, src, cnt); } -void CHeapArray::remove_at(size_t esize, int i) { +template void CHeapArray::remove_at(size_t esize, int i) { assert(0 <= i && i < length(), "index out of bounds"); _length--; void* dst = (char*)_data + i*esize; diff --git a/hotspot/src/share/vm/utilities/array.hpp b/hotspot/src/share/vm/utilities/array.hpp index cbc4161a42f..c0fb59283da 100644 --- a/hotspot/src/share/vm/utilities/array.hpp +++ b/hotspot/src/share/vm/utilities/array.hpp @@ -79,7 +79,7 @@ class ResourceArray: public ResourceObj { }; -class CHeapArray: public CHeapObj { +template class CHeapArray: public CHeapObj { protected: int _length; // the number of array elements void* _data; // the array memory @@ -94,7 +94,7 @@ class CHeapArray: public CHeapObj { CHeapArray(size_t esize, int length) { assert(length >= 0, "illegal length"); _length = length; - _data = (void*) NEW_C_HEAP_ARRAY(char *, esize * length); + _data = (void*) NEW_C_HEAP_ARRAY(char *, esize * length, F); } #ifdef ASSERT diff --git a/hotspot/src/share/vm/utilities/bitMap.cpp b/hotspot/src/share/vm/utilities/bitMap.cpp index 3141bc0de34..0b12b118079 100644 --- a/hotspot/src/share/vm/utilities/bitMap.cpp +++ b/hotspot/src/share/vm/utilities/bitMap.cpp @@ -65,8 +65,8 @@ void BitMap::resize(idx_t size_in_bits, bool in_resource_area) { if (in_resource_area) { _map = NEW_RESOURCE_ARRAY(bm_word_t, new_size_in_words); } else { - if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map); - _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words); + if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map, mtInternal); + _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words, mtInternal); } Copy::disjoint_words((HeapWord*)old_map, (HeapWord*) _map, MIN2(old_size_in_words, new_size_in_words)); @@ -469,7 +469,7 @@ BitMap::idx_t* BitMap::_pop_count_table = NULL; void BitMap::init_pop_count_table() { if (_pop_count_table == NULL) { - BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256); + BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256, mtInternal); for (uint i = 0; i < 256; i++) { table[i] = num_set_bits(i); } @@ -479,7 +479,7 @@ void BitMap::init_pop_count_table() { (intptr_t) NULL_WORD); if (res != NULL_WORD) { guarantee( _pop_count_table == (void*) res, "invariant" ); - FREE_C_HEAP_ARRAY(bm_word_t, table); + FREE_C_HEAP_ARRAY(bm_word_t, table, mtInternal); } } } diff --git a/hotspot/src/share/vm/utilities/decoder.hpp b/hotspot/src/share/vm/utilities/decoder.hpp index 56ff91907cc..a24f771b7bb 100644 --- a/hotspot/src/share/vm/utilities/decoder.hpp +++ b/hotspot/src/share/vm/utilities/decoder.hpp @@ -29,7 +29,7 @@ #include "memory/allocation.hpp" #include "runtime/mutex.hpp" -class AbstractDecoder : public CHeapObj { +class AbstractDecoder : public CHeapObj { public: // status code for decoding native C frame enum decoder_status { diff --git a/hotspot/src/share/vm/utilities/elfFile.cpp b/hotspot/src/share/vm/utilities/elfFile.cpp index 2e4b68302e9..5faaf83b53a 100644 --- a/hotspot/src/share/vm/utilities/elfFile.cpp +++ b/hotspot/src/share/vm/utilities/elfFile.cpp @@ -47,7 +47,7 @@ ElfFile::ElfFile(const char* filepath) { m_status = NullDecoder::no_error; int len = strlen(filepath) + 1; - m_filepath = (const char*)os::malloc(len * sizeof(char)); + m_filepath = (const char*)os::malloc(len * sizeof(char), mtInternal); if (m_filepath != NULL) { strcpy((char*)m_filepath, filepath); m_file = fopen(filepath, "r"); diff --git a/hotspot/src/share/vm/utilities/elfFile.hpp b/hotspot/src/share/vm/utilities/elfFile.hpp index e6f4ce263d6..f0cba8b6d08 100644 --- a/hotspot/src/share/vm/utilities/elfFile.hpp +++ b/hotspot/src/share/vm/utilities/elfFile.hpp @@ -82,7 +82,7 @@ class ElfSymbolTable; // in "error" state, so there are scenarios, lookup will fail. We want this // part of code to be very defensive, and bait out if anything went wrong. -class ElfFile: public CHeapObj { +class ElfFile: public CHeapObj { friend class ElfDecoder; public: ElfFile(const char* filepath); diff --git a/hotspot/src/share/vm/utilities/elfStringTable.cpp b/hotspot/src/share/vm/utilities/elfStringTable.cpp index 89286cb1883..cba67ddf646 100644 --- a/hotspot/src/share/vm/utilities/elfStringTable.cpp +++ b/hotspot/src/share/vm/utilities/elfStringTable.cpp @@ -42,7 +42,7 @@ ElfStringTable::ElfStringTable(FILE* file, Elf_Shdr shdr, int index) { // try to load the string table long cur_offset = ftell(file); - m_table = (char*)os::malloc(sizeof(char) * shdr.sh_size); + m_table = (char*)os::malloc(sizeof(char) * shdr.sh_size, mtInternal); if (m_table != NULL) { // if there is an error, mark the error if (fseek(file, shdr.sh_offset, SEEK_SET) || diff --git a/hotspot/src/share/vm/utilities/elfStringTable.hpp b/hotspot/src/share/vm/utilities/elfStringTable.hpp index 96f30b159ea..a4cdfc07854 100644 --- a/hotspot/src/share/vm/utilities/elfStringTable.hpp +++ b/hotspot/src/share/vm/utilities/elfStringTable.hpp @@ -35,7 +35,7 @@ // The string table represents a string table section in an elf file. // Whenever there is enough memory, it will load whole string table as // one blob. Otherwise, it will load string from file when requested. -class ElfStringTable: CHeapObj { +class ElfStringTable: CHeapObj { friend class ElfFile; public: ElfStringTable(FILE* file, Elf_Shdr shdr, int index); diff --git a/hotspot/src/share/vm/utilities/elfSymbolTable.cpp b/hotspot/src/share/vm/utilities/elfSymbolTable.cpp index 3ac9b9215f6..5301d5a32a5 100644 --- a/hotspot/src/share/vm/utilities/elfSymbolTable.cpp +++ b/hotspot/src/share/vm/utilities/elfSymbolTable.cpp @@ -40,7 +40,7 @@ ElfSymbolTable::ElfSymbolTable(FILE* file, Elf_Shdr shdr) { long cur_offset = ftell(file); if (cur_offset != -1) { // call malloc so we can back up if memory allocation fails. - m_symbols = (Elf_Sym*)os::malloc(shdr.sh_size); + m_symbols = (Elf_Sym*)os::malloc(shdr.sh_size, mtInternal); if (m_symbols) { if (fseek(file, shdr.sh_offset, SEEK_SET) || fread((void*)m_symbols, shdr.sh_size, 1, file) != 1 || diff --git a/hotspot/src/share/vm/utilities/elfSymbolTable.hpp b/hotspot/src/share/vm/utilities/elfSymbolTable.hpp index a149b99dfd8..4a23cfdeeda 100644 --- a/hotspot/src/share/vm/utilities/elfSymbolTable.hpp +++ b/hotspot/src/share/vm/utilities/elfSymbolTable.hpp @@ -38,7 +38,7 @@ * of the elf file into memory. Otherwise, it will walk the section in file * to look up the symbol that nearest the given address. */ -class ElfSymbolTable: public CHeapObj { +class ElfSymbolTable: public CHeapObj { friend class ElfFile; public: ElfSymbolTable(FILE* file, Elf_Shdr shdr); diff --git a/hotspot/src/share/vm/utilities/events.hpp b/hotspot/src/share/vm/utilities/events.hpp index 5b64e0c5c4d..74a804219fa 100644 --- a/hotspot/src/share/vm/utilities/events.hpp +++ b/hotspot/src/share/vm/utilities/events.hpp @@ -46,7 +46,7 @@ // crash time. This is a very generic interface that is mainly here // for completeness. Normally the templated EventLogBase would be // subclassed to provide different log types. -class EventLog : public CHeapObj { +class EventLog : public CHeapObj { friend class Events; private: diff --git a/hotspot/src/share/vm/utilities/exceptions.hpp b/hotspot/src/share/vm/utilities/exceptions.hpp index f7fece16fb6..568dfd0fb3c 100644 --- a/hotspot/src/share/vm/utilities/exceptions.hpp +++ b/hotspot/src/share/vm/utilities/exceptions.hpp @@ -57,7 +57,7 @@ class JavaCallArguments; // field of the Thread class w/o having access to the Thread's interface (for // include hierachy reasons). -class ThreadShadow: public CHeapObj { +class ThreadShadow: public CHeapObj { friend class VMStructs; protected: diff --git a/hotspot/src/share/vm/utilities/globalDefinitions.hpp b/hotspot/src/share/vm/utilities/globalDefinitions.hpp index 89201f62f92..19dcec160f4 100644 --- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp +++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -161,10 +161,6 @@ const size_t M = K*K; const size_t G = M*K; const size_t HWperKB = K / sizeof(HeapWord); -const size_t LOG_K = 10; -const size_t LOG_M = 2 * LOG_K; -const size_t LOG_G = 2 * LOG_M; - const jint min_jint = (jint)1 << (sizeof(jint)*BitsPerByte-1); // 0x80000000 == smallest jint const jint max_jint = (juint)min_jint - 1; // 0x7FFFFFFF == largest jint @@ -179,6 +175,11 @@ const jlong NANOSECS_PER_SEC = CONST64(1000000000); const jint NANOSECS_PER_MILLISEC = 1000000; inline const char* proper_unit_for_byte_size(size_t s) { +#ifdef _LP64 + if (s >= 10*G) { + return "G"; + } +#endif if (s >= 10*M) { return "M"; } else if (s >= 10*K) { @@ -188,17 +189,22 @@ inline const char* proper_unit_for_byte_size(size_t s) { } } -inline size_t byte_size_in_proper_unit(size_t s) { +template +inline T byte_size_in_proper_unit(T s) { +#ifdef _LP64 + if (s >= 10*G) { + return (T)(s/G); + } +#endif if (s >= 10*M) { - return s/M; + return (T)(s/M); } else if (s >= 10*K) { - return s/K; + return (T)(s/K); } else { return s; } } - //---------------------------------------------------------------------------------------------------- // VM type definitions diff --git a/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp b/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp index 60ebb118ee9..22e99cb3da8 100644 --- a/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp +++ b/hotspot/src/share/vm/utilities/globalDefinitions_visCPP.hpp @@ -220,9 +220,15 @@ inline int vsnprintf(char* buf, size_t count, const char* fmt, va_list argptr) { #define PRIu64 "I64u" #define PRIx64 "I64x" +#ifdef _LP64 +#define PRIdPTR "I64d" +#define PRIuPTR "I64u" +#define PRIxPTR "I64x" +#else #define PRIdPTR "d" #define PRIuPTR "u" #define PRIxPTR "x" +#endif #define offset_of(klass,field) offsetof(klass,field) diff --git a/hotspot/src/share/vm/utilities/growableArray.cpp b/hotspot/src/share/vm/utilities/growableArray.cpp index a6ad8f3057e..7da659e6f68 100644 --- a/hotspot/src/share/vm/utilities/growableArray.cpp +++ b/hotspot/src/share/vm/utilities/growableArray.cpp @@ -61,7 +61,7 @@ void* GenericGrowableArray::raw_allocate(int elementSize) { if (on_stack()) { return (void*)resource_allocate_bytes(byte_size); } else if (on_C_heap()) { - return (void*)AllocateHeap(byte_size, "GrET in " __FILE__); + return (void*)AllocateHeap(byte_size, _memflags); } else { return _arena->Amalloc(byte_size); } diff --git a/hotspot/src/share/vm/utilities/growableArray.hpp b/hotspot/src/share/vm/utilities/growableArray.hpp index f7379fca551..2a6d6b88f9d 100644 --- a/hotspot/src/share/vm/utilities/growableArray.hpp +++ b/hotspot/src/share/vm/utilities/growableArray.hpp @@ -86,6 +86,9 @@ class GenericGrowableArray : public ResourceObj { // 0 means default ResourceArea // 1 means on C heap // otherwise, allocate in _arena + + MEMFLAGS _memflags; // memory type if allocation in C heap + #ifdef ASSERT int _nesting; // resource area nesting at creation void set_nesting(); @@ -102,9 +105,14 @@ class GenericGrowableArray : public ResourceObj { // This GA will use the resource stack for storage if c_heap==false, // Else it will use the C heap. Use clear_and_deallocate to avoid leaks. - GenericGrowableArray(int initial_size, int initial_len, bool c_heap) { + GenericGrowableArray(int initial_size, int initial_len, bool c_heap, MEMFLAGS flags = mtNone) { _len = initial_len; _max = initial_size; + _memflags = flags; + + // memory type has to be specified for C heap allocation + assert(!(c_heap && flags == mtNone), "memory type not specified for C heap object"); + assert(_len >= 0 && _len <= _max, "initial_len too big"); _arena = (c_heap ? (Arena*)1 : NULL); set_nesting(); @@ -121,6 +129,8 @@ class GenericGrowableArray : public ResourceObj { _max = initial_size; assert(_len >= 0 && _len <= _max, "initial_len too big"); _arena = arena; + _memflags = mtNone; + assert(on_arena(), "arena has taken on reserved value 0 or 1"); // Relax next assert to allow object allocation on resource area, // on stack or embedded into an other object. @@ -152,12 +162,14 @@ template class GrowableArray : public GenericGrowableArray { for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); } - GrowableArray(int initial_size, bool C_heap = false) : GenericGrowableArray(initial_size, 0, C_heap) { + GrowableArray(int initial_size, bool C_heap = false, MEMFLAGS F = mtInternal) + : GenericGrowableArray(initial_size, 0, C_heap, F) { _data = (E*)raw_allocate(sizeof(E)); for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); } - GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false) : GenericGrowableArray(initial_size, initial_len, C_heap) { + GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false, MEMFLAGS memflags = mtInternal) + : GenericGrowableArray(initial_size, initial_len, C_heap, memflags) { _data = (E*)raw_allocate(sizeof(E)); int i = 0; for (; i < _len; i++) ::new ((void*)&_data[i]) E(filler); diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index 698e137ff82..39092d95f5c 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,10 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" +#include "classfile/javaClasses.hpp" #include "memory/allocation.inline.hpp" +#include "memory/filemap.hpp" #include "memory/resourceArea.hpp" #include "oops/oop.inline.hpp" #include "runtime/safepoint.hpp" @@ -32,11 +35,6 @@ #include "utilities/hashtable.inline.hpp" -#ifndef USDT2 -HS_DTRACE_PROBE_DECL4(hs_private, hashtable__new_entry, - void*, unsigned int, void*, void*); -#endif /* !USDT2 */ - // This is a generic hashtable, designed to be used for the symbol // and string tables. // @@ -45,8 +43,8 @@ HS_DTRACE_PROBE_DECL4(hs_private, hashtable__new_entry, // %note: // - HashtableEntrys are allocated in blocks to reduce the space overhead. -BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { - BasicHashtableEntry* entry; +template BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { + BasicHashtableEntry* entry; if (_free_list) { entry = _free_list; @@ -57,10 +55,10 @@ BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { int len = _entry_size * block_size; len = 1 << log2_intptr(len); // round down to power of 2 assert(len >= _entry_size, ""); - _first_free_entry = NEW_C_HEAP_ARRAY(char, len); + _first_free_entry = NEW_C_HEAP_ARRAY2(char, len, F, CURRENT_PC); _end_block = _first_free_entry + len; } - entry = (BasicHashtableEntry*)_first_free_entry; + entry = (BasicHashtableEntry*)_first_free_entry; _first_free_entry += _entry_size; } @@ -70,31 +68,114 @@ BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { } -template HashtableEntry* Hashtable::new_entry(unsigned int hashValue, T obj) { - HashtableEntry* entry; +template HashtableEntry* Hashtable::new_entry(unsigned int hashValue, T obj) { + HashtableEntry* entry; - entry = (HashtableEntry*)BasicHashtable::new_entry(hashValue); + entry = (HashtableEntry*)BasicHashtable::new_entry(hashValue); entry->set_literal(obj); -#ifndef USDT2 - HS_DTRACE_PROBE4(hs_private, hashtable__new_entry, - this, hashValue, obj, entry); -#else /* USDT2 */ - HS_PRIVATE_HASHTABLE_NEW_ENTRY( - this, hashValue, (uintptr_t) obj, entry); -#endif /* USDT2 */ return entry; } +// Check to see if the hashtable is unbalanced. The caller set a flag to +// rehash at the next safepoint. If this bucket is 60 times greater than the +// expected average bucket length, it's an unbalanced hashtable. +// This is somewhat an arbitrary heuristic but if one bucket gets to +// rehash_count which is currently 100, there's probably something wrong. + +template bool BasicHashtable::check_rehash_table(int count) { + assert(table_size() != 0, "underflow"); + if (count > (((double)number_of_entries()/(double)table_size())*rehash_multiple)) { + // Set a flag for the next safepoint, which should be at some guaranteed + // safepoint interval. + return true; + } + return false; +} + +template jint Hashtable::_seed = 0; + +template unsigned int Hashtable::new_hash(Symbol* sym) { + ResourceMark rm; + // Use alternate hashing algorithm on this symbol. + return AltHashing::murmur3_32(seed(), (const jbyte*)sym->as_C_string(), sym->utf8_length()); +} + +template unsigned int Hashtable::new_hash(oop string) { + ResourceMark rm; + int length; + jchar* chars = java_lang_String::as_unicode_string(string, length); + // Use alternate hashing algorithm on the string + return AltHashing::murmur3_32(seed(), chars, length); +} + +// Create a new table and using alternate hash code, populate the new table +// with the existing elements. This can be used to change the hash code +// and could in the future change the size of the table. + +template void Hashtable::move_to(Hashtable* new_table) { + + // Initialize the global seed for hashing. + _seed = AltHashing::compute_seed(); + assert(seed() != 0, "shouldn't be zero"); + + int saved_entry_count = this->number_of_entries(); + + // Iterate through the table and create a new entry for the new table + for (int i = 0; i < new_table->table_size(); ++i) { + for (HashtableEntry* p = bucket(i); p != NULL; ) { + HashtableEntry* next = p->next(); + T string = p->literal(); + // Use alternate hashing algorithm on the symbol in the first table + unsigned int hashValue = new_hash(string); + // Get a new index relative to the new table (can also change size) + int index = new_table->hash_to_index(hashValue); + p->set_hash(hashValue); + // Keep the shared bit in the Hashtable entry to indicate that this entry + // can't be deleted. The shared bit is the LSB in the _next field so + // walking the hashtable past these entries requires + // BasicHashtableEntry::make_ptr() call. + bool keep_shared = p->is_shared(); + unlink_entry(p); + new_table->add_entry(index, p); + if (keep_shared) { + p->set_shared(); + } + p = next; + } + } + // give the new table the free list as well + new_table->copy_freelist(this); + assert(new_table->number_of_entries() == saved_entry_count, "lost entry on dictionary copy?"); + + // Destroy memory used by the buckets in the hashtable. The memory + // for the elements has been used in a new table and is not + // destroyed. The memory reuse will benefit resizing the SystemDictionary + // to avoid a memory allocation spike at safepoint. + BasicHashtable::free_buckets(); +} + +template void BasicHashtable::free_buckets() { + if (NULL != _buckets) { + // Don't delete the buckets in the shared space. They aren't + // allocated by os::malloc + if (!UseSharedSpaces || + !FileMapInfo::current_info()->is_in_shared_space(_buckets)) { + FREE_C_HEAP_ARRAY(HashtableBucket, _buckets, F); + } + _buckets = NULL; + } +} + // Reverse the order of elements in the hash buckets. -void BasicHashtable::reverse() { +template void BasicHashtable::reverse() { for (int i = 0; i < _table_size; ++i) { - BasicHashtableEntry* new_list = NULL; - BasicHashtableEntry* p = bucket(i); + BasicHashtableEntry* new_list = NULL; + BasicHashtableEntry* p = bucket(i); while (p != NULL) { - BasicHashtableEntry* next = p->next(); + BasicHashtableEntry* next = p->next(); p->set_next(new_list); new_list = p; p = next; @@ -106,7 +187,7 @@ void BasicHashtable::reverse() { // Copy the table to the shared space. -void BasicHashtable::copy_table(char** top, char* end) { +template void BasicHashtable::copy_table(char** top, char* end) { // Dump the hash table entries. @@ -115,13 +196,13 @@ void BasicHashtable::copy_table(char** top, char* end) { int i; for (i = 0; i < _table_size; ++i) { - for (BasicHashtableEntry** p = _buckets[i].entry_addr(); + for (BasicHashtableEntry** p = _buckets[i].entry_addr(); *p != NULL; p = (*p)->next_addr()) { if (*top + entry_size() > end) { report_out_of_shared_space(SharedMiscData); } - *p = (BasicHashtableEntry*)memcpy(*top, *p, entry_size()); + *p = (BasicHashtableEntry*)memcpy(*top, *p, entry_size()); *top += entry_size(); } } @@ -130,7 +211,7 @@ void BasicHashtable::copy_table(char** top, char* end) { // Set the shared bit. for (i = 0; i < _table_size; ++i) { - for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { + for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { p->set_shared(); } } @@ -140,15 +221,15 @@ void BasicHashtable::copy_table(char** top, char* end) { // Reverse the order of elements in the hash buckets. -template void Hashtable::reverse(void* boundary) { +template void Hashtable::reverse(void* boundary) { - for (int i = 0; i < table_size(); ++i) { - HashtableEntry* high_list = NULL; - HashtableEntry* low_list = NULL; - HashtableEntry* last_low_entry = NULL; - HashtableEntry* p = bucket(i); + for (int i = 0; i < this->table_size(); ++i) { + HashtableEntry* high_list = NULL; + HashtableEntry* low_list = NULL; + HashtableEntry* last_low_entry = NULL; + HashtableEntry* p = bucket(i); while (p != NULL) { - HashtableEntry* next = p->next(); + HashtableEntry* next = p->next(); if ((void*)p->literal() >= boundary) { p->set_next(high_list); high_list = p; @@ -173,8 +254,8 @@ template void Hashtable::reverse(void* boundary) { // Dump the hash table buckets. -void BasicHashtable::copy_buckets(char** top, char* end) { - intptr_t len = _table_size * sizeof(HashtableBucket); +template void BasicHashtable::copy_buckets(char** top, char* end) { + intptr_t len = _table_size * sizeof(HashtableBucket); *(intptr_t*)(*top) = len; *top += sizeof(intptr_t); @@ -184,18 +265,18 @@ void BasicHashtable::copy_buckets(char** top, char* end) { if (*top + len > end) { report_out_of_shared_space(SharedMiscData); } - _buckets = (HashtableBucket*)memcpy(*top, _buckets, len); + _buckets = (HashtableBucket*)memcpy(*top, _buckets, len); *top += len; } #ifndef PRODUCT -template void Hashtable::print() { +template void Hashtable::print() { ResourceMark rm; - for (int i = 0; i < table_size(); i++) { - HashtableEntry* entry = bucket(i); + for (int i = 0; i < BasicHashtable::table_size(); i++) { + HashtableEntry* entry = bucket(i); while(entry != NULL) { tty->print("%d : ", i); entry->literal()->print(); @@ -206,10 +287,10 @@ template void Hashtable::print() { } -void BasicHashtable::verify() { +template void BasicHashtable::verify() { int count = 0; for (int i = 0; i < table_size(); i++) { - for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { + for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { ++count; } } @@ -222,7 +303,7 @@ void BasicHashtable::verify() { #ifdef ASSERT -void BasicHashtable::verify_lookup_length(double load) { +template void BasicHashtable::verify_lookup_length(double load) { if ((double)_lookup_length / (double)_lookup_count > load * 2.0) { warning("Performance bug: SystemDictionary lookup_count=%d " "lookup_length=%d average=%lf load=%f", @@ -232,10 +313,22 @@ void BasicHashtable::verify_lookup_length(double load) { } #endif - // Explicitly instantiate these types -template class Hashtable; -template class Hashtable; -template class Hashtable; -template class Hashtable; - +template class Hashtable; +template class Hashtable; +template class Hashtable; +template class Hashtable; +#ifdef SOLARIS +template class Hashtable; +#endif +template class Hashtable; +template class Hashtable; +template class HashtableEntry; +template class HashtableEntry; +template class HashtableEntry; +template class BasicHashtableEntry; +template class BasicHashtableEntry; +template class BasicHashtable; +template class BasicHashtable; +template class BasicHashtable; +template class BasicHashtable; diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index 527470938d9..de7d319c07c 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -40,7 +40,7 @@ -class BasicHashtableEntry : public CHeapObj { +template class BasicHashtableEntry : public CHeapObj { friend class VMStructs; private: unsigned int _hash; // 32-bit hash for item @@ -52,7 +52,7 @@ private: // shared entries will not change. New entries will always be // unshared and since pointers are align, bit 0 will always remain 0 // with no extra effort. - BasicHashtableEntry* _next; + BasicHashtableEntry* _next; // Windows IA64 compiler requires subclasses to be able to access these protected: @@ -69,19 +69,19 @@ public: void set_hash(unsigned int hash) { _hash = hash; } unsigned int* hash_addr() { return &_hash; } - static BasicHashtableEntry* make_ptr(BasicHashtableEntry* p) { + static BasicHashtableEntry* make_ptr(BasicHashtableEntry* p) { return (BasicHashtableEntry*)((intptr_t)p & -2); } - BasicHashtableEntry* next() const { + BasicHashtableEntry* next() const { return make_ptr(_next); } - void set_next(BasicHashtableEntry* next) { + void set_next(BasicHashtableEntry* next) { _next = next; } - BasicHashtableEntry** next_addr() { + BasicHashtableEntry** next_addr() { return &_next; } @@ -90,13 +90,13 @@ public: } void set_shared() { - _next = (BasicHashtableEntry*)((intptr_t)_next | 1); + _next = (BasicHashtableEntry*)((intptr_t)_next | 1); } }; -template class HashtableEntry : public BasicHashtableEntry { +template class HashtableEntry : public BasicHashtableEntry { friend class VMStructs; private: T _literal; // ref to item in table. @@ -108,20 +108,20 @@ public: void set_literal(T s) { _literal = s; } HashtableEntry* next() const { - return (HashtableEntry*)BasicHashtableEntry::next(); + return (HashtableEntry*)BasicHashtableEntry::next(); } HashtableEntry** next_addr() { - return (HashtableEntry**)BasicHashtableEntry::next_addr(); + return (HashtableEntry**)BasicHashtableEntry::next_addr(); } }; -class HashtableBucket : public CHeapObj { +template class HashtableBucket : public CHeapObj { friend class VMStructs; private: // Instance variable - BasicHashtableEntry* _entry; + BasicHashtableEntry* _entry; public: // Accessing @@ -129,21 +129,21 @@ public: // The following methods use order access methods to avoid race // conditions in multiprocessor systems. - BasicHashtableEntry* get_entry() const; - void set_entry(BasicHashtableEntry* l); + BasicHashtableEntry* get_entry() const; + void set_entry(BasicHashtableEntry* l); // The following method is not MT-safe and must be done under lock. - BasicHashtableEntry** entry_addr() { return &_entry; } + BasicHashtableEntry** entry_addr() { return &_entry; } }; -class BasicHashtable : public CHeapObj { +template class BasicHashtable : public CHeapObj { friend class VMStructs; public: BasicHashtable(int table_size, int entry_size); BasicHashtable(int table_size, int entry_size, - HashtableBucket* buckets, int number_of_entries); + HashtableBucket* buckets, int number_of_entries); // Sharing support. void copy_buckets(char** top, char* end); @@ -159,13 +159,11 @@ public: // Reverse the order of elements in each of the buckets. void reverse(); - static unsigned int hash_symbol(const char* s, int len); - private: // Instance variables int _table_size; - HashtableBucket* _buckets; - BasicHashtableEntry* _free_list; + HashtableBucket* _buckets; + BasicHashtableEntry* _free_list; char* _first_free_entry; char* _end_block; int _entry_size; @@ -179,27 +177,55 @@ protected: void verify_lookup_length(double load); #endif + enum { + rehash_count = 100, + rehash_multiple = 60 + }; + void initialize(int table_size, int entry_size, int number_of_entries); // Accessor int entry_size() const { return _entry_size; } // The following method is MT-safe and may be used with caution. - BasicHashtableEntry* bucket(int i); + BasicHashtableEntry* bucket(int i); // The following method is not MT-safe and must be done under lock. - BasicHashtableEntry** bucket_addr(int i) { return _buckets[i].entry_addr(); } + BasicHashtableEntry** bucket_addr(int i) { return _buckets[i].entry_addr(); } // Table entry management - BasicHashtableEntry* new_entry(unsigned int hashValue); + BasicHashtableEntry* new_entry(unsigned int hashValue); + + // Check that the table is unbalanced + bool check_rehash_table(int count); + + // Used when moving the entry to another table + // Clean up links, but do not add to free_list + void unlink_entry(BasicHashtableEntry* entry) { + entry->set_next(NULL); + --_number_of_entries; + } + + // Move over freelist and free block for allocation + void copy_freelist(BasicHashtable* src) { + _free_list = src->_free_list; + src->_free_list = NULL; + _first_free_entry = src->_first_free_entry; + src->_first_free_entry = NULL; + _end_block = src->_end_block; + src->_end_block = NULL; + } + + // Free the buckets in this hashtable + void free_buckets(); public: int table_size() { return _table_size; } - void set_entry(int index, BasicHashtableEntry* entry); + void set_entry(int index, BasicHashtableEntry* entry); - void add_entry(int index, BasicHashtableEntry* entry); + void add_entry(int index, BasicHashtableEntry* entry); - void free_entry(BasicHashtableEntry* entry); + void free_entry(BasicHashtableEntry* entry); int number_of_entries() { return _number_of_entries; } @@ -207,16 +233,16 @@ public: }; -template class Hashtable : public BasicHashtable { +template class Hashtable : public BasicHashtable { friend class VMStructs; public: Hashtable(int table_size, int entry_size) - : BasicHashtable(table_size, entry_size) { } + : BasicHashtable(table_size, entry_size) { } Hashtable(int table_size, int entry_size, - HashtableBucket* buckets, int number_of_entries) - : BasicHashtable(table_size, entry_size, buckets, number_of_entries) { } + HashtableBucket* buckets, int number_of_entries) + : BasicHashtable(table_size, entry_size, buckets, number_of_entries) { } // Debugging void print() PRODUCT_RETURN; @@ -238,31 +264,42 @@ protected: } // Table entry management - HashtableEntry* new_entry(unsigned int hashValue, T obj); + HashtableEntry* new_entry(unsigned int hashValue, T obj); // The following method is MT-safe and may be used with caution. - HashtableEntry* bucket(int i) { - return (HashtableEntry*)BasicHashtable::bucket(i); + HashtableEntry* bucket(int i) { + return (HashtableEntry*)BasicHashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. - HashtableEntry** bucket_addr(int i) { - return (HashtableEntry**)BasicHashtable::bucket_addr(i); + HashtableEntry** bucket_addr(int i) { + return (HashtableEntry**)BasicHashtable::bucket_addr(i); } + + // Function to move these elements into the new table. + void move_to(Hashtable* new_table); + static bool use_alternate_hashcode() { return _seed != 0; } + static jint seed() { return _seed; } + + private: + static jint _seed; + + unsigned int new_hash(Symbol* s); + unsigned int new_hash(oop string); }; // Verions of hashtable where two handles are used to compute the index. -template class TwoOopHashtable : public Hashtable { +template class TwoOopHashtable : public Hashtable { friend class VMStructs; protected: TwoOopHashtable(int table_size, int entry_size) - : Hashtable(table_size, entry_size) {} + : Hashtable(table_size, entry_size) {} - TwoOopHashtable(int table_size, int entry_size, HashtableBucket* t, + TwoOopHashtable(int table_size, int entry_size, HashtableBucket* t, int number_of_entries) - : Hashtable(table_size, entry_size, t, number_of_entries) {} + : Hashtable(table_size, entry_size, t, number_of_entries) {} public: unsigned int compute_hash(Symbol* name, Handle loader) { diff --git a/hotspot/src/share/vm/utilities/hashtable.inline.hpp b/hotspot/src/share/vm/utilities/hashtable.inline.hpp index 8cd2f89d0c8..237fa5f41ee 100644 --- a/hotspot/src/share/vm/utilities/hashtable.inline.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,46 +27,26 @@ #include "memory/allocation.inline.hpp" #include "utilities/hashtable.hpp" +#include "utilities/dtrace.hpp" // Inline function definitions for hashtable.hpp. - -// -------------------------------------------------------------------------- -// Hash function - -// We originally used hashpjw, but hash P(31) gives just as good results -// and is slighly faster. We would like a hash function that looks at every -// character, since package names have large common prefixes, and also because -// hash_or_fail does error checking while iterating. - -// hash P(31) from Kernighan & Ritchie - -inline unsigned int BasicHashtable::hash_symbol(const char* s, int len) { - unsigned int h = 0; - while (len-- > 0) { - h = 31*h + (unsigned) *s; - s++; - } - return h; -} - - // -------------------------------------------------------------------------- // Initialize a table. -inline BasicHashtable::BasicHashtable(int table_size, int entry_size) { +template inline BasicHashtable::BasicHashtable(int table_size, int entry_size) { // Called on startup, no locking needed initialize(table_size, entry_size, 0); - _buckets = NEW_C_HEAP_ARRAY(HashtableBucket, table_size); + _buckets = NEW_C_HEAP_ARRAY2(HashtableBucket, table_size, F, CURRENT_PC); for (int index = 0; index < _table_size; index++) { _buckets[index].clear(); } } -inline BasicHashtable::BasicHashtable(int table_size, int entry_size, - HashtableBucket* buckets, +template inline BasicHashtable::BasicHashtable(int table_size, int entry_size, + HashtableBucket* buckets, int number_of_entries) { // Called on startup, no locking needed initialize(table_size, entry_size, number_of_entries); @@ -74,7 +54,7 @@ inline BasicHashtable::BasicHashtable(int table_size, int entry_size, } -inline void BasicHashtable::initialize(int table_size, int entry_size, +template inline void BasicHashtable::initialize(int table_size, int entry_size, int number_of_entries) { // Called on startup, no locking needed _table_size = table_size; @@ -91,12 +71,12 @@ inline void BasicHashtable::initialize(int table_size, int entry_size, // The following method is MT-safe and may be used with caution. -inline BasicHashtableEntry* BasicHashtable::bucket(int i) { +template inline BasicHashtableEntry* BasicHashtable::bucket(int i) { return _buckets[i].get_entry(); } -inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { +template inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { // Warning: Preserve store ordering. The SystemDictionary is read // without locks. The new SystemDictionaryEntry must be // complete before other threads can be allowed to see it @@ -105,27 +85,27 @@ inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { } -inline BasicHashtableEntry* HashtableBucket::get_entry() const { +template inline BasicHashtableEntry* HashtableBucket::get_entry() const { // Warning: Preserve load ordering. The SystemDictionary is read // without locks. The new SystemDictionaryEntry must be // complete before other threads can be allowed to see it // via a store to _buckets[index]. - return (BasicHashtableEntry*) OrderAccess::load_ptr_acquire(&_entry); + return (BasicHashtableEntry*) OrderAccess::load_ptr_acquire(&_entry); } -inline void BasicHashtable::set_entry(int index, BasicHashtableEntry* entry) { +template inline void BasicHashtable::set_entry(int index, BasicHashtableEntry* entry) { _buckets[index].set_entry(entry); } -inline void BasicHashtable::add_entry(int index, BasicHashtableEntry* entry) { +template inline void BasicHashtable::add_entry(int index, BasicHashtableEntry* entry) { entry->set_next(bucket(index)); _buckets[index].set_entry(entry); ++_number_of_entries; } -inline void BasicHashtable::free_entry(BasicHashtableEntry* entry) { +template inline void BasicHashtable::free_entry(BasicHashtableEntry* entry) { entry->set_next(_free_list); _free_list = entry; --_number_of_entries; diff --git a/hotspot/src/share/vm/utilities/histogram.cpp b/hotspot/src/share/vm/utilities/histogram.cpp index ede6817cd40..114d4ac3f41 100644 --- a/hotspot/src/share/vm/utilities/histogram.cpp +++ b/hotspot/src/share/vm/utilities/histogram.cpp @@ -69,7 +69,7 @@ int Histogram::sort_helper(HistogramElement** e1, HistogramElement** e2) { Histogram::Histogram(const char* title,int estimatedCount) { _title = title; - _elements = new (ResourceObj::C_HEAP) GrowableArray(estimatedCount,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(estimatedCount,true); } void Histogram::add_element(HistogramElement* element) { diff --git a/hotspot/src/share/vm/utilities/histogram.hpp b/hotspot/src/share/vm/utilities/histogram.hpp index 4eaa3d4e21a..5090aa059d4 100644 --- a/hotspot/src/share/vm/utilities/histogram.hpp +++ b/hotspot/src/share/vm/utilities/histogram.hpp @@ -77,7 +77,7 @@ #ifdef ASSERT -class HistogramElement : public CHeapObj { +class HistogramElement : public CHeapObj { protected: jint _count; const char* _name; @@ -91,7 +91,7 @@ class HistogramElement : public CHeapObj { virtual int compare(HistogramElement* e1,HistogramElement* e2); }; -class Histogram : public CHeapObj { +class Histogram : public CHeapObj { protected: GrowableArray* _elements; GrowableArray* elements() { return _elements; } diff --git a/hotspot/src/share/vm/utilities/intHisto.cpp b/hotspot/src/share/vm/utilities/intHisto.cpp index 8476c294d5c..a8508c93458 100644 --- a/hotspot/src/share/vm/utilities/intHisto.cpp +++ b/hotspot/src/share/vm/utilities/intHisto.cpp @@ -27,7 +27,7 @@ IntHistogram::IntHistogram(int est, int max) : _max(max), _tot(0) { assert(0 <= est && est <= max, "Preconditions"); - _elements = new (ResourceObj::C_HEAP) GrowableArray(est, true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(est, true); guarantee(_elements != NULL, "alloc failure"); } diff --git a/hotspot/src/share/vm/utilities/intHisto.hpp b/hotspot/src/share/vm/utilities/intHisto.hpp index 7c2f4ea2d0d..2d5d2834e4d 100644 --- a/hotspot/src/share/vm/utilities/intHisto.hpp +++ b/hotspot/src/share/vm/utilities/intHisto.hpp @@ -47,7 +47,7 @@ // relation) to a count. -class IntHistogram : public CHeapObj { +class IntHistogram : public CHeapObj { protected: int _max; int _tot; diff --git a/hotspot/src/share/vm/utilities/numberSeq.cpp b/hotspot/src/share/vm/utilities/numberSeq.cpp index 2cc41854071..907c3a15c5e 100644 --- a/hotspot/src/share/vm/utilities/numberSeq.cpp +++ b/hotspot/src/share/vm/utilities/numberSeq.cpp @@ -115,24 +115,6 @@ bool NumberSeq::check_nums(NumberSeq *total, int n, NumberSeq **parts) { return true; } -NumberSeq::NumberSeq(NumberSeq *total, int n, NumberSeq **parts) { - guarantee(check_nums(total, n, parts), "all seq lengths should match"); - double sum = total->sum(); - for (int i = 0; i < n; ++i) { - if (parts[i] != NULL) - sum -= parts[i]->sum(); - } - - _num = total->num(); - _sum = sum; - - // we do not calculate these... - _sum_of_squares = -1.0; - _maximum = -1.0; - _davg = -1.0; - _dvariance = -1.0; -} - void NumberSeq::add(double val) { AbsSeq::add(val); @@ -151,13 +133,13 @@ void NumberSeq::add(double val) { TruncatedSeq::TruncatedSeq(int length, double alpha): AbsSeq(alpha), _length(length), _next(0) { - _sequence = NEW_C_HEAP_ARRAY(double, _length); + _sequence = NEW_C_HEAP_ARRAY(double, _length, mtInternal); for (int i = 0; i < _length; ++i) _sequence[i] = 0.0; } TruncatedSeq::~TruncatedSeq() { - FREE_C_HEAP_ARRAY(double, _sequence); + FREE_C_HEAP_ARRAY(double, _sequence, mtGC); } void TruncatedSeq::add(double val) { diff --git a/hotspot/src/share/vm/utilities/numberSeq.hpp b/hotspot/src/share/vm/utilities/numberSeq.hpp index 358448eb8f7..f8f2bc1ff63 100644 --- a/hotspot/src/share/vm/utilities/numberSeq.hpp +++ b/hotspot/src/share/vm/utilities/numberSeq.hpp @@ -25,6 +25,8 @@ #ifndef SHARE_VM_UTILITIES_NUMBERSEQ_HPP #define SHARE_VM_UTILITIES_NUMBERSEQ_HPP +#include "memory/allocation.hpp" + /** ** This file contains a few classes that represent number sequence, ** x1, x2, x3, ..., xN, and can calculate their avg, max, and sd. @@ -40,7 +42,7 @@ #define DEFAULT_ALPHA_VALUE 0.7 -class AbsSeq { +class AbsSeq: public CHeapObj { private: void init(double alpha); @@ -93,7 +95,6 @@ protected: public: NumberSeq(double alpha = DEFAULT_ALPHA_VALUE); - NumberSeq(NumberSeq* total, int n_parts, NumberSeq** parts); virtual void add(double val); virtual double maximum() const { return _maximum; } diff --git a/hotspot/src/share/vm/utilities/ostream.cpp b/hotspot/src/share/vm/utilities/ostream.cpp index 2dc63d0445e..fc1f07eefd2 100644 --- a/hotspot/src/share/vm/utilities/ostream.cpp +++ b/hotspot/src/share/vm/utilities/ostream.cpp @@ -384,7 +384,7 @@ rotatingFileStream::~rotatingFileStream() { if (_file != NULL) { if (_need_close) fclose(_file); _file = NULL; - FREE_C_HEAP_ARRAY(char, _file_name); + FREE_C_HEAP_ARRAY(char, _file_name, mtInternal); _file_name = NULL; } } @@ -392,7 +392,7 @@ rotatingFileStream::~rotatingFileStream() { rotatingFileStream::rotatingFileStream(const char* file_name) { _cur_file_num = 0; _bytes_writen = 0L; - _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10); + _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal); jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num); _file = fopen(_file_name, "w"); _need_close = true; @@ -401,7 +401,7 @@ rotatingFileStream::rotatingFileStream(const char* file_name) { rotatingFileStream::rotatingFileStream(const char* file_name, const char* opentype) { _cur_file_num = 0; _bytes_writen = 0L; - _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10); + _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal); jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num); _file = fopen(_file_name, opentype); _need_close = true; @@ -524,7 +524,7 @@ static const char* make_log_name(const char* log_name, const char* force_directo } // Create big enough buffer. - char *buf = NEW_C_HEAP_ARRAY(char, buffer_length); + char *buf = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal); strcpy(buf, ""); if (force_directory != NULL) { @@ -549,7 +549,7 @@ void defaultStream::init_log() { // %%% Need a MutexLocker? const char* log_name = LogFile != NULL ? LogFile : "hotspot.log"; const char* try_name = make_log_name(log_name, NULL); - fileStream* file = new(ResourceObj::C_HEAP) fileStream(try_name); + fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name); if (!file->is_open()) { // Try again to open the file. char warnbuf[O_BUFLEN*2]; @@ -557,18 +557,18 @@ void defaultStream::init_log() { "Warning: Cannot open log file: %s\n", try_name); // Note: This feature is for maintainer use only. No need for L10N. jio_print(warnbuf); - FREE_C_HEAP_ARRAY(char, try_name); + FREE_C_HEAP_ARRAY(char, try_name, mtInternal); try_name = make_log_name("hs_pid%p.log", os::get_temp_directory()); jio_snprintf(warnbuf, sizeof(warnbuf), "Warning: Forcing option -XX:LogFile=%s\n", try_name); jio_print(warnbuf); delete file; - file = new(ResourceObj::C_HEAP) fileStream(try_name); - FREE_C_HEAP_ARRAY(char, try_name); + file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name); + FREE_C_HEAP_ARRAY(char, try_name, mtInternal); } if (file->is_open()) { _log_file = file; - xmlStream* xs = new(ResourceObj::C_HEAP) xmlStream(file); + xmlStream* xs = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file); _outer_xmlStream = xs; if (this == tty) xtty = xs; // Write XML header. @@ -815,7 +815,7 @@ void ttyLocker::break_tty_lock_for_safepoint(intx holder) { void ostream_init() { if (defaultStream::instance == NULL) { - defaultStream::instance = new(ResourceObj::C_HEAP) defaultStream(); + defaultStream::instance = new(ResourceObj::C_HEAP, mtInternal) defaultStream(); tty = defaultStream::instance; // We want to ensure that time stamps in GC logs consider time 0 @@ -833,9 +833,9 @@ void ostream_init_log() { gclog_or_tty = tty; // default to tty if (Arguments::gc_log_filename() != NULL) { fileStream * gclog = UseGCLogFileRotation ? - new(ResourceObj::C_HEAP) + new(ResourceObj::C_HEAP, mtInternal) rotatingFileStream(Arguments::gc_log_filename()) : - new(ResourceObj::C_HEAP) + new(ResourceObj::C_HEAP, mtInternal) fileStream(Arguments::gc_log_filename()); if (gclog->is_open()) { // now we update the time stamp of the GC log to be synced up @@ -940,7 +940,7 @@ void staticBufferStream::vprint_cr(const char* format, va_list argptr) { bufferedStream::bufferedStream(size_t initial_size, size_t bufmax) : outputStream() { buffer_length = initial_size; - buffer = NEW_C_HEAP_ARRAY(char, buffer_length); + buffer = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal); buffer_pos = 0; buffer_fixed = false; buffer_max = bufmax; @@ -971,7 +971,7 @@ void bufferedStream::write(const char* s, size_t len) { if (end < buffer_length * 2) { end = buffer_length * 2; } - buffer = REALLOC_C_HEAP_ARRAY(char, buffer, end); + buffer = REALLOC_C_HEAP_ARRAY(char, buffer, end, mtInternal); buffer_length = end; } } @@ -989,7 +989,7 @@ char* bufferedStream::as_string() { bufferedStream::~bufferedStream() { if (!buffer_fixed) { - FREE_C_HEAP_ARRAY(char, buffer); + FREE_C_HEAP_ARRAY(char, buffer, mtInternal); } } diff --git a/hotspot/src/share/vm/utilities/stack.hpp b/hotspot/src/share/vm/utilities/stack.hpp index eedaa7280d0..1cf85a51ac9 100644 --- a/hotspot/src/share/vm/utilities/stack.hpp +++ b/hotspot/src/share/vm/utilities/stack.hpp @@ -25,6 +25,7 @@ #ifndef SHARE_VM_UTILITIES_STACK_HPP #define SHARE_VM_UTILITIES_STACK_HPP +#include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" // Class Stack (below) grows and shrinks by linking together "segments" which @@ -51,11 +52,11 @@ // implementation in class Stack assumes that alloc() will terminate the process // if the allocation fails. -template class StackIterator; +template class StackIterator; // StackBase holds common data/methods that don't depend on the element type, // factored out to reduce template code duplication. -class StackBase +template class StackBase { public: size_t segment_size() const { return _seg_size; } // Elements per segment. @@ -89,11 +90,11 @@ protected: #define inline #endif // __GNUC__ -template -class Stack: public StackBase +template +class Stack: public StackBase { public: - friend class StackIterator; + friend class StackIterator; // segment_size: number of items per segment // max_cache_size: maxmium number of *segments* to cache @@ -103,15 +104,15 @@ public: size_t max_cache_size = 4, size_t max_size = 0); inline ~Stack() { clear(true); } - inline bool is_empty() const { return _cur_seg == NULL; } - inline bool is_full() const { return _full_seg_size >= max_size(); } + inline bool is_empty() const { return this->_cur_seg == NULL; } + inline bool is_full() const { return this->_full_seg_size >= this->max_size(); } // Performance sensitive code should use is_empty() instead of size() == 0 and // is_full() instead of size() == max_size(). Using a conditional here allows // just one var to be updated when pushing/popping elements instead of two; // _full_seg_size is updated only when pushing/popping segments. inline size_t size() const { - return is_empty() ? 0 : _full_seg_size + _cur_seg_size; + return is_empty() ? 0 : this->_full_seg_size + this->_cur_seg_size; } inline void push(E elem); @@ -161,18 +162,18 @@ private: E* _cache; // Segment cache to avoid ping-ponging. }; -template class ResourceStack: public Stack, public ResourceObj +template class ResourceStack: public Stack, public ResourceObj { public: // If this class becomes widely used, it may make sense to save the Thread // and use it when allocating segments. - ResourceStack(size_t segment_size = Stack::default_segment_size()): - Stack(segment_size, max_uintx) +// ResourceStack(size_t segment_size = Stack::default_segment_size()): + ResourceStack(size_t segment_size): Stack(segment_size, max_uintx) { } // Set the segment pointers to NULL so the parent dtor does not free them; // that must be done by the ResourceMark code. - ~ResourceStack() { Stack::reset(true); } + ~ResourceStack() { Stack::reset(true); } protected: virtual E* alloc(size_t bytes); @@ -182,13 +183,13 @@ private: void clear(bool clear_cache = false); }; -template +template class StackIterator: public StackObj { public: - StackIterator(Stack& stack): _stack(stack) { sync(); } + StackIterator(Stack& stack): _stack(stack) { sync(); } - Stack& stack() const { return _stack; } + Stack& stack() const { return _stack; } bool is_empty() const { return _cur_seg == NULL; } @@ -198,7 +199,7 @@ public: void sync(); // Sync the iterator's state to the stack's current state. private: - Stack& _stack; + Stack& _stack; size_t _cur_seg_size; E* _cur_seg; size_t _full_seg_size; diff --git a/hotspot/src/share/vm/utilities/stack.inline.hpp b/hotspot/src/share/vm/utilities/stack.inline.hpp index bb97fc9a274..f53fd3c2c02 100644 --- a/hotspot/src/share/vm/utilities/stack.inline.hpp +++ b/hotspot/src/share/vm/utilities/stack.inline.hpp @@ -27,7 +27,7 @@ #include "utilities/stack.hpp" -StackBase::StackBase(size_t segment_size, size_t max_cache_size, +template StackBase::StackBase(size_t segment_size, size_t max_cache_size, size_t max_size): _seg_size(segment_size), _max_cache_size(max_cache_size), @@ -36,7 +36,7 @@ StackBase::StackBase(size_t segment_size, size_t max_cache_size, assert(_max_size % _seg_size == 0, "not a multiple"); } -size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) +template size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) { assert(seg_size > 0, "cannot be 0"); assert(max_size >= seg_size || max_size == 0, "max_size too small"); @@ -47,54 +47,54 @@ size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) return (max_size + seg_size - 1) / seg_size * seg_size; } -template -Stack::Stack(size_t segment_size, size_t max_cache_size, size_t max_size): - StackBase(adjust_segment_size(segment_size), max_cache_size, max_size) +template +Stack::Stack(size_t segment_size, size_t max_cache_size, size_t max_size): + StackBase(adjust_segment_size(segment_size), max_cache_size, max_size) { reset(true); } -template -void Stack::push(E item) +template +void Stack::push(E item) { assert(!is_full(), "pushing onto a full stack"); - if (_cur_seg_size == _seg_size) { + if (this->_cur_seg_size == this->_seg_size) { push_segment(); } - _cur_seg[_cur_seg_size] = item; - ++_cur_seg_size; + this->_cur_seg[this->_cur_seg_size] = item; + ++this->_cur_seg_size; } -template -E Stack::pop() +template +E Stack::pop() { assert(!is_empty(), "popping from an empty stack"); - if (_cur_seg_size == 1) { - E tmp = _cur_seg[--_cur_seg_size]; + if (this->_cur_seg_size == 1) { + E tmp = _cur_seg[--this->_cur_seg_size]; pop_segment(); return tmp; } - return _cur_seg[--_cur_seg_size]; + return this->_cur_seg[--this->_cur_seg_size]; } -template -void Stack::clear(bool clear_cache) +template +void Stack::clear(bool clear_cache) { free_segments(_cur_seg); if (clear_cache) free_segments(_cache); reset(clear_cache); } -template -size_t Stack::default_segment_size() +template +size_t Stack::default_segment_size() { // Number of elements that fit in 4K bytes minus the size of two pointers // (link field and malloc header). return (4096 - 2 * sizeof(E*)) / sizeof(E); } -template -size_t Stack::adjust_segment_size(size_t seg_size) +template +size_t Stack::adjust_segment_size(size_t seg_size) { const size_t elem_sz = sizeof(E); const size_t ptr_sz = sizeof(E*); @@ -105,93 +105,93 @@ size_t Stack::adjust_segment_size(size_t seg_size) return seg_size; } -template -size_t Stack::link_offset() const +template +size_t Stack::link_offset() const { - return align_size_up(_seg_size * sizeof(E), sizeof(E*)); + return align_size_up(this->_seg_size * sizeof(E), sizeof(E*)); } -template -size_t Stack::segment_bytes() const +template +size_t Stack::segment_bytes() const { return link_offset() + sizeof(E*); } -template -E** Stack::link_addr(E* seg) const +template +E** Stack::link_addr(E* seg) const { return (E**) ((char*)seg + link_offset()); } -template -E* Stack::get_link(E* seg) const +template +E* Stack::get_link(E* seg) const { return *link_addr(seg); } -template -E* Stack::set_link(E* new_seg, E* old_seg) +template +E* Stack::set_link(E* new_seg, E* old_seg) { *link_addr(new_seg) = old_seg; return new_seg; } -template -E* Stack::alloc(size_t bytes) +template +E* Stack::alloc(size_t bytes) { - return (E*) NEW_C_HEAP_ARRAY(char, bytes); + return (E*) NEW_C_HEAP_ARRAY(char, bytes, F); } -template -void Stack::free(E* addr, size_t bytes) +template +void Stack::free(E* addr, size_t bytes) { - FREE_C_HEAP_ARRAY(char, (char*) addr); + FREE_C_HEAP_ARRAY(char, (char*) addr, F); } -template -void Stack::push_segment() +template +void Stack::push_segment() { - assert(_cur_seg_size == _seg_size, "current segment is not full"); + assert(this->_cur_seg_size == this->_seg_size, "current segment is not full"); E* next; - if (_cache_size > 0) { + if (this->_cache_size > 0) { // Use a cached segment. next = _cache; _cache = get_link(_cache); - --_cache_size; + --this->_cache_size; } else { next = alloc(segment_bytes()); DEBUG_ONLY(zap_segment(next, true);) } const bool at_empty_transition = is_empty(); - _cur_seg = set_link(next, _cur_seg); - _cur_seg_size = 0; - _full_seg_size += at_empty_transition ? 0 : _seg_size; + this->_cur_seg = set_link(next, _cur_seg); + this->_cur_seg_size = 0; + this->_full_seg_size += at_empty_transition ? 0 : this->_seg_size; DEBUG_ONLY(verify(at_empty_transition);) } -template -void Stack::pop_segment() +template +void Stack::pop_segment() { - assert(_cur_seg_size == 0, "current segment is not empty"); + assert(this->_cur_seg_size == 0, "current segment is not empty"); E* const prev = get_link(_cur_seg); - if (_cache_size < _max_cache_size) { + if (this->_cache_size < this->_max_cache_size) { // Add the current segment to the cache. DEBUG_ONLY(zap_segment(_cur_seg, false);) _cache = set_link(_cur_seg, _cache); - ++_cache_size; + ++this->_cache_size; } else { DEBUG_ONLY(zap_segment(_cur_seg, true);) free(_cur_seg, segment_bytes()); } const bool at_empty_transition = prev == NULL; - _cur_seg = prev; - _cur_seg_size = _seg_size; - _full_seg_size -= at_empty_transition ? 0 : _seg_size; + this->_cur_seg = prev; + this->_cur_seg_size = this->_seg_size; + this->_full_seg_size -= at_empty_transition ? 0 : this->_seg_size; DEBUG_ONLY(verify(at_empty_transition);) } -template -void Stack::free_segments(E* seg) +template +void Stack::free_segments(E* seg) { const size_t bytes = segment_bytes(); while (seg != NULL) { @@ -201,37 +201,37 @@ void Stack::free_segments(E* seg) } } -template -void Stack::reset(bool reset_cache) +template +void Stack::reset(bool reset_cache) { - _cur_seg_size = _seg_size; // So push() will alloc a new segment. - _full_seg_size = 0; + this->_cur_seg_size = this->_seg_size; // So push() will alloc a new segment. + this->_full_seg_size = 0; _cur_seg = NULL; if (reset_cache) { - _cache_size = 0; + this->_cache_size = 0; _cache = NULL; } } #ifdef ASSERT -template -void Stack::verify(bool at_empty_transition) const +template +void Stack::verify(bool at_empty_transition) const { - assert(size() <= max_size(), "stack exceeded bounds"); - assert(cache_size() <= max_cache_size(), "cache exceeded bounds"); - assert(_cur_seg_size <= segment_size(), "segment index exceeded bounds"); + assert(size() <= this->max_size(), "stack exceeded bounds"); + assert(this->cache_size() <= this->max_cache_size(), "cache exceeded bounds"); + assert(this->_cur_seg_size <= this->segment_size(), "segment index exceeded bounds"); - assert(_full_seg_size % _seg_size == 0, "not a multiple"); + assert(this->_full_seg_size % this->_seg_size == 0, "not a multiple"); assert(at_empty_transition || is_empty() == (size() == 0), "mismatch"); - assert((_cache == NULL) == (cache_size() == 0), "mismatch"); + assert((_cache == NULL) == (this->cache_size() == 0), "mismatch"); if (is_empty()) { - assert(_cur_seg_size == segment_size(), "sanity"); + assert(this->_cur_seg_size == this->segment_size(), "sanity"); } } -template -void Stack::zap_segment(E* seg, bool zap_link_field) const +template +void Stack::zap_segment(E* seg, bool zap_link_field) const { if (!ZapStackSegments) return; const size_t zap_bytes = segment_bytes() - (zap_link_field ? 0 : sizeof(E*)); @@ -243,28 +243,28 @@ void Stack::zap_segment(E* seg, bool zap_link_field) const } #endif -template -E* ResourceStack::alloc(size_t bytes) +template +E* ResourceStack::alloc(size_t bytes) { return (E*) resource_allocate_bytes(bytes); } -template -void ResourceStack::free(E* addr, size_t bytes) +template +void ResourceStack::free(E* addr, size_t bytes) { resource_free_bytes((char*) addr, bytes); } -template -void StackIterator::sync() +template +void StackIterator::sync() { _full_seg_size = _stack._full_seg_size; _cur_seg_size = _stack._cur_seg_size; _cur_seg = _stack._cur_seg; } -template -E* StackIterator::next_addr() +template +E* StackIterator::next_addr() { assert(!is_empty(), "no items left"); if (_cur_seg_size == 1) { diff --git a/hotspot/src/share/vm/utilities/taskqueue.hpp b/hotspot/src/share/vm/utilities/taskqueue.hpp index 545c6dbb5e0..9d67af456ff 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.hpp +++ b/hotspot/src/share/vm/utilities/taskqueue.hpp @@ -132,8 +132,8 @@ void TaskQueueStats::reset() { } #endif // TASKQUEUE_STATS -template -class TaskQueueSuper: public CHeapObj { +template +class TaskQueueSuper: public CHeapObj { protected: // Internal type for indexing the queue; also used for the tag. typedef NOT_LP64(uint16_t) LP64_ONLY(uint32_t) idx_t; @@ -249,22 +249,27 @@ public: TASKQUEUE_STATS_ONLY(TaskQueueStats stats;) }; -template -class GenericTaskQueue: public TaskQueueSuper { -protected: - typedef typename TaskQueueSuper::Age Age; - typedef typename TaskQueueSuper::idx_t idx_t; - using TaskQueueSuper::_bottom; - using TaskQueueSuper::_age; - using TaskQueueSuper::increment_index; - using TaskQueueSuper::decrement_index; - using TaskQueueSuper::dirty_size; + +template +class GenericTaskQueue: public TaskQueueSuper { +protected: + typedef typename TaskQueueSuper::Age Age; + typedef typename TaskQueueSuper::idx_t idx_t; + + using TaskQueueSuper::_bottom; + using TaskQueueSuper::_age; + using TaskQueueSuper::increment_index; + using TaskQueueSuper::decrement_index; + using TaskQueueSuper::dirty_size; public: - using TaskQueueSuper::max_elems; - using TaskQueueSuper::size; - TASKQUEUE_STATS_ONLY(using TaskQueueSuper::stats;) + using TaskQueueSuper::max_elems; + using TaskQueueSuper::size; + +#if TASKQUEUE_STATS + using TaskQueueSuper::stats; +#endif private: // Slow paths for push, pop_local. (pop_global has no fast path.) @@ -302,18 +307,18 @@ private: volatile E* _elems; }; -template -GenericTaskQueue::GenericTaskQueue() { +template +GenericTaskQueue::GenericTaskQueue() { assert(sizeof(Age) == sizeof(size_t), "Depends on this."); } -template -void GenericTaskQueue::initialize() { - _elems = NEW_C_HEAP_ARRAY(E, N); +template +void GenericTaskQueue::initialize() { + _elems = NEW_C_HEAP_ARRAY(E, N, F); } -template -void GenericTaskQueue::oops_do(OopClosure* f) { +template +void GenericTaskQueue::oops_do(OopClosure* f) { // tty->print_cr("START OopTaskQueue::oops_do"); uint iters = size(); uint index = _bottom; @@ -329,8 +334,8 @@ void GenericTaskQueue::oops_do(OopClosure* f) { // tty->print_cr("END OopTaskQueue::oops_do"); } -template -bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { +template +bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { if (dirty_n_elems == N - 1) { // Actually means 0, so do the push. uint localBot = _bottom; @@ -349,8 +354,8 @@ bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { // whenever the queue goes empty which it will do here if this thread // gets the last task or in pop_global() if the queue wraps (top == 0 // and pop_global() succeeds, see pop_global()). -template -bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { +template +bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { // This queue was observed to contain exactly one element; either this // thread will claim it, or a competing "pop_global". In either case, // the queue will be logically empty afterwards. Create a new Age value @@ -382,8 +387,8 @@ bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { return false; } -template -bool GenericTaskQueue::pop_global(E& t) { +template +bool GenericTaskQueue::pop_global(E& t) { Age oldAge = _age.get(); uint localBot = _bottom; uint n_elems = size(localBot, oldAge.top()); @@ -402,9 +407,9 @@ bool GenericTaskQueue::pop_global(E& t) { return resAge == oldAge; } -template -GenericTaskQueue::~GenericTaskQueue() { - FREE_C_HEAP_ARRAY(E, _elems); +template +GenericTaskQueue::~GenericTaskQueue() { + FREE_C_HEAP_ARRAY(E, _elems, F); } // OverflowTaskQueue is a TaskQueue that also includes an overflow stack for @@ -418,12 +423,12 @@ GenericTaskQueue::~GenericTaskQueue() { // Note that size() is not hidden--it returns the number of elements in the // TaskQueue, and does not include the size of the overflow stack. This // simplifies replacement of GenericTaskQueues with OverflowTaskQueues. -template -class OverflowTaskQueue: public GenericTaskQueue +template +class OverflowTaskQueue: public GenericTaskQueue { public: - typedef Stack overflow_t; - typedef GenericTaskQueue taskqueue_t; + typedef Stack overflow_t; + typedef GenericTaskQueue taskqueue_t; TASKQUEUE_STATS_ONLY(using taskqueue_t::stats;) @@ -445,8 +450,8 @@ private: overflow_t _overflow_stack; }; -template -bool OverflowTaskQueue::push(E t) +template +bool OverflowTaskQueue::push(E t) { if (!taskqueue_t::push(t)) { overflow_stack()->push(t); @@ -455,15 +460,15 @@ bool OverflowTaskQueue::push(E t) return true; } -template -bool OverflowTaskQueue::pop_overflow(E& t) +template +bool OverflowTaskQueue::pop_overflow(E& t) { if (overflow_empty()) return false; t = overflow_stack()->pop(); return true; } -class TaskQueueSetSuper: public CHeapObj { +class TaskQueueSetSuper { protected: static int randomParkAndMiller(int* seed0); public: @@ -471,8 +476,11 @@ public: virtual bool peek() = 0; }; -template -class GenericTaskQueueSet: public TaskQueueSetSuper { +template class TaskQueueSetSuperImpl: public CHeapObj, public TaskQueueSetSuper { +}; + +template +class GenericTaskQueueSet: public TaskQueueSetSuperImpl { private: uint _n; T** _queues; @@ -482,7 +490,7 @@ public: GenericTaskQueueSet(int n) : _n(n) { typedef T* GenericTaskQueuePtr; - _queues = NEW_C_HEAP_ARRAY(GenericTaskQueuePtr, n); + _queues = NEW_C_HEAP_ARRAY(GenericTaskQueuePtr, n, F); for (int i = 0; i < n; i++) { _queues[i] = NULL; } @@ -506,19 +514,19 @@ public: bool peek(); }; -template void -GenericTaskQueueSet::register_queue(uint i, T* q) { +template void +GenericTaskQueueSet::register_queue(uint i, T* q) { assert(i < _n, "index out of range."); _queues[i] = q; } -template T* -GenericTaskQueueSet::queue(uint i) { +template T* +GenericTaskQueueSet::queue(uint i) { return _queues[i]; } -template bool -GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { for (uint i = 0; i < 2 * _n; i++) { if (steal_best_of_2(queue_num, seed, t)) { TASKQUEUE_STATS_ONLY(queue(queue_num)->stats.record_steal(true)); @@ -529,8 +537,8 @@ GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { return false; } -template bool -GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { if (_n > 2) { int best_k; uint best_sz = 0; @@ -553,11 +561,11 @@ GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { } } -template bool -GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { if (_n > 2) { uint k = queue_num; - while (k == queue_num) k = randomParkAndMiller(seed) % _n; + while (k == queue_num) k = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; return _queues[2]->pop_global(t); } else if (_n == 2) { // Just try the other one. @@ -569,13 +577,13 @@ GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { } } -template bool -GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { if (_n > 2) { uint k1 = queue_num; - while (k1 == queue_num) k1 = randomParkAndMiller(seed) % _n; + while (k1 == queue_num) k1 = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; uint k2 = queue_num; - while (k2 == queue_num || k2 == k1) k2 = randomParkAndMiller(seed) % _n; + while (k2 == queue_num || k2 == k1) k2 = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; // Sample both and try the larger. uint sz1 = _queues[k1]->size(); uint sz2 = _queues[k2]->size(); @@ -591,8 +599,8 @@ GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { } } -template -bool GenericTaskQueueSet::peek() { +template +bool GenericTaskQueueSet::peek() { // Try all the queues. for (uint j = 0; j < _n; j++) { if (_queues[j]->peek()) @@ -602,7 +610,7 @@ bool GenericTaskQueueSet::peek() { } // When to terminate from the termination protocol. -class TerminatorTerminator: public CHeapObj { +class TerminatorTerminator: public CHeapObj { public: virtual bool should_exit_termination() = 0; }; @@ -665,8 +673,8 @@ public: #endif }; -template inline bool -GenericTaskQueue::push(E t) { +template inline bool +GenericTaskQueue::push(E t) { uint localBot = _bottom; assert((localBot >= 0) && (localBot < N), "_bottom out of range."); idx_t top = _age.top(); @@ -683,8 +691,8 @@ GenericTaskQueue::push(E t) { } } -template inline bool -GenericTaskQueue::pop_local(E& t) { +template inline bool +GenericTaskQueue::pop_local(E& t) { uint localBot = _bottom; // This value cannot be N-1. That can only occur as a result of // the assignment to bottom in this method. If it does, this method @@ -715,8 +723,8 @@ GenericTaskQueue::pop_local(E& t) { } } -typedef GenericTaskQueue OopTaskQueue; -typedef GenericTaskQueueSet OopTaskQueueSet; +typedef GenericTaskQueue OopTaskQueue; +typedef GenericTaskQueueSet OopTaskQueueSet; #ifdef _MSC_VER #pragma warning(push) @@ -796,11 +804,11 @@ private: #pragma warning(pop) #endif -typedef OverflowTaskQueue OopStarTaskQueue; -typedef GenericTaskQueueSet OopStarTaskQueueSet; +typedef OverflowTaskQueue OopStarTaskQueue; +typedef GenericTaskQueueSet OopStarTaskQueueSet; -typedef OverflowTaskQueue RegionTaskQueue; -typedef GenericTaskQueueSet RegionTaskQueueSet; +typedef OverflowTaskQueue RegionTaskQueue; +typedef GenericTaskQueueSet RegionTaskQueueSet; #endif // SHARE_VM_UTILITIES_TASKQUEUE_HPP diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index e450676fa7a..175848b79de 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -33,6 +33,7 @@ #include "runtime/thread.hpp" #include "runtime/vmThread.hpp" #include "runtime/vm_operations.hpp" +#include "services/memTracker.hpp" #include "utilities/debug.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" @@ -450,7 +451,9 @@ void VMError::report(outputStream* st) { // VM version st->print_cr("#"); JDK_Version::current().to_string(buf, sizeof(buf)); - st->print_cr("# JRE version: %s", buf); + const char* runtime_name = JDK_Version::runtime_name() != NULL ? + JDK_Version::runtime_name() : ""; + st->print_cr("# JRE version: %s (%s)", runtime_name, buf); st->print_cr("# Java VM: %s (%s %s %s %s)", Abstract_VM_Version::vm_name(), Abstract_VM_Version::vm_release(), @@ -818,6 +821,9 @@ void VMError::report_and_die() { static bool transmit_report_done = false; // done error reporting static fdStream log; // error log + // disble NMT to avoid further exception + MemTracker::shutdown(MemTracker::NMT_error_reporting); + if (SuppressFatalErrorMessage) { os::abort(); } diff --git a/hotspot/src/share/vm/utilities/workgroup.cpp b/hotspot/src/share/vm/utilities/workgroup.cpp index 0ef1f833d04..4952058b484 100644 --- a/hotspot/src/share/vm/utilities/workgroup.cpp +++ b/hotspot/src/share/vm/utilities/workgroup.cpp @@ -77,7 +77,7 @@ bool WorkGang::initialize_workers() { name(), total_workers()); } - _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, total_workers()); + _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, total_workers(), mtInternal); if (gang_workers() == NULL) { vm_exit_out_of_memory(0, "Cannot create GangWorker array."); return false; @@ -241,6 +241,7 @@ void GangWorker::run() { void GangWorker::initialize() { this->initialize_thread_local_storage(); + this->record_stack_base_and_size(); assert(_gang != NULL, "No gang to run in"); os::set_priority(this, NearMaxPriority); if (TraceWorkGang) { @@ -421,7 +422,7 @@ void WorkGangBarrierSync::enter() { SubTasksDone::SubTasksDone(uint n) : _n_tasks(n), _n_threads(1), _tasks(NULL) { - _tasks = NEW_C_HEAP_ARRAY(uint, n); + _tasks = NEW_C_HEAP_ARRAY(uint, n, mtInternal); guarantee(_tasks != NULL, "alloc failure"); clear(); } @@ -476,7 +477,7 @@ void SubTasksDone::all_tasks_completed() { SubTasksDone::~SubTasksDone() { - if (_tasks != NULL) FREE_C_HEAP_ARRAY(jint, _tasks); + if (_tasks != NULL) FREE_C_HEAP_ARRAY(jint, _tasks, mtInternal); } // *** SequentialSubTasksDone diff --git a/hotspot/src/share/vm/utilities/workgroup.hpp b/hotspot/src/share/vm/utilities/workgroup.hpp index 7fc0ddf5674..9bd34e6bc82 100644 --- a/hotspot/src/share/vm/utilities/workgroup.hpp +++ b/hotspot/src/share/vm/utilities/workgroup.hpp @@ -123,7 +123,7 @@ class AbstractGangTaskWOopQueues : public AbstractGangTask { // Class AbstractWorkGang: // An abstract class representing a gang of workers. // You subclass this to supply an implementation of run_task(). -class AbstractWorkGang: public CHeapObj { +class AbstractWorkGang: public CHeapObj { // Here's the public interface to this class. public: // Constructor and destructor. @@ -402,7 +402,7 @@ public: // subtasks will be identified by integer indices, usually elements of an // enumeration type. -class SubTasksDone : public CHeapObj { +class SubTasksDone: public CHeapObj { uint* _tasks; uint _n_tasks; // _n_threads is used to determine when a sub task is done. diff --git a/hotspot/src/share/vm/utilities/xmlstream.cpp b/hotspot/src/share/vm/utilities/xmlstream.cpp index 8646c309bfb..2753b850cbb 100644 --- a/hotspot/src/share/vm/utilities/xmlstream.cpp +++ b/hotspot/src/share/vm/utilities/xmlstream.cpp @@ -43,7 +43,7 @@ void xmlStream::initialize(outputStream* out) { #ifdef ASSERT _element_depth = 0; int init_len = 100; - char* init_buf = NEW_C_HEAP_ARRAY(char, init_len); + char* init_buf = NEW_C_HEAP_ARRAY(char, init_len, mtInternal); _element_close_stack_low = init_buf; _element_close_stack_high = init_buf + init_len; _element_close_stack_ptr = init_buf + init_len - 1; @@ -58,7 +58,7 @@ void xmlStream::initialize(outputStream* out) { #ifdef ASSERT xmlStream::~xmlStream() { - FREE_C_HEAP_ARRAY(char, _element_close_stack_low); + FREE_C_HEAP_ARRAY(char, _element_close_stack_low, mtInternal); } #endif @@ -155,14 +155,14 @@ void xmlStream::see_tag(const char* tag, bool push) { int old_len = _element_close_stack_high - old_ptr; int new_len = old_len * 2; if (new_len < 100) new_len = 100; - char* new_low = NEW_C_HEAP_ARRAY(char, new_len); + char* new_low = NEW_C_HEAP_ARRAY(char, new_len, mtInternal); char* new_high = new_low + new_len; char* new_ptr = new_high - old_len; memcpy(new_ptr, old_ptr, old_len); _element_close_stack_high = new_high; _element_close_stack_low = new_low; _element_close_stack_ptr = new_ptr; - FREE_C_HEAP_ARRAY(char, old_low); + FREE_C_HEAP_ARRAY(char, old_low, mtInternal); push_ptr = new_ptr - (tag_len+1); } assert(push_ptr >= _element_close_stack_low, "in range"); diff --git a/hotspot/test/compiler/6732154/Test6732154.java b/hotspot/test/compiler/6732154/Test6732154.java new file mode 100644 index 00000000000..3618f678455 --- /dev/null +++ b/hotspot/test/compiler/6732154/Test6732154.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 6732154 + * @summary REG: Printing an Image using image/gif doc flavor crashes the VM, Solsparc + * + * @run main/othervm -Xcomp -XX:CompileOnly="Test6732154::ascii85Encode" Test6732154 + */ +public class Test6732154 { + + // Exact copy of sun.print.PSPrinterJob.ascii85Encode([b)[b + private byte[] ascii85Encode(byte[] inArr) { + byte[] outArr = new byte[((inArr.length+4) * 5 / 4) + 2]; + long p1 = 85; + long p2 = p1*p1; + long p3 = p1*p2; + long p4 = p1*p3; + byte pling = '!'; + + int i = 0; + int olen = 0; + long val, rem; + + while (i+3 < inArr.length) { + val = ((long)((inArr[i++]&0xff))<<24) + + ((long)((inArr[i++]&0xff))<<16) + + ((long)((inArr[i++]&0xff))<< 8) + + ((long)(inArr[i++]&0xff)); + if (val == 0) { + outArr[olen++] = 'z'; + } else { + rem = val; + outArr[olen++] = (byte)(rem / p4 + pling); rem = rem % p4; + outArr[olen++] = (byte)(rem / p3 + pling); rem = rem % p3; + outArr[olen++] = (byte)(rem / p2 + pling); rem = rem % p2; + outArr[olen++] = (byte)(rem / p1 + pling); rem = rem % p1; + outArr[olen++] = (byte)(rem + pling); + } + } + // input not a multiple of 4 bytes, write partial output. + if (i < inArr.length) { + int n = inArr.length - i; // n bytes remain to be written + + val = 0; + while (i < inArr.length) { + val = (val << 8) + (inArr[i++]&0xff); + } + + int append = 4 - n; + while (append-- > 0) { + val = val << 8; + } + byte []c = new byte[5]; + rem = val; + c[0] = (byte)(rem / p4 + pling); rem = rem % p4; + c[1] = (byte)(rem / p3 + pling); rem = rem % p3; + c[2] = (byte)(rem / p2 + pling); rem = rem % p2; + c[3] = (byte)(rem / p1 + pling); rem = rem % p1; + c[4] = (byte)(rem + pling); + + for (int b = 0; b < n+1 ; b++) { + outArr[olen++] = c[b]; + } + } + + // write EOD marker. + outArr[olen++]='~'; outArr[olen++]='>'; + + /* The original intention was to insert a newline after every 78 bytes. + * This was mainly intended for legibility but I decided against this + * partially because of the (small) amount of extra space, and + * partially because for line breaks either would have to hardwire + * ascii 10 (newline) or calculate space in bytes to allocate for + * the platform's newline byte sequence. Also need to be careful + * about where its inserted: + * Ascii 85 decoder ignores white space except for one special case: + * you must ensure you do not split the EOD marker across lines. + */ + byte[] retArr = new byte[olen]; + System.arraycopy(outArr, 0, retArr, 0, olen); + return retArr; + } + + public static void main(String[] args) { + new Test6732154().ascii85Encode(new byte[0]); + System.out.println("Test passed."); + } +} diff --git a/hotspot/test/compiler/6894807/Test6894807.sh b/hotspot/test/compiler/6894807/Test6894807.sh index da435cc380f..2b11733dc9c 100644 --- a/hotspot/test/compiler/6894807/Test6894807.sh +++ b/hotspot/test/compiler/6894807/Test6894807.sh @@ -18,8 +18,6 @@ then exit 1 fi -BIT_FLAG="" - # set platform-dependent variables OS=`uname -s` case "$OS" in @@ -27,12 +25,6 @@ case "$OS" in NULL=/dev/null PS=":" FS="/" - ## for solaris, linux it's HOME - FILE_LOCATION=$HOME - if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ] - then - BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT | grep -v '^#'` - fi ;; Windows_* ) NULL=NUL @@ -50,9 +42,9 @@ CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH THIS_DIR=`pwd` -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -version +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -server IsInstanceTest > test.out 2>&1 +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} IsInstanceTest > test.out 2>&1 cat test.out diff --git a/hotspot/test/compiler/7119644/TestBooleanVect.java b/hotspot/test/compiler/7119644/TestBooleanVect.java new file mode 100644 index 00000000000..d4e3ad68d5f --- /dev/null +++ b/hotspot/test/compiler/7119644/TestBooleanVect.java @@ -0,0 +1,952 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestBooleanVect + */ + +public class TestBooleanVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Boolean vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + boolean[] a1 = new boolean[ARRLEN]; + boolean[] a2 = new boolean[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0); + } + for (int i=ALIGN_OFF; i 0); + errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + } + for (int i=UNALIGN_OFF; i 0); + errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = false; + } + } + static void test_vi_neg(boolean[] a, boolean b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(boolean[] a, boolean[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(boolean[] a, boolean[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = false; + b[i] = false; + } + } + static void test_2vi_neg(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(boolean[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = false; + } + } + static void test_vi_oppos(boolean[] a, boolean b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(boolean[] a, boolean[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(boolean[] a, boolean[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = false; + b[i] = false; + } + } + static void test_2vi_oppos(boolean[] a, boolean[] b, boolean c, boolean d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(boolean[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = false; + } + } + static void test_vi_off(boolean[] a, boolean b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = false; + b[i+OFFSET] = false; + } + } + static void test_2vi_off(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(boolean[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = false; + } + } + static void test_vi_inv(boolean[] a, boolean b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(boolean[] a, boolean[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(boolean[] a, boolean[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = false; + b[i+k] = false; + } + } + static void test_2vi_inv(boolean[] a, boolean[] b, boolean c, boolean d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(boolean[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = false; + } + } + static void test_vi_scl(boolean[] a, boolean b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(boolean[] a, boolean[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(boolean[] a, boolean[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = false; + b[i*SCALE] = false; + } + } + static void test_2vi_scl(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = false; + b[i] = false; + } + } + static void test_2vi_aln(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = false; + b[i] = false; + } + } + static void test_2vi_unaln(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, boolean elem, boolean val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteDoubleVect.java b/hotspot/test/compiler/7119644/TestByteDoubleVect.java new file mode 100644 index 00000000000..acf71bf218b --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteDoubleVect + */ + +public class TestByteDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(byte[] a, double[] b, byte c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(byte[] a, double[] b, byte c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(byte[] a, double[] b, byte c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(byte[] a, double[] b, byte c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteFloatVect.java b/hotspot/test/compiler/7119644/TestByteFloatVect.java new file mode 100644 index 00000000000..45fe34e9577 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteFloatVect + */ + +public class TestByteFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(byte[] a, float[] b, byte c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(byte[] a, float[] b, byte c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(byte[] a, float[] b, byte c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(byte[] a, float[] b, byte c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteIntVect.java b/hotspot/test/compiler/7119644/TestByteIntVect.java new file mode 100644 index 00000000000..8d9aa6a808b --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteIntVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteIntVect + */ + +public class TestByteIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + int[] b1 = new int[ARRLEN]; + int[] b2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, int[] b, byte c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, int[] b, byte c, int d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, int[] c, int[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, int[] b, byte c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, int[] b, byte c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteLongVect.java b/hotspot/test/compiler/7119644/TestByteLongVect.java new file mode 100644 index 00000000000..c2d439057d9 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteLongVect + */ + +public class TestByteLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, long[] b, byte c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, long[] b, byte c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, long[] b, byte c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, long[] b, byte c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteShortVect.java b/hotspot/test/compiler/7119644/TestByteShortVect.java new file mode 100644 index 00000000000..ee1a206c1f2 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteShortVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteShortVect + */ + +public class TestByteShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + short[] b1 = new short[ARRLEN]; + short[] b2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, short[] b, byte c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, short[] b, byte c, short d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, short[] c, short[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, short[] b, byte c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, short[] b, byte c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteVect.java b/hotspot/test/compiler/7119644/TestByteVect.java new file mode 100644 index 00000000000..6167678acf9 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteVect + */ + +public class TestByteVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(byte[] a, byte b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(byte[] a, byte[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(byte[] a, byte[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(byte[] a, byte[] b, byte c, byte d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(byte[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(byte[] a, byte b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(byte[] a, byte[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(byte[] a, byte[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(byte[] a, byte[] b, byte c, byte d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(byte[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(byte[] a, byte b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(byte[] a, byte[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(byte[] a, byte[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(byte[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(byte[] a, byte b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(byte[] a, byte[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(byte[] a, byte[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(byte[] a, byte[] b, byte c, byte d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(byte[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(byte[] a, byte b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(byte[] a, byte[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(byte[] a, byte[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestCharShortVect.java b/hotspot/test/compiler/7119644/TestCharShortVect.java new file mode 100644 index 00000000000..55f8e03b772 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestCharShortVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestCharShortVect + */ + +public class TestCharShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Char + Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a1 = new char[ARRLEN]; + char[] a2 = new char[ARRLEN]; + short[] b1 = new short[ARRLEN]; + short[] b2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_neg(char[] a, short[] b, char c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(char[] a, char[] b, short[] c, short[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(char[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_oppos(char[] a, short[] b, char c, short d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(char[] a, char[] b, short[] c, short[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(char[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_aln(char[] a, short[] b, char c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(char[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_unaln(char[] a, short[] b, char c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, char elem, char val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestCharVect.java b/hotspot/test/compiler/7119644/TestCharVect.java new file mode 100644 index 00000000000..d05ed4d1ccd --- /dev/null +++ b/hotspot/test/compiler/7119644/TestCharVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestCharVect + */ + +public class TestCharVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Char vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a1 = new char[ARRLEN]; + char[] a2 = new char[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = (char)-123; + } + } + static void test_vi_neg(char[] a, char b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(char[] a, char[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(char[] a, char[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_neg(char[] a, char[] b, char c, char d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(char[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + } + } + static void test_vi_oppos(char[] a, char b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(char[] a, char[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(char[] a, char[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_oppos(char[] a, char[] b, char c, char d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(char[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = (char)-123; + } + } + static void test_vi_off(char[] a, char b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(char[] a, char[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(char[] a, char[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = (char)-123; + b[i+OFFSET] = (char)-103; + } + } + static void test_2vi_off(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(char[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = (char)-123; + } + } + static void test_vi_inv(char[] a, char b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(char[] a, char[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(char[] a, char[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = (char)-123; + b[i+k] = (char)-103; + } + } + static void test_2vi_inv(char[] a, char[] b, char c, char d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(char[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = (char)-123; + } + } + static void test_vi_scl(char[] a, char b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(char[] a, char[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(char[] a, char[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = (char)-123; + b[i*SCALE] = (char)-103; + } + } + static void test_2vi_scl(char[] a, char[] b, char c, char d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_aln(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_unaln(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, char elem, char val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestDoubleVect.java b/hotspot/test/compiler/7119644/TestDoubleVect.java new file mode 100644 index 00000000000..385a64d5a2f --- /dev/null +++ b/hotspot/test/compiler/7119644/TestDoubleVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestDoubleVect + */ + +public class TestDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + double[] a1 = new double[ARRLEN]; + double[] a2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.; + } + } + static void test_vi_neg(double[] a, double b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(double[] a, double[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(double[] a, double[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123.; + b[i] = -103.; + } + } + static void test_2vi_neg(double[] a, double[] b, double c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(double[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.; + } + } + static void test_vi_oppos(double[] a, double b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(double[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(double[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.; + b[i] = -103.; + } + } + static void test_2vi_oppos(double[] a, double[] b, double c, double d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(double[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.; + } + } + static void test_vi_off(double[] a, double b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(double[] a, double[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(double[] a, double[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.; + b[i+OFFSET] = -103.; + } + } + static void test_2vi_off(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(double[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.; + } + } + static void test_vi_inv(double[] a, double b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(double[] a, double[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(double[] a, double[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.; + b[i+k] = -103.; + } + } + static void test_2vi_inv(double[] a, double[] b, double c, double d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(double[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.; + } + } + static void test_vi_scl(double[] a, double b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(double[] a, double[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(double[] a, double[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.; + b[i*SCALE] = -103.; + } + } + static void test_2vi_scl(double[] a, double[] b, double c, double d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.; + b[i] = -103.; + } + } + static void test_2vi_aln(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.; + b[i] = -103.; + } + } + static void test_2vi_unaln(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestFloatDoubleVect.java b/hotspot/test/compiler/7119644/TestFloatDoubleVect.java new file mode 100644 index 00000000000..827ecdb4615 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestFloatDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestFloatDoubleVect + */ + +public class TestFloatDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Float + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + float[] a1 = new float[ARRLEN]; + float[] a2 = new float[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.f; + b[i] = -103.; + } + } + static void test_vi_neg(float[] a, double[] b, float c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(float[] a, float[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(float[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + b[i] = -103.; + } + } + static void test_vi_oppos(float[] a, double[] b, float c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(float[] a, float[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(float[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.f; + b[i] = -103.; + } + } + static void test_vi_aln(float[] a, double[] b, float c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(float[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.f; + b[i] = -103.; + } + } + static void test_vi_unaln(float[] a, double[] b, float c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestFloatVect.java b/hotspot/test/compiler/7119644/TestFloatVect.java new file mode 100644 index 00000000000..825fffed64c --- /dev/null +++ b/hotspot/test/compiler/7119644/TestFloatVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestFloatVect + */ + +public class TestFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + float[] a1 = new float[ARRLEN]; + float[] a2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.f; + } + } + static void test_vi_neg(float[] a, float b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(float[] a, float[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(float[] a, float[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_neg(float[] a, float[] b, float c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(float[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + } + } + static void test_vi_oppos(float[] a, float b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(float[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(float[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_oppos(float[] a, float[] b, float c, float d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(float[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.f; + } + } + static void test_vi_off(float[] a, float b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(float[] a, float[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(float[] a, float[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.f; + b[i+OFFSET] = -103.f; + } + } + static void test_2vi_off(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(float[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.f; + } + } + static void test_vi_inv(float[] a, float b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(float[] a, float[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(float[] a, float[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.f; + b[i+k] = -103.f; + } + } + static void test_2vi_inv(float[] a, float[] b, float c, float d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(float[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.f; + } + } + static void test_vi_scl(float[] a, float b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(float[] a, float[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(float[] a, float[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.f; + b[i*SCALE] = -103.f; + } + } + static void test_2vi_scl(float[] a, float[] b, float c, float d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_aln(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_unaln(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntDoubleVect.java b/hotspot/test/compiler/7119644/TestIntDoubleVect.java new file mode 100644 index 00000000000..fc6e32dce05 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntDoubleVect + */ + +public class TestIntDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(int[] a, double[] b, int c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(int[] a, double[] b, int c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(int[] a, double[] b, int c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(int[] a, double[] b, int c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntFloatVect.java b/hotspot/test/compiler/7119644/TestIntFloatVect.java new file mode 100644 index 00000000000..e698c890d69 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntFloatVect + */ + +public class TestIntFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(int[] a, float[] b, int c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(int[] a, float[] b, int c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(int[] a, float[] b, int c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(int[] a, float[] b, int c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntLongVect.java b/hotspot/test/compiler/7119644/TestIntLongVect.java new file mode 100644 index 00000000000..def0d9b1bc2 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntLongVect + */ + +public class TestIntLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(int[] a, long[] b, int c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(int[] a, long[] b, int c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(int[] a, long[] b, int c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(int[] a, long[] b, int c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntVect.java b/hotspot/test/compiler/7119644/TestIntVect.java new file mode 100644 index 00000000000..9d3f4e53920 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntVect + */ + +public class TestIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(int[] a, int b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(int[] a, int[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(int[] a, int[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(int[] a, int[] b, int c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(int[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(int[] a, int b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(int[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(int[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(int[] a, int[] b, int c, int d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(int[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(int[] a, int b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(int[] a, int[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(int[] a, int[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(int[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(int[] a, int b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(int[] a, int[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(int[] a, int[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(int[] a, int[] b, int c, int d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(int[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(int[] a, int b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(int[] a, int[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(int[] a, int[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(int[] a, int[] b, int c, int d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongDoubleVect.java b/hotspot/test/compiler/7119644/TestLongDoubleVect.java new file mode 100644 index 00000000000..344e3a980bb --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongDoubleVect + */ + +public class TestLongDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(long[] a, double[] b, long c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(long[] a, long[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(long[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(long[] a, double[] b, long c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(long[] a, long[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(long[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(long[] a, double[] b, long c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(long[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(long[] a, double[] b, long c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongFloatVect.java b/hotspot/test/compiler/7119644/TestLongFloatVect.java new file mode 100644 index 00000000000..714f6c83687 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongFloatVect + */ + +public class TestLongFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(long[] a, float[] b, long c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(long[] a, long[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(long[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(long[] a, float[] b, long c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(long[] a, long[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(long[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(long[] a, float[] b, long c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(long[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(long[] a, float[] b, long c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongVect.java b/hotspot/test/compiler/7119644/TestLongVect.java new file mode 100644 index 00000000000..6f0365bb5c1 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongVect + */ + +public class TestLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(long[] a, long b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(long[] a, long[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(long[] a, long[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(long[] a, long[] b, long c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(long[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(long[] a, long b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(long[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(long[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(long[] a, long[] b, long c, long d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(long[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(long[] a, long b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(long[] a, long[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(long[] a, long[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(long[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(long[] a, long b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(long[] a, long[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(long[] a, long[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(long[] a, long[] b, long c, long d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(long[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(long[] a, long b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(long[] a, long[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(long[] a, long[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(long[] a, long[] b, long c, long d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortDoubleVect.java b/hotspot/test/compiler/7119644/TestShortDoubleVect.java new file mode 100644 index 00000000000..c21037e4c87 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortDoubleVect + */ + +public class TestShortDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(short[] a, double[] b, short c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(short[] a, double[] b, short c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(short[] a, double[] b, short c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(short[] a, double[] b, short c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortFloatVect.java b/hotspot/test/compiler/7119644/TestShortFloatVect.java new file mode 100644 index 00000000000..05b4dddd980 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortFloatVect + */ + +public class TestShortFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(short[] a, float[] b, short c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(short[] a, float[] b, short c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(short[] a, float[] b, short c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(short[] a, float[] b, short c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortIntVect.java b/hotspot/test/compiler/7119644/TestShortIntVect.java new file mode 100644 index 00000000000..bf180940856 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortIntVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortIntVect + */ + +public class TestShortIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + int[] b1 = new int[ARRLEN]; + int[] b2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(short[] a, int[] b, short c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, int[] c, int[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(short[] a, int[] b, short c, int d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, int[] c, int[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(short[] a, int[] b, short c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(short[] a, int[] b, short c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortLongVect.java b/hotspot/test/compiler/7119644/TestShortLongVect.java new file mode 100644 index 00000000000..d4c121f8716 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortLongVect + */ + +public class TestShortLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(short[] a, long[] b, short c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(short[] a, long[] b, short c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(short[] a, long[] b, short c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(short[] a, long[] b, short c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortVect.java b/hotspot/test/compiler/7119644/TestShortVect.java new file mode 100644 index 00000000000..d4583832158 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortVect + */ + +public class TestShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(short[] a, short b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(short[] a, short[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(short[] a, short[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(short[] a, short[] b, short c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(short[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(short[] a, short b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(short[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(short[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(short[] a, short[] b, short c, short d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(short[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(short[] a, short b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(short[] a, short[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(short[] a, short[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(short[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(short[] a, short b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(short[] a, short[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(short[] a, short[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(short[] a, short[] b, short c, short d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(short[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(short[] a, short b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(short[] a, short[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(short[] a, short[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(short[] a, short[] b, short c, short d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7169782/Test7169782.java b/hotspot/test/compiler/7169782/Test7169782.java new file mode 100644 index 00000000000..381c4c903fb --- /dev/null +++ b/hotspot/test/compiler/7169782/Test7169782.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7169782 + * @summary C2: SIGSEGV in LShiftLNode::Ideal(PhaseGVN*, bool) + * + * @run main/othervm -Xcomp -XX:CompileOnly="Test7169782::" Test7169782 + */ + +public class Test7169782 { + static long var_8; + + static { + var_8 /= (long)(1E100 + ("".startsWith("a", 0) ? 1 : 2)); + } + + public static void main(String[] args) { + System.out.println("Test passed."); + } +} diff --git a/hotspot/test/compiler/7174363/Test7174363.java b/hotspot/test/compiler/7174363/Test7174363.java new file mode 100644 index 00000000000..50f784da1eb --- /dev/null +++ b/hotspot/test/compiler/7174363/Test7174363.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7174363 + * @summary crash with Arrays.copyOfRange(original, from, to) when from > original.length + * + * @run main/othervm -XX:-BackgroundCompilation Test7174363 + */ + +import java.util.*; + +public class Test7174363 { + + static Object[] m(Object[] original, int from, int to) { + return Arrays.copyOfRange(original, from, to, Object[].class); + } + + static public void main(String[] args) { + Object[] orig = new Object[10]; + for (int i = 0; i < 20000; i++) { + try { + m(orig, 15, 20); + } catch(ArrayIndexOutOfBoundsException excp) {} + } + } +} diff --git a/hotspot/test/compiler/7177917/Test7177917.java b/hotspot/test/compiler/7177917/Test7177917.java new file mode 100644 index 00000000000..7d2c76490a9 --- /dev/null +++ b/hotspot/test/compiler/7177917/Test7177917.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + * + */ + +/* + * Micro-benchmark for Math.pow() and Math.exp() + */ + +import java.util.*; + +public class Test7177917 { + + static double d; + + static Random r = new Random(0); + + static long m_pow(double[][] values) { + double res = 0; + long start = System.nanoTime(); + for (int i = 0; i < values.length; i++) { + res += Math.pow(values[i][0], values[i][1]); + } + long stop = System.nanoTime(); + d = res; + return (stop - start) / 1000; + } + + static long m_exp(double[] values) { + double res = 0; + long start = System.nanoTime(); + for (int i = 0; i < values.length; i++) { + res += Math.exp(values[i]); + } + long stop = System.nanoTime(); + d = res; + return (stop - start) / 1000; + } + + static double[][] pow_values(int nb) { + double[][] res = new double[nb][2]; + for (int i = 0; i < nb; i++) { + double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin + double x = Math.abs(Double.longBitsToDouble(r.nextLong())); + while (x != x) { + x = Math.abs(Double.longBitsToDouble(r.nextLong())); + } + double logx = Math.log(x) / Math.log(2); + double y = ylogx / logx; + + res[i][0] = x; + res[i][1] = y; + } + return res; + } + + static double[] exp_values(int nb) { + double[] res = new double[nb]; + for (int i = 0; i < nb; i++) { + double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin + double x = Math.E; + double logx = Math.log(x) / Math.log(2); + double y = ylogx / logx; + res[i] = y; + } + return res; + } + + static public void main(String[] args) { + { + // warmup + double[][] warmup_values = pow_values(10); + m_pow(warmup_values); + + for (int i = 0; i < 20000; i++) { + m_pow(warmup_values); + } + // test pow perf + double[][] values = pow_values(1000000); + System.out.println("==> POW " + m_pow(values)); + + // force uncommon trap + double[][] nan_values = new double[1][2]; + nan_values[0][0] = Double.NaN; + nan_values[0][1] = Double.NaN; + m_pow(nan_values); + + // force recompilation + for (int i = 0; i < 20000; i++) { + m_pow(warmup_values); + } + + // test pow perf again + System.out.println("==> POW " + m_pow(values)); + } + { + // warmup + double[] warmup_values = exp_values(10); + m_exp(warmup_values); + + for (int i = 0; i < 20000; i++) { + m_exp(warmup_values); + } + + // test pow perf + double[] values = exp_values(1000000); + System.out.println("==> EXP " + m_exp(values)); + + // force uncommon trap + double[] nan_values = new double[1]; + nan_values[0] = Double.NaN; + m_exp(nan_values); + + // force recompilation + for (int i = 0; i < 20000; i++) { + m_exp(warmup_values); + } + + // test pow perf again + System.out.println("==> EXP " + m_exp(values)); + } + } +} diff --git a/hotspot/test/compiler/7179138/Test7179138_1.java b/hotspot/test/compiler/7179138/Test7179138_1.java new file mode 100644 index 00000000000..afa830731e3 --- /dev/null +++ b/hotspot/test/compiler/7179138/Test7179138_1.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Skip Balk. All Rights Reserved. + * 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 7179138 + * @summary Incorrect result with String concatenation optimization + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation Test7179138_1 + * + * @author Skip Balk + */ + +public class Test7179138_1 { + public static void main(String[] args) throws Exception { + System.out.println("Java Version: " + System.getProperty("java.vm.version")); + long[] durations = new long[60]; + for (int i = 0; i < 100000; i++) { + // this empty for-loop is required to reproduce this bug + for (long duration : durations) { + // do nothing + } + { + String s = "test"; + int len = s.length(); + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + if (s.length() != len) { + System.out.println("Failed at iteration: " + i); + System.out.println("Length mismatch: " + s.length() + " <> " + len); + System.out.println("Expected: \"" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "\""); + System.out.println("Actual: \"" + s + "\""); + System.exit(97); + } + } + } + } +} + diff --git a/hotspot/test/compiler/7179138/Test7179138_2.java b/hotspot/test/compiler/7179138/Test7179138_2.java new file mode 100644 index 00000000000..615c614fc30 --- /dev/null +++ b/hotspot/test/compiler/7179138/Test7179138_2.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Skip Balk. All Rights Reserved. + * 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 7179138 + * @summary Incorrect result with String concatenation optimization + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation Test7179138_2 + * + * @author Skip Balk + */ + +public class Test7179138_2 { + public static void main(String[] args) throws Exception { + System.out.println("Java Version: " + System.getProperty("java.vm.version")); + long[] durations = new long[60]; + for (int i = 0; i < 100000; i++) { + // this empty for-loop is required to reproduce this bug + for (long duration : durations) { + // do nothing + } + { + String s = "test"; + int len = s.length(); + + s = s + s; + len = len + len; + + s = s + s; + len = len + len; + + s = s + s; + len = len + len; + + if (s.length() != len) { + System.out.println("Failed at iteration: " + i); + System.out.println("Length mismatch: " + s.length() + " <> " + len); + System.out.println("Expected: \"" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "\""); + System.out.println("Actual: \"" + s + "\""); + System.exit(0); + } + } + } + } +} + diff --git a/hotspot/test/gc/6941923/test6941923.sh b/hotspot/test/gc/6941923/test6941923.sh index a9b77213227..8e108b79567 100644 --- a/hotspot/test/gc/6941923/test6941923.sh +++ b/hotspot/test/gc/6941923/test6941923.sh @@ -30,7 +30,7 @@ then exit 0 fi -$JAVA_HOME/bin/java -version > $NULL 2>&1 +$JAVA_HOME/bin/java ${TESTVMOPTS} -version > $NULL 2>&1 if [ $? != 0 ]; then echo "Wrong JAVA_HOME? JAVA_HOME: $JAVA_HOME" @@ -119,7 +119,7 @@ fi options="-Xloggc:$logfile -XX:+UseConcMarkSweepGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=$gclogsize" echo "Test gc log rotation in same file, wait for $tts minutes ...." -$JAVA_HOME/bin/java $options $testname $tts +$JAVA_HOME/bin/java ${TESTVMOPTS} $options $testname $tts if [ $? != 0 ]; then echo "$msgfail" exit -1 @@ -148,7 +148,7 @@ fi numoffiles=3 options="-Xloggc:$logfile -XX:+UseConcMarkSweepGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=$numoffiles -XX:GCLogFileSize=$gclogsize" echo "Test gc log rotation in $numoffiles files, wait for $tts minutes ...." -$JAVA_HOME/bin/java $options $testname $tts +$JAVA_HOME/bin/java ${TESTVMOPTS} $options $testname $tts if [ $? != 0 ]; then echo "$msgfail" exit -1 diff --git a/hotspot/test/gc/7168848/HumongousAlloc.java b/hotspot/test/gc/7168848/HumongousAlloc.java new file mode 100644 index 00000000000..7ac6074bd67 --- /dev/null +++ b/hotspot/test/gc/7168848/HumongousAlloc.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 Humongous.java + * @bug 7168848 + * @summary G1: humongous object allocations should initiate marking cycles when necessary + * @run main/othervm -Xms100m -Xmx100m -XX:+PrintGC -XX:G1HeapRegionSize=1m -XX:+UseG1GC HumongousAlloc + * + */ +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; +import java.util.List; + +public class HumongousAlloc { + + public static byte[] dummy; + private static int sleepFreq = 40; + private static int sleepTime = 1000; + private static double size = 0.75; + private static int iterations = 50; + private static int MB = 1024 * 1024; + + public static void allocate(int size, int sleepTime, int sleepFreq) throws InterruptedException { + System.out.println("Will allocate objects of size: " + size + + " bytes and sleep for " + sleepTime + + " ms after every " + sleepFreq + "th allocation."); + int count = 0; + while (count < iterations) { + for (int i = 0; i < sleepFreq; i++) { + dummy = new byte[size - 16]; + } + Thread.sleep(sleepTime); + count++; + } + } + + public static void main(String[] args) throws InterruptedException { + allocate((int) (size * MB), sleepTime, sleepFreq); + List collectors = ManagementFactory.getGarbageCollectorMXBeans(); + for (GarbageCollectorMXBean collector : collectors) { + if (collector.getName().contains("G1 Old")) { + long count = collector.getCollectionCount(); + if (count > 0) { + throw new RuntimeException("Failed: FullGCs should not have happened. The number of FullGC run is " + count); + } + else { + System.out.println("Passed."); + } + } + } + } +} + diff --git a/hotspot/test/runtime/6294277/SourceDebugExtension.java b/hotspot/test/runtime/6294277/SourceDebugExtension.java new file mode 100644 index 00000000000..e8cc8a8bb50 --- /dev/null +++ b/hotspot/test/runtime/6294277/SourceDebugExtension.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 6294277 + * @summary java -Xdebug crashes on SourceDebugExtension attribute larger than 64K + * @run main/othervm -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n SourceDebugExtension + */ +import java.io.*; + +public class SourceDebugExtension extends ClassLoader +{ + static final int attrSize = 68000; + static byte[] header = { +(byte)0xca, (byte)0xfe, (byte)0xba, (byte)0xbe, (byte)0x00, (byte)0x00, (byte)0x00, +(byte)0x32, (byte)0x00, (byte)0x1e, (byte)0x0a, (byte)0x00, (byte)0x06, (byte)0x00, +(byte)0x0f, (byte)0x09, (byte)0x00, (byte)0x10, (byte)0x00, (byte)0x11, (byte)0x08, +(byte)0x00, (byte)0x12, (byte)0x0a, (byte)0x00, (byte)0x13, (byte)0x00, (byte)0x14, +(byte)0x07, (byte)0x00, (byte)0x15, (byte)0x07, (byte)0x00, (byte)0x16, (byte)0x01, +(byte)0x00, (byte)0x06, (byte)0x3c, (byte)0x69, (byte)0x6e, (byte)0x69, (byte)0x74, +(byte)0x3e, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x28, (byte)0x29, (byte)0x56, +(byte)0x01, (byte)0x00, (byte)0x04, (byte)0x43, (byte)0x6f, (byte)0x64, (byte)0x65, +(byte)0x01, (byte)0x00, (byte)0x0f, (byte)0x4c, (byte)0x69, (byte)0x6e, (byte)0x65, +(byte)0x4e, (byte)0x75, (byte)0x6d, (byte)0x62, (byte)0x65, (byte)0x72, (byte)0x54, +(byte)0x61, (byte)0x62, (byte)0x6c, (byte)0x65, (byte)0x01, (byte)0x00, (byte)0x04, +(byte)0x6d, (byte)0x61, (byte)0x69, (byte)0x6e, (byte)0x01, (byte)0x00, (byte)0x16, +(byte)0x28, (byte)0x5b, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, +(byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x53, +(byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67, (byte)0x3b, (byte)0x29, +(byte)0x56, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x53, (byte)0x6f, (byte)0x75, +(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x46, (byte)0x69, (byte)0x6c, (byte)0x65, +(byte)0x01, (byte)0x00, (byte)0x0d, (byte)0x54, (byte)0x65, (byte)0x73, (byte)0x74, +(byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x2e, (byte)0x6a, (byte)0x61, +(byte)0x76, (byte)0x61, (byte)0x0c, (byte)0x00, (byte)0x07, (byte)0x00, (byte)0x08, +(byte)0x07, (byte)0x00, (byte)0x17, (byte)0x0c, (byte)0x00, (byte)0x18, (byte)0x00, +(byte)0x19, (byte)0x01, (byte)0x00, (byte)0x34, (byte)0x54, (byte)0x65, (byte)0x73, +(byte)0x74, (byte)0x20, (byte)0x70, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x72, +(byte)0x61, (byte)0x6d, (byte)0x20, (byte)0x66, (byte)0x6f, (byte)0x72, (byte)0x20, +(byte)0x62, (byte)0x69, (byte)0x67, (byte)0x20, (byte)0x53, (byte)0x6f, (byte)0x75, +(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65, (byte)0x62, (byte)0x75, +(byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65, (byte)0x6e, (byte)0x73, +(byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x20, (byte)0x61, (byte)0x74, (byte)0x74, +(byte)0x72, (byte)0x69, (byte)0x62, (byte)0x75, (byte)0x74, (byte)0x65, (byte)0x73, +(byte)0x07, (byte)0x00, (byte)0x1a, (byte)0x0c, (byte)0x00, (byte)0x1b, (byte)0x00, +(byte)0x1c, (byte)0x01, (byte)0x00, (byte)0x08, (byte)0x54, (byte)0x65, (byte)0x73, +(byte)0x74, (byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x01, (byte)0x00, +(byte)0x10, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, +(byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x4f, (byte)0x62, (byte)0x6a, +(byte)0x65, (byte)0x63, (byte)0x74, (byte)0x01, (byte)0x00, (byte)0x10, (byte)0x6a, +(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, +(byte)0x67, (byte)0x2f, (byte)0x53, (byte)0x79, (byte)0x73, (byte)0x74, (byte)0x65, +(byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x6f, (byte)0x75, (byte)0x74, +(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, +(byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f, (byte)0x50, (byte)0x72, +(byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x65, +(byte)0x61, (byte)0x6d, (byte)0x3b, (byte)0x01, (byte)0x00, (byte)0x13, (byte)0x6a, +(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f, +(byte)0x50, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74, +(byte)0x72, (byte)0x65, (byte)0x61, (byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x07, +(byte)0x70, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x6c, (byte)0x6e, +(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x28, (byte)0x4c, (byte)0x6a, (byte)0x61, +(byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, +(byte)0x2f, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67, +(byte)0x3b, (byte)0x29, (byte)0x56, (byte)0x01, (byte)0x00, (byte)0x14, (byte)0x53, +(byte)0x6f, (byte)0x75, (byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65, +(byte)0x62, (byte)0x75, (byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65, +(byte)0x6e, (byte)0x73, (byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x00, (byte)0x21, +(byte)0x00, (byte)0x05, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x00, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x07, +(byte)0x00, (byte)0x08, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x05, (byte)0x2a, (byte)0xb7, (byte)0x00, +(byte)0x01, (byte)0xb1, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, +(byte)0x0a, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x01, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00, +(byte)0x0b, (byte)0x00, (byte)0x0c, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x25, (byte)0x00, (byte)0x02, (byte)0x00, +(byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x09, (byte)0xb2, (byte)0x00, +(byte)0x02, (byte)0x12, (byte)0x03, (byte)0xb6, (byte)0x00, (byte)0x04, (byte)0xb1, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x0a, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, +(byte)0x00, (byte)0x03, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x04, (byte)0x00, +(byte)0x02, (byte)0x00, (byte)0x0d, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, +(byte)0x00, (byte)0x0e, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x09, +(byte)0xa0 + }; + + public static void main(String[] args) throws Exception + { + try { + SourceDebugExtension loader = new SourceDebugExtension(); + /* The test program creates a class file from the header + * stored above and adding the content of a SourceDebugExtension + * attribute made of the character 0x02 repeated 68000 times. + * This attribute doesn't follow the syntax specified in JSR 45 + * but it's fine because this test just checks that the JVM is + * able to load a class file with a SourceDebugExtension + * attribute bigger than 64KB. The JVM doesn't try to + * parse the content of the attribute, this work is performed + * by the SA or external tools. + */ + byte[] buf = new byte[header.length + attrSize]; + for(int i=0; itest.out 2>&1 +${JAVA} ${TESTVMOPTS} -Xverify -Xint -cp . bug_21227 >test.out 2>&1 grep "loader constraint" test.out exit $? diff --git a/hotspot/test/runtime/6878713/Test6878713.sh b/hotspot/test/runtime/6878713/Test6878713.sh index 54b01146872..eb2064de233 100644 --- a/hotspot/test/runtime/6878713/Test6878713.sh +++ b/hotspot/test/runtime/6878713/Test6878713.sh @@ -25,8 +25,6 @@ then exit 1 fi -BIT_FLAG="" - # set platform-dependent variables OS=`uname -s` case "$OS" in @@ -34,12 +32,6 @@ case "$OS" in NULL=/dev/null PS=":" FS="/" - ## for solaris, linux it's HOME - FILE_LOCATION=$HOME - if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ] - then - BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT | grep -v '^#'` - fi ;; Windows_* ) NULL=NUL @@ -57,11 +49,11 @@ CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH THIS_DIR=`pwd` -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -version +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version ${TESTJAVA}${FS}bin${FS}jar xvf ${TESTSRC}${FS}testcase.jar -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} OOMCrashClass1960_2 > test.out 2>&1 +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} OOMCrashClass1960_2 > test.out 2>&1 if [ -s core -o -s "hs_*.log" ] then diff --git a/hotspot/test/runtime/6929067/Test6929067.sh b/hotspot/test/runtime/6929067/Test6929067.sh index 8f9e13a6f76..3e624d04eb7 100644 --- a/hotspot/test/runtime/6929067/Test6929067.sh +++ b/hotspot/test/runtime/6929067/Test6929067.sh @@ -19,8 +19,6 @@ then echo "If this is incorrect, try setting the variable manually." fi -BIT_FLAG="" - # set platform-dependent variables OS=`uname -s` case "$OS" in @@ -42,7 +40,19 @@ case "$OS" in ;; esac -LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/i386/client:/usr/openwin/lib:/usr/dt/lib:/usr/lib:$LD_LIBRARY_PATH +# Choose arch: i386 or amd64 (test is Linux-specific) +# Cannot simply look at TESTVMOPTS as -d64 is not +# passed if there is only a 64-bit JVM available. + +${TESTJAVA}/bin/java ${TESTVMOPTS} -version 2>1 | grep "64-Bit" >/dev/null +if [ "$?" = "0" ] +then + ARCH=amd64 +else + ARCH=i386 +fi + +LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${ARCH}/client:/usr/openwin/lib:/usr/dt/lib:/usr/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH THIS_DIR=`pwd` @@ -51,10 +61,10 @@ cp ${TESTSRC}${FS}invoke.c ${THIS_DIR} cp ${TESTSRC}${FS}T.java ${THIS_DIR} -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -fullversion +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -fullversion ${TESTJAVA}${FS}bin${FS}javac T.java -gcc -o invoke -I${TESTJAVA}/include -I${TESTJAVA}/include/linux invoke.c ${TESTJAVA}/jre/lib/i386/client/libjvm.so +gcc -o invoke -I${TESTJAVA}/include -I${TESTJAVA}/include/linux invoke.c ${TESTJAVA}/jre/lib/${ARCH}/client/libjvm.so ./invoke exit $? diff --git a/hotspot/test/runtime/7020373/Test7020373.sh b/hotspot/test/runtime/7020373/Test7020373.sh index 7f6b03c8fe7..54b8b32974e 100644 --- a/hotspot/test/runtime/7020373/Test7020373.sh +++ b/hotspot/test/runtime/7020373/Test7020373.sh @@ -2,10 +2,10 @@ ## ## @test -## @bug 7020373 7055247 +## @bug 7020373 7055247 7053586 7185550 ## @key cte_test ## @summary JSR rewriting can overflow memory address size variables -## @ignore Ignore it until 7053586 fixed +## @ignore Ignore it as 7053586 test uses lots of memory. See bug report for detail. ## @run shell Test7020373.sh ## @@ -27,21 +27,13 @@ then exit 1 fi -BIT_FLAG="" - # set platform-dependent variables OS=`uname -s` case "$OS" in - SunOS | Linux ) + SunOS | Linux | Darwin ) NULL=/dev/null PS=":" FS="/" - ## for solaris, linux it's HOME - FILE_LOCATION=$HOME - if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ] - then - BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT | grep -v '^#'` - fi ;; Windows_* ) NULL=NUL @@ -59,11 +51,11 @@ CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH THIS_DIR=`pwd` -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -version +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version ${TESTJAVA}${FS}bin${FS}jar xvf ${TESTSRC}${FS}testcase.jar -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} OOMCrashClass4000_1 > test.out 2>&1 +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} OOMCrashClass4000_1 > test.out 2>&1 cat test.out @@ -74,7 +66,7 @@ then echo "Test Failed" exit 1 else - grep "java.lang.LinkageError" test.out + egrep "java.lang.LinkageError|java.lang.NoSuchMethodError|Main method not found in class OOMCrashClass4000_1|insufficient memory" test.out if [ $? = 0 ] then echo "Test Passed" diff --git a/hotspot/test/runtime/7020373/testcase.jar b/hotspot/test/runtime/7020373/testcase.jar new file mode 100644 index 00000000000..287b73ab186 Binary files /dev/null and b/hotspot/test/runtime/7020373/testcase.jar differ diff --git a/hotspot/test/runtime/7051189/Xchecksig.sh b/hotspot/test/runtime/7051189/Xchecksig.sh index 410cdb9b335..0bf3fe9f21c 100644 --- a/hotspot/test/runtime/7051189/Xchecksig.sh +++ b/hotspot/test/runtime/7051189/Xchecksig.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -41,18 +41,10 @@ then fi -BIT_FLAG="" - OS=`uname -s` case "$OS" in SunOS | Linux ) FS="/" - ## for solaris, linux it's HOME - FILE_LOCATION=$HOME - if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ] - then - BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT` - fi ;; Windows_* ) printf "Not testing libjsig.so on Windows. PASSED.\n " @@ -69,20 +61,16 @@ JAVA=${TESTJAVA}${FS}bin${FS}java # LD_PRELOAD arch needs to match the binary we run, so run the java # 64-bit binary directly if we are testing 64-bit (bin/ARCH/java). - -# However JPRT runs: .../solaris_x64_5.10-debug/bin/java -# ..which is 32-bit, when it has built the 64-bit version to test. -# -# How does this script know we are meant to run the 64-bit version? -# Can check for the path of the binary containing "x64" on Solaris. +# Check if TESTVMOPS contains -d64, but cannot use +# java ${TESTVMOPS} to run "java -d64" with LD_PRELOAD. if [ ${OS} -eq "SunOS" ] then - printf "SunOS test JAVA=${JAVA}" - printf ${JAVA} | grep x64 > /dev/null + printf "SunOS test TESTVMOPTS = ${TESTVMOPTS}" + printf ${TESTVMOPTS} | grep d64 > /dev/null if [ $? -eq 0 ] then - printf "SunOS x64 test, forcing -d64\n" + printf "SunOS 64-bit test\n" BIT_FLAG=-d64 fi fi @@ -127,20 +115,19 @@ then printf "Skipping test: libjsig missing for given architecture: ${LIBJSIG}\n" exit 0 fi -# Use java -version to test, java version info appeas on stderr, +# Use java -version to test, java version info appears on stderr, # the libjsig message we are removing appears on stdout. # grep returns zero meaning found, non-zero means not found: -LD_PRELOAD=${LIBJSIG} ${JAVA} ${BIT_FLAG} -Xcheck:jni -version 2>&1 | grep "libjsig is activated" - +LD_PRELOAD=${LIBJSIG} ${JAVA} ${TESTVMOPTS} -Xcheck:jni -version 2>&1 | grep "libjsig is activated" if [ $? -eq 0 ]; then printf "Failed: -Xcheck:jni prints message when libjsig.so is loaded.\n" exit 1 fi -LD_PRELOAD=${LIBJSIG} ${JAVA} ${BIT_FLAG} -Xcheck:jni -verbose:jni -version 2>&1 | grep "libjsig is activated" +LD_PRELOAD=${LIBJSIG} ${JAVA} ${TESTVMOPTS} -Xcheck:jni -verbose:jni -version 2>&1 | grep "libjsig is activated" if [ $? != 0 ]; then printf "Failed: -Xcheck:jni does not print message when libjsig.so is loaded and -verbose:jni is set.\n" exit 1 diff --git a/hotspot/test/runtime/7158800/BadUtf8.java b/hotspot/test/runtime/7158800/BadUtf8.java new file mode 100644 index 00000000000..8b79762a365 --- /dev/null +++ b/hotspot/test/runtime/7158800/BadUtf8.java @@ -0,0 +1,1254 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7158800 + * @summary Test that 1200 symbols that hash to the same value triggers + * the symbol table alternate hashing mechanism. There isn't actually a + * way to verify this. + */ +// +// Generate large number of strings that hash to the same value +// to slow down symbol table lookup. + +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; + +public class BadUtf8 { +static String[] strings = { + "EOcLKvbddZyPxYpb", + "DncLKvbdPxmAGrqj", + "DoCjjvbdpxoIHQdY", + "EPCkKvbdqYoHfqEY", + "DnbkKvbdezvYdiUX", + "DnbjjvbdeEoRbXCj", + "EObkKvbdbsCkUEKB", + "EOcLKvbdnUtyjiqf", + "DncLKvbdRWnDcMHc", + "DoCkKvbdrSUkOLAm", + "DncLKvbdfNFwGmJk", + "EPDLKvbdvAdYroFI", + "DoDLKvbdiGibyViu", + "DncLKvbdYqNEhmFR", + "DoCkKvbdEARhlzXX", + "DncLKvbdSZjHsCvA", + "DncKjvbdqTsgRqkU", + "DnbjjvbdqAiFAXHd", + "EPDKjvbdGcjvJaij", + "DnbkKvbdwtldpxkn", + "DoDKjvbdYkrETnMN", + "EPCjjvbdbBWEfQQX", + "EPCjjvbduMXwAtBX", + "DncLKvbdbsCkTcia", + "DoCjjvbdczYpYZRC", + "EOcKjvbdFeiqmhsq", + "DoCkKvbdKCicQibx", + "EOcKjvbdZLrEUOLm", + "DoCjjvbdaNKbStmH", + "DoDKjvbdJbjDQjDY", + "EPCkKvbdemFwGmKL", + "EPDKjvbdZQleImEq", + "DncKjvbdZjShPfbG", + "DnbjjvbdqYnhHREY", + "DoCkKvbdaRfDIUGL", + "DoDKjvbdLrWlyuQz", + "DnbjjvbdZisHofaf", + "EObjjvbdhtydvrUb", + "DnbjjvbdRotHKGEX", + "EObjjvbdNeEThhkE", + "EPCjjvbdZtJJZESn", + "DoDKjvbdnPyxvLYb", + "EPDKjvbdeEoRbWbj", + "EOcLKvbdFxttaEXb", + "EObjjvbddwystRez", + "EPCjjvbdJpzEnenF", + "DnbkKvbdTppntuIN", + "EPCkKvbdTukpKUBR", + "DnbkKvbdhlFEOUcZ", + "EObkKvbdlhdUQuRa", + "DnbjjvbdkClKqHUg", + "EOcKjvbdqTtGqqkU", + "DncKjvbdtkwvaUBX", + "DoDKjvbdsQWOjCuf", + "DncLKvbdEKIJuwjA", + "DncKjvbdGLErcIMu", + "EOcLKvbdNPwpumfs", + "EObkKvbdnVUzLJrG", + "DoCkKvbdcTDKsdKB", + "DncKjvbdKRZdoFme", + "EOcLKvbdemFvgNKL", + "EPCkKvbdznopdblY", + "EPDLKvbdOYPVzdOU", + "DnbjjvbdsZlPsAhO", + "DoDLKvbdKCjDRKDY", + "DoCkKvbdhuZeXSVC", + "EPDKjvbdOStVgEtp", + "DncLKvbdvwMAvBWV", + "EPDKjvbdBcoaWJlf", + "EOcKjvbdZxdKODMS", + "DoCjjvbdbsCkTcjB", + "EOcLKvbdwWlAuaWV", + "DnbjjvbdFejRnJUR", + "DnbjjvbdmIdTqVSB", + "DnbkKvbdqBIeAWhE", + "DncKjvbdrMzJyMIJ", + "DoCkKvbdZGvdAOsJ", + "DncLKvbdjggLfFnL", + "DoCjjvbdYqNFJMdq", + "DoCkKvbdqZPHfqDx", + "DncLKvbdOEdThiLE", + "DoCkKvbdZirgpGaf", + "EPDLKvbdziuQPdSt", + "EObkKvbdKQyeOenF", + "DoDLKvbduaDySndh", + "DoCjjvbdVUNUGLvK", + "DncKjvbdAMhYrvzY", + "DnbkKvbdnQZxvKxb", + "EPCjjvbdBhjakJFj", + "DncLKvbdmfeYNNfy", + "DoDLKvbdjlbLydfo", + "DoDLKvbdpyPIGpcx", + "EOcLKvbdnVUzLJqf", + "DoCjjvbdmJETqVSB", + "DoDLKvbdJTZAsMxM", + "DoCkKvbdnQZxvLZC", + "DoDKjvbdACqwizJQ", + "DncKjvbdvBEZSoFI", + "DncKjvbdGckVjCJj", + "DncLKvbdiMFENtcZ", + "Dnbjjvbdjuvmcaww", + "DnbkKvbdZyEKNblS", + "DoCjjvbduMYXBUBX", + "DnbjjvbdFWYopNJe", + "DoDKjvbdelfXGljL", + "DnbjjvbdakLenmcA", + "EPDKjvbdfILWRmpg", + "EObjjvbdSLYeuHLT", + "DoCjjvbdMfbolotk", + "EPDLKvbdrRuKnKaN", + "EOcKjvbdyzdnRhIh", + "DoDLKvbdGAoRZJzm", + "DoCjjvbdhlFDnUcZ", + "EPDLKvbdmpZyVkYb", + "DncKjvbdTpqPUuIN", + "DncLKvbdHDjvJaij", + "EPDLKvbdYlRcsmkm", + "EPDLKvbdvlvAMdFN", + "DncKjvbdIsZArmYM", + "EOcLKvbdegjuqnQg", + "EOcLKvbdZQmFJNFR", + "DoCjjvbdZxdJmcMS", + "EPCkKvbdlZTSTYgU", + "DoDKjvbdqceJPnWB", + "DncLKvbdVgwuxGxz", + "DncKjvbdDnbkLXDE", + "EPDLKvbdatbHYKsh", + "DncKjvbdEzsqFLbi", + "EPDLKvbdnVVZkKRf", + "EOcKjvbdKeegbBQu", + "EPCkKvbdKfGHaaRV", + "EPDKjvbdmIctRVRa", + "EPCjjvbdRMxBxnUz", + "DnbjjvbdJYTbILpp", + "EPCkKvbdTAEiHbPE", + "EOcLKvbdfelZnGgA", + "DoCjjvbdOStWGeUp", + "EOcLKvbdemGXHNJk", + "DoDKjvbdYTMAmUOx", + "EPCkKvbdpyOhGpcx", + "EPCkKvbdAMgxsWzY", + "DnbjjvbdYkrETnMN", + "EPDLKvbdUQqPUtgm", + "DncKjvbdehKurNqH", + "DoCjjvbdZMSETnLm", + "DoDKjvbdIHGyyXwg", + "EObjjvbdXGYzUAPT", + "DoCjjvbdhbPCeWqR", + "DoCkKvbdKNADzGuB", + "DnbjjvbdFeirOJTq", + "DncLKvbdaRecHtFk", + "DnbkKvbdzoPpeClY", + "EObkKvbdZRMeJMeR", + "DnbjjvbdYfvdAPSi", + "DncLKvbdJcKCqJcY", + "EOcLKvbdqvokbhyR", + "DoDLKvbdrRuLNjaN", + "DoCjjvbdTlWPBWOi", + "DoCkKvbdjvWnEBxX", + "DoDLKvbdTkunaVoJ", + "DoCkKvbdQZNAHTSK", + "EObjjvbdqwPkbhyR", + "EOcLKvbdNHDPlpUk", + "DncLKvbdIHHZxxYH", + "DncLKvbdtkxXAtAw", + "DncLKvbdSCEFMJZL", + "DnbjjvbdZQmEhldq", + "DoCjjvbdNGbolotk", + "DnbjjvbdnCKWwnmu", + "DncLKvbdzHZMANEw", + "DoDKjvbdmttykJrG", + "DnbkKvbdlrZUzSci", + "EPDKjvbdSKyGVHKs", + "DoCjjvbdKVuGEFGi", + "EPCjjvbdCIkBkIej", + "DncLKvbdzHZMAMeX", + "DnbkKvbdaSFbgsek", + "DncLKvbdHDjujBij", + "DoDKjvbdGZVUaDwb", + "DnbjjvbdZnnJFEzK", + "DoCkKvbdtcDUwWOo", + "DoCkKvbdlBMoNALA", + "EOcKjvbdNsUWHFUp", + "DoDLKvbdVUNUFlVj", + "DnbkKvbdhkdcnUcZ", + "DncLKvbdLiBkqYAS", + "EOcKjvbdzoPpdcLx", + "EPDKjvbdijGIJmXr", + "EOcKjvbdZisHofaf", + "DoDLKvbdeOdrkUUS", + "DoDLKvbdnPyxvKxb", + "EPDKjvbdIxUBhMRQ", + "DncLKvbdlhctRUqa", + "DoDLKvbdmgFXlnGy", + "DncKjvbdCJKbKiGK", + "EOcLKvbddndrjtUS", + "DnbjjvbdkDLjqGuH", + "DncKjvbdmIcsptqa", + "DoCkKvbdvvlAvBWV", + "EObjjvbdjblLQftg", + "DnbjjvbdCEQBWKMf", + "DnbjjvbdBdPaVilf", + "DoCkKvbdZxcjODLr", + "DoCkKvbdEObjjwCd", + "EPDKjvbdyTNhlqbH", + "EPCkKvbdUMVoAvPJ", + "DncKjvbdUxhUZjoO", + "DncKjvbdqqtjmkAm", + "DncKjvbdKfGICBRV", + "EPCjjvbdVrOXaeLc", + "EPDLKvbdwXLaWBWV", + "EPCkKvbdjblKqHUg", + "DnbjjvbduDCuWuoP", + "EPDKjvbdNGbpMouL", + "EObjjvbdBcoaVjNG", + "DncLKvbdrWpMDIxq", + "DncLKvbdhaoCdwRR", + "DnbkKvbdFxtuBDwb", + "DncKjvbdIjEAKPgE", + "EOcLKvbduCbuXVoP", + "DoDKjvbdZtIiZDsO", + "DnbjjvbdEztRElCi", + "DncLKvbdxmsHwsJD", + "DnbjjvbdRbEElIxk", + "DoDKjvbdWHwvXgYz", + "EOcKjvbdQlwbYnUz", + "EOcLKvbdVTltFkuj", + "DncKjvbdliETptqa", + "DnbkKvbddoErjtTr", + "DoCkKvbdgPazvdXh", + "DncKjvbdySmhlqag", + "DoCjjvbdbPgHDkzd", + "DoCkKvbdFWZPomKF", + "EObjjvbdssSSxydc", + "EObjjvbdzQnliJwA", + "EObkKvbdKCjCpibx", + "EPCjjvbdpyOhHREY", + "DncLKvbddjJqutzn", + "EObkKvbdBdQAujMf", + "EPCkKvbdLAjflbXq", + "DncLKvbdLBLGlaxR", + "DoDLKvbdrpWPJbuf", + "DoCjjvbdEKHiuxKA", + "DoCjjvbdXsMAlsnx", + "EObkKvbdptTgSSLU", + "DoDKjvbdnHFXmNfy", + "DncKjvbdCJKbKhej", + "EPCjjvbdhlEdOUby", + "EOcKjvbdKWUfEFGi", + "DoDKjvbdZQmFJMdq", + "EPCjjvbdiGjDZWKV", + "EObkKvbdVAbQrprZ", + "DoDKjvbdfekzNgHA", + "DoDLKvbdnHEwlmgZ", + "DncKjvbdwzHeexEr", + "DoCjjvbdmpZxujyC", + "EPDKjvbdwMvAMcdm", + "DoCjjvbdfHkVrNqH", + "EPCkKvbdYzbfRiuy", + "EPCkKvbdZtIiZDrn", + "DnbjjvbdjvWnDbYX", + "DoCjjvbdOStVgEtp", + "EPDLKvbdZMSETmlN", + "EPDKjvbdBhjajhej", + "EPCjjvbddoFTLUUS", + "DnbkKvbdsQVoJcWG", + "EPCjjvbdrEFJQNvB", + "DoCjjvbdMpYRWOGs", + "EOcLKvbdZirgpHBf", + "EPDLKvbdyOTIXsJD", + "DoCkKvbdKRZdnfNe", + "DnbjjvbdbBWFFoow", + "EPCjjvbdgFlZnHHA", + "DnbkKvbdGGJrOIsq", + "DoDLKvbduDCtwWPP", + "EObjjvbdNddUIhjd", + "DnbjjvbdxsNiMqag", + "EObjjvbddeOrCWbj", + "EObjjvbdPxmAGsRj", + "EOcLKvbddeOrCXDK", + "DoDLKvbddeOrBwCj", + "DoCjjvbdVqnYCElD", + "DnbkKvbdUyIUZjoO", + "EObjjvbdeFOrCXDK", + "EObkKvbdVrNxCFLc", + "EObjjvbdTfzmkwWF", + "EOcKjvbdIHGzZYYH", + "EPDKjvbdtbbuXWPP", + "DoCjjvbdZisIQHBf", + "EObjjvbdbsCkUDjB", + "EPCkKvbdVwJXudFH", + "EPDKjvbdrouoKDVf", + "EPCkKvbdFyVVBEYC", + "DncLKvbdZnnIeEzK", + "EPDLKvbdxVNFQxkn", + "DoDKjvbdpxnggRDx", + "DoDLKvbdqZOgfpcx", + "DncKjvbdCIjakJGK", + "EPCkKvbdCJLBjhej", + "DoDLKvbdnPzYvKxb", + "EOcKjvbdqTsgSRkU", + "EOcLKvbdLBLGlaxR", + "DoDLKvbdcbTMrAUN", + "DncLKvbdzitoodSt", + "DoDKjvbdJvUfDdfi", + "EOcLKvbdHDjvKCJj", + "EPCkKvbdeOeTKssr", + "DnbkKvbdlYrqsYft", + "DncLKvbdiiehKMxS", + "DncKjvbdURQoVUhN", + "DnbkKvbduMYXBUAw", + "DoDLKvbdSPtHJfEX", + "EObkKvbdqBJFAWgd", + "EOcKjvbdFpATWgFy", + "DoDLKvbdBsBDTfXS", + "DncKjvbdjhHLfFmk", + "DoCjjvbdCJKakIfK", + "DnbkKvbddoFSjtTr", + "EObkKvbdANIYsWzY", + "EObjjvbdCTAbtFvr", + "EObjjvbdrRtkOLAm", + "DnbkKvbdkxsSTYgU", + "DoCjjvbdnBiwXnmu", + "EObjjvbdwtmEqYlO", + "EPDKjvbdrylQTAhO", + "DoDLKvbdtbbtvvOo", + "EPCjjvbdZLrETmlN", + "EPDLKvbdWXJYWDdg", + "DoCkKvbdKQzFOfOF", + "EPCjjvbdwzIFfXeS", + "DncKjvbdRjyFuHLT", + "EPDLKvbdULunaWPJ", + "DncKjvbdUxhTykOn", + "DnbkKvbdJcKCqKDY", + "EPDLKvbdcbSmSATm", + "DnbkKvbdegjurNqH", + "EPDKjvbdZjTIQGbG", + "EPCjjvbdiLddNuCy", + "DoCjjvbdZQldiNEq", + "EOcLKvbdakMGPODA", + "EObjjvbdnHEwlmgZ", + "EOcLKvbdBsAcUGXS", + "EPCkKvbdiVZdwSUb", + "EOcLKvbddCTNSAUN", + "DnbkKvbdEXxMUUUM", + "DncKjvbdYpldiMeR", + "DoDKjvbdNddTiIjd", + "DoDLKvbdZLqdUNlN", + "EPCkKvbdiBncFWpq", + "DncLKvbdiCPDEvqR", + "EOcKjvbdUyHszKoO", + "DncKjvbdhtydvqtb", + "EPCjjvbdpxoHgQcx", + "EObkKvbdkWWnDaxX", + "DnbjjvbdBhkBkJFj", + "DoCkKvbdRacdkhyL", + "EOcLKvbdZjTHpHCG", + "EPCkKvbdMowqWOGs", + "DncLKvbdegjurNpg", + "EObjjvbdfMfWfmKL", + "EPDLKvbdZirgpGaf", + "DoDLKvbdiZuFlQnG", + "DncLKvbdFxuVAcxC", + "EObkKvbdZisHofaf", + "EOcKjvbdJSyBSmYM", + "EPDLKvbdVYgtZkPO", + "EOcKjvbdRbEFMJYk", + "DncLKvbdrEFIonWB", + "DncKjvbdKDJbqJcY", + "EOcLKvbdhfjCxuiu", + "EObjjvbdLLAhWAKZ", + "DoCkKvbdRXNcblID", + "DoDLKvbdcbSmSATm", + "EOcLKvbdwWlAvAuu", + "EObkKvbdiBnbdvpq", + "DoCkKvbdNQXpumgT", + "DncLKvbdkVwOECYX", + "DnbkKvbdfoazwDxI", + "DoDLKvbdbBWFFpPw", + "DoDLKvbdvBDxsPEh", + "EPDKjvbdJqZdoFme", + "DoDLKvbdIryArmXl", + "EPCjjvbdANIZSwZx", + "EPCkKvbdVhYVxGxz", + "DncKjvbdLAjgNCYR", + "DncKjvbdxxIjCQZk", + "DncKjvbdbiNKKewY", + "EPCjjvbdlrZVZsEJ", + "EPDKjvbdIryAsMwl", + "DoCkKvbdtAHRIAAr", + "EPDKjvbdJmAEZfuB", + "EPCkKvbdZjSgogBf", + "DoDLKvbdOXnuzcnU", + "DnbkKvbdehKvRnQg", + "EObjjvbdZyDimbkr", + "DoDKjvbdmajWwoOV", + "EOcKjvbdkMalZeHP", + "EOcKjvbdIjEAJpHE", + "EPCkKvbdDihKVxKA", + "DncKjvbdNddUIiKd", + "EObjjvbdqdFIpOWB", + "DoCkKvbdxnShXsJD", + "DoDLKvbdjmBkzEfo", + "EOcLKvbdatagYLTh", + "DoCjjvbdVhYVxHYz", + "DnbjjvbdJbjDRKDY", + "EPCjjvbdLBLHNCYR", + "DnbjjvbdnGeYNOGy", + "EOcLKvbdUsmTekvK", + "EPCjjvbdtkxXBTaX", + "EPCjjvbdzoPqFCkx", + "DncKjvbdCIjbKhej", + "DncKjvbdZLqdTmkm", + "DoDKjvbdsPunicVf", + "EOcKjvbdmgFXmNgZ", + "EObkKvbdiMFENuCy", + "DoDKjvbdhanbeXRR", + "EObkKvbdACqwiyhp", + "DncKjvbdZisIQHBf", + "EPCjjvbdgQBzwDwh", + "DnbjjvbdyYJJaoyk", + "DoDKjvbdxUldqZMO", + "EObkKvbdkClLQgVH", + "EPCjjvbdZQldiMeR", + "EPDLKvbdZyEKOClS", + "EPDLKvbdcIlikFvx", + "DoDKjvbdrzMQTBHn", + "DnbjjvbdVYgtZkPO", + "DoDLKvbdHEKuiajK", + "EPCkKvbdczZQXxqC", + "DoDKjvbdrDdiQNua", + "DncLKvbdcImKLGWx", + "DoCjjvbdVYgtZkPO", + "EPDLKvbdZnnIeFZj", + "EPDKjvbdMIakqYAS", + "DoCkKvbdSLYfUgLT", + "EPDLKvbdiCObdvpq", + "DnbjjvbdRpUHKFcw", + "DoDLKvbdIHHZyYXg", + "EPCjjvbdypoMhiwA", + "DnbkKvbdCEPaVjMf", + "DnbkKvbderAvzlDP", + "DnbkKvbdZQleImFR", + "EOcKjvbdKRZdneme", + "DoDLKvbdiBnbeXQq", + "DncLKvbdEPDKjvcE", + "EOcLKvbdauCGwkTh", + "DncLKvbdEvZQPmJe", + "EPCkKvbdURQnuVIN", + "DncLKvbdegjvSOQg", + "EPCjjvbdKaKgMawq", + "DnbkKvbdRzKISbvA", + "DncLKvbdiLdcnUcZ", + "EPDLKvbdkDMKpfuH", + "DoDLKvbdRbDdkhyL", + "DnbjjvbdDwxMUUTl", + "DnbkKvbdrpWPKCuf", + "DnbkKvbdNVSqjmAX", + "DoDKjvbdRbDeMIxk", + "EOcLKvbdcyxpXyRC", + "DncLKvbdRMwbYnUz", + "EObjjvbdqlzJxlHi", + "DoCkKvbdJYUCIMQp", + "DncLKvbdLZQjSzuG", + "EOcKjvbdxVNEqYkn", + "DnbkKvbdZoOIeFZj", + "DoCjjvbdBraCtFwS", + "EOcLKvbdliDsqVSB", + "EPCkKvbdeATqNXif", + "DncLKvbdkMbLydgP", + "EObjjvbdZxdJmbkr", + "DoCjjvbdraellHLZ", + "EObkKvbduDCuWvPP", + "DoCkKvbdpstGrSLU", + "DoCjjvbdLGFgbBQu", + "DnbkKvbdhtzFWquC", + "EObjjvbdoAKztHdO", + "EPDLKvbdatafxKtI", + "EPDKjvbdkWXNcaww", + "DoCkKvbdwkXEHzzG", + "EObkKvbdmgEwmNgZ", + "DncKjvbdBiLCLJFj", + "DoCjjvbdeOdsKssr", + "EOcLKvbdfILWSORH", + "EObkKvbdCDpAujMf", + "EPDKjvbdKDKDQibx", + "DoDKjvbdVUMtGLuj", + "EObkKvbdrXQMCiYq", + "DncKjvbdePEsLTtS", + "DncLKvbdDxYLtUTl", + "EPCkKvbdGYuVBEYC", + "DncLKvbdNeEUIiKd", + "EPCkKvbdpxoIHRDx", + "EObjjvbdFkEsDHlu", + "EObjjvbdssSSxzFD", + "DoCkKvbdUtNTfMVj", + "DnbjjvbdJcKDRKDY", + "DncKjvbdqiAKEmOe", + "DoDKjvbdtlXwAtBX", + "DnbkKvbdxmsIYTIc", + "EObkKvbdLrXMzUpz", + "DoCjjvbdkxsSSxft", + "DncKjvbdQlwaxnUz", + "EObkKvbdjhGlFfNk", + "EPCkKvbdxsNhmRag", + "DoDLKvbdMfcPmQUk", + "DoDKjvbdQvnEDLhD", + "EObjjvbdVgxVxHYz", + "DoDLKvbdlrYtyrdJ", + "DoCjjvbdezvYeIsw", + "DncLKvbdNddTiIjd", + "EPDLKvbdGGJrNiUR", + "EPDLKvbdRzJhTDWA", + "EPCjjvbdvvkaWBVu", + "EOcKjvbdRXNdCkgc", + "EOcKjvbdQZNAHTSK", + "EPCkKvbdsCGNLfkZ", + "EOcLKvbdDwwktTsl", + "EOcLKvbdqlzJyLgi", + "EOcLKvbdxsNiMqag", + "EOcLKvbdhzVFlROG", + "EOcKjvbdEztRFMCi", + "DnbkKvbdqiAJdmPF", + "EPDLKvbdjcMKqGtg", + "EObkKvbdTlWOaWOi", + "EPDLKvbdURRPUuHm", + "DoDKjvbdelfWgNKL", + "EOcLKvbdGAnqZJzm", + "EObjjvbdGZUuAdXb", + "DoDLKvbduLwwAtAw", + "DoCjjvbdZjTIQGbG", + "EPCjjvbdRNXbYnUz", + "EPDLKvbdiLeENtby", + "EObjjvbdMowpunGs", + "EOcKjvbdbiNJjevx", + "DoDKjvbdEYYLstTl", + "DoDLKvbdqUTfrRjt", + "DoDKjvbdbsCkUEJa", + "DoDKjvbdXsMBNUPY", + "EPCjjvbdRNXaxnUz", + "DoDLKvbdNGcQNQUk", + "DnbjjvbdEARiMywX", + "EPDKjvbdSKxfUfkT", + "DncKjvbdhtyeXRtb", + "DncKjvbdZLqcsnLm", + "EObkKvbdZnmheEzK", + "EObjjvbdtbcUvuno", + "DnbjjvbdrzMQTBHn", + "DnbjjvbdDwwktTsl", + "EPDKjvbdkxsSTYgU", + "DoDKjvbdIryArlxM", + "DoDKjvbdnBivxOnV", + "DoDKjvbdeATplwif", + "EOcLKvbdKeegbApu", + "EPCjjvbdMgDQMotk", + "DoCjjvbduCbtwWOo", + "DnbkKvbdyNsHwrhc", + "DnbkKvbdtvNxJpsA", + "EOcLKvbdqAheAWgd", + "DoCkKvbdURQoUtgm", + "EOcKjvbdqceIpOWB", + "DoCkKvbdVwIwudFH", + "DnbkKvbdbLMFnmcA", + "EOcLKvbdZjTHpHBf", + "EOcKjvbdRXNdCkhD", + "EPDLKvbdiHJcZViu", + "DoCjjvbdxxIjCPzL", + "DnbkKvbdBcpBWJmG", + "EPCkKvbdZyEKOCkr", + "EPDKjvbdOTUWHFVQ", + "DoCjjvbdIGgZxwwg", + "EPDLKvbdFjeSbhMu", + "EPDLKvbdhgKCxvJu", + "EOcLKvbdNsUWGdtp", + "EPDKjvbduVnXipsA", + "DncLKvbdGYuVBEXb", + "EPDLKvbdZtIhyESn", + "DoDKjvbdZxdJmcLr", + "DoCjjvbdUsltGLuj", + "DoDKjvbdDoDLKvbd", + "DncLKvbdrDdhpNvB", + "EPDLKvbdKCjDRJbx", + "DoDLKvbdxLWdHzyf", + "EObkKvbdrzMQTAhO", + "EOcLKvbdOFDtJJKd", + "EPCkKvbdrSVKmjaN", + "EOcKjvbdWWiYVdEg", + "EOcKjvbdWWhwvDdg", + "DncKjvbdpstHRqjt", + "EPCkKvbdKWVFceGi", + "DoCkKvbdZjShPfbG", + "DoCkKvbdSxKlNzkY", + "EPDLKvbdIwtCHkqQ", + "EOcKjvbdsCGNLgLZ", + "DncKjvbdzaAOfgCM", + "DoDLKvbdxmrhYSiD", + "DncLKvbdfMfWgMjL", + "EPDKjvbdqFdEsuaI", + "EOcLKvbdiLeDnUcZ", + "DoCjjvbdKVuFceHJ", + "DoCjjvbdfekzNgHA", + "EOcKjvbdOFEThiLE", + "EPDLKvbdqceJPnWB", + "DoDLKvbduCbtwWOo", + "DncKjvbdTqROtuIN", + "DncKjvbdpedFUWBI", + "DoDLKvbdrEFJQNua", + "DoDLKvbdyXhjCPyk", + "EPCkKvbdJYUBhLqQ", + "EPCkKvbdtcCuXVno", + "DoDLKvbdZLrEUOLm", + "EPCkKvbdpstGrRjt", + "DncLKvbddePSCXCj", + "EObkKvbdauCHXjsh", + "DoDLKvbdkHfkefNk", + "EObjjvbdMRwMzUpz", + "EObjjvbdaMkCTVNH", + "DoCkKvbdGGJrNhtR", + "EPDLKvbdvBDxrneI", + "EPDLKvbdIHHZxwxH", + "EOcLKvbdrJAJdmPF", + "EOcKjvbdGZUuAdXb", + "EOcLKvbdbUbHYLUI", + "DnbjjvbdJzofYEAN", + "EPDKjvbdFxtuBDxC", + "DnbkKvbdQvnDbkgc", + "EPDKjvbdJmADzGta", + "DoDKjvbdZRMdhleR", + "DnbkKvbdsrqsZZeD", + "EObkKvbdrovPJbuf", + "EPCjjvbddeOqbXCj", + "EObjjvbdtcDVXVoP", + "DncKjvbdMfbpNQVL", + "DoCkKvbdhbPCeXQq", + "DoCkKvbdNHComQVL", + "EObjjvbdvBDxroFI", + "EPCjjvbdnBivwoNu", + "EObjjvbdbhljKewY", + "EPDKjvbdZyDimcMS", + "EObkKvbdWSOXbElD", + "EOcKjvbdTfznMXVe", + "EPCjjvbdZtJJYcsO", + "DoCjjvbdRjxfVHLT", + "DoCkKvbdVTltGMVj", + "DncKjvbdYfwEAOri", + "DncKjvbdYkrEUOMN", + "EObkKvbdqGEEsuaI", + "DncLKvbdjJfHimXr", + "EPDLKvbddndsLUTr", + "DnbkKvbdqBJFAWhE", + "EPDLKvbdEOcKjwDE", + "EPCkKvbdtvOYJqTA", + "DncLKvbdkyTRsZHU", + "DoCjjvbdTppnuVIN", + "DncLKvbdwyhFeweS", + "DncKjvbdsBelkgKy", + "DoCjjvbdKDKCqJcY", + "DoCjjvbdkClKqHVH", + "DoCjjvbdcTCjtDia", + "EPDLKvbdUVkpJtAq", + "EPDLKvbdRyjITCvA", + "DnbjjvbdJuuFcdgJ", + "DoDKjvbdrJAJdmOe", + "DncKjvbdJcJbqKCx", + "DoDLKvbdJcJbqJcY", + "DoDKjvbdeEoSCXDK", + "DoDLKvbdSwjlNzkY", + "EObjjvbdzitopDrt", + "DoCkKvbdKWVGEEgJ", + "DncKjvbdpssfqrKt", + "EOcLKvbdUMWPBVoJ", + "DncKjvbdyzdmrIIh", + "EPCjjvbdxUldqZLn", + "DoDLKvbdySnImRbH", + "DoCjjvbdGdKvJaij", + "DoCkKvbdxZgeewdr", + "EObkKvbdiLddNuDZ", + "DnbjjvbdSCDdkiZL", + "DncKjvbdznpREcMY", + "EOcLKvbdaRebhTfL", + "DnbjjvbdZQldiMdq", + "EPCjjvbdbrbjtEKB", + "EOcKjvbdEARiMzXX", + "DoDLKvbdXrkaNTnx", + "EPCkKvbdQZNAHTRj", + "DoDLKvbdEzspeLcJ", + "EPCjjvbduVnYKRTA", + "EObjjvbdJXtBhMQp", + "EPDKjvbdeOdrjssr", + "EPCjjvbdLqwMytpz", + "EPDKjvbdUMVoBVoJ", + "DncKjvbdRpUGifDw", + "EPDLKvbdZyDinDLr", + "DnbkKvbdNrsufeVQ", + "EPCkKvbdZMSDtNlN", + "EPCkKvbdySnJNSCH", + "EPCjjvbdfMevfljL", + "DncLKvbdXsMBNTnx", + "DnbkKvbdpxoHfqDx", + "DncLKvbdUQpntthN", + "DncKjvbdIsZArlwl", + "DoDLKvbdZGwEAOsJ", + "EOcKjvbdVvhwvDdg", + "EOcLKvbduWNxJqTA", + "EPCjjvbdHEKvJaij", + "DoDKjvbdrpWOjCuf", + "DncLKvbdrpWOjDVf", + "DoCjjvbdIHGzYwwg", + "DoDLKvbdpxoIGqEY", + "DoDLKvbdJcJbqKDY", + "DoCjjvbdRWmdClHc", + "EPCjjvbdFWYopNJe", + "DncKjvbdmfdwlmfy", + "DoCkKvbdxUleQxlO", + "EObjjvbdnGdxMnGy", + "EPCjjvbdvvlAvBVu", + "DncLKvbddndsKssr", + "EObjjvbdZMRcsnLm", + "EOcKjvbdFxttaEXb", + "DncKjvbdVUNTfMVj", + "EOcLKvbdNrtWHFUp", + "DoDKjvbdwuMdqYlO", + "EPDLKvbdrXPkbhxq", + "EObjjvbdrEFIpNua", + "EObjjvbdziuQQDrt", + "EOcLKvbdqYoIGpcx", + "DnbjjvbdsQVoJcVf", + "EObkKvbdkDMKpgUg", + "EObjjvbdvBDyTPFI", + "DncKjvbduCbuWvOo", + "EPCjjvbdkVvnECYX", + "DncLKvbdZGvdAOri", + "DoCkKvbdrXPlDJZR", + "EOcLKvbduCcVWvOo", + "DoDKjvbdCEPaWJlf", + "EPDKjvbddoErjssr", + "DncKjvbdACqxKZiQ", + "EPCjjvbdUVlPitAq", + "EPDKjvbdjJfHjMxS", + "EObkKvbdAMhYsWzY", + "DoDKjvbdnBivxOmu", + "EOcLKvbdbiNKKfXY", + "EPDKjvbdYqMeIleR", + "EObkKvbdJmADygUa", + "EObjjvbdEPDLLWcE", + "EPCjjvbdrXPkcIxq", + "EOcLKvbdliDtQtqa", + "DoCjjvbdmoyxujyC", + "EPDLKvbddoFTLTsr", + "EOcLKvbdCWzdJEpW", + "DnbjjvbdrEEhpOWB", + "DoDKjvbdZLrDtNkm", + "EOcLKvbdLFfHbAqV", + "EOcKjvbdmttzLKSG", + "EOcLKvbdmbJvwoOV", + "EOcKjvbdUaCQrqSZ", + "DnbjjvbdmgExMnGy", + "EPDKjvbddndrkUUS", + "EObkKvbdDwwkstTl", + "DoCkKvbdcJMjLFwY", + "DnbjjvbdaNLBruMg", + "DoDLKvbdQYmAHTRj", + "DnbkKvbdsQWOicWG", + "EObkKvbdMRwMzUpz", + "DoDLKvbdZshiZDrn", + "EPDLKvbdnPzYujxb", + "EOcKjvbdCEQAujMf", + "EPDLKvbdKefHbApu", + "DoDLKvbdYpldiNFR", + "DoCkKvbdFWZQQNJe", + "DncLKvbdznpQeCkx", + "EOcKjvbdnQZxvKxb", + "DoCkKvbdVBBprpqy", + "DnbkKvbdZirhPfaf", + "DnbkKvbdegjvSNqH", + "EOcLKvbdqdEiPnWB", + "EObjjvbdBhkCKiGK", + "EObjjvbdxZgfGYFS", + "DnbjjvbdNQYQumgT", + "EPCjjvbdxsNhlrBg", + "DoCkKvbdQdDApRDr", + "DoCkKvbdxxIiaoyk", + "EPDKjvbdFeirNhtR", + "DoCjjvbdegjvSOQg", + "EObkKvbdqcdiQNvB", + "DncLKvbdiMEdNtcZ", + "DncLKvbdTqRPUthN", + "EPCkKvbdwygeexFS", + "DoDKjvbdyTOJMrBg", + "DncLKvbdeEoRavbj", + "EPCjjvbdtbcUvvOo", + "EObjjvbdKCicRJcY", + "EObjjvbdZyEKODMS", + "DnbjjvbdmJDtQtrB", + "DncLKvbdEARhlyvw", + "DnbjjvbdIxTbILqQ", + "EOcLKvbdwygefYFS", + "DoCjjvbdznoqFCkx", + "DoCjjvbdRpUGjGDw", + "DncKjvbdhzVGMQnG", + "EPCjjvbdhkeDnVCy", + "EObkKvbdOEdUIiKd", + "DncKjvbdrDeIomua", + "DncLKvbdiHJbxuiu", + "EPDKjvbddxZstRez", + "EPDLKvbdmSYuZrdJ", + "EObkKvbdVUNUFkvK", + "EPDLKvbdNeEUJIjd", + "DoCkKvbdiMEdNuCy", + "DoDLKvbdRDcApQcr", + "EPCjjvbdTlVoBVoJ", + "EObjjvbdLBKgNBwq", + "EPCkKvbdsCFllHKy", + "EObjjvbdnVUzLJqf", + "DoDKjvbdqrVLNkBN", + "DoCkKvbdqFcdtWBI", + "DncLKvbdbVCGxLTh", + "EOcLKvbdeFPSCXCj", + "EOcLKvbdRpTgKFdX", + "EObjjvbdznpQeDLx", + "EOcKjvbdjvXNcaxX", + "DnbjjvbdHDkWJbJj", + "DncKjvbdhkeENuDZ", + "DnbkKvbdnUtyjjSG", + "DoDKjvbdSQUHJfDw", + "DncKjvbdbUbHYLUI", + "EOcLKvbdNsTvGduQ", + "EPDLKvbdSZigsCvA", + "DncKjvbdMfcPlpUk", + "DoDLKvbdxrnIlrBg", + "DncKjvbdiLdcnVCy", + "EPCjjvbdmfeYNOHZ", + "DoCkKvbdjvWmcaxX", + "DoDKjvbdbUbHXkUI", + "DncKjvbdBhkBjiFj", + "DoDLKvbdNHColpVL", + "EOcKjvbdrykosAhO", + "DncLKvbdqGDeUVaI", + "DnbkKvbdhgJcZViu", + "DnbjjvbduLxXAtBX", + "EPCjjvbdYpleJNFR", + "EPDLKvbdQvmdClHc", + "DnbjjvbdJYTbIMRQ", + "DncLKvbdznpRFDMY", + "EOcLKvbdZnmiFEyj", + "DnbkKvbdrRuLOLAm", + "EObkKvbdhkeEOUby", + "DncLKvbdYlSEUOLm", + "DoCjjvbdhkdcmtby", + "DncLKvbdddnrCXDK", + "DoDLKvbdKaLHNCYR", + "EOcKjvbdcyxpYZQb", + "EPDLKvbdACqwjZhp", + "DoCkKvbdBsBDTevr", + "EObkKvbdeKJqvUzn", + "EObkKvbdcImJkGWx", + "DncLKvbdYSlAltOx", + "DncLKvbdlrYtyrdJ", + "EObkKvbdKxqJrztf", + "EOcKjvbdsQWPJcVf", + "DoDKjvbdkySqrxgU", + "EObjjvbdeEoRbXCj", + "EOcKjvbdHDkVjBij", + "DoDLKvbdCTBCsfXS", + "DoCjjvbdKCjDQibx", + "DoCjjvbdlhdTqUrB", + "DoDKjvbdTulQKTaR", + "DoCkKvbdRjxetfkT", + "EPCjjvbdEuyQQNKF", + "EPCjjvbdDoDKkXDE", + "DoCjjvbdsQWPJbuf", + "DoDKjvbdhuZdvqtb", + "EPDLKvbdiHKCyWJu", + "EPDLKvbdLFegaaQu", + "DoCjjvbdqZPHgRDx", + "DncKjvbdUWMPjUAq", + "DoDLKvbdTYKkmzjx", + "DoDKjvbdegjvSOQg", + "DnbkKvbdUtNTekvK", + "EObkKvbdNsTvGeVQ", + "DoDLKvbdfNFvgMjL", + "EOcLKvbdZQmEiNEq", + "EPDKjvbdBraDTfWr", + "EPDKjvbdNGcQNQVL", + "EPDLKvbdZyEKODMS", + "EOcKjvbdBvzdIdpW", + "EPCjjvbdACqwiyiQ", + "DoCjjvbddePRawCj", + "EPDKjvbdWWiXucdg", + "DoDKjvbdWexzUAPT", + "DnbjjvbdwXMBWBWV", + "EOcLKvbdUyHszLOn", + "EPCkKvbdOYOuzcnU", + "EPCkKvbdhancEwQq", + "DnbkKvbdjggLefOL", + "EPCkKvbdFjdsDIMu", + "DoDKjvbdrSUjmkBN", + "DoDLKvbdZjTIQGaf", + "DoDKjvbdMgDPmPtk", + "EPDLKvbdWRmwbFMD", + "DoCkKvbdzROmJKXA", + "DnbkKvbdrDdiQNvB", + "DnbjjvbduDCtwVoP", + "EOcLKvbdCIjbLJFj", + "EPDKjvbdXrkaMsnx", + "EPDKjvbdVhXvXfxz", + "DncKjvbdhbPDEwRR", + "DoCkKvbdpxoHgQcx", + "DoCkKvbduMXwBUBX", + "EObjjvbdNeEThhjd", + "DoCjjvbdirzhrkJz", + "DoDLKvbdaMkCTUlg", + "DncLKvbdWRnYBeLc", + "DnbjjvbdGBPRZJzm", + "EOcLKvbdeOeSjstS", + "DoDLKvbdmIctRVSB", + "DoCjjvbdZxdJnDMS", + "DoCkKvbdRpTgKFcw", + "DncLKvbdTukojTaR", + "DnbjjvbdKRZdoFme", + "DnbkKvbdURQoVUhN", + "DoDLKvbdyYJKBozL", + "EObkKvbdfNFwHMjL", + "DoDLKvbdZisIQHBf", + "EObkKvbdqFcdsuaI", + "DncLKvbdzoPqFDLx", + "DoDKjvbdSKxeuHLT", + "EPDKjvbdsBemLfjy", + "DoCjjvbdJbjCqJcY", + "DoCjjvbdNPxRVnGs", + "DncLKvbdGcjvJbKK", + "EOcKjvbdrWpMDIxq", + "EOcLKvbdQdDApQcr", + "DoDKjvbdZMRdTnLm", + "EOcLKvbddxZssrFz", + "EObjjvbdUtNTfLuj", + "EPCjjvbdLLBIWAKZ", + "DoCkKvbdgFlZmfgA", + "EPCjjvbdUVkoitAq", + "DoDKjvbdDncKjvcE", + "DoDLKvbdRpUHJfEX", + "EPDKjvbdLqvlzVQz", + "EPDKjvbdZMRdUOLm", + "EOcLKvbdCJLBkIfK", + "DncKjvbdaSFbhUFk", + "EPDLKvbdZoNheEzK", + "DncKjvbdUVlPjUAq", + "DnbkKvbdKNADyfuB", + "EObkKvbdZdwfzghb", + "EPDLKvbdZtIhxcrn", + "EObkKvbdGckViajK", + "DncLKvbdFfJqmiUR", + "DncKjvbdKWUfDdgJ", + "DoDKjvbdMtrqjmAX", + "EOcLKvbdsQWPKDVf", + "DoCjjvbdwtleRZMO", + "EObjjvbduaDxsPEh", + "EPDLKvbdKxqJrzuG", + "EOcKjvbdVAaprprZ", + "EObjjvbdEuxopMjF", + "DnbjjvbdyOTHwriD", + "EPDLKvbdrpVnibvG", + "EPDKjvbdkWWnDaww", + "DncLKvbdrXPkbiYq", + "DoDLKvbddxZssqez", + "EOcLKvbdHDkWJbJj", + "DncLKvbdEPCkLWcE", + "DnbkKvbdEXwkstTl", + "EObjjvbdqiAKEmOe", + "DncLKvbdjAQGaQGj", + "EPCjjvbdNeDtJJKd", + "EPCjjvbdvwMBWBVu", + "EPDKjvbdFejSOItR", + "EOcLKvbdNPwqWOHT", + "EPDKjvbdbsCjscia", + "EObkKvbdyYIiaoyk", + "DoDKjvbdLZQirzuG", + "EObjjvbdSLZGVGjs", + "DoCjjvbdAMgxsWzY", + "DoDLKvbdEObjjwCd", + "DnbkKvbdsPvOicWG", + "EPCkKvbdrJAKElne", + "EPCkKvbdauCGwjsh", + "DncLKvbdegkWRnQg", + "EPCkKvbdYpmEiNFR", + "DoDKjvbduaDxsPFI", + "DoCjjvbdcyxoxYqC", + "DoCkKvbdkMakzFHP", + "DnbjjvbdJbibqJbx", + "DnbkKvbdWWhxWDeH", + "DoCjjvbdssRsYzFD", + "DoDKjvbdpyPIHRDx", + "DncLKvbdwNWANDeN", + "DoDKjvbdJYUBglRQ", + "EObkKvbdXnRAYVVt", + "DoCjjvbdUWLpKTaR", + "DoDKjvbdTqROttgm", + "EPCkKvbdVqnXaeMD", + "EObjjvbdADRwiyiQ", + "DoDKjvbdlrZUyrci", + "EPDKjvbdvAdZSndh", + "DoCkKvbdzoQQeDLx", + "DnbkKvbdSQUGjFdX", + "EOcLKvbdqBJFAXIE", + "EObkKvbdSCEFLiZL", + "DnbjjvbdzoQQdcMY", + "DnbkKvbdpxngfqEY", + "DncLKvbdbsDLUEKB", + "DoCjjvbdXrlBMtOx", + "EObjjvbdKCjDQicY", + "DncLKvbdLrWlzUpz", + "EObjjvbdaaWEfQQX", + "EObjjvbdtlYWaTaX", + "DnbkKvbdMowpunGs", + "EObkKvbdSLYeuHKs", + "EObkKvbdTAEhhCOd", + "EPCkKvbdmSYtyrci", + "DncLKvbdYkqcsnLm", + "DoDLKvbdrylQTAgn", + "DncLKvbdJXtCIMRQ", + "EObkKvbdSBdElIyL", + "DoDLKvbdwygefYFS", + "DncKjvbdyXhibPzL", + "EPCjjvbduaDxsPFI", + "EObjjvbdZoNiFEzK", + "EPCjjvbdkNBkyeHP", + "EPCkKvbdWRnXadlD", + "DncLKvbdRWmdDLhD", + "DnbkKvbdmSYtzTDi", + "EOcKjvbdkVwODbXw", + "DncLKvbdQlxCZOUz", + "EObjjvbdbhlijfXY", + "EOcLKvbdXmqAXtut", + "EOcLKvbdmbKXXnnV", + "DoDKjvbdkHgMFfOL", + "EPCkKvbdfekymgHA", + "DoCjjvbdeKKRvUzn", + "DoDKjvbdkHfkefNk", + "DoCjjvbdyqPMiKXA", + "DnbjjvbdUQqOtuIN", + "EOcKjvbdEPCkKwDE", + "DoDLKvbdZRNFIleR", + "DnbjjvbdRacdlJZL", + "EOcLKvbdTukoitAq", + "EOcLKvbdZLrDtOMN", + "EOcLKvbdgKfzcGAE", + "EObjjvbdzjVQQESt", + "EOcLKvbdcIlijevx", + "EOcKjvbdGKdsDHmV", + "DncLKvbdKkBHvAJy", + "EOcKjvbdZMRctOLm", + "EPCkKvbdADRxKZiQ", + "EObjjvbdDwxLsssl", + "EPDLKvbdUxgszLPO", + "EPCkKvbdSQTfiedX", + "EPCjjvbdNeEUJIkE", + "DoDLKvbdpyPHfqDx", + "DnbkKvbdyOShXsJD", + "DncLKvbdLiBkpxAS", + "DoDKjvbdaaWEepQX", + "DoCjjvbdWSOYBeLc", + "EOcKjvbdLFegbAqV", + "EPDKjvbdffLzOGgA", + "EObkKvbdFkErbglu", + "DncLKvbdiZuFlROG", + "DncKjvbdegkWRnQg", + "DoDLKvbdQdDApRDr", + "EOcLKvbdeYZtURez", + "EObjjvbdrXQLcIxq", + "DoDLKvbdxZhGGXeS", + "DoDLKvbdGGKSOItR", + "EObjjvbdjhHLfFnL", + "EOcLKvbdUQpoUuHm", + "DoCkKvbdXrlBNUPY", + "DoDKjvbdJXtCIMRQ", + "DnbkKvbdZMSDsnLm", + "DncKjvbdCTBDUGWr", + "DncKjvbdbhlikGXY", + "DoDKjvbdXmqAYVWU", + "DnbjjvbdliDsqVRa", + "DnbkKvbdmajXYOnV", + "EObjjvbdJpyePGNe", + "DnbkKvbdCTAcUGXS", + "DoDLKvbdCDpBVjNG", + "EOcLKvbdxwhiaoyk", + "DoDKjvbdxVNFQyMO", + "EPCkKvbdVvhwvEEg", + "DnbkKvbdFWYoomJe", + "EOcKjvbdlrZUysEJ", + "EPDKjvbdqquKnKaN", + "DoCkKvbdTkunaVoJ", + "EOcLKvbdfHkVrOQg", + "EPDLKvbdiUzFWrUb", + "DoDLKvbdtAGqIABS", + "DoCkKvbdZRMdhmEq", + "DnbkKvbdNsUVfeVQ", + "EPDLKvbdqwPkbiZR", + "DoCkKvbdNUsSLNAX", + "DncKjvbdmpZxvKyC", + "EPCkKvbdLYqKSztf", + "EPDKjvbdZyEKODMS", + "EPDKjvbdNGbomPuL", + "DncKjvbdZMSDtNlN", + "EPCjjvbdTXjkmzjx", + "EObkKvbdBdQAvKMf", + "EOcLKvbdkySrTYgU", + "DnbkKvbdZoOIddzK", + "DoCkKvbdZMSDsmkm", + "EPCkKvbdCWzdIdpW", + "DncLKvbdBvzdIdov", + "DoCjjvbdaRfDHtFk", + "DnbkKvbdWeyZtAOs", + "DoDLKvbdnCJwYPOV", + "DoCjjvbdEYYLstUM", + "EOcLKvbdwtldqZMO", + "EPCjjvbdFVxoomKF", + "EObkKvbdyqPMhiwA", + "DoDLKvbdkxrrSxgU", + "DoCjjvbdeATqNYKG", + "DncLKvbdJKEAJpHE", + "DoCkKvbddndsLUTr", + "DnbjjvbdqFceUWBI", + "DoDLKvbdhkddOUby", + "DncKjvbdGKdrcIMu", + "EPCkKvbdelevflik", + "DoDKjvbdhaoDFWqR", + "DoCjjvbdYlSDsmlN", + "EPCjjvbdiZuGLpmf", + "EObkKvbdnCJvxPNu", + "DnbkKvbdhzUelRNf", + "DnbkKvbdZeYGzgiC", + "DoCkKvbdDnbkLWbd", + "DnbkKvbdnHFYMmfy", + "DoCjjvbdePEsKtTr", + "DnbjjvbdZQmEhleR", + "DnbkKvbdTkunaVoJ", + "DnbkKvbdFWZPpMjF", + "DoDKjvbdSwkMNzkY", + "EOcLKvbdwtldpyMO", + "EOcKjvbdhkdcmtby", + "DoCjjvbdNQXqWNfs", + "EPDKjvbdzjUpPdTU", + "DnbjjvbdqceJPnWB", + "EPDKjvbdUyHsyjoO", + "EPCkKvbdZshhxcsO", + "DncKjvbdqAiFAWgd", + "EObkKvbdgFkzOGgA", + "DncKjvbdmgFYNNgZ", + "DoDLKvbdDjHjWYKA", + "DnbjjvbdJbicRKCx", + "DnbkKvbdfNFwHMjL", + "EPCkKvbdWSNxBdlD", + "EPDLKvbdCJKbLJFj", + "EPDKjvbdEOcKkXDE", + "EPCkKvbdVrOYCElD", + "DnbjjvbdCIkBjhej", + "DoDLKvbddoFTKstS", + "DnbjjvbduDDVXVoP", + "EObkKvbdxwiKCPzL", + "DnbkKvbdZGvdAPTJ", + "DoDLKvbdBdPaVjNG", + "EOcKjvbdIHGzYwxH", + "DoCjjvbdGFjSNhsq", + "DnbjjvbdlYsSSxgU", + "EPCjjvbdqrUjnKaN", + "EOcLKvbdtvOXipsA", + "DoDLKvbdrounjCuf", + "DoCkKvbdFVyPomKF", + "EOcKjvbdNHCpNPtk", + "EPDLKvbdWeyZtAPT", + "EPDKjvbdjcLkQfuH", + "EOcLKvbdzHZMAMeX", + "DoCjjvbdUMWPBVni", + "EOcKjvbdHELWKBjK", + "DoDKjvbdMgComQUk", + "DnbkKvbdiGjDZWJu", + "DncKjvbdyqOmJKXA", + "DoDKjvbdVZITyjoO", + "DoCjjvbdzQoNJJwA", + "EOcLKvbdGAoQxizm", + "DoDKjvbdatagYKsh", + "EPDKjvbdSBceMJYk", + "DoDLKvbdMpYQvOHT", + "DncKjvbdiCOcFWpq", + "DoCjjvbdUGznLvvF", + "EPDLKvbdANIYrvyx", + "EPCjjvbdIwtCHkpp", + "EObkKvbdJSyBSmYM", + "EObkKvbdwuMdqYlO", + "EObjjvbdmuVZkKSG", + "DncLKvbdSPsfjFdX", + "DoDLKvbdSQUHJedX", + "DoDKjvbdiVZdwSUb", + "EPDLKvbdRjxfVGkT", + "EObjjvbdmpZyVkZC", + "DncLKvbdhzUelROG", + "EPCkKvbdxVMeRZMO", + "EOcKjvbdxxIiapZk", + "EOcKjvbdJSyBTNYM", + "EPDKjvbdMSXMzUpz", + "EObkKvbdJmADzHVB" }; + + public static void main(java.lang.String[] unused) { + try { + BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("bad.out")); + for (int i = 0; i < strings.length; i++) { + out.write(strings[i].getBytes()); + out.write("\n".getBytes()); + } + out.close(); + } catch (Exception e) { + System.out.println("Some exception occurred"); + } + } +} diff --git a/hotspot/test/runtime/7158800/InternTest.java b/hotspot/test/runtime/7158800/InternTest.java new file mode 100644 index 00000000000..d0cd1c024f2 --- /dev/null +++ b/hotspot/test/runtime/7158800/InternTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 7158800 + * @run shell/timeout=400 Test7158800.sh + * @summary This test performs poorly if alternate hashing isn't used for + * string table. + * The timeout is handled by the shell file (which kills the process) + */ +import java.util.*; +import java.io.*; + +public class InternTest { + public static void main (String args[]) throws Exception { + final String badStringsFilename = "badstrings.txt"; + + if (args.length == 0 || (!args[0].equals("bad") && !args[0].equals("normal"))) { + System.out.println("Usage: java InternTest [normal|bad]"); + System.exit(1); + } + + FileInputStream fstream = new FileInputStream(badStringsFilename); + DataInputStream in = new DataInputStream(fstream); + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + String toIntern, toDiscard; + int count = 0; + long current = 0L; + long last = System.currentTimeMillis(); + + if (args[0].equals("bad")) { + while ((toIntern = br.readLine()) != null) { + toDiscard = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); + toIntern.intern(); + count++; + if (count % 10000 == 0 && count != 0) { + current = System.currentTimeMillis(); + System.out.println(new Date(current) + ": interned " + count + " 0-hash strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); + last = current; + } + } + } + if (args[0].equals("normal")) { + while ((toDiscard = br.readLine()) != null) { // do the same read from the file to try and make the test fair + toIntern = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); + toIntern.intern(); + count++; + if (count % 10000 == 0 && count != 0) { + current = System.currentTimeMillis(); + System.out.println(new Date(current) + ": interned " + count + " normal strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); + last = current; + } + } + } + in.close(); + } +} + + diff --git a/hotspot/test/runtime/7158800/Test7158800.sh b/hotspot/test/runtime/7158800/Test7158800.sh new file mode 100644 index 00000000000..2a502346a0b --- /dev/null +++ b/hotspot/test/runtime/7158800/Test7158800.sh @@ -0,0 +1,91 @@ +#!/bin/sh +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# 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. +# +# +# Run test for InternTest.java +# + +if [ "${TESTSRC}" = "" ] +then TESTSRC=. +fi + +if [ "${TESTJAVA}" = "" ] +then + PARENT=`dirname \`which java\`` + TESTJAVA=`dirname ${PARENT}` + echo "TESTJAVA not set, selecting " ${TESTJAVA} + echo "If this is incorrect, try setting the variable manually." +fi + +if [ "${TESTCLASSES}" = "" ] +then + echo "TESTCLASSES not set. Test cannot execute. Failed." + exit 1 +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + SunOS | Linux ) + NULL=/dev/null + PS=":" + FS="/" + ;; + Windows_* ) + NULL=NUL + PS=";" + FS="\\" + ;; + * ) + echo "Unrecognized system!" + exit 1; + ;; +esac + +JEMMYPATH=${CPAPPEND} +CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH + +THIS_DIR=`pwd` + +${TESTJAVA}${FS}bin${FS}java -fullversion + +${TESTJAVA}${FS}bin${FS}javac -d . ${TESTSRC}${FS}InternTest.java + +cp ${TESTSRC}${FS}badstrings.txt . + +${TESTJAVA}${FS}bin${FS}java -XX:+PrintStringTableStatistics -XX:+TraceSafepointCleanupTime InternTest bad > test.out 2>&1 & +C_PID=$! + +sleep 60 + +ps | grep ${C_PID} | grep -v grep + +if [ $? = 0 ] +then + kill -9 ${C_PID} + echo "Test Failed" + exit 1 +else + echo "Test Passed" + exit 0 +fi diff --git a/hotspot/test/runtime/7158800/badstrings.txt b/hotspot/test/runtime/7158800/badstrings.txt new file mode 100644 index 00000000000..d7f76fb838e --- /dev/null +++ b/hotspot/test/runtime/7158800/badstrings.txt @@ -0,0 +1,30001 @@ +EOcLKvbddZyPxYpb +DncLKvbdPxmAGrqj +DoCjjvbdpxoIHQdY +EPCkKvbdqYoHfqEY +DnbkKvbdezvYdiUX +DnbjjvbdeEoRbXCj +EObkKvbdbsCkUEKB +EOcLKvbdnUtyjiqf +DncLKvbdRWnDcMHc +DoCkKvbdrSUkOLAm +DncLKvbdfNFwGmJk +EPDLKvbdvAdYroFI +DoDLKvbdiGibyViu +DncLKvbdYqNEhmFR +DoCkKvbdEARhlzXX +DncLKvbdSZjHsCvA +DncKjvbdqTsgRqkU +DnbjjvbdqAiFAXHd +EPDKjvbdGcjvJaij +DnbkKvbdwtldpxkn +DoDKjvbdYkrETnMN +EPCjjvbdbBWEfQQX +EPCjjvbduMXwAtBX +DncLKvbdbsCkTcia +DoCjjvbdczYpYZRC +EOcKjvbdFeiqmhsq +DoCkKvbdKCicQibx +EOcKjvbdZLrEUOLm +DoCjjvbdaNKbStmH +DoDKjvbdJbjDQjDY +EPCkKvbdemFwGmKL +EPDKjvbdZQleImEq +DncKjvbdZjShPfbG +DnbjjvbdqYnhHREY +DoCkKvbdaRfDIUGL +DoDKjvbdLrWlyuQz +DnbjjvbdZisHofaf +EObjjvbdhtydvrUb +DnbjjvbdRotHKGEX +EObjjvbdNeEThhkE +EPCjjvbdZtJJZESn +DoDKjvbdnPyxvLYb +EPDKjvbdeEoRbWbj +EOcLKvbdFxttaEXb +EObjjvbddwystRez +EPCjjvbdJpzEnenF +DnbkKvbdTppntuIN +EPCkKvbdTukpKUBR +DnbkKvbdhlFEOUcZ +EObkKvbdlhdUQuRa +DnbjjvbdkClKqHUg +EOcKjvbdqTtGqqkU +DncKjvbdtkwvaUBX +DoDKjvbdsQWOjCuf +DncLKvbdEKIJuwjA +DncKjvbdGLErcIMu +EOcLKvbdNPwpumfs +EObkKvbdnVUzLJrG +DoCkKvbdcTDKsdKB +DncKjvbdKRZdoFme +EOcLKvbdemFvgNKL +EPCkKvbdznopdblY +EPDLKvbdOYPVzdOU +DnbjjvbdsZlPsAhO +DoDLKvbdKCjDRKDY +DoCkKvbdhuZeXSVC +EPDKjvbdOStVgEtp +DncLKvbdvwMAvBWV +EPDKjvbdBcoaWJlf +EOcKjvbdZxdKODMS +DoCjjvbdbsCkTcjB +EOcLKvbdwWlAuaWV +DnbjjvbdFejRnJUR +DnbjjvbdmIdTqVSB +DnbkKvbdqBIeAWhE +DncKjvbdrMzJyMIJ +DoCkKvbdZGvdAOsJ +DncLKvbdjggLfFnL +DoCjjvbdYqNFJMdq +DoCkKvbdqZPHfqDx +DncLKvbdOEdThiLE +DoCkKvbdZirgpGaf +EPDLKvbdziuQPdSt +EObkKvbdKQyeOenF +DoDLKvbduaDySndh +DoCjjvbdVUNUGLvK +DncKjvbdAMhYrvzY +DnbkKvbdnQZxvKxb +EPCjjvbdBhjakJFj +DncLKvbdmfeYNNfy +DoDLKvbdjlbLydfo +DoDLKvbdpyPIGpcx +EOcLKvbdnVUzLJqf +DoCjjvbdmJETqVSB +DoDLKvbdJTZAsMxM +DoCkKvbdnQZxvLZC +DoDKjvbdACqwizJQ +DncKjvbdvBEZSoFI +DncKjvbdGckVjCJj +DncLKvbdiMFENtcZ +Dnbjjvbdjuvmcaww +DnbkKvbdZyEKNblS +DoCjjvbduMYXBUBX +DnbjjvbdFWYopNJe +DoDKjvbdelfXGljL +DnbjjvbdakLenmcA +EPDKjvbdfILWRmpg +EObjjvbdSLYeuHLT +DoCjjvbdMfbolotk +EPDLKvbdrRuKnKaN +EOcKjvbdyzdnRhIh +DoDLKvbdGAoRZJzm +DoCjjvbdhlFDnUcZ +EPDLKvbdmpZyVkYb +DncKjvbdTpqPUuIN +DncLKvbdHDjvJaij +EPDLKvbdYlRcsmkm +EPDLKvbdvlvAMdFN +DncKjvbdIsZArmYM +EOcLKvbdegjuqnQg +EOcLKvbdZQmFJNFR +DoCjjvbdZxdJmcMS +EPCkKvbdlZTSTYgU +DoDKjvbdqceJPnWB +DncLKvbdVgwuxGxz +DncKjvbdDnbkLXDE +EPDLKvbdatbHYKsh +DncKjvbdEzsqFLbi +EPDLKvbdnVVZkKRf +EOcKjvbdKeegbBQu +EPCkKvbdKfGHaaRV +EPDKjvbdmIctRVRa +EPCjjvbdRMxBxnUz +DnbjjvbdJYTbILpp +EPCkKvbdTAEiHbPE +EOcLKvbdfelZnGgA +DoCjjvbdOStWGeUp +EOcLKvbdemGXHNJk +DoDKjvbdYTMAmUOx +EPCkKvbdpyOhGpcx +EPCkKvbdAMgxsWzY +DnbjjvbdYkrETnMN +EPDLKvbdUQqPUtgm +DncKjvbdehKurNqH +DoCjjvbdZMSETnLm +DoDKjvbdIHGyyXwg +EObjjvbdXGYzUAPT +DoCjjvbdhbPCeWqR +DoCkKvbdKNADzGuB +DnbjjvbdFeirOJTq +DncLKvbdaRecHtFk +DnbkKvbdzoPpeClY +EObkKvbdZRMeJMeR +DnbjjvbdYfvdAPSi +DncLKvbdJcKCqJcY +EOcLKvbdqvokbhyR +DoDLKvbdrRuLNjaN +DoCjjvbdTlWPBWOi +DoCkKvbdjvWnEBxX +DoDLKvbdTkunaVoJ +DoCkKvbdQZNAHTSK +EObjjvbdqwPkbhyR +EOcLKvbdNHDPlpUk +DncLKvbdIHHZxxYH +DncLKvbdtkxXAtAw +DncLKvbdSCEFMJZL +DnbjjvbdZQmEhldq +DoCjjvbdNGbolotk +DnbjjvbdnCKWwnmu +DncLKvbdzHZMANEw +DoDKjvbdmttykJrG +DnbkKvbdlrZUzSci +EPDKjvbdSKyGVHKs +DoCjjvbdKVuGEFGi +EPCjjvbdCIkBkIej +DncLKvbdzHZMAMeX +DnbkKvbdaSFbgsek +DncLKvbdHDjujBij +DoDKjvbdGZVUaDwb +DnbjjvbdZnnJFEzK +DoCkKvbdtcDUwWOo +DoCkKvbdlBMoNALA +EOcKjvbdNsUWHFUp +DoDLKvbdVUNUFlVj +DnbkKvbdhkdcnUcZ +DncLKvbdLiBkqYAS +EOcKjvbdzoPpdcLx +EPDKjvbdijGIJmXr +EOcKjvbdZisHofaf +DoDLKvbdeOdrkUUS +DoDLKvbdnPyxvKxb +EPDKjvbdIxUBhMRQ +DncLKvbdlhctRUqa +DoDLKvbdmgFXlnGy +DncKjvbdCJKbKiGK +EOcLKvbddndrjtUS +DnbjjvbdkDLjqGuH +DncKjvbdmIcsptqa +DoCkKvbdvvlAvBWV +EObjjvbdjblLQftg +DnbjjvbdCEQBWKMf +DnbjjvbdBdPaVilf +DoCkKvbdZxcjODLr +DoCkKvbdEObjjwCd +EPDKjvbdyTNhlqbH +EPCkKvbdUMVoAvPJ +DncKjvbdUxhUZjoO +DncKjvbdqqtjmkAm +DncKjvbdKfGICBRV +EPCjjvbdVrOXaeLc +EPDLKvbdwXLaWBWV +EPCkKvbdjblKqHUg +DnbjjvbduDCuWuoP +EPDKjvbdNGbpMouL +EObjjvbdBcoaVjNG +DncLKvbdrWpMDIxq +DncLKvbdhaoCdwRR +DnbkKvbdFxtuBDwb +DncKjvbdIjEAKPgE +EOcLKvbduCbuXVoP +DoDKjvbdZtIiZDsO +DnbjjvbdEztRElCi +DncLKvbdxmsHwsJD +DnbjjvbdRbEElIxk +DoDKjvbdWHwvXgYz +EOcKjvbdQlwbYnUz +EOcLKvbdVTltFkuj +DncKjvbdliETptqa +DnbkKvbddoErjtTr +DoCkKvbdgPazvdXh +DncKjvbdySmhlqag +DoCjjvbdbPgHDkzd +DoCkKvbdFWZPomKF +EObjjvbdssSSxydc +EObjjvbdzQnliJwA +EObkKvbdKCjCpibx +EPCjjvbdpyOhHREY +DncLKvbddjJqutzn +EObkKvbdBdQAujMf +EPCkKvbdLAjflbXq +DncLKvbdLBLGlaxR +DoDLKvbdrpWPJbuf +DoCjjvbdEKHiuxKA +DoCjjvbdXsMAlsnx +EObkKvbdptTgSSLU +DoDKjvbdnHFXmNfy +DncKjvbdCJKbKhej +EPCjjvbdhlEdOUby +EOcKjvbdKWUfEFGi +DoDKjvbdZQmFJMdq +EPCjjvbdiGjDZWKV +EObkKvbdVAbQrprZ +DoDKjvbdfekzNgHA +DoDLKvbdnHEwlmgZ +DncKjvbdwzHeexEr +DoCjjvbdmpZxujyC +EPDKjvbdwMvAMcdm +DoCjjvbdfHkVrNqH +EPCkKvbdYzbfRiuy +EPCkKvbdZtIiZDrn +DnbjjvbdjvWnDbYX +DoCjjvbdOStVgEtp +EPDLKvbdZMSETmlN +EPDKjvbdBhjajhej +EPCjjvbddoFTLUUS +DnbkKvbdsQVoJcWG +EPCjjvbdrEFJQNvB +DoCjjvbdMpYRWOGs +EOcLKvbdZirgpHBf +EPDLKvbdyOTIXsJD +DoCkKvbdKRZdnfNe +DnbjjvbdbBWFFoow +EPCjjvbdgFlZnHHA +DnbkKvbdGGJrOIsq +DoDLKvbduDCtwWPP +EObjjvbdNddUIhjd +DnbjjvbdxsNiMqag +EObjjvbddeOrCWbj +EObjjvbdPxmAGsRj +EOcLKvbddeOrCXDK +DoDLKvbddeOrBwCj +DoCjjvbdVqnYCElD +DnbkKvbdUyIUZjoO +EObjjvbdeFOrCXDK +EObkKvbdVrNxCFLc +EObjjvbdTfzmkwWF +EOcKjvbdIHGzZYYH +EPDKjvbdtbbuXWPP +DoCjjvbdZisIQHBf +EObjjvbdbsCkUDjB +EPCkKvbdVwJXudFH +EPDKjvbdrouoKDVf +EPCkKvbdFyVVBEYC +DncLKvbdZnnIeEzK +EPDLKvbdxVNFQxkn +DoDKjvbdpxnggRDx +DoDLKvbdqZOgfpcx +DncKjvbdCIjakJGK +EPCkKvbdCJLBjhej +DoDLKvbdnPzYvKxb +EOcKjvbdqTsgSRkU +EOcLKvbdLBLGlaxR +DoDLKvbdcbTMrAUN +DncLKvbdzitoodSt +DoDKjvbdJvUfDdfi +EOcLKvbdHDjvKCJj +EPCkKvbdeOeTKssr +DnbkKvbdlYrqsYft +DncLKvbdiiehKMxS +DncKjvbdURQoVUhN +DnbkKvbduMYXBUAw +DoDLKvbdSPtHJfEX +EObkKvbdqBJFAWgd +EOcKjvbdFpATWgFy +DoDLKvbdBsBDTfXS +DncKjvbdjhHLfFmk +DoCjjvbdCJKakIfK +DnbkKvbddoFSjtTr +EObkKvbdANIYsWzY +EObjjvbdCTAbtFvr +EObjjvbdrRtkOLAm +DnbkKvbdkxsSTYgU +DoCjjvbdnBiwXnmu +EObjjvbdwtmEqYlO +EPDKjvbdrylQTAhO +DoDLKvbdtbbtvvOo +EPCjjvbdZLrETmlN +EPDLKvbdWXJYWDdg +DoCkKvbdKQzFOfOF +EPCjjvbdwzIFfXeS +DncKjvbdRjyFuHLT +EPDLKvbdULunaWPJ +DncKjvbdUxhTykOn +DnbkKvbdJcKCqKDY +EPDLKvbdcbSmSATm +DnbkKvbdegjurNqH +EPDKjvbdZjTIQGbG +EPCjjvbdiLddNuCy +DoCjjvbdZQldiNEq +EOcLKvbdakMGPODA +EObjjvbdnHEwlmgZ +EOcLKvbdBsAcUGXS +EPCkKvbdiVZdwSUb +EOcLKvbddCTNSAUN +DnbkKvbdEXxMUUUM +DncKjvbdYpldiMeR +DoDKjvbdNddTiIjd +DoDLKvbdZLqdUNlN +EPCkKvbdiBncFWpq +DncLKvbdiCPDEvqR +EOcKjvbdUyHszKoO +DncKjvbdhtydvqtb +EPCjjvbdpxoHgQcx +EObkKvbdkWWnDaxX +DnbjjvbdBhkBkJFj +DoCkKvbdRacdkhyL +EOcLKvbdZjTHpHCG +EPCkKvbdMowqWOGs +DncLKvbdegjurNpg +EObjjvbdfMfWfmKL +EPDLKvbdZirgpGaf +DoDLKvbdiZuFlQnG +DncLKvbdFxuVAcxC +EObkKvbdZisHofaf +EOcKjvbdJSyBSmYM +EPDLKvbdVYgtZkPO +EOcKjvbdRbEFMJYk +DncLKvbdrEFIonWB +DncKjvbdKDJbqJcY +EOcLKvbdhfjCxuiu +EObjjvbdLLAhWAKZ +DoCkKvbdRXNcblID +DoDLKvbdcbSmSATm +EOcLKvbdwWlAvAuu +EObkKvbdiBnbdvpq +DoCkKvbdNQXpumgT +DncLKvbdkVwOECYX +DnbkKvbdfoazwDxI +DoDLKvbdbBWFFpPw +DoDLKvbdvBDxsPEh +EPDKjvbdJqZdoFme +DoDLKvbdIryArmXl +EPCjjvbdANIZSwZx +EPCkKvbdVhYVxGxz +DncKjvbdLAjgNCYR +DncKjvbdxxIjCQZk +DncKjvbdbiNKKewY +EPCjjvbdlrZVZsEJ +EPDKjvbdIryAsMwl +DoCkKvbdtAHRIAAr +EPDKjvbdJmAEZfuB +EPCkKvbdZjSgogBf +DoDLKvbdOXnuzcnU +DnbkKvbdehKvRnQg +EObjjvbdZyDimbkr +DoDKjvbdmajWwoOV +EOcKjvbdkMalZeHP +EOcKjvbdIjEAJpHE +EPCkKvbdDihKVxKA +DncKjvbdNddUIiKd +EObjjvbdqdFIpOWB +DoCkKvbdxnShXsJD +DoDLKvbdjmBkzEfo +EOcLKvbdatagYLTh +DoCjjvbdVhYVxHYz +DnbjjvbdJbjDRKDY +EPCjjvbdLBLHNCYR +DnbjjvbdnGeYNOGy +EOcLKvbdUsmTekvK +EPCjjvbdtkxXBTaX +EPCjjvbdzoPqFCkx +DncKjvbdCIjbKhej +DncKjvbdZLqdTmkm +DoDKjvbdsPunicVf +EOcKjvbdmgFXmNgZ +EObkKvbdiMFENuCy +DoDKjvbdhanbeXRR +EObkKvbdACqwiyhp +DncKjvbdZisIQHBf +EPCjjvbdgQBzwDwh +DnbjjvbdyYJJaoyk +DoDKjvbdxUldqZMO +EObkKvbdkClLQgVH +EPCjjvbdZQldiMeR +EPDLKvbdZyEKOClS +EPDLKvbdcIlikFvx +DoDKjvbdrzMQTBHn +DnbjjvbdVYgtZkPO +DoDLKvbdHEKuiajK +EPCkKvbdczZQXxqC +DoDKjvbdrDdiQNua +DncLKvbdcImKLGWx +DoCjjvbdVYgtZkPO +EPDLKvbdZnnIeFZj +EPDKjvbdMIakqYAS +DoCkKvbdSLYfUgLT +EPDLKvbdiCObdvpq +DnbjjvbdRpUHKFcw +DoDLKvbdIHHZyYXg +EPCjjvbdypoMhiwA +DnbkKvbdCEPaVjMf +DnbkKvbderAvzlDP +DnbkKvbdZQleImFR +EOcKjvbdKRZdneme +DoDLKvbdiBnbeXQq +DncLKvbdEPDKjvcE +EOcLKvbdauCGwkTh +DncLKvbdEvZQPmJe +EPCkKvbdURQnuVIN +DncLKvbdegjvSOQg +EPCjjvbdKaKgMawq +DnbkKvbdRzKISbvA +DncLKvbdiLdcnUcZ +EPDLKvbdkDMKpfuH +DoDLKvbdRbDdkhyL +DnbjjvbdDwxMUUTl +DnbkKvbdrpWPKCuf +DnbkKvbdNVSqjmAX +DoDKjvbdRbDeMIxk +EOcLKvbdcyxpXyRC +DncLKvbdRMwbYnUz +EObjjvbdqlzJxlHi +DoCkKvbdJYUCIMQp +DncLKvbdLZQjSzuG +EOcKjvbdxVNEqYkn +DnbkKvbdZoOIeFZj +DoCjjvbdBraCtFwS +EOcLKvbdliDsqVSB +EPCkKvbdeATqNXif +DncLKvbdkMbLydgP +EObjjvbdZxdJmbkr +DoCjjvbdraellHLZ +EObkKvbduDCuWvPP +DoCkKvbdpstGrSLU +DoCjjvbdLGFgbBQu +DnbkKvbdhtzFWquC +EObjjvbdoAKztHdO +EPDLKvbdatafxKtI +EPDKjvbdkWXNcaww +DoCkKvbdwkXEHzzG +EObkKvbdmgEwmNgZ +DncKjvbdBiLCLJFj +DoCjjvbdeOdsKssr +EOcLKvbdfILWSORH +EObkKvbdCDpAujMf +EPDKjvbdKDKDQibx +DoDKjvbdVUMtGLuj +EObkKvbdrXQMCiYq +DncKjvbdePEsLTtS +DncLKvbdDxYLtUTl +EPCkKvbdGYuVBEYC +DncLKvbdNeEUIiKd +EPCkKvbdpxoIHRDx +EObjjvbdFkEsDHlu +EObjjvbdssSSxzFD +DoCkKvbdUtNTfMVj +DnbjjvbdJcKDRKDY +DncKjvbdqiAKEmOe +DoDKjvbdtlXwAtBX +DnbkKvbdxmsIYTIc +EObkKvbdLrXMzUpz +DoCjjvbdkxsSSxft +DncKjvbdQlwaxnUz +EObkKvbdjhGlFfNk +EPCkKvbdxsNhmRag +DoDLKvbdMfcPmQUk +DoDKjvbdQvnEDLhD +EObjjvbdVgxVxHYz +DoDLKvbdlrYtyrdJ +DoCjjvbdezvYeIsw +DncLKvbdNddTiIjd +EPDLKvbdGGJrNiUR +EPDLKvbdRzJhTDWA +EPCjjvbdvvkaWBVu +EOcKjvbdRXNdCkgc +EOcKjvbdQZNAHTSK +EPCkKvbdsCGNLfkZ +EOcLKvbdDwwktTsl +EOcLKvbdqlzJyLgi +EOcLKvbdxsNiMqag +EOcLKvbdhzVFlROG +EOcKjvbdEztRFMCi +DnbkKvbdqiAJdmPF +EPDLKvbdjcMKqGtg +EObkKvbdTlWOaWOi +EPDLKvbdURRPUuHm +DoDKjvbdelfWgNKL +EOcLKvbdGAnqZJzm +EObjjvbdGZUuAdXb +DoDLKvbduLwwAtAw +DoCjjvbdZjTIQGbG +EPCjjvbdRNXbYnUz +EPDLKvbdiLeENtby +EObjjvbdMowpunGs +EOcKjvbdbiNJjevx +DoDKjvbdEYYLstTl +DoDLKvbdqUTfrRjt +DoDKjvbdbsCkUEJa +DoDKjvbdXsMBNUPY +EPCjjvbdRNXaxnUz +DoDLKvbdNGcQNQUk +DnbjjvbdEARiMywX +EPDKjvbdSKxfUfkT +DncKjvbdhtyeXRtb +DncKjvbdZLqcsnLm +EObkKvbdZnmheEzK +EObjjvbdtbcUvuno +DnbjjvbdrzMQTBHn +DnbjjvbdDwwktTsl +EPDKjvbdkxsSTYgU +DoDKjvbdIryArlxM +DoDKjvbdnBivxOnV +DoDKjvbdeATplwif +EOcLKvbdKeegbApu +EPCjjvbdMgDQMotk +DoCjjvbduCbtwWOo +DnbkKvbdyNsHwrhc +DnbkKvbdtvNxJpsA +EOcLKvbdqAheAWgd +DoCkKvbdURQoUtgm +EOcKjvbdqceIpOWB +DoCkKvbdVwIwudFH +DnbkKvbdbLMFnmcA +EOcLKvbdZjTHpHBf +EOcKjvbdRXNdCkhD +EPDLKvbdiHJcZViu +DoCjjvbdxxIjCPzL +DnbkKvbdBcpBWJmG +EPCkKvbdZyEKOCkr +EPDKjvbdOTUWHFVQ +DoCjjvbdIGgZxwwg +EPDLKvbdFjeSbhMu +EPDLKvbdhgKCxvJu +EOcLKvbdNsUWGdtp +EPDKjvbduVnXipsA +DncLKvbdGYuVBEXb +EPDLKvbdZtIhyESn +DoDKjvbdZxdJmcLr +DoCjjvbdUsltGLuj +DoDKjvbdDoDLKvbd +DncLKvbdrDdhpNvB +EPDLKvbdKCjDRJbx +DoDLKvbdxLWdHzyf +EObkKvbdrzMQTAhO +EOcLKvbdOFDtJJKd +EPCkKvbdrSVKmjaN +EOcKjvbdWWiYVdEg +EOcKjvbdWWhwvDdg +DncKjvbdpstHRqjt +EPCkKvbdKWVFceGi +DoCkKvbdZjShPfbG +DoCkKvbdSxKlNzkY +EPDLKvbdIwtCHkqQ +EOcKjvbdsCGNLgLZ +DncKjvbdzaAOfgCM +DoDLKvbdxmrhYSiD +DncLKvbdfMfWgMjL +EPDKjvbdqFdEsuaI +EOcLKvbdiLeDnUcZ +DoCjjvbdKVuFceHJ +DoCjjvbdfekzNgHA +EOcKjvbdOFEThiLE +EPDLKvbdqceJPnWB +DoDLKvbduCbtwWOo +DncKjvbdTqROtuIN +DncKjvbdpedFUWBI +DoDLKvbdrEFJQNua +DoDLKvbdyXhjCPyk +EPCkKvbdJYUBhLqQ +EPCkKvbdtcCuXVno +DoDLKvbdZLrEUOLm +EPCkKvbdpstGrRjt +DncLKvbddePSCXCj +EObkKvbdauCHXjsh +DoDLKvbdkHfkefNk +EObjjvbdMRwMzUpz +EObjjvbdaMkCTVNH +DoCkKvbdGGJrNhtR +EPDLKvbdvBDxrneI +EPDLKvbdIHHZxwxH +EOcLKvbdrJAJdmPF +EOcKjvbdGZUuAdXb +EOcLKvbdbUbHYLUI +DnbjjvbdJzofYEAN +EPDKjvbdFxtuBDxC +DnbkKvbdQvnDbkgc +EPDKjvbdJmADzGta +DoDKjvbdZRMdhleR +DnbkKvbdsrqsZZeD +EObkKvbdrovPJbuf +EPCjjvbddeOqbXCj +EObjjvbdtcDVXVoP +DncKjvbdMfbpNQVL +DoCkKvbdhbPCeXQq +DoCkKvbdNHComQVL +EObjjvbdvBDxroFI +EPCjjvbdnBivwoNu +EObjjvbdbhljKewY +EPDKjvbdZyDimcMS +EObkKvbdWSOXbElD +EOcKjvbdTfznMXVe +EPCjjvbdZtJJYcsO +DoCjjvbdRjxfVHLT +DoCkKvbdVTltGMVj +DncKjvbdYfwEAOri +DncKjvbdYkrEUOMN +EObkKvbdqGEEsuaI +DncLKvbdjJfHimXr +EPDLKvbddndsLUTr +DnbkKvbdqBJFAWhE +EPDLKvbdEOcKjwDE +EPCkKvbdtvOYJqTA +DncLKvbdkyTRsZHU +DoCjjvbdTppnuVIN +DncLKvbdwyhFeweS +DncKjvbdsBelkgKy +DoCjjvbdKDKCqJcY +DoCjjvbdkClKqHVH +DoCjjvbdcTCjtDia +EPDLKvbdUVkpJtAq +EPDLKvbdRyjITCvA +DnbjjvbdJuuFcdgJ +DoDKjvbdrJAJdmOe +DncKjvbdJcJbqKCx +DoDLKvbdJcJbqJcY +DoDKjvbdeEoSCXDK +DoDLKvbdSwjlNzkY +EObjjvbdzitopDrt +DoCkKvbdKWVGEEgJ +DncKjvbdpssfqrKt +EOcLKvbdUMWPBVoJ +DncKjvbdyzdmrIIh +EPCjjvbdxUldqZLn +DoDLKvbdySnImRbH +DoCjjvbdGdKvJaij +DoCkKvbdxZgeewdr +EObkKvbdiLddNuDZ +DnbjjvbdSCDdkiZL +DncKjvbdznpREcMY +EOcLKvbdaRebhTfL +DnbjjvbdZQldiMdq +EPCjjvbdbrbjtEKB +EOcKjvbdEARiMzXX +DoDLKvbdXrkaNTnx +EPCkKvbdQZNAHTRj +DoDLKvbdEzspeLcJ +EPCjjvbduVnYKRTA +EObjjvbdJXtBhMQp +EPDKjvbdeOdrjssr +EPCjjvbdLqwMytpz +EPDKjvbdUMVoBVoJ +DncKjvbdRpUGifDw +EPDLKvbdZyDinDLr +DnbkKvbdNrsufeVQ +EPCkKvbdZMSDtNlN +EPCkKvbdySnJNSCH +EPCjjvbdfMevfljL +DncLKvbdXsMBNTnx +DnbkKvbdpxoHfqDx +DncLKvbdUQpntthN +DncKjvbdIsZArlwl +DoDLKvbdZGwEAOsJ +EOcKjvbdVvhwvDdg +EOcLKvbduWNxJqTA +EPCjjvbdHEKvJaij +DoDKjvbdrpWOjCuf +DncLKvbdrpWOjDVf +DoCjjvbdIHGzYwwg +DoDLKvbdpxoIGqEY +DoDLKvbdJcJbqKDY +DoCjjvbdRWmdClHc +EPCjjvbdFWYopNJe +DncKjvbdmfdwlmfy +DoCkKvbdxUleQxlO +EObjjvbdnGdxMnGy +EPCjjvbdvvlAvBVu +DncLKvbddndsKssr +EObjjvbdZMRcsnLm +EOcKjvbdFxttaEXb +DncKjvbdVUNTfMVj +EOcLKvbdNrtWHFUp +DoDKjvbdwuMdqYlO +EPDLKvbdrXPkbhxq +EObjjvbdrEFIpNua +EObjjvbdziuQQDrt +EOcLKvbdqYoIGpcx +DnbjjvbdsQVoJcVf +EObkKvbdkDMKpgUg +EObjjvbdvBDyTPFI +DncKjvbduCbuWvOo +EPCjjvbdkVvnECYX +DncLKvbdZGvdAOri +DoCkKvbdrXPlDJZR +EOcLKvbduCcVWvOo +DoDKjvbdCEPaWJlf +EPDKjvbddoErjssr +DncKjvbdACqxKZiQ +EPCjjvbdUVlPitAq +EPDKjvbdjJfHjMxS +EObkKvbdAMhYsWzY +DoDKjvbdnBivxOmu +EOcLKvbdbiNKKfXY +EPDKjvbdYqMeIleR +EObkKvbdJmADygUa +EObjjvbdEPDLLWcE +EPCjjvbdrXPkcIxq +EOcLKvbdliDtQtqa +DoCjjvbdmoyxujyC +EPDLKvbddoFTLTsr +EOcLKvbdCWzdJEpW +DnbjjvbdrEEhpOWB +DoDKjvbdZLrDtNkm +EOcLKvbdLFfHbAqV +EOcKjvbdmttzLKSG +EOcLKvbdmbJvwoOV +EOcKjvbdUaCQrqSZ +DnbjjvbdmgExMnGy +EPDKjvbddndrkUUS +EObkKvbdDwwkstTl +DoCkKvbdcJMjLFwY +DnbjjvbdaNLBruMg +DoDLKvbdQYmAHTRj +DnbkKvbdsQWOicWG +EObkKvbdMRwMzUpz +DoDLKvbdZshiZDrn +EPDLKvbdnPzYujxb +EOcKjvbdCEQAujMf +EPDLKvbdKefHbApu +DoDLKvbdYpldiNFR +DoCkKvbdFWZQQNJe +DncLKvbdznpQeCkx +EOcKjvbdnQZxvKxb +DoCkKvbdVBBprpqy +DnbkKvbdZirhPfaf +DnbkKvbdegjvSNqH +EOcLKvbdqdEiPnWB +EObjjvbdBhkCKiGK +EObjjvbdxZgfGYFS +DnbjjvbdNQYQumgT +EPCjjvbdxsNhlrBg +DoCkKvbdQdDApRDr +DoCkKvbdxxIiaoyk +EPDKjvbdFeirNhtR +DoCjjvbdegjvSOQg +EObkKvbdqcdiQNvB +DncLKvbdiMEdNtcZ +DncLKvbdTqRPUthN +EPCkKvbdwygeexFS +DoDKjvbdyTOJMrBg +DncLKvbdeEoRavbj +EPCjjvbdtbcUvvOo +EObjjvbdKCicRJcY +EObjjvbdZyEKODMS +DnbjjvbdmJDtQtrB +DncLKvbdEARhlyvw +DnbjjvbdIxTbILqQ +EOcLKvbdwygefYFS +DoCjjvbdznoqFCkx +DoCjjvbdRpUGjGDw +DncKjvbdhzVGMQnG +EPCjjvbdhkeDnVCy +EObkKvbdOEdUIiKd +DncKjvbdrDeIomua +DncLKvbdiHJbxuiu +EPDKjvbddxZstRez +EPDLKvbdmSYuZrdJ +EObkKvbdVUNUFkvK +EPDLKvbdNeEUJIjd +DoCkKvbdiMEdNuCy +DoDLKvbdRDcApQcr +EPCjjvbdTlVoBVoJ +EObjjvbdLBKgNBwq +EPCkKvbdsCFllHKy +EObjjvbdnVUzLJqf +DoDKjvbdqrVLNkBN +DoCkKvbdqFcdtWBI +DncLKvbdbVCGxLTh +EOcLKvbdeFPSCXCj +EOcLKvbdRpTgKFdX +EObjjvbdznpQeDLx +EOcKjvbdjvXNcaxX +DnbjjvbdHDkWJbJj +DncKjvbdhkeENuDZ +DnbkKvbdnUtyjjSG +DoDKjvbdSQUHJfDw +DncKjvbdbUbHYLUI +EOcLKvbdNsTvGduQ +EPDLKvbdSZigsCvA +DncKjvbdMfcPlpUk +DoDLKvbdxrnIlrBg +DncKjvbdiLdcnVCy +EPCjjvbdmfeYNOHZ +DoCkKvbdjvWmcaxX +DoDKjvbdbUbHXkUI +DncKjvbdBhkBjiFj +DoDLKvbdNHColpVL +EOcKjvbdrykosAhO +DncLKvbdqGDeUVaI +DnbkKvbdhgJcZViu +DnbjjvbduLxXAtBX +EPCjjvbdYpleJNFR +EPDLKvbdQvmdClHc +DnbjjvbdJYTbIMRQ +DncLKvbdznpRFDMY +EOcLKvbdZnmiFEyj +DnbkKvbdrRuLOLAm +EObkKvbdhkeEOUby +DncLKvbdYlSEUOLm +DoCjjvbdhkdcmtby +DncLKvbdddnrCXDK +DoDLKvbdKaLHNCYR +EOcKjvbdcyxpYZQb +EPDLKvbdACqwjZhp +DoCkKvbdBsBDTevr +EObkKvbdeKJqvUzn +EObkKvbdcImJkGWx +DncLKvbdYSlAltOx +DncLKvbdlrYtyrdJ +EObkKvbdKxqJrztf +EOcKjvbdsQWPJcVf +DoDKjvbdkySqrxgU +EObjjvbdeEoRbXCj +EOcKjvbdHDkVjBij +DoDLKvbdCTBCsfXS +DoCjjvbdKCjDQibx +DoCjjvbdlhdTqUrB +DoDKjvbdTulQKTaR +DoCkKvbdRjxetfkT +EPCjjvbdEuyQQNKF +EPCjjvbdDoDKkXDE +DoCjjvbdsQWPJbuf +DoDKjvbdhuZdvqtb +EPDLKvbdiHKCyWJu +EPDLKvbdLFegaaQu +DoCjjvbdqZPHgRDx +DncKjvbdUWMPjUAq +DoDLKvbdTYKkmzjx +DoDKjvbdegjvSOQg +DnbkKvbdUtNTekvK +EObkKvbdNsTvGeVQ +DoDLKvbdfNFvgMjL +EOcLKvbdZQmEiNEq +EPDKjvbdBraDTfWr +EPDKjvbdNGcQNQVL +EPDLKvbdZyEKODMS +EOcKjvbdBvzdIdpW +EPCjjvbdACqwiyiQ +DoCjjvbddePRawCj +EPDKjvbdWWiXucdg +DoDKjvbdWexzUAPT +DnbjjvbdwXMBWBWV +EOcLKvbdUyHszLOn +EPCkKvbdOYOuzcnU +EPCkKvbdhancEwQq +DnbkKvbdjggLefOL +EPCkKvbdFjdsDIMu +DoDKjvbdrSUjmkBN +DoDLKvbdZjTIQGaf +DoDKjvbdMgDPmPtk +EPDLKvbdWRmwbFMD +DoCkKvbdzROmJKXA +DnbkKvbdrDdiQNvB +DnbjjvbduDCtwVoP +EOcLKvbdCIjbLJFj +EPDKjvbdXrkaMsnx +EPDKjvbdVhXvXfxz +DncKjvbdhbPDEwRR +DoCkKvbdpxoHgQcx +DoCkKvbduMXwBUBX +EObjjvbdNeEThhjd +DoCjjvbdirzhrkJz +DoDLKvbdaMkCTUlg +DncLKvbdWRnYBeLc +DnbjjvbdGBPRZJzm +EOcLKvbdeOeSjstS +DoDLKvbdmIctRVSB +DoCjjvbdZxdJnDMS +DoCkKvbdRpTgKFcw +DncLKvbdTukojTaR +DnbjjvbdKRZdoFme +DnbkKvbdURQoVUhN +DoDLKvbdyYJKBozL +EObkKvbdfNFwHMjL +DoDLKvbdZisIQHBf +EObkKvbdqFcdsuaI +DncLKvbdzoPqFDLx +DoDKjvbdSKxeuHLT +EPDKjvbdsBemLfjy +DoCjjvbdJbjCqJcY +DoCjjvbdNPxRVnGs +DncLKvbdGcjvJbKK +EOcKjvbdrWpMDIxq +EOcLKvbdQdDApQcr +DoDKjvbdZMRdTnLm +EOcLKvbddxZssrFz +EObjjvbdUtNTfLuj +EPCjjvbdLLBIWAKZ +DoCkKvbdgFlZmfgA +EPCjjvbdUVkoitAq +DoDKjvbdDncKjvcE +DoDLKvbdRpUHJfEX +EPDKjvbdLqvlzVQz +EPDKjvbdZMRdUOLm +EOcLKvbdCJLBkIfK +DncKjvbdaSFbhUFk +EPDLKvbdZoNheEzK +DncKjvbdUVlPjUAq +DnbkKvbdKNADyfuB +EObkKvbdZdwfzghb +EPDLKvbdZtIhxcrn +EObkKvbdGckViajK +DncLKvbdFfJqmiUR +DncKjvbdKWUfDdgJ +DoDKjvbdMtrqjmAX +EOcLKvbdsQWPKDVf +DoCjjvbdwtleRZMO +EObjjvbduaDxsPEh +EPDLKvbdKxqJrzuG +EOcKjvbdVAaprprZ +EObjjvbdEuxopMjF +DnbjjvbdyOTHwriD +EPDLKvbdrpVnibvG +EPDKjvbdkWWnDaww +DncLKvbdrXPkbiYq +DoDLKvbddxZssqez +EOcLKvbdHDkWJbJj +DncLKvbdEPCkLWcE +DnbkKvbdEXwkstTl +EObjjvbdqiAKEmOe +DncLKvbdjAQGaQGj +EPCjjvbdNeDtJJKd +EPCjjvbdvwMBWBVu +EPDKjvbdFejSOItR +EOcLKvbdNPwqWOHT +EPDKjvbdbsCjscia +EObkKvbdyYIiaoyk +DoDKjvbdLZQirzuG +EObjjvbdSLZGVGjs +DoCjjvbdAMgxsWzY +DoDLKvbdEObjjwCd +DnbkKvbdsPvOicWG +EPCkKvbdrJAKElne +EPCkKvbdauCGwjsh +DncLKvbdegkWRnQg +EPCkKvbdYpmEiNFR +DoDKjvbduaDxsPFI +DoCjjvbdcyxoxYqC +DoCkKvbdkMakzFHP +DnbjjvbdJbibqJbx +DnbkKvbdWWhxWDeH +DoCjjvbdssRsYzFD +DoDKjvbdpyPIHRDx +DncLKvbdwNWANDeN +DoDKjvbdJYUBglRQ +EObkKvbdXnRAYVVt +DoCjjvbdUWLpKTaR +DoDKjvbdTqROttgm +EPCkKvbdVqnXaeMD +EObjjvbdADRwiyiQ +DoDKjvbdlrZUyrci +EPDKjvbdvAdZSndh +DoCkKvbdzoQQeDLx +DnbkKvbdSQUGjFdX +EOcLKvbdqBJFAXIE +EObkKvbdSCEFLiZL +DnbjjvbdzoQQdcMY +DnbkKvbdpxngfqEY +DncLKvbdbsDLUEKB +DoCjjvbdXrlBMtOx +EObjjvbdKCjDQicY +DncLKvbdLrWlzUpz +EObjjvbdaaWEfQQX +EObjjvbdtlYWaTaX +DnbkKvbdMowpunGs +EObkKvbdSLYeuHKs +EObkKvbdTAEhhCOd +EPCkKvbdmSYtyrci +DncLKvbdYkqcsnLm +DoDLKvbdrylQTAgn +DncLKvbdJXtCIMRQ +EObkKvbdSBdElIyL +DoDLKvbdwygefYFS +DncKjvbdyXhibPzL +EPCjjvbduaDxsPFI +EObjjvbdZoNiFEzK +EPCjjvbdkNBkyeHP +EPCkKvbdWRnXadlD +DncLKvbdRWmdDLhD +DnbkKvbdmSYtzTDi +EOcKjvbdkVwODbXw +DncLKvbdQlxCZOUz +EObjjvbdbhlijfXY +EOcLKvbdXmqAXtut +EOcLKvbdmbKXXnnV +DoDKjvbdkHgMFfOL +EPCkKvbdfekymgHA +DoCjjvbdeKKRvUzn +DoDKjvbdkHfkefNk +DoCjjvbdyqPMiKXA +DnbjjvbdUQqOtuIN +EOcKjvbdEPCkKwDE +DoDLKvbdZRNFIleR +DnbjjvbdRacdlJZL +EOcLKvbdTukoitAq +EOcLKvbdZLrDtOMN +EOcLKvbdgKfzcGAE +EObjjvbdzjVQQESt +EOcLKvbdcIlijevx +EOcKjvbdGKdsDHmV +DncLKvbdKkBHvAJy +EOcKjvbdZMRctOLm +EPCkKvbdADRxKZiQ +EObjjvbdDwxLsssl +EPDLKvbdUxgszLPO +EPCkKvbdSQTfiedX +EPCjjvbdNeEUJIkE +DoDLKvbdpyPHfqDx +DnbkKvbdyOShXsJD +DncLKvbdLiBkpxAS +DoDKjvbdaaWEepQX +DoCjjvbdWSOYBeLc +EOcKjvbdLFegbAqV +EPDKjvbdffLzOGgA +EObkKvbdFkErbglu +DncLKvbdiZuFlROG +DncKjvbdegkWRnQg +DoDLKvbdQdDApRDr +EOcLKvbdeYZtURez +EObjjvbdrXQLcIxq +DoDLKvbdxZhGGXeS +DoDLKvbdGGKSOItR +EObjjvbdjhHLfFnL +EOcLKvbdUQpoUuHm +DoCkKvbdXrlBNUPY +DoDKjvbdJXtCIMRQ +DnbkKvbdZMSDsnLm +DncKjvbdCTBDUGWr +DncKjvbdbhlikGXY +DoDKjvbdXmqAYVWU +DnbjjvbdliDsqVRa +DnbkKvbdmajXYOnV +EObjjvbdJpyePGNe +DnbkKvbdCTAcUGXS +DoDLKvbdCDpBVjNG +EOcLKvbdxwhiaoyk +DoDKjvbdxVNFQyMO +EPCkKvbdVvhwvEEg +DnbkKvbdFWYoomJe +EOcKjvbdlrZUysEJ +EPDKjvbdqquKnKaN +DoCkKvbdTkunaVoJ +EOcLKvbdfHkVrOQg +EPDLKvbdiUzFWrUb +DoDLKvbdtAGqIABS +DoCkKvbdZRMdhmEq +DnbkKvbdNsUVfeVQ +EPDLKvbdqwPkbiZR +DoCkKvbdNUsSLNAX +DncKjvbdmpZxvKyC +EPCkKvbdLYqKSztf +EPDKjvbdZyEKODMS +EPDKjvbdNGbomPuL +DncKjvbdZMSDtNlN +EPCjjvbdTXjkmzjx +EObkKvbdBdQAvKMf +EOcLKvbdkySrTYgU +DnbkKvbdZoOIddzK +DoCkKvbdZMSDsmkm +EPCkKvbdCWzdIdpW +DncLKvbdBvzdIdov +DoCjjvbdaRfDHtFk +DnbkKvbdWeyZtAOs +DoDLKvbdnCJwYPOV +DoCjjvbdEYYLstUM +EOcLKvbdwtldqZMO +EPCjjvbdFVxoomKF +EObkKvbdyqPMhiwA +DoDLKvbdkxrrSxgU +DoCjjvbdeATqNYKG +DncLKvbdJKEAJpHE +DoCkKvbddndsLUTr +DnbjjvbdqFceUWBI +DoDLKvbdhkddOUby +DncKjvbdGKdrcIMu +EPCkKvbdelevflik +DoDKjvbdhaoDFWqR +DoCjjvbdYlSDsmlN +EPCjjvbdiZuGLpmf +EObkKvbdnCJvxPNu +DnbkKvbdhzUelRNf +DnbkKvbdZeYGzgiC +DoCkKvbdDnbkLWbd +DnbkKvbdnHFYMmfy +DoCjjvbdePEsKtTr +DnbjjvbdZQmEhleR +DnbkKvbdTkunaVoJ +DnbkKvbdFWZPpMjF +DoDKjvbdSwkMNzkY +EOcLKvbdwtldpyMO +EOcKjvbdhkdcmtby +DoCjjvbdNQXqWNfs +EPDKjvbdzjUpPdTU +DnbjjvbdqceJPnWB +EPDKjvbdUyHsyjoO +EPCkKvbdZshhxcsO +DncKjvbdqAiFAWgd +EObkKvbdgFkzOGgA +DncKjvbdmgFYNNgZ +DoDLKvbdDjHjWYKA +DnbjjvbdJbicRKCx +DnbkKvbdfNFwHMjL +EPCkKvbdWSNxBdlD +EPDLKvbdCJKbLJFj +EPDKjvbdEOcKkXDE +EPCkKvbdVrOYCElD +DnbjjvbdCIkBjhej +DoDLKvbddoFTKstS +DnbjjvbduDDVXVoP +EObkKvbdxwiKCPzL +DnbkKvbdZGvdAPTJ +DoDLKvbdBdPaVjNG +EOcKjvbdIHGzYwxH +DoCjjvbdGFjSNhsq +DnbjjvbdlYsSSxgU +EPCjjvbdqrUjnKaN +EOcLKvbdtvOXipsA +DoDLKvbdrounjCuf +DoCkKvbdFVyPomKF +EOcKjvbdNHCpNPtk +EPDLKvbdWeyZtAPT +EPDKjvbdjcLkQfuH +EOcLKvbdzHZMAMeX +DoCjjvbdUMWPBVni +EOcKjvbdHELWKBjK +DoDKjvbdMgComQUk +DnbkKvbdiGjDZWJu +DncKjvbdyqOmJKXA +DoDKjvbdVZITyjoO +DoCjjvbdzQoNJJwA +EOcLKvbdGAoQxizm +DoDKjvbdatagYKsh +EPDKjvbdSBceMJYk +DoDLKvbdMpYQvOHT +DncKjvbdiCOcFWpq +DoCjjvbdUGznLvvF +EPDLKvbdANIYrvyx +EPCjjvbdIwtCHkpp +EObkKvbdJSyBSmYM +EObkKvbdwuMdqYlO +EObjjvbdmuVZkKSG +DncLKvbdSPsfjFdX +DoDLKvbdSQUHJedX +DoDKjvbdiVZdwSUb +EPDLKvbdRjxfVGkT +EObjjvbdmpZyVkZC +DncLKvbdhzUelROG +EPCkKvbdxVMeRZMO +EOcKjvbdxxIiapZk +EOcKjvbdJSyBTNYM +EPDKjvbdMSXMzUpz +EPCkKvbdNddThhjd +DoDKjvbdznpREcLx +DncLKvbdqYoHgREY +DnbjjvbdiCPCdvqR +DoCjjvbdsQVoKDVf +DoCjjvbdqFcdtWBI +EPCkKvbdFkFTDIMu +DnbkKvbdQvmdCkgc +DnbjjvbduCbtwWOo +DoCjjvbdaNKaruNH +EOcLKvbdrpWPKCvG +DoCjjvbdEKHiuwjA +DoDLKvbdsBfMlHKy +EObjjvbduCcVWuno +DoCkKvbdNddUIiLE +DoDLKvbdVrNwbElD +EPCkKvbdTqQoUuHm +DoCjjvbdcJMikFvx +EOcKjvbdijGIJmYS +DncKjvbdtvNwipsA +EPDKjvbdGQASwGey +DoCkKvbdmJEUQtqa +DncKjvbdpxnggQcx +EOcLKvbdDnbjjwDE +DnbjjvbdxVMdqZLn +EPCkKvbdTkvPAvOi +DnbkKvbddijRvUzn +DnbjjvbdJuuFceGi +DoDLKvbdeATplxJf +EObjjvbdiLeDmuDZ +EObkKvbdzHYlANFX +EObkKvbdSBdFLiYk +DncLKvbdMgCpNPuL +DncLKvbdNsTufeVQ +EPCjjvbdUQqOtuIN +EPCkKvbdKDJcQicY +DnbkKvbdsCFmLfjy +DnbjjvbdNdctJIjd +DoDLKvbdzjUpPdSt +EPDLKvbdMoxRVmgT +EOcKjvbdbsCjscia +DoCjjvbdrDeIpOWB +EPDKjvbdOTUVgFVQ +EOcLKvbduWNwipsA +DoDKjvbdJcJcRKCx +DncKjvbdGZUtaDwb +EPCjjvbdZtJJYdSn +DoDLKvbdtcDVWuoP +EObjjvbdKaLGmCXq +DoCjjvbddZxoxYpb +DnbkKvbdWRmxCEkc +EOcLKvbdNrsufduQ +DoDLKvbdqlzJxlIJ +DoCkKvbdFVyPoljF +DnbkKvbdjggMGGOL +DoDLKvbdLAkHMawq +DncLKvbdwuMdpxlO +DoDKjvbdtSqrxydc +DoCjjvbdSLZGVHKs +DnbjjvbdrMzKYlIJ +DnbjjvbdTAFIhBnd +EPDLKvbdIxTbIMRQ +DoDLKvbdbBVeGQPw +DnbkKvbdvlvANEEm +EPDLKvbdEOcKkXCd +DoCkKvbdYqMdhmFR +EObjjvbdnUtzKiqf +EPCkKvbdtunXjQsA +DnbkKvbdddoSBwDK +DnbjjvbdTqROttgm +EPCkKvbdzQnmJJwA +EObjjvbdfpBzwDwh +DncKjvbdRotHJecw +EPCjjvbdhtzFWrVC +DncLKvbdqdEhpNvB +DnbjjvbdkWWmcbYX +EOcLKvbdYSkaMsoY +EObjjvbdDjIKVxKA +DnbkKvbdrounjDVf +EObkKvbdJzpFwdAN +DoDLKvbdsBelkgLZ +DoDLKvbdwtmEqZMO +DncKjvbdxmrgwriD +EOcKjvbdDoDLLWbd +EPDKjvbdIwtBhLpp +EPDLKvbdUaBqTRRy +DoCjjvbdjKFhJlwr +DoCkKvbdGLFTDIMu +EPCjjvbdrbFmMHKy +DoDLKvbdehKurOQg +DncKjvbdijFhJlwr +DoCjjvbdjvXOEBww +EPCjjvbdTXjkmzkY +EOcKjvbdaSFcHtGL +EPDLKvbdpyPIHQcx +EOcKjvbdmaiwXoNu +DoDKjvbdSBdFMJZL +DoDKjvbdjKGIKMwr +DncLKvbdyXiKBozL +DoCkKvbdqlzJxkhJ +EObkKvbdrNZiyLhJ +DoCkKvbdrpWPKCvG +DncLKvbdVrOXbEkc +DnbkKvbdOAIrtJrA +DnbkKvbdrXQMChyR +EOcLKvbdDnbjjwCd +EPCjjvbdjvXOECXw +EPCkKvbdMgDPmPtk +DoDLKvbdYfwEAPSi +EPCjjvbdzGxlANEw +DoDKjvbdmbKWwoNu +EOcLKvbddZxpXxqC +DoDLKvbdLGGHbApu +DoCjjvbdVTltGLuj +EPCjjvbdOEdThiKd +DoCjjvbdUyHtZkPO +DncLKvbdHELWJajK +EOcKjvbdcarmSAUN +EObjjvbdqiAJdmOe +EObkKvbdZQleImFR +EObkKvbdQccBQRDr +DoCkKvbdLAjfmBwq +DncKjvbdSKxeuHKs +DncLKvbdmJDsqUrB +EOcLKvbdGFirNhtR +DncLKvbdEARiMywX +DnbjjvbdZxcjNblS +DncLKvbdWXIwudEg +DoDLKvbdhkeDmuCy +EObkKvbdUslselWK +DoCkKvbdLhakqYAS +DoCjjvbdIMBzmvpk +EPCjjvbdKaKgMbXq +EPCjjvbdiLeDmtcZ +DnbjjvbdsPvPKCvG +DncLKvbdnVUzLKRf +DoDLKvbdiUyeWrVC +EOcLKvbdjblLRGuH +DnbkKvbdhtydvqtb +EOcKjvbdTqQnuVIN +DoCjjvbdMtsRkNAX +EPCjjvbdGKdrbglu +DncKjvbdMoxQvOGs +DoDKjvbdiHKDZWKV +DoDKjvbdULvPAvPJ +DnbkKvbdEvZQPmKF +EObjjvbdkxrrTZGt +EObjjvbdKCicQibx +DoCjjvbdKkAgvAKZ +EOcKjvbdNxOuzcmt +EPDLKvbdbsCjsdJa +EObjjvbdHDkVjBjK +EPCjjvbdYqMdiMeR +EPCkKvbdczYoxZRC +DncKjvbdnPzYujxb +DnbjjvbdMpYRWOHT +DncLKvbdLFegbBRV +DncKjvbdxVMdqYlO +DoDKjvbdFkErbhNV +DncKjvbdLLBHvAJy +DoDKjvbdTfzmkwWF +EPCjjvbdyXiKCQZk +DoDKjvbdqUUGrSLU +EObjjvbdGcjuiaij +EOcLKvbdZRMdhmFR +DoCjjvbdZoNiEdzK +DoCjjvbdEARiNZwX +DoCkKvbdwXMBVaWV +EPCjjvbdVZHsyjoO +DoDKjvbdyXhjBpZk +EObkKvbdtkxWaUAw +DnbkKvbdLrWmZuQz +DncLKvbdySnJNRbH +EPCjjvbdezvYdhsw +DoDLKvbdhancFWqR +EObjjvbdyzeORgiI +EPCjjvbdyXiJbPyk +EObjjvbduVnXiqTA +DnbjjvbdZjTHofaf +EPDLKvbdLrXMyuQz +DnbjjvbdHffyxxXg +DoDLKvbdOStWGdtp +DnbjjvbddijRvUzn +DoCjjvbdYNqAXtut +EPCjjvbdUQpntuHm +DoDKjvbduWOXjQsA +DoDLKvbdtTRsYydc +DncKjvbdpfDeUVaI +DoDLKvbdULuoAvOi +DnbjjvbdqmZjYkhJ +EPDKjvbdZMSETmkm +DoDLKvbdZshhyETO +DncLKvbdQdCaQQcr +DncKjvbdQccBQRES +EOcKjvbdrNZjYlIJ +EPDKjvbdjAQHBPgK +DoCjjvbdnUuZkJqf +DoDKjvbdLAjfmBxR +EObjjvbdUsltFkuj +DoDLKvbdZQleJMeR +DnbjjvbdBraCtGXS +DoDLKvbdaSFbhUGL +EObjjvbdrbGMkgLZ +EPCkKvbdJYUCHlRQ +EOcKjvbdgFkzNfgA +DoCjjvbdaRecHtFk +EPDKjvbdnUuZkKSG +EPDLKvbdkWWmdBww +EObkKvbdypoNJKXA +EOcKjvbdZxdJmblS +DncLKvbdZirhPgCG +DoDLKvbddeOrCXCj +DoCjjvbdOXoVzcnU +DncLKvbdSBdFMJZL +DncKjvbdrzMPraHn +DncLKvbdqZPHfpcx +DncKjvbdVAbQsQqy +DoDKjvbdySnJNSCH +EPDLKvbdtSqsZZeD +DncLKvbdtvOYKRTA +DncLKvbdLGGICBQu +DoDLKvbdDncLKwDE +EObjjvbdNrtVgEtp +EOcKjvbdUQqOtthN +EObjjvbdZtIiYcrn +EOcKjvbdmuVZjjRf +DnbjjvbdcJNKKevx +DoCkKvbdDxXlTtUM +DncLKvbdqZOhHQcx +EPDKjvbdIsZBSlwl +EOcKjvbdNUsRkNAX +DoDLKvbdRbEFMJYk +DnbjjvbdiBncFWqR +EOcLKvbdRzKIScWA +EOcKjvbdRbEFMIyL +EPDKjvbdsPunjDVf +DoCjjvbdhzVFkpmf +EOcKjvbddxZtUSFz +DncKjvbdnVUykJrG +EOcLKvbdEPCkKvbd +EPCjjvbdnUuZkKSG +DnbjjvbdnCKWxOmu +DnbkKvbdYzcFrKVy +DoDKjvbdvmWAMcdm +EObkKvbdhkdcmuDZ +DncKjvbdNsUVgFVQ +EPDLKvbdYzbeqiuy +EOcLKvbdUxgszLOn +DnbjjvbdZQmEiMeR +DoCjjvbdkHflFemk +EPDLKvbdhbPCdwRR +DoDLKvbdWXIwucdg +DoCjjvbdOYOuzcnU +DoDLKvbdcSbkTdJa +EOcKjvbdEvYpQMjF +EPDLKvbdrykosAhO +EObkKvbdrovPJbvG +DoDLKvbdkHflGGNk +DoCjjvbdZtIiYcsO +DoDLKvbdZnmiEdzK +EObjjvbdZMSDsnLm +EPCjjvbdLAjfmBxR +DncLKvbdptUGrRjt +EOcLKvbdNQXqVmgT +DoDLKvbdCIkCLIfK +EPDLKvbduVmxKRTA +EPDKjvbdHbLzEzAD +EPCjjvbdbUbGxKsh +DoCkKvbdjlbLzEgP +EPCkKvbdXGYzUAPT +DnbkKvbduLxXAsaX +EObkKvbdJvUfEFHJ +EOcKjvbdmbKXXoNu +EPDKjvbdQvnDbkgc +DoDLKvbdiUzFWrVC +EObkKvbdZyEKNcLr +DoDKjvbdrEEhpNua +DnbkKvbdzitoocsU +EPCjjvbdmbJvxOnV +EOcLKvbdNddTiIjd +DncKjvbdfpBzvdYI +EObkKvbdBhjbLIfK +DoCjjvbdFjeTDHmV +EOcKjvbdRjyGVGkT +DoCkKvbdZQldhmFR +EPDKjvbdqlzKZLhJ +DnbkKvbdZoOIeEyj +DncKjvbdBdPaVjNG +EPCkKvbdTulPjUBR +EPDLKvbdGGJqmiTq +DoDLKvbdGGJqmhsq +EOcKjvbdIryBTNXl +EPDLKvbdIsYaSmXl +DoCjjvbdVwJXudEg +EPCkKvbduDCtvuoP +EOcLKvbddBsMrAUN +DncLKvbdrouoJcWG +DoDKjvbdCgLfHAzc +DncLKvbdhtzEvqtb +DoDKjvbdZtIiYcsO +DncKjvbdMfbomPtk +DncKjvbdYqNEiMdq +DnbkKvbdCTBCtFvr +DncLKvbdhtzEvquC +DoCjjvbdAMhZSvyx +DoDKjvbdjlbLzEfo +EOcKjvbdZLrETmkm +DncKjvbdULvPAuni +DoCjjvbdtcCtvuoP +EPCkKvbdOTTugEtp +EObjjvbdhtzEvquC +DoCjjvbdkHgLfFmk +DncKjvbdmoyyVkZC +DnbkKvbdsBemLgKy +DoDKjvbddCTMrAUN +DoCjjvbdmuUykJqf +DnbjjvbdbQHGckzd +DoDLKvbdyOShXriD +EPDLKvbdZRNFImFR +EOcLKvbdDoDKkWcE +EPCkKvbdwMvAMcdm +DnbjjvbdbKlFoNcA +DoCkKvbdMfbpMpVL +DncLKvbdhkeDnUby +DoDKjvbdMSWmZtpz +EPCjjvbdmfeYMmgZ +DnbjjvbdqiAKFMoF +DoCkKvbdSBdElIxk +EOcLKvbduoTzpkPU +DncLKvbdDoCjjwCd +EObjjvbdLGGHbBQu +DnbkKvbdQcbaQRDr +EPDLKvbdyNrgxTJD +EObjjvbdtSqryZdc +DoDLKvbdegkWSNpg +EOcKjvbdZLrDsnLm +EObjjvbdFkEsCgmV +DoDKjvbdatagXjtI +DncLKvbdGZUuBDwb +DoDLKvbduDDUvuno +EObjjvbdURROtuIN +DnbkKvbdyXhjBpZk +DoDLKvbdKaLGlaxR +DoCkKvbdlZTRrxgU +EPDLKvbdUsltFlWK +DncLKvbdGGKRnIsq +DnbkKvbdijFhKNXr +DoDKjvbdrWokbiYq +EObjjvbdUaCRSqRy +EObjjvbdRkYfVHKs +DnbkKvbdQvnDcMID +EObjjvbdvBEYrneI +DnbkKvbdySmiNRbH +EPDKjvbdjuvmcaxX +DoCjjvbdVTmUGLuj +EPDLKvbdxVMeRYlO +DnbjjvbdNPwpvNgT +DoDKjvbdJTZArlxM +EPDLKvbdjbkkRHUg +DnbkKvbdSBdFMIyL +EPDKjvbdMgColpUk +DncLKvbdVAbQsQrZ +DncLKvbdyTOJNRag +DnbjjvbdmgFYMmgZ +EPDKjvbdTAFIgbOd +EObkKvbdFWYoomJe +DoDKjvbdIxUBhMRQ +DoCjjvbdFWYopNKF +DoDKjvbdNdcshiLE +EOcLKvbdwWlBWAuu +EPCkKvbdYpldiNFR +EPDLKvbdQwODbkgc +EPCkKvbdqZOhHQcx +EObjjvbdHDjujCKK +DoDLKvbdnBjWwnmu +EPDLKvbdUQqPUuHm +DnbkKvbdIryBSlxM +DnbkKvbdjhGlFfNk +DnbkKvbdqlyiyMHi +EPDLKvbdxmsIYTIc +EPCjjvbdNrsufduQ +DncLKvbdaaWEepPw +DnbjjvbdkVvnDaxX +EOcKjvbdUQpntuIN +EOcKjvbdQdDAopcr +DoCkKvbduMXvaUAw +DnbkKvbdMRwNZuQz +DoCkKvbdNGcQMotk +EPDLKvbduWOYJpsA +DncKjvbdZtJIxcrn +DnbjjvbdwyhFfXeS +EOcLKvbdIryAsNYM +EObjjvbdyTNiNRag +EPCkKvbdiZuGLqOG +DncKjvbdHELWJbKK +DoDKjvbdIGfyxwxH +EPCkKvbdeOdrkTsr +DoDKjvbdpstGrRjt +EOcKjvbdZtJIxdSn +EObjjvbdZtIiZDrn +DnbjjvbdOEctIhkE +DncLKvbdKDJbqJbx +DncKjvbdEOcLKvcE +EOcLKvbdgLGzcGAE +DoCjjvbdGBPQxizm +EPCjjvbdeFOqbXDK +EObkKvbdehKuqnQg +DncKjvbdRosgKFcw +EOcLKvbdUsmUGLuj +EOcLKvbdrXQMCiZR +DoDKjvbdjcMLQftg +EPDLKvbdHEKvKBjK +EPDKjvbdbVCHYLUI +DncKjvbdFfKSOItR +DncKjvbdYSkaNToY +DncLKvbdQvmccLhD +EOcKjvbdnVUykKSG +DoCkKvbdbsDKsdJa +EObkKvbdGLFTChMu +DoCkKvbdqGEFTuaI +EPCkKvbdddoRbXCj +EPCjjvbdMfbpNQVL +DoDKjvbdFjdrbgmV +EPCkKvbdmRxuZsDi +DncKjvbdaRfChUGL +DncLKvbdMJBkqYAS +EObkKvbdxUmEqYlO +EPDLKvbdtbbtvuoP +DoDKjvbdxsOJNSBg +EPDKjvbdZtIhyDrn +DncLKvbdKCicRKDY +EPDLKvbdUtNUFlVj +EPCjjvbdeATqMxJf +EOcLKvbdaNLBsUmH +DoDKjvbdJcJcQjDY +EPCkKvbdiMEdNtby +DoCjjvbdiGibyWJu +DncKjvbdeEnrCXDK +EPCjjvbdUVlPisaR +DncLKvbdXGZZtAPT +DoDKjvbdddoRbXDK +DoDLKvbdSBdElIyL +DoCjjvbdRNXbZOUz +DnbjjvbdTAEhhCPE +EObjjvbdUMVoBWOi +DnbkKvbdFjdrcHmV +DoCjjvbdfIKurORH +DoDLKvbdVBCRTQrZ +EOcLKvbdZoNhddzK +DoCkKvbdULvOaVoJ +DnbjjvbdZirhPgCG +EOcKjvbdVBBprqSZ +DoDLKvbdaSFcIUGL +DoDLKvbdfIKuqnRH +DncKjvbdijGIKNXr +EPDLKvbdrzMPsAgn +EPDKjvbdNUsSKmAX +EPCkKvbdLLAhWAKZ +DncKjvbdkWWnDaww +DnbkKvbdJYUCHlQp +EPDLKvbdNwoVzdNt +DoCjjvbdSLYetfjs +DoDLKvbdptTgSSLU +DncKjvbdxVMdqZLn +DncKjvbdZyDinDMS +DnbkKvbdnPyxujxb +EPCkKvbdSiZjRABM +EPDKjvbdPyNAHSqj +DncLKvbdqwPlChyR +EPDKjvbdGckWJbKK +DoDLKvbdbBWFFoow +DoCkKvbdkCkkRGuH +DncLKvbdmJDtQuSB +EObkKvbdQdCaQQdS +DncKjvbdKfFhBaQu +DncKjvbdaNKaruMg +EOcKjvbdnPzZWLYb +EObjjvbdxUldqZMO +DnbkKvbdGckWJaij +DncKjvbdkVwODaww +EObjjvbdGKdsDHlu +EObkKvbdKQyeOfOF +EPCkKvbdGdKvKCJj +DnbkKvbdGdKuibKK +DoDKjvbdOFDtJJKd +DoCkKvbdwuMdpxkn +EObjjvbdZjShPgBf +DoDKjvbdcyxpYZQb +DnbjjvbdrbGMkgLZ +DnbjjvbdxsNiMqbH +DoDKjvbdWSOXbFLc +EPCjjvbdrDeIomvB +EOcKjvbdEuxopNJe +DoDKjvbdKDKCqKCx +DoCkKvbdkIHLfGNk +EOcKjvbdnUuZjirG +DncKjvbdIryArmXl +DoDKjvbdraemMGkZ +DncKjvbdEJgivYKA +DoDLKvbdbhmJkGWx +DnbjjvbdZyDimcMS +EOcKjvbdhuZeWrVC +DnbkKvbdRbEFMJZL +EPCkKvbdeOdrkUTr +DoCkKvbdlhdUQuRa +DnbjjvbdZtIiZDsO +EPCjjvbdZyEJmcMS +DnbjjvbdFpATWgGZ +EOcLKvbduaDxroEh +DnbkKvbdpeceUWBI +EOcKjvbdjcMLQftg +DncLKvbdnPzZWLZC +DnbjjvbdZyEKNcMS +DoDKjvbdZMSDsnLm +DnbjjvbdOAIsTjSA +DoCjjvbdWSNxCFLc +DoDKjvbdkClLRHVH +DncKjvbdZxdJmcLr +EPCjjvbdOYOuzdOU +DncKjvbdWHxVxHYz +DoDLKvbdwXMBWBVu +EObjjvbdZxdJmcMS +EOcKjvbdrEFJPmvB +EOcKjvbdQcbaQQcr +EPCkKvbdfHkWRnRH +EOcKjvbdrEEiQNvB +EObkKvbdcTCjtDia +DoCkKvbdnCJvwoOV +DoDLKvbdxnTIYSiD +EOcKjvbdGQASvfey +DoDKjvbdUtNTekvK +DoDLKvbdbUbHXkTh +DncKjvbdaNLBsVNH +EPCkKvbdmtuZjirG +EPDKjvbdvlvANEEm +DnbkKvbdcIljLGWx +EOcKjvbdJSyArmYM +EObjjvbdVTltFlVj +DncKjvbdTAFIgbOd +EOcLKvbdUsltGLuj +EObjjvbdZRNEhmFR +EOcKjvbdUGznMXVe +DnbjjvbdTqQoUthN +DncLKvbdZRNEhmEq +EObkKvbdKxpirzuG +EOcKjvbdiVZdvqtb +EOcLKvbdatbGxKtI +DnbkKvbdpfDdsvBI +DnbjjvbdpyPIGqDx +DoCkKvbdqUUGrRjt +DoCjjvbdfHjuqmqH +EPDKjvbdqlzJyLgi +DoCjjvbdznpREcMY +EObjjvbdjuvnEBww +DoCkKvbdQwNdCkgc +DoCjjvbdxsNhlqag +EOcKjvbdbsDKtEJa +EPDLKvbdfIKuqnQg +DncLKvbdJXsbILqQ +DoDLKvbdiUydwRuC +EOcLKvbdUtMsfMVj +DnbkKvbdfNGWflik +DoDLKvbdqwQLcJZR +DncLKvbdYqMeIleR +DoCjjvbdzaAPGgBl +EPCkKvbdauBgYLUI +EPDLKvbdiUydvqtb +DnbjjvbdRyjITCvA +DncLKvbdIwsahLqQ +EPCjjvbdRacdkiYk +EOcKjvbdRbEFMJZL +DoCjjvbdrzLoraHn +EObkKvbdxxIiaozL +EOcLKvbdJcJbqJbx +EPCjjvbdZisHogBf +EOcKjvbdVTmUGMWK +EPDKjvbdrylQSaIO +DncLKvbdSCEEkiYk +DoDLKvbdhtyeXRuC +EObjjvbdQvmcblID +DoDKjvbdauCGwjtI +DnbkKvbdGYtuBEYC +DoCkKvbdkyTSSxft +EPDLKvbdIGfyyYYH +EObjjvbdjlbLzEgP +EPCjjvbdIwsbHkpp +EPDKjvbdmuUyjjSG +DoCkKvbdUQpoUtgm +EObkKvbdUQqPVVIN +DncLKvbdXrkaMsnx +DncLKvbdaMjbTUlg +DncLKvbdhgJbyVjV +DnbkKvbdURQoUuIN +DnbjjvbdFWZQQMie +EPCjjvbdnCJwYPNu +EOcLKvbdBcpBVimG +DoCkKvbdyqPMiKXA +EObkKvbdnVUzKjRf +DnbkKvbdVgwvXgYz +EObkKvbdZsiJZDsO +EPDKjvbdiCPCdwRR +EObkKvbdGYuUaEYC +DnbkKvbdpyPIHREY +DnbjjvbdiZtfLpnG +EPCkKvbdVUNTelWK +DnbkKvbdTppoVUhN +DnbjjvbdxrnIlrBg +EPDKjvbdmIdUQtrB +EObjjvbdkNBkzFGo +DncKjvbdhbOcFXQq +DoDLKvbdNGcPmQVL +EPDKjvbdZoNheEyj +DnbkKvbdjlbLzEfo +DoCjjvbdZRMdiNEq +EObjjvbdczYoxYqC +EPDKjvbdLAkHMaxR +DoDLKvbdsPunibuf +DoDLKvbdNdcshhkE +EPDKjvbdhkdcnVCy +EPCkKvbdVZHtZkOn +DnbjjvbdsrrTYzFD +DoCjjvbdatbGxKtI +EOcLKvbdnGdxMnHZ +EPDLKvbdmaivwoOV +EObkKvbdjJegjMwr +EPDKjvbdYfwEAOri +EOcKjvbdpxngfpcx +DnbjjvbdEPCjkXCd +EPDKjvbdxsOImRag +EObjjvbdEPDKjwDE +DnbjjvbdYlSETnLm +DncLKvbdBiLBjhej +DoDKjvbdrpWPJcVf +DncKjvbdRpTfiedX +DoDKjvbdakMGOnDA +DnbjjvbduVmxKQsA +DncKjvbdKfFhCBRV +DnbkKvbdpfEFTvBI +DncLKvbdqwQLcIyR +EOcKjvbdlhdTpuSB +DncKjvbdqwQLbhxq +DnbkKvbdnHEwlmgZ +EPDKjvbdDoCjkWbd +EObkKvbdANIYsWyx +EObjjvbdpfEEsvBI +EPDKjvbdCJLCKiFj +DoDKjvbdqcdhonVa +EPCjjvbdzjUpQESt +DncLKvbdZQleImEq +EPCjjvbdEPCkLXCd +EPDKjvbdYlRdUNlN +EObkKvbdxwiKBozL +DnbjjvbdFjdsChNV +EObjjvbdwtleRYlO +DoDLKvbdeOdsLUUS +EPDKjvbdZLqctOLm +DoDLKvbdjlbLyeHP +DoCkKvbdaNLCTVMg +DnbkKvbdEKHjWXjA +DnbkKvbdZshhyDsO +DnbjjvbdsPunibuf +EPCkKvbdwWkaWBVu +EPDLKvbdFpATWfey +EObjjvbdzoQQdcMY +EPDLKvbdpxngfpcx +DnbjjvbdgPazwDwh +EPDKjvbdKVtfEEfi +EOcLKvbdhkeENuDZ +EObkKvbdIwtCILqQ +EPCjjvbdyNrhXsJD +DnbkKvbdMSWmZuQz +EOcLKvbdsPunicWG +DncLKvbdULvPBWPJ +DoCkKvbdKfFhCApu +EOcLKvbdTAEhhCOd +DnbkKvbdSKxetfjs +DoCjjvbdUtNTfLuj +EObjjvbdhzVGMROG +DoCkKvbdxsNhmRag +DnbjjvbddZyPwxpb +EObjjvbdEuxooljF +DncLKvbdVTlsfLuj +DoCkKvbdZjShQGaf +EPDKjvbdrSVKnKaN +DnbkKvbdFxuVBDwb +DoCkKvbdJXtBhLpp +EPCjjvbdHffzZXxH +DoCjjvbdqZOgfqDx +DncLKvbdqwQMChyR +EObjjvbdaSGDIUFk +EPDLKvbdZxdKNcMS +EObjjvbdhuZdwSUb +EPDLKvbdfMfWgMik +DncLKvbdZRNFJMdq +EOcKjvbdJKEAKPfd +EPCkKvbdcyxoxYqC +EOcKjvbdCSaCsevr +DoDLKvbdKQzEoGNe +DoDLKvbdjhHLefOL +DoCjjvbdRjxeuGjs +DncKjvbdyOTIXsIc +DnbkKvbdBdQBWKMf +EOcKjvbduLxXBUBX +EObkKvbdrSUkNkAm +DoDKjvbdKfFhBaRV +EPCjjvbdddoSBvcK +DncKjvbdyOTHxTJD +EOcLKvbdiLeENuDZ +DoCjjvbdJbjDRKCx +EPDKjvbddoErkUUS +DoCkKvbdBiKakJGK +DnbkKvbdCIjbKiFj +DoCjjvbdIsZBSmXl +EOcLKvbdBhjajiFj +DnbjjvbdrzMQTBIO +EObjjvbdrWolChyR +EPCkKvbdEARiMzXX +DoDLKvbdrWpMDJYq +EOcLKvbdKRZdoGOF +DoCjjvbdBsAcUFvr +DoCjjvbdBraDUGXS +DoCkKvbdIwtBhMQp +EObjjvbdeATqMxKG +EPDKjvbdYzbfRjWZ +EOcLKvbdsCGNLgKy +DoDKjvbdhficZWKV +EObjjvbdZQldhldq +EPDKjvbdsQVoJbvG +EPDKjvbdsQVnicWG +DoDLKvbdVZITyjoO +EPCjjvbdILazmvpk +EPCkKvbdZMSDsmlN +DoCjjvbdZGvdAOri +DoDKjvbdwuMeRYkn +DnbjjvbdZyEJmblS +EPDKjvbdhkeENuDZ +EPDLKvbdGdKvKCKK +EPCjjvbdjuwOECXw +EObkKvbdZeXfzghb +EObjjvbdJmAEZgUa +EOcLKvbdtcCuWvOo +EPCkKvbdiiehJlwr +DoDLKvbdwtldpyMO +DoCjjvbdjblLQfuH +DncKjvbdNPwpunGs +DnbjjvbdSLZFtgLT +EPDKjvbdyXhjCPyk +EObjjvbdliETpuSB +Dnbjjvbdqlyixkgi +DoDLKvbdmbJvxOnV +DoCjjvbdZjSgpGaf +DoCjjvbdqdEhpNua +DoDLKvbdelfXGmKL +EPDKjvbdIGgZyYYH +DncLKvbdfMfXHMik +DoCjjvbdZoNheEyj +EPCkKvbdsZlPsBIO +EOcKjvbdLAjgMbXq +DncKjvbdVZITykOn +DnbjjvbdpyOgfqEY +EPDKjvbdbUagYKtI +EObkKvbdrSUjnLBN +DncKjvbdQwNdDLhD +EOcLKvbdrykosBIO +EPDKjvbdsPunicWG +EPCjjvbdliDtQuRa +EOcKjvbdcSbkTdKB +EOcLKvbdKaKgNCXq +DnbjjvbdZshhxcrn +DnbkKvbdcbTMrAUN +EPCkKvbdsQWPKDVf +DncKjvbdijGHjMwr +EOcLKvbdULvPBVni +EPCjjvbdffLynHHA +DoCjjvbdTqQntuHm +DoDLKvbdjuwNdCXw +DoCkKvbdVZITzLOn +EPDLKvbdqrUkOLAm +EPDLKvbdZQmEhmFR +DoDKjvbdwjvdHzyf +EPDKjvbdePErjtTr +EObjjvbdmozYvLZC +DnbjjvbdACrXizIp +EOcLKvbdTvMQJtAq +DncLKvbdssSTZZeD +DnbjjvbdmozZVjxb +EOcLKvbdtSrSxzFD +EPDLKvbdZyDjOCkr +DnbkKvbdbBWEeopX +EOcLKvbdkWWmcbXw +DoCkKvbdkVwNdBww +DncKjvbdEzsqFMCi +DncLKvbdACqxJyhp +DoDKjvbdYpmFIleR +DncKjvbdGKdsCglu +DoCkKvbdZnnJFEzK +DoDKjvbdBsBCtGWr +EPDKjvbdBcpAuimG +DnbjjvbdIGfzYxXg +DnbkKvbdGLEsCgmV +EPCkKvbdySnJNSBg +DoCkKvbdPyNAGrqj +EPDKjvbdmaivxPNu +DnbjjvbddoFSkUUS +DoCkKvbdySmiNRag +DoDLKvbdEYXlUUUM +EObkKvbdCTBCtFwS +DoDLKvbdoznDkXoA +EOcLKvbdBvzciEov +DoCjjvbdSPtHJfEX +EPDLKvbdtvOYJqTA +EPDKjvbdZisHpHBf +EPDKjvbdILazmvqL +EOcKjvbdRpUHKGDw +DncKjvbdWXJYWDdg +EPDLKvbdIwtCHlQp +EPDKjvbdUtNTfLvK +DncLKvbddZxpXxqC +EOcLKvbdkNBlZdgP +EObkKvbdqYnhGqEY +EPDLKvbdfpBzwDwh +DncLKvbdTkuoBVoJ +DnbkKvbdvvlBWAvV +DoCjjvbdrXQMCiYq +EPCjjvbdFeiqmiUR +DncLKvbdzjUopDsU +DncKjvbdhkeDmuCy +EPCjjvbdVqnYBdlD +EOcLKvbdSCDeLiYk +DoCjjvbdJvUeceHJ +EPCjjvbdjgfkfFnL +DnbjjvbdkVwNdBww +EObkKvbdczYowyRC +EPCjjvbdZoNhddyj +EPCjjvbdOSsugEuQ +EObkKvbdZMRcsnLm +EObjjvbdrMzJyLgi +EPDKjvbdrSUjnKaN +EPDKjvbdSLYfUfkT +EPDKjvbdUVlQKUAq +DoDLKvbdJcKCqJbx +DnbjjvbdeFPRbWcK +DoCkKvbdVAbQsQqy +DncLKvbdpeceTvBI +DoDLKvbdcIlikFwY +DoDLKvbdbsDLTdJa +EPCkKvbdRXOEClHc +DnbjjvbdbKkennDA +DncLKvbdEzsqEkcJ +EPCjjvbdJvUedEgJ +EOcLKvbdzitpQDsU +DncLKvbdQvnDblHc +EOcKjvbdbQGgDkzd +DnbkKvbddZyPxYpb +EPDLKvbdLrXNZuQz +DoDKjvbdDjIJvYKA +EPCjjvbdbVCHXjsh +EOcLKvbdsPunicVf +EOcLKvbdEzspdlCi +DoDLKvbdmRxtzSdJ +DnbjjvbdsBfNLfjy +DoCjjvbdcTDLUDia +EPDLKvbdidjgVPAO +DoCkKvbduVmxKQsA +EObjjvbdxLXDgzzG +EPCkKvbduaEZSoFI +EOcLKvbddneSjssr +DoCkKvbdWXJYVdFH +DncLKvbdHkaznWqL +DncKjvbdbVCGxKsh +DnbjjvbdiMEcmtcZ +DoDKjvbdqAheAXHd +EPCkKvbdMIalQxAS +DnbjjvbdVviXucdg +DnbjjvbdMpXpumgT +EObkKvbdMJCLqYAS +EObjjvbdczZQYYqC +DncLKvbdUxgtZjoO +EOcLKvbdjuwNdCYX +DncKjvbdSwjlNzkY +EPDLKvbdrWpLbhxq +DoDKjvbdnBjWwoOV +EPCjjvbdmSYtyrdJ +DoDLKvbdzeZnzdzQ +DncLKvbdMowqWOGs +EPCkKvbdqTsfqrLU +EObkKvbdraemMHKy +EOcLKvbdJcJbpjCx +DnbjjvbdmuUzKjRf +DncKjvbdNeEThhkE +DoDKjvbdHakydzAD +EOcKjvbdXsLaNUPY +EObjjvbdLFfHbBQu +DncLKvbdbKlFoODA +DoCjjvbdRpTfiecw +DnbkKvbdRkYetgLT +DoCjjvbdegkVrOQg +DoDLKvbdhlFEOUby +DoCkKvbdFyUtaEXb +DnbjjvbdAMgxsXZx +EOcLKvbdUQqOtuHm +EPDKjvbdxrmiMrCH +EOcLKvbdREDApQdS +DoDLKvbdWRmxBdlD +DnbjjvbdiHKCyVjV +EPCkKvbdxwhjCPyk +EObjjvbdLKaHvAJy +EPDLKvbdZtJJYcsO +DoCjjvbdbPfgDkzd +EObkKvbdUaBqTRRy +EPDKjvbdGYtuAcwb +DnbjjvbdQcbaQRDr +EPCjjvbdsBfNMHKy +EPDKjvbdZyDimblS +DoDKjvbdJXtBglRQ +EObkKvbdpssfrSLU +EOcLKvbdMRwMytpz +DoCjjvbdEYYMUTtM +DoCkKvbdeAUQmXif +DncLKvbdUaBqSpqy +EObkKvbdVAbQrqRy +EObkKvbdwXMAuaWV +DncLKvbdCIjakIfK +DncLKvbdjmBkzEfo +EOcLKvbdKVtfDeGi +EObkKvbdnQZyVjxb +DncLKvbdzRPMhiwA +DncKjvbdJpydnfOF +EPDKjvbdqTsfrRkU +EPDLKvbdEuyQPlie +DnbjjvbdfSBWzlCo +DnbkKvbdqiAKFMne +EPCjjvbdatbHYLUI +EOcKjvbdNsTugEtp +EPCkKvbdmgFXmNgZ +EPDLKvbdMSXNZtpz +DoDKjvbdUaBprqRy +DnbjjvbdXmqAXtvU +EOcKjvbdHlBznWpk +EOcKjvbdVqmwbElD +DoCkKvbdqrVLOLAm +DnbkKvbdZshiYcrn +DoCkKvbdZoNhddyj +EOcLKvbdEuxooljF +DnbkKvbduCcVXVoP +EPCkKvbdmuVZjirG +DncKjvbdRzKHrbvA +EObkKvbdeKJqutzn +EObkKvbdyOShXsIc +EPCjjvbdRbDdlJZL +DoDKjvbdSBdFMIxk +DncLKvbdKaKgMawq +EObkKvbdCDpAuilf +DnbkKvbdRWnDcLgc +DncLKvbdqlzJxkhJ +EPCjjvbdNHDQMpUk +EOcLKvbdRMwbZNtz +EPDKjvbdOEdThiLE +DoDLKvbdUyHszKoO +DnbkKvbdZisIPgCG +DncKjvbdwzHeeweS +DncKjvbdQwODcLhD +DoDLKvbdqdFJPmua +EOcLKvbdvwMAvBVu +EPDLKvbdbVBfwjsh +DoCkKvbdRyjHrcWA +DoDLKvbdWIYVxGxz +DnbkKvbdbiMjLGXY +EOcLKvbdBhjbKiFj +EObjjvbdCDpAvJmG +EPDKjvbdLBKfmCYR +DoCkKvbdbiMijevx +DnbkKvbdyOSgwriD +EPDLKvbdlYrqsZHU +EOcLKvbdwyhGFxFS +EPDLKvbdRyjHsCvA +EPCkKvbdHgGzYxYH +DoDLKvbdGFjRmhtR +EPDKjvbdFyUtaEYC +DncLKvbdeFOrCWbj +DoDLKvbdJSyArlwl +EOcKjvbdZyEKODLr +EOcLKvbdemGXGmJk +DnbjjvbdSCDeLhyL +DoDLKvbdYTLaMsnx +DoCjjvbdxKwEHzyf +EOcLKvbdiVZdvquC +DnbkKvbdUaBqTQqy +EPCjjvbdGZVVBEXb +DoDLKvbdCEQAvKMf +DoDLKvbdRWmdCkhD +EPDKjvbdRotHJecw +DoCjjvbdZxcimblS +EOcLKvbdtbcUvvOo +DnbjjvbdZsiJZDsO +EOcKjvbdRyjHsCvA +EOcKjvbdxLWdHzzG +DoCjjvbdFjdrbhMu +EPCkKvbdxVNFRYlO +DoCkKvbdmIcsqUqa +EPDLKvbdfMfWgMjL +EPDKjvbdTqQoUthN +EOcKjvbdtkwvaUAw +DoDKjvbdBdPaVilf +DoDLKvbdZMRdTmkm +EPDLKvbdelewGlik +DoCkKvbdwzHfFxEr +EPCkKvbdvAcyTPFI +EObjjvbdQdDBPqES +DoDKjvbdZtIiYcrn +EOcKjvbdypnlhiwA +DoCkKvbdNrtWGduQ +DncKjvbdxsOIlqbH +EPCjjvbdANIYrvyx +DnbjjvbdNwnuzdOU +EPCkKvbdFyUuBEXb +EOcLKvbdaaWFGQQX +DncLKvbdraelkfkZ +EPCjjvbdTpqPVUhN +DncKjvbdySmiNSBg +EPDKjvbdrpWPJbvG +EObjjvbdwNWANEFN +EObjjvbdZeYGzhJC +DoCjjvbddndsKstS +EPDLKvbdegkWSORH +EPCjjvbdvwMAvBVu +EPCjjvbdkySqrxgU +EPCkKvbdHkaznWqL +EPCjjvbdqlzKYkhJ +DncLKvbdZxdJmcMS +EPCjjvbdqGEFTvAh +EObjjvbdTYKkmzkY +EPCkKvbdZisHofbG +EOcLKvbdzoPpdcLx +EPDKjvbdZjTHpHCG +EOcKjvbdKWVGEFHJ +EPCjjvbdhyuFlROG +EPCkKvbdFjeTDIMu +DncLKvbdOYPVzcnU +DoCjjvbdSZjISbvA +DoCkKvbdZoNiEdyj +EPCjjvbdrWpMDJZR +EObkKvbdkVvnDaxX +EObjjvbdcSbjtDia +DnbjjvbdLGGICBRV +EPDLKvbdkWWmcbXw +EObjjvbdnHExNOHZ +DncKjvbdUtNUFlVj +EObkKvbdEvZPomKF +DoCkKvbduoTzpjnt +EOcLKvbdURQoVVHm +DnbkKvbdTAEiIBnd +DncKjvbdQwOECkgc +DnbjjvbdRbDdkiZL +DoCjjvbdEPCkLWcE +EPDKjvbdzjUpPdSt +EPDKjvbdZMSDsmkm +DoDLKvbdBdPaWJmG +EPCkKvbdwjwEHzyf +DnbjjvbdhuZeXSUb +DoCkKvbdlYrqsYft +DoCjjvbdEXxMTssl +DoDKjvbdzoPpdbkx +DncKjvbdWRnXbFMD +DoDLKvbddijRutzn +DncKjvbdnCKWwnmu +EOcLKvbdZMSDsmkm +EOcLKvbdUaCRTRSZ +EObkKvbdkCkjpgVH +DnbkKvbdirziTKiz +DoDLKvbdJpyeOenF +EObkKvbdGKdsDHmV +EObjjvbdoAKzshDn +EPDLKvbdlrZVZrci +DncLKvbdRzKHsDWA +EObkKvbdKkAhWAKZ +EPDLKvbdVAaqSqRy +DoCkKvbdjAPgApHK +EPCkKvbdBcpBWJmG +DncKjvbduCbuXWOo +EOcLKvbdqiAKEmOe +EPDKjvbdYpldhleR +DnbjjvbdEPCjjwCd +DnbjjvbdbsDKtEJa +EObjjvbdKfGICBRV +DoDLKvbdRadFMIxk +DoDKjvbdGGJqmhsq +EPCjjvbdJbicQjDY +DncKjvbdbiNKKfWx +EOcLKvbduLxXAsaX +EPCjjvbdEKIJuwjA +EPCjjvbdWRmwadlD +DnbjjvbdfMewGmJk +EOcLKvbdNxOuzdOU +DnbkKvbdfIKvSOQg +DncLKvbdQZNAHSqj +DnbjjvbdZLqdUNlN +EPCjjvbdSLYetgLT +DncKjvbdeEoSCWbj +EPDLKvbdsCFmMGjy +EPDLKvbdLGGHaaRV +DncLKvbdEuxpQMjF +EObjjvbdVYhTzLPO +EPCkKvbdaSFbhTek +DnbkKvbdDihJuwjA +EObjjvbdFjeTDIMu +EObjjvbdhkeDnUby +DoDKjvbdxUmEpyLn +DncLKvbdiVZdvqtb +DoCkKvbdunszqLPU +DnbkKvbdSBcdkiYk +EObjjvbdbhmKKevx +DnbjjvbdVZHtZkOn +DoDLKvbdZirgogCG +DoDLKvbdqBIeAWhE +EPCjjvbdwtmEqYkn +DncKjvbdKCjDRJbx +EOcKjvbdTvLpJsaR +DoDKjvbdyXhjBozL +DnbjjvbduDDUwVoP +DoDKjvbdzaAOfgBl +DoCjjvbdWSOYCElD +EOcLKvbdqwQMDJYq +DoCkKvbdNHColpUk +EPCkKvbdCEPaVimG +EOcKjvbdjKFhJlxS +EOcLKvbdxUleRYkn +DnbkKvbdrNZjZMHi +DoDKjvbdmuUzLKSG +EObjjvbdfIKurOQg +EPDKjvbdQlwbZNtz +DncKjvbdhkeDnUby +EObjjvbdwuMdqZMO +DncKjvbdliDtQtrB +EPCjjvbdNPwqWNgT +DncKjvbdjAPgApGj +EObkKvbdMpYRVmfs +DnbkKvbdGKeTChNV +DoDLKvbdHbMZdzAD +EObjjvbdQlwayOUz +EPDKjvbdVqnYCFLc +DoCkKvbdmpZyVjyC +EObkKvbdUslsfLuj +DoDLKvbdlhdURVSB +EOcLKvbdmSZVZrci +DoCjjvbdYzberJuy +EPDLKvbdhzVGLpnG +EPCjjvbdsPvOicVf +EObkKvbdeOeTLUUS +DncLKvbdmfdxMnHZ +EPDKjvbdHffzYwxH +EPDLKvbdrylPsAgn +EOcKjvbdwWlBWAvV +EPDKjvbdVAbQsQqy +DnbkKvbdsZlPsBIO +DncLKvbdEzspdkbi +DncLKvbdhyuGMROG +DoCkKvbdFaOpxizm +DoCkKvbdZsiIxcrn +DoCkKvbdijGHjMwr +DnbkKvbdcyxpYZQb +DnbjjvbdEzspdkbi +DncLKvbdNQYRVnGs +EObkKvbdkClKpgVH +EOcLKvbdkClKqHVH +EOcKjvbdhanbdvqR +EPCkKvbdmfdwmNfy +EObkKvbdYTMAmUPY +DoCkKvbdIGgZxxXg +EOcKjvbdnHEwlnHZ +DncLKvbdCDpAuilf +EPCjjvbdmbKXXoOV +EObkKvbdapGfdLzd +EPCkKvbdRjyGVHLT +DoCkKvbddoFTLTtS +EPCjjvbdGLFTCglu +DoCjjvbdiLeENtcZ +DoCkKvbdKCicQjCx +EPCkKvbduoTzqLPU +EPCjjvbduVmwiqTA +EPCjjvbdWIXuxGxz +EPCjjvbdpxngfqDx +EOcKjvbdeOdrkTsr +DoDLKvbdNrsufduQ +EOcKjvbdIHHZyXwg +DoCjjvbdpfEEsvBI +EOcKjvbdhgKDYvKV +DnbjjvbdmbJvxOmu +EPDKjvbdGdKujCKK +DoDLKvbdfkGzcGAE +EPCkKvbdZoNiEeZj +EPDLKvbdaMjbTUlg +EPCkKvbdSPsgJfEX +EPDKjvbdDxYLstUM +EPCjjvbdKVtfDeGi +EOcLKvbdpeceTvAh +EObjjvbdHffzYwxH +DnbjjvbdffMZnHHA +EOcLKvbdsQVnibvG +EOcKjvbdZirgpGbG +EObjjvbdJSxaTMxM +EOcLKvbdbrcLUEKB +EPCjjvbdGZUuAcwb +DnbkKvbdpssgRrLU +DnbkKvbdKVteceHJ +EPDKjvbdmajXYOmu +EPDKjvbdNwoVzdOU +DnbjjvbdrpVnicWG +DoDKjvbdjhGlFfNk +EObjjvbdEXwlTtTl +DoDLKvbdkCkkQftg +DncKjvbdDxYLtUTl +DncKjvbdNQYQunGs +DoDLKvbdZQleImFR +DoDKjvbduVmxKRTA +DoDLKvbdsrqsZZdc +DoDLKvbdZLqctNlN +EPDLKvbdNsUVfeVQ +DncLKvbdhuZeXRuC +EPCkKvbdiCObdwRR +DoDKjvbdIwsbIMQp +EObjjvbdtcCtvvPP +EOcLKvbdpyOhHRDx +EObjjvbdmgEwmOHZ +DoCkKvbdelevgNJk +DoCjjvbduLwwBTaX +DoCkKvbdXrlBNTnx +EPDLKvbduCcUvuoP +EPDKjvbdURRPVUgm +EObkKvbdBsBCsfXS +DoDLKvbdZjSgogCG +EObkKvbdhgKDZViu +EPCkKvbdEYXkstUM +DncLKvbdrMzJyLgi +DnbjjvbdaSFcIUFk +EPDLKvbdnBjWxOnV +EPDLKvbdssRryZeD +EOcKjvbderAvzkbo +DoCjjvbdZirhQHCG +DnbkKvbdBraCtFvr +EOcLKvbdxZgfFxFS +DoDKjvbdJuuFdFGi +EPDKjvbdUQqPUtgm +EPDLKvbdNHCpMpUk +EPDKjvbdnCKXYOnV +DoCkKvbddZyQXyQb +DnbjjvbdpxoHgREY +EPCkKvbdfNFwHNJk +DncLKvbdVBCQsQqy +EPCkKvbdUxhTzLOn +EObjjvbdSQTgJfEX +DoCkKvbdrWpLbiZR +DoDLKvbdtcDUwWOo +DoCkKvbdwzHfGXeS +EPDLKvbdrzMPraHn +EPCkKvbdDoCjjvcE +DoDLKvbdbhlijewY +EObkKvbdUxgsyjoO +DoDLKvbdbUafxKsh +DoCjjvbdULuoBWOi +EPCkKvbdVBBqSqRy +DoCjjvbdhkeENtcZ +EPCjjvbdqYnggRDx +DncLKvbdjhHMFfOL +EOcKjvbdZxcinDMS +DoDLKvbdvBDySndh +DncKjvbdirziTKiz +DncKjvbdJXsaglRQ +DncKjvbdhfjDYvJu +DncLKvbdjuvnDbYX +EOcKjvbdKaLHMaxR +DoCjjvbdiGjDZWKV +DnbjjvbdEObjkWbd +DnbkKvbdJmADygVB +EPDKjvbdJvVFdEfi +EPDLKvbdnGeXmOGy +DoCjjvbdpssgSSKt +EPDKjvbdwtldqYlO +EPDKjvbdmfeXmNgZ +DoCjjvbdqvokbiZR +DoDLKvbdqUUHSRjt +EObkKvbdmbKXYOnV +EOcKjvbdaSGChTfL +EPCkKvbdWWiYWDdg +DoCjjvbduoTzqKnt +DnbjjvbdHDkVjBjK +EOcKjvbdbVBfwjtI +EOcKjvbdjvXOEBxX +DncKjvbdZLrETnMN +EObkKvbdfNGXHMjL +EPCkKvbdkDLkRHUg +EObjjvbdZjTIQGbG +DoDKjvbdZsiIyDsO +DnbkKvbdbrbjscjB +EPCjjvbdmbJwYPOV +DoCkKvbdKDJcQicY +DoDLKvbdZxcinCkr +DoDKjvbduoTzqLPU +EOcKjvbddndsKstS +DnbjjvbdNQXqWNfs +EOcKjvbdIidAKQGd +DoDLKvbdTkvOaVni +DoCjjvbdsPvPJcVf +DoDKjvbdVqnXbElD +EOcKjvbdIHGyyXxH +DnbkKvbdUxgszLOn +EPDLKvbdwuMdpxkn +DnbkKvbdqrVLNkBN +DncKjvbdijFgjMwr +EPCkKvbdSQUGjFcw +EObjjvbdRWmdCkgc +DnbkKvbdVTltFkvK +EOcLKvbdJbjCqKDY +EObkKvbdfMfXGmKL +EObjjvbdzRPNJKXA +EPCjjvbdBsAbtGWr +DoDKjvbdJXsahLqQ +DnbkKvbdlBNOmALA +DoDLKvbdlrYtzTDi +EPDLKvbdZtJIxdTO +DncKjvbdmbJvxPOV +EPDLKvbdaMkBsUmH +EPCkKvbdNsUVgFUp +DoCjjvbdWfYytAPT +EObjjvbdNHCpMpVL +EPCjjvbdMgComPtk +EOcLKvbdeqaWzlDP +DoCkKvbdFVxopNKF +EOcKjvbdYkrDsmlN +DncKjvbdWWiYWEFH +DoDKjvbdSLYfUfkT +DnbjjvbdhkeEOVCy +DoDKjvbdJXsagkpp +DoDLKvbdZoOIdeZj +DncLKvbdLiCMRYAS +DncKjvbdyOTHwsJD +DncKjvbdvmWANDeN +DoDLKvbdtTSTYydc +DoCkKvbddneSjtTr +EObkKvbdkDMKpftg +DnbjjvbdbhljKewY +EPCkKvbdIsZBSlwl +EPCjjvbdlqxuZsDi +DnbjjvbdNrtWGeVQ +EOcLKvbdvBEZSndh +EOcKjvbdrJAJdmOe +DoCjjvbdyOTHxTIc +DoCjjvbdmfdwlnGy +EOcLKvbdkDMKpgVH +DoCkKvbdRECaQQdS +DncKjvbdaMjartlg +EPCjjvbdVviXuceH +DnbkKvbdNsUVgFVQ +DoDKjvbdFkEsDIMu +EOcKjvbddZyPwyQb +DoDKjvbdqmZixlIJ +DoDKjvbdrEEhomvB +EOcLKvbdlZSqsZHU +EPCkKvbdehKuqmqH +DoDLKvbdFxtuBDwb +EPCjjvbdKjaHvAJy +DncLKvbdBcpAujMf +DoCjjvbdNQYRWOHT +DoCjjvbdHakzEzAD +EPCkKvbdJTYaSlwl +DoCjjvbdzitpQETU +DoDKjvbdvBEZSoFI +DncLKvbdnBjXXoOV +DoDLKvbdiZuGMROG +DoDKjvbdKVtecdfi +DnbjjvbddjJqvUzn +EPCkKvbdaMjbStlg +EOcKjvbdSZjHsDWA +DnbkKvbdUaCRSqSZ +DoDLKvbdxZgefXeS +DncKjvbdjhGkfFnL +DncKjvbdIjEAJogE +EPCkKvbdNGcPlpVL +DncKjvbdUMWPAvOi +DnbkKvbdatafxKsh +EObkKvbdjcMLQgUg +DoDKjvbddeOqavcK +EOcLKvbdoznELXoA +EPDLKvbdeOdrjtUS +DnbkKvbdjKFhJmXr +EPCkKvbdpxoHfpdY +DoCjjvbdZLrDsnMN +EPCkKvbdwyhFexFS +EOcKjvbdkClKpftg +DoDKjvbdxnTIYSiD +DncKjvbdxnShYSiD +DoCkKvbdFxtuBDwb +EObjjvbdYkrEUNkm +DnbjjvbdNQYQvNfs +EPCkKvbdhlFDnUby +EOcLKvbdiCObdwRR +DoCjjvbdVwJXvEFH +DnbkKvbdBvzchePv +EObkKvbdZHWdAPSi +DncKjvbdHgGzYxXg +DoCkKvbdMJCMQxAS +EPCkKvbdZLqdTmkm +DoDLKvbdnCJwYPNu +EPCjjvbdOSsvGdtp +DncKjvbdlYrqsZGt +EOcLKvbdJYUBhLqQ +DoCjjvbdZisHpGaf +DnbjjvbdVgxWXfxz +EPDKjvbdkWXNdBxX +DoCkKvbdlZTSSyHU +DncKjvbdjggLeenL +DnbjjvbdKNAEZfuB +DoCjjvbdLAkHMaxR +EOcLKvbdZRNFJNFR +DoDLKvbdjAQGaPfj +EObjjvbdjggMGFmk +DoDLKvbdyfyMAMeX +DncLKvbdjbkkRHVH +EOcLKvbdOTTugFVQ +EOcKjvbdWHxWXfxz +EPCkKvbdvwMBWBVu +EPCjjvbdnHEwlnHZ +DoDKjvbdHEKuiaij +DoCjjvbdVwIwvEEg +EPDLKvbdehKvRnRH +DncLKvbdnVUyjirG +EObjjvbdfMevgNJk +EPDKjvbdjbkjqHVH +DncLKvbdrJAKEloF +DoCkKvbdGckWJaij +DnbjjvbdTvMQJtAq +EPCkKvbdhkddNtcZ +DnbkKvbdrzMQTBIO +DncKjvbdsZlQTAgn +EPDLKvbdOFDtJIjd +EOcLKvbdnBivwoOV +DncKjvbdJXtBhLpp +EPCkKvbdJTYaSmXl +EOcLKvbdLGFgbBQu +DncKjvbdnHEwlmgZ +DoCjjvbdACrYJzJQ +EPCkKvbdiZuGLqNf +DnbjjvbdnGdxMmfy +DnbkKvbdRkZGUgKs +DoDLKvbdZisHofaf +EPDLKvbdJKEAJpGd +DnbkKvbdBsBDUFwS +EObjjvbdtcDVWuno +EOcKjvbdBsAbsfWr +EPDKjvbdrWpMChyR +DoDLKvbdVTltFkuj +EPDKjvbdGFjSOJUR +EOcKjvbdBsAcUGXS +EPCkKvbdcJNKKfWx +EPDLKvbdnQZyWKxb +EPCkKvbdqTtGrSKt +EObkKvbdjJfIKNXr +EOcLKvbdVqmxBdkc +EOcKjvbdFWYopMjF +DnbjjvbdqdFJPnWB +DoCjjvbdehKvRnRH +EPDKjvbdkyTRsZGt +EObjjvbdozmckYPA +DnbjjvbdbrcLUDjB +DoDLKvbdrMyixkhJ +DoDLKvbdrpWOjCvG +DoDKjvbdLFehCAqV +DncKjvbdrWpMCiYq +EOcKjvbdVTmUFkvK +EObkKvbdhficZVjV +EPCkKvbdIsZAsNXl +DoCjjvbdmfdxNOHZ +EPDKjvbdznopdblY +DnbjjvbdLiCMRYAS +DncLKvbdePEsKstS +DoDLKvbdUMVoBVni +DncKjvbdWRnXaeLc +EObjjvbdrDdiPmvB +DoDKjvbdDoDKkXDE +DncKjvbdOAIrtJrA +EPCkKvbdwzIGGXdr +EOcLKvbdUQqPUtgm +EPDLKvbdhlFEOUby +DncKjvbdZirhPfbG +EOcLKvbdKVuGEEgJ +DoDKjvbddePSBvbj +EPDLKvbdfHjuqmqH +EPDKjvbdZjSgpHBf +DncLKvbdunszpjoU +EPCkKvbdqTtHRrKt +EObjjvbdfNGXGljL +EObjjvbdUGznMWue +DnbkKvbdsPuoJbvG +EObjjvbdnQZxujxb +EPDLKvbdczZPwyQb +DoCkKvbdWXIwvDdg +EOcKjvbdQvmdDLhD +DncLKvbdCIkBjiFj +EObjjvbdjJegjNXr +DncLKvbdcIlikFvx +EPDLKvbdRkZFtfjs +DoCjjvbdczYoxZRC +EOcLKvbdatagXjsh +DncLKvbdjcLjqGuH +DoCjjvbdMSWlyuQz +DoCkKvbdjuvnDbYX +DnbjjvbdiMEdOUcZ +EPCjjvbdcTDKtEKB +DnbjjvbdwzHeexEr +EPDLKvbdemGWgNJk +EObjjvbdakLfOnDA +EPDLKvbdTfznLvvF +DoDKjvbdaNLBsUmH +EOcLKvbdhzVFkqNf +DoDKjvbdZRNFIldq +DoDKjvbdlrZVZsEJ +EObkKvbdbUagXjtI +DoDLKvbdUyHsykPO +EObjjvbdkVwNdCYX +EPDLKvbdUVkpJtBR +EPDKjvbdrMzJxkgi +EOcKjvbdSLYfUgLT +DoCjjvbdMRwNZtpz +EPDLKvbdIxTaglRQ +EPDLKvbdJqZdnenF +DoDLKvbdZMRdTmkm +DnbkKvbdANHxrvyx +EPCjjvbdFkErbhNV +EOcLKvbdWSNxCEkc +EPCjjvbdiCPCdwQq +DnbkKvbdbAvEeoow +EOcKjvbdeFOrBvcK +DnbkKvbdaRecHtGL +DnbkKvbdZshhxcrn +EOcKjvbdqTtHRrKt +EObjjvbdauBgXjtI +EOcKjvbdQdCaQRDr +DoCjjvbdFVxopMjF +EPDLKvbdIGgZyXwg +DoDLKvbdRpTfjFdX +DnbkKvbdSQUGifEX +DnbjjvbdpxoIHREY +DoDLKvbdqiAJeMne +EOcLKvbdCIkBkJFj +DncLKvbdFfKSNhsq +DoDKjvbdwWkaVaVu +EPDLKvbdNeETiJKd +DnbjjvbdhbOcEvpq +DoCkKvbdrbGMlHLZ +DnbjjvbdLAjgMawq +DncLKvbdlqyUzSdJ +DncLKvbdYkqdTnLm +EOcKjvbdYkrDsnMN +EOcLKvbdnCKXXnnV +DoCjjvbdDncLLWbd +DoDKjvbdYpmFJMdq +EPDLKvbdFpATXHFy +DoDKjvbdJvUfEEfi +EPDLKvbdmJEURVSB +DncLKvbdtbcVWuno +EOcLKvbdbUagYKtI +EObkKvbdcJMjKevx +DnbjjvbdKVuGEFGi +DoCkKvbdZMRctNkm +EOcLKvbdYpmEiMdq +DoDKjvbdYpmEhmEq +DncKjvbdzjVQQDrt +EPCjjvbdzHYlAMdw +EPDLKvbdYkqcsnMN +EObkKvbdiiehJmYS +DnbjjvbdDwwktUUM +EObkKvbdrounjCuf +DnbjjvbdGGKRmiUR +EOcLKvbdwzIGFxEr +EPDKjvbdOEdUJJLE +DoCkKvbdfNFvgMjL +DoDLKvbdOEdThhjd +DnbkKvbdyTOImSCH +EOcLKvbdzitpQESt +DoDKjvbduDCuWvPP +DoCjjvbdTppnuUhN +DoCkKvbdIBlZdzAD +DoCjjvbdZQmFJMeR +DnbkKvbdJXsaglQp +DoCkKvbdSZigrcWA +EObjjvbdZsiIyETO +EPDKjvbdZLqctOLm +DncKjvbdwyhGFxFS +DncLKvbdqwPkcIyR +EPDKjvbdRkYfUgLT +DoCkKvbdxxIjBpZk +DncLKvbdqlyjYlIJ +EPCjjvbdRaceLiYk +EPDKjvbdjlbLyeHP +EPDKjvbdrbFmLfkZ +EPCkKvbdvBEYsPFI +DncKjvbdSBdElJYk +EPDKjvbdpxoIHREY +EPCkKvbdjhHMFfNk +EPCkKvbdANIYsXZx +EObjjvbdnGdxNOHZ +EObjjvbdKQzFPGOF +DoCjjvbdtunYKRTA +DnbjjvbdLFfHbBRV +EOcKjvbdpedEsuaI +DnbjjvbdYkqcsmkm +EPCkKvbdbrcLUEKB +DnbkKvbdNQYQunGs +DoDLKvbdJcJbqKCx +EPDLKvbdIxTbHlRQ +DnbkKvbdvwMAvBWV +EOcKjvbdfHkVqnQg +EOcLKvbdbKkfPNcA +EPDLKvbdVAbQrpqy +DncLKvbdWRnXaeLc +EPCkKvbdFpATXGey +DoDLKvbdyfxlANFX +DoCkKvbdFVyQQMjF +EOcLKvbdxnShXrhc +DoCjjvbdmaivwoOV +DnbkKvbdbsDLTdJa +DoCkKvbdUtMtGMVj +DnbjjvbdNVSqkNAX +EPDLKvbdWfYytAOs +EPCkKvbdZyEJnDLr +EObkKvbdyXhjCQZk +EObkKvbddoFSkUTr +EOcKjvbdeATqMxKG +DnbkKvbdnPyyWKyC +DncKjvbdkySrTZHU +DnbjjvbdmfdxNNfy +EPCkKvbdHlBznXQk +EPDKjvbdZisIPgCG +DncLKvbdrEEhonVa +DoDLKvbdrykosBHn +EObkKvbdqvpLbiZR +DoCjjvbdhkeDnUcZ +DoCkKvbdVwIwudEg +DncLKvbdyXiJaozL +DoCkKvbdyzeOSIIh +EPCjjvbdkVwNcbYX +DncLKvbdTkuoAuoJ +EPCjjvbdijFgimYS +DncLKvbdliEURUrB +DoDKjvbdURQoUuIN +DoDKjvbdrMzJxkhJ +EPCkKvbdqYngfqEY +EPDLKvbddwzUTrFz +DoCkKvbdyYIjBpZk +EPCjjvbdssSSxzEc +EObkKvbdFejSNiUR +EPCkKvbdrEFJPmua +DnbkKvbdiifIJmXr +EPDLKvbdZLrEUOLm +EObjjvbdGFiqnItR +DoCkKvbdjuwNcaww +DncKjvbdmpZxukYb +DoDLKvbdqdFJQNua +EPDKjvbdNQYRWOGs +DoCjjvbdZeYGzhIb +EObjjvbdZjSgpHCG +EObjjvbdhfjDYvKV +EPCkKvbdJpzFOeme +DnbkKvbdlhcsptrB +DncLKvbdFeiqnJTq +EObjjvbdZxcinCkr +EPDLKvbdFVyQPmKF +EObkKvbdelfWfljL +EOcKjvbdJpydnenF +DnbkKvbdbVCGwkUI +EObkKvbdemFwGmJk +DoCkKvbdBsAbsfWr +EPDLKvbdJYTbHkqQ +DncKjvbdyNrgxTIc +DoDKjvbdGQASvfey +EOcLKvbdRNYCZOUz +EOcKjvbdyzeORgiI +EOcLKvbdZQmEhleR +EPCjjvbdmttyjjRf +DnbjjvbdLBLGmBwq +EOcLKvbdKVuFdFGi +EPCkKvbdxmsHwsJD +DoDLKvbdyOTIXriD +EPDLKvbdZsiJYcsO +EPCjjvbdjvXOEBxX +DoCkKvbdlZSqsZGt +DoDKjvbdADRxKZiQ +EOcKjvbdzoQREcMY +EObkKvbdGGKRmhsq +EObjjvbdJutfDdgJ +DoDLKvbdUsltFkvK +EObkKvbdHDkWKBjK +DncKjvbdLqwMzVQz +EObjjvbdaRecITfL +DoDKjvbdakMGPNcA +DnbjjvbdwXMBWAvV +EOcKjvbdQwOEDLhD +EOcKjvbdAMgxrwZx +DnbjjvbdqqtkNkAm +DoDLKvbdbhmKKewY +DoCjjvbdQmYBxnUz +DnbkKvbdvPTzqKnt +EPCkKvbdJqZePGOF +DoDLKvbdTfznMXVe +DoCkKvbdFyVUaDwb +DncLKvbdFxuUaDwb +EObkKvbdhlEcnUby +DnbjjvbdCJLCKhfK +DoCkKvbdPyNAGrrK +EOcKjvbdVgxVxGxz +EObkKvbdSxKkmzjx +EOcLKvbdemFwHMjL +EObjjvbdrEEiPnVa +DoCkKvbdDjIJvXjA +EPCjjvbdYTMAmToY +DoCjjvbdbLMFnmcA +DoCkKvbdrounjCuf +EPDKjvbdrJAJeNOe +DncLKvbdJbicQjDY +EPCjjvbdmpZxvLZC +DncLKvbdVrNxCElD +DnbkKvbdDoDLKwCd +DoDKjvbdsZkpSaIO +EPCjjvbdNQYRVnGs +DoCkKvbdVrOXbFMD +DoCjjvbdlYrqryHU +DoDLKvbdVTltGMVj +DncLKvbdwzHfGXeS +EPCkKvbdmajXYOnV +EOcLKvbdZLqdTmlN +DoDLKvbdqdFJQOWB +EObkKvbdVgwvXgYz +EPDKjvbdkMakzFHP +DoDKjvbdakLfPNcA +EObjjvbdyYJJbQZk +DoDLKvbdDigivXjA +DoDLKvbdHELWJajK +EObjjvbdZGvdAPTJ +EOcKjvbdUGzmkvue +DncLKvbdSZigsCvA +DoDLKvbddBsMrATm +EObkKvbdmSZUzSdJ +DncKjvbdjAPfaQGj +DoDKjvbdlBMoNALA +DnbkKvbdJTZArlxM +EObjjvbdHgHZyXwg +EPDLKvbdhzUekpnG +EPDKjvbdEOcKjvbd +DoCkKvbdjcLkRHUg +EObjjvbdBiLBkIej +DnbjjvbdZMSEUNkm +DoCkKvbdzRPNJJwA +EPCjjvbdGdKuiajK +EPDLKvbdrEFIpOVa +EPCkKvbdKfGHbApu +EPDKjvbdUtMsfMVj +DoDLKvbdbVCHYKsh +EPDLKvbdEztRFMCi +EOcLKvbdJmADzGta +DnbjjvbdtSrSxydc +DoCjjvbdACrYKZiQ +EPDKjvbdsrqsYzEc +DoCjjvbduLxXAtAw +DoCjjvbdEztQdkbi +DoDLKvbdkClKpgVH +DoDLKvbdSCDeMJYk +DoDLKvbdpxoIGqDx +DoCkKvbdDigjVxKA +EPDKjvbdGGKSOJUR +EOcLKvbdiLeDnVDZ +DnbjjvbdyOSgxShc +EPDLKvbdNsUWHEuQ +EOcLKvbdYpmFImEq +DoDKjvbdZLrDtOLm +DncKjvbdJvVGEFHJ +EOcKjvbdZirgogCG +EPCkKvbdKCjCqJbx +EObjjvbdgKfzcGAE +DncKjvbdZjTIQHBf +DoDKjvbdRDcBQQcr +DnbkKvbdZQmEiNFR +EObkKvbdSiZjRABM +EObkKvbdURROttgm +EObjjvbdlZSrSxft +DoCjjvbdNxPVzdOU +EPCjjvbdqAheAWhE +EPCkKvbdwXLaWBWV +DoCkKvbdKDKDQjCx +EOcKjvbdehLVqnQg +DoCkKvbdZxdJmcMS +DncLKvbdDjHjVxKA +EObkKvbdXrlAmToY +EOcLKvbdwtleRYlO +EPCjjvbdtlYWaUBX +EPCkKvbdiUzFXSVC +DoCjjvbdcJNJkFwY +EObkKvbdaRebhUGL +EOcKjvbdNHDQMotk +DoDLKvbdyTNhlqbH +EOcLKvbdKfGIBaRV +EObkKvbdKaLHMawq +DoCkKvbdnCKWwoNu +EPDLKvbdHffzYwxH +DncKjvbdnGdxMmgZ +EPCjjvbdNPwpvNgT +DoDLKvbdYkrEUOMN +DoDKjvbdTqROuUgm +DoDKjvbdvBDyTPEh +DnbkKvbdJKEAKQHE +EObjjvbdiBoCeWqR +DnbkKvbdmRyUyrci +DnbkKvbdJuuGEFGi +EOcLKvbdFyVVBEXb +EObkKvbdwyhGFwdr +EObkKvbdCTBDTevr +DoDKjvbdjbkkQftg +EOcKjvbdVAbQrqRy +EObjjvbdLAkHMawq +EObjjvbdEztQeLcJ +EPCjjvbdcIlikFvx +DncKjvbdZyEJmcLr +EObjjvbdqceJPmua +DncKjvbdZnmiEdyj +EOcLKvbdiGicYujV +DoCkKvbdFeirNhtR +DoCkKvbdDjHjVxKA +DnbkKvbdqFdEsvBI +EOcKjvbdcImKKevx +EPDLKvbdQmXbZOUz +DncKjvbdqcdhpNvB +EObkKvbdsPvOjCvG +DoDKjvbdFVyQPmKF +EOcKjvbdqYnhGpcx +EPDKjvbdKfGIBaRV +EPCkKvbdnGeXmNgZ +DncKjvbdKVtedEgJ +EObjjvbdCTAbsewS +DnbjjvbdeEoRavcK +EPCkKvbdNsUVfeVQ +EPDLKvbdGdLWKCKK +DnbjjvbdKfFhCBRV +DoCjjvbdZLrDtOLm +EPDLKvbdhtydvrVC +DoDLKvbdZjTIPfaf +DoCjjvbdbrcLTdKB +DncKjvbdzoQRFClY +DnbjjvbdSKyFuHKs +EOcKjvbdZQldiMeR +DncLKvbdkySrTYft +DnbkKvbdSLZGUgKs +EPCkKvbduCbuWvOo +DoDKjvbdsCFlkgLZ +DoCjjvbdrDdiPmvB +EPDLKvbdySnJNRbH +EPDLKvbdDoDKkXDE +EPCjjvbdijGHjMwr +EOcLKvbdeJjSWUzn +EPCkKvbdKWVFdEgJ +DoDLKvbdVYhTykPO +EObkKvbdeJiqutzn +DoCjjvbdRjyFuGkT +DoDKjvbdHDkWJajK +EPCkKvbdbKlFnnDA +EPDKjvbdQwOEDMHc +DoDLKvbdZshiZESn +EObjjvbdkyTSSyGt +DoCkKvbdxUmEpyLn +EObjjvbdMuSqkNAX +DncLKvbdbiNJkGWx +DoCjjvbdWIYVwfxz +DncLKvbdkVwNcaww +DoDLKvbdOFEThhjd +DoDLKvbddndrkUTr +DnbkKvbdyzeNrHiI +EPCjjvbdZRNEhldq +DncKjvbdhlEdNuDZ +DoCjjvbdqquKmkAm +DoDKjvbdFyVVBDxC +EPCkKvbdJuteceHJ +DnbkKvbdiBoDEvqR +DoDLKvbdLqvlzUpz +EPCjjvbdrRuKnLBN +DnbkKvbdZjShQHCG +DnbkKvbdcScLTcjB +EOcKjvbdyNrgxSiD +EOcKjvbdZirhPfbG +DoDLKvbdkIGkefOL +EPDLKvbdkCkkRGtg +EPDKjvbdbUafxLTh +EObkKvbdhfjDYvKV +DoCjjvbdpecdsvAh +EOcKjvbdpfDeUWAh +DnbkKvbdPxmAGsRj +DnbjjvbdZMSEUNlN +EOcLKvbdqFdFTvAh +DoCjjvbdWXJXvDeH +DoCjjvbdqUTfqrLU +EPCjjvbdvOszqLPU +EObkKvbdmtuZkJqf +EOcLKvbdjgfkefNk +DoCjjvbdhaoCeWqR +EObjjvbdKaLHMbXq +DoCjjvbdSLZFtfjs +DoCjjvbdFfKSOItR +DnbkKvbdqUUHSSKt +EPCkKvbdHEKujBjK +EObkKvbdIsZBSmXl +EOcKjvbdRDcApQcr +DoDKjvbduDDVWvPP +EOcKjvbdLBLGlaxR +DoDLKvbdIxTbHlQp +EPDLKvbdrRtkOKaN +DoCjjvbdRjyFtfkT +EPDKjvbdGQASwHGZ +EPDKjvbdMgDPlouL +EObkKvbdJXtCILqQ +EObkKvbdrEFJQNvB +DoCkKvbdeOeTKtUS +EObkKvbdSQTgJfDw +EPCjjvbdSQUGiedX +DoCjjvbdqUUGrRjt +EPDKjvbdTqRPVUgm +EPCkKvbdIMBznWqL +EObkKvbdhancEwRR +EOcKjvbdrMzJxkgi +EPCjjvbdhbPDEvqR +EPDKjvbdZHXEAOsJ +EPDLKvbdxnShXriD +DoCkKvbdLLAgvAKZ +DoCkKvbdhficYvJu +EObjjvbdZRMeIleR +DncLKvbdYfwEAOri +DoDLKvbdDwxMTtUM +DoCkKvbdWRmwbFLc +DnbkKvbdNQYRVnHT +DnbjjvbdjmCMZeHP +EPDKjvbdaNKbTUlg +EPCkKvbdidkHVPAO +DoCjjvbdHfgZxwxH +EObjjvbdxwhibPyk +EPDKjvbdFjeTDHmV +DoDKjvbdiCOcFWqR +DoCkKvbdJmADyfuB +EOcLKvbdhficYujV +DncLKvbdYzbfSJuy +DoCjjvbdbUagXjtI +DoDKjvbdjKFhKNYS +EOcLKvbdCIkCLJGK +DoDKjvbdZshiZESn +EPCkKvbdSQTfjFcw +EObkKvbdiMEcnUcZ +EPDLKvbdyOTHxSiD +EPCjjvbdFjeTDHmV +DnbjjvbdJuuGEFGi +EPDKjvbdhkeDnVCy +EPCkKvbdVAaqSprZ +DncLKvbdVUNTelVj +DoCkKvbdfILVrNpg +DncKjvbdNHDQNPuL +EOcLKvbdLZQirztf +EObjjvbdGckWKCJj +EObkKvbdIHGyyXwg +DncLKvbdiUydwSVC +DoDLKvbdpecdtWBI +EOcLKvbdLGFgaaRV +EOcLKvbdezuxeJUX +EObkKvbdgGLymgHA +DnbjjvbdEvZQQNJe +DncKjvbdJcJbpjDY +DoDKjvbdIxTahLqQ +DncKjvbdBcpAvJlf +EObjjvbdnPyyVkYb +EObjjvbdfNGWfljL +DnbjjvbdieLHVPAO +EOcKjvbdRNYCYmtz +EPDKjvbdiHJcYuiu +EObkKvbdMowqVnHT +DoCjjvbdiUydvrUb +EObjjvbdZMRcsnLm +DnbkKvbdaSFcIUFk +DnbjjvbdZyEKNcLr +DnbkKvbdZnnJFEzK +DncLKvbdJSyBSlxM +DoCkKvbdXsMAmUOx +EPCjjvbddneSkTtS +EOcLKvbdVwIxWEEg +EPCjjvbdxsOJMrBg +DncKjvbdkIHMGGOL +DncLKvbdGFjRmhsq +DnbkKvbdySmiNRag +EPDKjvbdpyPHgREY +DnbjjvbdGZUuAcxC +DnbjjvbdiHKDYvJu +DoCjjvbdtlXwBUBX +EObkKvbdTkvPAvPJ +EOcKjvbdSxLLmzkY +DncKjvbdhgJcZVjV +EOcLKvbdZirgogBf +EOcKjvbdTukpKUBR +EPDLKvbdQlwaxmtz +DoCkKvbdNxOuzdNt +EPDLKvbduCbuXWPP +EPCkKvbdmbJvwoNu +EObkKvbdKDKCqJbx +EPCjjvbdyNsIXrhc +EPCkKvbdSCEEkiYk +EObkKvbdOFDshiLE +DoDKjvbdZnmiFEzK +EObkKvbdJbjDRKDY +EObkKvbdYfvdAOri +DncKjvbdkDLjpfuH +DoCkKvbdsrqsZZdc +DoDKjvbdLBLHNBwq +DncLKvbdDjHjWYKA +DoDKjvbdZQleIldq +DoDKjvbdatbGxKtI +EObjjvbdUWMQKUAq +EOcLKvbdlhdUQtrB +EPCjjvbdAMhZTWyx +DoCjjvbdjhGlGFmk +DoDLKvbdHgGzZXxH +EOcKjvbdrykoraIO +DoDKjvbdjJehJlwr +EObkKvbdrEEhonWB +EPCjjvbdiUyeWrUb +DnbkKvbdNQYRVmgT +EPCjjvbdVUNUFkuj +DnbjjvbdEYYMTtUM +DoDKjvbdYpldhldq +EPCjjvbdtlYWaTaX +DoCjjvbdozmdLXoA +DnbjjvbdZnnJFFZj +EObjjvbdZshiZDrn +EPDLKvbdZjShPfaf +DoCkKvbdrpVnibvG +DoCkKvbdQwNcblHc +EObkKvbdxZgefXdr +DoDKjvbdNddUIhkE +DncKjvbdcImJkFwY +DoDKjvbdZirhQGaf +DoDKjvbdqwPkcJZR +EPDLKvbdkHgLfFnL +DncKjvbdlqxuZrci +DncKjvbdRadFLiYk +EPDKjvbdIHGyxxXg +EObkKvbdmpZyVjyC +EPCkKvbdUaBqSpqy +EOcKjvbdqZOgfqDx +EObkKvbdkNBlZeGo +EObjjvbdOAIrsjSA +EPDLKvbdEvZPpNKF +DnbjjvbdczYoxZRC +DoDKjvbdvAdZTPEh +DncKjvbdqUTfqrKt +EPCkKvbdZGwEAPTJ +EPDLKvbdZMSEUNkm +EPCjjvbdYkqctNlN +DnbkKvbdeEnqawDK +DoCjjvbdKVuGEFHJ +EOcKjvbdzitopDsU +DnbjjvbdsBfNLgLZ +DnbjjvbdcImJkFvx +EPCkKvbdMgCpNQUk +EOcLKvbdZQmEhleR +EPDLKvbdtTRrxzEc +DncLKvbdKVuFceHJ +EPCkKvbdyfxlAMdw +DnbkKvbdsZkosBHn +EPDLKvbdwWlAvBVu +DoDLKvbdlqxuZrdJ +EPDLKvbdMRwMzUpz +EObjjvbdFkFTCgmV +EObkKvbdHEKvJbKK +DncLKvbdkNCMZdfo +DoCjjvbddoFSkTtS +EPCkKvbdRpTfjFdX +DoDKjvbdIGgZyYXg +EPCkKvbdBiLCLIfK +DoCjjvbdKQydnfNe +EPCjjvbdHgGzZYYH +DnbjjvbdYNqAYUvU +DncKjvbdGckVjBjK +DoCjjvbdjhHMFemk +DnbkKvbdkIGkeenL +DncLKvbdmaivwnmu +EPDLKvbdmuVZkJqf +EPDKjvbdNddUIhjd +DoCkKvbdRDbaQRES +DncLKvbdTvLojUBR +DncLKvbdtSrSxyeD +DncKjvbdjgflGFmk +DoCkKvbdQwNdDLgc +DoCkKvbdEXwksssl +DoDKjvbdtAHRIAAr +DoDLKvbdSPsgJecw +EObkKvbdjggLfGOL +DoCjjvbdSBdFLhxk +DoCkKvbdiMEdNuDZ +DoCjjvbdhtzFWrUb +EPCjjvbdSKxetgKs +DoDLKvbddndsLTtS +DncKjvbdtcCtwVno +DoDLKvbdACrYJzJQ +EOcLKvbdyOShXrhc +EObjjvbdqquKnKaN +DoCkKvbdnCJvxOnV +EPDLKvbdFWYpQMjF +DnbjjvbdnCJvwoNu +EObkKvbdhfjCyWKV +DoDKjvbdrNZjZLhJ +DnbkKvbdyNrgwsIc +EPCkKvbdSZjITDWA +DncLKvbdqiAJeNOe +DoCkKvbdhaoDEvpq +EOcLKvbdtkwwAtAw +DncKjvbdsPvOicWG +DoCjjvbdWXJYVcdg +DoDLKvbdmIdUQuSB +DnbkKvbdauBgYKtI +EOcLKvbdJbicRKCx +DoDLKvbdsPuoJcVf +EPCkKvbdfILWRnRH +EPCkKvbdAMhYrvzY +DoCjjvbdKWUedEfi +EPCkKvbdhaoDEvqR +EObjjvbdxVMeRZMO +DncKjvbdFaOqZJzm +DncKjvbdIryArlwl +EObkKvbdRWmccLgc +EPCkKvbdsPunibvG +EOcKjvbdQccBPpcr +EPDKjvbdssRsYzFD +DncLKvbdySmiMqbH +EObkKvbdZLqdTmlN +EPDLKvbdVAaqTQqy +DncLKvbdFWZPomJe +DoDKjvbdUVkojTaR +DncKjvbdULvPBWPJ +EObjjvbdUslsfLuj +DoDKjvbdsBfMlHKy +DoCjjvbdkySrTYgU +EPDKjvbdYgXEAPTJ +EOcLKvbdrzMPsAhO +DoCkKvbdcyxpXyRC +DncLKvbdkIGkeemk +EObkKvbdVqnXbElD +EObkKvbdMuSqkNAX +DncLKvbdkNCLydfo +EOcLKvbdUVlQJsaR +EOcKjvbdczZPxYqC +EObkKvbdWIXvXfxz +DoCkKvbddndsLTtS +DnbkKvbdFfJqmiUR +DncKjvbdURROuVIN +EObkKvbdddnrCXDK +DncLKvbdZyEJmcLr +EPCkKvbdVgxVxHYz +DoDKjvbdFfKRmiTq +EPDKjvbddCTNSAUN +DoDLKvbdUxgsykOn +DoDLKvbdBhjbLIfK +DoCkKvbdFejRmiTq +EPDLKvbdmuUykJqf +DoCkKvbdVTmTfLuj +DoCjjvbdkNCLydgP +DnbjjvbdHffzYxYH +EObkKvbdpxngfpcx +EPCjjvbdKQzFOfOF +DncLKvbdOEdThiKd +EOcKjvbdJSyBTNXl +DncLKvbdyNsIXriD +EOcLKvbdJYTagkpp +DoCjjvbdkMakzEfo +DoDLKvbdZjSgpGbG +DnbjjvbdSQUHJfDw +DncKjvbdRpTgJedX +DncKjvbdrykosBIO +EObkKvbdGYttaEYC +DoCkKvbdZxcjNcMS +DoCjjvbdRadElIyL +DoDKjvbdkySqryGt +EPDKjvbdiHJbyWJu +EPCjjvbdwzHeewdr +EPDKjvbdQwNccLhD +DoCjjvbdbBVeGPow +EOcKjvbdddnrCWcK +EPCjjvbdJXtCHkqQ +EObkKvbdrbFllHLZ +DncKjvbdACqxKZhp +DoCkKvbdJXtCILpp +DncKjvbdEYYMTssl +EOcKjvbdwjvdHzzG +EPDLKvbdemGWgMik +EPCjjvbdqvokcIyR +DnbkKvbdUaCQrprZ +DoCjjvbdKCjCqKDY +EPDKjvbdYSlBMtOx +EPDLKvbdyXiKBozL +EObkKvbdZxdKNcMS +EObkKvbdCDpBVjNG +DncKjvbdmgExMmgZ +EObjjvbdHkaznWqL +EObjjvbdkNCLzEfo +EPDLKvbdyNrgwsIc +DncKjvbdnHFYNNfy +DoCkKvbdDwwktTsl +EPDLKvbdTlWOaWPJ +DoDKjvbdmIctRVRa +EPCkKvbdeEnqbWbj +EPDKjvbdTYLMNzkY +DncKjvbdkHgLfGNk +DncLKvbdnPyxvLZC +EOcLKvbdjKGHjMxS +DoCjjvbdiZtfMROG +EPDKjvbdFeiqmhsq +EPDKjvbdDoDKjvbd +EOcLKvbdKRZeOfOF +DoDKjvbdzoQQeCkx +EObjjvbdEOcLKwDE +DoCkKvbdrafNLgLZ +EObjjvbdMfbomPuL +DncKjvbdUQqPUthN +EOcLKvbddjJrWUzn +DoDLKvbdvBDySoEh +DnbjjvbdVUMselVj +DoCkKvbddndrkUUS +EObkKvbdmpZxvKxb +EPCkKvbdmbJvxPNu +EPCkKvbdmfdwlnHZ +DnbkKvbdZRMdhmFR +DnbjjvbdYSlBNToY +DncLKvbdzoQRFClY +EPCkKvbdVZITzLOn +DncKjvbdZtIiZDrn +DncKjvbdFVxopNKF +EOcKjvbdtTSSxydc +EObjjvbdUVlQKTaR +EPDLKvbdkMbLzEgP +DoDLKvbdKDJcQicY +DoDLKvbdJmAEZgVB +EOcKjvbdCWzdJFPv +DncLKvbddneTLUUS +EObjjvbdBcoaWJlf +EPDKjvbdGcjvJbJj +DoCjjvbdddoRavcK +EOcLKvbdAMhZSvyx +DnbjjvbdajlGOmcA +DoCkKvbdCIkCLJFj +DnbjjvbdMSWmZtpz +EOcKjvbdNGcQMpUk +EOcKjvbdTqROuUhN +DoCkKvbdFVxoolie +DoDKjvbdUQpnuUgm +EPDKjvbdnBiwXnmu +DnbjjvbdJuuGDdgJ +EPCjjvbdZLqcsnLm +EObkKvbdZnmheEzK +DoDKjvbdXsMAltOx +EObkKvbdiMEdOUcZ +DoDKjvbdZRNEhleR +DoDLKvbdMIbLpxAS +DoDLKvbdVwIwucdg +DoCjjvbdRbDeLiZL +DncLKvbdZMRctNlN +DoCkKvbdGcjvJbJj +DnbjjvbdSZihScWA +EPDLKvbdkDLjqHUg +DnbjjvbdZisIPfaf +EObjjvbdmpZyWLZC +EOcLKvbdrbGNLgLZ +DnbkKvbdkVvmdBww +EObjjvbddoFSjstS +EObjjvbdxwiJbPyk +EPDKjvbdTvLoitAq +DoCkKvbdZLrDsnMN +DoDKjvbdOAJTUJrA +EObkKvbdURQntuHm +EObkKvbdkIGkefOL +DncLKvbdsCFllHKy +EPCkKvbdatafxKtI +DoCjjvbdiifHjMxS +DnbkKvbdZsiIyDsO +DncKjvbdieKgUoAO +EPCjjvbdBhkCLIej +DnbjjvbdDxXktTsl +EObkKvbdKCjCqKCx +EOcLKvbdIwsahLqQ +EPDLKvbdhzUfLpnG +EObjjvbdbAvEepPw +EOcLKvbdSLZFuHKs +DnbkKvbdIidAJogE +DnbjjvbdJbjDQicY +EPDLKvbdQwODblID +EObkKvbdqZOgfqEY +EObjjvbdkWWnDbXw +DncLKvbdEvZPpMjF +EPDLKvbdKQydnfNe +EObjjvbdUWMQJtAq +EOcLKvbdqrUjmkBN +DoDLKvbdJmAEZfuB +DoCkKvbdhtydvqtb +DoCkKvbdtAHQhABS +EPDLKvbdxZhGGXdr +EPDKjvbdmSZVZrci +DnbkKvbdZjTHogCG +EObkKvbdYqMdiMeR +DoDKjvbddwzUURez +DoDLKvbdbKlFnnDA +EPCkKvbdGGKSOJTq +EObkKvbdLGFgbBRV +DoCkKvbdKyQjSzuG +DncKjvbdJcJcRJcY +EOcLKvbdnBiwYPOV +EOcLKvbdLGGHaaRV +EObjjvbddneSkTtS +DoDKjvbdiLddOUcZ +EObkKvbdsPvOjCuf +DnbkKvbdZyEKOClS +DoCjjvbdyzeORhIh +DnbkKvbdhkeDmuCy +EObkKvbdvvkaWAvV +EOcKjvbdzeZnzdzQ +DoCjjvbdVAaprqSZ +EObjjvbdjhGkefNk +DncLKvbdSKxfVHLT +EPCjjvbdZRMeImFR +DncLKvbdFeirOJTq +DncLKvbdFfJrOItR +DoDLKvbdmoyyVkYb +DncLKvbdddoRavcK +DoDLKvbdauBfxKtI +EObjjvbdSPtHJfDw +EPCjjvbdCEQBWJmG +DoCjjvbdDnbkLWcE +EPDLKvbdVUNUGMVj +DnbkKvbdnQZyVjyC +DnbkKvbdgFkymfgA +DoDKjvbdRDcBQQdS +EOcKjvbdtcCuWvOo +EObkKvbdlrYuZrdJ +DoCjjvbdZirgogBf +DoDLKvbdMfcPmPuL +EOcKjvbdDwwlTtTl +DncLKvbdwXLaWAuu +EPDKjvbdUaBqSpqy +EObkKvbdHlBznXRL +EPCkKvbdkMakzFHP +DnbkKvbdqZOgfpcx +DnbkKvbdUMWOaWPJ +DncLKvbdMfbolpVL +EObjjvbdfekynGgA +EPCkKvbdWWiXvEFH +DoCjjvbdpxnhGqDx +DoDKjvbdsQVnjDWG +EObkKvbdYNqAXtut +DncLKvbdDnbkLXCd +EObkKvbdKaLGmBwq +DoCkKvbdBvzciFPv +DoDLKvbdjKFgilwr +EPCkKvbdUaBqTQqy +DoDLKvbdVgwvYHYz +EPDKjvbdIHGyyXwg +EPDKjvbdEXxMTstM +DnbkKvbdQccBPpcr +DnbkKvbdMgCpNPuL +EPDKjvbdSPtHKFcw +DoDKjvbdkIHMGFnL +DncLKvbdnGeXmNgZ +DoDLKvbdhtyeWquC +EObjjvbdqGEFUVaI +EOcLKvbdNPwpumgT +DnbkKvbdZshiYdTO +DoDKjvbdZMSETmkm +DncLKvbdRbDdkhyL +EPCjjvbdTvMQJtBR +EObkKvbdjvXOEBww +DncLKvbdrXPkbiZR +EOcLKvbdFejSOJTq +EOcKjvbdegjvRnRH +EPDLKvbdJvVGDeHJ +EObjjvbdXrlBMtOx +DncKjvbdFejSNhsq +EPDKjvbdBiLBjiGK +EOcKjvbddiirVtzn +EPDLKvbdVBBqTRRy +DoCkKvbdeqaWzkcP +EObjjvbdqYnggREY +EPDKjvbdEARiNZwX +EObjjvbdSQTfifEX +EObjjvbdLBLHNBxR +EPCkKvbdNHCpMpUk +EPCkKvbdKVuGDdfi +EPCkKvbdxrnImRbH +EOcLKvbdZRNEiNFR +EOcLKvbdtbcUvuno +EPCjjvbdJTZAsNXl +EPDLKvbdFVyQPljF +DoCkKvbdieKftoAO +EObkKvbdZMSETnMN +DoCjjvbddePSBvcK +DncLKvbdqUUHSSLU +DoDLKvbdZQldhmEq +DoDKjvbdOTTugFUp +DncLKvbdZsiJZESn +DnbjjvbdtbcUwWPP +EPDLKvbddwzTtRez +DnbjjvbdZoNheFZj +EPCkKvbdKfFgbApu +DoDLKvbdhytfMQmf +DnbkKvbdnGeXlnGy +EPCjjvbdSBcdlIyL +DncKjvbdbAvFFpPw +EObjjvbdzoPpeClY +EOcLKvbdqwQMDIyR +EPCjjvbdmaivxOmu +EPCjjvbdIwsahLqQ +DncLKvbdddoSBwCj +EOcLKvbdrEEhpNvB +DoCjjvbdEPCkKvcE +DncKjvbdePEsLTsr +DncKjvbdmRyVZsEJ +DnbjjvbdZLqdTnMN +EPDKjvbdRbEFMIxk +EObjjvbdJXsbHlRQ +DncKjvbdkDMLQftg +EOcKjvbdOEctJIjd +DnbkKvbdqTsfrRkU +EPDKjvbdkIGkeenL +DoDLKvbdUxhUZjnn +DncLKvbdwyhFexFS +EPDKjvbdbLLfOmcA +DnbkKvbdtbbuXWPP +EOcLKvbdYpmEhmFR +DnbkKvbdxmsHxTIc +DoDKjvbdznoqFDLx +EObjjvbdmfdxMnHZ +EObjjvbdYTMBNUOx +EObjjvbdADRwizJQ +EOcLKvbdMoxQvOGs +EOcLKvbdrWolDJYq +EPCjjvbdeFPRbXDK +DoDKjvbdrDdhpNvB +EPDKjvbdZxdKODLr +EOcLKvbdWSNwadlD +EOcKjvbdxrmhlqbH +DoDLKvbdzoPqEblY +DncKjvbdTkuoBWPJ +DnbjjvbdrykpSaHn +EOcKjvbdKWUfDdgJ +DnbkKvbdZMSEUOMN +EObkKvbdSBcdkhxk +DnbjjvbdIGfyyYXg +EPCkKvbdnBjWwoOV +EOcKjvbdzaAPGgBl +DnbjjvbdkVvmdCXw +DoDLKvbdkDLkQfuH +DoCkKvbdVqnXbFMD +DncKjvbdWWiXuceH +DoCjjvbdBvzdIePv +DncKjvbdLFfICBQu +DncLKvbdeFPRawDK +DncKjvbdjmBkydgP +EObjjvbdVUMtFkuj +EPDLKvbdrSUjmkBN +DoDLKvbdSPsgKFdX +DoDKjvbduDDVXVno +DoCjjvbdMuSqjmAX +EPCkKvbdZyEJmcLr +DnbkKvbdMfcQMouL +DoDLKvbdUMWPAuni +DnbjjvbddZxpYZRC +EPDKjvbdbAvEeopX +DnbkKvbddoErkUUS +DoCjjvbdePErjstS +EOcKjvbdGKeTDHlu +EObjjvbdfIKvSORH +EPCjjvbdUsmTelWK +EObkKvbdaMkBsVMg +DoCkKvbdRjxfVHKs +DnbkKvbdMpYQumgT +DncLKvbdVwIxWEFH +DncKjvbdaMkCTUmH +DoDLKvbdhlFENuDZ +EPCjjvbdZisIPgCG +EPCjjvbdZnnJEdzK +EPDKjvbdGLEsDINV +EObjjvbdYzcFrKVy +EPDKjvbdZirhPgBf +EPDLKvbdKaLGmCXq +EObkKvbddoErkTsr +DoCkKvbdRXNdCkgc +DoDLKvbdEvZQQNKF +DoCkKvbdZoNhdeZj +EPCkKvbdhkddNtby +EPDLKvbdZLrDtNlN +DncKjvbdRbDdlIxk +EPCkKvbdEOcKjwCd +DncKjvbdlqyUyrdJ +DoDLKvbdNddThhkE +EOcKjvbdwyhFewdr +EPDLKvbdiUydwSVC +DnbkKvbdYzcFqjWZ +DnbkKvbdiBoCdwRR +EOcLKvbdpecdsuaI +EPCkKvbdQlxCYnUz +EPDLKvbdVvhxWEEg +EOcLKvbdlZSqryGt +EPCkKvbdUaCQsQqy +DoCkKvbdvAdZSndh +DnbjjvbdmttykKRf +EPCkKvbdYgWdAPTJ +DoCkKvbdlYrqsZGt +DnbkKvbdZsiIxcrn +DoCjjvbddeOqavbj +EObkKvbdbVBfwjsh +EObjjvbdMoxQvOHT +EPCkKvbdRbEFLiYk +DoCkKvbdlhdTqUqa +EOcLKvbdMIbMRYAS +EObkKvbdDncKkWbd +DncLKvbdfSAvzkcP +DnbkKvbdxsOIlqbH +DoCkKvbdADSYKZhp +EPCjjvbdZshiZESn +DoCjjvbdieLGuPAO +EPCjjvbdkHgMFenL +EPDKjvbddBrlrAUN +DncKjvbdddoSCXCj +EPCjjvbdsQWOibvG +EObkKvbdKkBHvAKZ +EObjjvbdkWWmdBww +EObjjvbdnGeXmNgZ +EOcLKvbdyNrgwrhc +DnbkKvbdNddThiLE +DncKjvbdDjHivYKA +EObjjvbdWXIxWDdg +EObjjvbdrMyixlIJ +EOcKjvbdcyyPxYpb +DncKjvbdcyxowxpb +EOcLKvbdhbOcFXQq +EOcKjvbdHDjuibKK +DoDKjvbdiVZeXRuC +EOcKjvbdnBjXYOnV +DnbkKvbdOTTufdtp +DoDKjvbdVAbRTRSZ +DnbjjvbdRXOEDLgc +EOcLKvbdznopdcLx +DncLKvbdRNXayOUz +DncLKvbdSPtHKFdX +EPDKjvbdxUldqYkn +DoCkKvbdZRNEiNEq +EPDKjvbdrbFllGjy +EPCjjvbdUyHszLPO +DncLKvbdxwhibQZk +EOcKjvbdFWYopMie +EOcKjvbdaNKbTVMg +DnbjjvbdliETqUrB +EObjjvbdRXODbkgc +DnbkKvbdTlWPBWPJ +EOcKjvbdOFEThiKd +EObjjvbdMSXMzVQz +EObjjvbdHDkVjCKK +EPDLKvbdqFceTuaI +EOcKjvbdFyUtaDxC +EOcLKvbdmgExMnGy +DncKjvbdtlYWaUBX +DoDKjvbdCDoaWJlf +EPDKjvbdkyTSTYgU +DoCjjvbdqqtjnLAm +DnbjjvbdGYtuAdXb +DoCkKvbdBhjbLIfK +EPDKjvbdNPwqVmfs +DoCjjvbdsrqsYzFD +EPDKjvbdSPsfjFdX +EPCjjvbdZyDjNbkr +EPDKjvbdqZOgfpcx +EPCkKvbdqGDeUVaI +DoDKjvbdUVkpKUAq +DoCjjvbdRpUGjGEX +DoDLKvbdmgFYMmfy +EPDLKvbdRpUHKFcw +DoDLKvbdEvZQPmKF +DoDKjvbdZshhxdTO +DoCjjvbdiZuGMROG +DoDKjvbdfpBzvdYI +EPCjjvbdmgFYNOGy +EOcKjvbdNrtWGdtp +DnbjjvbdWHxVwgYz +EPCkKvbdJbjDRKDY +EPCjjvbduWOYJpsA +DncKjvbdehLVrORH +DoCjjvbdGFjSOItR +DoCkKvbdjuwODbYX +EObjjvbdJTZBSmXl +DnbkKvbdzQoNIiwA +EObjjvbdjJfHilwr +EOcKjvbdJpyeOfOF +DnbjjvbdqFdEsuaI +EPDLKvbdUxhTzKoO +EPDKjvbdBraCsfXS +DoCjjvbdLAjgNBxR +EObkKvbdlhdTqUrB +EPCjjvbdZoOIeFZj +DnbjjvbdrDdhpNua +EPCjjvbdIHHZxxYH +EPCkKvbdiMEdOVCy +DoDKjvbdhgJbxvKV +DoDLKvbdUyHsyjoO +DoDKjvbdGQATXGfZ +DnbjjvbdvAdYroEh +EPCkKvbdhtydvrUb +DoCjjvbdsQWOicWG +DncLKvbdcJMjLGWx +DoCkKvbdIwsaglQp +DoCkKvbdYkrEUOLm +EObkKvbdVvhxWDeH +EPDLKvbdZMRdTnLm +DoCjjvbdADRwizJQ +DoDKjvbdSwjkmzjx +DnbkKvbdBiKbLIfK +EPCjjvbdRyigsDWA +EPDKjvbdRXOECkhD +EObjjvbddxZtTqez +EObjjvbdbBVdfPow +DncLKvbdMfcQNQVL +EPDKjvbdVBBqTQrZ +DncKjvbdZMRctOLm +DncKjvbdGGJrOIsq +EPCjjvbdZMSETmlN +DoDLKvbdhlEdOVDZ +EOcLKvbdOhAXyAZB +DoCkKvbdyOTIYSiD +DoCjjvbdUtNUGMVj +EObkKvbdWXJYWDdg +EOcLKvbdBhjbKhej +EObkKvbdVwIwvDdg +EPDLKvbdzjUpQDsU +EOcKjvbdqAiFAXHd +DoDLKvbdqrUkNjaN +EOcKjvbdYORAYUvU +EOcLKvbdcIljLFwY +DnbkKvbdVwJXvDdg +DoDKjvbdVBCQsRSZ +DoDLKvbdmuUzKiqf +EObkKvbdJYUCILpp +EPDKjvbdsQVoKCvG +EPDLKvbdmoyyVkZC +EPDLKvbdsCGNLfjy +EOcKjvbdbiNKLGWx +DoCjjvbdrpVnjDWG +EObkKvbdfVzxPizs +DnbkKvbdRXODcLgc +EPCjjvbdjJfIJlxS +DoCjjvbdZLqcsnLm +DncKjvbdjuvnECXw +DoDLKvbdEPDKkXCd +DnbjjvbdOSsvGduQ +DoDKjvbdIMBzmvpk +EPCjjvbdqrUkOLAm +EPCjjvbdTkvOaVoJ +EObjjvbdozmdKwoA +DncLKvbdDxXkstTl +EOcKjvbdfMewHMik +DoDLKvbdGKeTCgmV +EObjjvbdxnSgwsIc +EPCkKvbdaaVdepPw +EObkKvbdqGEFUVaI +DncLKvbdjblKpgUg +DoDLKvbdRWnEDLhD +DnbjjvbdFxuVAcxC +DncKjvbdqZOhGpcx +DoCkKvbdfHjvRnQg +DnbkKvbdwMvANDeN +EObkKvbdFfKSOIsq +DoCjjvbdmajXYPNu +EObkKvbdANHyTXZx +EPCjjvbdLFfHbAqV +DoCjjvbdVgwuxHYz +EPCjjvbdQvmcblHc +DoDKjvbdaSFbhUGL +DncLKvbdzHZMANFX +DncKjvbdySnJNRbH +DoCjjvbdMpYRVnHT +EObkKvbddePSBwDK +EPCkKvbdMfcPmQUk +EObjjvbdMgCpNQVL +DoDKjvbdrEFIonWB +DoDLKvbdFjdsCgmV +EObjjvbdwtmFRYlO +DnbjjvbdIwtBgkqQ +EPCjjvbduaDxrndh +EPDLKvbdShzKRABM +DnbjjvbdfHjvRnRH +EOcKjvbdBiLBjiGK +EPCjjvbdCEPaWKNG +DoDKjvbdtbbuWuoP +DoDKjvbdegkWRmqH +DnbjjvbdNeETiJLE +EPCkKvbdjcLkRHUg +DnbjjvbdjvXOEBww +EOcLKvbdTlWPAvOi +DoCjjvbdrMyixkhJ +EObkKvbdqGEEtWAh +DncKjvbdbBVeGQPw +DoDLKvbdpssfqqjt +DnbkKvbdFWZPomJe +DoDKjvbdSBcdkiYk +DoCkKvbdvBEZSoFI +EOcKjvbdRaceLhxk +EOcKjvbdJKEAKQHE +DoDLKvbddZyQYYpb +EObjjvbdeXzTsqez +DncLKvbdCSaCtGXS +EPCkKvbdlZSrSyHU +EOcLKvbdTJZiqABM +DncLKvbdvAdYsOdh +DnbkKvbdcyxoxZQb +DnbkKvbdhanbdwRR +EPCjjvbdbBVeFopX +DncKjvbdGLFTDHmV +DoCjjvbdiZuGLpmf +EOcLKvbdJbjCqJbx +EObkKvbdGdLWJbKK +DoCjjvbdRkZGVHKs +DoCjjvbdGckWJajK +DncKjvbdAMgxrvyx +EPCjjvbdEPDKjvbd +EOcLKvbdkDLjqGtg +DoDLKvbdNPxRVnGs +DoDKjvbdySmhmRag +EPCjjvbdVqnXadkc +EPDKjvbdTulPitAq +EObjjvbdGLErcHlu +DoDLKvbdHELWKCJj +EObjjvbdbVCHYLUI +DncKjvbdqvpLbiZR +EPCjjvbdvAdZSoFI +EOcLKvbdfjfzcGAE +DnbjjvbdaNKartmH +EOcLKvbdcTDKsdJa +DncLKvbdOSsufduQ +DnbkKvbdyYIiapZk +DoCjjvbdunszqKoU +DoCkKvbddndsLTsr +DoDKjvbdxxJKBoyk +DoDLKvbdrovOibvG +EPCkKvbdiLddOVDZ +EPCkKvbdiBncFWqR +EOcLKvbdZQldiNFR +DoCkKvbdOEctJJKd +DoCkKvbdrMzKZMIJ +DnbkKvbdVhYVwgYz +EOcLKvbdQvnDblHc +DoDLKvbdmJEURVRa +DoDLKvbdCTBDUFwS +EPCkKvbdNrsvHEuQ +DnbkKvbdegkVqnRH +DoCjjvbddBrlrATm +DoCkKvbdCJLCLJFj +EOcKjvbdxZgefXeS +EPDKjvbdZtJJZDsO +DoCkKvbdQvmdDMID +DoDLKvbdRaceLhxk +DnbkKvbdSBdFLhxk +DoDKjvbdOTTufdtp +DoDLKvbdnQZxujyC +DnbjjvbdZshhyETO +DoCjjvbdtvOYJqTA +DncLKvbdRMxBxmtz +DnbjjvbdEzsqElCi +EObjjvbdKefHbAqV +DnbkKvbdmpZyWKyC +DncLKvbdNQXqWOGs +EPDLKvbdVTlsekuj +EPCkKvbdGcjvJajK +EPDLKvbdIryArlxM +DoDLKvbdwyhGFwdr +EPCkKvbdzaAOgGal +DncLKvbdiHKCxvJu +EOcKjvbdLBKgMbXq +DoCjjvbdTppoVVIN +EPDKjvbdNPxQvOHT +DnbjjvbdTvLpJsaR +DncKjvbdnVUyjiqf +EPCjjvbdVUNTfLvK +EOcLKvbdDxYLtTtM +DnbkKvbddePSCXCj +EPDLKvbdgGLzOHHA +DoCkKvbdTukpKTaR +DncLKvbdVUMtGMWK +EObkKvbdXnRAYVWU +DncLKvbdyqOmJJwA +DoDKjvbdFVyQQNKF +DncKjvbdvOszqLOt +EPCkKvbdZRMdhmFR +EPDLKvbdhlFDmuCy +EOcKjvbdkIHLeenL +DnbjjvbdqceJQOWB +DoCkKvbdzitpPdSt +EPCjjvbdFeiqmhtR +DoDLKvbdsQVoJcVf +EPDLKvbdUQpnuVIN +DoDLKvbdWSNxBdlD +EPCjjvbdpyPHgQcx +EOcKjvbdUyHsyjoO +DoCjjvbdxrnJNSCH +DoCjjvbdKDKCpjCx +EPDLKvbdxsOIlrBg +DoCkKvbdnGdxMnHZ +EPDLKvbdfHkWSNpg +DnbjjvbdkHgMGFnL +EOcLKvbdxmsIYSiD +DoDLKvbdEXxLsssl +DoDKjvbdjFLGuPAO +EOcLKvbdeEoRawCj +DoDKjvbdyOTIYSiD +DnbjjvbdIHGyyXxH +DncKjvbdTqQoUuHm +EOcKjvbdMfcQNPuL +DnbkKvbdatbGxKsh +DoDKjvbdOTUWHEtp +EPCkKvbdGLFTCgmV +DoDKjvbdkHfkfGNk +EObjjvbdJXtBhMRQ +EObkKvbdRpUHKGEX +DnbjjvbdiUzFWrVC +EPCkKvbdliETqUrB +DnbkKvbdZjTIQHBf +DoCjjvbdZMSETnLm +EPDLKvbdFWYoomKF +EPDLKvbdRaceLhxk +DoDLKvbdEASJNZwX +EPDLKvbdGZUtaEXb +DncLKvbdyNrgxSiD +EOcKjvbdbVBgXkTh +EPCkKvbdvOszpkOt +EObkKvbdKfGHbBRV +DncLKvbdjvXOEBxX +EPDLKvbdvAcyTPFI +EObjjvbdNsUWGeUp +EPCjjvbdZtIiZDrn +DoDLKvbdrRtkOLBN +DncKjvbdptUHSSLU +DncLKvbdWSOXaeLc +EPCkKvbdiLeDmuCy +DoCjjvbdhyuFkqNf +DnbkKvbdzoPqFDMY +DoCkKvbdGFirOItR +DoCjjvbdEObjkXCd +DnbkKvbdjKFgilwr +EPDLKvbdVwIwvEFH +DoDKjvbdfIKvRmpg +EPDLKvbdOFDsiIkE +EPDLKvbdGKdrcIMu +EPDKjvbdZnmiEeZj +DoDKjvbdKWVFceHJ +DncKjvbdvBDySneI +DncKjvbddeOqawCj +DoCkKvbdEztRFLbi +EPDKjvbdMpXpumgT +EPDKjvbdtunYJqTA +EPCjjvbdegkVqmpg +EObjjvbdlYsRsZHU +EOcKjvbdbUagXkUI +EPDLKvbdANHySvyx +DnbkKvbdmJEUQtqa +EPDKjvbdVUNUFlVj +EPCkKvbdvvlBVaVu +DoCjjvbdmozZWLYb +DoDKjvbdwzIFfXeS +DoDLKvbdNQXpvOGs +DncLKvbdEYXlTstM +EPCkKvbdbUbGwkUI +EOcLKvbdLBLHNBxR +DnbkKvbdePErkUUS +EObjjvbdyXiJaoyk +DncLKvbdVrNxBeLc +DoCjjvbdaRebhUGL +EOcKjvbdxsNhmSBg +EOcKjvbdXrkaMsoY +EObjjvbdhuZdwSVC +DoCkKvbdqGEFUWAh +DoDKjvbdegkVrNpg +DoCkKvbdtcCtvuoP +EOcKjvbdmJEUQtrB +EOcKjvbdWXIwucdg +DoDLKvbdhgKCyWJu +EPCjjvbdcSbkUDjB +EPDKjvbdLrWmZuQz +EPDLKvbdXrlAlsnx +DnbkKvbdKNADygUa +EPDKjvbdyNrhXsJD +EOcLKvbdIsZBSlxM +EPCkKvbddndrkTsr +DnbjjvbdFyUuBEYC +EPCkKvbdJcKCpjCx +EObkKvbdbBWFGQPw +EOcLKvbdFjdrbhNV +EPDLKvbdrDdiQNvB +EObkKvbdkHgMGGOL +EPCkKvbdkySrSyHU +DncLKvbdaaWEfQQX +EObkKvbdehKvRmpg +DnbkKvbdmIdURVRa +DoDLKvbdvBEZSneI +DoCkKvbdNdcshhjd +DncLKvbdZyEKOCkr +DoCkKvbdVrNwbFMD +DnbkKvbdnCKXXoNu +EPDKjvbdSQTgKGDw +EObkKvbdaRfCgtFk +EObjjvbdkWXNcaww +EObkKvbdDihJuxKA +DncLKvbdnVVZkKSG +EPCkKvbdVBBqSpqy +DncLKvbdqGEFUWAh +DoCkKvbdsPvOjDWG +DncKjvbdySmiNRbH +DoDKjvbdraemLfjy +DoDLKvbdnPzZWKxb +DnbjjvbdRjxfVGkT +DoDKjvbdGLEsDHlu +DnbjjvbdRotHKFdX +DoCkKvbdRpUGiecw +DnbjjvbdZjTHogBf +EPDKjvbdcTCjtDia +EOcKjvbdrounibuf +EOcKjvbdVBCRSqRy +EPDKjvbdEvZPolie +DnbkKvbdzRPNJKXA +DncLKvbdBhjbKiGK +DnbkKvbdqrVKmkBN +DnbjjvbdBraDTewS +DnbkKvbdJcKDRJbx +DoCjjvbdbUbHYLUI +DoDKjvbdUyITykOn +DoCkKvbdYlSEUOMN +EPCkKvbdRpUHKGEX +EObkKvbdTAFJICPE +EPDKjvbdrpWPJcVf +DoCkKvbdZnnJFFZj +EPCkKvbdkVvmcaxX +EOcKjvbdyzdnRgiI +EObjjvbdqAiFAXIE +DncLKvbdWWiYWDeH +EPCjjvbdqlzKZLgi +EObjjvbdauCGwkUI +DoDLKvbdtTSSxydc +EObkKvbdbVCGxLTh +EObkKvbdkWWmdBxX +EObjjvbdRNXaxnUz +EOcKjvbdwXLaVaVu +DncKjvbdqTtGqrKt +DncKjvbdIjEAJpGd +EPDKjvbdHffyyXwg +EObkKvbdSCEFLiYk +DncKjvbdiVZeXRuC +DoDLKvbdWWhwudFH +EPDLKvbdrRuKmkAm +EObjjvbdxsNhlqag +EPDKjvbdcJMikFwY +DoDKjvbdpyPHfpdY +DncKjvbdwyhGGXdr +DoCkKvbdkVwODbXw +DncLKvbdJcJbpibx +EPCkKvbdsQWPJcVf +EOcKjvbdZRNEiMdq +EObkKvbdjvXOECXw +EObjjvbdZxcjODLr +DncKjvbdRWmdDMID +DncKjvbdjvWmcbYX +DoCjjvbdnBjXXoOV +DncKjvbdiBnbdwQq +EPDKjvbdDoDKjwCd +EPCkKvbdFxuVBEYC +DncKjvbdFVxopMie +EOcLKvbdKWUfEEfi +EPCkKvbdNrtVgEtp +DoDLKvbdfoazwDxI +DoDKjvbdqquKmkAm +EPDKjvbdhbPCeXRR +DncKjvbdZtIhyETO +EPCkKvbdQwNdCkhD +EPDKjvbdhzUfMROG +DnbjjvbdrpVoKCuf +EPDLKvbdtlYWaUAw +EOcLKvbddoErjstS +DnbkKvbdyzeORghh +EPDLKvbdZnmhdeZj +DoCjjvbdcIlikGXY +EOcLKvbdLAkHNBxR +DoCjjvbdtkwwBUAw +DoCjjvbdgGMZnHHA +DnbkKvbdUsmTfLuj +EOcLKvbdqZPHgQcx +EPDLKvbdLqvlytpz +DoDLKvbdqdFIomvB +EObjjvbdBhjbKhfK +EOcLKvbdrMyjYlIJ +DncKjvbdDncKkXCd +DnbkKvbdNQXpunHT +EPDKjvbdZjSgofbG +DnbjjvbdBiKbLIej +DoCjjvbdGAoQxizm +EOcLKvbdwtldqZLn +DoDLKvbdIrxaSmXl +DoCjjvbdNHDQMpUk +EOcLKvbdTkunaWOi +DncLKvbdNHCpMpVL +DoDKjvbdelfXHNKL +EObjjvbdcyxpYYqC +DoDLKvbdZGwEAOri +DoDLKvbdIxUCHkqQ +DoCjjvbdoznEKxPA +EOcKjvbdbLMGPNcA +EObjjvbdiiegilxS +DoDKjvbdZRNFImFR +DncLKvbdRbDeLhxk +EPCkKvbdqlzJxlHi +EOcLKvbdhkeDnUby +EPCjjvbdhaoDEwQq +EPCkKvbdFkFScHlu +EPCjjvbdJKEAKQGd +DoCkKvbdpxngfqDx +EObjjvbdUGznLwWF +EObjjvbdVZHsykPO +DncLKvbdYlRdUNlN +EPCkKvbdHDkWKBjK +DncLKvbdjKFhKMxS +DnbjjvbdnBjWxPOV +EObkKvbdtcCtvvOo +DnbjjvbdTpqPUthN +DncLKvbdMoxQvOGs +DnbjjvbdfNGXHMjL +EPDKjvbdhgJcZVjV +DoDLKvbdNGbolpVL +EPDKjvbdatbHYLUI +DncLKvbdczZPwxqC +DnbjjvbdZxcimblS +EPDLKvbdKaKgMbXq +EOcLKvbdtbcUwWOo +DnbkKvbdJutfEEfi +DoCjjvbdmIdURUqa +EPCjjvbddBrmSATm +EPCkKvbdXsLaNUPY +DnbkKvbdNPwpvOGs +EOcKjvbdIwsaglQp +DoCkKvbdlhdUQtrB +DoDLKvbdGdLWJaij +DoCjjvbdwXMAvAvV +DnbkKvbdbrbkTdJa +EPDKjvbdFVxpQNJe +DoCjjvbdHDkWJbKK +DnbkKvbdjvXODbYX +DoCjjvbdemFwGmJk +DoCjjvbdQdCaPpcr +EOcKjvbdqcdiQNvB +DncLKvbdbBWFFoow +EOcKjvbdKaKgMawq +EObkKvbdLBKgMawq +DncKjvbdcbSmSAUN +DoCjjvbdyOTHwsJD +EOcLKvbdOStVfeUp +EObkKvbdHffyyYXg +EPCjjvbdmuUykJrG +DoDLKvbdJYTbILpp +DncKjvbdnGdwlmgZ +EPDKjvbdZQldhldq +EObjjvbdUaBpsRSZ +EOcKjvbdrzLpSaIO +DnbjjvbdLGFgbAqV +EPDKjvbdXrlAmUOx +EPDLKvbdtSqryZeD +DoDKjvbdtlXwAtAw +DoDKjvbdaRebgsfL +EObjjvbdUWLpKUAq +EObjjvbdQvmccLgc +EOcLKvbdznopeDMY +EOcLKvbdIwsbHkpp +EPDLKvbdziuQPcsU +EPDLKvbdelevgMik +DoDKjvbdTAFIgbOd +DoDLKvbdbBWFGPow +DoDKjvbdYqNEiMeR +EOcLKvbdhficYuiu +EOcKjvbdyTOImRbH +DncKjvbdiLeDmtby +EPDLKvbdUsmTekvK +DoCkKvbdkCkkQftg +DoCkKvbdVTmUFlVj +DoCkKvbdTIyjRAAl +EOcKjvbdbUafxKtI +EOcKjvbdZsiIxdSn +DoDKjvbdSCEElIyL +DnbjjvbdBsAbsfXS +DoCkKvbdBcpAuimG +DoCkKvbdVwIwvEEg +DnbjjvbdajlFoNcA +EPCkKvbdtSrTYzFD +DnbkKvbdGFirNhsq +EOcKjvbdapHHELzd +DoDLKvbdiUyeXSUb +DnbjjvbdtAGqIABS +DnbkKvbdXsLaMsnx +DoCkKvbdeEnqawDK +EOcKjvbdDxXkstUM +DnbjjvbdcyxoxZQb +DoDLKvbdlrZVZrci +DoCkKvbdTAEiICPE +EOcLKvbdpyPHfpcx +EPDLKvbdVBCRTQqy +DnbjjvbdmJEUQtqa +DnbjjvbdkClKqHVH +EObkKvbdCJKajiGK +EObkKvbdeAURMxJf +EPDLKvbdcSbkUDjB +DncLKvbdsCFmLfjy +EPCkKvbdIwsahLqQ +DoCkKvbdrJAJeMne +DoDLKvbdIHGzYwxH +DoCjjvbdGckVjBjK +EObjjvbdegkVqmqH +DoDLKvbdLKaIWAKZ +EPDLKvbdaRfChUGL +DoDLKvbdyYJJaozL +DoCkKvbdrWpLbhyR +DoCkKvbdLGGIBaRV +DoDKjvbdKyRJrztf +DoCkKvbdjuvnEBxX +EObkKvbdNeEThhkE +EPCjjvbdQwNcbkhD +DoCkKvbdJqZePGOF +EObjjvbdNGbomQUk +EObkKvbdkxrqsZHU +EOcLKvbdrounjDVf +DoDLKvbdkClLRGtg +EOcLKvbdbKkfOnDA +EPCkKvbdRDbaPpcr +EPDLKvbdkHgLefNk +EOcLKvbdFVxpPmKF +EObkKvbdsrrSxzEc +DnbkKvbdFeirOIsq +DncLKvbdzitopDrt +DoCjjvbduWOXjQsA +EPCkKvbdyXhjCPyk +DoDKjvbdaaWEfPow +DncLKvbdvAcySneI +EObjjvbdADRwjZhp +EObkKvbdnPyxvLYb +DncKjvbdijGIJlwr +EPCjjvbdJcJbqJcY +DnbkKvbdkMbLydgP +DoCkKvbdRDbaQQcr +DoCjjvbdxsOIlrCH +DnbjjvbdKQydnfOF +EPDKjvbdcImKKfWx +DnbjjvbdcImKKewY +EObkKvbdqdFJPmua +EObjjvbdajkennDA +DnbjjvbdZyEKNcLr +DoCjjvbdKWVFdEgJ +EPDKjvbdWXIwuceH +DnbjjvbdqiAJdlne +EOcLKvbdkyTRryGt +EPCjjvbdpaJFAWgd +EPCjjvbdmJDsqVSB +EPCjjvbdREDAopdS +DoCjjvbdRpUHKFdX +DncKjvbdptUHSSKt +EPCjjvbdiCObdvpq +DncLKvbdNwnuzcmt +DncKjvbdqdFIpOWB +DoDKjvbdjggLefNk +EObkKvbdrNZiyLgi +EPCkKvbdaSFcITfL +DnbjjvbdGLFTDINV +EPCkKvbdiLeENuDZ +DncLKvbdZyEJmcLr +EObjjvbduDCuWvOo +DoDKjvbdNQXqWNgT +DncKjvbdVBCRTRRy +EPCjjvbdSQUGifEX +EOcLKvbdANIZSvyx +DoDKjvbdvBDyTPFI +DnbkKvbdEPCkLWbd +DoCkKvbdyYIjCPyk +DnbkKvbdelewGmKL +EPDLKvbdatbGxLUI +EPDLKvbdTvLojTaR +DoCjjvbdhtyeWrVC +DoDKjvbdzeZnzdzQ +DnbjjvbdyzdnRhJI +EPCjjvbduLxWaUBX +EOcLKvbdkyTRsYgU +DnbjjvbdCTBCsewS +EObjjvbdjAPgApHK +EPDLKvbdwkWdHzyf +EObjjvbdsPvOicWG +DoCkKvbdTulPisaR +DnbkKvbduCcUvuoP +EObkKvbdZRMdiMeR +DoCkKvbdSPtHJfDw +DncLKvbdKaLGlaxR +DnbkKvbdRpTgKGDw +DoCjjvbdWXJYWEEg +EObjjvbdWXJYWDdg +EOcKjvbdKCjCqKCx +DnbkKvbdakMGPNcA +DoDKjvbdwkXDgzzG +EObkKvbdNHDPlotk +DncLKvbdyzdmrIJI +EObkKvbdFkErbhMu +EPCkKvbdNeDsiIjd +DoDKjvbdIGfyyXxH +DoCjjvbdZyDinDLr +EPCjjvbdemFvfmJk +EObjjvbdJYTbILqQ +DnbjjvbdWXIwucdg +DoCjjvbdiHKCxvJu +EPDKjvbdfpBzwDxI +DoCjjvbdaNLCStlg +EPCkKvbdnVUykJqf +DoCjjvbdyYIjBozL +EPCjjvbdzjUpQDsU +DoDLKvbdZxcjOCkr +EPCkKvbdeFOrBvcK +EPDKjvbdKaKflaxR +EOcLKvbdfMevgMjL +EPDKjvbdGckWKCKK +DoCjjvbdKVuFdEgJ +EObjjvbdfMfWfmJk +DoDLKvbdMfbomQVL +EPDLKvbdRkYeuGjs +EOcLKvbdKfGHaaQu +EObkKvbdoznDjwoA +EOcKjvbdUMWPBVoJ +DoCkKvbdFjeSbgmV +EPCjjvbdrEFJQOWB +EOcLKvbdvAcyTOdh +DnbjjvbdWfYzUAOs +EObkKvbdTkuoBWPJ +DnbkKvbdFpASvgFy +DoCjjvbdczZQXyRC +DoCjjvbdRDcBQQdS +DoDKjvbdqYngfqDx +EObkKvbdWRmwbElD +EPCjjvbdFyVVBDwb +EObjjvbdBhjbKhej +DncLKvbdzaAPGgBl +EObkKvbdTppoVUgm +DoCjjvbdbrcLTcjB +EPCkKvbdGLFTCglu +DoDLKvbdDwxMUUUM +EPCjjvbdNQYQumgT +DncKjvbdmfeXmOGy +EPCjjvbdwtmFRYkn +DoCkKvbdsBfMlGjy +DncLKvbdRpUHKGDw +EObjjvbdjblLQfuH +EObjjvbdJYTbHlRQ +DoCkKvbdmttyjiqf +DoCkKvbdZQldiMdq +EPDKjvbdFejSNiUR +EOcLKvbdjgfkfFnL +DnbjjvbdMpYQvNgT +DnbkKvbdUyIUZjnn +DnbkKvbdJbjDRKDY +EPCjjvbdeEnrBvcK +EOcKjvbdyzdnSIIh +DoDKjvbdDoDKjwCd +DoDLKvbdCSaDUFwS +DoDLKvbdIrxaTMwl +DnbkKvbdRNXayNtz +DoCkKvbdxxJKBoyk +DncLKvbdnGdxNOGy +DnbjjvbdySmhlqbH +DoCkKvbdxwhjBoyk +EPCjjvbdZQleIleR +EPCjjvbdaRfChTek +EOcKjvbdYTMBNUPY +DoCjjvbdegkWSNpg +EObkKvbdziuQPdTU +EOcKjvbdnCKXYOmu +DoCkKvbdZnmhddzK +EObjjvbdzaAPGgBl +DoDLKvbdePFSjtTr +EPCkKvbdNrtWGeVQ +EPCjjvbdelfWfmKL +DoDKjvbdKxpjSztf +EPDKjvbdxmsIXsIc +EPCjjvbddZyPxYqC +DoDKjvbdvOszqLOt +DncKjvbdatbGxLTh +EObjjvbdzoQQdbkx +DoCjjvbdZRMeImEq +EOcKjvbdqTtGqqjt +EOcKjvbdqAheAWgd +DnbjjvbdySmhmRag +DncKjvbdjKFhJlwr +EPDKjvbdqFceUWBI +DoDKjvbdsBemLgLZ +EPDLKvbdKQzEoFnF +EOcKjvbdFjdsCgmV +EObjjvbdpfEEtWBI +EPDKjvbdZxcjOClS +EPDKjvbdnBivwoOV +EPCjjvbdrylQTAhO +EPDKjvbdKaLGmBxR +EPDKjvbdHgGzYwxH +EObjjvbdkHflGFmk +DnbjjvbdqGDeUVaI +EPDKjvbdMgDQNQUk +DncLKvbdSKyGVHKs +EOcKjvbdqFdEsvAh +EOcKjvbdYkrETnLm +DnbkKvbdqBIeAXHd +DncLKvbdZQldhmFR +DncLKvbdFjeSbhMu +EPCkKvbddePRavcK +EPCkKvbdssRsYzEc +EPCkKvbdRadFLhxk +DnbkKvbdVvhxWEEg +EOcLKvbdIryArmYM +EPCkKvbdKfGHbAqV +DncKjvbdEKIJuxKA +EPDKjvbdIwsbIMRQ +EObkKvbdzaAOfgBl +DncLKvbdeUAUASlv +DnbjjvbdlqxuZsDi +DnbjjvbdUWMQKTaR +EOcLKvbdNGbpNPtk +EPDKjvbdWSOYCEkc +DoCkKvbdjggMGGOL +DoCjjvbdSQUHJecw +DncLKvbdZyDjODMS +EObjjvbdfpBzvcxI +EOcLKvbdTlVoAvPJ +DnbjjvbdVviYWEFH +EPCkKvbdZnmiFFZj +EObjjvbdNGbpNQUk +DoDLKvbdrbGMkfjy +DoDLKvbdxnShYSiD +EObkKvbdJYTahMRQ +DoDLKvbdoAKzshEO +DoCkKvbdZxcjOCkr +EPDLKvbdRWmdCkgc +EPCkKvbdGFiqnJUR +DoDKjvbdRzJgsDWA +DncLKvbdptTfqqjt +EPDKjvbdmIctRUqa +EObkKvbdnBiwXoOV +DnbjjvbdfMevfljL +EObkKvbdBraDUGWr +DncKjvbdUxhTzKnn +DoCjjvbdmfdxMmfy +DnbjjvbdhuZeWrVC +DnbkKvbdLiCLpxAS +DnbjjvbdKfFgbApu +DnbjjvbdziuPpETU +DoCjjvbdwuNEqZLn +EPCkKvbdEXwksssl +EPCjjvbdhgKCxujV +DoDKjvbdhlEdOVDZ +DncKjvbdLAjgMbXq +DncKjvbdOFEThhkE +DoCkKvbdANHxrvzY +EPCjjvbdZtIiZDrn +DoCjjvbdYpldhmEq +DncLKvbdqwPlDIyR +DncLKvbdUtNUFlWK +EObkKvbdkWXODbYX +DnbjjvbdRzJhSbvA +DoCkKvbdEJgjVxKA +DncKjvbdxnSgxShc +EObjjvbdbUbHYKsh +DncLKvbdZoNiFEzK +EPDKjvbdbiMjKevx +DnbkKvbdIwsbHlRQ +EObjjvbdhWyAzzAJ +EObkKvbdqvpLcIyR +EObjjvbdGGKSOIsq +EObkKvbdTpqPUthN +DncKjvbduaEZTOdh +EObkKvbdJJdAJofd +DoCkKvbdEKIJuwjA +DncLKvbdDnbjkXDE +DnbjjvbdhbObdwQq +EObjjvbdunszpkPU +EPCjjvbdwNWANDdm +EPDLKvbdozmcjxPA +EObjjvbdZnmiFFZj +DnbjjvbduDDUwVno +EOcKjvbdZjShPfbG +DncLKvbdADSXiyhp +DoCjjvbduCcVXWPP +DnbkKvbdffLzOHHA +DncLKvbdBdPaWJlf +EPDLKvbdJvVGEFGi +EPCkKvbdvwMBWBWV +EObjjvbdijGHjMxS +EPCkKvbdaNLCTVNH +EPCjjvbdbAudeopX +DoDKjvbdozmcjwoA +EPCjjvbdYlRctOMN +DoCjjvbdDoDLKvcE +EObkKvbdVqmwaeMD +DnbjjvbdqvolChyR +EPCkKvbdRkZGVGjs +DoDKjvbdjvXOEBxX +DoCjjvbdIHHZyXwg +DnbkKvbdLBKgNCYR +EPDKjvbdyNsHxShc +EOcKjvbdyzdmqhJI +DnbjjvbdqFcdtVaI +EObjjvbdrJAKElne +DncKjvbdTvLpJtAq +EObkKvbdDoDKjvbd +EPCjjvbdYlRcsnLm +DoDKjvbdegkVqmqH +EPDLKvbdZHXEAPSi +DoDKjvbdakLennDA +DncLKvbdrDdiPmua +DoCjjvbdhbPDEwRR +EPDLKvbdtcDUvuno +DnbjjvbdEKHjVxKA +EOcLKvbdYqMdhmFR +EPDLKvbdmttzKiqf +EPDLKvbdTkvPAuoJ +DncLKvbdVAbRTQqy +DncLKvbdLBKflbYR +DoCjjvbdZyDimcMS +EOcKjvbdFpATXHFy +EObkKvbdnCJwYOmu +EPCkKvbdVZHszLPO +EPCkKvbdCSaDTfXS +DncKjvbdNVSqjmAX +EPCkKvbdFjdrbhMu +EPCkKvbdbsCkUDjB +EObjjvbdMowpumfs +DoDLKvbdRotHJecw +DnbjjvbdTfzmkwWF +EObjjvbdBcpAvKNG +DoDLKvbdWHxWXfxz +EPCjjvbdqUUGrSKt +DncLKvbdliDsqVSB +DnbkKvbdBdQAujMf +DnbkKvbdWXIxVcdg +DoCkKvbddePSCXCj +DnbjjvbdZirhPfbG +DnbjjvbdyXiKBozL +DnbjjvbdznpREcMY +DncKjvbdJcKCqKCx +EPCkKvbdJbibpjDY +EPDLKvbdkClLRHVH +EPDKjvbdTvLoisaR +EOcKjvbdZGwEAPSi +EPCkKvbdKRZdnenF +DncKjvbdfMfXGmJk +EPCkKvbdhfibyWJu +EOcKjvbdMIbLqYAS +EPDLKvbdbUbHXjtI +EObkKvbdCSaDUFwS +EPDLKvbdGGJqnJUR +EOcLKvbdDoDKjvbd +DnbjjvbdFkFTDIMu +DnbjjvbdgFlZnGgA +DoCkKvbdakLfPODA +EPDLKvbdDwwlTstM +DoCjjvbdMJBkqYAS +DnbjjvbdiGjCxujV +EPDLKvbdVwIwuceH +EPDLKvbdZyEKOCkr +EPDKjvbddoFTLTtS +DoCkKvbdXrlAlsnx +EOcLKvbdZoOIeEzK +DnbjjvbdaMjbTVMg +EPDKjvbdeOeTKssr +DncKjvbdSKxetfjs +DoCjjvbdpxnhGpcx +EPDLKvbdmtuZkJrG +DoCjjvbdYkqdTmlN +EOcLKvbdJuuGEEfi +DoCjjvbdhzUfMROG +DncLKvbdddnrBvbj +EOcLKvbdWSNwbFMD +DoDLKvbdtSrTYydc +EPCjjvbdRjxetgKs +DncKjvbdFxttaEYC +EPDLKvbdiBncFWpq +DnbjjvbdyTOImSCH +DoDKjvbdcyyQXyRC +EOcLKvbdZLrEUOLm +DoCjjvbdXmqAYVWU +EPCjjvbdUsltFkvK +DncKjvbdLqvmZuQz +DnbjjvbdZjTIQGaf +DoDKjvbdzoPpeCkx +EPDKjvbdGGKSNhsq +DncKjvbdtSrSxzFD +EPCkKvbdyOTHxShc +DnbkKvbdehKvSORH +DoDLKvbdWIXvYHYz +EObkKvbdDoCkLXCd +DoDLKvbdLBKflaxR +EPDLKvbdKQzFOenF +EObjjvbdjFLHVPAO +EObkKvbdFeiqmhsq +DoDKjvbdRotHKFdX +DnbkKvbddZxpYZQb +DncKjvbdqqtkNkBN +EPDKjvbdZjShPgBf +DoCkKvbdNHCpMouL +EObjjvbdxZgefYFS +DoCjjvbdNrsvHEuQ +DoCjjvbdwzHeewdr +EObjjvbdvPTzpkPU +EPDKjvbdrounibvG +DnbkKvbdpstGqqjt +EPDLKvbdeFOrCXDK +EOcLKvbdGBPRYizm +DoDLKvbdNwnuzdOU +DnbkKvbdRMwaxnUz +EOcLKvbdDihKWXjA +EObkKvbdFeirOJTq +DoDLKvbdSKxeuGjs +EOcLKvbddndsKssr +DnbjjvbdiCPDEvpq +EOcKjvbdMoxQumfs +DnbkKvbdfNGWfljL +DnbkKvbdIHGzZXwg +EObjjvbdTlWPAvOi +DoDLKvbdnPyyVkZC +EOcKjvbdkWWmdBxX +EObkKvbdEJgjWXjA +DnbjjvbdkMalZdgP +DnbkKvbdsCGNLfjy +DnbjjvbdYqMeIleR +DncLKvbdMgComPtk +DoCkKvbdMfbolouL +DncKjvbderAvzlDP +DnbjjvbdqwQLcIyR +EObjjvbdcImJkFwY +EPCjjvbdYzberKVy +DoCjjvbdEzsqElCi +EObkKvbdRotGiecw +EPCkKvbdGLErcINV +DoCkKvbdYpmEiMdq +DoDKjvbdJXsaglRQ +DnbkKvbdFVxpPmJe +DnbkKvbdxUmEpyLn +EPCjjvbdLrXMytpz +DnbkKvbdhtzEvqtb +EPDKjvbdDxYLstTl +EPCkKvbdiBoDFXQq +EPCkKvbdZoOJEeZj +DoCjjvbduDCuWuoP +EObkKvbdjcLkQfuH +DoCkKvbdcImKLGWx +EPDLKvbdEYXlUUTl +EOcLKvbdZLqdTnMN +EOcKjvbdmozYujyC +DncLKvbdJpzEnfOF +EOcLKvbdiCPCdvpq +DncKjvbdADRxKZhp +DoDLKvbdmJDsqVSB +EObkKvbdnBiwYPOV +EObkKvbdqwQMDIxq +DncKjvbdeFOqbWbj +EPDKjvbdmfeYMmfy +DnbkKvbdGLFSbhNV +DoDLKvbdwkXDgzzG +EObkKvbdbAvFFpQX +EPDLKvbdyXhjBoyk +DoCjjvbdMfbpMouL +DoCjjvbdREDApRES +DncLKvbdmajWwnmu +DoDLKvbdIidAJofd +DoCjjvbdSZihTCvA +DoCkKvbduLwvaUBX +EPCkKvbdiHJbyVjV +EObkKvbdGYtuAdXb +DoDLKvbdCTBCtFwS +EOcLKvbdhlFENtby +DoCkKvbdySnIlrBg +EPDLKvbdwuNFQyMO +DncKjvbdlqxtzTDi +DoDKjvbdWWhxWEFH +DoCkKvbdiHJcZVjV +EPDKjvbdCflGHAzc +DncLKvbdzROmJKXA +EPDLKvbdCJLBjhej +EOcKjvbdVrNwbEkc +DnbkKvbdUtNUFlWK +DoDKjvbdLBKflbYR +EPCjjvbdauBfwkTh +EPCkKvbdrXQMDJZR +DnbjjvbdnVUyjjSG +DncKjvbdiMEdOUby +DoDKjvbdqiAKFNPF +EOcLKvbdQdDBQQcr +DoDKjvbdpxnggQdY +DncKjvbdtSrTYydc +DnbjjvbdwzHefXeS +DoCjjvbdRosfjGEX +EPCkKvbdnPyxujyC +EObjjvbdZyEJnCkr +DnbkKvbdhytelRNf +EPDLKvbdeYZstSFz +EObjjvbdTfzmlXVe +EOcKjvbdbKkenmcA +DncLKvbdvwMAuaVu +EObkKvbdwMvAMdEm +EOcLKvbdkHflFfNk +EPCjjvbdzoPpeDMY +DoCjjvbdiLeDmuCy +EOcKjvbdRpUGjGDw +DnbkKvbdUslsekuj +EPCjjvbdmJEURVRa +DncLKvbdZjSgofaf +EOcLKvbdaMjasUlg +DoCjjvbdREDBPpdS +DnbjjvbdIwsaglQp +DoCkKvbdkNCLzFHP +DoDLKvbdaRfChUFk +EPCjjvbdrRtjnKaN +EPCkKvbduoTzpkOt +EOcKjvbdnHFYMmfy +EOcKjvbdHDkVjBjK +EObjjvbdEXxMTssl +DnbjjvbdNPxRWOHT +EObjjvbdiZtfLpmf +EObjjvbdTvLojTaR +DoDKjvbdKkBIWAKZ +DoDLKvbduCbtwVno +DncLKvbdmttzKjSG +DncLKvbdbBVdfQQX +EObkKvbdyXiKBpZk +DncLKvbdzGxlAMdw +DoCkKvbdMpXpvNfs +DoCkKvbdKQydoGOF +EPDLKvbdTfzmlXVe +EPDKjvbdQccBPqES +EPCjjvbdZtJIyESn +DoCjjvbdVrOXbElD +DnbjjvbdbLMGOmcA +DnbkKvbdnPzZWKyC +EPDLKvbdmajWwoOV +EObjjvbdQwOEDMHc +EPCkKvbdTvMQKUBR +DoCjjvbdOTUVgEtp +DoCkKvbdIHHZyXxH +EPDLKvbdDoDLKwDE +EObjjvbdiZtfMQmf +EObjjvbdijGHimXr +DoDKjvbdVrNxCElD +EPDLKvbdJutedFGi +DnbjjvbdmSZVZsEJ +DncKjvbdqlzKYlIJ +EOcKjvbdfelZnGgA +EOcKjvbdYlRctOLm +DoDKjvbdPxmAHSrK +EPCjjvbdWWiYWEEg +DoCjjvbdbAvFFoow +EOcKjvbdFjeSbglu +EPDLKvbdlqyVZsEJ +EOcKjvbdddoRbXDK +EPCkKvbdaRecHtFk +DncLKvbdSKyGUgKs +DoDLKvbdcyyPwyQb +DoDLKvbdnVUzKjRf +EObjjvbdYkqdUOLm +EObkKvbdRbEEkhyL +DncKjvbdtAHQhAAr +DnbkKvbdVqmwbFMD +EOcLKvbdznoqFDLx +EOcLKvbdEXxLtTsl +DnbkKvbdtumwipsA +EObjjvbdmJEUQtqa +DncKjvbdxwhjCPyk +DnbkKvbdyfyMANFX +DncLKvbdiVZeXRtb +EObkKvbddtAUATMv +EOcKjvbdxnSgwriD +EObjjvbdlrZVZrdJ +EPCkKvbdsBelkfkZ +DoDKjvbdFVyPomJe +EPCkKvbdQmYBxnUz +EOcKjvbdSBdFLhyL +DncLKvbdmJETpuSB +DoDLKvbdRECaPpcr +DncLKvbdIxUBglRQ +DoCjjvbdpssfrSLU +DnbkKvbdSQUHJedX +EObjjvbdkySrTZHU +EObkKvbdZtIiZETO +DoCjjvbdtumwipsA +DoCjjvbddBrlrAUN +EPCjjvbdKCjDQibx +DoCjjvbdQccAopdS +DoDLKvbdSBceLiYk +EPDKjvbdREDAoqDr +EOcKjvbdZQleJMeR +DoCkKvbdEARiMywX +EPDKjvbdkDLkQgUg +DncLKvbdFjdsDIMu +EPCjjvbdlrYtysDi +EPCkKvbdezuxeIsw +EObkKvbdyNsHxTJD +DnbkKvbdemGWgMik +DoDLKvbdBhkCKhej +EOcLKvbdjvWmcaww +EPDLKvbdqTsgRrLU +EObkKvbdZyDimcLr +EPCjjvbdlrYtzTEJ +DoCkKvbdHgGyyYXg +DoCkKvbdZoNhddyj +EPDKjvbdhtzFWquC +EPCkKvbdDoCkKwDE +DoDLKvbdsrqsZZeD +EPCkKvbdiHJbxuiu +DoCjjvbdhlFEOUcZ +EPDKjvbdDigiuwjA +EPDKjvbdQdDBPqES +DoCjjvbdcTCjsdKB +DncLKvbdUsmUFkuj +EPDLKvbdnHEwlnGy +EOcLKvbdxVNEqYkn +DoDKjvbdEuxopNJe +EObkKvbdkClLQfuH +EPCjjvbdcTDLUEKB +EOcKjvbdEPDKkXDE +EPCjjvbdXsLaNUOx +DoDKjvbdFWZQQNKF +EPDLKvbdUtMtFlVj +EOcKjvbdzaAPGfal +DnbkKvbdHlBznXRL +DoDLKvbdTlVoBWPJ +EPCkKvbdDoCjkXDE +EOcKjvbdrzMQTAhO +EOcLKvbdozmdLXoA +DoDLKvbdzQnmIjXA +DoCkKvbdmgExMmgZ +EPCkKvbdzjUoocrt +EOcLKvbdwyhGFweS +EOcLKvbdWWhxVceH +DncLKvbdqqtkOKaN +DoCkKvbdOTTvHEuQ +DoDLKvbdjJehKMwr +DoCjjvbduDCtvuoP +DnbjjvbdqdEiPmvB +DnbjjvbdhtzEwRuC +DnbkKvbdRkYetfkT +DoDKjvbdCDpBVjNG +DoCkKvbdcSbjscjB +EPDLKvbdYpldiMdq +DoCjjvbdaaWEfPow +EOcKjvbdqZPHgQdY +DoCkKvbdeOdrjtUS +DoDLKvbdFaPRZJzm +DnbjjvbdRECaPqES +DncKjvbdaMjaruMg +EObjjvbduVnYJpsA +DnbkKvbdqTsfrSLU +DncKjvbdYqMeJMdq +EOcKjvbdvvlBWAuu +DnbjjvbdUxgtZkOn +EOcKjvbdOSsufduQ +EOcLKvbdtumxJqTA +DncKjvbdIryAsNXl +DoDKjvbdMuTRkNAX +DoDLKvbdxnSgwrhc +EOcKjvbdiHKCxujV +EObkKvbdeKJrVtzn +EPDLKvbdjhHMGGNk +EOcLKvbdkVwNdBww +EOcLKvbdygZMANEw +EPDLKvbdRXODcLhD +EPCjjvbdSPsfjFcw +DoDKjvbdYpleIldq +DoDLKvbdOEcsiIjd +DnbjjvbdddoRavbj +DncLKvbdHDkWKBjK +DoCjjvbdxxJKBoyk +EPDKjvbdYkqdUNkm +DoDLKvbdDnbjjvcE +DoCkKvbdVvhxVceH +EPDLKvbdWRnXbFMD +EObkKvbdliEUQtqa +EPCkKvbdNQXqVmfs +EOcLKvbdIGfyyYYH +DncKjvbdxUldpxlO +DoDKjvbdznopdcLx +DncKjvbdHDkVibKK +EPDLKvbdjlbLydgP +DoDKjvbdYTMAltOx +DoDKjvbdcSbkUEKB +EPCjjvbdzoQREblY +EOcKjvbdZxcinDMS +DoDKjvbdZyDjODMS +DoCjjvbdxZgfFwdr +EPDLKvbdaMkBsVMg +EPCkKvbduDDUvuno +DncKjvbdsCFmLgKy +DoDLKvbddeOrCWcK +DncLKvbdNddThhjd +EOcKjvbdBvzcheQW +EPDLKvbdeEnqbXCj +DoCjjvbdNrtVfduQ +EOcKjvbdZQmEiNFR +EPCkKvbdGFjSNiTq +EPDKjvbdZxcinCkr +DoCjjvbdkNBlZdgP +DoCkKvbdEYXkstTl +DncLKvbdYpmEhmEq +EOcLKvbdePFSkTsr +DoCjjvbdemFvfmKL +DnbkKvbdemFwGljL +EPDLKvbdmbJvxOnV +EPCjjvbdtbcVXVoP +EOcKjvbdFkErcHmV +DoDKjvbdVUMtFlWK +EOcLKvbdkMakydfo +DnbjjvbdIMBznWqL +EObkKvbdptUHRrLU +DnbkKvbdjJfHilwr +EPCjjvbdGYuUaDxC +EObjjvbdmtuZjjRf +DncLKvbdkCkkQfuH +DoDLKvbdtlXwBUBX +DncLKvbdCWzchePv +EObkKvbdrEEiPmua +EOcLKvbdYqNFIldq +DoDLKvbdfILWRnQg +DoDLKvbdqUUGrRkU +DoCjjvbdfMfWflik +EOcLKvbdOTTugEuQ +DncLKvbdjvWnDaww +EOcLKvbdsPuoKDVf +EPDLKvbdZirhPfaf +DoCjjvbdDwxLsstM +DnbjjvbdfHkWRmpg +DncLKvbdrpWOibuf +EPDLKvbdZtIhyESn +DncLKvbdwygfGYEr +EPCjjvbdeEoSCWcK +EPCjjvbdjuvmdBww +EObjjvbdqUTfqqjt +EOcLKvbdZjSgogBf +DoDKjvbdYqMdiMeR +DoCjjvbdKefICApu +DoDLKvbdMfcQNQVL +EPCkKvbdjggMGGNk +EObkKvbdCDoaVjMf +EObkKvbdWWiXuceH +EOcLKvbdURROuVHm +DnbjjvbdpssfrSLU +DncKjvbdgFkzNgHA +DnbjjvbdaSFbgtFk +DncLKvbdIxTahMQp +EPDLKvbdKWVFceGi +DncKjvbdFVyPomKF +DoDKjvbdZirgpHBf +EObjjvbdVqmwadkc +EPCkKvbdieLHVPAO +DncKjvbdZLqdUOMN +DoDKjvbdWWiYWDeH +EObkKvbdQwNdClID +DnbjjvbdMoxRVnGs +DncLKvbdrDdiPmvB +DnbjjvbdZQleJNFR +EOcLKvbdrDdhpOVa +EPDLKvbdYqNFImFR +DoDKjvbdEYXlTtUM +DoCjjvbdhuZeWqtb +EPDKjvbdMfcPlpVL +EOcKjvbdNQYQvNfs +DoDKjvbdiUzFXSVC +DoCkKvbdmRxtzSci +DnbjjvbdbiMikGXY +DoCjjvbdQdDBQQdS +EObjjvbdqZPIGqDx +DoCkKvbdkWWmdBxX +DoDKjvbdKxpirzuG +DoCjjvbdlBNPNALA +DoCjjvbdhzVGMROG +DoCjjvbdzoQREcMY +EPDKjvbdlAlnmALA +EPDLKvbdwuMeRZLn +EOcLKvbdYqMdiNFR +EObkKvbdOTTugEuQ +EOcKjvbdYTMAmUOx +DnbjjvbdRDcBQRES +DoDLKvbdidkHVPAO +EPCkKvbdSKyFtfjs +DoCjjvbdhytelQmf +DncLKvbdEztRElCi +EPDLKvbdRWnEDLgc +DoDKjvbdwuNFQyLn +EObkKvbdGLFTDHmV +DnbkKvbdShyiqABM +EObkKvbdUaCQsRSZ +EOcKjvbdjuwNcbXw +DnbkKvbdmfeXlnHZ +DncKjvbdsPuoKDVf +EOcKjvbdNGbomPtk +DoDKjvbdvPTzpkOt +EPDKjvbdJqZdneme +DncKjvbdqTtGqqkU +DnbkKvbdjggLeemk +DoCjjvbdVZIUZkOn +EPCkKvbdzjVPodTU +DncKjvbdnBjXYOnV +DoDKjvbdHgGzYxYH +EPCkKvbdSZigsCvA +EPCjjvbdtbbtvuno +DoDKjvbdPIAXyAZB +EObjjvbdRNXaxmtz +DoCkKvbdUyITykPO +EPCkKvbdssRryZeD +EObkKvbdJuuGEFGi +DoDLKvbdxZgfGXeS +EObjjvbduoTzqLOt +DoDKjvbdbrbkTcjB +DncLKvbdxxIiaoyk +DoCjjvbdFxtuBDxC +EPDLKvbdzaAPGgBl +EPDLKvbdpxnhGqDx +EOcKjvbdtSqsZZeD +EOcLKvbdMowpvOGs +EObkKvbdVBCRSpqy +DoCkKvbdZRNEiMeR +EPCjjvbdczYowyQb +DncKjvbdjgfkfGNk +DnbkKvbdssSTYzFD +EOcLKvbdVhYWYGxz +DncKjvbdKDJcQibx +DncKjvbdZHWdAPTJ +EPCkKvbdFjdsChNV +DoDLKvbdJcJcRJcY +EPCjjvbdRjyGVHLT +DnbkKvbdBcpBWKMf +DoCjjvbdxUmEpyMO +EPDKjvbdZoNiFEzK +DoCjjvbdPIAYZAZB +EOcLKvbdFejSOIsq +DoDKjvbdjggMGFmk +EObkKvbdWRnXadlD +EObkKvbdnGdxMmfy +DoDLKvbdLBKgNBxR +DoCjjvbdaSGChTek +EPCkKvbdSCEElIxk +EObjjvbdIxTbHlQp +EPCkKvbdOEcshhkE +EOcLKvbdbsCjsdKB +DncLKvbdCSaDUGXS +EPCjjvbdRzJgsDWA +EPDLKvbduCbuXVno +EOcLKvbdGdLViajK +DncKjvbdCWzdJEpW +DncKjvbdjuwODbXw +DncLKvbdqUTfqqjt +EOcKjvbdxUmFRYkn +DoCjjvbdVAaqSqRy +EPDLKvbdaMkBsUlg +EOcKjvbdGLFTCgmV +EPCkKvbdZeYGzgiC +DoCjjvbdwXLaWBVu +DoCjjvbdelevgMik +EPDKjvbdkHgMGGOL +DoCjjvbdcJMjKewY +EOcLKvbdwzHfGYEr +DncLKvbdlZTRryGt +EOcLKvbdfVzwoizs +EPDKjvbdhzUelRNf +EPCkKvbdiHKCxvKV +EOcKjvbdGFjRmhtR +EPDLKvbdGLEsChNV +DoDKjvbdYORAXuWU +DnbjjvbdpstHSSKt +EObkKvbdegkVqmpg +EPDLKvbdhyuGMQmf +EObkKvbdliDtQtqa +DoCkKvbdfNGXGlik +DoCkKvbdHfgZyXwg +DoCjjvbddndsKssr +EPCjjvbdZMSDsnLm +EObkKvbdEXxMTstM +EPDKjvbdJvUecdfi +DnbkKvbdVUMsekuj +EPCjjvbdPyNAGsSK +DoCjjvbdMSWmZuQz +EObkKvbdBcpBVjNG +DnbjjvbdezuxdiUX +EPCjjvbdBdQAvJlf +DncKjvbdOTUWHFVQ +DoDKjvbdaSGDIUFk +EOcKjvbdUGzmlWvF +EOcLKvbdjlakydfo +DoCkKvbdWSOXaeLc +DoDKjvbdznpRFDLx +DoCkKvbdwtldpxlO +DoDLKvbdGdLVjBjK +EObjjvbdmttykKSG +DoDKjvbdZjShQGaf +DoDKjvbdrDdhomvB +EPDLKvbdiUyeXSVC +DncKjvbdIsYaSmXl +DnbjjvbdVhXvYHYz +EPDKjvbdwzHfGXdr +EOcKjvbdxsOJMqbH +DoCjjvbdehKuqmqH +EPCjjvbdZdxGzhJC +EOcKjvbdsCGMlHLZ +DoCjjvbdOEcshhkE +DoCjjvbdEzsqElDJ +DncLKvbdURRPVVIN +EPCkKvbdZoOJFEzK +DnbjjvbdBiKajhfK +EOcLKvbdbUafwkTh +EOcLKvbdVZHszKoO +DnbkKvbdGKdsDIMu +DnbkKvbddoFSkUUS +DnbjjvbdPxmAGrqj +EPCjjvbdKNADzHVB +EPCjjvbdcyxpXxqC +DnbkKvbdLBLGmBxR +EPDKjvbdFWYopNJe +EPCkKvbdcJNKKewY +DoCjjvbdGLErcHmV +EPCjjvbdWXIxWDdg +DnbkKvbdQvmcbkhD +EOcLKvbdbVCGwjtI +DoCjjvbdmgFYMmfy +EPDLKvbdQdDApRES +DnbkKvbdWWhwvEFH +DnbjjvbdxZhFexFS +EPCkKvbdCIjakJGK +EPCkKvbdKQyeOfOF +DncKjvbdEObjkXDE +DnbjjvbdNGcPlotk +DoCjjvbdVUMtGMVj +EPDLKvbdelfWgNKL +DnbkKvbdqwPlDJZR +DncLKvbdbiMikFwY +EObkKvbdkNBkzEgP +DoCkKvbdmuUyjiqf +DncKjvbddneSjtTr +EPCkKvbdRkZFtgLT +EObkKvbdRjyGUgLT +EPCkKvbdKaKgMaxR +DnbkKvbdZMRdTnMN +EPCkKvbdqZOhGpcx +EPCkKvbdxwhjBozL +DncKjvbdGckViajK +EPCkKvbdiifHilxS +EOcLKvbdqUUGrRjt +EPCjjvbdbhljLGWx +DnbkKvbdhgKCxujV +DoDLKvbdJSyAsNXl +DoDLKvbdjgflFenL +EPCkKvbdMJBlQxAS +DncLKvbdUMVoAvPJ +DoCkKvbdkCkjpgVH +EPDKjvbdqGEEsvAh +EObkKvbdmRxuZrci +EObjjvbdNdctIhjd +EPCkKvbdCSaDTevr +EPCjjvbdRDcAopcr +EObkKvbdwtmEpyMO +EOcKjvbdqZPHfqDx +EOcLKvbdaNKbStmH +EOcLKvbdaSFcHsfL +DnbkKvbdRosgJecw +EObkKvbdkySrSyGt +EOcLKvbdwuMdqYkn +EPCjjvbdrDdhonWB +EPCkKvbdiBoDEwRR +EPCkKvbdEztQdlCi +EObkKvbdFyUuBEXb +EPDKjvbdOAIsUJrA +EPDKjvbdKCicRKCx +EObjjvbdSZihSbvA +DncLKvbdvAdYsPEh +DncKjvbdySnImSCH +EObkKvbdiVZeXRtb +EOcKjvbdsCFllHLZ +EPDKjvbdZeXfzgiC +DnbjjvbdMpXpvNgT +DoDLKvbdsCFllHKy +DoCkKvbdqYoHfpdY +DnbjjvbdRzKHrbvA +EOcKjvbdNHComPtk +EOcLKvbdCJLBjiGK +EPDLKvbdsZlPsAhO +DnbkKvbdemFvgMik +DoCjjvbdFyUuBDwb +DnbjjvbdrafMlGkZ +DncKjvbddZyPxYpb +EObjjvbdxZhGFwdr +EPCkKvbdEXwlTssl +DnbkKvbdANIYrvyx +EObjjvbddePRawCj +EPDKjvbdyNsIXrhc +EPCkKvbdhkeEOVDZ +DoDLKvbdAMgxrwZx +EPDLKvbdsQWPJbvG +DoCkKvbdkVvmcbXw +EPDKjvbdJYTbIMQp +DncLKvbdBsAcTewS +DncLKvbdxrnJNRag +EOcLKvbdmSYtzSdJ +EObkKvbdqdFJQNua +DoCjjvbdZyEKOCkr +DoCkKvbdZLrEUOLm +EPCkKvbdRNXaxnUz +EPDLKvbdnUuZjjRf +EObkKvbdmbKXYOmu +DnbkKvbdlZTSTYgU +EPDKjvbdGYuUaDxC +DncLKvbdFyVVAcxC +DoDKjvbdEvZPpMjF +EPDLKvbdSwjlNzjx +EPCjjvbdbKkeoNcA +DoCkKvbdMfcQMotk +DnbkKvbdyTNiNRbH +DncLKvbdFWYpQMjF +EPCkKvbdEvYopMjF +DncKjvbdeKJrWUzn +EOcKjvbdpssfrSLU +EObjjvbdKCjDRJbx +DnbkKvbdeUAUATMv +EPDLKvbdjKGIJlxS +DnbkKvbdpssfqrLU +EPDKjvbdqZPHgQdY +EPDLKvbdeAURNXif +DoCjjvbdypoMhiwA +EPDLKvbdGYtuAdXb +EObkKvbdRaceLiYk +DoCjjvbdXsMBNTnx +EOcLKvbdKCjCqKCx +DoCjjvbdYSlAmUPY +EPDLKvbdpstGrSKt +EPDKjvbdhtyeXRuC +EObjjvbdtlYXBUBX +EObjjvbdRMxByNtz +EObjjvbdhanbeWqR +EOcKjvbdpyPIHQcx +EPDLKvbdrRtjnLBN +DoDKjvbdNQYQvNgT +DnbjjvbdbsDKsdJa +DnbjjvbdDxYMTssl +EPDLKvbdnCKWxOmu +DncKjvbdILazmwQk +DoDKjvbdhgJcYuiu +DoCjjvbdlYrrSyHU +EOcKjvbdVUNUFkvK +EObjjvbdRyjHrbvA +DoDLKvbdDnbkKvbd +EOcKjvbdaNKbStmH +DnbkKvbdjblLRGtg +DncKjvbdxUleQyLn +EPDKjvbdLGFhBaQu +EObkKvbdqmZiyLgi +DoCjjvbdJuuGEFGi +EPDKjvbdqmZixlIJ +DoCjjvbdXnRAYVVt +EOcLKvbdWIYVxGxz +EPCkKvbdxZgfGYEr +EPDKjvbdfNGWfmKL +EPDKjvbdbrbjscjB +DoDKjvbdsPunjCvG +DoDKjvbdziuQQDsU +DoDLKvbdbhlijfWx +EPCkKvbdhgKCyWKV +EPDLKvbdGLEsCgmV +EOcKjvbdmIcspuSB +EPDKjvbdIwsbILqQ +DoDLKvbdpedEsvBI +DncLKvbdsPunjDVf +DncLKvbdIxTbHkqQ +DncLKvbdcSbkTdJa +DncKjvbdUWLpJsaR +DnbkKvbdsQVnjCvG +EPDKjvbdyXiJapZk +EPCkKvbdrzLosAgn +DncLKvbdNsTugEuQ +DoDLKvbdrykoraHn +EObjjvbduaDySoFI +DncKjvbdZHWdAOri +EPCjjvbdlqxtysEJ +DnbkKvbdOSsvHEtp +DoDKjvbdRotGjGDw +DoDKjvbdYfvdAOsJ +DoCkKvbdBhjajiGK +EObjjvbdCgLegAzc +DoDLKvbdhtyeWrVC +EOcKjvbdzitoocrt +EOcKjvbdNVTSKmAX +EPCjjvbdVYgsyjnn +EObkKvbdliEUQuRa +DoCkKvbdqFceUWAh +EPDKjvbdIsZAsMxM +DnbkKvbdUVlPjUBR +DoDKjvbdbUafwjsh +EObjjvbdQlxCZOUz +DoCkKvbdQvnEDLhD +EOcKjvbdUVlQKUBR +EPDKjvbdehKvRnQg +DoDLKvbdxmsIYTIc +EObjjvbdsCGNLfkZ +EObjjvbdmSYtzSdJ +DoCjjvbdiMEcnVDZ +EPCjjvbdypnlhiwA +DoCjjvbdRyihTDWA +DoCjjvbdZoOJEdzK +DoCjjvbdJpzEoGOF +DoCkKvbdYpmEiMeR +EPCkKvbdbhljKfWx +EPDLKvbdqYnggQcx +EOcLKvbdwjwEHzyf +EPCjjvbdLFegbAqV +DoCjjvbdMoxQvNgT +EPCjjvbdZsiIyETO +DoDLKvbdZQmFImEq +DnbjjvbdYkrDtOMN +EPCjjvbdjggMGGOL +DncLKvbdDwwlTstM +EOcKjvbdCWzciFQW +DoCkKvbdyYIiaozL +DnbkKvbdNsTufeVQ +DoDKjvbdjlakydfo +EObjjvbdUGznLvue +DoCjjvbdeFOqawDK +DoCjjvbdZnmiFEyj +EOcKjvbdVBCQrprZ +EOcLKvbdrovOjCvG +DncKjvbdrovPKCuf +EOcLKvbdlYrqryHU +EObkKvbdcyyPxZQb +EObjjvbdnBivwnnV +EObjjvbdjJehJlwr +DnbkKvbdOFDtJIjd +DnbjjvbdVAaqSqSZ +EObkKvbdrXPkbiZR +DoCjjvbdzaAPGfal +DncKjvbdZQldhmEq +EObjjvbdmoyxvLZC +DnbkKvbdmpZxujyC +DoCjjvbdvwLaWBWV +DncLKvbdiVZdvquC +DnbjjvbderBWzlDP +EPCjjvbdjbkjpfuH +DncLKvbdrafNLfkZ +DncKjvbdrWokbhxq +EPCkKvbdsZkosBHn +EOcKjvbdidjfuPAO +DnbjjvbdNGcPmQUk +EPCjjvbdrJAKFNOe +DnbjjvbdTukoitBR +DnbkKvbdySmhlrCH +EObkKvbdrXPkcIxq +EOcLKvbdFejSOItR +EObkKvbdmgExMnGy +EPDKjvbdqrVLOLBN +DoDKjvbdLAkHNCYR +EObkKvbdVrOXbEkc +DnbjjvbdEXwlUTsl +EPCkKvbdyXhjBpZk +EObkKvbdiifHjMxS +EOcKjvbdEKHiuxKA +EObkKvbdZLqdTmlN +EObkKvbdWRnXaeLc +DnbjjvbdWSNwaeMD +DnbjjvbdfNGWgNKL +DoDKjvbdoAKztIDn +DncLKvbdmaivxOmu +DnbjjvbdZLqcsnMN +EObjjvbdcTDKscia +EPCjjvbdOTTufeUp +DoDKjvbdGdLVjBjK +DncKjvbdcJNKLFvx +EOcLKvbdTYKkmzjx +EOcKjvbdZRMeImEq +DoDLKvbdKQyePFnF +DnbkKvbdNrtWGduQ +EPCjjvbdatbHXjtI +EPCjjvbdvwMAuaVu +EPDLKvbdnQZxvLZC +EObjjvbdtlYXAsaX +DnbkKvbduDDVWvPP +EPDLKvbdqTtGrSKt +EObjjvbdxnSgwsJD +EObjjvbdbKkenmcA +EPCkKvbdFaOqYizm +EOcKjvbdLGGHbBRV +DoDLKvbdRzJhTCvA +EPCjjvbdiMFDmtcZ +DnbjjvbdWWhwvEEg +EPCjjvbdJmAEZgVB +DoCjjvbdmuVZjirG +DoCjjvbdliEURUqa +DoDLKvbdnCKWwnnV +EPDLKvbdhgJbyViu +DnbkKvbdjggMFfNk +EObkKvbdEuxopMie +EPDKjvbdssRsYydc +DncLKvbdliDsqVRa +EOcLKvbdLBKflbYR +DncKjvbdzoPpeClY +DncKjvbdqFdEsvBI +DoCjjvbdZMRctOMN +DncKjvbdDnbkLWcE +EObkKvbdMfcQNPuL +DoDKjvbdUWMPjTaR +DnbjjvbdxmsHwsIc +EObkKvbdrDdhonWB +EPCkKvbdhgJcYvJu +DoCkKvbdlYsSSyHU +EPCjjvbdNdcsiJLE +DoDKjvbdhlEcmuCy +EObjjvbdJTZAsNXl +EPCjjvbdznpQeClY +DncLKvbdDxYMTssl +DoCjjvbdkVwNcbXw +EOcLKvbdMgDPlpUk +EObkKvbdXsMAlsnx +DnbkKvbdiBncEvqR +EPCjjvbdeFPSCWcK +DoDKjvbdmuUzKjSG +EPDKjvbdqrUkNjaN +DoDKjvbdhyuFlQnG +EOcKjvbdDigivYKA +DoDLKvbdJYUCHkqQ +DncKjvbdACqwiyiQ +EPDKjvbdEYXkstUM +DoDLKvbdKDKCpicY +DncLKvbdCDoaVjNG +EObkKvbdxZhFexFS +EPCkKvbdKDJcQjCx +DoDLKvbdEPCkKwCd +EPCkKvbdTfzmkwVe +DnbjjvbduWOYJqTA +DoCjjvbdcJMijfXY +EPCkKvbdmaiwYPOV +EOcKjvbddjJrVtzn +EObkKvbdpstHSRjt +EOcKjvbdyXiKCQZk +DnbkKvbdIsYaSmYM +DnbjjvbdwtmFQxlO +DnbkKvbdYpleJMdq +DoCjjvbdkNBkzFGo +EOcKjvbdbsCkUEKB +DoDKjvbdYlRctOMN +DnbkKvbdjuwOECXw +EPDKjvbdWRnXaeMD +DncLKvbdkDLkQgVH +DoDLKvbdFeiqnJTq +EOcKjvbdzHYlAMeX +EPCjjvbdJbjCpjDY +EPDLKvbdzitopDsU +DnbkKvbdziuPpDrt +DncLKvbdySnImSCH +DnbjjvbdySnImRbH +DoCjjvbdKjaIWAJy +DnbjjvbdTqRPUthN +DoCjjvbdURQntuIN +EObjjvbdQlxCYmtz +EPDKjvbdMtsSLNAX +EObjjvbdJbjDQicY +DoDKjvbdEPCkKwDE +EObkKvbdKQydoGNe +DoDLKvbdVwJXuceH +EObjjvbdnUtykJrG +DncLKvbdwMvANEEm +EPDKjvbdpyPHgQdY +DnbjjvbdUVkpKUBR +EOcLKvbdhfjCyVjV +EPDKjvbddoFTKstS +EPCkKvbdANHyTXZx +EPCkKvbdUxhTyjoO +EObjjvbdkVwNdBxX +EPDKjvbdDoCjjvbd +DnbkKvbdWWhwudEg +DnbkKvbdyTNiMrCH +DoDLKvbdelewGljL +DncLKvbdUGznMWue +DncKjvbdwygfFwdr +EPCkKvbdJqZePFnF +DnbjjvbdNsTugEuQ +DoDKjvbdQcbaPqDr +DncLKvbdfMevgNJk +DncLKvbdlrZVZrdJ +DoCjjvbdFjeTCglu +DnbjjvbdYqNFImEq +DoCjjvbdsCGMkfkZ +DncLKvbdhuZdwSUb +DoCkKvbdrXPkbiZR +DoCjjvbdZRMdiMdq +DoDKjvbdemFvgMjL +DoCjjvbdygZMANEw +EOcKjvbdZRMeIldq +EObkKvbdiHJcZWKV +DncKjvbdCJKbKiFj +EObjjvbdzROlhjXA +DnbjjvbdDoDLKvbd +EPDLKvbdVYgtZjnn +EObkKvbdDoCjjwDE +DnbkKvbdrouoJbuf +DoCkKvbdyTOImRag +EPDKjvbdBcpBVilf +DoCjjvbdCWzdJFQW +EPCkKvbdbrbjscjB +EOcLKvbdwkWdHzzG +EPDKjvbdnGeXlnGy +EPCkKvbdznpREcLx +EPCkKvbdZMRcsnLm +EOcKjvbdJSyArmXl +DnbkKvbdZMSDtNkm +EPDKjvbdAMgySvzY +DoDLKvbdyYJJbPzL +DoCkKvbdLAjgMaxR +DoDLKvbdWIXuxGxz +DoCjjvbdqwQLbiYq +DnbkKvbdpyPIHQcx +EOcKjvbdfNGXHNJk +DncKjvbdqYnhHQdY +DncKjvbdeEnrBvcK +EPDKjvbdZjTHpGaf +DoDLKvbduoTzqLPU +DnbkKvbdIjEAJofd +DnbkKvbdxnSgxTJD +DoDLKvbdXsLaMsnx +DnbjjvbdaRfDHsek +DoCkKvbduLwwAtBX +DnbkKvbdrpWPJcVf +DoDKjvbdrbFlkgLZ +DoCkKvbdlqxtyrdJ +EObkKvbdRyihSbvA +EObkKvbdWRnYCFLc +DoCkKvbdOEcshhjd +DnbkKvbdZjTHpHBf +DnbjjvbdcyyPwxpb +DncLKvbdkVvmdCXw +DncLKvbdcScKtEJa +DnbjjvbdrSVLOLBN +EObkKvbdiGjDYvKV +EPCkKvbdEJgjVwjA +DnbkKvbdRosgKFdX +EPDLKvbdcScKtDia +DoCjjvbdtbcVXVno +DncKjvbdhgJbyViu +EPCjjvbdjJehKNYS +EObkKvbdyOTIYTJD +DnbkKvbdRaceMJYk +DoCkKvbdqiAKEmOe +DoDLKvbdEKHiuwjA +EObkKvbdxUldpxkn +EObkKvbdFejRmhtR +DncLKvbdSBcdlIyL +EPCkKvbdxZhFexFS +EObjjvbdwjwEHzzG +EPCjjvbdmRxtzSdJ +EPDLKvbdEvYooljF +DoCkKvbdmgFXlmfy +DoCjjvbdtkxXBTaX +EObkKvbdmgExMnHZ +DncLKvbdjvXODaww +DoCkKvbdSCEFMIyL +EPDKjvbdVYhTykOn +DoDLKvbdNsUVgFUp +DncKjvbdRXOEClID +DoDKjvbdnVVZkKSG +DoDKjvbdWWhxVcdg +EPCkKvbdwuNFQxlO +DncLKvbdKeegbBRV +DncLKvbdUWLpJsaR +EOcLKvbdNxOuzcmt +EObjjvbddwzUUSFz +DoCjjvbdJXtBhMQp +DoCkKvbdLGFgbBRV +EOcLKvbdcJMjKewY +DnbjjvbdxUmEqYkn +DnbkKvbdjbkjqGtg +EPCkKvbdIHGzYwwg +DnbjjvbdrpWOjCvG +DoDKjvbdZMRctNkm +DnbkKvbddZyPwxqC +DoCjjvbdtcDVWuno +DoCkKvbdJcKDRJcY +EOcLKvbdmbKWwnnV +EPDKjvbdcasNSAUN +EPCkKvbdUaBpsQqy +EObkKvbdJutedFHJ +DoDLKvbdBhjakJFj +DnbkKvbdnUuZjiqf +EPDKjvbdpxoHgQcx +DnbjjvbdZjTHofbG +EObkKvbdkxsSSxgU +DnbjjvbdWRmwbElD +DoCkKvbdRkZFuGjs +EPCkKvbdwNWANDdm +EObjjvbdTkvPBVni +DoDKjvbddndrkTtS +DncLKvbdZtJIxdSn +EOcLKvbduaDyTOeI +EOcKjvbdxZgfGXdr +EOcLKvbdkySrTZGt +EPDKjvbdVwJXucdg +EPDLKvbdatagYLUI +DoCjjvbddZxpYZQb +EPDKjvbdtunXjRTA +DoDLKvbdWSOYBeMD +DoCjjvbdHlBznXRL +EPDLKvbdcyxpXxpb +DnbjjvbdAMhYsWzY +EObjjvbdraemLgKy +EPDKjvbdJpzFOenF +DoCjjvbdZnnIeEyj +DoCjjvbdrWpLbiZR +EOcKjvbdLqwMytpz +DncKjvbdKQzEoFme +EPDKjvbdZRMeJMeR +DncKjvbdEuxpPlie +EOcLKvbdFWYpPlie +EOcLKvbdjblKpgUg +EOcLKvbdiBnbdwQq +DoDLKvbdOTTufeVQ +EPDKjvbdpyOggQdY +DnbkKvbdGBOqYizm +EObjjvbdRjxfUfkT +EPCjjvbdUMVoAuoJ +DoDLKvbdVwJXvEEg +EObkKvbdnCKXXoOV +DoDKjvbdNPxRVmgT +DncLKvbdZsiIxdSn +EPDKjvbdjlalZeHP +DoDLKvbdeFPSBvbj +DoDKjvbdVqnXbFMD +DncKjvbdHffyyYYH +EOcLKvbdBhjbLJFj +EPDKjvbdJvVGEFHJ +EOcKjvbdgQBzvdYI +EPDLKvbdpyOggRDx +EObjjvbdKQyeOfNe +EPCjjvbdtcCtwVno +EPCjjvbdQvmdClHc +DnbkKvbdyXiKBoyk +DncKjvbdqTsgSSLU +EObjjvbdyNrgxShc +DnbjjvbdRkZFuGjs +EObjjvbdYfvdAOri +DoDKjvbdkMbMZeGo +EPDLKvbdCIjbLIej +DoDKjvbdHffyxwwg +EPCkKvbdGdLVibJj +DoCkKvbdaaVdepQX +DnbkKvbdSQUGifDw +EPCkKvbdqYngfpdY +DnbkKvbdxUleQyLn +DoCjjvbdqlyixkgi +EPCkKvbdjgfkfGNk +EObjjvbdeFOqavbj +DoDLKvbdYkrDtNlN +DoCkKvbdjhGlFenL +EPCjjvbdijFhJmXr +EObjjvbdnGeYMmfy +EOcLKvbdbhmJjfXY +EOcLKvbdLBKfmCYR +DncLKvbdJSxaSmXl +EPCjjvbdsQVnicWG +DoDKjvbdjhHLfFnL +EObkKvbdjuwOEBww +DoCjjvbdiBncEvpq +EOcLKvbduLxWaUAw +DncLKvbdhuZdwRtb +EOcKjvbdjvWnECXw +EObkKvbdZeYGzghb +DoDLKvbdNQYQumgT +DoDKjvbdJpydoFnF +EPCkKvbdRjyFuGkT +DnbjjvbdraelkgKy +EObjjvbdfNGXHMjL +DoDLKvbduWNwiqTA +DncKjvbdnVUzLJrG +DoDLKvbdehKvSOQg +EPDLKvbdwtmFRYkn +DoDKjvbdKfFgaaQu +DncKjvbdCTBDTfXS +EObjjvbdDoCjjwCd +EPCjjvbdYTMAmUOx +EOcKjvbdiMFDnVCy +EObkKvbdjlalZeHP +DnbjjvbdCJLCLIfK +DoDLKvbdZMRdUNkm +DnbjjvbdURRPVUgm +EObjjvbdJcJbpibx +EObkKvbdrWpMDJZR +EObjjvbdjuwNdBxX +EPCjjvbdbBVdfQQX +EPCjjvbdKRZeOfOF +DoCkKvbdKDKCqKCx +DoCjjvbdkVvmdBxX +EPDKjvbdvAdYroEh +EOcLKvbdtcCuXWPP +EPCjjvbdczZQXxpb +DncKjvbdUxhUZkPO +EObjjvbdlrYtysEJ +DncLKvbdcScLUDia +EPDKjvbdBsAbsevr +DoDLKvbdqTtGqrLU +DoDKjvbdSCEFLiYk +EPCjjvbdRWmccLgc +DncLKvbdNQYQunGs +EObkKvbdmbKXYPNu +EPCjjvbdfMewGmKL +EObjjvbdzROmIiwA +DnbkKvbdliETptqa +EPDKjvbdHlBznWpk +DoCkKvbdUaBpsQqy +DoCkKvbdWSOYCFMD +DoDLKvbdxmrhYTIc +DncLKvbdLAkGlbYR +DncKjvbdlhctRUqa +DoCjjvbduDCtwVno +DnbkKvbdIjEAKQHE +DnbjjvbdiLddNuCy +EPDKjvbdEXwktUTl +EPCjjvbdyNrgwsJD +EObkKvbdnPzYujxb +EPDKjvbdznoqEcMY +EPDKjvbdZRNEhleR +DoCjjvbdGQATXHFy +EPCjjvbdyqPNIiwA +EOcKjvbdkxrrTYgU +EOcKjvbdcImKLFvx +DoCkKvbduoTzpkPU +EPCjjvbdJXtCIMQp +EOcKjvbdrpVoJbvG +DncLKvbdqZPIHRDx +DnbjjvbdTAFJHand +EOcKjvbdtcCuWuno +DncLKvbdfIKurNqH +DncKjvbdLrWmZtpz +DoDLKvbdMtsRjmAX +EObjjvbdLGGHbBRV +EObkKvbdCWzchePv +EOcKjvbdZxcjODMS +EObkKvbdzaAPGgBl +DoDLKvbdKVtecdgJ +DnbjjvbdHDjvJbJj +EPCjjvbdLiCLqYAS +EPDLKvbdFVxpPmKF +DoDLKvbdZisIPgBf +DncLKvbdTppoUtgm +DnbjjvbdpyPIGpdY +DoDLKvbdEztRElCi +DncLKvbdHgGzZYYH +DnbjjvbdZLqctOMN +DnbkKvbdqTtGqqkU +DnbjjvbdiMEcnVCy +EPDKjvbdvBDxrneI +DoDKjvbdemGXHNJk +DoDKjvbdhficYvKV +EObjjvbdegkWSOQg +DoDLKvbdOFDtIiKd +EPCjjvbdBdQAuimG +DoCjjvbdpyPHgREY +DncKjvbdJXsbHkpp +DoDKjvbdRbEElIxk +DoDKjvbdsQWPJcWG +EObkKvbdsCGNLfkZ +EOcLKvbdzaAPGgCM +EObkKvbdzjUoodSt +DnbkKvbdemFvgMjL +DnbkKvbdWWhxVcdg +DncLKvbdxrmiMqag +EPCkKvbdMSWlytpz +EObjjvbdwNWAMdFN +EPDLKvbdlrYtzTEJ +DnbjjvbdVqnYBeLc +DncKjvbdnHEwmOGy +DnbjjvbdtbbuWvPP +DncKjvbdmIcspuSB +EObkKvbdEOcKkXCd +EOcKjvbdDncKkXCd +EPDLKvbduaDxrndh +DoCjjvbdOFDshhkE +DnbkKvbdRaceLhyL +EPCkKvbdZshhyDrn +DoCjjvbdCSaDTfWr +EOcKjvbdqUTfrSLU +EPDLKvbdtTRryZdc +DoDLKvbdkyTRsZGt +EPDKjvbdyqPNIjXA +DoCkKvbdNUrrKmAX +DoCjjvbdSCDeMIxk +EObkKvbdkMbLzEgP +DncKjvbdEvZPpMie +DoCkKvbdyYIibQZk +EObkKvbdNPxQumfs +EOcLKvbdDncKjvbd +EPCkKvbdozmcjxPA +EPDKjvbdCIkCLIfK +DncKjvbdcyxoxZRC +DoCkKvbdeOdrkUUS +DoCjjvbdhzVFlQnG +EObjjvbdOFETiJLE +DncKjvbdhyuGLqNf +EObkKvbdRWmdClID +DoCjjvbdFpATWgFy +DnbkKvbdlqxtysDi +EObjjvbdqmZjYkhJ +DoDKjvbdZyDjODMS +DoCjjvbdEJhJvYKA +EOcKjvbdqTsgRrLU +EOcKjvbdZsiIxcrn +EObkKvbdIHGzZYYH +EPDKjvbdHgGyxxXg +EObkKvbdxmrgwriD +EPCkKvbdxrnJNSBg +DnbkKvbdjhGkefOL +EPCjjvbdKQydoGNe +EOcKjvbdqvpMDJZR +EObjjvbdQdDBQQdS +DoDKjvbdSKxfVHKs +DoDKjvbdbLLeoODA +DoDLKvbdBsAcUGWr +DoCjjvbdRzKHrbvA +EObjjvbdfMfXGljL +EObkKvbddeOrCWbj +DoDKjvbddjJrVtzn +DoDLKvbdhtydvqtb +DnbjjvbdRNXayOUz +EPDLKvbdRjyFtgKs +EObkKvbdsPuoKCvG +EPCkKvbdYqNEiNFR +DncKjvbdUxgsyjnn +EPCjjvbdZRMdhldq +DoDLKvbdEJhKWXjA +DoCkKvbdQwODblID +EPCkKvbdssRrxzFD +DnbjjvbdZxdKOCkr +EObjjvbduCcUwVno +EOcKjvbdmuUzLKRf +EPCjjvbdfpBzvcwh +DnbjjvbdMowpvNfs +EPDKjvbdGLErcHmV +EPDLKvbdZoOIeEyj +DncLKvbdSLZGUgKs +DncLKvbdlqyUzTEJ +EPCjjvbddePRawDK +DncKjvbdHEKvKCJj +DoDKjvbdeEnqavcK +DoDLKvbdtSrTYzFD +EPDLKvbdxUmFQxlO +DnbjjvbdLLBIWAJy +EOcLKvbdMowqWNfs +EPDKjvbdptUGrSKt +DoDLKvbdHEKvKCKK +EPCjjvbdJcJbpjDY +DnbjjvbdMuTRkNAX +DnbkKvbdEzspdlDJ +DncLKvbdVUMsekvK +EPDKjvbdOTUVgEtp +DncKjvbdAMgySwZx +DoCkKvbdwtmFRYkn +EObjjvbdIjEAKPgE +EPDKjvbdRpTfjGEX +DncKjvbdFjeSbglu +EObkKvbdjFLGtoAO +DoCkKvbduWOYJqTA +EPCkKvbdVAapsQrZ +DnbjjvbdVwJXudEg +DoDLKvbdUtMsfLvK +EPCjjvbdHELVjBij +DncKjvbdRWnECkhD +EPDLKvbdZsiJZDsO +DncLKvbdnPzZWLYb +EPCjjvbdznoqEcMY +EOcKjvbdzoQQeDMY +DnbjjvbdznpQdbkx +EPDKjvbdeYZtTrFz +DoCkKvbdkySrTZHU +DncKjvbdCSaDUGXS +DoCkKvbdcJNJjfXY +EOcLKvbdCEQAvJlf +EPDKjvbdyzdmqhJI +DncLKvbdNPwpvNgT +DoDKjvbdqmZixkgi +EOcKjvbdVYhUZkPO +EObkKvbdhgJbxvJu +DoDKjvbdUQqPUuHm +DncLKvbdqvolChyR +EPCkKvbdEXxMTssl +DnbkKvbdHgGzYwxH +DoDLKvbdIidAJpGd +DnbkKvbdZLqdUOMN +DnbkKvbdGckViaij +DoCkKvbdFVxopNJe +EOcLKvbdRbEFMIyL +EObkKvbdLAjflawq +EObjjvbdziuPodTU +EPDLKvbdQwNdCkhD +EPCjjvbdZxdJmcLr +EPDLKvbdxrmhlqag +DoCkKvbdSPsgJfDw +EPCjjvbdkDLjpgUg +DnbjjvbdtbcUwWOo +DnbkKvbdWIXuxHYz +EObjjvbdEvYpQMie +DoDLKvbdIHGzZXxH +EPDLKvbdVYgszKoO +DncKjvbdhancEvpq +EPCjjvbdcJNKKewY +EPDKjvbdWWhwvEEg +EOcLKvbdvAdYsOdh +EObkKvbdcyyPwxqC +EObjjvbdSPtGifDw +EOcLKvbdkMalZeHP +EPDKjvbdYlRctNlN +DoDLKvbdKWVGEFGi +DncLKvbdMgColouL +DncLKvbdhbPCeXRR +DncLKvbdDwxMTstM +DoDKjvbdvAcySndh +EObkKvbdXGYytAPT +DoCjjvbdmuVZjjRf +EOcLKvbdDGlFgAzc +DoDKjvbdiBncFXRR +DoDKjvbdkaMnmALA +DncKjvbdVBCQrqSZ +DoCkKvbdVviYWEFH +EObkKvbdAMhZSwZx +DoDLKvbdeAUQlwjG +DoDLKvbdZxcjODMS +EOcLKvbdrpWPKDVf +EPCkKvbdWRnYCFLc +DnbkKvbdKeehBaRV +DoDKjvbdMSXMzUpz +EOcKjvbdRkZGVGjs +DoDLKvbdFkFScIMu +DoCjjvbdZjTHogBf +DnbkKvbdnBivwnmu +EOcKjvbdCTAcTevr +EOcKjvbdVviXvDeH +DoDLKvbdliDsptqa +EPDLKvbdZirgpGaf +EPCjjvbdaRfChUFk +EPCjjvbdkClKqGtg +DoCjjvbdKQyeOfOF +EPCkKvbdqvpLbiYq +DnbjjvbdCTBDTfXS +DoCjjvbdOEctIhkE +EObjjvbdbVCHXkUI +DncKjvbdxnTIXrhc +DnbjjvbdezvYdhsw +EPCjjvbdDwwkstUM +EPCkKvbdaaVdepQX +DoDLKvbdjlbMZeHP +DoDLKvbdqAiFAXHd +EPDLKvbdGLEsCglu +EPCjjvbdZyDinClS +EPCkKvbdSLYeuGkT +EPDKjvbdwyhGFweS +EOcLKvbdjJfIKNYS +DoCjjvbddeOrCXCj +DoDKjvbdkxrqsZHU +EOcKjvbdGYuVBEYC +DncKjvbdHkazmvqL +DnbkKvbdZsiIxdSn +EObkKvbdhanbeXQq +EOcLKvbdMpXqWNfs +DnbkKvbdEztQdkcJ +EPCjjvbdDjHjWXjA +EOcKjvbdNQYQvNgT +EPCkKvbdNHCpNPtk +DoCjjvbdbsCkUDjB +EObkKvbdOStWGeUp +EOcKjvbdVqnYBdlD +DoCkKvbdvlvANDeN +DoDKjvbdnQZyWKyC +EOcLKvbdkyTRsYft +EOcKjvbdnVUyjiqf +EPCjjvbdXnRAXtut +EPDKjvbddZxpXxpb +EPDLKvbdfHjvSOQg +DncKjvbdXsMBNTnx +DncKjvbdEARiMzXX +EPCjjvbdOStVgEuQ +DnbjjvbdHELWKCKK +EOcLKvbdehLWSOQg +DncLKvbdYkqctOLm +DoDLKvbdxsOJMqbH +DoCjjvbdzGyMANFX +DoCjjvbdSCEElJZL +DoDKjvbdRkYeuHLT +EOcKjvbdXsLaMsnx +DnbjjvbdePFSkUUS +DncKjvbdGZUuAdXb +EOcLKvbdlZSqsZGt +DncKjvbdiCPCdwRR +EObjjvbdjvXOEBxX +EPDLKvbdRXOEDMHc +EPCkKvbdZisIQHCG +EPDKjvbdjKGIKNYS +DncLKvbdWWiYVdEg +DnbjjvbdaMkBruNH +EOcLKvbdOFEThiKd +DoCkKvbdVZHszLPO +DoDKjvbdiHJcYvJu +EPCkKvbdwuNFRZLn +EObkKvbdJqZdoGNe +EOcKjvbddndsLUUS +EOcLKvbdBraCtGWr +DncLKvbdxrnJNRbH +DoDLKvbdCWzciFPv +EPCkKvbdtlXvaUAw +DoCjjvbdMfbomQUk +DoCjjvbdfoazwDxI +DoCkKvbdauCHXkUI +DnbjjvbdaogHELzd +EPCjjvbdTulPisaR +EPCkKvbdOSsvHEtp +DoDLKvbdTkuoBVni +EPDKjvbdVBBqTRSZ +DnbjjvbdEJgivYKA +DncKjvbdJXtBgkqQ +DnbkKvbdbsCjsdJa +EPCjjvbdhlEcnUby +EObjjvbdssSSyZdc +EObkKvbdhgKCyWJu +EObkKvbddeOqbWcK +DoCkKvbdqvpLcJYq +EPDKjvbdxZgefXeS +EOcLKvbdkVwOEBww +EPDKjvbdemFvfljL +EPCjjvbdFkErcIMu +EOcKjvbdZyEKNcMS +EPDKjvbdqlzJxlHi +EPCjjvbdmbJwXnmu +EOcLKvbdcTDLTcia +DoCkKvbdyzdmqhJI +DnbjjvbdGdLWKBij +DoDKjvbduaDxsPEh +DoDKjvbdZshhxdTO +DncKjvbdptUGqrKt +EPCjjvbdJvVFceGi +EOcKjvbdddoRawDK +DoCkKvbdfMfXHMik +EObjjvbdVAbRSpqy +EObkKvbddZyPxYpb +DnbkKvbdVYgszKnn +DoCkKvbdZMRdUNkm +EObjjvbdTvMPitBR +EObkKvbdIxTaglQp +EObkKvbdGGKSNiUR +DoCkKvbdGBOpyJzm +EPCjjvbdqrUjmjaN +DncKjvbdIMBzmvpk +EPCjjvbdcyxoxYpb +EOcKjvbdmIcsqUrB +DoCkKvbdqvolChyR +EPCjjvbdkHgMGGOL +EPDLKvbdpaIeAWgd +DncLKvbdqvokcIxq +EOcKjvbdZsiJYcrn +EObkKvbdyYJKBpZk +DoCkKvbdKDKDQicY +EObkKvbdlhdTptqa +EObkKvbdyXhjBpZk +EObkKvbdKNAEZfta +EOcLKvbdRyihTCvA +DncLKvbdtcCtwVno +DnbjjvbdVZITykOn +DoCjjvbdJSyArlwl +EPDKjvbdDxYLtUUM +EPDKjvbdvlvANEFN +DoDKjvbdrykpTAgn +DnbjjvbdeYZtUSFz +DoDKjvbdzjVQQETU +EObjjvbdiHJbyVjV +DoCjjvbdcScLTcjB +DncLKvbdhaoDEwQq +DnbkKvbdQlwbZNtz +EPCjjvbdEARiMzXX +EPCjjvbdGFjSOIsq +DoDKjvbdrXPlChxq +DoDLKvbdYqMeImEq +DoDKjvbdOFETiJKd +EPCjjvbdCTBDUFvr +DoCkKvbdZoOIdeZj +DncLKvbdHgHZyYXg +EOcLKvbdCSaCsevr +DoCjjvbdsQWOjCuf +DoDKjvbdKWUfDeGi +EOcKjvbdzitpPcrt +EPDKjvbdZyDimcMS +EPCjjvbdBcpAuilf +EOcKjvbdqwQMCiYq +EOcLKvbdsrrTZZdc +EObjjvbdSQUHKGEX +DoDLKvbdcyxoxZRC +EObkKvbdWXJYWEFH +DnbkKvbdhgKDYuiu +DoDKjvbdrSVLOKaN +EPCjjvbdMoxQumgT +EPDKjvbdcbTMrATm +EPDKjvbdznopdcMY +DnbjjvbdzdzOzdyp +EObjjvbdGYuVBEXb +EPDKjvbdiZtekpnG +DoDLKvbdvvlAuaVu +DoDKjvbdEYXkstTl +EPCjjvbdauCHYKsh +DoCjjvbdDjIJuwjA +EObjjvbdkNCLzFGo +EPDLKvbdiGicZWKV +EPCkKvbdtlXvaTaX +DoCkKvbdpyOggQcx +EObjjvbdtTSSyZdc +DoDLKvbdiZtelROG +EOcLKvbdWRnYCFMD +EPDLKvbdNddUIhjd +DncLKvbdEObjjvbd +EPDLKvbdVUNTelVj +EPCjjvbdVhXvYGxz +DoCkKvbdfRaWzkbo +DoCjjvbdRjyGVHKs +DoCjjvbdSKxfUfkT +EOcKjvbdaRecITek +DoCkKvbdEJhKVwjA +DoDLKvbdwXLaWBVu +EPDLKvbdLYqJrztf +DncKjvbdUMVoAuoJ +DnbjjvbdvmWAMcdm +EObjjvbdpssfqrKt +DnbjjvbdhlEcnVDZ +EOcKjvbdNsUWGeVQ +EObjjvbdVUNTekuj +DnbkKvbdVYgsykOn +EObkKvbdpssgSRjt +DncKjvbdVZITzLOn +DoDKjvbdGGJrNiTq +DoDLKvbdACqwizJQ +DoDKjvbdIryArmXl +DoCkKvbdZMRdTmlN +DnbkKvbdrovPKDVf +EObkKvbdrounjDWG +DnbjjvbdCSaDTevr +DnbjjvbdUyITyjnn +DnbkKvbdKRZeOfOF +DoCkKvbdDigiuxKA +EOcKjvbdxsNhlrCH +EOcLKvbdDjHiuxKA +DncKjvbdXmqAXtvU +DnbjjvbdqFdFTvAh +EObkKvbdxrmhmSBg +DoCjjvbdIidAKPfd +EOcKjvbdKQydoGOF +DnbjjvbdlqyUzSdJ +EPDKjvbdtvOYKQsA +EPCkKvbdcIljLFvx +DoCjjvbdYqNEhldq +EPDKjvbdczYpYZRC +DoDLKvbdiBoCeXQq +EOcLKvbdiCPDFXRR +EPDLKvbdZisHofaf +EPDKjvbdmIdURVSB +EPDKjvbdZRNFIldq +DoDKjvbdJpydoFme +DoDLKvbdWWhwudEg +DncLKvbdDnbjjwDE +DncKjvbdqTsfqqkU +DncKjvbdKDKDRKDY +DoDKjvbdTulQJsaR +DoCjjvbdSBdFMIyL +DncLKvbdqTtHSSKt +EOcKjvbdBcoaVjMf +EObjjvbdiiehKNXr +EObjjvbdCWzciFQW +EPDLKvbdWSNwadlD +EPDKjvbdKVuGEFHJ +DoCkKvbdZMRdUNlN +EPDKjvbdZRMdiMdq +EPCkKvbdxUmEpyMO +DoDLKvbdRkYfVHKs +EObjjvbdIwtCIMQp +EPDKjvbdmJDsqUqa +EPDKjvbdrDeJPmvB +EOcKjvbdTvMPisaR +DncKjvbdMtsRjmAX +DnbjjvbdlqyUysDi +EPDKjvbdQwNdClID +DncLKvbdRjxfVGjs +EObkKvbdauBfxKtI +DoDLKvbdiZtfLpnG +DoDKjvbdhancFXRR +DoDKjvbdREDBQQdS +EObjjvbdrzMQTBIO +EOcKjvbdcImKKfXY +DoDLKvbdijGIKNXr +DncLKvbdgGMZmfgA +EPCjjvbdZnmheFZj +EPDKjvbdmuVZjiqf +EObjjvbdeFPRawDK +EPDLKvbdrNZiyLhJ +EOcKjvbdlhdURUrB +EPDLKvbdGGJrNhtR +EOcKjvbdiGibyWKV +EOcKjvbdQlwbZNtz +DncLKvbdnVUzKiqf +EOcKjvbdbsDKscjB +EPDLKvbdDnbjjvcE +DoCkKvbdySmhmRag +DncKjvbdkyTSTYft +DoDLKvbdEYXkstUM +EOcKjvbdiHJbyVjV +EOcKjvbdsQVnicWG +DoCkKvbdoznDkYPA +EObkKvbdURQoVVHm +EPDLKvbdFfKSNiTq +DnbjjvbdVgxVwgYz +DnbkKvbdmfeYNOHZ +DoDKjvbdyqPNIiwA +EObjjvbdFVyQPlie +EOcLKvbdGdKvKBij +EPCjjvbdDwxMUTtM +DoCkKvbdKVtfEEfi +DoCkKvbddjKRvUzn +EObkKvbdliEURVSB +EPDLKvbdWSNwaeMD +EOcLKvbdJqZdoFnF +DnbjjvbdKxqJrzuG +DnbjjvbdmuUyjjSG +EPDLKvbdADRxKZhp +EPCkKvbdiCPDEwRR +EObjjvbdTXkMNzkY +DnbjjvbdMgDPlouL +EPCjjvbdyzeNqghh +EOcKjvbdmuUyjjSG +EPDKjvbdDoDLKvcE +EPDLKvbdNxPVzdNt +DoDKjvbdBhjbKhfK +DnbjjvbdZLrETmlN +DoCkKvbdHffyxwwg +EOcKjvbdYSlAmUPY +EPCjjvbdtTSTYzFD +DoCjjvbdFjeTCgmV +EObjjvbdNwnuzcnU +DoDLKvbdSPsfiecw +DoDKjvbdKVtedFGi +EObjjvbdUaCQsRRy +EObkKvbdbsDLUDjB +EObkKvbdEOcKjvcE +EPCjjvbdyNsIYShc +EOcLKvbdbVCGxKsh +DoDKjvbdlZSqsYft +DoCjjvbdUslselWK +DncLKvbdbUbHXkUI +DnbkKvbdYkqcsmkm +DncKjvbdXsMAmUOx +DoDKjvbdJuuFcdgJ +EOcLKvbdGLFTChNV +DoCkKvbdaaWEfQQX +DncKjvbdVqnXbFMD +EOcKjvbdZyEJnClS +DoCkKvbdNdctJIjd +DoDLKvbdmaiwYOmu +EPCkKvbdmbJvxPOV +DncLKvbdTqRPUuIN +EPDLKvbdGGKSNiUR +EPCjjvbdIwtCIMQp +EOcKjvbdHDjvJajK +EOcLKvbdZyEJnDMS +DnbkKvbdrWpMDJZR +EOcLKvbdbUagXjtI +EOcLKvbdLGFgbBRV +EOcKjvbdqvpMDIxq +EPDKjvbdOAJSsjSA +DncKjvbdsrqsYyeD +DnbjjvbdtkwvaUBX +DnbjjvbdGQASwGfZ +EObkKvbdURROtuIN +EObkKvbdiUydwRtb +EOcLKvbdqlyixkhJ +EPCkKvbduaEYroFI +DoCkKvbdnUtyjiqf +DoCkKvbdssSTYzFD +DncLKvbdeATqMwjG +DnbkKvbdqlyjYlHi +DncLKvbdTAEhhCOd +EOcLKvbdpxoIHQdY +EPDKjvbdEXxLsstM +DncLKvbdbLLfPNcA +DoDLKvbdCWzdIeQW +DnbjjvbdWSNwbElD +DoDKjvbdGFjSOJUR +DoCjjvbdmttzKjRf +EPCjjvbdqmZjZMHi +DncLKvbddwzUTqez +EObkKvbdrEFIpOVa +DnbjjvbduMYWaTaX +EPDKjvbdTAEiIBoE +EOcKjvbdVrNwaeMD +DoCjjvbdSwkMNzjx +DoDKjvbdZoNheEyj +EObjjvbdFpASvgGZ +DnbkKvbdvBDxsPEh +DoDKjvbdIHGzYxYH +EOcLKvbdhanbeXQq +EObkKvbdACqxJyhp +DoDLKvbdgQBzwDxI +EObjjvbdOYOuzdNt +DnbjjvbdRWmdDMHc +EPCkKvbdePFTLUUS +DnbkKvbdHlBznWpk +EPCkKvbdqlyixlIJ +DnbjjvbdIHHZyYXg +EObjjvbdBcoaVimG +EOcLKvbdZnnIddzK +DnbjjvbdBiLBjhfK +EPDLKvbdeOeTKtTr +EObkKvbdYlRcsnLm +DoDKjvbdnHExNOGy +DoCkKvbdnCJwXoNu +EOcKjvbdwWlBWBWV +DnbjjvbdGYuVAdXb +EObkKvbdLGGHbBQu +EPCkKvbdEJgjVxKA +EObkKvbdlqyVZrdJ +EObkKvbdaNLBsUmH +EPCkKvbdGQASwHGZ +DncLKvbdnBjWwnnV +DnbjjvbdUslsekuj +DncLKvbdeATqNYJf +EOcLKvbdIwtCHlQp +EOcLKvbdGLErcIMu +DnbkKvbdjvXOECXw +EPCkKvbdfSAvzkbo +DnbjjvbdsCGNMHKy +DoDLKvbdURQnuVHm +EObjjvbdQvmdCkgc +EPCjjvbdSPsgKFcw +EPDLKvbdYpmEhleR +EPCjjvbdFjdsDHlu +EPDLKvbdqdFIpOWB +EObjjvbdnQZyVkZC +EPCjjvbdQdCaQRES +DnbjjvbdADRwiyiQ +DnbjjvbdiiehKNYS +DoCkKvbdHkaznWqL +EObjjvbdmoyxujxb +EOcLKvbdxxIibQZk +EObjjvbdsPuoKCvG +EObjjvbdjcMKpftg +EOcKjvbdZisHofbG +DncLKvbdUGznLwWF +DoDLKvbdFfJqnJUR +DnbjjvbdsBelkgLZ +DoCkKvbdrbGNLfkZ +DncKjvbdeYZssqez +EPCkKvbdyNsHwsIc +DnbkKvbdrafMkfjy +EPCjjvbdZyEJnDMS +DnbjjvbdFpASwGey +DnbkKvbdLGGIBaQu +DncLKvbddiiqutzn +DncKjvbdWIXuwfxz +DoCjjvbdNPxRVnHT +DncKjvbdwygefXeS +EPDLKvbdmJEUQtrB +EPCjjvbdQwOECkhD +DoDLKvbdNGbpMotk +DncLKvbdRyjIScWA +DncLKvbdVrOXaeMD +DncLKvbdQmYBxnUz +DnbjjvbdVBCRSqSZ +EPCkKvbdRosfifEX +EPDLKvbdlYrqrxgU +EPDLKvbdKVuGDeHJ +DncLKvbdDncLLWcE +EOcLKvbdfNGXGmKL +EOcLKvbdQvmdDMHc +EOcLKvbdEARiMyvw +DoCjjvbdnHFXlnGy +EOcKjvbdhtyeXRtb +DncKjvbdMgDQNQVL +EObjjvbdpedFUWBI +EPDKjvbdkHfkfFnL +DoDKjvbdrXQMChyR +EObkKvbdREDAoqES +DoDKjvbdBdQAvKMf +DoCkKvbdjvWnDaxX +DnbkKvbdePEsKstS +EPDKjvbdyOTHwsJD +DnbkKvbdrSVKnKaN +EPCkKvbdZirgpHBf +DoCkKvbdsQVnjDVf +DnbjjvbdGLEsCgmV +EPDLKvbdelewHMjL +EObjjvbdjlbMZeGo +DoDLKvbdxrmhlrCH +DoCkKvbdczZQXyQb +EObjjvbdRDcBQRDr +DoCjjvbdxLXEHzyf +DoCkKvbdkySrTZGt +DoCjjvbdDoDKjwCd +EObkKvbdKWVGEEfi +DoDKjvbdTqQoUuIN +EObjjvbdZRNEiMeR +DoDKjvbdxUmEpyMO +EPDLKvbdxxJJaozL +EObkKvbdraemLfkZ +EPCjjvbdbiNKLFvx +DnbjjvbdZjSgpHCG +EObjjvbdqBIeAXHd +EObjjvbdVUNUGMWK +EPDKjvbdliDsqUqa +EOcLKvbdxZgfGYFS +DnbjjvbdYpmFJMdq +EPCkKvbdcTCjtEKB +DncLKvbdVUMtFlVj +EPDKjvbdcIlijevx +DoCjjvbdpstHSSKt +EOcKjvbdLAjgMaxR +DoDKjvbdHkaznXQk +EPDLKvbdrovPJcVf +EObjjvbdjblLRHVH +EPCkKvbdfSAvzlCo +EPDLKvbdkHfkefOL +DoCjjvbdbiNKKfXY +EPDLKvbdjJfHilwr +EOcKjvbdxVMeQxkn +DncKjvbdqlzJyMIJ +DoDLKvbdffMZnGgA +EPDLKvbdrpWPJcVf +DnbkKvbdNsTvGeVQ +DncKjvbdZshiZETO +DoCjjvbdWRnXaeLc +EPDLKvbdUaCRTQqy +EOcKjvbdKDKDQjCx +EPCkKvbdLKaIWAJy +DoDKjvbdjblKpftg +EPDKjvbdfHkWSNqH +EObjjvbdSCEEkiZL +EPDKjvbdcyxpYZQb +EPDLKvbdVUMtFkuj +DnbjjvbdVBCQrprZ +EObjjvbddoEsLUUS +DnbkKvbdiHKDZVjV +EOcKjvbdpyPHgRDx +EObjjvbdYpleJNFR +DncLKvbdrDdhpOWB +DncLKvbdcbSmSAUN +DncLKvbdQwODcLgc +EPCjjvbdKVuFcdgJ +EPDLKvbdJvUecdfi +EObkKvbddjJqvUzn +EPCkKvbdLrXNZuQz +DnbkKvbdDihJuxKA +DoCjjvbdegkWSORH +DncKjvbdFyVUaEYC +DoDLKvbdNHDPlpVL +DoDLKvbddneTKtUS +DoCjjvbdEARhlywX +DncKjvbdmbJwYPOV +DnbjjvbddeOrBvbj +EPDKjvbdAMhZTXZx +DnbjjvbdULuoBVoJ +DoCkKvbdMfbomQVL +EObjjvbdyTNhlqbH +EPDLKvbdcyxowxpb +DoCkKvbdEPDLLXCd +DncLKvbdSCEFLiZL +DnbjjvbdBiLCKiFj +EPCjjvbdmgExNNgZ +EOcLKvbdsPvPKDVf +DoCkKvbdbKkfOmcA +DncLKvbdIxTaglRQ +DnbkKvbdFVyQQNJe +EPDLKvbdbsCjtEKB +EPDKjvbdakMFnnDA +EObjjvbdWWiYVcdg +DnbkKvbdfSAvzkcP +EOcLKvbdbKkennDA +EPCjjvbdTppoVUhN +EPDLKvbdemGWgMjL +DnbjjvbdJvUedFHJ +DoDLKvbdqvokbiZR +EPCjjvbdZMRctOMN +DoCjjvbdNPwpunGs +DoCkKvbdZtJIyDrn +EPCjjvbdFejRnIsq +EPDLKvbdZshhxdTO +DncLKvbdxZhGGXeS +DoDLKvbdKyRKSztf +EPDKjvbdCflFgAzc +EPDKjvbdOEdThiKd +DoDLKvbdTAFIgaoE +EObjjvbdEARiNZvw +EOcLKvbdjhHLefOL +DncKjvbdbVCHXjtI +EPDKjvbdeFPRawCj +DoDLKvbdtcCuWuoP +DoDLKvbdUVkpJtAq +EPCjjvbdaSFcHsfL +EPDKjvbdPxmAGrrK +EPCkKvbdDjHjWXjA +DnbkKvbdpssfqrKt +DoDKjvbdePEsKtTr +EObkKvbdDwxMUTtM +DnbkKvbdZRMdiNEq +EPCjjvbdhuZdvquC +DoCjjvbdGLEsChMu +EPDKjvbdRDbaQQdS +EOcKjvbdEJhJvYKA +DncKjvbdkxsSSxft +EObjjvbdKRZdnfOF +EOcLKvbdZQmFIleR +DnbkKvbdjcLjpfuH +DnbkKvbdYzbfSKWZ +EPDLKvbdbUafxLTh +EPCjjvbdJuuFcdgJ +DoCkKvbdJcKCqJcY +DoCjjvbdSKyGVGkT +DoCjjvbdemFvflik +DoCjjvbdvBEYsPEh +EOcKjvbdCWzdJEov +DncLKvbdqTsgSSKt +DnbkKvbdUMVoBWOi +EPCkKvbdOEcsiIjd +DncLKvbdaSFbhUFk +DoCkKvbdhtzEwRuC +DoCkKvbdiCOcEvqR +DoCkKvbdfILVqnRH +DnbkKvbdCJLCKhej +EPCkKvbdakLeoODA +DnbkKvbdUaCRTQrZ +DoDKjvbdRacdkhyL +EPCjjvbdYNqAXtut +DncKjvbdwzHfFwdr +DncLKvbdNrsvGeUp +EPDKjvbdDoCkKvbd +EPCjjvbdrafNLfkZ +EObjjvbdmajXXoOV +DncLKvbdVAbRTQrZ +EObkKvbdkySrTZHU +DoDKjvbdZeXfzghb +EPDLKvbdiCOcFWpq +EOcKjvbdUQpnuUhN +DncLKvbdijGIKMwr +DncKjvbdHgHZxwwg +DncLKvbdVTmUFlWK +DoDKjvbdeYZtUSFz +EPDKjvbdHffyyYXg +DncKjvbdXsLaMtOx +DncKjvbdzitoocrt +DoDKjvbdhtyeWquC +EPDKjvbdEuyPpNKF +DnbkKvbdtvOYKRTA +DncKjvbdZnnJFEzK +EPCkKvbdqZPIGpcx +DnbkKvbdVgxWYGxz +EPCjjvbdOStWHEuQ +EObkKvbdNddTiIjd +DoDKjvbdwXMBWAuu +EPDLKvbdsPvPKDVf +DncLKvbdQvnDbkhD +DncKjvbdEKHjWYKA +EPCkKvbdCgMFgAzc +EOcLKvbdQvnDbkgc +EPCjjvbdDoCkLWbd +DnbkKvbdKCibpicY +EOcLKvbdhfibyViu +EOcLKvbdzQnliJwA +DncKjvbdEASImZwX +EPDLKvbdFkFTChNV +DnbjjvbdEuxoomKF +EOcKjvbdYqMeJMeR +DnbjjvbdgQBzvdYI +DoCjjvbdkxrrSxft +DnbjjvbdjuwNdCYX +EOcLKvbdfpBzwEXh +DoCkKvbdnHFYMmgZ +EOcKjvbdjlbMZeHP +DoCkKvbdmttzKjSG +EPDLKvbdzjUopDsU +EPDLKvbdsZlPraIO +EOcLKvbdLBLHMbYR +EPDLKvbdtbcVXVno +DoDLKvbdaaVeGQQX +EPCjjvbdWSOYCEkc +EObjjvbdxUmFQyMO +DoDLKvbdRbDdkiZL +DoCjjvbdhlFDnVCy +EPDKjvbdcTDKscia +EPCkKvbdjlbMZeGo +DncLKvbdCIkCKiGK +DoCjjvbdrbFmMGkZ +EObkKvbdQccAoqDr +DnbjjvbdTqRPVUgm +EPCkKvbdNrsufeUp +EOcLKvbdrMyjZLhJ +EPDLKvbdiifHimXr +DnbkKvbdpstHSRjt +EOcKjvbdZtIhxdSn +DnbkKvbdbhmKLGXY +DnbkKvbdkxsSSxft +DoCjjvbdTAFIhBnd +EObkKvbdUtMtGLvK +EPCjjvbdpstGrSLU +DncKjvbdxLXDgzyf +EOcKjvbdSCDdlIxk +EObkKvbdOFEUIiLE +DnbkKvbdjggLefNk +DncKjvbdliEUQtqa +EOcLKvbdFjdsDHlu +DncLKvbdeEnqavcK +EOcLKvbdnPyyVjyC +DoDKjvbdliDsptrB +DoCkKvbdrXQLbiZR +DncLKvbdFkErbhNV +DoDKjvbdTqROtthN +DoCkKvbdYSlAmUOx +DnbkKvbdKVuGDdgJ +EOcKjvbdvwLaWAvV +DoDLKvbdEObjjvbd +DnbkKvbdwXLaWBVu +DnbkKvbdmtuZjiqf +DoDKjvbdegkWRnRH +DoCkKvbdeXzUUSFz +DncLKvbdfNGXGmJk +DoCjjvbdEztQdlCi +EPCkKvbdEuyQPljF +EPCjjvbdrEEiQNvB +DnbkKvbdLqwNZtpz +EObkKvbdKeegbBQu +EObkKvbdvBEZSoFI +DoDLKvbdrXQLbhyR +DnbkKvbdbKlGPODA +DncLKvbdnCKXYOnV +EOcKjvbdjcMKpfuH +DoCkKvbdQdCaQRES +EPCkKvbdDncKjwCd +DoDLKvbdYlSDtNkm +EObkKvbdmbKXXnmu +EPCkKvbdjgfkfGOL +DnbkKvbdZyDjNcMS +EOcLKvbdkNCLyeHP +DncLKvbdVUMtGLuj +EOcKjvbdKVtedFGi +EPCjjvbdKRZeOenF +DoCjjvbdUQqPUthN +EPDKjvbdkMbLydgP +EObjjvbdVqmxBdlD +EPDKjvbdjAQGaPgK +DoCkKvbdTlVnaWPJ +EPCjjvbdwjvdHzzG +EObjjvbdBsBCtGWr +EPCjjvbdwuNEqZMO +DncLKvbdbrcKtEKB +EPCkKvbdFyVVAcxC +EPCkKvbdaSGCgsfL +EPDKjvbdrylQTBIO +DncKjvbdfSBWzlCo +EObjjvbdfRaWzlCo +DnbkKvbdsPvOjDWG +EPCjjvbdcbSlrAUN +EObkKvbdrWpLbhxq +EPCjjvbdhgKDZVjV +EOcKjvbdhlFDnUby +DoCkKvbdddoSBvcK +DoCkKvbdpssfrRkU +DoDLKvbdJutfEFGi +EObkKvbdEPDKkWcE +EOcKjvbdcJNJjevx +EPCjjvbdcTDKscia +DncKjvbdYlRcsmlN +EPDLKvbdkHgMFfNk +DoCkKvbdjbkjqGuH +EPDKjvbdTvMPjUAq +DnbkKvbdQYmAGsRj +EPCkKvbdKeegbApu +EPDKjvbdiLdcmtcZ +DoCkKvbdNeDshhjd +EOcLKvbdxnShXsIc +EPDLKvbdyOShXrhc +EObkKvbdbPgHELzd +DoCjjvbdDoCkKwDE +EOcLKvbdmbJvxPOV +DnbjjvbdkNBlZeHP +DnbkKvbdRXNdDMID +DncLKvbdXnRAYUvU +EObkKvbdBcpAuilf +EPDKjvbdSLYeuGkT +DoCjjvbdRaceLiYk +DncLKvbdZoNiFEzK +EOcLKvbdGLEsDIMu +DnbjjvbdnUuZkJqf +DoCkKvbdlqyUyrci +DoCkKvbdLGGHaaRV +DnbkKvbdmoyyWLYb +DncKjvbdMpYRWOGs +DnbjjvbdkyTRsYft +EObkKvbdjKFhJmXr +DnbjjvbdxLWcgzzG +DoCkKvbdxnShXrhc +DnbjjvbdRbEEkiZL +EOcLKvbdWWiXudEg +DoDLKvbdDjIKVxKA +DoDKjvbdgFkzNgHA +EPDLKvbdvvlAuaVu +EPDLKvbdauBfwkTh +DncLKvbdmIctQtrB +EPDKjvbdCDpBWJmG +DoDKjvbdvAcxsPEh +EOcKjvbdrJAKFNOe +EOcLKvbdbsDKscia +DncLKvbdAMhYsWzY +DncKjvbdddnrCXDK +EOcLKvbdkHflGGOL +DoDKjvbdbUafxKsh +DnbkKvbdNdctIiLE +EOcLKvbdvBDyTPEh +DoCjjvbdFejSOJUR +DnbkKvbdUQpntuHm +EObjjvbdTpqOttgm +DoDLKvbdddoSCXCj +DncLKvbdbVCHXkUI +EPCjjvbdKNAEZgVB +EPDKjvbdFjdsDIMu +DnbjjvbdpaIeAXHd +EOcLKvbdrDdhpOWB +EPDKjvbdIxUBhLpp +EPDKjvbdhkddOVCy +EPCkKvbdTkuoAuni +EPDLKvbdnPyxujxb +EObjjvbdfSBWzlCo +EPDKjvbdMuSrKmAX +EPDLKvbdmozYvKyC +DnbkKvbdZirhPfaf +EPCjjvbdNQXqWOHT +DncKjvbdZsiIyESn +DnbkKvbdURQnuUgm +DoCjjvbdkIHMFfOL +EPDKjvbdKfGHaaRV +DncLKvbdtcDUwVoP +EOcLKvbdxrnImRbH +EPDLKvbdozmdLYPA +DoDKjvbdUVkojUBR +DnbjjvbdqUUHRrLU +DoDLKvbdEARhmZvw +EOcLKvbdZHWdAOri +DoCjjvbdVUMtGLuj +EOcLKvbdmfeYNNfy +EPDKjvbdZirgogCG +DnbjjvbdEJhKVwjA +DnbkKvbdkVvmdBxX +DnbjjvbdvBEYsOeI +EPCkKvbdDoCjjwDE +DoCjjvbdRXNdClID +EPDKjvbdkxrrTZGt +EOcLKvbdZdxGzhJC +DoDLKvbdxnSgxSiD +DoDKjvbdIryAsMxM +DnbkKvbdTYKlNzjx +DncLKvbdIGfzZYXg +DncLKvbdQvnEClHc +DnbkKvbdqUTfrRkU +DoDKjvbdRDcAopdS +DoDKjvbdTfznMXWF +EOcLKvbdauCHYKtI +EObkKvbdNrsvHEtp +DoDLKvbdDihJvXjA +DnbjjvbdliDtRVRa +DncKjvbdgFlZmfgA +DncLKvbdmJDsptqa +DncKjvbdfoazvdXh +EOcKjvbdJXtBgkpp +EPCkKvbdqUUGrSKt +EPDKjvbdrMzJyLgi +EPCjjvbdiGjDYuiu +EOcLKvbdkWXNcaww +EOcLKvbdxxIjBoyk +DnbkKvbdePErjssr +DnbjjvbdIryArmYM +EOcLKvbdRMwayNtz +EOcLKvbdRkZGUgKs +DoDKjvbdZLrEUOMN +DnbkKvbdDHMFgAzc +DnbkKvbdwXMBVaVu +DnbjjvbddeOrCXDK +EPDLKvbdwuMeQyLn +EPCjjvbdBhjbLIej +EPDKjvbdaNLCSuMg +EPCjjvbdBhkCKhej +EPCkKvbdptUGrSKt +EObkKvbdVTmTfLvK +DoCkKvbdDoDKkXDE +DnbjjvbdfoazvdYI +DnbkKvbdatbHYKtI +DnbkKvbdVUMtGLuj +EPDKjvbdeEoRavbj +DoCkKvbdJpzFPGNe +DnbjjvbdNHDQNQUk +DncKjvbdYNqAXuWU +EPCkKvbdZnnIddzK +EObkKvbdYlRdTnMN +EPDKjvbdEzspdkcJ +DoDLKvbdCIkBjhfK +EObjjvbdTkuoAvOi +DoCkKvbdhkdcnUby +EPCjjvbdHfgZyYXg +DncLKvbdbsCkTdKB +DoCjjvbdLqwMzVQz +DoDLKvbdRkYfUgLT +EOcLKvbdbQHHELzd +EPCkKvbdbVCGxLTh +EObjjvbdmSYuZsEJ +DoDKjvbdssRsYyeD +EPDKjvbdLrWlytpz +DncKjvbdJTZBSlxM +DnbkKvbdxrnJMrBg +EPCjjvbdxZgfFxFS +EObkKvbdUQpnuVIN +EObkKvbdzjUpQESt +EObjjvbduaDxsPFI +DoDLKvbdkyTRsYft +DoDKjvbdyTOImRbH +EObkKvbdegkWRnQg +DoCjjvbdaSFbgsek +DoDKjvbdrylPsAhO +DoCjjvbdgGMZnGgA +EPCkKvbdlqyUzSdJ +DncKjvbdwNWAMdFN +EPDKjvbdTlWPAuoJ +EOcLKvbdUMWPAuoJ +DnbjjvbddZxowxqC +EPCkKvbdEuyQPlie +DoDKjvbdVAaqSqSZ +EPDLKvbdwtldpxlO +EOcLKvbdrRtkNkBN +DncKjvbdJqZeOenF +DncKjvbdfHkWSNqH +DoCkKvbdnUuZjirG +EOcKjvbdsCFmMGkZ +DoDLKvbdwzIFfYEr +EOcLKvbdqqtjmjaN +DoCjjvbdrbGNLgKy +EPDKjvbdNHComQUk +DnbkKvbdIMBznWqL +EPCjjvbdEKHivXjA +EPDLKvbdVhYWYGxz +EPDLKvbdZxcjNblS +DnbjjvbdJpzEoFme +EPDKjvbderBWzkcP +DoDLKvbdpssgRrKt +EObkKvbdtbbtvuoP +EOcLKvbdqGDeUWAh +DoDKjvbdlZSrTYft +EOcKjvbdFfKRmhtR +DnbkKvbdNPxRVnGs +EPDLKvbdZshhxcsO +EPCjjvbdMoxQvNgT +EPCjjvbdKaKfmBxR +EPDLKvbdSwjkmzjx +DoCkKvbdjbkkRGtg +DoDKjvbdfoazwDxI +DoDKjvbdqwQLbhxq +EPCkKvbdZtIhyETO +DncLKvbdmpZxukYb +EOcKjvbdMoxQumgT +DoCjjvbdLYqJrzuG +EObjjvbdnGeXlmfy +EPDLKvbdyzeOSHhh +EOcLKvbdiZuGMQmf +EPCkKvbdWSNwadkc +DncKjvbdhfibyVjV +EOcKjvbdQmXbZOUz +DoCjjvbdSKxeuGkT +DnbjjvbdbrbkUDjB +EPDLKvbdJcKCqJbx +DnbjjvbdjSziTLJz +EOcKjvbdZxdKNcMS +DoCkKvbdelfWfmJk +DoCjjvbdFjeScHlu +EPDLKvbdnCJvwnnV +EPDKjvbdNrsufduQ +DnbkKvbdjcLjqGuH +EObjjvbdmbKXYOnV +DoCjjvbdRacdkiYk +EObkKvbdaaVdfQQX +DoCkKvbdJpydnfOF +DoCkKvbduCbtwVoP +DoDKjvbdpxnhHRDx +EOcKjvbdmJEUQtqa +EPDLKvbdRkZGVGjs +EPDKjvbdEObjkXCd +EObjjvbdCTAbtGWr +DoCkKvbdqTsfrSKt +DncLKvbdaMkBsUmH +DncLKvbdqlyixlIJ +EPCkKvbdvwMAuaVu +DncKjvbdiUzEwRuC +DoDKjvbdiUzFWrVC +DnbkKvbdkDMKpfuH +EObkKvbdZnnJFEzK +EObkKvbdWWhwudEg +DoCjjvbdypoNIiwA +DoCjjvbdShyiqABM +DnbjjvbdOFEThhkE +DnbjjvbdRXNcbkgc +DoCkKvbdqUTfrSKt +EPDLKvbdfNGWgMjL +EPDLKvbdGFirOJUR +EOcKjvbdSCEFMJYk +EOcKjvbdmpZxukYb +EPDLKvbdrafNLgKy +DnbkKvbdmJDsqUrB +DnbjjvbdjKFgimXr +EOcLKvbdVYgtZjoO +EObkKvbdTvMPjUBR +EOcLKvbdSxKkmzjx +DoDKjvbdnPzYvKxb +EPCjjvbdaRfDITek +EObkKvbdjKGIJmXr +DoCjjvbdliEURVSB +EObkKvbdFaOqYizm +EOcLKvbdqGEEsuaI +DoCjjvbdZQleJNEq +DoCjjvbdbKlFnnDA +DnbjjvbdWIXuwfxz +EPDLKvbdNGcPmPuL +DoCjjvbdBsBDTevr +DnbkKvbdczYoxYpb +EObjjvbdJutedEfi +DncLKvbdGFirNhsq +EPDKjvbdUaCQrqRy +EPCjjvbdQwNdDMID +EPDLKvbdtSrSyZeD +DnbkKvbdNHDQMpUk +DoDKjvbdZirgofaf +EObkKvbdrpWOibuf +DoCkKvbdwygfFxEr +EPCjjvbdSwjlNzjx +DnbkKvbdjKGHjMxS +DncLKvbdijFhKNXr +EOcKjvbdddoRavbj +EPDLKvbdmIdTpuSB +DncLKvbdiiehJmYS +EObkKvbdjcLkQgUg +DoDKjvbdsQVoJbuf +EObjjvbdhzUfMQmf +DnbkKvbdcImKKfWx +EObkKvbdbQHHELzd +DnbjjvbdWWiXuceH +EPDKjvbdjJegjNXr +EPCjjvbdZyEKNblS +DoDKjvbdLqvlzVQz +EPDLKvbdZRNEhmFR +DnbkKvbdGcjuibJj +EOcLKvbdGAnpxizm +EPCjjvbdkVvnDaww +EOcKjvbdHffzZXwg +DoCkKvbdKeehCAqV +EPCjjvbdHEKuiajK +EOcKjvbdUtMselWK +EPDKjvbdEXwlTstM +EPDKjvbdsrrSxzFD +EOcKjvbdEztQeMDJ +EPCkKvbddoFSjstS +DoCkKvbdSCEElIyL +DncKjvbdFVxpQNJe +DnbjjvbdXmqAYUut +DoCjjvbdiZtfLpmf +DoDKjvbdwygeexEr +EOcLKvbdiUyeXSUb +DncKjvbdsZkoraIO +EOcLKvbdACrYJyhp +EOcLKvbdTlVoBVoJ +EPCkKvbdqZPHfqDx +DnbkKvbdmJDsptqa +DncKjvbdhkeDnUcZ +EPDKjvbdURQoUtgm +EPDKjvbdjAQHAogK +EObjjvbdCIkCKhfK +EOcKjvbdYzbfRjWZ +DnbkKvbdWRnYCEkc +DncKjvbdyzeORgiI +EObjjvbdEPCkLWbd +DoDLKvbdNHComPuL +DnbkKvbdaRebhUFk +DnbkKvbdhlEcmtby +EOcLKvbdliETqUrB +EPDKjvbdIxTbHkqQ +DncLKvbdCEPaVjNG +EOcLKvbdIjEAJogE +DoCkKvbdsZkpSaHn +EPDLKvbdEXxLtTtM +DncKjvbdwXMAvAuu +EPDKjvbdakMGPODA +EPCkKvbdauBfxKsh +EOcKjvbdCJKakJFj +EPCkKvbdyXhjBozL +DoDLKvbdkWWnDbYX +DncKjvbdEPCjkXDE +DoDKjvbdlqxtzTDi +EPCjjvbdyTOJNSBg +DoCkKvbdnGeYMmgZ +EPCkKvbdaSFbhUFk +EObjjvbdnCKWxPNu +DoCjjvbdrWpLbhyR +EPDLKvbdmRxtyrci +DnbjjvbdSBdElJZL +DnbkKvbdrXQLbiYq +DoDLKvbdWHwuwfxz +DoCjjvbdZRNFJNEq +DncKjvbdUVkpJsaR +DoCjjvbdbiMijfXY +EPDKjvbdVTmTekvK +DoCjjvbdeXytTrFz +DoDLKvbdyYJKCQZk +DoDLKvbdczZQYZQb +EObjjvbdRadFMJZL +DncLKvbdkVvnECYX +DncKjvbduaDySneI +DnbjjvbdwuNFQyMO +DncLKvbdsrqrxzEc +DoDLKvbdcSbjtEKB +EPCjjvbdZtJIyETO +DoDLKvbdJvUfDdgJ +DnbjjvbdhbPDFWqR +DncKjvbdcyyQYYpb +DoDKjvbdWSNwbFMD +DoCjjvbdmajXXoNu +EPCkKvbdxZgeexEr +EOcKjvbdxsOIlrBg +DoDKjvbdZyEJmbkr +DncLKvbdTkunaVni +EOcLKvbdUQpoUthN +DoDLKvbdyNsHxTJD +DncKjvbdEztRElCi +DnbkKvbdXnRAYVVt +DnbjjvbdqAheAWgd +DnbkKvbdCJLBkIfK +EPDKjvbdUGzmkwWF +EPCkKvbdSiZiqABM +EPDLKvbdidkGtoAO +EOcLKvbdYlSDsnLm +EPDKjvbdMSWmZtpz +DoDKjvbdlhdURVRa +EOcLKvbdOYOuzdOU +DncLKvbdrafMlGkZ +EObjjvbdrylPraHn +DnbjjvbdDncLKwCd +DoCkKvbdoznELXoA +DoCkKvbdmttykJrG +DoDLKvbdBvzciEov +EPCjjvbdeXzUUSFz +DoDKjvbdtunYKQsA +EObjjvbdqceJQNvB +EOcLKvbdqTtGqqkU +DoCkKvbdiGjDYujV +EPCkKvbdRWnEDLhD +EOcLKvbdcSbjtDia +DncLKvbdTqROuVHm +EOcKjvbdiifIKMxS +EObkKvbdlYrqsZGt +DoDKjvbdSBdFLhxk +DnbkKvbdVUNUFkuj +DoCjjvbdrzLpSaIO +DoDKjvbdzGxlANFX +DoDLKvbdfHjuqmpg +EPDKjvbdZRMeIldq +DncKjvbdMfcPlpVL +DncKjvbdxKwDgzzG +EOcLKvbdYzbfRjVy +EObkKvbdWSNwbElD +DoCkKvbdeFOrCXCj +EObjjvbdbKlGOmcA +EOcKjvbdDxXktUTl +EPCjjvbdvBDySneI +EPDKjvbdLFehCBRV +DoDLKvbdiZuFlROG +EPDKjvbdDoDLKvbd +DoCjjvbdQwNdCkhD +DoCjjvbdCJLBkIfK +DnbjjvbdlqyUzSci +DncLKvbdNHCpMpUk +EOcKjvbdiMFEOVCy +DoCkKvbdnGeYNOGy +DnbkKvbdZoOIddzK +EOcKjvbdFpATWffZ +DoDKjvbdeOeTKtTr +DnbjjvbdGGKSNhsq +EOcKjvbdyXiKCPyk +DoCjjvbdeAURNYKG +DoDKjvbdpssfrRjt +EPDKjvbdnVVZjjRf +EOcKjvbdiZuGMQmf +EOcLKvbdNHDPlotk +DnbjjvbduCbtwVoP +EOcKjvbdxUleQxlO +DoDKjvbdnHFYMnGy +DnbjjvbdUVlPitAq +EPCkKvbdjAPgAofj +DoCkKvbdTlVoAuoJ +EPCkKvbdmSYtyrdJ +EPDKjvbdBsAcTevr +EPCkKvbdUyITzKnn +DnbjjvbdbQHGdLzd +EOcLKvbdezuyFIsw +DoDLKvbdEXwlTtUM +EOcKjvbdKyRJrztf +DnbjjvbdtTSSxzEc +DnbjjvbdHDjujBij +DoCjjvbdsQVnicWG +EObkKvbdZsiJYcrn +EPDLKvbdUtNUFkuj +DoDKjvbdNPwpumfs +EOcKjvbdSBcdlJZL +EPDLKvbdmfeXlmfy +DncKjvbdIsZAsNXl +DncLKvbdmJDsptrB +DncKjvbdGYuUaEXb +DncLKvbdyYJJbPzL +DnbkKvbdrpVnicWG +EPCjjvbdTqQoVUgm +DoDLKvbdFVyPpMjF +EObkKvbdZnnIeEyj +EObkKvbdbUagYKtI +DoCkKvbdqGDdtWBI +EPDLKvbdFVxpQNKF +DncLKvbdkWXNdCYX +EPDKjvbddwystRez +EOcKjvbdaNKasUlg +DnbkKvbdNdctIhjd +EPCkKvbdatagYKsh +DoCkKvbdfNFvgMik +EObjjvbdJYTbIMQp +DoCjjvbdEYYMTtTl +DncKjvbdWRmxCElD +EPCkKvbdbsCjsdKB +EOcLKvbdFVxpQMie +EObkKvbdpaJFAWgd +EPDLKvbdijGHimXr +EPCjjvbdlhctQtqa +EObjjvbdFVxoolie +DncKjvbdrJAKEmOe +DnbkKvbdzQnmIiwA +EPCkKvbdkHfkeemk +DnbjjvbdLGGHaaQu +DnbkKvbdOSsugEtp +DnbkKvbdZtIiYcrn +DoCjjvbdQZNAGsSK +EObjjvbdNPxRWOGs +DoCkKvbdVUMsfLuj +DnbjjvbdmJETqUqa +EPDLKvbdBsAcUFvr +EOcLKvbdIsZArlwl +EPCjjvbdNddTiJKd +DoDKjvbdyXhiaozL +DncLKvbdjmCLzEfo +EOcLKvbdRadElJYk +DncLKvbdjbkkQfuH +EObkKvbdXFxzUAOs +DncLKvbdxZhGFwdr +DoCjjvbdNsTugEuQ +EObjjvbdRbDdlIyL +DoCkKvbdePEsLUUS +DoCjjvbdOStVgFVQ +EPDLKvbdUtMtGLuj +EObjjvbdFjdrbhMu +EOcKjvbddeOrBwCj +DnbjjvbdxUmFRYkn +DnbjjvbdCEQBVimG +EOcLKvbdvAdZTPEh +EPCkKvbdGcjvJaij +EPCjjvbdOFETiIjd +EOcLKvbdemGWgNKL +DoCkKvbdqTsfrRkU +DncLKvbdbrcKsdKB +EPDLKvbdTAFIhBoE +DoCjjvbdKCjCqJbx +DnbjjvbdNsUWHFUp +EPDKjvbdkWWmcaxX +EPDLKvbdbKlFoNcA +DoCjjvbdkIGkefNk +EPCkKvbdXFyZtAPT +EPDKjvbdpxnhGpcx +DoDLKvbdhanbeWqR +EOcKjvbdliEUQtqa +EObjjvbdbBVeFpPw +EObkKvbdQdDApQdS +EPDLKvbdnQZyVkZC +EObjjvbdhbOcEwQq +DnbjjvbdBdPaWKMf +DoCjjvbdCTAbtGWr +EPCjjvbdEvYpQMie +EObjjvbdDxYLtUTl +EObkKvbdCTBDTfXS +EPCjjvbdmpZxvKyC +EPCkKvbdRzKITDWA +EObkKvbdemGXGmJk +EOcLKvbdIryAsNXl +DoDKjvbdkWXNcaww +EObkKvbddCTNSAUN +DncKjvbdvBDxroEh +DncLKvbdiCPDEwRR +EObjjvbdRkZGVHLT +DoCjjvbdFkFSbhNV +EPDLKvbdwjvdHzzG +DoDLKvbdqquKmkBN +EOcKjvbdsQVoJcVf +EPCjjvbdYlSEUOMN +EObkKvbdjKGIKMxS +DncLKvbdRpUGifDw +EObkKvbdEuxooljF +EPDLKvbdzitpQETU +EOcKjvbdTvLpKUAq +DoCjjvbdrSVKmkAm +EOcLKvbdEvZQPmJe +EPCkKvbdfelZnHHA +EOcLKvbdjhGlGGNk +DncKjvbdCEPaWJmG +DncLKvbdrpVnjDWG +DoDLKvbdeOeTKtUS +DoCkKvbdtbbuXVno +EObkKvbdYpleJMeR +DnbjjvbdiCPDEvqR +DoDLKvbdUslsekuj +DnbkKvbdGBPQyJzm +EPCkKvbdtbcUwVoP +DoDKjvbddxZssrFz +DncLKvbdkIGlGFmk +EPCkKvbdhuZdwRtb +EObkKvbdehLWSOQg +DoCkKvbdatafwjsh +DoDKjvbdhfjCyViu +DoCjjvbdFyUuAcxC +EObkKvbdUMWPAvPJ +EPDLKvbdxxIjBoyk +DnbjjvbdMRvlytpz +EPCkKvbdDxYLtUTl +DnbjjvbdiVZeXSUb +DoCjjvbdffMZmgHA +EPDLKvbdnPyyVkYb +EPCkKvbdZtIhyETO +DncKjvbdRECaPqDr +EPDKjvbdVrNxBeMD +DnbkKvbdKVuFdFGi +EOcLKvbdrzLosAgn +EPDKjvbdLLAgvAKZ +EOcLKvbdLYpirztf +DncKjvbdnGeXlnHZ +EOcLKvbdQdDAopdS +DnbkKvbdptTfrRkU +DoCjjvbdqGEFUVaI +DncLKvbdrDeIomvB +DoDLKvbdyOTHxSiD +EOcLKvbdRpTfjGDw +DoDLKvbdzitpPdTU +DnbjjvbdUxhTykOn +EOcKjvbdGFjSNhtR +EObkKvbdidkGuPAO +EObjjvbdVAapsQrZ +EPDLKvbdQccAopdS +EObjjvbdmozYukZC +EOcKjvbdGFjSOIsq +EPCkKvbdyzeNrHiI +DncLKvbdEOcKjvcE +DncLKvbdLFfIBaQu +DoDKjvbdtlXwBUBX +DoCjjvbdeOeTLTsr +DncKjvbdiZuGLpnG +DoCkKvbdWRnYBdkc +DncLKvbduCbtvvOo +DnbkKvbdGGKRnIsq +EOcLKvbdVTmUFkuj +EOcKjvbdFkEsDHlu +DoDKjvbdQwNcbkgc +DncLKvbdWRmwbFLc +DnbjjvbdHlBzmwRL +EPDKjvbdDncKjwCd +EObkKvbdGBPRYizm +EOcKjvbdqrVLNjaN +EObjjvbdqFceUVaI +DoCkKvbdZQmFImFR +EPDLKvbdmIctRVSB +EObkKvbdjAQHBPfj +EObjjvbdrEFIonWB +DnbjjvbdsPuoKCuf +DoDKjvbdtbbuXWPP +EPDLKvbdOStWGduQ +DoCkKvbdUQqPUuIN +EPDLKvbdwyhFewdr +EObkKvbdShyiqAAl +EPDLKvbdGZUuBEXb +EPCkKvbdHffyyXwg +EObjjvbdGBOpyJzm +EObkKvbdZirgpGaf +EObkKvbdRjxfUfkT +EPDKjvbdZHWdAPSi +DnbjjvbdVrOYBdkc +DoCjjvbdGGKSNhsq +EOcKjvbdJqZeOenF +EOcLKvbddBsNSAUN +DncKjvbdZtJJYcsO +EPDKjvbdBraDTevr +DoCkKvbdRDcApQdS +EObjjvbdGGJrNiTq +DoCjjvbdGLFTCgmV +DoCjjvbdtlXwBUAw +DncLKvbdQwNdClHc +DoDLKvbdygYlAMeX +EPDLKvbdTvMQKTaR +EPCjjvbdiMFDnVDZ +DoCjjvbdiBoDFXRR +EObkKvbdUQqOuUgm +EOcKjvbdaMkBsVNH +EObkKvbdwuNEqZMO +EObjjvbdLAkGlbXq +EObkKvbdkCkkQgUg +DncLKvbdVqnYCFLc +EPCkKvbdxVMeRZLn +DncLKvbdRXOEClHc +EObjjvbdvwMAvBWV +EObjjvbdIwsahLpp +EObjjvbdKDKCpicY +DoDKjvbdlrZUzTEJ +EOcLKvbdyYIjBpZk +DncLKvbdxsNhlqag +EPDKjvbdgPazvdXh +EPDLKvbdbKlGPNcA +DoCjjvbdqUUHSRjt +DnbkKvbdNeDsiJKd +DnbjjvbdqGEFTvAh +DoDKjvbdnUtykKRf +EPDKjvbdZtJJZDrn +DoCjjvbdmRxtysEJ +EOcKjvbdQmXbYnUz +EPDKjvbdjmCLzFGo +DncKjvbdsBfMkfkZ +EPCkKvbdFVxpPlie +DnbkKvbdZLrEUOMN +DoCkKvbdEOcKkXDE +EObkKvbdvBEYsPEh +EPDKjvbdcJMjLGXY +EOcLKvbdOYPVzcnU +DnbkKvbdsQWOjDWG +EOcLKvbdfHjvRnRH +DoDLKvbdmbKXYPOV +DncKjvbdrpWPJcVf +EOcKjvbdURROuUgm +DnbkKvbdrovOicWG +EObjjvbdLYpirzuG +DnbjjvbdGQASvgGZ +DnbkKvbdYzcFqjVy +DncKjvbdBsBCtFvr +DoDLKvbdYgXEAOri +EOcLKvbdqTsfqqjt +DncKjvbdPIAYZAYa +EOcLKvbdypnliJwA +DnbkKvbdhyuGLqNf +EOcLKvbdjhGkfGOL +DncKjvbdjblLRGuH +EPCjjvbdxwhibPyk +EOcKjvbdBhkCLIfK +DnbjjvbdJTZArlxM +DoCkKvbdRjxetgKs +EObkKvbdiUyeWrVC +EOcKjvbdwXLaWAuu +EPDLKvbdssSTZZdc +EObkKvbdcSbjtDia +DncKjvbdgGMZnHHA +DoCkKvbdatafwkUI +DncLKvbdnCKWxPNu +EObjjvbdyOShXrhc +EPCjjvbdpyPHfqEY +DoDKjvbdbUbGxKsh +EOcKjvbdypoNJKXA +EObkKvbdyTOJMrBg +DoDLKvbdiZtfLpmf +EPCkKvbdLGFgbBQu +EOcLKvbdCJLBkJFj +DnbkKvbdUxgszLPO +DoDKjvbdUQqPVVHm +EPCjjvbdijGIKNYS +EPDKjvbdCJKajhej +EPDLKvbduoTzqLPU +DnbjjvbdJTZBTMwl +EOcLKvbdLAjfmBwq +DoDLKvbdQwOECkhD +DoCjjvbdQYmAHTSK +DoDKjvbdEuyQQMjF +DoDKjvbdZdwfzhIb +EOcKjvbdyTOJNRag +DoDLKvbdbBVdfQPw +DoCkKvbdbVBfxLUI +DncKjvbdcIljKevx +EOcLKvbdhgKDZViu +EObjjvbdOTUWHEtp +DncKjvbdZRMeIldq +DnbjjvbdkHgMGGNk +EOcLKvbdZMSETmlN +EPCkKvbdjcMKpfuH +EPDLKvbdiBncFXQq +EObjjvbdJcKCqKDY +DoDKjvbdQwOEClID +EPCkKvbdRpUHJecw +DoDKjvbdZjSgogBf +DoCkKvbdEObkKvbd +DoDLKvbdDwwktUTl +DoCkKvbdSKyGVHKs +DnbkKvbdZMSETnMN +DncLKvbdiZuGLpmf +EObjjvbdjcLjpgVH +EOcLKvbdYzcFqjVy +EPCjjvbdQvnDcLhD +DoCkKvbdDihJvYKA +EPDLKvbdJqZeOenF +EOcKjvbdWXJXvDdg +DoCjjvbdznpQeCkx +EPCjjvbdjJehJmXr +DoDKjvbdmSYuZsDi +DoDKjvbdFVyPolie +DnbjjvbdULvPAvOi +DncKjvbdwzIGFwdr +DnbkKvbdOEcsiJKd +EPCkKvbdEJhJuwjA +EObkKvbdYSkaNUOx +EObkKvbddoFSkTtS +DoDLKvbdFkFTDHlu +DoCjjvbddwzTtRez +EOcLKvbdDwwlUTtM +DoDKjvbdHDjvJaij +EObkKvbdyTOIlrBg +EOcLKvbdtSqsYzFD +EObkKvbduVmwjQsA +EPDKjvbdbiMjKfXY +DncLKvbdsQWPKDWG +DncLKvbdRbEElIyL +DnbjjvbdGKeTDHlu +EPCkKvbdrpWOjDWG +EObjjvbdVwJYWEFH +EPCjjvbdvBDySoFI +EPCkKvbdZMSDsmkm +EObkKvbdqYnhHREY +EObjjvbdyqPMiJwA +DncLKvbdCTBCtGXS +EPCkKvbdfekynGgA +EPCkKvbdvvkaWBVu +DoCjjvbdGZUuAdYC +DoDKjvbdpyOgfqDx +EPCjjvbdePFTKstS +EOcLKvbdVviXudFH +EPCkKvbddZyQYZQb +DnbkKvbdUaCQrqRy +EPDLKvbdQwNdDMID +DncKjvbdUaCRTQrZ +DnbjjvbdHDkWJbKK +EOcKjvbdOTTvGduQ +DnbjjvbdssRrxzEc +EObjjvbdezuxdiTw +EOcLKvbdGLFTCgmV +EPDLKvbdUxgtZkOn +EOcLKvbdbrbjscia +DnbjjvbdjJfHimXr +EOcKjvbdjcMLQgUg +DoDKjvbdlYrqrxft +EPDKjvbdGYttaEXb +EOcLKvbdhbPDEwQq +EOcKjvbdvAcxroEh +DoDKjvbdVgxVxHYz +DoCkKvbdTqQnuVIN +DoCjjvbdrXQMCiZR +EOcKjvbdMSWlytpz +DoCjjvbdBiLCLJFj +EObkKvbdUyHtZkPO +DoDLKvbdGcjujCJj +EPCjjvbdfkGzbfAE +DoCjjvbdDoCjjwDE +DnbkKvbdqGDdsvAh +DoDLKvbdjvXNdBww +EOcKjvbdANHySvyx +DoCjjvbdeJjRvUzn +DncKjvbdqUTgRqkU +DncLKvbdEvZQPljF +DnbjjvbdSPsgKFdX +EOcKjvbdGLFScHmV +EPCjjvbdqUTgRqkU +EPCkKvbdNxOuzdOU +DoCkKvbdpfEEtWBI +EOcLKvbdDwwlTtTl +EPCjjvbdSZjITDWA +DncKjvbdQwNcblID +DnbjjvbdijGIKMwr +DnbjjvbdYpldiMdq +DncLKvbdemGXHNKL +EPCkKvbdEKHjWYKA +DoDLKvbdwXMBWAvV +DnbjjvbdQwOEClHc +DnbkKvbdbUbHYKtI +DncLKvbdCSaCtFvr +DncLKvbdEuyPpNJe +EPDKjvbdFVyPolie +DncKjvbddneSkTtS +EOcKjvbdZtJIxcsO +EOcKjvbdiGicZWJu +DncLKvbdOFDtIiLE +DoDLKvbdOSsufduQ +DnbkKvbdMfcPmQVL +EObjjvbdiUzEwSVC +DoCkKvbdCIkBkJFj +DncLKvbdYkrETmlN +EObjjvbdqZOggREY +EPCkKvbdHDkViajK +DnbkKvbdbsDLTdKB +EPDLKvbdlqxtzTDi +DncKjvbdLGFgbAqV +EObjjvbdoAKztHcn +EPDLKvbdRXODblID +DoCjjvbdIHGzYwxH +EObkKvbdNPwqVnHT +EOcKjvbdxrnImRag +EOcLKvbdiLddNuCy +DoCkKvbdkMakzEfo +EObkKvbdnPyxukYb +EPCjjvbdZdwfzgiC +EPCkKvbdnHEwmNfy +EObjjvbdySmiNRag +EOcKjvbdzeZnzdyp +EPCjjvbdJvVFdEgJ +EOcKjvbdZQldiMeR +EOcKjvbdFyVVAdYC +DncKjvbdJXsahMRQ +DnbjjvbdfNGXGljL +EOcLKvbdwWlAvAvV +DncLKvbdkIHLefNk +DncLKvbdliDtQtrB +DoCkKvbdxZgefXdr +DncKjvbdCWzchdpW +EPCkKvbdpyPHfpdY +EOcKjvbdhbOcFWqR +DnbjjvbdzjUpPdSt +DoDLKvbdZMRdUOLm +DncLKvbdVwJXucdg +EPCjjvbdWXIxVcdg +DnbkKvbdMpXpvOHT +DncLKvbdRkZGVHKs +DoDKjvbdmpZyWKxb +DoCjjvbdegkWRmpg +DncLKvbdyzeOSHhh +EPDLKvbdRECaPpdS +EPDKjvbdqvpLcJZR +DoCjjvbdRDbaPqDr +EObjjvbdRECaPqDr +EOcLKvbdsBfNLgLZ +DncKjvbdZyEKOCkr +DnbkKvbdSPsgJfEX +EPDKjvbdZRMdiMeR +EPDLKvbdDwwktTsl +EPDLKvbdLhbLpxAS +EPDKjvbdZirgpHBf +DoCkKvbdmtuZkJqf +DnbjjvbdwWkaWAuu +DnbjjvbdRDcBPqES +DnbkKvbdyzeNqgiI +EObjjvbdYkrEUOLm +DoCkKvbdmtuZkKRf +DoCkKvbdNdctIhkE +DnbjjvbdhytfLqOG +EOcLKvbddZyPwxpb +EPCjjvbdYzbeqivZ +EOcKjvbdwygfGXeS +EOcLKvbdRosfifEX +EPCkKvbdznopdbkx +EObkKvbdVBBqSqSZ +EObjjvbdQlxCZNtz +EPCkKvbdhlFDmtby +DoDLKvbdCDpAvJmG +EPDKjvbddeOrCXDK +EOcLKvbdrovOjDWG +DnbkKvbdIGfyyYYH +EObkKvbdmbKWwnmu +EOcLKvbdkDLjqGuH +EPDLKvbdqrUkNjaN +EPDKjvbduDDVXWPP +EObjjvbdZnnJFEzK +DnbjjvbdaRfCgtGL +DoCkKvbdGKdsDHlu +DncKjvbdqlyiyMHi +DoDLKvbdSLYetgLT +DnbkKvbdZQleJNEq +EOcLKvbdZLrETnMN +DnbjjvbdiUydwRuC +EObjjvbdnPzYvLYb +EPCjjvbdGYuUaEYC +EObjjvbdACqwiyiQ +DncKjvbdIHGzZYXg +DncKjvbdxrnIlqag +DnbjjvbdySmhlqag +DoCjjvbdSCEFMJZL +EObjjvbdSKxfUfjs +DnbjjvbdnUtyjjRf +DncLKvbdkyTRsZGt +DoDLKvbdWRnXbElD +EOcKjvbdjvXNcbYX +EOcKjvbddjKSWUzn +DoDKjvbdvBDxrneI +EOcLKvbddndsKtTr +DoDLKvbdZjTHpGbG +DnbkKvbdpfDdsuaI +EPCkKvbdfMfWgNJk +DoCkKvbdjJegjNXr +DoDKjvbdcTDLTdKB +EPDLKvbdwzHfFxEr +DncKjvbdfMfWgMik +DnbkKvbdrbFllGkZ +EPCkKvbdCIkCLJGK +EObjjvbduDDUvvOo +EOcKjvbdDxYMUTsl +EOcLKvbdsPvOibuf +DncKjvbdUsltGLvK +EPCjjvbdyOShYTIc +DoDKjvbduaEZSoEh +DncKjvbdLrXMzUpz +DoCkKvbdNsTufeUp +EObkKvbdLGGIBaQu +EPCjjvbdmSZVZsEJ +DncLKvbdQdDAoqDr +DoCkKvbdKCicRJbx +EPCkKvbdxwhibQZk +DoDKjvbdTvMQJsaR +DoCkKvbdYzcGSJuy +DnbkKvbdwyhGFwdr +DoCjjvbdEOcLKwDE +DoCkKvbdGGKRmhtR +EOcLKvbdrzMQTAgn +DoDLKvbdJvVFceHJ +DnbkKvbdfMfWfmJk +EPCkKvbdmajWwnmu +EPCjjvbdxrmiMqag +EOcKjvbdqUTfqqkU +EObkKvbdoAKztHcn +EObkKvbdkyTSTZHU +EPCjjvbdiCOcEwRR +DnbkKvbdGZUtaDwb +EPCjjvbdYORAXuWU +DoCkKvbdULvPAuoJ +DnbjjvbdcSbjscjB +DoDKjvbdLrXMytpz +DncKjvbdIryBTNYM +DoCjjvbdZyDinCkr +EPDLKvbdZoOJFEyj +DncLKvbdajkfOmcA +EPDLKvbdRNYCYmtz +DoCkKvbddePRawDK +EOcKjvbdbUbHYKtI +EPCjjvbdbrbjscjB +EPDKjvbdKDJcRKCx +EObjjvbdqcdiQOVa +EPDKjvbdZjTIPgBf +DnbjjvbdrSUjmjaN +DnbjjvbdEXxLsstM +EPCkKvbdFjeSbglu +DnbkKvbdLqwMytpz +DoDKjvbdUGznMXVe +EObkKvbdpstHRrLU +DoDKjvbdYTLaNUPY +DnbkKvbdGKdrbhNV +EObjjvbdRMxCZNtz +DncLKvbdDihJuwjA +EPCjjvbdOFDtJIkE +DnbkKvbdliEUQuSB +DoDKjvbdkCkkQftg +EPCkKvbdGZVVAcwb +EObjjvbdkyTSSxgU +EPDKjvbdIryBSlxM +EOcKjvbdWIXvXfxz +DoDLKvbdhfjCyWKV +DoDKjvbdNQXpumfs +DncKjvbdiMEcnVCy +EPDLKvbdxVMeRZLn +EPCkKvbdDoDKjwDE +DnbkKvbdSCEFLiZL +DoCjjvbdqYoHgQcx +EObjjvbdxZhFexFS +EOcLKvbdkDMLRGuH +EPCkKvbdVwJXvDdg +DoCjjvbdjhHLefOL +EOcLKvbdiCOcFWpq +DnbjjvbdrovOjCvG +DncLKvbdRzKHsCvA +EPCkKvbdDoDLKwDE +EOcKjvbdrNZjZLhJ +EObjjvbdTAFIhBoE +DncKjvbdlqyVZsDi +DncLKvbdjggMFenL +EPDLKvbdUsltGMWK +DoCjjvbdkyTRsZGt +EOcLKvbdrzMPsBHn +EPCkKvbddZxpYYpb +DncLKvbdGKdsCgmV +DnbkKvbdvAdYsPEh +DoDLKvbdqUUGrSKt +EPCjjvbdxnTHxTIc +EOcKjvbdZisIQGaf +DncLKvbdBhjbLJFj +DoCkKvbdJSyBTNYM +DnbjjvbdmfdwlmgZ +EOcLKvbdJcJcRJbx +DncLKvbdmoyyWLYb +EObjjvbdSKxfUfkT +EObjjvbdlAlnmALA +DoDLKvbdTlVnaVoJ +EOcKjvbdnCKWwnnV +EPCjjvbdjbkkRGtg +EPCjjvbdULuoBVoJ +EPDKjvbdwMvAMceN +DnbkKvbdznopdcLx +EPCkKvbdeuzwoizs +EPCjjvbdpssfrRjt +EOcKjvbdiGibyWJu +DnbkKvbdYSlBNToY +EPDKjvbdkVwNcbYX +DoCjjvbdsPuoJcVf +DnbkKvbdrbGNLgLZ +DnbkKvbdRbEFMJYk +EObjjvbdqceIonVa +DnbkKvbdTpqPUuHm +EOcLKvbdVviXvEEg +EOcLKvbdvAcxrndh +DnbjjvbdTYKkmzkY +EOcLKvbduDCuXVno +EPCkKvbdEvYpPlie +DncLKvbdaSGCgtFk +DoCjjvbdpfDdtWBI +DncLKvbdHDkWJbJj +DncLKvbdqZOgfpdY +EPCkKvbdFxuVBEXb +DoDKjvbdnBivwnnV +EPCkKvbdRWmcbkhD +EObjjvbdfIKvSOQg +DnbkKvbdcIlikGWx +EOcKjvbdQdDBQQdS +EPCjjvbdnPzZWKyC +DnbkKvbdZxcimbkr +DncLKvbdLFfHaaRV +DoCjjvbdYSlBNToY +DnbjjvbdKCicRKDY +EPCkKvbddneSjtUS +EObjjvbdmIctRUqa +DncKjvbdYqMdiNFR +DnbjjvbduaDyTPFI +EPCkKvbdePEsLTtS +EPCkKvbdbUagYKsh +DoDLKvbdssSSxzFD +EObkKvbdMuSrLNAX +EPDLKvbdddnqbWbj +DnbkKvbdvAcySneI +EPDKjvbdatbGxLUI +EOcLKvbddePRbWbj +DoDLKvbdijGIKNYS +EPCjjvbdNrsugEtp +EOcLKvbdxZhGGYEr +DnbkKvbdTkvPAvPJ +DoCjjvbdFyUuAcwb +DnbjjvbdJTZBTMxM +EPDLKvbdaMkCStmH +EPDLKvbdjKGHimYS +DnbkKvbdelewGlik +EObjjvbdkHgMGGOL +EObkKvbdURRPUuHm +EOcLKvbdjKFhKNYS +EPDLKvbdhyuFkpnG +EOcLKvbdRosgJecw +DoCjjvbdczYoxYqC +DncLKvbdzaAPGgCM +EPDKjvbdiUzEwSUb +DoCjjvbdKQzEneme +EObjjvbdatagXkTh +DoCjjvbdwtldqYkn +EOcKjvbdUxgszLOn +EPCkKvbdUaBprprZ +EOcLKvbdYNqAYVVt +EObjjvbdbUafwkTh +EPDLKvbdcIljLGWx +DnbjjvbdNHDPlotk +EOcLKvbdkIHMFfOL +EPDKjvbddePSCXDK +EOcLKvbdbUafxLTh +DoDKjvbdQlwaxmtz +DoCkKvbdbQHHELzd +EPDLKvbdhficZWKV +DoDKjvbdqrVLOLAm +DoCjjvbduDDUvvPP +EPCjjvbdCEQAuilf +EOcLKvbdEASIlywX +DncLKvbdRNXayNtz +EOcKjvbdVrOXaeMD +EPCjjvbdFWYopNKF +DnbkKvbdSQTfjFcw +DoDLKvbdJTZAsMwl +DoCjjvbdiCPDEvpq +DncKjvbdVwIwuceH +EPDLKvbdJvVFcdfi +EPCjjvbdcbSlrATm +DnbjjvbdqBJFAXIE +EPCkKvbdTAFJHbOd +EPCjjvbdcTCkUEKB +EPCkKvbdxwhibPzL +EPCkKvbdRpTfifEX +EPDLKvbdvAdYsOeI +DncKjvbdpxngfpdY +EPCjjvbdEXwksstM +DnbkKvbdNrsufeUp +DnbkKvbdJKEAJogE +DoCkKvbdNsUWGduQ +DoCkKvbdbrcLTcjB +EOcKjvbdiHJcZViu +EObkKvbdEztQdkcJ +DoCjjvbdliETptqa +EOcLKvbdOEdUIhjd +DoCkKvbdSKxfVGkT +EPCjjvbdIsZAsMxM +EOcKjvbdZsiIyDsO +DncLKvbduDCtwWOo +DnbkKvbdEztQdlCi +DnbjjvbdLZQjSztf +DoDLKvbdXmqAXuVt +EPCjjvbdxsOJNSCH +DoDLKvbdRadElJZL +EOcLKvbdWRnXbEkc +DncKjvbdSCEFLiYk +EPDLKvbdidkHVPAO +DoCjjvbdkClKqGtg +EPDKjvbduLxXBUAw +DncLKvbdqUTfqqkU +EObjjvbdcImKKevx +DoDLKvbdMgCpMpVL +DnbjjvbdtTRsYydc +DnbkKvbdKefHbBQu +EOcKjvbduoTzpjnt +DoCjjvbdjuwNcaww +DncKjvbdTkvPBVni +EPDLKvbdapGfdLzd +EPDKjvbdvAdZTPEh +EPCkKvbdwXLaVaWV +EOcKjvbdZoNhddyj +DncKjvbdqceIonVa +DnbjjvbdIwsbHkqQ +DoDKjvbdjFKfuPAO +EOcLKvbdbhmJkFvx +DncKjvbdDxYMUUTl +DnbjjvbdMfbpNQVL +DoDLKvbdZeXfzhIb +EOcLKvbdVAbRSpqy +DncLKvbdZxcjOCkr +EOcKjvbdyTNiNSCH +EObkKvbdiLddOUcZ +DoCjjvbddwystRez +DoDKjvbdUsmTelWK +EPDLKvbdEPCjkWcE +DoDKjvbdIwsaglQp +EObkKvbdGcjvJbKK +DoCkKvbdRzJgrbvA +EObkKvbdkxsSSxft +DncLKvbdfHjvSNpg +DnbkKvbdxsNiMqag +DoDLKvbdcImKKevx +EOcLKvbdJutfDdgJ +DoDLKvbdhancEwRR +EObkKvbdnPzYvKyC +DoDKjvbdNHDPlouL +EPCkKvbdKaKgMbXq +EOcLKvbdqUTgSRkU +EPCkKvbdZjSgpHBf +DncLKvbdHffzYxXg +DoCkKvbdFkErbhMu +EObjjvbdhancEwQq +EPDKjvbdJYUCHkpp +EPDKjvbdtkwwBUAw +EOcLKvbdiZuGMRNf +EObkKvbdrJAKElne +DnbjjvbdIHHZxwwg +EPDKjvbdkHgMGGNk +DoCjjvbdeOeSjtUS +DoDLKvbdJbicQjCx +DncKjvbdnGeXlnGy +EPDKjvbdKVtecdfi +EOcKjvbdULuoBVni +DnbkKvbdmJDtRVRa +DncLKvbdJTZAsMxM +EPDKjvbdVgxVxHYz +EPCjjvbdVBCRSqSZ +EPCjjvbdJqZdnfOF +DncKjvbdqdEiQOVa +DnbkKvbdZLqdTnLm +EOcKjvbdzHZMANFX +DncKjvbdVrNxBdkc +DnbjjvbdKkAgvAKZ +DnbjjvbdmbKWxOnV +DoDKjvbdYqMeImEq +EObjjvbdbUagYKtI +DncKjvbdQZNAHSqj +DoDLKvbdfoazvcwh +DnbkKvbdVvhwvDdg +DoDKjvbdURQoUthN +EPDLKvbdvBDyTOeI +DnbjjvbdrRuKmkBN +DnbkKvbdRbDdlIxk +EObjjvbdSCDdkhyL +DoDKjvbdSBceMJYk +DoDLKvbdwyhGGYFS +EPDKjvbdQvmcblID +DoDLKvbdaaWFGQQX +DoDKjvbdEASImZvw +EPDLKvbdnQZyWLYb +EPDKjvbdbrcLUEJa +EOcLKvbdKCicQjDY +EPCjjvbdVBCQsQqy +EPCkKvbdkaNPNALA +DncLKvbdaNKartmH +DoDLKvbdCTAbtFvr +EObjjvbddZxowxpb +EObkKvbdTpqOuUgm +DncLKvbdZQleJNFR +DnbjjvbdUVlPisaR +EObjjvbdBsBCtFvr +EPCjjvbdJutecdgJ +EOcKjvbdfNFvgNKL +DncKjvbddneSjtUS +DoDKjvbdjcMKqGtg +EOcLKvbdGdLWKCKK +EOcKjvbdRDcBPpdS +DoCkKvbdauCGwkTh +EPCjjvbdaNLCStmH +EOcKjvbdelfWgMjL +DoDLKvbdtSrSxyeD +EPCjjvbdemGXGmKL +EOcLKvbduDCuXWOo +DncKjvbdauBfxLUI +DnbjjvbdIHGyyXwg +EPCjjvbdEvYooljF +EObjjvbddneTLUTr +DoCjjvbdySmiNRag +DoDKjvbdqUUHSRjt +EObjjvbdczYpXxpb +EObkKvbdaMkBrtlg +EPDLKvbdnUuZkKRf +DoDKjvbdcScKsdJa +EPCjjvbdsrrTYydc +EObjjvbdZoNiFEyj +EPDLKvbdmttyjirG +EOcLKvbdYqMeIleR +DoDKjvbdKWUfEFGi +EOcLKvbdcyxoxYqC +EObkKvbdNeETiJLE +EPCkKvbdUMWOaVoJ +EPCjjvbdWSOXbElD +EPCkKvbdNHCpNPuL +EObkKvbdEuyQQNJe +DoCkKvbdmgExNOGy +EOcKjvbdZtJJYcsO +EOcLKvbdMpXqVnGs +EObjjvbdbsDLTcjB +EPCjjvbddoFTLUTr +EOcLKvbdaNKbTVNH +DoCjjvbdJcKCpicY +DoDLKvbdsBfMlGjy +EPDKjvbdqiAJdlne +EObkKvbdKefHaaRV +DoDLKvbdbiNJjewY +EPCkKvbdVTltFlWK +DoDLKvbdbBWFGPpX +DncLKvbdVZITzKoO +EPCjjvbdnUtzLKSG +EPCkKvbdBraDTevr +EPDLKvbdTkunaWPJ +EObjjvbdZRNFJNEq +DnbkKvbdxUldqYkn +EPDLKvbdtvOYJpsA +EOcLKvbdJvUfEEgJ +DoDKjvbdlYrqsZGt +DncKjvbdePFSjstS +EPDLKvbdqquLOLAm +DoCkKvbdSPtHKFdX +DoCjjvbdZyDjNcMS +EPDKjvbdTlVnaWPJ +EPCjjvbdZirgpHCG +EObkKvbdNQYQvNfs +DncKjvbdqqtjnLBN +DoDKjvbdjJehJmYS +DncLKvbdrNZixlHi +EPDLKvbdMfcPlpVL +EPCjjvbdUWMQJtBR +DoCkKvbdfMfWfljL +DnbjjvbdaRfDHtFk +DncLKvbdiMFDnVDZ +DoCkKvbdXrkaNToY +DoCjjvbdZLqdUNlN +EObkKvbdRjxetfkT +EOcLKvbdmgFXmOGy +EPDKjvbdUQpntuHm +DoDKjvbdpstHRrKt +DncLKvbdHkazmwRL +EObjjvbdpfEFUWAh +DoDKjvbdZyEJnDMS +EObkKvbdiBoCeXQq +DoCkKvbdeATplxKG +DncLKvbdWRmwadkc +EPDKjvbdUQqPUthN +DoCjjvbdnBjXXnmu +EPDLKvbdZjTIPfbG +EPCkKvbdWHwuxGxz +DncKjvbdYpmFJMdq +DoDKjvbdhbPDFXRR +DnbkKvbdBdQBVimG +DoCjjvbdmIctRUqa +EPDKjvbdZyDjNbkr +EOcLKvbdQYmAHSrK +DnbjjvbdqYoHgQcx +DncKjvbdqiAKFMoF +DncKjvbdOTUWHEuQ +DoCjjvbdVTmTfLuj +DoCkKvbdddoRbWcK +EPDKjvbdIsYaTNYM +EObkKvbdRosfiedX +EOcKjvbdcTDLUEKB +EOcLKvbdmozYujxb +DnbjjvbdZirgogBf +EPCjjvbdKWUeceHJ +DnbjjvbdZoOJEdzK +EPDKjvbdEJhKVwjA +DoCkKvbdfpBzvcxI +DoDKjvbdlrYtysDi +DoDLKvbdZjSgofbG +DoCjjvbdUtMtGMVj +EPCjjvbdGGKRmiTq +EPCkKvbdQvnDcMID +DnbkKvbdKCjCqJbx +EPCkKvbdYpleImEq +DoDLKvbdjKFgjNXr +DoDLKvbdZshhxcrn +EPDLKvbdnVVZjjRf +EOcKjvbdqdFIpNua +DnbjjvbdVwIxVdEg +DoCkKvbduaEZSneI +DnbkKvbdznoqFClY +DoCjjvbdoAKzsgcn +EOcKjvbdSLZGVGkT +DncKjvbdiCObeWqR +EPCjjvbdWRnXbEkc +EObjjvbdRotGiecw +EObkKvbdKDKDQibx +DnbjjvbdlYsRsYft +EOcKjvbdUaBqSprZ +DoCjjvbdhkdcmuDZ +EOcKjvbdjgflFfNk +DoCjjvbdGKdrcINV +EOcLKvbdEJgjVxKA +EObkKvbdSxKkmzkY +DnbjjvbdsZkosBIO +DoCjjvbdBvzchePv +EObkKvbdGYtuBEXb +EPDKjvbdiLeENtby +EPCkKvbdRNXbYnUz +EObjjvbdfHkWRnQg +EObkKvbduDDVXWOo +DoCkKvbdJbjCqJbx +EPDLKvbdpedFTvBI +DncLKvbdjJegjMwr +EPCjjvbdUxgszLPO +EObkKvbdxmrhXsJD +EOcKjvbdJSxaSmXl +EPDLKvbdfNFwGmJk +EPDKjvbdsrrTYydc +DncKjvbdhgKDZVjV +EPCkKvbdZMRctNkm +DoDKjvbdezuyEhtX +EPCkKvbdEXwlUTsl +EPDLKvbdeAUQlxKG +DoDKjvbdZnmiEdyj +EObkKvbdrzMPraIO +EPCjjvbdxxIibPyk +EPCkKvbdKfFgbBRV +DoDKjvbdyzeORhIh +DnbkKvbdbAvFGPpX +DncKjvbdZoOJEdyj +DnbkKvbdrJAJdmOe +DoDKjvbdKVuFdEfi +EOcKjvbdqdFJQNvB +EPDLKvbdOEctIhkE +EPDLKvbdvBEYsOeI +DncKjvbdHELVjBjK +DncLKvbdZshhyDsO +EPDKjvbdGdKuibJj +DoCkKvbdEYXkstUM +DnbjjvbdJpyeOfNe +EPDKjvbdzoPpdbkx +DoCkKvbdMSXMytpz +DncLKvbdqZOggQcx +DoDKjvbdmuUyjirG +DnbkKvbdNVSqkNAX +DncLKvbdRotHJfEX +EOcKjvbdZyEJnCkr +EPDLKvbdyYJKBpZk +DnbkKvbdxmrgxTJD +DnbkKvbdhaoDFWqR +DncKjvbdbhmJjevx +EObjjvbdSKyGVGjs +DnbjjvbdSKxfVHKs +DnbjjvbdqdFIomua +DnbkKvbdkHflGGOL +DoDLKvbdqGDeUVaI +EObjjvbdjmBlZeHP +EPCkKvbdmttykJrG +DncLKvbdRXOEDLgc +DoDLKvbdhaoDFWqR +DoDKjvbdvvkaWAuu +DoCkKvbdbhmKKfWx +EObjjvbdSBdFMJZL +DnbjjvbdnUuZjjSG +EPDLKvbdliDtQuSB +EOcLKvbdsCFmMGjy +DnbjjvbdtunXjQsA +EObkKvbdkCkjqHUg +EObjjvbdDoCkKvbd +DnbkKvbdiZuFlROG +EOcKjvbdRNYCZNtz +EOcLKvbdxUmEpxlO +EPCkKvbddePSBwDK +EOcLKvbdauBfxKsh +DoCjjvbdtkwwBTaX +EObjjvbdmgEwmNfy +DnbjjvbdOStWHEuQ +EPCkKvbdGLFTChNV +EPCkKvbdKDJbpjDY +DoDLKvbdnPzZVjxb +DoCjjvbdFVyPomJe +DncLKvbdACqwizIp +EPCkKvbdZirhQGaf +DncKjvbdtTRsZZeD +EObkKvbdLBLHMbYR +EOcLKvbdrNZjZLgi +EObjjvbdTXkLmzkY +EPCkKvbdBsAbsfXS +EOcKjvbdeATpmXif +DoCkKvbdMSWmZuQz +DncLKvbdVTmTfMVj +DoDLKvbdZxdKODMS +EPDKjvbdZjShPgCG +EPDLKvbdxVMdpxkn +EPDLKvbdcSbjsdKB +EPDLKvbdiifIJlwr +DoDKjvbdKQydoFnF +EObkKvbdegkWRmpg +EObkKvbdiBncFXQq +DoDLKvbdNdctJJLE +EOcKjvbdUyHszKnn +EOcLKvbdSQUHKFcw +EObkKvbdUaBqSprZ +DoCkKvbdSCDeLiZL +EPCkKvbdKDKCpjCx +EPDLKvbdwygfFweS +DoDKjvbdiVZeWqtb +DoCjjvbdMRwMyuQz +DoCjjvbdsCGNLfkZ +DoCkKvbdmRxuZsEJ +EPCkKvbdkDMLRGtg +EObkKvbdGdKuibJj +EPCkKvbdePFTLUTr +EOcKjvbdXrlAlsoY +DoDLKvbdZjTHogBf +DnbjjvbdZirhQGaf +EPCkKvbdFVxooljF +DoCkKvbdbKkeoNcA +DoDKjvbdqYngfqEY +EPDLKvbdrWokcJYq +DoCkKvbdMowqVnHT +EPCkKvbdqqtjnKaN +DoDLKvbdiCPDFWqR +DoDLKvbdeJiqutzn +EObkKvbdqcdiPmvB +EPCjjvbdMgComQUk +DoDLKvbduVnYKQsA +DnbjjvbdjhHLfFmk +EOcKjvbdVvhwvEEg +DnbkKvbdZtIhyESn +DncLKvbdznopeClY +EPCkKvbdwtldqZLn +EOcKjvbdeEnrBwDK +DoCkKvbdkxrqsZHU +DoDKjvbdijGHimYS +DncLKvbdfNGWgMjL +EOcKjvbdmbKWxOnV +EPCkKvbdhtzEvrVC +DoDLKvbdhfibyWJu +DoCkKvbdXrkaMsoY +DoCkKvbdzoPpdbkx +EPDLKvbdSLYeuGjs +EOcLKvbdqlyixlIJ +EObjjvbdnVVZjiqf +EOcLKvbdyNrhXriD +DoCjjvbdRjyFtgLT +EOcLKvbdkyTRryHU +EPCjjvbdrykpTBIO +EObjjvbdlqxtzSdJ +EObjjvbdcarmSATm +EOcKjvbdXsLaNToY +EOcKjvbdlqxtysDi +EOcLKvbdaMkCStmH +DncKjvbdbAvFGPow +EPDLKvbdTulQKTaR +DncKjvbdXGYzUAOs +DncKjvbdezuxeItX +DnbkKvbdrykpTBIO +DoCkKvbdxnShXsIc +DoDLKvbdEPCjkXCd +DnbkKvbdIxUBgkpp +DnbkKvbdBiKbKhfK +DoDKjvbdKNADygVB +EObjjvbdADRxKZiQ +EPCjjvbdMfcQMotk +EObjjvbdSBcdkhxk +EPDKjvbdNrtVgFVQ +EPDKjvbdZMRdTnLm +EObkKvbdehKvRnQg +DoCkKvbdliETptqa +DoDLKvbdEXwktUUM +EObjjvbdBiLBjiFj +EOcLKvbdRkYeuGjs +EOcKjvbdmttzKjRf +EObkKvbdxrmhmRbH +DnbkKvbdyXiJaoyk +EObkKvbdxmrgwsIc +DoDLKvbdiZtfMQmf +DnbkKvbdpxoHfpcx +EObjjvbduaEZTOdh +EObkKvbdqqtkNkAm +DoDKjvbdxmrgxTIc +DncLKvbdMgColpVL +EPCkKvbdZnnJEeZj +EPCjjvbdVYgszKoO +EPCkKvbdBcpAuilf +EObkKvbdlhdUQuSB +EObkKvbdMIbLpxAS +EPCjjvbdnVUyjirG +DoDKjvbdKRZeOenF +DnbjjvbduCbuXWPP +DnbjjvbdssRsYydc +EPCkKvbdlhctQtqa +DoCkKvbdsQVoJcVf +EObjjvbdegkWSNpg +DoDLKvbdOAJTUKSA +DoDLKvbdliEURVSB +DoDKjvbdxsNhlqbH +DnbjjvbdOSsvGdtp +EPDKjvbdaaVeGPow +EObjjvbdNeETiIjd +DnbkKvbdJKEAJpHE +EPCjjvbdANIYsWzY +DoCjjvbdjvWmdCXw +EPDKjvbdrouoJcVf +DnbjjvbdiUzFWquC +DnbjjvbdFxtuBEYC +DnbjjvbdRkYfVHLT +EObjjvbdQwNccMID +DoCjjvbdXsMAmTnx +DoCjjvbdjJfIKMxS +EOcLKvbdbiMikGXY +DoCjjvbdQdDAoqES +EPCkKvbdVwIxVcdg +EOcLKvbdCEQAvKMf +EPDLKvbdzROmJKXA +EPDLKvbdZLrDsnLm +DncKjvbdjggMGFmk +DnbkKvbdddnrBvcK +DnbjjvbdpecdsvBI +EPCkKvbdijFgjNYS +EOcLKvbdUaBqTQqy +DncKjvbdkHgMFfNk +EObkKvbdZGvdAPSi +DnbjjvbdqUTgSRjt +DoDLKvbdqvpLcIyR +DncLKvbdLqvlytpz +DnbkKvbdKDJbpjCx +DoCjjvbdlqyUyrci +DnbkKvbdUQqPUuIN +EObkKvbdTlVnaVni +EOcLKvbdNdcshiLE +EObkKvbdkDMLRHUg +DncKjvbdIxTbILpp +EPCkKvbdePFTKssr +DnbjjvbddeOrCWcK +DnbkKvbdatbGxLTh +EObkKvbdqlzKZLgi +EPCjjvbdOTUVgFUp +EOcLKvbdpfEFTvAh +DncLKvbdZnnIdeZj +EObkKvbdZxdKODLr +DoDKjvbdjggLfGNk +EPCjjvbdRDcAopdS +DncKjvbdlZTRryHU +DncKjvbdZshiYdSn +EPDKjvbdatbHYLTh +EPDKjvbdLAjfmCXq +EPDKjvbdOFEUIiLE +DncKjvbdxVNFQxlO +DoCjjvbdrafNLfkZ +DoCjjvbdGFiqnJTq +EPCkKvbdUsmUFlWK +EObkKvbdLBLHMbXq +EPCkKvbdtlYWaUBX +EPCjjvbdSPsfjGEX +EObjjvbdIjEAJogE +DoDLKvbdNHCpNQUk +DncLKvbdYkqdUNkm +DoCjjvbdqquKmkBN +DnbjjvbdEuyQQMjF +EOcKjvbdURRPUthN +EObjjvbdmoyxvLYb +EObkKvbdGYtuAdYC +DnbjjvbdZeYGzhJC +DoDLKvbdCgLfHAzc +DoDLKvbdhuZeXSUb +DoCkKvbdjlbMZdgP +DoCkKvbdemGWgMjL +EPCkKvbdxxJJaoyk +EPDLKvbdqGEEsuaI +EObkKvbdEKHjVwjA +EOcKjvbdiBoDFWpq +EPCkKvbdffLzNfgA +EObjjvbdDoCjkXDE +EPDKjvbdhficZWJu +DoCjjvbdWWiYVdFH +EPCkKvbdKQzFOenF +DoCkKvbdmbJvxPOV +DnbkKvbdtAHQhAAr +EPDLKvbdmSYtzSci +EPDLKvbddeOqavcK +DoCjjvbdCEQBVjMf +EPDLKvbdlYrqsYft +DnbkKvbdJSyBTNXl +EPCjjvbdcbSmSATm +DoDKjvbdfNFwGmJk +DoCkKvbdGLErbhNV +EObkKvbdiZuFlQnG +DnbjjvbdxUmEpxlO +EPDKjvbdUWMPitBR +EPDKjvbdrafNLfjy +EPDLKvbdrWolDJZR +EObjjvbdhbPDFXQq +DncLKvbdqrUkNjaN +DnbkKvbdBiLCKhej +DoDKjvbdSCEFMIxk +DoDLKvbdffLzNgHA +EPCkKvbdZLqcsmkm +DnbkKvbdZMSEUOMN +DnbjjvbdzaAPHHCM +DnbjjvbdCIkBjhfK +DoCkKvbdZirgpHBf +DnbjjvbdIwtBhLpp +EObkKvbdeOeTLUTr +EObkKvbdUxgszLPO +EObkKvbdhzVGLqOG +DnbjjvbdOTTufdtp +EOcKjvbdZRNEhleR +EPCjjvbdKyRKSzuG +DoCkKvbdZtJJYcsO +EOcLKvbdemGXGmKL +EPDKjvbdJXsahMQp +DoDLKvbdhbObeWqR +EObjjvbdFVxpPljF +EOcKjvbdaNLBruMg +DoCjjvbdpyPIGpcx +EOcLKvbdZMRcsmkm +EOcLKvbdnGeXmNgZ +DoDLKvbdjlalZeGo +DoDLKvbdaSGDHtGL +EPCkKvbdCTAbsewS +EPCjjvbdZjSgofbG +DnbjjvbdJutecdfi +EPCkKvbdIryBSmYM +DoCjjvbdfekzOHHA +DnbkKvbdREDAoqES +EPCjjvbdtTSTYzEc +EPCkKvbdmoyyVkYb +EObkKvbdmfdxMnGy +DoCkKvbdwuNFQxkn +DncKjvbdsBelkfjy +EPDLKvbdQvmdDLhD +EPDKjvbdBhkCLJFj +DoCkKvbdeJiqutzn +EOcLKvbdqTsfrSKt +DoDLKvbdakLfOmcA +DncKjvbdKaLHMawq +EPCkKvbdznopdcMY +DoDKjvbdZtJIyDsO +DoDLKvbdsQVnjCvG +DncKjvbduDDUvuno +DoCkKvbdJYUCHlQp +DnbkKvbdnBiwYPNu +EObjjvbdlYrqryHU +EPCjjvbdqcdiPnWB +DoCjjvbdUQpoUthN +EPDKjvbdsZlQTAhO +EOcKjvbdtbbtwWOo +EPDLKvbdJuuGDdgJ +EOcKjvbdjggMGGOL +EPDLKvbdHffyxwxH +EOcLKvbdSCEElIxk +EObkKvbdIwsbHkqQ +EPDLKvbdjbkjqHUg +DnbjjvbdnQZxujxb +EPDKjvbddePRbWbj +DoCkKvbdhtydwRuC +DoDKjvbdCDoaWKMf +EOcKjvbdRjyGVGjs +EObjjvbddCTNSATm +EOcKjvbdZLrETmlN +EPDKjvbdlrZUysDi +EOcLKvbdwtmFRZMO +EPCjjvbdtTRrxydc +EObjjvbdeFPSBvcK +DoCkKvbdwuNFRZLn +DnbjjvbdhytfLpmf +EPCkKvbdrykpTAgn +EObkKvbdRDcApRDr +DoCjjvbdZnnIeFZj +EOcLKvbdePErkUTr +DoDLKvbdrbGNLgLZ +EObjjvbdVZIUZjoO +DncLKvbdzHYlAMeX +DnbkKvbdbsDLTcia +EPCjjvbdOSsufdtp +DncKjvbdpstHSSLU +DncKjvbduDDVWuoP +EPDKjvbdiMEdNuCy +EOcKjvbdtbcVWuno +DoDKjvbdqUTgRqjt +DncLKvbdZyDjNcLr +DoDLKvbdRWmdDLgc +DncKjvbdZLqdUOMN +DoDKjvbdijGIJlwr +EObjjvbduMYXBUAw +DoCkKvbdHDkWJajK +DoCjjvbdRpTfifEX +DoCjjvbdUyHszKnn +EPDKjvbdqZPIGpdY +EPDKjvbdRWmdCkhD +EObkKvbdsrrSyZdc +EOcKjvbdYlSDtNlN +DncKjvbdbKkennDA +EPCkKvbdiZuGMQmf +EPCkKvbdEztQeLbi +EPCkKvbdaRebgsfL +DoCkKvbdBcpAuilf +EOcKjvbdyNsIYShc +EPCjjvbdcIlijewY +DoCjjvbdmbKXXoOV +DncLKvbduDCtwWPP +EPDKjvbdnCJwXoOV +EPCjjvbdjcLkQgUg +DnbkKvbdtcCtwVno +DncKjvbdGFjRmiUR +DncLKvbdrWpLcJYq +DncLKvbdKWVGDdfi +EPCkKvbdnUuZkJrG +EPCjjvbdiCPCeWqR +DncKjvbdEYYMUUTl +EObjjvbdrpWOicWG +DoDKjvbdFejSOIsq +DnbjjvbdqiAJdmOe +EOcKjvbdUyITzKnn +DoDKjvbdfMfWgMjL +DnbkKvbdXrkaMtOx +DoCkKvbdKefIBaRV +EPCjjvbdyTNhlqbH +EPCjjvbdtlXwBUAw +EOcKjvbdRosfjFdX +DoCjjvbdYpldiMeR +DnbjjvbdwzIFexFS +DncKjvbdSCDeLhyL +DncLKvbdrzLpSaHn +DncKjvbduCcVWuoP +DoDLKvbdatagXkTh +DnbkKvbdsCGMlGkZ +EPCkKvbdkWXNdBww +DncKjvbdJcKCpjCx +EOcKjvbdNxPVzdNt +EPCkKvbdKRZeOfOF +DncLKvbdcIljLGXY +EPDLKvbdVhXuwfxz +DoCjjvbdaoffckzd +EOcKjvbdLhbLpxAS +DnbjjvbdnHExMmgZ +EObjjvbdbhljKfXY +DnbjjvbdkDLkRGuH +EPDLKvbdfHkWSORH +EObjjvbdzoPqFClY +DncKjvbdznopdbkx +EObjjvbdnUtzLKRf +EPCkKvbdZQldiMeR +DoDKjvbdFjeScHmV +EPDKjvbdEOcLKwCd +EPDKjvbdyqOmJKXA +EOcKjvbdSQTfiecw +DoDLKvbdDoDLLXDE +DoDKjvbdhlEcmuDZ +EObjjvbdfHkWRmqH +DnbkKvbdIGfzYwwg +DncLKvbdUWMPjUAq +EPDKjvbdkHflGGOL +DnbkKvbdnPzZVjyC +EPDLKvbdSBceLiYk +DncLKvbdUtMsfLvK +DnbkKvbdbrcLTdJa +EObkKvbdIwtCHkqQ +EPDKjvbdtbcVWvPP +EObkKvbdtbcVWuoP +DoDKjvbdKVtfEFGi +EPCjjvbdMRvlytpz +DoDLKvbdwuMeRYlO +EOcKjvbdlhdTqVRa +EPDKjvbdiGjCyVjV +DnbjjvbdrDeJQNua +DoDKjvbdrbFmMHKy +EOcKjvbdfHjurNpg +DnbkKvbdZRNFJMeR +EOcKjvbdqFdEsvBI +DnbjjvbdZirgogCG +DoDLKvbdDncKjwDE +DoCkKvbdjhGlFfOL +EObjjvbdmaivxOnV +EObkKvbdKkAhWAJy +EOcKjvbdNrtWHEuQ +DnbkKvbdFkFTChMu +EObkKvbdeOdrjstS +EOcKjvbdIwsbHlQp +DoCkKvbdeATpmXif +EOcLKvbdKaKgMaxR +EObkKvbdUGznLvvF +DnbkKvbdbLMGPODA +EObjjvbdTkvOaVoJ +EOcKjvbdsQVoKDVf +EPDKjvbdznopdcLx +DoDLKvbdpfDdsvAh +DncKjvbdrDdhpNua +EOcLKvbdhficZVjV +DncKjvbdFxuVBEYC +EPDKjvbdzjVQQETU +EObkKvbdKRZePGNe +EObjjvbdDncLLXDE +EOcLKvbdYkqctNkm +DoDKjvbdtvOYKRTA +DoCkKvbdmajWxPNu +DncKjvbdIjEAJofd +EPCkKvbdiCPDFWqR +EOcLKvbdIHHZxwwg +EOcKjvbdYpmEiNFR +EOcLKvbdQmYCZNtz +EOcLKvbdVYhTykPO +EPCkKvbdJKEAKPfd +DoCjjvbdRkYfUfjs +EPDLKvbdlZTSTZGt +DoDLKvbdNGbpNQVL +DoCjjvbdvAdZTOdh +EPCjjvbdliDsqUqa +EPDKjvbdSPsfiecw +EOcKjvbdYlRcsmkm +DnbkKvbdwXMAvBVu +EPCkKvbdRjxfVGjs +EOcLKvbdCIkCKiFj +DoCkKvbddxZssrFz +EOcKjvbdREDApRES +EOcLKvbdTpqPVVIN +EObjjvbdaaWEeoow +EOcKjvbddeOrCXCj +EOcLKvbdAMgySvyx +EPDLKvbdNPwqVnHT +EObkKvbdwuMeRYlO +DoCkKvbdTkuoAuoJ +EPDKjvbdmJDspuRa +EPCjjvbdNHCpNQVL +DncKjvbdGcjvKBij +EOcKjvbdbQHHELzd +EPDKjvbdPxmAGrqj +EPCjjvbdRbDdkiYk +EPDLKvbdTAFJHand +DoDKjvbdqmZjZMHi +EObjjvbdtSrTYzFD +DncLKvbdhlEcmtby +EObjjvbdmJEUQuSB +DncKjvbddndsKstS +EPDLKvbdmgFYNOGy +DnbjjvbdSCEElIyL +DncKjvbdmaivxOmu +DoDKjvbdFVyPomKF +DnbkKvbdMpXqWOHT +EObjjvbdKefICBRV +EObjjvbdqGDdtWBI +DnbkKvbdCJLCLIfK +EObkKvbdLqwNZtpz +DoDLKvbdiifHjMwr +DoCkKvbdddoRawDK +DncKjvbdbrcKscjB +DnbjjvbdrSVLNkAm +DnbjjvbdffLynHHA +EObkKvbdTAFJHbPE +DncKjvbdDncKkWcE +EOcLKvbdrouoKDVf +EOcLKvbdZisIPfbG +EOcLKvbdiGicYuiu +DoDLKvbdVgxWXfxz +DoCkKvbdffMZmgHA +EObjjvbdWfZZtAPT +EPDLKvbdEzsqElCi +DoCkKvbdYSlAlsoY +EPDLKvbdFWYpPmKF +DoDKjvbdkNCMZdfo +EPDLKvbdehLWSOQg +DnbjjvbdxxJKCPyk +EOcLKvbdMfcQMpVL +EOcLKvbdnVVZkKRf +EObjjvbdczYoxZQb +EPCkKvbdSQUGiedX +DoDKjvbdeuzwpJzs +DoDLKvbdqZPHfqDx +DoCjjvbdKeehCBQu +DnbkKvbdADSYJyiQ +DoCjjvbdFkFTDHlu +EPDKjvbdZoOJEdzK +EPCjjvbdZjTIQGbG +DncKjvbdZHWdAOri +EPCjjvbdeXystRez +EObkKvbdIxTagkpp +EObjjvbdxZgfFxEr +DoDLKvbdjhHLfGNk +EObkKvbdTfznMWue +DoDLKvbdOSsufeVQ +DncKjvbdVUNTelWK +EPCjjvbdZQmFImEq +DnbjjvbdkClLQftg +DnbjjvbdRXNdDLhD +DncKjvbdTqQoVUgm +EPCjjvbdNQYRVmgT +DoDLKvbdnUuZjiqf +DoDKjvbdbsCjsdJa +EOcKjvbdFkEsDINV +DoDKjvbdyOTHxSiD +EOcKjvbdkMbMZdgP +DnbkKvbdeEnqavcK +DoCkKvbdxZhFfYEr +DncKjvbdNPxQunGs +EOcLKvbdOYOuzdNt +DncKjvbdJbicRKDY +DncKjvbdjAQHAofj +EOcKjvbdWWiYVcdg +DnbjjvbdjFKftoAO +EPCkKvbdTXkLmzjx +EPCkKvbdWSNxBeMD +DoCkKvbduMXwBTaX +DoDLKvbdLBKfmBxR +DoCjjvbdEObjjwDE +EPDKjvbdTlVnaVoJ +DoDLKvbdhgJcZViu +EObjjvbdatbHXjtI +EOcLKvbdZeXfzgiC +EPCkKvbdeFPRbXCj +EPCkKvbdZQleJMdq +DnbjjvbdUWLojUAq +EPCjjvbdFaOpyJzm +DnbkKvbdANIYrwZx +EPCkKvbdbBWEeopX +DoDLKvbdczYpYYpb +EPCkKvbdbVBfxLTh +DoDKjvbdLBKflawq +DoCkKvbdyOSgxSiD +EPDKjvbdkDLkQgVH +EObkKvbdjmBlZdfo +EPDKjvbduoTzqLOt +EOcLKvbdaRebhUFk +EPDKjvbdatbGwjtI +EOcLKvbdCIjbLIfK +DncKjvbdkIGkeemk +DncKjvbdxVMeRZMO +EOcKjvbdRXODcMHc +DnbjjvbdqquLOLAm +DoDKjvbdDHLfHAzc +DoCkKvbdnVVZkKRf +DoDLKvbdGcjvJbKK +DoCjjvbdzoQRFDLx +DoDLKvbdmuUzLKRf +EPDLKvbdtumwiqTA +EOcKjvbdmJDsptrB +EPCjjvbdIGgZxwwg +EPDLKvbdxLXDgzzG +DnbkKvbdQwNdCkhD +DnbjjvbdcasNSAUN +EPCkKvbdTulQKTaR +EOcKjvbdhgJbyVjV +DoDLKvbdKVteceHJ +DnbjjvbdHgGzYwxH +EPCjjvbdxnSgxTJD +EPDKjvbdyYJKCPzL +EOcKjvbdOFDtJJKd +EObkKvbdRadEkhxk +DoCkKvbdiifHjNXr +DoCjjvbdnUtyjirG +EObkKvbdJpydoGNe +DoDKjvbdZLqctOLm +DnbkKvbdsBfMkfkZ +EOcLKvbdOStWGeVQ +EPDLKvbdijGIJmYS +DoDLKvbdxxJJbQZk +DncKjvbdHbLydzAD +EOcLKvbdyTNiMqag +EPDKjvbdMgComQVL +DoDLKvbdzitoocsU +EPDKjvbdsBfMkfjy +DoCkKvbdFyUtaEYC +DoDLKvbdJKEAJpGd +DoCkKvbdygZMAMeX +EPCkKvbdJqZdoFnF +DnbkKvbdiBnbdvqR +EOcLKvbdSQUGjFdX +DnbkKvbdmSYtzTEJ +DoCjjvbdehKvSOQg +EOcLKvbdGckVibJj +DncKjvbdhficYvJu +EPDKjvbdwuMeRYkn +EOcLKvbdFejSNiUR +EPCjjvbdOFEUJJLE +DnbkKvbdXsLaMtOx +EPDKjvbddZyPxYpb +EPCkKvbdhzVFkqNf +DoDKjvbdOEdUIiLE +EPCkKvbdnGeXmOHZ +EObkKvbdiMEdNuCy +DoDLKvbddoFTLTtS +EObkKvbdIxTbHlQp +DncLKvbdZRMdhmEq +DoDLKvbdZnmheEyj +EPDKjvbdKeegbApu +DncLKvbdNVTSLNAX +EOcKjvbdKDJbqKCx +EPCjjvbdFfKSOIsq +EPCjjvbdxnShYSiD +EOcLKvbdOStWHFVQ +DncLKvbdsPvOicWG +DnbjjvbdxnTHwsJD +DoDKjvbdLAkGmBwq +DoCkKvbdwMvAMceN +EOcLKvbdmRyVZsDi +EPCkKvbdmpZyWKyC +DoDLKvbdrykpTBIO +DoCjjvbdVgwvYHYz +EPDLKvbdTvMPjUBR +EOcLKvbdgFkzOGgA +DnbkKvbdVBBpsRRy +DnbjjvbdRzKISbvA +EObjjvbdxnTIXsJD +EObjjvbdZoOJEdyj +EPCjjvbdHDjuibKK +EPCjjvbdezuxdiUX +EOcKjvbdYTMAmToY +EObjjvbdJYTbILpp +DoDKjvbdkClLRHUg +EPDKjvbdTkvPAvPJ +EObkKvbdeAURNXjG +DncLKvbdTukpKUBR +DoCjjvbdcTDKsdJa +DoDKjvbdBsAcUGXS +EObjjvbdDoCjjvcE +EOcKjvbdtlYWaTaX +DnbjjvbdRDbaPpcr +EPCjjvbdrylPsAgn +DoCkKvbdOhAYZAYa +DnbjjvbdiUydwSVC +DoCjjvbdwzIFfYFS +DoCkKvbdZshiZDrn +DoCkKvbdZoOIddyj +DncKjvbdpssgSSKt +EPCjjvbdrSUkNkBN +EPDKjvbdjJfIJlxS +EOcLKvbdxVNFRYkn +DoDKjvbdWWhwvEFH +DncLKvbdRDcBQQcr +DnbkKvbdliETpuRa +EPCjjvbdZRMdiMeR +DnbkKvbdiMEdOVCy +EPCjjvbdznpREbkx +DoCkKvbdwzIFexFS +DnbjjvbdmSYuZrdJ +DoDLKvbdCWzchdov +EPDLKvbdpfEFTvAh +EPDLKvbdyOTIYTIc +DncKjvbdNQXqVnHT +DoDLKvbdCgMFgAzc +EOcKjvbdIwtBgkpp +EPDKjvbdRjyGUfjs +EObjjvbdACqwjZiQ +DoDKjvbdpstGrSKt +DnbkKvbdnGdwmOHZ +DncKjvbdiZtfLpnG +DoDLKvbdaSGCgtFk +DoCkKvbdFfJqnIsq +EPCkKvbdkNCLzEgP +EOcKjvbdFeirOJTq +EOcLKvbdUtNUGMWK +EObkKvbdSQUHJfEX +EPCkKvbdqquKmkBN +DnbjjvbdbhmKKfXY +DoCkKvbdIsYaTNXl +DoCjjvbdZoNheFZj +EOcLKvbdBhjbLIfK +EOcKjvbdatafwjsh +DoCjjvbdkxrrSyHU +EPDLKvbdSCEElIxk +EOcKjvbdfMevfmKL +EPCjjvbdMJBlRYAS +DoCjjvbdSxKkmzkY +DnbkKvbdkNCLydgP +EObkKvbdkxsSTZHU +DoCjjvbdRpUGiedX +EOcKjvbdjblLRGuH +EObkKvbdyTNiMrCH +DnbjjvbdZeXfzhJC +DoDKjvbdZxdJmblS +DncKjvbdOStWHEuQ +DoCkKvbdyNsHwsIc +EPDKjvbdkxrqryHU +EObjjvbdZLqctNlN +DoDLKvbdxnSgxShc +EPDLKvbdnBjWwoNu +DoDKjvbdkIHMGGOL +EObjjvbdqUUGrRkU +DncLKvbdRjyGVHKs +EPDKjvbdhfjCyWJu +EPCkKvbdHELVjBjK +DncKjvbdgQBzvcwh +DoDLKvbdVAaqSpqy +DoCkKvbdySnJNSBg +DoDLKvbdpeceUWAh +DncLKvbdaRebgsfL +EOcKjvbdZLqctNlN +EObjjvbdtbbtvvPP +DoCkKvbdZMSDtNlN +EOcKjvbdsBelkfjy +EPDLKvbdTpqPVVIN +DnbjjvbdBiKbKhfK +DnbjjvbdOFEUIiKd +EPCkKvbdSiZjRAAl +EObkKvbdwjwDgzyf +EPCjjvbdhlEdNtby +EPCjjvbdhtydwSUb +EOcKjvbdnQZyVjyC +DoDKjvbdRzKIScWA +EOcLKvbdLBLHNCXq +DoDLKvbdssSTYzFD +EObjjvbdEvYpPlie +DncLKvbdhficYvKV +EPCjjvbdnUuZkJqf +DnbjjvbdXnRAXtut +EPDKjvbddijRutzn +EOcLKvbdEvYpPljF +DoCjjvbdTulQKUAq +EObkKvbdxmsIYShc +EPDLKvbdkyTRryHU +EObjjvbdCEQAvKNG +EObjjvbdGYuVBEYC +EPDKjvbdvAdYsOeI +EObjjvbdRpUHKGEX +EPCkKvbdKDJcQjDY +DoDLKvbdunszqKoU +DoCjjvbdJvUfEEfi +DncLKvbdrpWPJcWG +DoCkKvbdajkfPNcA +DnbjjvbdFpATXHFy +EObkKvbdFfJrOJTq +DncLKvbdZnnJFEyj +DoCjjvbdOEctIiKd +EPDLKvbdVhXuxGxz +EPDKjvbdySmhlrCH +EOcKjvbdiGjDZWJu +DncKjvbddZyQYZRC +DncLKvbdziuPpETU +DncLKvbdJTYaTNXl +EPCjjvbdNddThiKd +DnbkKvbdbAudepPw +EOcKjvbdMowpunHT +DoDLKvbdmbKXYPNu +DoDLKvbdezvZEiTw +DnbjjvbdrMyixkgi +DnbkKvbdKWVGEFGi +DoCjjvbdkDLjpftg +DnbjjvbdJqZePFme +EObkKvbdDwxLsssl +EPCjjvbdmoyyWLYb +EPCkKvbdFjdrcHmV +DoCkKvbdDwxLtTsl +EOcLKvbdoAKztHdO +EPDLKvbdTkuoAuoJ +DncLKvbdURRPVVHm +EPCkKvbdKCicRJcY +DoCkKvbduDCuXWOo +DoCjjvbdRXNdDMID +DoDKjvbdBcpBWJlf +DoCjjvbdTqROttgm +DncKjvbdRadFMIxk +DoDLKvbdCSaDTewS +EOcKjvbdQlxCYmtz +DncLKvbdeOeSkUTr +DnbkKvbdTqQntthN +DnbjjvbdhbObdvpq +EPDLKvbdMowqVmgT +DncKjvbdANIZTWzY +EPDLKvbdiVZeXRtb +DncLKvbdYNqAXtvU +EOcKjvbdfIKurNpg +DoCkKvbdFpATWfey +EPCjjvbdHkazmwRL +DoDKjvbdJvUfDdgJ +EPCkKvbdSBdElIxk +DoCkKvbdbsCjtEJa +DoDLKvbdvBEYsOdh +EOcLKvbdGGJqmhsq +EOcLKvbdJSyBSlxM +DncLKvbdnQZxukZC +EOcLKvbdySnIlrCH +DoCjjvbdIjEAKPgE +DoDLKvbdhlEcnVDZ +EPDKjvbdZeYGzghb +EPDKjvbdbKlGOnDA +EPDKjvbdkMbMZdgP +EOcLKvbdDoCkKwCd +DnbjjvbdLBLGlbXq +EPDLKvbdZxcinCkr +DoCkKvbdqTsfrRjt +DoCkKvbdADSYJzIp +DoDKjvbdbUagYKsh +EObjjvbdjAQHAofj +EOcKjvbdDoDKkXDE +EPDKjvbdSZigsCvA +EPCkKvbdKRZePGOF +EPCjjvbdKaKgNCXq +EObkKvbdxxJKBoyk +EOcKjvbdxmrgwsIc +DnbkKvbdmozYvKyC +DoCkKvbdqquLOLAm +EObkKvbdDncLLXCd +EPDLKvbdjcMKpftg +EPCjjvbdwkXDgzzG +DoDLKvbdHffyxwwg +DoCkKvbdvAdZSneI +EOcLKvbdrovOjDVf +EOcLKvbdsPuoJbuf +DoDLKvbdySnJNSBg +EObkKvbdXsMAltOx +DncLKvbdFfKSOJTq +EPCkKvbdddnrCWcK +DoCjjvbdySmhlrBg +DnbjjvbdNxPVzcnU +DncKjvbdhtzEvrVC +DoCjjvbdQwODblHc +DoDLKvbdjcLjpgVH +EOcLKvbdbKlGOmcA +EPDKjvbdfMfWflik +DncKjvbdmbJwXnmu +EOcLKvbdTkuoAvOi +DnbjjvbdsZkoraIO +DoDKjvbdZMSEUOLm +EOcLKvbdsCFmLfkZ +DncKjvbdUxhTyjnn +EPDKjvbdRosfjGEX +EOcLKvbdmuUzKirG +EPCkKvbdGGJrOItR +EObjjvbdEXwktUUM +DnbkKvbdiifHimXr +EPDKjvbdmJDspuSB +EObjjvbdwyhGFwdr +DncKjvbdatafwkUI +EPDLKvbdYNqAXtut +DoDLKvbdEPCkLWcE +EOcLKvbdqceJQOWB +EPDKjvbdySnJNSBg +DnbjjvbdyzdnSIIh +DoDKjvbdrDdiQNvB +DoCkKvbdYkqdTnLm +DoCkKvbdlZTSTYgU +EPDKjvbdMpXqWNfs +EObkKvbdJbicQjDY +DoDLKvbdGAoRYizm +DncKjvbdmgExNOHZ +DoCjjvbdznoqFDLx +EOcKjvbdieLGtoAO +DoCjjvbdMfbpMotk +EObkKvbdyzdnSHiI +EObkKvbdcSbjscia +DoDKjvbdNGcQNQUk +EPDKjvbdNGbpMpVL +DoDLKvbdUQqPVUgm +DnbjjvbdVvhwuceH +EPDKjvbdDxXkstTl +EPCjjvbdPyNAHTRj +EPDLKvbdeOdsLTtS +DoDKjvbdTAEiICPE +DoDKjvbdZisIQGaf +EObkKvbdxVMdpxkn +EPCkKvbdnUtzKjRf +EOcKjvbdhtydvrVC +DoDKjvbdbrcLTcia +EPDLKvbdbhlikFvx +EPDKjvbdANIZSwZx +EPDKjvbdtbbuXWOo +EObjjvbdliDtQtqa +DncLKvbdGLFScIMu +DnbkKvbdfMfXGljL +EObkKvbdCTBDTewS +EPDKjvbdSiZiqAAl +EOcKjvbdFfKSNhsq +EPCjjvbdyYJKBpZk +DncKjvbdAMgyTWyx +DnbkKvbdpaJFAXIE +EOcKjvbdEYYMUUTl +EPCjjvbdeFOrBvcK +DoDLKvbdptUHSRkU +DoCkKvbdOYPVzcnU +DnbjjvbdijFhKMxS +DnbkKvbdEKHivXjA +DncLKvbdsPvOicVf +DoCjjvbdmbJvxOmu +EOcKjvbdDxYMUUTl +DoDKjvbdZtIhxdTO +DncKjvbdTlVoAuoJ +DoDKjvbdFyUuBDwb +EObkKvbdQYmAGsSK +DnbkKvbduLwwAsaX +EPDKjvbdegkWRmpg +EPDLKvbdRDcAoqDr +DoCjjvbdFWZPolie +DoCkKvbdbhmJkGWx +DncLKvbdrWpMDJYq +DnbjjvbdaaWEeoow +DoDLKvbdzHYlANFX +DoCkKvbdjFLHUoAO +DnbjjvbdZyEKNbkr +DoDKjvbdLrXMyuQz +EPDLKvbdwNWAMdFN +DoCkKvbdkWXODaxX +EOcKjvbdraelkgKy +EOcLKvbdmSZVZsDi +EPCjjvbdkMbLzEfo +EObjjvbdaSFbgtFk +EObkKvbdmIctRUqa +DncKjvbdhtydvquC +EPDKjvbdZoOJEeZj +DoDLKvbdyXiJaozL +EOcLKvbdVwIxWEFH +DnbkKvbdYpmFJMdq +EPDLKvbdjKGIKMwr +EPCkKvbdFpASwHGZ +DncKjvbdKQzEnfNe +DoDLKvbdkVwODaxX +EPCjjvbdzaAOffal +EObjjvbdnHEwlnGy +DncLKvbdLqwMyuQz +EPCkKvbdWRnXaeMD +DoCkKvbdcbSlrAUN +EPDKjvbdMJBlRYAS +EOcLKvbdZxcimbkr +DncLKvbdCDpBVimG +DoDKjvbdGdKvKBjK +EPDLKvbdziuPodSt +DnbkKvbdbrbjtEKB +EOcLKvbdmIcsptqa +EPDKjvbdMRwMyuQz +DoDLKvbdfHkVrNqH +DnbkKvbdLZRKSzuG +EPDKjvbdTfzmkwWF +EOcLKvbdSKxeuHLT +EPDLKvbdkHgLfGNk +DoDLKvbdVhXuxHYz +EOcKjvbdkHgMGGOL +DoDKjvbdEARhmZvw +EPDLKvbdjKFgimXr +EObkKvbdSQUGiecw +EPCjjvbdjKFhJlxS +DoDKjvbdDxXlTtUM +EPDLKvbdelfWgMik +EOcKjvbdtcDVXWOo +DoDKjvbdiZuFlRNf +DoCkKvbdsBellHKy +EPCkKvbdjlbLyeGo +EOcKjvbdhfibxujV +EObjjvbdhyuGMROG +DoDLKvbdgQBzvdYI +DoDKjvbdeATpmXjG +EPDLKvbdjKFgilxS +DoDKjvbdrpWPJbuf +DncLKvbdDncLKvcE +DoCkKvbdkVvmdCXw +DncLKvbdGcjujCJj +DncLKvbdpxngfpcx +DnbjjvbdiCPCdwQq +EPDLKvbdijFhJlwr +DncKjvbdhgJbxvKV +EPCjjvbdZxcjNbkr +DncKjvbdZQleJMdq +DncLKvbdyfxlAMeX +EPCjjvbdFfJrNiUR +EPDLKvbdzjVQPdSt +DoDLKvbdjAQHBPfj +EObjjvbdZoOJFEzK +EObkKvbdFpATWgGZ +EPDKjvbdvAcxrneI +DoDLKvbdxrnJMrCH +DoCkKvbdjmCLydfo +EPCkKvbdegjuqmqH +DoCkKvbdSBdFLiZL +EObkKvbdbAvFFopX +DncLKvbdGQASwGey +DnbkKvbdQccAopdS +EPCkKvbdZshiYdSn +EPCjjvbdHDjujCKK +EObjjvbduDDVWuno +DoCjjvbdzjVQQDsU +EOcLKvbdeFOqavcK +DoDLKvbdyXhibPzL +DoDLKvbdrzMPsAgn +EObkKvbdUtNTfMWK +EOcLKvbdLqwNZuQz +EPDKjvbdqBJFAXHd +DoCkKvbdnUuZkKSG +DoCjjvbdZHXEAOsJ +DncKjvbdQdDBPpcr +DnbkKvbdCIkBkIej +DnbkKvbdMgDPmQUk +DnbkKvbdxxIjCPyk +DnbjjvbdZsiIxdSn +DoCkKvbdADRxJzJQ +EObjjvbdkxsSTZHU +DncKjvbdWXIxVdEg +DnbjjvbdLrWmZtpz +EPDKjvbdhzUelQnG +DoDLKvbdSBceLhxk +EObjjvbdWIXvYGxz +EPDKjvbdEYXktUUM +EObkKvbdhlFENtby +EPDLKvbdNwnuzcmt +EOcKjvbdaaWEfPpX +DncLKvbdddoSCWcK +EPDKjvbdmaiwXnnV +DoDLKvbdMgDQMpUk +DoDLKvbdjFKfuPAO +DncLKvbdnGeYMmfy +DncLKvbdrSUjmkAm +EOcLKvbdfHkWRnQg +DnbjjvbdnCKWxPNu +DnbjjvbdraemLgKy +EObkKvbdWWiYWDdg +DoCkKvbdKfFgaaQu +EPCkKvbdaSFcIUGL +EOcKjvbdkxrqryHU +DncKjvbdRDbaQQcr +DncLKvbdbVBgXjtI +DoCjjvbdqZPHfqDx +DnbkKvbdcyxowxpb +EPCkKvbdWXIxWDeH +DoCkKvbdyXiKBozL +DnbkKvbdlZSrTYft +EObjjvbdGdKujBij +DnbjjvbdtcDVXWPP +DoDKjvbdZnmhddyj +EObkKvbdTukoisaR +EObkKvbdzoPqFCkx +DncLKvbdLhalQxAS +EPCkKvbdVwIwudFH +DoDKjvbdjKGIKNYS +DoDLKvbdjhHLeenL +EPDKjvbdJTZBSlxM +DoCjjvbdFaOqZJzm +DoDLKvbdnBjXXnnV +DoCjjvbdeFPSCXDK +EPCjjvbdbAvFGPow +DnbkKvbdVwIwvEFH +EObjjvbdqUTfrSLU +DncKjvbdqlyixkhJ +DoDKjvbdSLZFuGjs +DncLKvbdsCGNLfkZ +EPDLKvbdaofgDkzd +DoCkKvbddiirWUzn +EOcKjvbduCcVWuno +DnbkKvbdSPsfjGDw +DoCkKvbdFWYpQMie +DoDLKvbdRECaQRES +EPDLKvbdhfibyVjV +DnbjjvbdqTsgSSLU +EObkKvbdrXQMChyR +DncLKvbdNrtVfduQ +EObjjvbdiUzEvqtb +DncKjvbdUaCQsRRy +EPCjjvbdRbEEkiYk +DncKjvbdUtNUGMVj +EPCjjvbdzHYlAMeX +EPCkKvbdeEoRbXCj +DoDLKvbdcScLUDia +DoDLKvbdtbbuWuno +EOcKjvbdbUafwkTh +DoCjjvbdtcDVXWOo +EOcKjvbdHgGyxxYH +EOcLKvbdWSOXbEkc +DoCkKvbdKeehCBRV +DncLKvbdMgComQVL +DoDKjvbdUMVoBVoJ +DoCjjvbdzoQRFCkx +DoCkKvbdUWMQJsaR +DnbjjvbdkNCLydgP +EOcKjvbdmozYvKyC +DnbkKvbdmgExMnGy +DncKjvbdznpQeDMY +DoDKjvbdZxcjNbkr +EOcKjvbdqdEiQNua +EPDLKvbdfHkVrNpg +DnbkKvbdXsMBMsoY +EObkKvbdcJNKLGXY +EPDLKvbdVqmwbEkc +EPCkKvbdJcJbpibx +EObjjvbdYNqAXtvU +EObkKvbdjAQHApGj +EPDKjvbdrbFmMHLZ +DnbkKvbdPIAXyAYa +DoDKjvbdSLZGVHLT +DoCkKvbdDnbkLWcE +DncKjvbdzoPpeDMY +EPDKjvbdQwNdDLhD +EPDKjvbdhfjCxuiu +DoCjjvbdajkenmcA +EPDKjvbdtTSTYyeD +DoCjjvbdijFhKMwr +DoDLKvbdpfDeTuaI +EPCjjvbdJXtCHlQp +EOcKjvbdjbkkRGuH +EObkKvbdVTlselWK +DoCkKvbdauCHXkTh +DnbjjvbdSLZGVGjs +DoDLKvbdehLWRmqH +DncKjvbdSBdFLhyL +DoDLKvbdmajXYPOV +EOcKjvbdpeceTvAh +EPCjjvbdNdctIhkE +EOcLKvbduWNwjQsA +DoCjjvbdtvOYKRTA +DncKjvbdqiAJeNOe +DnbjjvbdUtNUGLvK +EPDKjvbdMgColotk +EOcKjvbdQlxCZNtz +DoDKjvbdmfdwmNfy +EPDKjvbdrovPKDVf +DnbjjvbdDjIJuwjA +EPCjjvbdsBfNMHLZ +DoCjjvbdJbjDRJcY +EPDLKvbdZRMeJNEq +EPCkKvbdRkYfVGkT +DncLKvbdRbDeLiYk +EPCjjvbdqiAJdloF +DoCjjvbdFyVUaDwb +DoCjjvbdMRvmZtpz +DoDLKvbdGQATWffZ +EPCjjvbdwtmFQyMO +EOcKjvbdTIzKRAAl +DoCkKvbdsQVnicVf +DoDLKvbdFfKRmhtR +EOcKjvbdsCFmLfjy +DoDKjvbdddnqbXDK +DoDKjvbdYgWdAOri +DoCkKvbdmuUyjjSG +EObkKvbdhficYvJu +DoCkKvbdQlxCZNtz +EPCkKvbdGZVUaEXb +DncLKvbdEXxMTtTl +DoDKjvbdGFirNiUR +EPCjjvbdpssgRrLU +EObkKvbdVZHsykOn +DncKjvbdyTOJMrBg +EOcKjvbdRacdlIyL +EObkKvbdiCOcFWqR +DoDLKvbdRjxfVGkT +EOcLKvbdiBncFXQq +DncLKvbdnQZxukYb +DoDKjvbdpaIeAWgd +DncKjvbdVqnYCEkc +DnbjjvbdZRMdhmEq +EPCjjvbdhgKDYuiu +EOcLKvbdCIkBjhfK +EPCkKvbdZnmhdeZj +EOcKjvbdTppnuUhN +EOcLKvbdbVBfxKsh +EPDKjvbdFVxpQNKF +DnbjjvbdjvWnDaxX +EObjjvbdANIYrwZx +EObjjvbdauCHXjtI +EObkKvbdZirgpGaf +EObjjvbduoTzqLPU +DoDLKvbdxZhFeweS +DoCjjvbdILaznWqL +DncLKvbdaMkBrtlg +EObjjvbdNrtVgFUp +DnbkKvbdRzKHsCvA +DoCkKvbdiZuFkpnG +DnbkKvbdEztRElDJ +EPCjjvbdRECaQQdS +EPCjjvbdqqtkNkAm +EObkKvbdyNrhXriD +DoDLKvbdegkWRmqH +DncKjvbdNQXqWNfs +DoDLKvbdRadFLhxk +EPDKjvbdxUmFQyLn +EPCjjvbdxxJKBoyk +EObkKvbdnVUzLJqf +DnbjjvbdSQUGiedX +DncLKvbdrpVnjCvG +DoDKjvbdZirgpGbG +DncKjvbdOAJTUJrA +DnbjjvbdUyHsyjoO +EPDKjvbdfpBzvdXh +EPCjjvbdyTNhlqag +DncKjvbdLBKflaxR +DoCjjvbdVwJXvEEg +EOcKjvbdVqnXadlD +DoDKjvbdyNrgxSiD +EObjjvbdnVVZjjRf +DnbjjvbdFeiqmiTq +EObkKvbdFVxpQMie +DnbkKvbdIBkydzAD +EPCkKvbdZjTHofaf +DncLKvbdnPzYukZC +EObkKvbdLYqKSzuG +Dnbjjvbdxmrgwrhc +EObkKvbdTkuoBWOi +EObkKvbdIrxaSlxM +EOcLKvbdJqZeOfOF +DoCjjvbdBhjbKiFj +EPCkKvbdrDeJPnVa +EPCkKvbdNwoVzcnU +EOcLKvbdXmqAYVWU +EPCkKvbdZeYGzhJC +EOcKjvbdNddUIhjd +DoDKjvbdjggLeemk +EObkKvbdxZgefXeS +EOcKjvbdgFkzOGgA +EObkKvbdNdcsiIkE +EPDKjvbdbiMikFwY +EPDKjvbdelfWfmJk +EOcKjvbdHELWJajK +DoDLKvbdZRMeIldq +EOcLKvbdRXNccMHc +EPCkKvbdQlxCZNtz +DoCkKvbdyTOJMqag +EPDLKvbdCTAcTevr +EOcKjvbdrpVnicWG +DnbkKvbdZLrETmkm +EOcLKvbdRpTfifEX +DnbjjvbdQcbaPqDr +DoCkKvbdEuxpQNKF +EPCjjvbdNeEThiKd +EPDKjvbdVYgtZjoO +DoCjjvbdZRMdhleR +DoCjjvbdZsiIyDrn +EPDLKvbdaSGCgtGL +EPDLKvbdqTtGqrKt +DoCkKvbdnVUzKjSG +EPCjjvbdzQoMiJwA +EPDKjvbdXrlBMtOx +DoCjjvbdNHColpVL +EObkKvbdXnRAXuVt +EObjjvbdMJCMQxAS +EObkKvbdIrxaTMxM +DnbjjvbdbAudfQQX +DnbkKvbdnCKXYOmu +DoDKjvbdEXxMUUTl +EObkKvbdyXhiaozL +EObjjvbdEJhKVwjA +EOcKjvbdpfEFTuaI +EOcKjvbdbVCHYLTh +DncLKvbdyqOliJwA +EOcKjvbdkxrqsZHU +DncKjvbdDjHjVwjA +EPCkKvbdkDMLQfuH +EPCjjvbdUVlPjUBR +DoDLKvbdjJfHimXr +DoCkKvbdEuxooljF +DoDLKvbdYzcGRjWZ +DoDKjvbdwyhGGYFS +DnbkKvbdsrrSxyeD +EPCkKvbdxmrhXrhc +EPDKjvbdDjHivXjA +EObkKvbdfMfXGlik +EPDLKvbdGdKvKBij +DoCkKvbdbLMGOmcA +EPCkKvbdRXNdDLgc +EPCjjvbdZsiIxcrn +DoDKjvbdpyPIGqEY +EPDKjvbdlZTRryHU +DoDKjvbdUslsekvK +DncKjvbdKfFhCBQu +DncLKvbdSCDeMIyL +EPDKjvbdJcJcRJcY +DoDLKvbdraellHLZ +EPCjjvbduDCtwWPP +DnbkKvbdBdPaWJlf +EPCkKvbdqFceUVaI +DnbkKvbdcyxoxYqC +DnbkKvbdlYsSTYft +EObjjvbdZHXEAOsJ +EObjjvbdURROtuHm +EPCjjvbdZLrDsnMN +EPCjjvbdfIKvRmpg +EPDLKvbdwWlBVaVu +EObkKvbdZMSDsmkm +EPDKjvbdKNAEZfuB +DnbjjvbdhyuGMROG +EObjjvbdJuuGDdgJ +EPDLKvbdgQBzwDxI +EObjjvbdjvXNdCXw +EPCjjvbdlZSrSyGt +DoDKjvbdXsLaMsnx +DoDLKvbdTlVoAuoJ +DnbkKvbdptUGrSLU +EObkKvbdEztRFMCi +EOcLKvbdTkvOaVoJ +EObkKvbdDoCjjwCd +EPCkKvbdTfznLwVe +EObkKvbdRjyGUfjs +EPDKjvbdVviXvEFH +DnbjjvbdKkBIWAKZ +EOcLKvbdqFdFUVaI +EOcLKvbdBhjakJFj +DncKjvbdauBgYKsh +DnbjjvbdxKvdHzyf +DoCjjvbdxVMdqYlO +EPCjjvbdEPDLLXDE +EPDLKvbdVvhwucdg +DncKjvbdaRfDITfL +EPDKjvbdfpBzvcxI +DoCkKvbdGLFTDHmV +DoDLKvbdcTDKtDjB +DnbkKvbdZRMeIldq +EObjjvbdRjyGVGkT +EPCjjvbdlhctRVRa +DnbjjvbdyXhibPzL +DnbjjvbdFpASvgFy +DnbjjvbdKCicRJcY +DnbkKvbdPxmAGrrK +EPCjjvbdpstHSSKt +EObkKvbdiZtelQnG +DoDLKvbdKkAgvAJy +EObjjvbdsPvPKCuf +EOcLKvbdhyuGLqOG +EPDLKvbdyOSgxShc +EObkKvbdmJDsptqa +EPCjjvbdbVCHYKtI +DoCkKvbdCJLBkIfK +EPDKjvbdTqQnuUgm +EOcLKvbdypnmIjXA +DoDLKvbdiLddOUby +DoCkKvbdaSFbgtGL +EPDLKvbdraellGjy +EObkKvbdWRmwbEkc +EPCjjvbdDoDLKvcE +DnbjjvbdjEjfuPAO +DnbjjvbdqvokbiYq +DnbkKvbdVZITzLOn +EPDKjvbdUWLpJtAq +EObkKvbdwtmFQyMO +DoDLKvbdFWZQPmKF +EPDKjvbdLBKgMawq +DncLKvbdANIYsWyx +EObkKvbdqvolDJYq +EOcKjvbdQlwbZOUz +EPCkKvbdlqyUzTEJ +EPCkKvbdSLYfUgKs +DoCjjvbdRotHJfEX +EOcKjvbdrXQMCiZR +DncLKvbdaofgELzd +DoDKjvbdehKvSNqH +EPCkKvbdzaAOfgBl +DoCkKvbdVUMsfMVj +DoDLKvbdUGznLwVe +EPDLKvbdDoDKjwDE +DoCjjvbdANHxsXZx +EPCkKvbdJpydnenF +EPCjjvbdtTRsZZeD +DoDLKvbdnQZyWLZC +EPCkKvbdKNADyfta +EPCkKvbdUVlPjTaR +DncLKvbdeOeSjstS +DncKjvbdXrlAmUOx +DoCkKvbdxnTIXrhc +EPDLKvbdZjTIQGaf +DoCjjvbdPxmAGrrK +EPDKjvbdLZQirztf +DoDLKvbdkHflGFnL +DoCjjvbdiMFEOUby +DnbjjvbdhaoDFXQq +EPCkKvbdyzeNqhIh +EPDKjvbdbUbGwkUI +DoCkKvbdEXxLsstM +DoDLKvbdaRebhUGL +EObjjvbdMfbpNQUk +DoDLKvbdCEQAuilf +EObjjvbdMowpunHT +DoDLKvbdzHYlAMeX +DoCkKvbdegkVqnQg +DnbkKvbdwWlAuaVu +DncKjvbdFfJqnItR +EObjjvbdZjTHpHBf +EPCkKvbdbsDKtEJa +EOcLKvbdZtIiZESn +DoDLKvbdpxoIHRDx +EPDLKvbdTpqOtuIN +DnbjjvbdmoyxvKxb +DncKjvbdqGEEtWBI +EPCkKvbdQwNdClHc +DoCkKvbdHELViajK +EPDLKvbdCJLBkIfK +EPDLKvbdvwMBWBVu +EPDKjvbdxrmiNRag +EOcKjvbdxVMeQyLn +DoCkKvbdraelkgLZ +EPCjjvbddndsLUUS +DoCjjvbdhgKDYvKV +EPDKjvbdBiKbKiFj +DncKjvbdKkBIWAKZ +DnbjjvbdjlakzEgP +EObjjvbdNrtWGeUp +EPDKjvbdidkGuPAO +DnbkKvbdjAQHBPgK +DoCkKvbdUxgtZkPO +DoDLKvbdDoCkLXDE +DoDLKvbdkVvmcaxX +EPCkKvbdmfeXmOHZ +DoCjjvbdHDkWJajK +DoDLKvbdkHgMGFnL +EObjjvbdBdQAuilf +EPDKjvbdxUleQxlO +DoDKjvbdJbjDRJcY +EPDKjvbdXsMAltOx +EOcKjvbdIrxaSmXl +DoDLKvbdyYJJbQZk +DoDLKvbdQlwaxnUz +EObkKvbdqvpMDIyR +DoCkKvbdhzVGLpnG +DncKjvbdJKEAJofd +EOcLKvbdZLrETnLm +DncKjvbdQvnDcMID +EPDLKvbdiLddOUby +EOcKjvbdeJiqvUzn +DnbjjvbdsBemMGkZ +EPCkKvbddtAUASmW +EPCjjvbdiLeEOVCy +EPDKjvbdkxrrSyHU +DoCjjvbdURQoVUhN +EOcKjvbdtkwwBUBX +EOcKjvbddeOqawCj +EOcKjvbdbAvEfPow +EPCkKvbdzROmIjXA +EObjjvbdKDKCpibx +EPDKjvbdIGfyyYXg +EOcLKvbdeOdsKssr +EOcKjvbdsBelkgKy +DoDKjvbdJYUCIMRQ +EOcLKvbdjcMLQgVH +EOcLKvbdJTYaSmXl +DoDLKvbdNddUJIkE +DoDLKvbdFjdsChNV +DnbjjvbdmttyjjSG +EPDLKvbdVgwuxHYz +EOcLKvbdsCGMkfjy +EOcKjvbdKWVGDeHJ +EPDLKvbdjJegjMwr +DoCkKvbdNHDQMotk +DoDLKvbdjmBkydgP +DnbkKvbdSLZFtfjs +EPDKjvbdjbkjpfuH +EObjjvbdkVwNdBww +DncKjvbdFxtuBEYC +EPCkKvbdrMzJxkhJ +DoDLKvbdptUGrSKt +EOcKjvbdhzUelQnG +EObkKvbdsQVoKCuf +DoCkKvbdzitpPcsU +DoCkKvbdySnJMqag +DncKjvbdZRMeImFR +EObkKvbdYzcFrKVy +DoDKjvbdrNZjZMIJ +EPCkKvbdEvYoolie +EOcLKvbdLBKgNCXq +DnbkKvbdrpVnjDWG +EObkKvbdLLBHvAJy +DoCkKvbdqmZixkgi +DoCjjvbdhytfLpmf +DnbkKvbdVZHsyjoO +EObkKvbdWWhxWEEg +EObkKvbdhfjDZWJu +DoCjjvbdZoOIddzK +DoCjjvbdCDoaWJmG +DoCkKvbdzitoocrt +EOcLKvbdOSsvGduQ +EOcLKvbdVqnXbElD +EPDKjvbdgFlZnHHA +EOcKjvbdUsltFkvK +EPCkKvbdePFSkTsr +EPCkKvbdssSTYzFD +EOcLKvbdVTlselWK +DncKjvbdZRMeJMdq +EOcKjvbdYSlAlsnx +DncLKvbdSZihTDWA +DnbjjvbdvvlBWAuu +EOcLKvbdEvZPoljF +EPDKjvbdHELWJbJj +DoDKjvbdDjHiuxKA +DncLKvbdrMyjYkgi +EOcLKvbdRbDdlIxk +DoDLKvbdFVyQQMie +EOcLKvbdZxdJmcMS +EPDKjvbdFejRmiUR +EPCjjvbdnPyxujxb +DoCkKvbdjKGIKNXr +DoCjjvbdYSlBNUPY +DoDLKvbdZshiZDsO +EPDLKvbdkyTRsYft +DncKjvbdJbicQicY +DoCkKvbdXGZZtAOs +DnbkKvbdZjSgpGbG +DncKjvbdWSOYBeMD +DoDLKvbdKNADyfta +DoDLKvbdLBKgMbYR +EObjjvbdNddThhkE +EPCjjvbdQdCaPqES +DnbkKvbdvBDySoFI +EPCkKvbdDoDLLWcE +DncLKvbdaSGDHtGL +EObkKvbdKNADzGta +DncLKvbdTAFJHaoE +EOcLKvbdTAFJIBoE +DoDLKvbdUtNTelWK +EPCkKvbdKefICApu +EObkKvbdySmhlqbH +EPDLKvbduaEYroFI +DnbjjvbdSKxfVHLT +EObkKvbdhkdcnVDZ +DnbkKvbdCSaDTevr +DoCkKvbdiBoCeXQq +DncLKvbdZjShQGaf +EPCkKvbdIwsagkqQ +DnbkKvbdnCKWwoNu +DncKjvbdelfWgNJk +EOcLKvbdSPtHKFcw +EObjjvbdZRNEhleR +DoCkKvbdbLMGPNcA +DoCkKvbdRkZFtfjs +EOcLKvbdySmhmSBg +DoCkKvbdWHxVwgYz +EObjjvbdURQntuHm +EPDKjvbdySnJMqbH +EOcLKvbdOStWHEtp +EPCjjvbdeOeTKstS +DncLKvbdssRsZZdc +EObjjvbdrovPKCuf +EPDKjvbdiZuFkqOG +DncLKvbdsBfNLfjy +EOcLKvbdCDpAujNG +EPDKjvbdOSsugFUp +DoDLKvbdNQYRVmfs +EOcLKvbdTAEiHaoE +DoCjjvbdEPDKjwDE +EPCkKvbdqUUGqqkU +EPDKjvbdtbcVXVoP +DnbjjvbdhbOcEvqR +EOcKjvbdCTAcUGWr +EPCkKvbdQdDApQcr +DnbjjvbdTfznLwWF +DnbkKvbdCDoaVjMf +EPCjjvbdBsBDUFvr +EPCkKvbdWWiXuceH +DoCjjvbdJcJcRJbx +DoDLKvbdsCGMlHKy +EPCjjvbdSBceLhyL +DoDKjvbdHffzZYYH +EPCkKvbdvAdZTOeI +DnbkKvbdxwhjBpZk +DncKjvbdOFDtIhjd +DoCjjvbdmpZxujxb +EOcKjvbdIryAsMwl +EPCkKvbdTqQnuUhN +DncKjvbdOSsvHEtp +EPDLKvbdZoOIdeZj +DnbkKvbdKeegbAqV +EPCjjvbdqFceUWAh +DnbkKvbdCWzchdpW +EPCkKvbdzQnlhiwA +DoDLKvbdqdEiQNua +DncKjvbdddoRawCj +EPDLKvbdlYrrSxft +DnbkKvbdRWnECkgc +DncKjvbdGYuUaEYC +EPDLKvbdZsiIxcrn +DoCjjvbdJbibqJbx +EPDKjvbdGYtuBDxC +DnbjjvbdCEQAvKMf +EObjjvbdvAcyTPEh +DoCkKvbdxwhjBozL +DoDKjvbdNsTugFVQ +DoDKjvbdkHgLeemk +EOcLKvbdwWlBVaWV +EOcLKvbdrNZjYkgi +DnbkKvbdJYUBglRQ +DnbkKvbdjvWmdCXw +EObjjvbdmajXYPOV +DncKjvbdDihJuxKA +EPCjjvbdwzIGGYFS +DoDKjvbdMpYQvOHT +DncLKvbdbhljLFwY +EObjjvbdelevgMik +DnbjjvbddePSCWbj +DnbjjvbdKQydnenF +DnbkKvbdZQmEhmFR +DoDKjvbdjKFgimYS +EObjjvbdANIZSvyx +DoCjjvbdfHkWRnRH +EObkKvbddiiqutzn +EOcKjvbdqYnhHQdY +DoDKjvbdKCjDQjCx +DoDLKvbdjgflFfNk +EOcLKvbdtTRrxzEc +DnbkKvbduLwwBUAw +DncLKvbdkWXOEBxX +EPDKjvbdNxPVzcnU +EPCjjvbdUMVnaWOi +EObkKvbdZQmFImEq +DncLKvbdQvmdDMID +EObjjvbdGFjSNhsq +EOcLKvbdbAvFFpQX +DoCjjvbdkCkjqGuH +EPCkKvbdbLLeoNcA +DoDLKvbdemFwGmJk +EOcKjvbdVUMtFlWK +EPDLKvbdWXJXucdg +DncLKvbdqcdhpNua +DncLKvbdGYuUaDxC +EPCkKvbdGZUtaDwb +EOcLKvbdjuwODaxX +EOcKjvbdSKyFuHKs +EOcLKvbdNQYQvOHT +EPCkKvbdNGcQNPuL +EOcLKvbdPIAYZAZB +EObjjvbdMfcPlpVL +EPCjjvbdLAjflbXq +EPCjjvbdySmhmRbH +EPDKjvbdxsNhmSBg +EOcKjvbdZMSDsmkm +DoCjjvbdbAudfQQX +DoCjjvbdePErjtTr +DncKjvbdtkxXBUBX +DoCkKvbdqvokbiYq +DnbjjvbdMfbpMouL +DnbjjvbdijFhKNXr +DoDKjvbdhgJcZVjV +EPDKjvbdIHGzZYYH +DnbjjvbdNsTufeVQ +DnbjjvbdqlyixlIJ +EPDLKvbdmaivxPOV +DnbkKvbdmJDsptrB +DnbjjvbdQYmAGsSK +EOcKjvbdZjTIQHCG +EPDKjvbdqGDeTuaI +EOcLKvbdADSYJzIp +DncLKvbdeuzwoizs +EObjjvbdFyUuBEXb +DncLKvbdnUtykJqf +EPCjjvbdelfXGmKL +EOcKjvbdKCjDQjDY +DncKjvbdaaVeGPow +DncKjvbdqvolDJYq +DoCjjvbdDnbjkWbd +DoCjjvbdjlakyeHP +DoCkKvbdLZRJrztf +DncKjvbdZisIQHCG +EPDLKvbdZyDjNbkr +DnbkKvbdLAjfmBwq +EOcKjvbdtSqryZeD +EOcLKvbdIMBzmvqL +EObjjvbdiVZdvqtb +DoDLKvbdMgDPmQVL +EPDLKvbdMgCpNPtk +EObjjvbdKVuGDeHJ +EOcLKvbdjJehJlxS +EPCkKvbdhlEcmuDZ +DoDKjvbdHfgZyXwg +EPCjjvbdShyiqABM +EPDLKvbdMgColouL +EPDLKvbdVqmwadkc +EPCjjvbdnCKWwnmu +DncKjvbdRpUGjGEX +DoDKjvbdkWWnECYX +DnbjjvbdkMalZeGo +EOcKjvbdxUleRYkn +EObkKvbdFxtuBDxC +EObjjvbdnGdwlnGy +EObkKvbduaEYsOeI +EPCkKvbdyTOJMrBg +EObjjvbdDHMFgAzc +DnbjjvbdEOcKkXCd +EPDLKvbdBhjbLIfK +EPCkKvbdZtJJZETO +EOcLKvbdIwsagkqQ +DoCkKvbdZyDjNbkr +DnbjjvbdBsAbsfWr +DoCjjvbdeOeSjssr +EObkKvbdVUNUGMWK +DncLKvbdfMfWfmKL +DoCjjvbduaEZTOdh +DoCkKvbdZisIPgBf +DnbjjvbdVZHtZjoO +DoCjjvbdCWzchePv +EObjjvbdJmAEZfuB +EObjjvbdvvkaVaWV +DoCjjvbdiiegjNXr +DnbjjvbdcScLUEJa +DncLKvbdJXsbHlQp +EPCjjvbdrpWOjDVf +DoDLKvbdDnbjjwDE +DnbjjvbdxnShYSiD +DoCjjvbdqGEFUWBI +DoDKjvbdtSrTYzEc +EObkKvbdEPDLLWcE +DoDKjvbdKQzEnfOF +EPDLKvbdIwtBhMRQ +DoCjjvbdTvLojUBR +EPDLKvbdZyDimbkr +EPDLKvbdptTfrSKt +DncLKvbdkMbLyeHP +EOcKjvbdKfFhBaQu +EObjjvbdeEoRbXDK +EOcKjvbdHDjvJbJj +EObkKvbdEztQeLcJ +DncKjvbdUtMsfLuj +DnbjjvbdRXOECkgc +DncKjvbdLAjfmBxR +EOcLKvbdsPvPJcVf +EPCjjvbdygYlAMdw +DnbjjvbdmuVZkKRf +EPCkKvbdSZigrcWA +DncLKvbdcJMikGWx +EOcKjvbdGLErcHlu +DoDKjvbdKNADygUa +EPDLKvbdMfbolpUk +DoDLKvbdUxhTyjoO +EPCkKvbdMtrqjmAX +EPDLKvbdLBLGmBxR +DoCjjvbdrzMQTAgn +EPDLKvbdUxhTykPO +DnbkKvbdnVUzLJqf +DoCkKvbdLYpirztf +EPDLKvbdFejSOItR +DncLKvbdvlvANDeN +DncLKvbdwtleRYkn +EObkKvbdcJNKLFvx +EPCjjvbdYSkaNTnx +EOcLKvbdSxKlNzjx +DnbjjvbdHbMZdzAD +EPCjjvbdXnRAXuVt +DoDKjvbdQmYBxnUz +DoCkKvbdWSOYCEkc +DnbkKvbdemGXGlik +EObjjvbdNeDsiJLE +DoCkKvbdbiMijfXY +EPCjjvbdmIdTptrB +DoCjjvbdEztQeMDJ +DncLKvbdCIjbLIfK +EPCjjvbdhkeENuDZ +DoCkKvbdAMgxsWzY +DoCjjvbdiZtelQnG +EOcKjvbdWXJXuceH +EOcLKvbdZRMeJMeR +EPCkKvbdiVZdvquC +DoDLKvbdkVvmdCXw +EObjjvbdnHExMmgZ +EPDKjvbdHgHZyYYH +EPDKjvbdRbEFMJYk +EPCkKvbdvBEZSndh +DnbkKvbdcScLTdJa +DoDLKvbdcJMijfXY +DnbjjvbddndrjstS +EPDLKvbdbiNJjevx +DnbkKvbdOSsvGduQ +DoDKjvbdMowpvNfs +DoCkKvbdZjSgpGaf +DnbkKvbdddnqawDK +DoDLKvbdKaLGmCYR +DoCjjvbdmuVZkKSG +EOcKjvbdZQldiMdq +EObjjvbdRNXayOUz +DncLKvbdeuzxQJzs +DncLKvbdEOcKkXCd +DncKjvbdhtyeXSUb +DnbjjvbdEObjkXDE +DncLKvbdKQyePGNe +EOcLKvbdHgGzZXwg +EObkKvbdrMzJxlIJ +EObkKvbdRXNdClHc +DoDLKvbdwzIFexEr +EPDKjvbdJYUCIMQp +DnbkKvbdhbOcFWqR +EOcKjvbdnGdxMmgZ +EObjjvbddeOqawCj +EPCjjvbdqTsgSSKt +DncKjvbdJXtBhLqQ +DoDLKvbdatagYKsh +EOcKjvbdjEkHUoAO +DncKjvbdLFfICBRV +DnbkKvbdKQydoFme +EPDKjvbdhlFEOVCy +EPCkKvbdZxdJmblS +EPDKjvbdJbjCqKCx +DncKjvbdwNWANDdm +EPDLKvbdpyPHfqDx +EPCjjvbdOTTufeVQ +EPCkKvbdtbbtvvOo +DoCjjvbdbBWEfQQX +EObjjvbdKNAEZgVB +DnbjjvbdJXtBgkqQ +EPCjjvbdGYtuBEXb +DoDLKvbdZjShQGaf +DoDLKvbdQmYCYnUz +EOcLKvbdpedFTvAh +EObjjvbdKQydoGNe +EPCkKvbdKDJcRKDY +EObkKvbdrafMkfkZ +EObkKvbdiCObdwRR +EPCjjvbddBsMrAUN +DoDKjvbdWIXvXgYz +DoDKjvbdkClKpftg +EOcKjvbdkCkjpftg +EOcLKvbdVrOYBeLc +EObkKvbdmoyxukZC +EPCjjvbddZyQXyRC +DoCkKvbdhbPCdvqR +DoCkKvbdJvUeceGi +EOcLKvbdVqnXaeMD +DoCkKvbdWWhxVceH +EPDKjvbdiGjDZVjV +EObjjvbdGAnpxizm +DoCjjvbdiZuFlQnG +EOcKjvbdTqRPVVIN +EPCjjvbdqdEhomvB +DoCkKvbdLAkHMaxR +EPDLKvbdOEdThiKd +DnbkKvbdkxrrTZGt +EOcLKvbdEPDLLXCd +DoDLKvbdTIzKRAAl +EPDLKvbdSCDeLiZL +EPCkKvbdpyOgfpdY +EPCjjvbdtkwwBTaX +EPDKjvbdiBoCeWqR +DoCjjvbdhgJbxujV +DoDLKvbdqdEhpNvB +EOcKjvbdkCkjqGuH +EPCjjvbdhbObeXQq +EOcKjvbdxsOImRbH +DoCjjvbdKWVFceHJ +DoDKjvbdBiKbKiGK +EPDKjvbdnGeXmNgZ +EPDKjvbdiifHjNYS +EOcKjvbdauBgXjsh +DnbkKvbdUtMsfLvK +DncKjvbdNrtVgEuQ +EPDLKvbdUsmUGLvK +EOcLKvbdNGcQMpVL +EPCkKvbdqmZjZLhJ +EObkKvbdFfKSOJUR +DncKjvbdhaoCeXRR +DoCkKvbdmfdwlnGy +EPCjjvbdjbkjqGuH +DoDKjvbdlqyVZsEJ +DnbjjvbdWWiYVcdg +EOcKjvbdeATqMwjG +EOcKjvbdqUTgSSKt +DncKjvbdqwQMDJZR +EPCkKvbdsQVoJbuf +DoCjjvbdVTmUFlVj +DoDKjvbdmajWxPOV +EOcKjvbdUQpoUthN +DoDKjvbdwMvAMdEm +EPDLKvbdDnbkLXDE +DncLKvbdFfKSNiTq +DncKjvbdIryBSlwl +DoDKjvbdmgEwlmfy +DncKjvbdqwPkbhyR +DncLKvbdNeETiJKd +EObjjvbdDoCjkXCd +EObkKvbdjgflFfNk +DncLKvbdxsNhlrCH +DoCjjvbdeFOrCWbj +EObjjvbdkNBkzFHP +DoCjjvbdxrmiNSCH +EOcLKvbdVwJXvDeH +EPCkKvbdZRMdhmEq +EObjjvbdjSzhsKiz +DoCkKvbdqdEiQOVa +EOcLKvbdpaJFAWhE +EPDLKvbdRkYfVGjs +DncKjvbdMpXqWNgT +EOcLKvbdVYhUZkPO +DoCjjvbdUxhTyjnn +DoCkKvbdOYOuzcmt +DoDKjvbdZLqdUNlN +DoDLKvbdJSyBTMxM +DoDLKvbdYORAXtut +DncKjvbdHffzYxXg +DncLKvbdmpZyVjyC +EOcKjvbdmfeXlnGy +DoDLKvbdkHfkeenL +DoDLKvbdJTZBSmYM +EObkKvbdrMzKZMHi +DncLKvbdiLeDmuCy +DoDKjvbdjvXNcbYX +DnbkKvbdrJAJeMne +DoDLKvbdvlvAMdFN +EPCjjvbdZLrDsmlN +DnbjjvbdaaVdfPpX +EObkKvbdrbFlkfjy +DoDKjvbdGLErbhNV +DoCjjvbdCIkCKhfK +DnbjjvbdeEoSBwDK +DncLKvbdirziSjiz +EPDKjvbdwzIGGYEr +DncKjvbdbVCGwkTh +EObkKvbdakMFnmcA +DnbkKvbdRpUHKFdX +DoDLKvbdMSWlytpz +DncLKvbdpssgRrKt +EPCjjvbdZRMeImEq +DoCjjvbdqrVKmjaN +EObjjvbdjAQGaPfj +DoDLKvbdyqOmJJwA +DnbjjvbdQccApRES +DoDLKvbdIsYaSmXl +EPCjjvbdrovPKDWG +EPDLKvbdqdEhpOVa +DoCkKvbdVviYVdEg +DoCjjvbdqZPIGqEY +EPCkKvbdOTTvGeVQ +DoCkKvbdDncLLXCd +EObkKvbdvBEYsOeI +DoCjjvbdYORAYVVt +EOcLKvbdhgKCxuiu +DoDKjvbdddoRbWcK +EObkKvbdmoyyWKyC +EOcLKvbdyYJJbQZk +DnbjjvbdUyIUZkPO +DncKjvbdFyUuBDxC +DoCjjvbdnQZyVjyC +DoDLKvbdatbHYKsh +DoCjjvbdczYowxpb +DncLKvbdIsZAsMxM +EPDKjvbdGKeTChMu +DoCkKvbdptTgSRjt +EPDKjvbdMtrqjmAX +DncLKvbdKQzEoFme +EObjjvbdFxtuAcxC +DncKjvbdkDLkRHVH +EPCkKvbdunszqKnt +DoCkKvbdezuxeJTw +EObkKvbdzjVQQDsU +EPDLKvbdjKGIKMxS +DoCjjvbdcyyQXxqC +EObkKvbdhtydwRtb +DnbjjvbdfNGXHNKL +DoDKjvbdmoyxujxb +DncLKvbdmuVZkJqf +EObkKvbdZyDjNbkr +DnbkKvbdyXhiaozL +EObkKvbdKWUfDeHJ +DoCkKvbddoFTLUUS +DnbjjvbdJvUfEFHJ +EObjjvbdsrqrxzFD +EObjjvbdmgFYMmfy +DnbjjvbdbrcLTcjB +EPDKjvbdZtIiZETO +DncKjvbdSLZGVHLT +EObjjvbdhtzFXSVC +EOcKjvbdvAcxsPEh +EOcKjvbdbrbjsdKB +DoDKjvbdezuxdiTw +DoDKjvbdhkdcnVDZ +DoCkKvbdNddUJIkE +DnbjjvbdsCGMlGjy +EOcKjvbdssSSxydc +DoCjjvbdSPtHJfDw +DoDLKvbdmRyVZrdJ +EOcLKvbdBdQBVjNG +EPCjjvbdtvOXipsA +EOcLKvbdDwwlUUUM +EObkKvbdhkeENuDZ +EOcKjvbdwygfGYEr +DncKjvbdbsCkUEJa +DnbkKvbdvlvAMceN +EPDKjvbdTvMPitAq +EPDLKvbdMowpvOHT +EOcKjvbdNQXpvNgT +DncKjvbdYzcFqiuy +EObjjvbdqUUGrRjt +EOcKjvbdUaBqTRSZ +DnbjjvbdrafMkfjy +DncLKvbdmgFXmNfy +DncKjvbdNrtVfdtp +EOcKjvbdVZITyjoO +EPDKjvbdTukpJtBR +DoDLKvbdyOTHxTIc +DnbjjvbdsBfNLfkZ +EPCjjvbdmJDtRVSB +EObjjvbdmJDtRUrB +DnbjjvbdiVZeWrVC +DncKjvbdBiKajhfK +DnbkKvbdziuQPcsU +EOcKjvbdGFiqnJTq +DoCjjvbdAMhZTXZx +DncLKvbdDjHiuwjA +DnbkKvbdBdQBVjNG +EPCjjvbdqlzKYkgi +DncLKvbdLLBIWAJy +DncLKvbdbhljKfXY +DncKjvbdaogHELzd +DnbkKvbdjEkGtoAO +DnbjjvbdGdKvJbKK +EPDLKvbdqrUjnKaN +EObjjvbdnVUykKSG +EPDKjvbdVrNwbFMD +DoDKjvbdvlvAMdEm +EPCjjvbdaaWEeopX +EPDLKvbdULuoBVoJ +EPDLKvbdzjUpPcsU +EPDKjvbdZnnJEdyj +EPDKjvbdtlXwAsaX +EPCjjvbdjJfHimXr +EPCkKvbdxwiKBpZk +DoCkKvbdLiBlQxAS +EObkKvbdXFxytAOs +EObjjvbdnQZxukYb +DncKjvbdZxcjNcMS +DnbkKvbdQcbaQQcr +EObkKvbdVgxVwgYz +DoDLKvbddoEsLUUS +EOcKjvbdTppnttgm +DoDKjvbdBhkBjhej +EPCkKvbdlhcsqVRa +DoDKjvbdZshiYcsO +DoDKjvbdtcDUvvPP +DnbkKvbdRkZFuGjs +DoCkKvbdaaVeFopX +EObkKvbdYORAXtut +DncLKvbdqwPlDJYq +DoDLKvbdbBWEepPw +DnbkKvbdVvhxWDdg +EObkKvbdfHkVqmpg +DncKjvbdaMjartmH +EPCkKvbdBhjbLIej +DoCjjvbdCIjbKiFj +DoDKjvbdkIHLefOL +EOcKjvbdrbGMlGkZ +DncLKvbdPxmAGsRj +EOcKjvbdZxdKODMS +DncKjvbdkDLjqHUg +EOcLKvbdjEkHUoAO +DoDLKvbdrovOjDVf +DncLKvbdZshiZESn +DncKjvbdUyIUZjnn +EPDLKvbdxmrhYSiD +DoCjjvbdaNKasUlg +DnbkKvbdYqMeJMdq +DncKjvbdZoOIeEyj +EOcKjvbdemGXGlik +EObjjvbdyzdnRhIh +DncKjvbdHEKvJbJj +EObkKvbdSCDdlIxk +EPCjjvbdGAoQxizm +DoCjjvbdaNKasVMg +EObkKvbdePErkTtS +EPCjjvbdlhdUQuSB +EPDKjvbdNQXpvOGs +DoCkKvbdXnRAYUut +EObkKvbdcTCkUEKB +DncLKvbdmRyUzSdJ +EPDLKvbdrSVLNkAm +DoCkKvbdJvUecdgJ +DoDLKvbdRDbaQRDr +EPDKjvbdYlSETmlN +EPCkKvbdbUagYKtI +EPCjjvbdssRrxzFD +EPCjjvbdRMwbYmtz +DnbjjvbdxrmhmRag +DoDKjvbdTvLpJtAq +EPDKjvbdVBBprprZ +DnbkKvbdRkYeuGkT +EOcKjvbdmbKWwoOV +EOcKjvbdZeYGzghb +EPCjjvbdFeirOJUR +DoCkKvbdZsiIxcrn +EPDKjvbdDnbkKvcE +DoDLKvbdsrrTZZeD +DncKjvbdJbjCpicY +DnbjjvbdcyxpXxpb +EPCjjvbdrXQLbhxq +DncKjvbdzROmJJwA +DoDKjvbdqdFIpNvB +EPDKjvbdkHfkfGNk +DoDKjvbdFjdsDINV +DoDKjvbdUyITyjoO +EOcLKvbdiUzEwRtb +EPCkKvbdmfeYMmgZ +DncLKvbdHgGyyXxH +EObkKvbdMuTSLNAX +DncKjvbdtbcUwWOo +DoCjjvbdVwIxWEFH +EOcKjvbdhgJcZWKV +DoCjjvbdsCFllHLZ +EPDKjvbdGcjvJbKK +EOcLKvbdnGeYNNfy +DncKjvbdZnnIeFZj +DoDKjvbdxUldqZLn +EOcKjvbdrovOibvG +DoDKjvbdUWLpKTaR +DncKjvbdePFTKtTr +EPDLKvbdFxtuAdYC +DoDLKvbdfIKvRnQg +EPDLKvbdypnmIjXA +DncKjvbdbUagYLUI +EPDKjvbdnVUyjiqf +EObkKvbdKWVGDeGi +EObkKvbdaNKbSuMg +DoDKjvbdNVSqkNAX +EObkKvbdhbPDFWqR +DoDLKvbdLGFhBaRV +EOcKjvbdbrcLUDjB +EObjjvbdZHXEAPTJ +EPCjjvbdCSaDTevr +DncLKvbdgQBzvcxI +EObjjvbdidjfuPAO +DoDLKvbdzjUoodTU +DncKjvbdGLEsChNV +EPCjjvbdNeDshiLE +EObjjvbdGGKRnIsq +EObkKvbdeYZtTqez +EOcKjvbdQwODblHc +DoCkKvbdkClLRHVH +EPCkKvbdxUldqYkn +EPCkKvbdvBDxsPFI +DnbkKvbdqvpLcIyR +DncKjvbdqmZixkhJ +DoDLKvbdkVwNdCYX +EObkKvbdUxgsykPO +EPCkKvbdjcLjpgUg +DnbjjvbdbUagYKtI +EObjjvbdDjHjWXjA +EObjjvbdrykpSaIO +EObjjvbdrbGMlGjy +DncLKvbdVYhUZjnn +DoDLKvbdjlakydfo +DnbkKvbdVTmUGMVj +EObjjvbdZjTIQHCG +EOcLKvbdZxcjNcLr +DoCkKvbdqTsgSRjt +DnbjjvbdCIkBkJFj +EPCkKvbdaogHELzd +EPCjjvbdNPxQunGs +EObjjvbdxZhFfXeS +DoDKjvbdjblKqHUg +EObkKvbdNPxRWNgT +DoDKjvbdkaNOmALA +EPDLKvbdxsOImSCH +EOcLKvbdZshhyETO +EPDLKvbdIHHZyYYH +DoDKjvbdliEURVRa +EObjjvbdiVZeXRtb +EOcKjvbdiHJcYvJu +EOcKjvbdIsYaTNXl +DoCkKvbdtlXvaTaX +EOcKjvbdNQYRVnHT +DoDKjvbddjJqvUzn +DoDKjvbdULuoBVoJ +DoDLKvbdUslselVj +EPCkKvbddePSCWbj +EPDKjvbdNeDtIiKd +EOcKjvbdiUzFXSUb +DoCkKvbdmRyVZsEJ +EPCjjvbduLwwAtBX +EPDLKvbdxZgfGXdr +DnbkKvbdBcpAujNG +DnbjjvbdZtJIyDrn +EObjjvbdmbJvwnmu +EPCjjvbdXnRAYVWU +EOcLKvbdyOShXsJD +DoCjjvbdptUGqqkU +DnbkKvbdFpASwHGZ +DnbkKvbdwtleRYlO +EPCkKvbdnHFYMmfy +EPDKjvbdKCjDQjDY +EObkKvbdeqaWzlDP +DoCkKvbdbLMGPODA +DoCjjvbdpyPIGqDx +EOcKjvbdbhmKLFwY +DoDLKvbdEOcKjwCd +EPCkKvbdePFTKtUS +EPCkKvbdtvNwipsA +EPCkKvbdzoQQdblY +EOcLKvbdKjaHvAJy +EPDKjvbdvPTzpkOt +EPDKjvbdMJCLpxAS +EObkKvbdWWhwvEEg +DnbkKvbdcJNJjevx +DoCkKvbdNQXpunGs +EPDKjvbdWSNxBdlD +EPDKjvbdwyhFeweS +DncKjvbdddnrCWcK +EObjjvbdeKJrVtzn +EObjjvbdrykosBIO +EPDKjvbdiiehKMxS +DncKjvbdrWpMCiZR +DoCjjvbddoFSjssr +DoCjjvbdbhmKKfWx +EObjjvbdmajWwoNu +EOcLKvbdDxYLstUM +EPCjjvbdddoRawDK +DncKjvbdmuUzKjSG +DoDKjvbdLFegbBRV +EPCkKvbdySnJMqbH +DnbjjvbdLLAgvAKZ +EPCjjvbdraemMHLZ +EObjjvbdnUtzLKSG +EPDKjvbdkDMLQgVH +DoDKjvbdkHgMGGOL +DoCjjvbdxsNiNSCH +EObkKvbdNQXpvOHT +EObkKvbdQwNdDLgc +DnbjjvbdegkWRnRH +DnbkKvbdGZUuAcwb +DncLKvbdiMEcmuCy +DoDLKvbdFfJqnJTq +DoDKjvbdZnnJFEzK +EOcLKvbdTqRPUtgm +EOcLKvbdRjyFuHLT +EOcKjvbdhtzEwRtb +EObjjvbdTXjkmzjx +DoDKjvbdqdFJQOVa +DoCkKvbdGckViajK +DncLKvbdDxXlUTsl +EOcLKvbdeUAUASlv +DnbkKvbdzjUpQETU +DnbkKvbdtcCuWuoP +DncLKvbdauBgXkUI +DoCjjvbdUVlPitBR +DnbkKvbdFfJrOItR +DoDLKvbdxnSgwsJD +EPCkKvbdXsMBNToY +DncLKvbdCTAcUFwS +DoDKjvbdhgJbxvJu +DoDLKvbdhkeDnUby +EObkKvbdEvZPpNKF +EPCjjvbdiHJcZWJu +EObjjvbdIHHZyYXg +DoCkKvbdegkVqmqH +DoCjjvbdxVNFRZMO +DoDLKvbdUQpntuIN +DoDKjvbdEJhJuwjA +DoDKjvbdkHflGGNk +DnbkKvbdmttykKRf +DncLKvbdZxdJmblS +DnbjjvbdZQmEhmEq +DoCjjvbdJcJcQjDY +DoDKjvbdBhkCLIej +DoDLKvbdmIcspuRa +DnbjjvbdqiAKElne +DoCjjvbdJpzEoFnF +EOcKjvbdyOShYTJD +DoCkKvbdmuVZjiqf +DoDLKvbdSCDeLhyL +EOcKjvbdJvUedFGi +EObkKvbdehLWRnRH +EPDKjvbdxmrhXriD +DoDLKvbdOTUWGeVQ +EPCjjvbdzRPMhiwA +EPDKjvbdKRZePGOF +DoCkKvbdrDeIomvB +EPDKjvbdkVvmdBww +DoDKjvbdIGfzYwwg +EPDLKvbdFVyPpNKF +DoDKjvbdhytfLqNf +DnbjjvbdMfbomQUk +EOcLKvbdtcDVXWOo +DoDKjvbdqwPlDJYq +EOcLKvbdZshiZETO +EOcLKvbdeEnrCXCj +EOcKjvbdZLrDsnLm +EPCjjvbdLYqKSzuG +DncLKvbdMtsRjmAX +DoCjjvbdJTZArlxM +EPCkKvbdlZSrTZGt +DncKjvbdRyjITCvA +DoCjjvbdEuxpPmKF +DnbkKvbdTYKkmzjx +DoDLKvbduDDVXWPP +DncLKvbdjAPfaPgK +DncLKvbdrEFJPnVa +EPCjjvbdrXQMChyR +DnbkKvbdznpQeDLx +DoCkKvbdjgflFfOL +EObjjvbdjlalZdgP +DoCjjvbdtbcUvvOo +DoCkKvbdrEFIonWB +EObjjvbdwXMAvAuu +DncLKvbdePFSkUTr +EPCkKvbdTppoUuIN +EPDKjvbdIxUCHlQp +DnbkKvbdBiLBjiGK +DoDKjvbdliDspuRa +EObjjvbdFkFTDIMu +EPCjjvbdsQVnjDVf +EPCjjvbdKefIBaRV +DoDKjvbdIryAsNYM +DoCkKvbdsrqrxzEc +EPCjjvbdLqwNZuQz +EOcLKvbdcIlikGXY +DoCjjvbdADSXizIp +DoCkKvbduaEZTOeI +DncKjvbdvBDyTPEh +EPCkKvbdRkZFuHKs +DoDLKvbdSLZFuGkT +EOcLKvbdfekzOHHA +EOcLKvbdkaMoNALA +DncLKvbdkNCMZeGo +EObjjvbdNsUVfduQ +EPCjjvbdZoNiEeZj +DoDLKvbdLYpirzuG +EPDKjvbdmoyxujyC +DoCkKvbdaMjbSuNH +EPDLKvbdxxIjCPzL +DnbkKvbdVAaqSprZ +DoCjjvbduVmxJqTA +DoCkKvbdRkZGVHLT +DoDKjvbdEuyQPljF +DnbkKvbdptUHSRkU +DncLKvbduLxWaUAw +EObjjvbdaaVdfQQX +EPDLKvbdWWiYVdFH +EOcLKvbdfelZmgHA +DoCjjvbdADRxKZiQ +EOcKjvbdfHkWSORH +EObkKvbdTAEiIBoE +DncKjvbdEKIKVxKA +DoCkKvbdkDMKpgVH +DnbkKvbdCWzciEpW +EObjjvbdxZgefXeS +EOcLKvbdsZkpTBIO +DoDLKvbdrJAKFMne +EPDKjvbdkWXNdBww +DnbkKvbdRbEFLhyL +DncLKvbdWXJYWDeH +EOcLKvbdijFgjMwr +DoDLKvbdnHExMnGy +EObkKvbdZeYGzhJC +DnbjjvbdEvZPpMie +EObjjvbdYpldiMdq +DoCjjvbdfRaWzlCo +EPCjjvbdGYtuBDxC +EOcLKvbdQYmAGrrK +EPCkKvbdlhcspuSB +DoDLKvbdezvZFIsw +EOcKjvbdlYsSTZHU +DnbkKvbdmfeXmOGy +DncLKvbdKDKDQicY +DncKjvbdZjTIQHCG +DnbkKvbdgFkzOHHA +DnbkKvbdaNLBsVNH +DoCjjvbdBsBCtGWr +DncKjvbdqdFIomvB +DnbkKvbdkNBlZdfo +DnbkKvbdSQTgKGDw +DoCkKvbddoFTLTsr +DoDKjvbdEYYLtTtM +EOcKjvbdVwJYWEEg +DoDLKvbdyOSgwrhc +DoCkKvbdZMRdUOLm +DoDLKvbdYSlBMtOx +EPCkKvbdkxsRsYft +DnbkKvbdrzLpTAgn +DncKjvbdRjxfUgKs +DnbkKvbdqquLNkAm +DoDLKvbdRMxCYnUz +EPCjjvbdZoOIdeZj +EObkKvbdrpWOicVf +EPDLKvbdkCkjqHVH +EOcKjvbdmSZUzSci +EObjjvbdRjxfUgLT +EObjjvbdNddThhjd +DoCjjvbdKVuFcdfi +EPDKjvbdzjVPodTU +DncKjvbdJTYaSmXl +DncKjvbddZyQXyQb +EPCjjvbdCIkCKiFj +EPDKjvbdTkunaWOi +EObjjvbdfIKuqnRH +DoCjjvbdZRMdiMeR +DnbjjvbdMpXpunHT +DoDLKvbdZRNEhmFR +EObjjvbdaoffdLzd +DoDLKvbdvAdYsOdh +DnbjjvbdSLZGUgLT +DoCjjvbdSCDdkiZL +DoDLKvbdelewHNKL +DoCjjvbdRXNdDMHc +EObjjvbdkWWnDaww +EObjjvbdcyxoxZRC +DncKjvbdelfWfljL +EObjjvbdZnnJEdzK +EOcKjvbdkHflGFnL +DoCkKvbdhbPCdwRR +EPDLKvbdHDkWKCKK +DnbkKvbdRadEkiYk +EOcLKvbdFWYopNJe +DoDLKvbdqTsfrSKt +EObjjvbdxnSgxTJD +EPDLKvbdxZhFewdr +EPCkKvbdTvLojTaR +EObjjvbdfIKuqnQg +EPCjjvbdDxXlTssl +EObjjvbdQvmccLhD +EObkKvbdRNXayOUz +EPCjjvbdatbGxLTh +EOcKjvbdOSsvGeVQ +EPDKjvbdePFTKstS +DnbjjvbdlYsRsZHU +DnbjjvbdZisIQGaf +DoCkKvbdsrqsYzEc +EObjjvbdfILVqnRH +DnbkKvbdZHWdAPTJ +DoDLKvbdEPCkLXCd +EObjjvbdEXwktTsl +DncLKvbdFVyQPlie +DncKjvbdNsUWHEtp +EOcKjvbdyqOmJKXA +EOcKjvbdADSYJyhp +EPDKjvbdUyIUZjoO +EOcKjvbdmJEURVSB +DnbjjvbdIwtBgkpp +EPCjjvbdZQmEhldq +EPCkKvbdDjHiuxKA +DoDKjvbdrEEiQOVa +DncKjvbdKDKDQjCx +DncKjvbdZRNFJMeR +DncLKvbdwygeeweS +DncLKvbdnUuZkKSG +DoDKjvbdvwMAvBWV +DoCjjvbdBhkCLIfK +DnbjjvbdoznDkXoA +EOcKjvbdjgflFemk +EObkKvbdKVtfDdgJ +DnbjjvbdXrkaNUPY +DncKjvbdhlEdNtby +EPDKjvbdemGWfmJk +DoDLKvbdlhctQtrB +EObjjvbdnVVZkJqf +EObjjvbdwuNEpyMO +DoCjjvbdTpqOuVHm +EObjjvbdbLLennDA +DoDLKvbdiGjDZWKV +EPDLKvbdFjeTDHlu +DoDLKvbdDxYLstUM +EPDLKvbdiUzFXSVC +DncKjvbdJYTbHkpp +DoCkKvbdZshhxdSn +EPDKjvbdxrnIlqag +EOcLKvbdiHJcYvJu +DnbjjvbdkVwNcaxX +EObjjvbdpyPIGpcx +EPCkKvbdauCGxLUI +EObkKvbdWRnXadkc +DnbkKvbdVUNUGLvK +EObkKvbdDxYLsssl +DnbkKvbdCJKbKhfK +DncLKvbdbhmKKfXY +EOcLKvbdZoOIeFZj +DoDLKvbdkNCLzFHP +EObkKvbdpxnggQdY +EObkKvbdYqNFJNEq +EPCjjvbdyzdnSHhh +EOcKjvbdczZQYZQb +DncKjvbdZyDimblS +DncLKvbdyOTIXrhc +EObjjvbdhzUelQnG +EObjjvbdFjeTChNV +DoCjjvbdwMvANEEm +DoDLKvbdRXOEDMID +DncKjvbdiHJcYvJu +EOcLKvbdhtzFWrVC +DncKjvbdVYgsykPO +DoCjjvbdGGKRmiUR +EPDLKvbdQmXbYnUz +DnbkKvbdkIGlFemk +DoCjjvbdSPsgJfDw +DncKjvbdzjVQPcrt +EPDKjvbdmfdxNNfy +EPDKjvbdZyDimblS +DoDKjvbdANIZSvzY +DoCkKvbdJqZdoGOF +EOcKjvbdcJMijewY +DncLKvbdNQXqWNfs +DncLKvbdkNBlZeGo +DoCjjvbdHffzZYXg +DoDKjvbdjhHMGGOL +DnbkKvbdiCObdvpq +DoDLKvbdYlRctNkm +EObkKvbdiUzEwRuC +DncLKvbdMfbomPuL +EPCkKvbdlZSrSyGt +DncLKvbdvAcxroFI +DoCjjvbdNGcQNQUk +DncKjvbdWSNxBeLc +EPCkKvbdqvokcIyR +DncLKvbddZyQXxqC +DoCkKvbdvPTzqLPU +DncLKvbdZxcjNblS +EPCjjvbdkMbLzFHP +EPCkKvbdlYrqsYgU +DnbjjvbdWSOXbFMD +DnbkKvbdWeyZtAPT +EPCkKvbdEKHivYKA +DoCkKvbdkNBkyeGo +DoDLKvbdiBoDEvqR +DoDLKvbdRkYfVGjs +EOcKjvbddneSkUTr +EObjjvbdFejRnItR +DncLKvbdLAjgMbXq +DnbkKvbdUGznLwVe +DoDKjvbdLqwNZtpz +EPDKjvbdUxhTyjnn +EPDLKvbdkNBkyeHP +DoCjjvbdgFkzNgHA +EObjjvbdunszpjnt +EPCkKvbdtAHQhABS +DnbjjvbdbKkfOnDA +DoCjjvbdVviYWEFH +DoCjjvbdGZUuAdXb +EObjjvbdhlFDmuCy +DncLKvbdyfyMAMdw +EObjjvbdFyUtaDxC +DnbkKvbdeEoSCXDK +EOcKjvbdbVCGwjtI +EOcLKvbdTAEhgand +EObkKvbdRpUHJecw +DnbjjvbdZsiJZDrn +DncLKvbdtSqrxyeD +DoDKjvbdJSxaSmYM +EPCkKvbdjuvnECYX +DoDLKvbdrMyjYkgi +DnbkKvbdjJegjNXr +DoDLKvbduaDxsOdh +DoDLKvbdmIcsptrB +EObkKvbdFkFTDHmV +DnbjjvbdYORAYVVt +DncLKvbdddoRbWcK +EPDLKvbdLrWmZuQz +DoDLKvbdliETpuRa +DoCjjvbdbrcKsdKB +DoCkKvbdHkazmvpk +EPCjjvbdUaBpsRRy +EObkKvbdKfFhBaQu +DoCkKvbdKQydnfNe +EOcLKvbdDjIKVxKA +DncKjvbdpeceUWBI +DncLKvbdKaLHNBxR +EPDLKvbdptTfrRkU +EPDKjvbddndsLTtS +EObjjvbdMpXpvOHT +DnbkKvbdaMjaruNH +DoCkKvbdpecdtVaI +DncLKvbdRpTfjGEX +EObkKvbdCSaCsevr +DoCkKvbdnHEwmNgZ +EObjjvbdfHjuqmqH +DoDKjvbdKWVGDeGi +DoDLKvbdWHxVxHYz +DnbjjvbdXsLaMsnx +EPDLKvbdDjHiuwjA +DnbjjvbdaaWFGQQX +DnbjjvbdsrrTZZdc +DoCjjvbddneTKtUS +DoDKjvbdcJMjLFvx +DoDKjvbdaNKbTUlg +DnbjjvbdkHflFfOL +EObjjvbdJpzFOeme +DoCjjvbdrounibuf +DoCjjvbdHgHZxwxH +EOcLKvbdSKxeuGkT +EOcLKvbdzQoNJJwA +EObjjvbdZnnJEdzK +DoDLKvbdJuuFcdfi +DncKjvbdIryBSmYM +EObkKvbdyYJJaozL +EObjjvbdFkEsDHmV +DnbkKvbdfMfXHMjL +DnbkKvbdLGGIBaRV +EOcLKvbdRXNdDMHc +DoDKjvbdegjvRnRH +DnbkKvbdKeegaaQu +DnbjjvbdkMakzEgP +DoDKjvbdcTDKtEKB +DncLKvbdhaoDEvqR +DncLKvbdmgEwmNfy +EPDKjvbdCIjbLIfK +DncLKvbdJvUedEgJ +DoCjjvbdFVxpPljF +EOcLKvbdJYUCIMRQ +EPDKjvbddwyssrFz +DoDKjvbdiMEdOUcZ +DoDKjvbdZQleIldq +EPCkKvbdnQZyVkYb +DoCjjvbdNGbpNPuL +DoCkKvbdOStVgFVQ +EOcKjvbdGBPQxizm +DnbjjvbdOXoVzcnU +DncKjvbdyqPNIiwA +DoDLKvbdkIGlGGNk +EPDKjvbdbiNKLFvx +DoCkKvbdCTBCsfWr +DoDKjvbdShyjRABM +EPCjjvbdxwhjBozL +DoCkKvbdqUUHSSLU +DoDKjvbdbBVdfPow +DoCkKvbdqYnggRDx +DoCkKvbdtkwwAsaX +EPDLKvbdZMSDsnMN +EPDLKvbdZjTIQGbG +EPCjjvbdzoPpdblY +EPDKjvbdVviYWEFH +DnbjjvbdUsltGLuj +DoCkKvbdQdDAopcr +EPDKjvbdZxcjNbkr +EPCjjvbdZisHpGbG +EPDKjvbdEuxpPmKF +EOcKjvbdQwNccLgc +EPCjjvbdEYYLstUM +EObkKvbdZRNEhmEq +DoDKjvbdaRfDIUGL +DncKjvbduaDxsOeI +EObkKvbdmaiwYPOV +EOcKjvbdKDJbqJbx +DoDKjvbdQvnEDLgc +DnbkKvbdtlXvaTaX +EPDKjvbdzQoNIiwA +EOcLKvbdNeDsiIjd +DnbkKvbdBdQAvJlf +DoCkKvbdhzVGMROG +EPDLKvbdUaCQsRRy +EOcLKvbdZisHogCG +DoCkKvbdlqxtzTDi +DoCjjvbdRkZGUgKs +EObkKvbdZnmhdeZj +EOcLKvbdZjTHogBf +DncLKvbdhytfLqNf +EPCkKvbdnPyxvKxb +DncLKvbdjcMKqHVH +EPCkKvbduWNwjRTA +DnbkKvbdwygfGXeS +EObjjvbdTlWOaVoJ +EPCjjvbdUtNUGLvK +EObkKvbdKkAgvAKZ +EObkKvbdaMkCTUmH +EPDKjvbdOFDshhjd +EPDLKvbdhzUfLpmf +EPCkKvbdkySrTYgU +EOcLKvbdFfKSNhsq +DncKjvbdOAJTUKSA +EPDLKvbdrDeJPmvB +EPCkKvbdKRZdnfNe +EPCjjvbdRDcAoqDr +EOcKjvbdNHDQNPtk +EOcLKvbdVTmTfMVj +EOcKjvbdrXQMChyR +DoCjjvbdZQmFJNEq +EPCkKvbdWRmwadkc +EObkKvbdSCDeLhyL +DncKjvbdyNsHxTJD +EPDKjvbdtSrTYydc +DoDLKvbdiGjCxuiu +DoCkKvbdrNZjZLgi +EPDLKvbdJmADzGuB +DncLKvbdtcCuWuno +DnbjjvbdDxXktTtM +EPCjjvbddZyPxZQb +EPDLKvbdlqxtysDi +DoDLKvbdbAueGPpX +EObjjvbdVviXvDdg +EPDKjvbdBdQAvKMf +DnbkKvbdPxmAHSqj +DoDLKvbdUsltFlWK +DncKjvbdVhYWYHYz +DoDKjvbddwzTtSFz +DncLKvbdIGfzYwwg +EPCjjvbdmJDsqUrB +EPCkKvbdGQASwGey +EOcLKvbdTlWOaVoJ +DncLKvbdLFehCBRV +DnbjjvbdTkvOaVoJ +EPCkKvbdwXMAvBWV +EObjjvbdpxnhGqDx +EOcLKvbdsrqryZeD +DoDLKvbduVnXjQsA +DncLKvbdRotHKFdX +EOcKjvbdnUtyjirG +EOcKjvbdCJLCLJFj +EOcLKvbdSCEFLiYk +DoDLKvbdjcMLQgVH +DoCkKvbdLBLGlaxR +EObkKvbdZQldiNFR +EOcLKvbduMXwAsaX +DncKjvbdxrnIlrBg +EObkKvbdehKvRnRH +DoDLKvbdRosfiecw +DoCkKvbdFjdrcINV +EPCjjvbdkWWmdBxX +DnbjjvbdFkFTDHlu +DoCjjvbdTAEhgaoE +DoDKjvbdANIZTWyx +EObkKvbdJSyAsNYM +EPDLKvbdqTtHRqkU +EPDKjvbdbBVeFoow +EPCkKvbdYSkaMsoY +DncLKvbdDnbkKwDE +DncKjvbdMSWlzUpz +DncKjvbdauCHXjsh +DoCjjvbdTvMQKUBR +DoDLKvbdrRuLOLAm +EOcKjvbdatbGxKtI +DncLKvbdNGcQMotk +EPDKjvbdiCObeWqR +DoDKjvbduDDUwVno +DncLKvbdYlRcsmkm +DncKjvbdbAueFoow +EObkKvbdYTMBNToY +DncKjvbdvAdYsPEh +EObjjvbdBdQBWKMf +DnbkKvbduCbuWuno +EOcLKvbdKWVGEFHJ +EObkKvbdcyyQXxqC +DnbkKvbdaMjasUmH +EPCkKvbdmgEwlmfy +DoDLKvbdrDdiQOVa +DoDKjvbdUyIUZjnn +DnbkKvbdnBjXYOnV +EOcKjvbdRpTgJfDw +DncKjvbdjcLjqGuH +DnbkKvbdZjTIQHCG +EOcKjvbduVnYKRTA +DnbkKvbdGckWJbKK +EObjjvbdZyEJnDMS +DncKjvbdNsUWGduQ +EObjjvbdKQzEoFme +EOcKjvbdVUMtGLvK +EPDKjvbdrJAKFMoF +DoCkKvbdNrsvHFVQ +DncLKvbdSKyGUfjs +DoCkKvbdVvhxWEFH +DncLKvbdFejRnIsq +EObjjvbdVYhUZkOn +DoCjjvbdxUmEpxkn +DoDLKvbdBiLCKhej +DoDKjvbdIjEAJofd +EOcKjvbdwzHfFwdr +DncKjvbdFjeTDHlu +DnbjjvbdbiMjKewY +DnbjjvbdaNLCTUlg +EObjjvbdDwxMUUTl +DoCkKvbdmttykKSG +EPDKjvbdiUyeXSVC +EPDLKvbdWIYVwfxz +EPDLKvbdemFvgMik +DoCkKvbdUyHszKoO +EObkKvbdTXkMNzjx +DoDKjvbdSQTgKFdX +DnbjjvbdLiBkpxAS +EPCkKvbdRosgKGEX +DoCkKvbdmfdwmNgZ +DncLKvbdiHJbyViu +DncLKvbdxrnJMqbH +EOcKjvbdhlFENtcZ +DoCjjvbdbKkennDA +DnbkKvbdGckWKBjK +DnbjjvbdUyIUZkOn +EPDKjvbdeEnrCXDK +EOcKjvbdsBfMkgKy +DncKjvbdxsNiNSBg +EPDKjvbdkNCLzEgP +EPDKjvbdSKyGVGjs +DoDKjvbdrWolChyR +DncLKvbdWSNwaeLc +EOcKjvbdJYTbHkqQ +DnbjjvbdZshiZDsO +DoDKjvbdSKxfUfjs +EPCkKvbdptTgRrKt +EPCjjvbdREDApQdS +DncLKvbdtvOXjRTA +EPDKjvbdemGXGljL +EObjjvbdBdQAvJmG +EPDLKvbdhuZdwRuC +DncLKvbdjvWnDaxX +EPDLKvbdFVxopMie +EPCkKvbdajkeoNcA +EPCjjvbdSPsfifEX +DnbkKvbdBsAcTfWr +EPCjjvbdEOcLLWcE +DoCjjvbdZLrDsmlN +EPCkKvbdxnSgxTIc +EObjjvbdGQATXGey +EObkKvbdbsDLUEKB +DoCjjvbdrSVKmjaN +EPCkKvbddneTLUUS +DoCkKvbdxmrgwsJD +EPDKjvbdGYuVAdXb +DncLKvbdauBfxLTh +EPDLKvbdrMzKZLgi +EObkKvbdUsltGLvK +DnbjjvbdDxXlTstM +EObkKvbdsBfNLgLZ +DncKjvbdidjgUoAO +EPDLKvbdJJdAKQHE +EOcKjvbdbBWFFpQX +EPCjjvbdSZihTDWA +EPCkKvbdhgKCxuiu +DncKjvbddneTLUTr +DoDKjvbdczZPxZRC +DnbjjvbdlYrrTYft +DoDKjvbdWXJXvEEg +EPDLKvbdbhmJkFvx +EPCjjvbdDxYLtTsl +EPDKjvbdqdFIonVa +EObjjvbdCIjbLIej +DnbjjvbdmbKXXnmu +EPDKjvbdlZTSTYft +EPDKjvbdwXMBVaWV +DnbjjvbdSPtGjGEX +DoDKjvbdrMzKYlHi +EPCkKvbdiVZdwSVC +DnbjjvbdptUHSSKt +DncLKvbdcSbjscjB +DoDKjvbdSPsfiecw +EOcKjvbdegkVqnQg +EObkKvbdjuvmcbXw +DncKjvbdCJLCKhfK +EObjjvbdVqnYBeMD +DoCjjvbdKCjCqJcY +DncLKvbdZRMdhmEq +EOcKjvbdrRtkOKaN +DoDLKvbdRpTfiedX +DoCjjvbdRMwbZOUz +DoCjjvbdrXQMDIxq +EObjjvbdsrqsZZdc +DnbjjvbdfjfzbfAE +DoCkKvbdJSyBTMxM +EPDKjvbdnCJvwoNu +DoCjjvbdmbJvwoNu +DnbkKvbdFWZQPljF +DncLKvbdxnSgwriD +DnbjjvbdVvhwucdg +DoCjjvbdjgfkfFnL +DncLKvbdzRPMiKXA +EOcLKvbdqZPHgREY +EPCkKvbdrylPsAgn +EPCkKvbdVZITykPO +DoCjjvbdhkeEOVDZ +EOcKjvbdUVkpJtAq +EOcKjvbddCTMrAUN +EPDKjvbdZeXfzghb +EPCjjvbdiMFDmuDZ +EPCjjvbdJKEAJpHE +EOcLKvbdajkeoODA +DnbjjvbdZRNEhmFR +EOcLKvbdNHCpNQVL +EObjjvbdmRxtzSci +DoCjjvbdzRPMhjXA +DnbkKvbdnGdwmNfy +EObkKvbdvAcxsOeI +DoDLKvbdBsAcTevr +DoCkKvbdozmdKxPA +DnbkKvbdTlVoBVoJ +EPCkKvbdqwQLcIxq +DncLKvbdbiMjLGWx +DoDLKvbdfHkWRnRH +EOcKjvbdbVCGxKsh +DoCjjvbdTqRPUthN +DoCkKvbdbQGgELzd +EOcLKvbdQZNAHSrK +DoDLKvbdZyDjNbkr +EPCjjvbdqiAJdmOe +EObkKvbdKaLHNBxR +DncKjvbdyXhjBozL +EObjjvbdDjIKWYKA +EOcKjvbdLFegaaQu +EPDKjvbdZjTIPgCG +EOcLKvbdfHjuqnQg +DnbjjvbdlhcsqVRa +DoCjjvbdMuSqkNAX +DncLKvbdCIkBkIej +DncKjvbdUaCQsQqy +EObjjvbdRbDdkhyL +EOcKjvbdpssfrRkU +EOcKjvbdLGFhBaQu +EPCkKvbdqqtjnLBN +EOcLKvbdWRmwbEkc +EObjjvbdpedFTuaI +DoCkKvbdJJdAJofd +DoDLKvbdwNWANEEm +EPCkKvbdYgWdAOri +DoDLKvbdvAcyTOeI +DnbkKvbdbhmJjfWx +EOcLKvbdypnliKXA +EOcKjvbdZyEJnClS +DoCjjvbdZoNhdeZj +EPCkKvbdkDLkRGtg +EObjjvbdNsUWGdtp +DnbjjvbdZQldhmFR +EOcKjvbdYpmEhldq +EPCkKvbdZQmEiMeR +DnbjjvbdhytfLpnG +EObjjvbdmtuZkJrG +EObjjvbdGLEsDINV +EPCjjvbdVhXvYHYz +DoDLKvbdKefICAqV +DncKjvbdUtMsfLvK +EOcLKvbduaEZTOeI +EPDKjvbdddoSBwDK +DoCkKvbdffLymgHA +DnbkKvbdbAueGQQX +DnbkKvbdbrcLTcia +EPCjjvbdRbEElJYk +DoCkKvbdGFirNiTq +DoDKjvbdNdctIhkE +EPDLKvbdQccAoqES +DnbkKvbdFfKRnJUR +DnbjjvbdFfJrNiUR +EPDLKvbdCfkegAzc +EPCjjvbdRXNccMHc +DoCkKvbdZjShPgBf +EOcKjvbdSLZGUfkT +DoDLKvbdBcpAujMf +EOcLKvbduWNwiqTA +DoDLKvbdpyOgfqEY +EOcKjvbdcScKtEJa +EObjjvbdnCJwXoNu +DnbkKvbdjFLGtoAO +DoCjjvbdXrlBMsnx +EPDKjvbdhgJcZWJu +DoCjjvbdiBoDEvpq +EPDKjvbdczYoxYqC +DoDLKvbdjFLHVPAO +DnbjjvbdbPgGdLzd +DoDKjvbdWIYWYGxz +DncKjvbdhytfLpnG +EObjjvbdfHjuqnQg +DnbjjvbdmgExMmgZ +EOcLKvbdhgKDYuiu +EPDKjvbdmJEURVRa +DoDLKvbdJpyePGNe +DoDLKvbdlhdUQuRa +EObkKvbdmuUzLKSG +DnbjjvbdxwhjBozL +EPDLKvbdVZIUZjnn +EPDLKvbdJpydnfOF +EPCkKvbdqqtjmjaN +EPCkKvbdZoOJFFZj +DnbjjvbdmttzKjRf +EPDLKvbduWOXjQsA +EOcLKvbdwtleRYkn +DoCjjvbdLYpjSzuG +EObjjvbdIsYaSmYM +DnbjjvbdyzeORhJI +EOcLKvbdkWWnECXw +EPDKjvbdVviYVcdg +DoDKjvbdBcoaVjMf +DoCkKvbdiMEcmuDZ +EObjjvbdLKaHvAKZ +DncLKvbdJTZArlwl +EOcLKvbdhaoCeWpq +DncLKvbdrWpLcJZR +EObkKvbdHkaznWpk +DnbjjvbdzjVPocrt +EOcKjvbdyqPMhiwA +DoCkKvbdpstHRqkU +DnbkKvbdRkYfVHKs +DoDLKvbdVgwvYGxz +EOcKjvbdFfKSNiUR +DnbkKvbdqquLOLBN +DncKjvbdOAJTTjSA +DoDKjvbddneSkUTr +EObkKvbdlqyUysEJ +DoDKjvbdbhmKKevx +EOcLKvbdiCObdwQq +EPCkKvbdFejSNiTq +EObkKvbdwygfGYEr +EPDLKvbdsQWPKDVf +DncKjvbdjbkjpfuH +EPDKjvbdRkZFuGjs +EPDKjvbdwyhFfXdr +DncKjvbdcIlikFvx +DoCkKvbdiUydwSVC +DncKjvbdiUzFXSVC +EOcKjvbdjKFgimYS +EPDKjvbdjvXODaww +EPCkKvbdRbDdlJZL +EObkKvbdrEEhpNvB +EObjjvbdrpVoKDWG +DoCjjvbdNxPVzcnU +EPDKjvbdVgwvYHYz +DnbjjvbdmuUyjirG +EObjjvbdrSVLNkBN +DncKjvbdUWLojUBR +EOcLKvbdwygefXeS +EObkKvbdhaoDEvqR +EOcLKvbdGGKRmiUR +EOcKjvbdeEnqawDK +EPDLKvbdGGJqnItR +DoDLKvbddeOrBvbj +DnbkKvbdiVZeWquC +DncLKvbdJcJcQjDY +EPDLKvbdkDMLQgUg +EObjjvbdemFvflik +EObkKvbdwzHeewdr +DoCjjvbdHDjuiajK +DoCkKvbdrEEiPnVa +EOcLKvbdypnmJKXA +DoDLKvbdmgFXmOHZ +EObkKvbdUsmUFkuj +EPDLKvbdcScKtDjB +EPCkKvbdUyITzLOn +DncKjvbdZnnIddyj +EPCkKvbdaaVeGPow +DoCjjvbdSQTfifDw +DoDKjvbdDoDKkXCd +DncLKvbdhtzEwRuC +EObkKvbdMpXqVnGs +DoDKjvbdDncLLXCd +DoCkKvbdtcDUwVoP +DoDKjvbdtSqryZdc +EPDKjvbdbBWFGPpX +EPCjjvbdmRxtyrdJ +DoDLKvbdGckVjCJj +EObjjvbdzoPpeCkx +DnbjjvbdKWVFceHJ +EPCjjvbdSKyGVHLT +DoDLKvbdelevgNKL +DoCjjvbdTXjlNzkY +DoDLKvbdpstHSSLU +EPDKjvbdhgKCxuiu +EObkKvbdZQleJMeR +EPCjjvbdKVuGDdfi +DncKjvbdUGzmkvvF +DncKjvbdxrnJMqbH +EPCjjvbdKVuGDdgJ +EObjjvbdptTgRqjt +EObjjvbdCDpAujMf +EPDKjvbdczZQXyRC +DncLKvbdqYngfpdY +EOcLKvbdqBIeAXIE +EPDLKvbdZLrETmlN +EPDKjvbdNeEThhjd +EOcLKvbdmbKWxOnV +DoCkKvbdCDoaWKNG +EOcLKvbdEOcKkWbd +EPCkKvbdNQXpvOGs +EPDLKvbdFyUtaDxC +EPDKjvbdbLMGOnDA +DoDLKvbdJcJcQjDY +EPDLKvbdOTUWHFUp +DoCjjvbdmgFXlnGy +EOcLKvbdRDbaQRES +DoDLKvbdcyxowxpb +EPDLKvbdliEURVSB +EOcKjvbdXnRAXuWU +DoCkKvbdDnbjjwDE +DoCkKvbdKVuGEEfi +EObkKvbdyOTHxShc +EPDKjvbdySnIlqbH +DoDLKvbdHELWJbJj +DnbjjvbdyOTHxShc +DnbjjvbdczZQXxpb +EPDLKvbdZLrDsmkm +EPCjjvbdfNGWflik +EPDKjvbdmbKWwnmu +DncKjvbdrDdiPnWB +EObjjvbdHDjvKCKK +DnbkKvbdUVkojTaR +EObjjvbdptTfrSKt +EPDKjvbdFxttaEXb +DoCkKvbdjvXNcbYX +DoCkKvbdSLYfUgKs +EOcKjvbdHakzEzAD +DncLKvbdiCObdwQq +EPDLKvbdZLqdUNlN +DoDLKvbdhkeDnVCy +EPCkKvbdemFvgNKL +EObjjvbdliDtQuRa +EObkKvbdwuMdpxkn +EObkKvbdirzhrkJz +EPCjjvbdJYTahLqQ +DncLKvbdIHGyxwwg +EPCjjvbdSQUHKGEX +DoCjjvbdZshiYcsO +EOcLKvbdPyNAHSrK +EPCjjvbdbsCjscia +EObjjvbdUWLojUBR +DoDLKvbdKeehBaQu +EObjjvbdjuwODaww +DoDLKvbdtkxXAsaX +DncLKvbddneSkTtS +DnbjjvbdZtJIxcsO +DnbjjvbdJTYaTNXl +EPCjjvbdGKeTDHlu +DoDLKvbdKQydoGNe +DoDKjvbdVrOXaeLc +EPCkKvbdzHYlAMeX +DoDLKvbdBvzchdov +EObkKvbdapGgELzd +DoDKjvbdaMkBsUlg +DnbjjvbdVUNTelWK +EObjjvbdiHJcZWKV +DncLKvbdZoNheEyj +DncKjvbdDHMFgAzc +DnbkKvbdFpATXGey +EPDKjvbdMpXqWOHT +EPCjjvbdmSZVZrdJ +EPDKjvbdcIljKfXY +DoCkKvbdjcLkRGuH +DoDLKvbdGYuVBEXb +EObkKvbdWXIxWDeH +DncKjvbdQlxCZOUz +DnbjjvbdYNqAXtut +EPDLKvbdGdKvJbJj +DoDLKvbdGLFSbglu +EPCkKvbdRjxfVGkT +DoCkKvbduCbuXWOo +DoCjjvbduCbtvuno +EObkKvbdjAQGaQGj +DoDLKvbdqBJFAXHd +EOcKjvbdkClKpgVH +EOcLKvbdiMFDmtby +EPDLKvbdjvXNcbXw +EPCkKvbdxUmFRYkn +DoDKjvbdHgGyyYXg +DoCjjvbdRzJhScWA +DnbkKvbdlZTRsYgU +DnbkKvbdFVxpQNJe +EPCkKvbdZyEJmcMS +EObjjvbdZQldhmFR +EObjjvbdYSlBMtPY +DncLKvbdvBDxsOdh +DoDLKvbdvAdYrndh +DoCjjvbdZyEJmcLr +DnbkKvbdKaLGmCXq +DnbkKvbdZQmFImEq +EOcKjvbdqvolDIxq +DnbkKvbdVqnYBdkc +DoCkKvbdnPyxvLZC +EOcLKvbdmJEURUqa +DoDLKvbdfHkVrNpg +DoCjjvbdznopdblY +DoCkKvbdjvWmdCXw +EOcKjvbdunszpjnt +EObkKvbdzoPqFDMY +EObjjvbdDxXktTtM +EObjjvbdBcoaVjMf +DncKjvbdtcDVWuno +EObjjvbdpyOggQdY +DnbkKvbdwWkaWAuu +EPCjjvbdajkeoODA +EOcKjvbdKNAEZfta +EOcKjvbdZisIQHCG +DncLKvbdEXwksstM +DoDKjvbdtbbuXVoP +DncLKvbdDxYMTstM +DoCkKvbdcyyPwxpb +EPCkKvbdxmrgwsJD +DoDKjvbdYSkaNUOx +EOcLKvbdxwhjCPyk +DncKjvbdUsmTekuj +DnbkKvbdkVwOECXw +EObkKvbdnBjXYOnV +DncKjvbdcasNSATm +EPDKjvbdTAFIhCOd +DnbkKvbdkWWnECYX +DnbkKvbdFjeSbgmV +DoCjjvbdJzoewdAN +DnbkKvbdZeXfzhIb +DncKjvbdMJCLqYAS +DoCkKvbdGLFTCglu +DoDLKvbdMuSrLNAX +EOcKjvbdqceIomvB +DoDLKvbdegkVqnRH +DoDKjvbdKfGICBQu +EOcKjvbdEvYopNKF +DnbjjvbdlrZVZsEJ +DoDLKvbdqqtjmjaN +DncLKvbdQmXaxmtz +EPDKjvbdCDoaVjNG +EPCkKvbdqquLNjaN +DnbjjvbdKRZdoFnF +DoCkKvbdkVwOECYX +DncKjvbdGQATXGfZ +DncLKvbdCDpAujMf +EOcKjvbdDxXlUUTl +EPCjjvbdYkrEUNlN +DnbjjvbdZtJIyETO +DoCjjvbdXsMAltPY +EOcLKvbdxxIjCPzL +DoDLKvbdSLZFuHLT +DncKjvbdFVyQQMjF +DoCjjvbdFaOpyJzm +EPCjjvbdrJAJdmPF +EOcLKvbdMuSqjmAX +DncLKvbdEJgiuxKA +EPDKjvbdBdQAuimG +DnbjjvbdWXIxVdFH +DnbkKvbdHDkVjBjK +EPDKjvbdnHEwlmgZ +EPCkKvbdBiKbKhfK +EPDKjvbdhyuGLpnG +DoCkKvbdZsiJZDsO +DnbjjvbddBrlrAUN +DoCkKvbdYqMeIldq +DncLKvbdZLqdUNkm +EOcLKvbdMuSrKmAX +DoCkKvbdDxXksstM +EOcKjvbdqdEiPmua +DoCjjvbdOEdUJIjd +DoCkKvbdEObkLWbd +EObkKvbdfekynHHA +EPCkKvbdrEFIpNvB +DnbkKvbdnBjXXoOV +EPCjjvbdmgEwmOGy +DncKjvbdKCjDQjCx +EPDKjvbdJqZdoGOF +DncKjvbdUsmTfLuj +DoDLKvbdjcMKpgUg +EPDLKvbdSQUGjGDw +DnbjjvbdRacdlJYk +DncKjvbdYgXEAOsJ +EPCjjvbdhficZWKV +DoDKjvbdGAnpxizm +EPCkKvbdRbDeLhyL +DoDKjvbdiBncEwQq +DoCkKvbdxZgfFxFS +DoCjjvbdqvpMChyR +EObjjvbdbUbGxKtI +DoCkKvbdEObkKvcE +DnbjjvbdKQzEnfNe +DoCjjvbdRWnDblID +DnbkKvbdkxrqsYgU +DncLKvbdqwPlCiYq +EPDKjvbdSZjHsDWA +DncLKvbdEPCjjvbd +EOcLKvbdpyPIGpcx +DncLKvbdbVCGwkTh +DnbkKvbdnPzZWKxb +EObkKvbdGKeTDIMu +EOcKjvbdiifIKNYS +DncLKvbdnQZxvKxb +EPDLKvbdGFjSNiUR +DnbjjvbdRNXaxnUz +EPCjjvbdOTTvGduQ +EObkKvbdUtMselVj +DoCjjvbdnUuZkKSG +EPDKjvbdQmXaxnUz +EPCkKvbdNeDtIhjd +DncLKvbdNxOuzdOU +DncKjvbdJJdAJpGd +DoDKjvbdwuNEqYkn +DncKjvbdZMSDtOLm +DnbjjvbdNeDsiJLE +EPCjjvbdJpzEoGOF +EPCjjvbdkDLkRGtg +DoCjjvbdUWLpJtAq +EPDKjvbdfMfWfljL +EPCkKvbdrMzJyMIJ +DoCjjvbdJKEAJofd +DnbjjvbdnBiwXoNu +DoCjjvbdDihJvYKA +DnbkKvbdSZigsDWA +DoCjjvbdFejRmhsq +DnbkKvbdaMkCTVNH +EObkKvbdczZPxZRC +EPDKjvbdVZIUZjnn +DoDKjvbdkySrTZGt +DoDLKvbdsPvPKDVf +DoCkKvbdwWlBVaVu +EPDKjvbdANIZSvyx +EPCkKvbdnHFYNNgZ +DnbkKvbdNdcsiIkE +EPDLKvbdDoCkLWbd +EPDKjvbdQccBPqDr +EObkKvbdSPsfifEX +EOcKjvbdelfXHNJk +EObkKvbdFfKRmiUR +EOcLKvbdKCibqKDY +EPDLKvbdUWLpJsaR +EPCkKvbdKfFhCBQu +EOcKjvbdmuUzLJrG +EOcLKvbdBdQBVjMf +EOcKjvbdfpBzvcwh +EOcKjvbdmRyUzSci +EOcKjvbdFVxpPlie +DnbjjvbdDwwlUUUM +DncKjvbdUyHsyjoO +DoCkKvbdUslselVj +DncLKvbdmuUykJqf +DncLKvbdLFfHbApu +DncLKvbdhyuFlROG +EPDKjvbdxnTIYTJD +EPDKjvbdTulPjUAq +DoCjjvbdCDoaWJlf +DoCkKvbdbLMGOnDA +EPDKjvbdOStVfdtp +EPCkKvbdZRMeImFR +DoDLKvbdiVZeXRuC +EPDKjvbdRosfiedX +DoCjjvbdnGeYMnGy +DoCjjvbdiiehKNYS +DncKjvbdbhmKKfXY +EOcLKvbdnBjXXoNu +EPDKjvbduLwwAtAw +EOcLKvbdygYlAMeX +DoCkKvbdNsTvHEtp +EPCjjvbdsrrTYzFD +EPCkKvbdBdQAuimG +DncKjvbdmfeYMnHZ +EOcKjvbdxZhFexEr +DncLKvbdZshhyETO +EObkKvbdOFEUJJLE +DoDLKvbduDCtvuoP +EOcKjvbdGZVVBEYC +EObjjvbdZRMeJNEq +DnbkKvbdkxsRsYft +DnbkKvbdsBfNLfjy +EOcLKvbdNPxQvOHT +DnbjjvbdpstHRqkU +EOcLKvbdZQleJNFR +EPCjjvbdxVNEpxkn +DoCkKvbdwtmEqZLn +DoCkKvbdGAoQxizm +DoDLKvbdVqmwaeLc +DoDKjvbdKfGHaaQu +DoCjjvbdcJNKLGWx +EPDLKvbdrzMPsBHn +DncKjvbdfoazwDxI +EPDKjvbdZyEJnClS +DnbjjvbdwMvANDeN +EObjjvbdZshiZETO +EPDKjvbdUslselVj +DoDKjvbdwtmEpyLn +DncLKvbdJTYaTMxM +EPDKjvbdvBDxsOeI +DoDKjvbdxrmhmSCH +EPDLKvbdjJegjNYS +EOcKjvbdJvUedEgJ +DnbkKvbdVZITyjoO +DoDKjvbddePSCWbj +DncKjvbdWIXvXgYz +EPDKjvbdZQmFJMeR +DnbjjvbdqdEiPnWB +DoDLKvbdUVkojTaR +DoDLKvbdFVxpPmJe +EPCjjvbdxmsHwsIc +EPDLKvbdiiehJlxS +EPDLKvbdCTAbsewS +EPCjjvbdzoPpdbkx +DnbkKvbdijGHilxS +EPDLKvbdOYOuzdNt +EOcLKvbdTppoUuIN +DnbkKvbdcScLUDia +EOcLKvbdePFTLUTr +EOcLKvbdhgKCxvKV +EPCkKvbdrJAKFNOe +EOcKjvbdVwJXucdg +EPCkKvbdNddUJJKd +DncLKvbdJYUCHlQp +EObjjvbdkVvnDaxX +EPCjjvbdNeDsiJLE +EPDKjvbdyzeNqhJI +EPCjjvbdmIdTqUrB +EPDKjvbdZoOJFEyj +DoDKjvbduaDxsOeI +EPCkKvbdKjaIWAKZ +DncLKvbdKaLHMbYR +EOcKjvbdrafMlHKy +EPCjjvbdhtzEvqtb +EPCkKvbdddoSCXDK +EOcKjvbdzjUpPdTU +EPCjjvbdLZRJrzuG +EOcKjvbdaMjaruMg +DoCkKvbdyOSgwsJD +EPCjjvbdKDKCqJcY +EObkKvbdvAcxrneI +EObjjvbdwuMeQxkn +DncLKvbdmSZUysDi +DnbkKvbdcIlijfWx +DoDKjvbddndrjtTr +EOcKjvbdwtmEqYlO +EOcKjvbdYzcFqivZ +DnbkKvbdCDpBWJmG +EOcKjvbdaSGCgsfL +EObjjvbdIwtBhLqQ +DnbkKvbdyzdmrIIh +EPDLKvbdWexzUAOs +DncLKvbdRXNdCkgc +EOcKjvbdkVwNdBww +DncLKvbdIGfzYxYH +DoCkKvbdbAvFGPow +DoCkKvbdQlxBxnUz +DncKjvbdqrUkOKaN +EPDLKvbdZisIQGaf +DoDKjvbdsQWPJbvG +DncLKvbdjhHMFfNk +EObkKvbdwNWAMdFN +DoCkKvbdeKKRutzn +EObkKvbdJpyeOfNe +EOcKjvbdQmXayNtz +DncKjvbdnHExNNgZ +EPCjjvbdULuoBVni +DoCjjvbdqquLNjaN +EPDKjvbdyzdnSIJI +DnbkKvbdQvnDcLgc +DoCkKvbdtcDUvvOo +DnbjjvbdnGeXmNfy +DoDKjvbdxsNhmRbH +DoDKjvbdtTSSyZeD +DoDKjvbdRadFMJZL +EOcKjvbdUaCQrpqy +DoDLKvbdEJgivXjA +EOcLKvbdGFjSOItR +EPDLKvbdaSGDIUGL +DnbjjvbdJYTagkqQ +EOcLKvbdZLrDsmlN +EOcLKvbdEJgiuwjA +DoDKjvbdxUleRYlO +DnbjjvbdQwODcLhD +EObkKvbdOTUVgEtp +EObkKvbdRMwaxnUz +EObjjvbdrEFJPmua +EOcLKvbdiUzEvquC +DoDKjvbdMpYQumfs +EPCkKvbdhancEvqR +DncKjvbdkNCMZdfo +DncLKvbdZHWdAOri +EObjjvbdlrYuZrci +EObjjvbdgLGzbfAE +EObjjvbdcTCkUEJa +EPDLKvbdVAbRTRRy +DoCjjvbdYqNEiMeR +DncKjvbdBvzchdpW +DnbkKvbdtSqryZdc +EPCjjvbdwygeeweS +DoCkKvbdqlzJyLhJ +EOcLKvbdtbbtvvOo +DoDKjvbdrSVKnLAm +DnbkKvbdfMevgNKL +EObjjvbdRacdkhyL +EPCkKvbdFpASvgGZ +EPDLKvbdZoOJFEyj +EPCjjvbdzjUpPcrt +EOcKjvbdcbSlrATm +EOcKjvbdqwPkbhxq +DnbjjvbdHELVibKK +EPDKjvbdZQldiMeR +DnbjjvbdpstGqrKt +DoDKjvbdGFjRmiUR +EPCkKvbdssRsZZdc +DnbkKvbdlqxuZsDi +DncKjvbdEXwlUTtM +DnbjjvbdyzdnRhIh +EPCjjvbdkCkkRGtg +EOcLKvbdLrWlytpz +EPCkKvbdCEQAvKNG +DncLKvbdVwIxWDeH +EObkKvbduMYXBTaX +DoCkKvbdRyihTDWA +DnbjjvbdkaMoNALA +DnbjjvbdaMjartlg +DoCkKvbdNVTSKmAX +DoDLKvbddwystRez +EPCjjvbdcImJjevx +DoCkKvbdeAUQlwjG +DoDKjvbdZxcjNblS +DncLKvbdkIGlFenL +DoCjjvbdfHjurNqH +DoCkKvbdiBoDFXRR +EPDLKvbdvBDyTPFI +DnbkKvbdUxhUZkPO +EObjjvbdqZOhHQdY +EOcKjvbdSCDeLiZL +DncKjvbdozmckYPA +DncKjvbdgGLymgHA +DncKjvbdILaznWpk +EPCjjvbdqUTgSSKt +DoCkKvbdrovOjCuf +EOcLKvbdKfGIBaQu +EPDKjvbdCIjajiFj +EPCkKvbdmoyxujyC +EObkKvbdySnJMrCH +EOcLKvbdHDjujBij +EObjjvbdrMyiyMHi +DoCkKvbdiifHimXr +DnbkKvbdbsCkTcia +DnbkKvbdMfbpNPtk +EOcLKvbddoErkUTr +DncLKvbdqZOhGqDx +DnbjjvbdDncKkXCd +DoCjjvbdSCEElIxk +EPCkKvbdbUbHXjsh +DnbkKvbdCTAcUGWr +EPDLKvbdZtIiZESn +DnbjjvbdrDeJPnVa +DoCkKvbdZisIQHCG +DncLKvbdgFkzOHHA +EPCkKvbdmfdxMmfy +DncLKvbdMIbMRYAS +EOcKjvbdaogGckzd +EOcLKvbdLAkHMawq +DncLKvbdxwiJbQZk +DncLKvbdauBgYLUI +DnbkKvbdnQZxvKyC +EOcKjvbdFkEsChNV +DoDLKvbdpstGrRjt +EPDLKvbdlYrrSxgU +DnbjjvbdZQmFIldq +DoCjjvbdbhmKLFvx +EObkKvbdsBellGjy +DncLKvbduCcUwWOo +EObkKvbdJuuGEEfi +DoCkKvbdIwtCHkqQ +EPCkKvbdaMkBruMg +DncLKvbdEARiMyvw +EObjjvbdmgExNOGy +DoCjjvbdpfDdsuaI +EPDLKvbdEzspdlCi +EPDKjvbdqdFJQNua +DnbkKvbdnBjWxOnV +EPDLKvbdZisHogBf +EPCkKvbdjcMKpftg +DnbkKvbdauCGwjsh +DoDKjvbdlYrrTZHU +EOcLKvbdzjVPpDrt +DoCkKvbdQdDApQdS +DoDKjvbdehLWRmpg +EPDLKvbduoTzpkPU +DoCkKvbdliDspuRa +DoDKjvbdEXxLsssl +EObjjvbdZsiJYcrn +DoCkKvbdaaWFGPpX +DoCkKvbdrafNMHLZ +DoCjjvbdmgEwlnHZ +EPCkKvbdFkEsCgmV +DncKjvbdqmZjYlHi +DoCkKvbdfILWSORH +DoDLKvbdnCKXYOnV +DnbkKvbdHgGyyYYH +DoDLKvbdEKHjVxKA +EPDKjvbdbAueGPow +DnbkKvbdFyUuBDwb +EPDKjvbduCcUvvOo +EObkKvbdauBfxKsh +EObjjvbdZjTIPgBf +EObkKvbdNGbolpVL +EOcKjvbdeFOqbWbj +DoCjjvbdvwMAvBVu +DnbkKvbdzRPMhjXA +DncKjvbdFkErcIMu +EPCjjvbdhlFEOUcZ +DoCkKvbdJbjCpicY +EPCkKvbdZGwEAOri +DnbkKvbdNQYQunHT +DoCkKvbdkIHMFfOL +EObkKvbdHELVjBij +DoDLKvbdZQldhleR +DoDLKvbdVTmTelVj +DnbjjvbdJTZArlwl +DnbkKvbdCDpAvKMf +DoCjjvbdDxYLtUTl +DoDLKvbdwkWcgzyf +EPDLKvbdLBKgNCYR +DoDLKvbdZMSEUNkm +EOcLKvbdxUmEpxkn +EOcKjvbdGLFTDHlu +EOcLKvbdyYJKCPyk +DoCjjvbdDnbjjvcE +DoDLKvbdatbHXjtI +EObjjvbdbiMjLGWx +EPDKjvbdTYKlNzjx +EOcKjvbduDDUvvPP +EObkKvbdliETpuSB +DnbjjvbdrWolDIxq +EObjjvbdqZOggQcx +EOcLKvbdyXiKBoyk +DnbjjvbdqmZiyMIJ +EPCjjvbdULuoAuoJ +DoDLKvbdYzcGRivZ +DnbjjvbdtkwwBTaX +DnbjjvbdJbicQicY +DoCkKvbdTukojTaR +EPCkKvbdHbLydzAD +EObjjvbdVTltGLvK +EPCjjvbdUsmUFkuj +EPDLKvbdTqROuVIN +DncLKvbdYkrETnLm +DoCkKvbdeFPSBwDK +DnbjjvbdNGcPmPtk +DnbjjvbdWHwuxHYz +DoDLKvbdNUsRjmAX +EOcKjvbdZjTHpHBf +DncKjvbdWXIwvDeH +EOcLKvbdrJAKEloF +DoCjjvbdFeirOJUR +EOcKjvbdWWhwvEEg +DncKjvbdKeehBaQu +DnbjjvbdZLrDsmlN +EOcLKvbdZnnIeFZj +DoCkKvbdjKGHjMwr +EObkKvbdmIctQtqa +DoCjjvbdkClKpfuH +DnbjjvbdcTDKscia +DnbjjvbdADSYKZiQ +EObkKvbdygZMANFX +EPCjjvbdaMkCTUlg +DoDKjvbdzjVPodTU +EPCkKvbdIxTagkpp +EPCjjvbdZjSgpHBf +EOcLKvbdiCOcEvpq +EOcLKvbdsQWOibvG +DoDKjvbdEuxoomJe +DoDKjvbdmuVZkKSG +DoCjjvbdSZjITDWA +DoCkKvbdCJLBkJGK +EPCkKvbdliDsqVSB +DoCjjvbduaDxrneI +EOcLKvbdtvNxJpsA +EOcKjvbdEuyPoljF +DnbjjvbdwWlAuaWV +DncLKvbduMXvaTaX +EObjjvbddxZstSFz +EPDLKvbdmttykKSG +EPCjjvbdfIKvRnRH +DoDLKvbdjgfkeemk +DoCkKvbdHELVjBjK +EObjjvbdaRecIUGL +DnbkKvbdmSYuZrci +DoDLKvbdKfGHaaQu +EOcLKvbdIwsahLpp +EOcLKvbdEuyPomKF +DoCkKvbdsQWPJcVf +DnbjjvbdbPgHDkzd +DoDKjvbdZMSETnMN +DoDKjvbdJSyBTMwl +EPCkKvbdSCDeMIxk +DoDLKvbdtkwwBTaX +DoCjjvbdtbcVWuoP +EPCjjvbdozmdKxPA +DoCjjvbdtkwwBUBX +DoDLKvbdQdDBPpcr +DoCjjvbdJbjCpjDY +EPCjjvbdCTBDTfWr +EPDKjvbdYNqAYUut +DoDKjvbdURRPVUgm +EOcLKvbdNPwqVmfs +DoDKjvbdsCGMkgLZ +DoDLKvbdZtIiYcsO +EObjjvbdhficZWJu +EPCjjvbdTqRPUuIN +EPCjjvbdyOShXsIc +EOcLKvbdliETqVRa +DncKjvbdYqMdhmEq +DoCkKvbdKfGHbBQu +DnbkKvbdqBIeAXIE +EPDLKvbdQZNAHTRj +EObkKvbdRosgJecw +EPCjjvbdKQzEnfOF +DoDKjvbdzRPMiKXA +DnbkKvbdGcjvJbJj +DoCjjvbdbAvEeoow +DncKjvbdFVyQPmKF +EPDLKvbdRzKIScWA +EPCkKvbdKkAhWAJy +EPCkKvbdJqZdnenF +DoCkKvbdVUMtGMWK +DncKjvbdBiLBjiGK +DnbkKvbdjvWnDbYX +DnbkKvbdwuNEqYkn +DoDKjvbdegjurORH +EObjjvbdpeceTvAh +DoCkKvbdAMgySwZx +EPCkKvbdlZSqsZGt +EPDLKvbdbrbkTdKB +EPDKjvbdhzUekpnG +DncLKvbddeOqbWbj +EPCjjvbdsPunibvG +EOcLKvbdVwIxVdEg +DoCjjvbdkIHLefNk +DnbkKvbdxmrhXrhc +EPCkKvbdziuPocrt +EOcLKvbdNUsSLNAX +DncKjvbdhkddNtcZ +DoCjjvbdMpYRWNgT +EObjjvbddZxoxYqC +EOcLKvbdNVTRjmAX +EPDKjvbdZjTIQHCG +DnbkKvbdHEKvJbKK +EOcKjvbdiGibxvJu +DnbjjvbdsCGNMGjy +DoCjjvbdBhkBjhfK +EPCkKvbdSCDdkhyL +DnbjjvbdNPwpvNfs +EOcLKvbdJTZBTNYM +DncKjvbdqGEFTvBI +EObkKvbddneSjtTr +DncLKvbdqdFJPmua +EPDKjvbdrbFmMGkZ +DoCjjvbdhXZAzzAJ +EOcKjvbdkxsSSxgU +EPDKjvbdrEEhonVa +DnbkKvbdYzcGSKVy +DoCjjvbdzROmJJwA +EPDLKvbdOEdUJJKd +EPCjjvbdqquKmkAm +EOcLKvbdZyEKODLr +DnbkKvbdIsZAsMxM +DnbjjvbdZjTHofaf +DoCjjvbdrSUkOLAm +EPCjjvbdBsAbsewS +EObkKvbdUsltGLuj +EPCkKvbdANHyTWyx +EObkKvbdsBemMGjy +EObjjvbdMoxRVmfs +EPCkKvbdNGbolouL +EPDLKvbdjKGHimXr +DncKjvbdUMWPAuni +EOcLKvbdOEdUIhkE +EPCkKvbdjKGHimXr +EPCkKvbdhuZdwSVC +DoCjjvbdCIkBjiFj +EPCkKvbdxZhGFxFS +EObjjvbdOFDtJJKd +DoCkKvbdfNGWgNKL +EPDLKvbdcarmSATm +DoDKjvbdkNCMZeHP +DoDLKvbdkMakyeGo +DnbjjvbdiHJcYvKV +DnbjjvbdWWhxVcdg +EPDKjvbdVUNTelVj +DoDKjvbdZGvdAPTJ +DoCjjvbdDncLLXCd +EPDKjvbduDCuWuno +DoCkKvbdPyNAHTSK +DncKjvbdqwPlDIyR +EOcKjvbdYzbfSJvZ +DnbkKvbdRotGifDw +DoDLKvbdRDcBQRDr +DoDKjvbdEARiNZvw +DncKjvbdJSxaTNYM +EPDKjvbdVwJXvDeH +EOcKjvbdQwOECkhD +DoCjjvbdEPCkLWbd +EPDKjvbdVBBpsRSZ +EOcKjvbdddoSBwCj +EOcKjvbdFkFScINV +EObjjvbdpstGrSLU +EPDLKvbdhaoDFXRR +EPDKjvbdKfGICApu +EObkKvbdBsAcTevr +EObkKvbdhkeDmtby +DoCkKvbdqYngfpdY +EOcKjvbdsPvPKCvG +DoDLKvbduVmwiqTA +EOcKjvbdidkGtoAO +EPCkKvbdyzeORgiI +DoCkKvbdmJDsqUqa +DncLKvbdiGibyVjV +DncKjvbdhtzEwSVC +EOcLKvbdZRMdiNFR +EOcKjvbdrafMkgKy +DoDKjvbdZGwEAOsJ +EOcLKvbdjmCMZeHP +DncLKvbdjKFgimYS +EPCjjvbddZxpYZRC +DncKjvbdjmBkzEgP +EObkKvbdkIHLeemk +EPDKjvbdjAQGaQGj +DncLKvbdSPtHJfDw +DoCkKvbdGKdsChNV +EPCjjvbdrouoJbuf +EPDKjvbdlhcsqUqa +DoCjjvbdwXMBWAvV +DnbkKvbdhkdcmtby +EOcLKvbdFkEsDHmV +EOcLKvbdCIkBjhej +DoCkKvbdiLeDnVDZ +DoDLKvbdDxXlTssl +DnbjjvbdNrtVfduQ +EPCkKvbdHDkWJajK +EPCjjvbdTulQKUBR +DoDKjvbdJYUBhLpp +DncKjvbdiCOcFXRR +DoCkKvbdxsNiMrBg +EObkKvbdQlxByNtz +EPCjjvbdBhkBjiFj +EPCjjvbdNeDsiIjd +DncLKvbdBsAcTfXS +DncLKvbdDwwlUTsl +EOcKjvbdUQqPVUgm +DncKjvbdmttzKirG +EPCjjvbdKWUfEFHJ +EPCjjvbdGKdrcINV +EPDLKvbdkxrrTYgU +DoCkKvbdQdCaQQcr +DnbkKvbdvAdYroFI +EObkKvbdFxttaDwb +DnbkKvbdQdDBPqES +DncKjvbdkVwODbXw +DoCkKvbdrounicVf +EPCjjvbdBcoaVjMf +DncKjvbdcImKKevx +DoCjjvbdxLWdHzyf +EOcLKvbdcbTNSATm +EPDKjvbdRacdlJZL +EPDLKvbdZQleIleR +EPCkKvbdTfznLwWF +EObkKvbdsCFmLgKy +DoDKjvbdyqOlhiwA +EOcKjvbdtcCtwVoP +DnbjjvbdRWmdCkgc +EOcKjvbdqUTfqrKt +DnbkKvbdRyjHsDWA +DoDLKvbdYqMdiNEq +EOcKjvbdhbPCeXRR +EOcKjvbdVrNwbFLc +EObkKvbdZLqcsmkm +DoDKjvbdRWmdDMID +EPCjjvbdkWXNcbYX +DncLKvbdZyDinClS +EOcLKvbdqUTfqqjt +DncLKvbdUtNTelWK +EPDKjvbdkWWmdCXw +DoDKjvbdezuxdhtX +DoCkKvbdaSGCgtGL +EPDKjvbdVwJYWDdg +DoDLKvbdWSOYCFMD +EObkKvbdxwiJaozL +DoCjjvbdTpqOuVIN +DoCkKvbdrzLpSaHn +DnbkKvbdJutecdfi +DnbkKvbdhgKDZVjV +DncKjvbdCJKajiGK +EPCkKvbdbrcLTcia +DncKjvbdxxIibPzL +DoDLKvbdNUsRkNAX +DoCkKvbdZRMeJMdq +DnbjjvbdxsOJMqbH +DncKjvbdqAheAWhE +DoCkKvbdZnnIddyj +DoCjjvbdrpWOibuf +DoCjjvbdDxXlUUTl +EPDKjvbdZirgofbG +DnbjjvbdDnbkKvbd +EOcLKvbdoznDkXoA +DnbjjvbdozmdKxPA +DnbkKvbdfHkVqmqH +DoDLKvbdkDMLRGtg +EPDKjvbdDxXlUTtM +DoDLKvbdZLrETmkm +DoCjjvbdLAkGlbYR +DncLKvbddndsLUUS +DoCjjvbdaRfDIUFk +DnbjjvbdjJfHjNXr +DncLKvbdeFPRbXDK +DoCkKvbdJYTbIMRQ +DnbkKvbdptUGrRjt +EOcKjvbdkMbLzEfo +DoCjjvbdezuxeJUX +DoCjjvbdZMRctOLm +DoDLKvbdWWiXudEg +DnbkKvbdiiehKNXr +DoCkKvbdXrkaNUOx +EPDLKvbdZjTIQGbG +EObjjvbdeOeTLTtS +EPDKjvbdBraCsewS +EPDLKvbdLBKflaxR +DncKjvbdRzJhScWA +EPDLKvbdGKdrbhMu +DoDKjvbdFeiqmiUR +DnbjjvbdFWYooljF +DnbkKvbdUWLoisaR +EPDKjvbdfRaWzkbo +EPDLKvbdKQzEnfNe +DoDLKvbdnUtyjiqf +DnbjjvbdyNrgxSiD +EOcKjvbdjlakzFHP +DoCkKvbdjvXODaxX +DnbkKvbdLFfHaaRV +EPCkKvbdwuMeRYlO +EPDLKvbdtSqrxzEc +DncKjvbddwytTqez +EOcKjvbdZLqcsnMN +DoCjjvbdkxsSTZHU +EPDKjvbdiZtekqNf +EObkKvbdnCKWwnmu +EObjjvbdauBgYKsh +EPDKjvbdrSVKmkBN +EObkKvbdxrnImSBg +DncKjvbdZnnJEeZj +DoDKjvbdZjTIQHBf +DncLKvbdmIctRVRa +DoCjjvbdziuQQDsU +EPDKjvbdZRNFJNEq +EOcKjvbdTqRPUthN +EPCkKvbdePFSjssr +EPDLKvbdfIKuqmqH +DoDKjvbddZyQYYpb +DoDLKvbdWRmwaeMD +DoDLKvbdOYOuzcmt +DoDLKvbdxsNiNRbH +EPCkKvbdNeEThiLE +EPCkKvbdNPxQunHT +EPCjjvbduCbtvuoP +EOcLKvbdjgfkeemk +EObjjvbdjlbLydfo +DoDLKvbdxmsIXrhc +DoCkKvbdlrZVZsDi +DoDKjvbdEztRElCi +EObjjvbdBsAbsfWr +DoDLKvbdZHWdAOsJ +DnbjjvbdSCDdkhxk +EObjjvbdeFOqbWcK +EPDLKvbdZtJJZESn +EPCkKvbdKfFhBaQu +DoCkKvbdMpYQvNfs +EObjjvbdrpWOjCvG +EPDLKvbdJSxaTMxM +EPCjjvbdOSsvGduQ +DoDLKvbdtumxKRTA +EPDKjvbdBcpBWKMf +DnbkKvbdtbbuWvPP +DoDLKvbdKWUfDdfi +EPDKjvbdOStVgFVQ +EObkKvbdZnmheFZj +DoDLKvbdQwODcMID +DoDKjvbdVrNxBeMD +DoCkKvbdaSFbgsek +DoCjjvbdTvMQKTaR +DoCkKvbdZsiIxdSn +EObkKvbdakMFnnDA +DoDLKvbdJutedFHJ +EOcLKvbdhzVFlQnG +EObjjvbdzjUpQDsU +EPCkKvbdzoQQeCkx +DncKjvbdZjShPgCG +DnbjjvbdMgCpMpVL +DnbkKvbdNGbpNPuL +EObkKvbdKfFhBaRV +DnbjjvbdKQzFPFnF +EPDKjvbdCIkBkJGK +EObkKvbdmajXXnnV +DoCkKvbdNwnuzcnU +EObjjvbdauCGwkTh +DnbkKvbdbiNKKfXY +DnbjjvbdQmYCYnUz +DoDKjvbdiLddNtcZ +EOcKjvbdeEoSBwDK +DoDKjvbdcTCkUDia +DnbkKvbdZRNEhmEq +EPCkKvbdHfgZxxXg +EObjjvbdbsDLUDjB +EPDKjvbdhbPDFWqR +DncLKvbdKNADyfuB +EObkKvbdEztREkcJ +DncLKvbdbLMFnnDA +EObkKvbdZjShPgBf +DncLKvbdbVCHXkTh +DnbkKvbdqTtHSRkU +EObkKvbdfSBWzlDP +DnbkKvbdGKeTDIMu +EOcLKvbdGcjvJbJj +EPCkKvbdMowqWOHT +DncKjvbdYpmFIleR +EPDKjvbdZxcjNblS +DncLKvbdNrtVgEuQ +EOcKjvbdqrVKnLBN +DnbkKvbdatbHXkUI +DoCkKvbdEPDKkWbd +EPDLKvbdmIdURVRa +DoCkKvbdMoxRWNgT +EObjjvbdLBKflbXq +DoCkKvbdSwjkmzkY +DoDKjvbdJbicQicY +EObkKvbdNQYQumgT +DoDKjvbdxxJKCPzL +DncLKvbdnGdxNNgZ +DoCkKvbddijSVtzn +EPDKjvbdrJAJdmOe +DnbjjvbdzoQQeDLx +DoCjjvbdZRMeIldq +DnbjjvbdkHgMGGOL +DoCjjvbdaSGChTfL +EOcLKvbdCJLCKiFj +DoCkKvbdVhXvYHYz +EPCjjvbdcSbjscia +EOcKjvbdxZgeewdr +EPDLKvbdYkqdUNlN +DnbkKvbdREDApQdS +DnbjjvbdmozZVkYb +EPDKjvbdaRecITfL +DncLKvbdZyEJmbkr +EOcKjvbdZnnIdeZj +DncLKvbdeXzTsrFz +DoCjjvbdZRMdhmEq +EOcLKvbdGGJqmhtR +EPDKjvbdIidAJpHE +DncKjvbdMRwNZtpz +DncLKvbdnBiwXoOV +DoDLKvbdqYnhGqEY +EOcKjvbdWexytAOs +EOcKjvbdiZuFlQnG +EObkKvbdVAaqTRRy +EPCkKvbdTAEhgaoE +DoDKjvbdMoxQvNfs +EPDKjvbddjJqvUzn +EObkKvbdBiKajhfK +EPDLKvbdZLqcsmlN +DoCjjvbdgPazwDwh +EPCkKvbdwkWcgzzG +EPDKjvbdlYsSSyGt +EObjjvbdZLrDsmkm +DncLKvbdbsCkUDia +EObkKvbdkxrrSyGt +DnbkKvbdnBivxOnV +DoDLKvbdZirhPgCG +EObjjvbdfMevfmKL +EPDKjvbdSQTgJecw +DoDLKvbdUWMPitAq +DoDKjvbdwtleRZMO +EObjjvbdKRZdoGNe +DoCjjvbdauBgYKsh +DoDKjvbdXrlAlsnx +DncKjvbdUMVnaVni +DncKjvbdiHKDYvKV +DnbkKvbdySnJNSCH +EPCjjvbdfNGWgNKL +EOcLKvbdnQZxujxb +EObjjvbdVgwvXgYz +EOcLKvbdjKGHimYS +DnbkKvbdhanbeXQq +DncLKvbdhzUfLpmf +DoDLKvbdczZPxZRC +EPDKjvbdRNYBxnUz +EOcLKvbdlrZVZrdJ +DncKjvbdtcDUwWOo +EPCkKvbdQvmdDLhD +EPCjjvbdfMfWfljL +DoCjjvbdZyEKNbkr +EOcKjvbdgPazvcxI +DncKjvbdfNGXHMjL +DncLKvbdEKHjWXjA +EObkKvbdZjSgogCG +EPCjjvbdxnSgxShc +EPCjjvbdqrVKmkBN +EPCjjvbdbBVdepQX +DoCkKvbdrXQLbhxq +DoCjjvbdbVBfxLTh +EPCkKvbdHlBznWqL +EPDKjvbdTAEhgaoE +DnbjjvbdCfkfHAzc +DnbkKvbdptTfqqjt +EPDLKvbdWIXuwgYz +EObjjvbdrJAJeNPF +DncLKvbdKDKDRJcY +DnbkKvbdrDeIpNvB +DncLKvbdVwIwudFH +DncKjvbdICMZdzAD +EPCkKvbdsQVnjDVf +EPDKjvbdiZuGMRNf +DoDLKvbdIGfyyXwg +EPDLKvbdYORAXtut +DoCjjvbdhzVGMQnG +EPDLKvbdQwNcbkgc +EObjjvbdsBemLgLZ +DoDLKvbdZtIiYdSn +DoCjjvbdelevfljL +DoCkKvbdcyxowxqC +EPDLKvbdZMRdUNlN +EOcLKvbddZyPwyRC +EPCjjvbdZLrDsnLm +EPCkKvbdgPazwEYI +DoDKjvbdqFdEsvBI +EOcKjvbdVviXvDdg +EPCjjvbdCWzdIdov +DncKjvbdrSVKnLBN +EObkKvbdiLddNtcZ +EPDLKvbdrDdiPmvB +EPDKjvbdKDKDRKCx +DoDKjvbdtSqsZZeD +DoDLKvbdwuNFRYlO +DoCjjvbduLwvaTaX +EObjjvbdtkxXBUBX +EOcLKvbdSQTgJfEX +EObjjvbddneTKtUS +DoDLKvbdAMhYsXZx +EOcLKvbdczZPwxqC +EPDLKvbdjbkjqGtg +EOcLKvbdFkEsChMu +EObjjvbdbsCkUDia +EObkKvbdEzsqElDJ +EPDLKvbdGZUuBEYC +DoCkKvbdzROmJJwA +EPDKjvbduMXwAsaX +EPCjjvbdqwQMDJZR +DoDKjvbdqUUHSRkU +DoCkKvbdwtleQxkn +DnbkKvbdQvnEClHc +EPDKjvbdjvXNcaww +DoCjjvbdjggMFenL +EPDLKvbdJYUBhLpp +DnbkKvbdkNCLyeGo +DoCjjvbdDoCkLWcE +EOcKjvbdYqMeJNFR +EPCjjvbdRDcApQdS +EObjjvbdjblKpgVH +EPDKjvbdqqtjnKaN +DoDLKvbdwtmFRYlO +DoCjjvbdnHEwmNgZ +DncLKvbdaMjasVNH +DncKjvbdnUtzLKSG +DoDLKvbdkySrSyGt +EPCjjvbdyNsIXriD +DoCkKvbdRadFMIyL +EOcKjvbdqvokbhxq +EPCjjvbdYkrEUOLm +EPDKjvbdrpWPKCvG +DncKjvbdxUldpyLn +EObjjvbdrbFmMHKy +DoCjjvbdZHWdAPTJ +DncKjvbdEPDLKwDE +DnbjjvbdZHWdAPTJ +DoDLKvbdNrsvHFUp +DncLKvbdCTBDUFvr +EPDLKvbduDDUvuno +DoDLKvbddwystSFz +DnbkKvbdmbJvwoNu +EPCjjvbdcbTNSAUN +DnbjjvbdnVUzKjRf +EOcLKvbdYlRdUOMN +DoCjjvbdTAFIgand +DnbkKvbdpeceUVaI +DoDLKvbdlZSrTYft +EPCjjvbddePRbXDK +EOcLKvbdJqZdnfNe +EPCkKvbdRaceLhyL +EPDKjvbdLAkGlaxR +EPCjjvbdqGDdsvAh +DnbjjvbdxZgefYEr +EObkKvbdKWVGEFGi +EPCjjvbdSQUHKFdX +EPDKjvbdDxYLsssl +EPCjjvbdfHjvSNqH +EPCkKvbdQwODbkhD +EOcKjvbdZnmiFEyj +EPCkKvbdqwQMChyR +EOcLKvbdZyDimcLr +EObjjvbdjAQGaQGj +EPCkKvbdZtJJYdTO +EObjjvbdjFKgUoAO +DnbkKvbdcScLUEKB +EPDKjvbdjcMLRGuH +EObjjvbdqlzKZLgi +EOcKjvbdFfJrNiUR +EObkKvbdKaKgNBxR +EOcKjvbdHDjujBij +EObkKvbdFejSOJUR +DncLKvbdMIalRYAS +EOcKjvbdVTlsekvK +DoCjjvbdUQqOtthN +DnbjjvbdVYgtZkOn +DnbkKvbdrovOicVf +DncKjvbdKfGIBaQu +DnbjjvbdjuvnDaxX +EPDLKvbdHakzEzAD +EPDLKvbdyzdnRhIh +DoCjjvbdZGvdAPTJ +DoDLKvbdqvolChyR +DncLKvbdjlbLyeHP +EPCkKvbdmIdTptrB +EPCkKvbdQcbaPqES +DoDLKvbdddoSBwCj +DnbjjvbdjvWnECXw +DnbjjvbdZisHofbG +EOcKjvbdZQldhldq +DnbkKvbdfekymfgA +DnbjjvbdLBKgMbYR +EPCjjvbdEARiMzWw +EObjjvbdtSrTYzEc +EPDKjvbdZoOIddyj +DnbkKvbdcSbjtEKB +EObjjvbddndsKssr +DoCjjvbdxnSgxShc +EPCjjvbdOTUVfdtp +DoCkKvbdUtMselWK +DnbjjvbdJpydoGNe +DoCkKvbdGQASwGey +DnbjjvbdnGdxMnGy +EPDKjvbdHDkVibKK +DoCjjvbdtbbuXWOo +EPDKjvbdKWVGEEgJ +EObkKvbdGLEsCgmV +DoCkKvbdbrbjtEKB +EPDLKvbdRzJgrcWA +EPCkKvbdaRecITfL +EObjjvbdrbGMlHKy +DnbkKvbdZdwfzgiC +EPDKjvbdVwJXudFH +DoCjjvbdiZtekqOG +EObkKvbdqrUkOKaN +EObkKvbdySnImRbH +EObjjvbddoFTKstS +EOcKjvbdyOTHxTJD +DncKjvbdFVxoolie +DoCkKvbdFejRnIsq +EPDLKvbdptUGrRkU +EOcKjvbdajlGOnDA +EPDKjvbdrRtkOKaN +EOcKjvbdzoQQeDLx +EPCjjvbdrafMlGkZ +EPCjjvbdmpZyWKyC +DoCkKvbddBrlrAUN +DnbkKvbdMgDPlpVL +DnbjjvbdUxhTzKoO +DoCkKvbdSCDdlIyL +EPDKjvbdmbJvxPOV +EPCkKvbdNGcQMpUk +EPCjjvbdVqmxCFLc +DoDKjvbdrDdhonWB +EOcLKvbdYTLaNToY +DoCkKvbdkIGlFemk +EPDKjvbdNrsvHFVQ +EPDLKvbdrzLoraHn +EObkKvbdraelkgLZ +DoDLKvbdBdQAujMf +DncKjvbdwzIGGYFS +EOcKjvbdZeXfzhIb +DoDKjvbdbAueGPpX +DoCjjvbdZtJJYcrn +DoDKjvbdyqPNJKXA +DoCkKvbdTAFIhCPE +DoDLKvbdjblLQgVH +DoCjjvbdZtJJZDsO +EOcLKvbdrNZixkhJ +DoCjjvbdzoPpdblY +DnbkKvbdqcdhpNvB +DncKjvbdYpldhleR +DoCjjvbdmRyUysEJ +DoCjjvbdJXtBgkqQ +EOcKjvbdVwJYWDeH +DoDLKvbdZLqdUOLm +EPDKjvbdEXwlUUTl +EObkKvbdoznDkYPA +EPCkKvbdEASJNZvw +EPCjjvbdFjdsCglu +DoCkKvbdTlWPBWOi +DnbjjvbdcTCjsdKB +EObkKvbdkySrTYft +EPCkKvbdLrXMytpz +DncKjvbdZQmEhleR +EOcLKvbdHkaznWpk +DnbkKvbdHfgZyXxH +EObkKvbdpecdtWAh +DnbkKvbdRadElJYk +EPCjjvbdTXkMNzjx +DoCjjvbdmSYtzTEJ +EPCkKvbdZsiJZDsO +DncKjvbddoErkTtS +DoCkKvbdZRMdiMeR +EObkKvbdTfzmkvvF +DncKjvbdpxnhHQcx +EPDLKvbdaMjbStlg +DoCjjvbdkHfkefOL +DoCjjvbdqqtkOLAm +DnbjjvbdyzeNqgiI +EOcKjvbdiLeDnUby +DncKjvbdyYIjCPyk +EOcKjvbdpfEFUVaI +EPCjjvbdZirgpHBf +DnbkKvbdKWUecdgJ +EOcLKvbdiHKCxvJu +EPDKjvbdcTCkUEKB +EOcLKvbdaMkBsVNH +EPDLKvbdJutfEFGi +EPCkKvbdFaOqZJzm +EObjjvbdhaoCdvqR +EPCkKvbddZxpXxqC +DnbjjvbdZxcinDLr +DoDLKvbdpssfqrKt +DoCjjvbdqTsgRrLU +EPDLKvbdEYXlUTtM +EObjjvbduVmwjQsA +EOcLKvbdNPxQunHT +DnbjjvbdBhjajiGK +DoCkKvbdUGznMXVe +EPDKjvbdVwIwvEFH +EObkKvbdRMwayNtz +DoDLKvbdQZNAGrrK +EObjjvbdKWUedFGi +DoDLKvbdaNKartlg +DncKjvbduWOXipsA +EObjjvbduVmxKRTA +DoDKjvbdygZMAMdw +DoDLKvbdqTsfrRkU +DoCjjvbdEvYpQMjF +EObkKvbdNPxQunGs +EObkKvbdsZlPsAgn +DnbkKvbdZnnIddzK +EPCkKvbdNQXqWOHT +DnbkKvbdGLFSbhMu +DoDKjvbdrzMPraIO +DnbkKvbdZirgofaf +EPDKjvbdijFhJlxS +DncKjvbdWRmxBeLc +DnbkKvbduDDUvuoP +DoDKjvbdiZuGMQmf +EObkKvbdelfXGljL +EPDLKvbdfNFvfljL +DncKjvbdGKdrcINV +EObjjvbdFfJqnIsq +EOcLKvbdILaznWqL +DncLKvbdJutedFHJ +EOcLKvbdIwtBhLpp +EPDLKvbdsrrSyZdc +EPDKjvbdczZQXxpb +DncLKvbdDoCjjvcE +EPCjjvbdpxoIHREY +DoCkKvbdxxJJbPzL +EPCkKvbdVZIUZkPO +EPDLKvbdULuoBWPJ +EPCkKvbdfMfWfmJk +DnbjjvbdZtIiZETO +DoCjjvbdiMEcnUby +DoCkKvbdcyyPxZQb +DoCkKvbdZirgofaf +EObkKvbdozmdLYPA +DoDKjvbdYkrEUNkm +DoCkKvbdLqwMzVQz +EObjjvbdLFfICBRV +EObjjvbdjJehKNYS +DoCjjvbdEJgiuwjA +EPCkKvbdyqPNIiwA +EPDKjvbdNdcsiIjd +EPCjjvbdauBgXjsh +DnbkKvbdyzeORgiI +EPCkKvbdsCGNLgLZ +EObkKvbdtbbtwVno +EObjjvbdwuMdqZLn +EObjjvbdSQTfiedX +EPCjjvbdmttyjjSG +DncLKvbdnHFYMnGy +DncKjvbdxmsIXrhc +EPDKjvbdQYmAGsRj +EObjjvbdfoazvdYI +DoDLKvbdhaoDEvpq +EObjjvbdDihKVwjA +DoCjjvbdZMSDtNlN +DnbjjvbdhlFDnVDZ +EPCjjvbdiCPCdwRR +DncLKvbdULuoBVoJ +DoDLKvbdyYJKBpZk +DoDLKvbdRbDdlIyL +EOcKjvbdYSlAlsoY +DoCkKvbdySmhlqbH +EOcKjvbduWNxKRTA +DnbkKvbdFjeTDIMu +DoDLKvbdzaAPGgCM +EPCkKvbdBhkCLJGK +DnbkKvbdYpmFJNFR +EPCjjvbdQccBQQdS +EOcKjvbdqGDdtVaI +EOcLKvbdILazmvqL +EPDLKvbdajkennDA +DoDKjvbdxVMdqZLn +EPDKjvbdNPxQunGs +EObjjvbdhytfMROG +EPDKjvbdEXxLtTtM +EPDKjvbdZnnIdeZj +DoDKjvbdGKeTChNV +DncLKvbdjmCMZeGo +DnbkKvbdQwNdClHc +DncKjvbdXrlBMtOx +DoCkKvbdzaAOgHBl +DncLKvbdcIlijewY +EObjjvbdrbFllHKy +EOcKjvbdmbJwXnmu +EObkKvbdssSSxydc +DoDKjvbdSQTgKGEX +DnbjjvbdUyHtZkPO +EPCjjvbdFyUuAdYC +DoCkKvbdqFcdsvBI +EOcLKvbdqwQLbhyR +DoCkKvbdbsCkUEKB +EPCjjvbdIjEAKQHE +DnbkKvbdaNKbTUmH +EObkKvbdnCKWxPOV +EOcLKvbdZxcinClS +EObjjvbdhlFDnVDZ +DncLKvbdpyPHfpdY +EOcKjvbdTlVoAuoJ +EOcKjvbdmbKXXoOV +DoCkKvbdxsOImSBg +DncKjvbdZHXEAPTJ +DoDLKvbdDjIKVwjA +DoDLKvbdnCJvwoNu +EPCjjvbdZeYGzghb +EPDKjvbdHffzYxXg +EObjjvbdirzhrkJz +DoCjjvbdZnnJFFZj +EPDKjvbdeATqMwif +DoDKjvbdbVCHXjsh +DoCjjvbdGckVjCKK +EOcLKvbdyYJJbPzL +DoCjjvbdiCPDFWpq +EOcLKvbdIwtCILqQ +DoDLKvbdKQzFOfOF +EOcKjvbdNPwqWNgT +EObjjvbdZLqcsmkm +EPDLKvbdnPyxvKxb +DoDLKvbdKjaHvAKZ +EObjjvbdjKFgjNYS +DnbkKvbdLAkGmCXq +DoDLKvbdeEoSBwCj +DnbjjvbdHlBznXRL +DnbjjvbdKfGHbBRV +DnbkKvbdZQldiMdq +EOcLKvbdnBivwnnV +DncKjvbdsQVoKDWG +EObkKvbdypnlhiwA +EObkKvbdrykpTAgn +DoCjjvbdaMkBsUmH +EPDLKvbdRDcBPqES +DoCjjvbdpxngfpdY +EOcKjvbdEztRFLbi +EOcLKvbdcbTNSAUN +DoCkKvbdjcLjpfuH +EPCkKvbdjSzhsKiz +EPCkKvbdoAKztIDn +EPCjjvbdMgDQNPuL +DoDLKvbdKNAEZgVB +EPCjjvbdZsiJZDsO +EOcLKvbdkCkkQfuH +DoCjjvbdnGeXmNfy +DnbjjvbdrpVoJbuf +DoCkKvbduCbuWuoP +EObjjvbdSwkMNzkY +DoCkKvbdrNZiyMHi +DnbjjvbduDCtvuoP +DoDLKvbdMuSqjmAX +EObkKvbdsQVnicVf +EPCjjvbdmfeYNNgZ +DncLKvbdmIdURUqa +EPCkKvbdGBPQyJzm +EPCjjvbdZRNFImEq +DncKjvbdNddUJJLE +EObkKvbdaSFbgsek +DncKjvbdDoCkKwDE +DoCjjvbdtkxWaUBX +DncLKvbdfNGXHMjL +EPCkKvbdqTtHSSKt +DnbkKvbdxmrhXsJD +DnbjjvbdmttykKSG +EObjjvbdqcdhomua +DoCkKvbdVTlsfMVj +DnbkKvbdRECaPpcr +DnbkKvbdijFhKNYS +EObkKvbdIwsbIMRQ +EPDLKvbdJbibqJbx +EPDKjvbdxxJKCPyk +EOcKjvbdjuvnECYX +DnbkKvbdKRZePFme +DnbkKvbdMpYRVnGs +EOcKjvbdfMevgNKL +DoCkKvbdmfeXmOHZ +DncLKvbdFpATXGey +DoDKjvbdJXtCIMQp +EObjjvbdZshiZDsO +EPDLKvbdaRfDHsfL +DncKjvbdMIakqYAS +EObjjvbdSLZGUfjs +DoDKjvbdBcoaWJmG +DoDKjvbdEuxpPlie +EObjjvbdJcJbqKCx +DoCjjvbdxwhiapZk +DnbkKvbdsBemLfkZ +DoDLKvbdHgGyxwxH +EOcKjvbdQdDApRDr +EPDLKvbdKWUfDeHJ +DnbjjvbdjvXODbYX +DoDLKvbdHELWJbKK +DncLKvbdgFkynHHA +EPCkKvbdPxmAHSqj +DoDLKvbdYkqdTnLm +EPCkKvbdJYUCILpp +EOcKjvbdxwhjBpZk +DoCjjvbdiMFENtcZ +DoCjjvbdnCJvwoOV +DoDKjvbdSKxetgKs +EOcKjvbdWRmxCFMD +EOcLKvbdpedFTvBI +EObkKvbdbAvEfPow +EObkKvbdZnmiEeZj +DnbkKvbdtTSSyZeD +EPCkKvbdPxmAGsRj +EPCkKvbdVTmUGLvK +EObkKvbdJmADyfta +EOcKjvbdwWlBVaWV +DoDLKvbdjcMKqGtg +EOcLKvbdGGJrNiTq +DnbkKvbdgPazvdYI +EPCkKvbdGLEsDHmV +DnbjjvbdqceIomua +DncLKvbdjbkjpgUg +DoCjjvbdSxLLmzkY +EPDLKvbdjKGHilxS +EPDKjvbdmbJvwoNu +EPDKjvbdjmBkyeHP +EPDLKvbdzROliJwA +DnbjjvbdUaBprprZ +DoDKjvbdtbbtwWPP +DnbjjvbdURQoVVHm +DoCjjvbdjbkjqGuH +DoCjjvbdRbEFLhyL +DncKjvbdBcpAujMf +DoCkKvbdPxmAGrqj +EPDLKvbdZRMeImFR +EOcLKvbdcScKscia +EObjjvbdeXytTrFz +EPCjjvbdKfGICBQu +DncKjvbdijGIKMwr +EObjjvbdZLqctOLm +EObkKvbdSLZFuGjs +DnbjjvbdZMRcsnMN +EPCkKvbdWSOYBeMD +EObjjvbdRacdlJYk +DnbjjvbdFyVUaEXb +EObjjvbdRbEFLiYk +EObjjvbdZjTIQGaf +EPCkKvbdNsTugEtp +DoCkKvbdEASIlyvw +DoCjjvbdsrrSxzFD +DoDLKvbdQwOEDMID +EPDKjvbdaaVeGQPw +DoCjjvbdFejRnItR +EObkKvbdRacdlIyL +DnbjjvbdGGJqnIsq +DoDLKvbdGYtuBDxC +DncKjvbdbLMGPODA +EObjjvbdqYoIGpcx +DncKjvbdrykosAgn +EPCjjvbdJbjDQjCx +EObjjvbdkySqsYft +EPDKjvbdxwhjBpZk +DncKjvbdauBfwkTh +EPCkKvbdtSrSxydc +DoDKjvbdMRvmZuQz +DncLKvbdnUtyjiqf +DoDKjvbdSLYetgKs +DoDLKvbdJbjCqJcY +EPDLKvbdShyiqAAl +EPDLKvbdSQUHJfDw +EOcLKvbdijFhJmYS +EPDLKvbdvwMBWAvV +EObjjvbdeXytUSFz +EObjjvbdWXJXuceH +EPCkKvbdrDeIomvB +DncKjvbdczZQXyRC +DnbjjvbdQlxCZOUz +EPCjjvbdQccApRDr +DoCkKvbdqiAJdloF +DoCjjvbdDwwktTtM +EPCjjvbdRpUGjGEX +DnbkKvbdWfYytAPT +EPCjjvbdUMVoBVni +EObkKvbdxnShYTIc +EObjjvbdVAaqSprZ +DncLKvbdKVtfDdgJ +DoCjjvbdliEUQtqa +DnbjjvbdiGjCyWKV +DnbjjvbdqrVLOLBN +EObkKvbdUaCRSqSZ +EObkKvbdTkvPAuni +DoCjjvbdIGgZyXwg +DoDLKvbdssRsYzEc +DnbjjvbdZLqdTmkm +EPCjjvbdUtNTfLvK +DncKjvbdfMewGmJk +EOcLKvbdCTBDTfWr +EPDKjvbdFpASwGey +EPCjjvbdZLrETmkm +EPDLKvbdyXhjCQZk +DnbkKvbdeATqMxJf +DoCjjvbdjJfHilwr +EPDKjvbdzitopESt +EPDKjvbdEuxopMjF +DoCkKvbdvBEYroFI +DnbkKvbdrNZiyMIJ +EPCjjvbdxVMdpyMO +DnbkKvbdQlxCZOUz +DnbkKvbdqmZiyLhJ +DncLKvbdXnRAXuWU +EObkKvbdRadElJYk +DncKjvbdLiBkqYAS +DnbjjvbdmRyUysDi +DoDKjvbdKCicQjDY +EOcLKvbdRkZGVGjs +DoDKjvbdtSrSyZdc +EOcKjvbdRyjISbvA +EPCjjvbdHffyyYYH +EOcKjvbdaogHDkzd +EPCjjvbdidkGuPAO +EOcKjvbdCDpAujMf +DoCkKvbduVnXjQsA +DnbjjvbdTulQJtAq +DncKjvbdqTsgRrLU +DoCkKvbdzdynzdyp +EObkKvbdemGXHNKL +EOcKjvbdJXtCHlRQ +EPDKjvbdegkWRnQg +DoCjjvbdyXiKCPyk +EPDLKvbdlZTRsZHU +DoCjjvbdfNFvgNKL +DnbjjvbdbVBgYLTh +DncKjvbdcJMikFvx +EPDLKvbdUMVnaVoJ +DoCkKvbdgQBzvcxI +DoCjjvbdZtIhxdSn +EPCjjvbdRWnEDMID +EObkKvbdjlakydfo +DncLKvbdrpWOicVf +EOcKjvbdhgKDYuiu +DoDKjvbdmIdTqUqa +EPCjjvbdwtleQxkn +EObkKvbdcJNKKfWx +DncLKvbdNsUWGdtp +DoDKjvbdWSOXbEkc +EPCkKvbdpyOhHREY +DoDKjvbdkyTSTYft +EPCjjvbdFjdrbgmV +DncLKvbdrounjDWG +DoDKjvbdVTmTfLvK +EPDLKvbdSCDeLiYk +DoCkKvbdrXPlDIxq +DncLKvbdKVuGDeHJ +DnbjjvbdrWokcIxq +EObjjvbdKVuGEEfi +EPDLKvbdrbGMlGjy +EPDKjvbdlqxtzSci +EOcLKvbdwygeeweS +EObjjvbdjKGIKNYS +EObkKvbdVrOXbElD +DnbjjvbdrMzKZLgi +EPCkKvbdMpXqWNfs +EPDLKvbdrSUkOLAm +EPDKjvbdZisIPfbG +EPDLKvbdRDbaQRES +DncKjvbdVTmUGLvK +EOcKjvbdYzcGRjWZ +EObjjvbdMuSrLNAX +DncKjvbdjgflGFnL +DncLKvbdWIXvXfxz +DoDLKvbdNHComPtk +EOcLKvbdSBceLhyL +DoCkKvbdZRMeImFR +EPDLKvbdiifIKMwr +DoCkKvbdvBDxsOeI +EPDLKvbdxmsHxShc +EOcKjvbdcyyPxZRC +DoCkKvbdsBfNMHKy +DoDLKvbdaRebhTfL +DncLKvbdypoNJKXA +EObkKvbdzRPNJKXA +DnbkKvbdTvLoitBR +EOcKjvbdWHwuxGxz +EObjjvbdZHWdAPTJ +DnbjjvbdySnJMqag +EPCkKvbdtTRsYzFD +EPDLKvbdhytelQnG +EPCkKvbdTppntuHm +DnbjjvbdZeYGzhIb +EPCjjvbdIwsaglQp +DoCkKvbdpstGrRkU +EObjjvbdCJLBjiFj +EOcLKvbdePErjstS +EPDKjvbdpxnhGqDx +DnbjjvbdZyEKOClS +DoCjjvbdpyOhHREY +DncLKvbdNGcPmPuL +DoDLKvbdQwNccLgc +EPDKjvbdmbJvxPNu +DnbkKvbdQwOEDMHc +DoDKjvbdXrlAltOx +EPCkKvbdGQASvgGZ +EOcLKvbdmttykKSG +EOcLKvbdGLFSbgmV +DncLKvbduCbuWvOo +EPDKjvbdSQTfiecw +DoCkKvbdYkqctNkm +DoDLKvbdlZSqsZHU +DoDLKvbdqGEEtVaI +EObjjvbdhytekpmf +DoDKjvbdmuUzKiqf +EObjjvbdrMyiyLhJ +DoDLKvbdEARhlzWw +EObjjvbdaRfCgsek +EPDKjvbdaNKaruNH +EOcLKvbdJqZeOenF +DnbjjvbdTfzmlXVe +DoCjjvbdzQoNIjXA +EObkKvbdMpYQvNfs +DncLKvbdVrOYCElD +DoCjjvbdijGIJlwr +DoDLKvbdrXQMDIyR +EPDLKvbdEYYMUTtM +DncKjvbdkHgMFenL +DnbjjvbdqdFIpOWB +EObkKvbdqFceTvAh +EObjjvbdyOSgxSiD +EOcKjvbdDnbkKvcE +DoDLKvbdYqMeImFR +EObkKvbdwtleRZMO +EPCkKvbdrWolCiYq +EObjjvbdrXPkcJYq +DoCkKvbdtlXvaUBX +EOcLKvbdeYZssrFz +DoDLKvbdnGeYMnHZ +EObkKvbdYTLaMtOx +DoDLKvbdJcJcRKDY +EPDKjvbdeKJrVtzn +DoCkKvbdrSUkNjaN +DncKjvbdeATqNXjG +EObkKvbdqlzJyLhJ +EObjjvbdDjIJvXjA +EObjjvbdzGyMAMdw +DoDLKvbdFfJrNiTq +EOcLKvbdBhkCKiGK +EObjjvbdpssgSRjt +DncKjvbdKaLGlbXq +EOcLKvbdlYrqrxgU +EPCjjvbdVqmxBeLc +EPDLKvbdZQmFJNFR +DoCkKvbdkCkkQfuH +DncKjvbdauCGwjsh +DoCjjvbdEASIlywX +DncKjvbdLAjgNBxR +DncKjvbdCDpBVimG +EOcLKvbdqlzJxkhJ +EPDLKvbdtvNxKRTA +DnbkKvbdGLFScINV +DoCkKvbdQvmdCkhD +EPDKjvbdFjdrbhNV +EPCkKvbdZLrETnLm +EPDLKvbdTvLoisaR +EPDLKvbdsrrTZZdc +EPCkKvbdZMRcsmlN +DncLKvbdxnTHxTIc +EOcKjvbdzROliJwA +EOcKjvbdsQVnjDVf +EObkKvbdqGDdsvBI +DncKjvbdwtleQxkn +EObjjvbdTqRPUuHm +DnbjjvbdVwIwvEFH +EPCjjvbdZshhxcsO +DoCkKvbdKCibqJbx +EOcKjvbdUVlQKTaR +EObkKvbdVTmUFlWK +EOcLKvbdmIctRVRa +DoDKjvbdPIAYZAYa +DoCkKvbdjvWnDbXw +DnbjjvbdtvNwjRTA +EObjjvbdNHComQUk +EOcKjvbdySnImRbH +DoCjjvbdDjIKVxKA +DncLKvbdKefHbApu +EObjjvbdehLWRmpg +EOcLKvbdJTZAsMwl +DoDKjvbdZirgpHCG +EObkKvbdozmcjxPA +EObkKvbdsZkosAgn +EPCjjvbdSxKlNzjx +DoCjjvbdfILVrNpg +EPCjjvbdGGKRnJTq +DnbjjvbdpssgSSLU +DoDKjvbdrDdiPmvB +EPCkKvbdZtJJYcsO +DoDLKvbdNdctIhkE +EPCjjvbdcImJkFvx +EOcLKvbdGLErbhNV +DoCkKvbdnQZxukYb +EPCkKvbdWSNxBeLc +EPCkKvbdsPvOjDWG +EOcLKvbdeFOqavbj +EPCjjvbdjAQHApHK +EPDKjvbdwXMBVaVu +DncLKvbdMowqWNfs +DoCkKvbdRbEFMJYk +DoCkKvbdrNZjZLhJ +DoCjjvbduDCtwWPP +EObjjvbdNeEUJIjd +DnbkKvbdlYsRsYgU +DoCjjvbdUxgsyjnn +EObkKvbdbLMGPODA +DoCkKvbddneTKtUS +EOcKjvbdvvkaWAuu +EPDKjvbdVUNUFkuj +EObjjvbdKDKDQjCx +EPDKjvbdnUuZjiqf +DoCkKvbdsCFmMGkZ +DncKjvbdrpVnjDWG +DnbjjvbdiZtfMQmf +DoCkKvbdwWkaVaVu +DoCjjvbdSCDeLiZL +DncKjvbdEYYLtTsl +EPDLKvbdOSsufeVQ +EOcLKvbdWSOXadlD +EPDLKvbdpaJFAXHd +DncKjvbdSCDdkhyL +DoCjjvbdIMBzmvqL +DnbkKvbdVUMsfLvK +DoCkKvbdlhctQuSB +DncKjvbdJuuGEFGi +EPCjjvbdJSyAsMwl +EOcKjvbdUtMtGMVj +EPCkKvbdHDkWKCKK +DncLKvbdySnImRag +EPCjjvbdwMvAMcdm +DnbkKvbdelevfmJk +EPDKjvbdYORAYUvU +EPCkKvbdVwIxWDeH +EObjjvbdtvOXipsA +DncLKvbdhlEdOUcZ +EOcLKvbdTlVoAuoJ +EPCkKvbdNQXpunHT +EOcLKvbdWXJXvDdg +DnbkKvbdZoOJFEzK +EObkKvbdmbKWwoOV +DnbjjvbdiHKDYvKV +DncKjvbdfSBWzlDP +DoCkKvbdLBKflawq +EObkKvbdUsmUFkvK +EObjjvbdLqwNZtpz +DoCkKvbdsBfNLfjy +DncLKvbdjvWmcbYX +EObkKvbdaMkBruMg +EPCkKvbdHkazmvqL +DnbjjvbdRyjHrbvA +EPCkKvbdNQXpvOHT +EObjjvbdOYPVzcnU +DoCjjvbdaSGCgtFk +DoDKjvbdxmsHxSiD +EObjjvbdZirgogCG +EOcLKvbdmuVZkKSG +DncLKvbdUyHszKnn +DnbkKvbdxmsHxTJD +EPCkKvbdVrOYBdkc +EOcLKvbdhkdcmuDZ +DncKjvbdwuMdpyLn +EObkKvbdxVMdpxlO +EPDKjvbdmbKWwoOV +DoCjjvbdhkeDmtby +DncLKvbdLFehCBQu +DoCkKvbdYSkaNUOx +DnbkKvbdmaivxPNu +EPDKjvbdfNFvgNKL +EPDKjvbdhlEdOUcZ +EPDLKvbdTukpKUAq +DncKjvbdUVlQKTaR +DnbkKvbdYgWdAPSi +DoDKjvbdIwsbHkpp +EOcKjvbdlZTSTYgU +DoCkKvbdNHColpVL +EPCjjvbdxrmhmRag +EObkKvbdUxgsyjnn +DoCjjvbdsQVoJbvG +DoCkKvbdBdQBVjMf +EObkKvbdIHHZxxXg +EOcKjvbdJuuFdEgJ +DoDLKvbdwyhGGXeS +DnbkKvbdSKyFuGkT +DoDKjvbdiGibxvKV +DncKjvbdnBjXXoNu +DnbkKvbdFpATWffZ +EPCjjvbduDCtvvOo +EObjjvbdIsZArlxM +DncKjvbdEvYopMjF +EObjjvbdwuMdqYkn +DoCjjvbdwyhFfYEr +EPCjjvbdqUTfrSLU +EOcLKvbdzGxlANEw +EPCjjvbdEOcKjwCd +EPCkKvbdOSsvGeUp +DncKjvbdhlEcnUcZ +EPCkKvbdUVkoitAq +DnbjjvbdOAJTTjSA +DncKjvbdqmZiyLhJ +EObjjvbdpstGqrLU +EPDLKvbdFxuVAcwb +DoCkKvbdauBgYKsh +DnbjjvbdZMRcsmkm +EOcLKvbdqrVLNkBN +DoDKjvbdNQYRWNgT +DoCjjvbdCTBCtFvr +DncKjvbdZyEKNcMS +EPCkKvbdVviYVdFH +DoDKjvbdePErjtUS +EObkKvbdwtmFRZLn +DncKjvbdpedEsvAh +EPCkKvbdzoQRFClY +DoDKjvbdIxTbIMQp +DoDLKvbdxsOImSCH +EPCjjvbdYfwEAOri +EOcKjvbdnPyyWLZC +EOcKjvbdhlFEOVCy +DoCjjvbdwyhFfXdr +DnbkKvbdZQmEhleR +DnbjjvbdbAudepPw +DnbjjvbdMpXqVmgT +DncLKvbdNeEUIhjd +EObkKvbdMfbomQUk +DoCkKvbdqvpMDJYq +DoDLKvbdfekzNfgA +EOcLKvbderAvzlCo +EOcLKvbdiZtelQnG +EPDLKvbdRXNdClHc +EPDKjvbdNrsufeUp +DncKjvbdZQldiMeR +EObkKvbdiLdcmtby +DncLKvbdZQmEhleR +DncLKvbdZRNEiMdq +DncLKvbdWRmwadlD +EPDLKvbdGLEsDHlu +DncLKvbdZjTIPgCG +EObjjvbdxnTIXsIc +EPCjjvbdliETptqa +EOcKjvbdlrZUyrci +DoDKjvbdbKlFnnDA +DnbjjvbdwXLaWBWV +DoCkKvbduaEZSoFI +EPCjjvbdRyjHrbvA +EPCjjvbdLhakpxAS +DoCkKvbdmaiwXoNu +EOcKjvbdyNrhYShc +EObjjvbdsCFllGjy +DnbkKvbdZshhxdTO +DoDKjvbdZjShPfaf +EOcKjvbdmajWwnmu +EObjjvbdJvUfEFHJ +EPCkKvbdOEcsiIkE +EPCkKvbdkNBlZeGo +DoCjjvbdVviXudFH +DnbkKvbdjJfHjMxS +DoDLKvbdGBPRZJzm +EOcKjvbdiCObdvqR +DnbjjvbdVwJYWDeH +DncKjvbdGAoQxizm +EObjjvbdxmsIYSiD +DncLKvbdqqtkOLAm +EObjjvbdvvlAvBWV +DncKjvbdvAdZTPFI +EOcKjvbdjAQHAogK +EObkKvbdpxoIHRDx +EPCkKvbdffLynGgA +EPDLKvbdTvLpKUAq +EOcKjvbdmttzKjSG +DoCkKvbdqwQMChyR +DoDKjvbdrzMPsAgn +DoDLKvbdyYJKCPyk +DoCkKvbdRbEEkhxk +EPCkKvbdBdQAuilf +EPDLKvbdRaceMIyL +EOcKjvbdraelkfjy +EOcLKvbdEASIlzWw +DnbkKvbdOSsvGeUp +DnbjjvbdmuVZkJrG +DnbkKvbdVwIwvDeH +DoDKjvbdwWlAvBVu +DncKjvbdSKyFuGjs +DoCkKvbdOXnuzcmt +DncKjvbdrXPlDJZR +EPDLKvbdsBfNMGjy +EPDLKvbdiifHilwr +DnbkKvbdjvWmcbYX +DoDLKvbdZnmhddyj +EPCkKvbdemFvfmKL +EPDLKvbdNxPVzcnU +DnbjjvbdRkYfUgLT +EPCkKvbdZRMdhldq +EObjjvbdYqMdhmFR +DncLKvbdJvVGDeGi +EPDKjvbdUtMsfLuj +DoDLKvbdZyEJnClS +DnbkKvbdjcMKqGtg +EPCjjvbdDnbjkXDE +DnbjjvbdLGGICAqV +EPDKjvbdWIXvYGxz +EOcLKvbdBiLCKhfK +DnbkKvbddwzUURez +EOcLKvbdZQldiMdq +DncLKvbdKVtfEFGi +DoCkKvbdvAcxsPEh +DncLKvbdjvWmcbXw +EObkKvbdqiAJeNOe +EOcLKvbdUMWPBWPJ +EPCjjvbdOFDshhjd +EOcLKvbdVrNxBeMD +EPDKjvbdiGicZWKV +EObkKvbdtTRrxzFD +DoCjjvbdjJfHilxS +DoCjjvbdelfXGmKL +EPCjjvbdIrxaTMwl +EOcLKvbdRECaPpcr +DnbkKvbdiLeDmtby +EPDLKvbdGcjvKCJj +EOcKjvbdWWiXuceH +DoCkKvbdpstHRrLU +EPDLKvbdkHgLeemk +EPCkKvbdzGxlANEw +EObkKvbdjKGHjMwr +EPCkKvbdiUzEvquC +EOcLKvbdwXMBWBVu +EObkKvbdeKKRvUzn +DncLKvbdSBceLhxk +DoDLKvbdJbibqJbx +DncKjvbdeAUQlxJf +EPDKjvbdbUafwkUI +DoCkKvbdxnTIXriD +EPDLKvbdRacdlJYk +EOcLKvbdmgFXlnGy +EOcKjvbdHELWJaij +EPDLKvbdLhbMQxAS +DnbkKvbdhbPDFXRR +EOcKjvbdqwQMDIxq +DncKjvbdeOdrkTsr +EObjjvbdyOSgwriD +EPCkKvbdjmCLyeHP +DnbjjvbdZisHpGbG +EOcKjvbdIHGzZXwg +DncLKvbdwWkaWAvV +DoDKjvbdffLzOHHA +EPCjjvbdqZPIHREY +DoCkKvbdDjHivYKA +DoDLKvbdYNqAYVWU +EPCkKvbdzjUpPcrt +DncLKvbdlqyVZrdJ +DncLKvbdDoDLLXDE +DoCjjvbdcSbjtDia +DoDKjvbdDxXlUTsl +DncLKvbdJYTahLpp +EObkKvbdNQXqVnHT +EObjjvbdijGIJlxS +EObjjvbdOStVfdtp +EPCkKvbderBWzlCo +EObjjvbdKQzEnenF +EPCjjvbdmtuZkKRf +EPCkKvbdEJhJuxKA +EPCjjvbdgGLymfgA +EObjjvbdRbDeLhxk +EOcKjvbdrSUkNkAm +DoDLKvbdEOcLLXDE +EObjjvbdBhjbKiFj +DoDLKvbdBdQAuimG +DnbjjvbdDwwkstTl +DoDLKvbdVwJYVdEg +EOcKjvbdACqwizJQ +EObjjvbdZsiIyETO +EObkKvbdGLFSbhMu +EOcLKvbdFkFTChNV +DnbjjvbdVBCRSprZ +DoCjjvbdssRsYydc +DoCkKvbdUMWOaWOi +DoDKjvbdYSlBMsnx +EObkKvbdNsTvHFVQ +EPDKjvbdZisIPfaf +EOcLKvbdpssfqqjt +EPCkKvbdNHCpMpVL +EPDKjvbdczZPwxpb +EPCjjvbdnBivxPOV +DoDKjvbdUtNTelVj +EPDKjvbdjhHMFfNk +EObjjvbdEuyPolie +EPDLKvbdKQydneme +EPCkKvbdQvnECkgc +EPDLKvbdatbGxLTh +DoDLKvbdNPxQvOGs +DoDLKvbdySnImSCH +EObkKvbdvBEZTOeI +DoCjjvbdatagXkUI +DnbjjvbdmbKXXnnV +EOcLKvbdmbKXXoNu +EPCkKvbdNsUWGduQ +DncLKvbdpssgSRjt +EPDLKvbdiUzFXSUb +EObkKvbdyzeORgiI +EOcLKvbdKDKDQibx +DoCjjvbdmJDtQuSB +DncLKvbdaNKaruMg +DnbkKvbdOEctJJKd +EObjjvbdkVvnECXw +EObkKvbdKaLHMbXq +DoCjjvbdYzcFqiuy +DoCkKvbdvwLaWAvV +EPDLKvbdnBiwXoNu +EOcLKvbdLBKgNBwq +EPCkKvbdCJLBjiFj +EObjjvbdptUGqrLU +DoCkKvbdWXJYWEFH +EOcLKvbdNeEThiLE +EPCjjvbdtAHQhAAr +EOcKjvbdUGzmlXVe +DnbkKvbdrylPsBIO +EPCjjvbdICLzEzAD +EPDKjvbdrpVoKCuf +EPCjjvbdRkZFuGjs +Dnbjjvbdznopdbkx +DoDLKvbdmgFYNNfy +EObjjvbdptUHRrKt +DoCkKvbdhfjDZWJu +DncLKvbdLGFgbBRV +EPCjjvbdZnnIeEyj +DoDKjvbdmtuZjirG +EPCkKvbdmbJvwoOV +DncLKvbdJpydoFme +EPDKjvbdFyUtaEXb +DnbkKvbdqFcdtWAh +DnbjjvbdWRnXaeMD +EOcKjvbdCIkBkJGK +EOcKjvbdJTZBSlxM +DnbjjvbdziuPocsU +DnbjjvbdhzUelQmf +EPCjjvbdUaBqSprZ +DncLKvbdxZgefXdr +EObjjvbdKVuFdEgJ +EPCjjvbdAMgyTWzY +DnbjjvbdiHJbxuiu +DoDLKvbdUtNTekuj +EPCjjvbdUQpnttgm +DoDLKvbdVAbRTRSZ +DncKjvbdkxsSTYgU +DnbkKvbdMfbomQUk +DoCjjvbdTAEiHbOd +DoCjjvbdczZPxYpb +DnbkKvbdUVkojUBR +DncKjvbdddnqavbj +DoDLKvbdxwhiapZk +DoDKjvbdZirhPfaf +DoDKjvbdTukoitAq +DoCjjvbdrJAKFMne +EObkKvbdZQmEhmFR +DoCjjvbdHgHZyXxH +DncLKvbdNHCpNPuL +DoCkKvbdfIKvRmpg +DoCjjvbdNsUWHEtp +DoCjjvbdpfDdtWAh +DoDLKvbdBhkCKiGK +EObjjvbdtSqsYydc +EPDLKvbdQccBPqES +EOcLKvbduMXvaUAw +EOcLKvbdZMRctNkm +EObjjvbdRadFMIxk +DncLKvbdjhGlFfOL +DoCjjvbdhtzEvqtb +DnbjjvbdUtNUGMWK +EPCjjvbdaaWEfQQX +DncKjvbdunszpkOt +DoDKjvbdEJgjWYKA +DoCkKvbdQYmAGsRj +DoCjjvbdmozYujyC +DnbkKvbduVnYKRTA +DnbkKvbdZxcjNblS +EPDKjvbdzRPNIiwA +EObkKvbdzitopESt +EObjjvbdfILVrNpg +DoCjjvbdNGcPmPuL +DnbjjvbdEYXlUUTl +DnbjjvbdraellHKy +DoDKjvbdZQmEhmFR +DoCkKvbdZnnIdeZj +DnbjjvbdjcMKpgVH +EObkKvbdTfznLvue +EOcKjvbdFkErcIMu +DncKjvbdGdKvKBjK +DoCjjvbdVvhwvEFH +EPCkKvbdmJEUQuSB +DncKjvbdIsZBSlxM +DnbkKvbdmbJvxPNu +DoDKjvbdTqRPVUhN +DoDLKvbdwygefXdr +DnbjjvbdLGGHbBRV +DncLKvbddijSVtzn +EObkKvbdZnnJFFZj +EOcKjvbdCTBCsfXS +DoDLKvbdmttzKjSG +EOcKjvbdyNsIXsIc +EOcKjvbdbVBgXjtI +EOcLKvbdGFjRnJUR +DnbkKvbdYTMBMtOx +EPCkKvbdNGcQMouL +DoDKjvbdJcKDQibx +DoDLKvbdrpWOicWG +EOcKjvbdRaceMIyL +EPDLKvbdWWiYWDeH +EPDLKvbdczZQXxqC +DoDKjvbdLBKgMaxR +DnbjjvbdZjShQHBf +DoCkKvbdKaLGlbXq +DnbkKvbdGdKujCJj +EObkKvbdIBkydzAD +DnbkKvbdqUTgSRkU +EOcLKvbdBiKbKhfK +DoDKjvbdVwIwvEEg +EPDKjvbdIjEAKQHE +DoCkKvbdEPCkLWcE +DoDLKvbdrDeJQNua +EOcLKvbdNddUIhjd +EPCkKvbdYNqAXtvU +EObkKvbdUaCRSqRy +EPCjjvbdqqtjmjaN +EPDLKvbdhbOcFWpq +DoDKjvbdULvPBVni +DoDKjvbdGGJrOJTq +DoCkKvbdqceIpNvB +EOcKjvbddePSCXCj +EPCjjvbdVUNTekuj +DnbjjvbdLGGHbApu +DoCkKvbdcTDLTcia +DnbkKvbdNsUWGeVQ +EObjjvbdZLqcsmlN +EObkKvbdxrnJMrCH +DnbjjvbdqvolChxq +EPCjjvbdaNKbSuNH +DnbkKvbdlYrrTYft +EPCjjvbdwtldpyMO +DnbkKvbdNddThiKd +EPCkKvbdjJfIJlwr +EPCjjvbdJpzEoFme +DnbkKvbdiMEcmuDZ +EOcKjvbdkVvmdBww +EOcLKvbdAMgxrwZx +EObjjvbdatbGwjtI +EOcKjvbdTAEhhCOd +DnbjjvbdfNFwHNJk +EObjjvbdVBBqSpqy +EPCjjvbduaEZSndh +EPDLKvbdpstGqqkU +DnbkKvbdIwtCHlQp +DncKjvbdrbGNMGkZ +EOcKjvbdILaznWqL +DoCjjvbdTXjkmzkY +DoCjjvbdIGfyyXxH +EOcKjvbdjKFhKNXr +EPDKjvbdRDcApRES +EObjjvbdmfdxNNfy +EObjjvbdDihKWYKA +DoCjjvbdzaAOffal +EPDLKvbdQccBQQcr +EPCjjvbdTlWPAvOi +DnbjjvbdqUTfrSLU +EObjjvbdVAbRTRRy +DoCkKvbdnCKWxPOV +EOcKjvbdFjdrbhNV +DnbjjvbdrzLpTAhO +DoCjjvbdDxYMUUUM +DnbjjvbdmoyxujyC +DnbjjvbdUVkoitAq +EObjjvbdrEEhpOWB +DncKjvbdRjyGVGjs +DoCkKvbdJJdAKPgE +DoDKjvbdKDJbqKCx +EPDLKvbdcTDLUDia +DoCkKvbdePEsKssr +EPCjjvbdJbjCqJbx +DoDLKvbddBrmSATm +EOcLKvbdlhcsqVRa +EOcLKvbdKfGICBRV +EPDLKvbdrovPJbvG +DoCjjvbdbAvFGQQX +EPDLKvbdlZTSSxft +DnbjjvbdLqvmZuQz +DncLKvbdZshiYdSn +EOcLKvbduMXvaTaX +EObjjvbdZtJJYcrn +EOcLKvbdczZPwxpb +EPDKjvbdatafwjtI +EObkKvbdsQVnicWG +DnbjjvbdrWokcIyR +DncLKvbdJuteceGi +EOcLKvbdADRwiyiQ +EPDKjvbdCIkBjiFj +EPDKjvbdrNZjYkgi +DnbkKvbdSLYeuHLT +DoDKjvbdkNBkzEfo +DnbkKvbdcyxowyQb +EPDKjvbdYkrETnMN +DoDKjvbdwWlAvAvV +EPCkKvbdczZPxZQb +EPCkKvbdKCibpjCx +EOcKjvbdhytfLqOG +DnbjjvbdxmsHwriD +EPDKjvbdmfeYMmgZ +DoCkKvbdNQXpvNfs +DncLKvbdirziSkJz +EOcKjvbdHffzYxYH +EOcKjvbdWXIxWDdg +DncLKvbdVvhwuceH +DoDLKvbdFxtuBDxC +DncLKvbdJcKCqJbx +DoCkKvbdxLWcgzyf +DnbjjvbdCJLBjiGK +EPCjjvbdcasMrATm +DoDLKvbdLFfICAqV +EPDKjvbdqmZjZMHi +DncKjvbdczZPwxqC +EObkKvbdrWpMDJYq +EPCjjvbdLFehCBQu +EPCkKvbdRzJgsDWA +DoDKjvbdIsZArlxM +DncLKvbdqFcdsuaI +DncLKvbdULvPBVni +EOcLKvbdWXJXuceH +EPDLKvbdaNLCTVMg +EObkKvbdUxhUZjnn +DncLKvbdeATplxKG +DoCjjvbdmSYtzSci +EOcLKvbdkMbLzEfo +EPCjjvbdrpVoJcWG +EPCjjvbdXrlAlsoY +DoDLKvbdUxhTzKnn +EPCjjvbdOEdUJJLE +EObjjvbdKDJcRKCx +EPDKjvbdcyxpXxqC +DnbkKvbdZxdKODMS +DncLKvbdcImJjfWx +DnbjjvbdpfEFTuaI +DnbkKvbdZoNheEyj +EOcKjvbdjFKfuPAO +DnbkKvbdFVyQQNKF +DnbkKvbdDjHiuwjA +EPCkKvbdMgDPlotk +EPDKjvbdxnShXsIc +DoDLKvbdOTUVfduQ +DncKjvbdFejRnIsq +DncKjvbdSQUHJfEX +DncLKvbdRXOEDMHc +DoCkKvbdsZkosAgn +DoDKjvbdUsmUGLuj +EPDKjvbdiifIJmYS +DoDLKvbdZQmEhmFR +EObjjvbdeUAUASlv +DoDLKvbdUsltFlVj +DoCjjvbdSiZjRABM +EOcLKvbdegkVrORH +DoDKjvbdYlRdTnLm +DncKjvbdzitopESt +DnbkKvbdhbPDEwQq +DncKjvbdSKxetgLT +DncKjvbdZQmEiNFR +EPDLKvbdUyITzLPO +DnbjjvbdznpQdblY +EObkKvbdbLMFoODA +EPDLKvbdBhjbLJFj +DoDKjvbdNwoVzdOU +DncKjvbdvBDxsPEh +DnbkKvbdSBceLiZL +EPCkKvbdOhAXyAZB +EObjjvbdZisIQGbG +EOcLKvbdAMgxrvyx +EPDKjvbdCDpAvKMf +DoDKjvbdxVMdpxlO +EOcKjvbdJbicRJbx +DoCkKvbdTppnuVIN +EObjjvbdZjTIPfbG +DoCkKvbdpyOhHQcx +DoCjjvbdfHjvSOQg +DoCjjvbdzoPpdcMY +EPDKjvbdmfeYNNfy +EPCjjvbdXGYzUAPT +DoDLKvbdypnmJKXA +DnbkKvbdBsAcUFwS +DoDLKvbdQYmAGsRj +EObjjvbdUxhTyjnn +DoCkKvbdrouoKCvG +DoDLKvbdhtydwSUb +EPCkKvbddwytUSFz +EOcKjvbdrbFmLgLZ +EObkKvbdbPffckzd +EObjjvbdDxXlTtUM +DnbkKvbdqGEFTvAh +EPCjjvbdDoCkKwDE +EOcLKvbdVviYWDeH +EPCjjvbdWSOYCFLc +DncKjvbdmbKWxPNu +DoCkKvbdZshhxdTO +DoDKjvbdwtldqYkn +DoDLKvbdYSlBMsoY +EPDKjvbdRkZFuHKs +DnbkKvbdeYZstRez +DoCjjvbdrNZixlIJ +DoCjjvbdmgFXlmgZ +EPCkKvbdYlRcsmlN +DoCjjvbdOFETiJKd +EPDLKvbdBhkCLJFj +EPCjjvbdmuVZkJrG +DnbkKvbdFjeTChMu +DoCjjvbdJTZBSlwl +DnbkKvbdozmdLYPA +EObjjvbdtbbtvuoP +DncKjvbdqUTfrSKt +DncKjvbdyTOImSBg +DnbjjvbdcTCkTdKB +EOcKjvbdKaKgNCXq +EPDKjvbdZoOIeEyj +DoDKjvbdYqMeIleR +DncKjvbdnPzZWLZC +EPDLKvbdZirhPfbG +DnbkKvbdGQATXGey +EOcKjvbdZsiJYcsO +DnbkKvbdrWpMDJYq +DoCkKvbdMuTSLNAX +EObjjvbdpxnhHRDx +EOcKjvbdzitpQESt +EPCjjvbdhuZeXSUb +DoCjjvbdNeDtJIkE +DoCkKvbdCEQBWKMf +EPCkKvbdHEKvKCJj +EPCjjvbdatbHYLTh +EObkKvbdLGGICBRV +DncKjvbdRjxeuGjs +DoDKjvbdnHFYNOHZ +EObkKvbdIryAsNYM +EObjjvbdmfdwlnGy +EOcLKvbdNeDsiIkE +DnbjjvbdJTYaSlxM +DoCkKvbdRadEkiYk +DncLKvbdjKFgjNYS +EObkKvbdZjShQGaf +EOcKjvbdKfFgaaQu +DoDKjvbdhgJbyVjV +DoCkKvbdwuNFRZMO +DncLKvbdfekzNfgA +DncKjvbduCcVWuno +EPDLKvbdVrNxBdkc +DnbkKvbdRkYeuHLT +DoDLKvbdwuNEpxlO +DoCjjvbdQccAoqDr +EOcKjvbdUGzmkvvF +DncKjvbdEJhKWYKA +EOcLKvbdssSSxyeD +DoCjjvbdVviXvEEg +DnbjjvbdEuxopNKF +EObkKvbdLAkGlbXq +DoCkKvbdZsiJZESn +DoCkKvbdhkeEOUby +DnbkKvbdbhlikGXY +EObkKvbdLBLGmCYR +EPCjjvbdxUleQyLn +DncLKvbdrbGNMGjy +DoCkKvbdddoSBwDK +EPDLKvbdkyTRsYgU +EPDKjvbdehLVqmqH +EPDLKvbdrbFmMHKy +DncLKvbdmbJvwoOV +EOcLKvbdVUNUFkvK +EPDLKvbdrpWPJbvG +DncKjvbdGAnpxizm +EOcKjvbdyzeNqghh +DoDLKvbdhbPDFWpq +DoDLKvbdfVzxQJzs +DoDLKvbdUMWPBVoJ +EOcLKvbdRpTfjFdX +EPCkKvbdpfDeUWBI +EObjjvbdmuUyjirG +EObjjvbdtbbtwWOo +EObkKvbdrylPsAgn +EOcLKvbdmSYtysEJ +DncKjvbdSCDeMJYk +DoCjjvbdTppoUthN +EPDKjvbdVTmUFkuj +EObjjvbdIsZAsNXl +EOcKjvbdSBcdlJYk +DnbkKvbdZQleIleR +DnbjjvbdddoSBvcK +EOcLKvbdNHComPuL +DncKjvbdiCPCdvqR +EOcKjvbdliDspuSB +EObkKvbdzoPpeCkx +DnbjjvbdcJMijevx +DoDKjvbddZxpYZQb +DoDKjvbdkySrSxft +DoDKjvbdyXhiapZk +EPCkKvbdOAIrsirA +EObkKvbdUaBqSqSZ +EPCkKvbdZtJIyESn +DnbkKvbdTvLoitAq +EPCjjvbdyzeNrIJI +EOcKjvbdiCPDEwRR +EPCkKvbdnCJvwoNu +EPCkKvbdIGfzZYXg +DoCkKvbdkySqrxft +DoCjjvbdZdxGzgiC +DncKjvbdzitpPcsU +DncLKvbdbVCHXjsh +EPCkKvbdlhcsqVSB +EPCjjvbdGYtuAcxC +EOcLKvbdjAQGaQHK +EObjjvbdjlakzFGo +EOcLKvbdvwMAvAuu +EPCjjvbdTqQoVUhN +EPCkKvbdeEnrBwCj +DoCkKvbdsCGMkgKy +DnbjjvbdhkeDnVDZ +EPCjjvbdOFDshiLE +DnbjjvbdDwwlUTsl +EPCkKvbdKWUedEgJ +EPDLKvbdsQVnicWG +EPCkKvbdjgflFfOL +EObkKvbdQYmAHTSK +EObkKvbdSPsgJecw +EObjjvbdjAQGaPgK +DoDLKvbdDxXlUUUM +DoCjjvbdegjuqnQg +DnbkKvbddwzTsqez +DncKjvbdxxJJbPyk +EOcKjvbdGKeTChMu +DoCkKvbdeFPSCWcK +EObkKvbddeOrBwDK +EPCkKvbdaNLBsUmH +DoDLKvbdRpTgJedX +EPCkKvbdkySrSxgU +EPCkKvbdVYhTzKoO +EPCjjvbdxxIjCPyk +EPDLKvbdVrOXadkc +EOcLKvbdEOcKjwDE +DncLKvbdmfeYMnGy +EPCkKvbdVAaprprZ +EPCjjvbdFWYpQMjF +DoCkKvbdqrUjmkAm +DoCjjvbdQvmdDLhD +EPDLKvbdeATqNYKG +DnbkKvbdLGGHaaQu +EObjjvbdezvZEhtX +DnbkKvbdjuwNdBww +DncKjvbdJTZAsMwl +EPDKjvbdkxrrTYgU +EPDKjvbdbAudfQQX +DoCkKvbdVUNUGMVj +EPDLKvbdaNLBsUlg +EPDLKvbdDwxLtUUM +EPCjjvbdMgColpUk +EPDLKvbdaogGdLzd +EPDKjvbdzGxlANFX +EPCkKvbdUQqOuUgm +DoDKjvbdEPDKkXCd +EPDKjvbdbsCkTcia +EObjjvbdTAEhhBnd +EPCkKvbdhzVFkpmf +DnbkKvbdaSFcHtGL +DoCjjvbdGBOpxizm +DncLKvbdGYttaEYC +DoDKjvbdqYoHfpdY +EOcKjvbdrouoKCuf +EOcKjvbdiCPDFWqR +DnbjjvbdVAaprqRy +EPCjjvbdePFSjtUS +DnbkKvbdLGGICBRV +EPDLKvbdkMalZeHP +DoDLKvbdJutfEFHJ +DoDKjvbdVBCRSqSZ +EObjjvbdvvlBWBWV +EOcLKvbdFVxpPmJe +DoDLKvbdKfGHaaRV +DnbjjvbdBvzdIdpW +DncKjvbdNsUWHFUp +EPDLKvbdrSVLNjaN +EPDKjvbdgGMZnGgA +DnbkKvbdSBceMIyL +EOcLKvbdSBdFLiYk +EOcLKvbdRyigrcWA +EPDKjvbdaMkBruNH +DncKjvbdUaCRSpqy +DnbjjvbdIMBzmvpk +DnbkKvbdbVCGxKtI +DncLKvbdliDtQuSB +EObkKvbdHDkVjBjK +DncKjvbdmSYtyrci +DnbkKvbdxVMdpxlO +EPCjjvbdRpTfjGDw +EPCkKvbdhancEvpq +EPDLKvbdNsTvHEuQ +DoDKjvbdfekymfgA +EObkKvbdUWLojUBR +EPCjjvbdJXtBgkpp +DoCjjvbdEPCkLXCd +EPCjjvbdZxcjNcLr +DoCjjvbdZsiJYcrn +EPCkKvbdZtIiZDrn +EObkKvbduLxWaUBX +EObkKvbdZdxGzghb +EOcKjvbdkClLRHVH +EOcLKvbdFjdsDINV +DncKjvbdNeEUIiKd +EPCkKvbdYpmFJNFR +EPDKjvbdlhcsptqa +DoDLKvbdnCKWwoOV +EObkKvbdDnbkLXCd +EObkKvbdQwOECkhD +EOcKjvbdUaCRSpqy +EPCjjvbdBcoaVjNG +DnbjjvbdxmrhXsJD +EObjjvbdcImKKewY +DnbkKvbdpyOgfpdY +DnbjjvbdpyOggRDx +EObjjvbdEOcKjwDE +DnbkKvbduCcUwVoP +EOcKjvbdhgKCxuiu +DoDKjvbdiZtelQmf +DoDKjvbdnBjXYOnV +EPDLKvbdczZPwxpb +EPCjjvbdADRwizJQ +EObjjvbdfVzwpJzs +DnbjjvbdxxIiapZk +EPCjjvbdjcLkQfuH +EPCjjvbdcyyQYYqC +DoCkKvbdEuyPpNJe +DncLKvbdcJNJkGWx +DoDKjvbdZoOIdeZj +DoCjjvbdWHxVwgYz +DnbjjvbdeEoRbWbj +DncKjvbdZMSDsnLm +EOcLKvbdbiNKLFvx +DnbkKvbdjcLjqHVH +DnbjjvbdEYXktTtM +EPCjjvbdCSaCsfWr +EOcLKvbdBdQAuimG +EObkKvbdqdFIpOWB +DncLKvbdelevgNKL +EObkKvbdZMRdUNkm +EPCkKvbdrDdiQOVa +DoDLKvbdCWzdJFQW +EObjjvbdxUleQyMO +DncKjvbdBsAcTfXS +EOcKjvbdRMxBxmtz +EOcKjvbdSKyFuGkT +EPCkKvbdEuxooljF +DncLKvbdYgWdAPSi +DoCkKvbdiHJcYvKV +EPCkKvbdZQldiNFR +DncKjvbdjAPgAofj +EObjjvbdkVvmdBxX +DoDLKvbdsBfMlHLZ +DoDLKvbduWNxKQsA +EObjjvbdOTTugEtp +DoCjjvbdIxUBgkqQ +EOcKjvbdqFceUWAh +DnbjjvbdTkunaVoJ +EPDKjvbdiZtfLqOG +DoCjjvbdcImJkGXY +DncLKvbdpstGrSLU +DncLKvbdRpTfjGDw +DnbkKvbdznpREblY +DnbjjvbdqdEhomvB +DncLKvbdIwtBhMRQ +DoDKjvbdhtzFWqtb +EOcKjvbdiBncEwQq +EPDKjvbdZQleJMdq +EOcLKvbdLAkGlaxR +DoCkKvbdZsiIyDsO +EObkKvbdeOdsKssr +DnbjjvbdJcKCpjDY +EPDLKvbdSBdElIyL +EPCkKvbdyOTHwrhc +EPDLKvbdGLEsDIMu +EPCjjvbdmJETqVRa +DncKjvbdKDJbqJbx +EOcKjvbdbsCkTdKB +EOcKjvbduDCuXVno +EOcKjvbdrXPlDIxq +EOcKjvbdqlyixkhJ +EObjjvbdRkYfUgLT +EPDLKvbdLAkGmCXq +DnbjjvbdHgGzYxXg +DncKjvbdpstHSSKt +DoCkKvbdqvolCiYq +DoCkKvbdmgFYNOHZ +DnbkKvbdqGDeTvBI +DoDLKvbdyzeNrHhh +DnbkKvbdwzHefXeS +DoDKjvbdbiMjLGXY +DnbkKvbdTulQKTaR +DnbjjvbdsPunicVf +DncKjvbdqvpLcIyR +DncLKvbdOFEThhkE +EOcKjvbdZshhxdSn +DncKjvbdpyPHfpdY +DoDLKvbdNGcPmQUk +DoCkKvbdVgwvXfxz +DoCjjvbdCgLegAzc +DnbjjvbdauCGxLTh +DoDKjvbdqFceTvBI +DoCjjvbduMYXAsaX +EPCkKvbdrSVKmkAm +EObkKvbdOYOuzcnU +DncKjvbdYkqctNlN +DncKjvbdSZjHrcWA +DoCjjvbdrEFJQNua +EPCjjvbdRosfjFcw +EObkKvbdZoNiFEyj +EPDKjvbdVgwvXfxz +DoDLKvbdhbPCdvqR +DncKjvbdqvokcIyR +DnbjjvbdpssfqqkU +DncLKvbdzoPpdbkx +DnbjjvbduaDySoFI +EOcKjvbdEASImZwX +DncKjvbdbrcKtDjB +DoCjjvbdQccBQQdS +DoCkKvbdDigjVwjA +DnbkKvbdbVBfwkUI +EOcKjvbdIsYaSlxM +DoDLKvbdKVtedEgJ +EPCjjvbdIryArlxM +DncKjvbdpeceTuaI +EObkKvbdZshiYdSn +DncLKvbdZtIhyESn +DnbjjvbdOYOuzcnU +DoDKjvbdUxhTyjoO +EObjjvbdTppoVVHm +DncKjvbdrWolCiYq +DoDLKvbdNVSrKmAX +EObkKvbdiGicZWKV +DoDKjvbduVmwipsA +EPCjjvbdNPwqVnHT +EObjjvbdelewGmJk +EOcLKvbdgGLzNgHA +DoDKjvbdcJNJjfWx +DoCkKvbdyOTHwriD +EObjjvbdEzspeLcJ +DnbjjvbdjhHLeenL +DncKjvbdOStWHFVQ +EOcLKvbdsZlPsBHn +EPDLKvbdtcCuWuno +DnbkKvbdULunaVni +EPDKjvbdJqZdnfNe +EOcKjvbdqwPkcIxq +EObjjvbdrJAJeNOe +DnbjjvbdRECaPpdS +EPCjjvbdpfEEsvBI +EPDLKvbdIsZArmYM +EPDLKvbdJYUCILpp +EOcLKvbdYlSDtNlN +EPCjjvbdJYTbHkpp +EPDKjvbdYzbfSJvZ +EPCjjvbdRaceMJYk +EObjjvbdZisHofaf +DnbkKvbdRbEElIyL +EOcLKvbdijFhKNXr +EOcKjvbdRXNdDMID +DncLKvbdbiNKLGXY +DoDLKvbdlZSrSyHU +EObkKvbdqZPIHRDx +DoDKjvbdnPzYujxb +EObkKvbdnHEwlmfy +EObkKvbdCWzdIePv +EObkKvbdqlyiyLgi +EPCjjvbdkySqryHU +EObkKvbdcImKKevx +DncKjvbdEASJMzWw +DncKjvbdRkYfUfkT +EPCjjvbdqYoIGpcx +DncKjvbdGckWKBjK +EPCjjvbdYTLaNUOx +EPDKjvbdwtleRZMO +EObkKvbdGFiqnJUR +DncLKvbdlhdURVRa +EObjjvbdqlzJxkhJ +DncLKvbdFaPQyJzm +EPCkKvbdpssgRrLU +EObjjvbdiCOcFXRR +DncKjvbdqTtGqrLU +EPCjjvbdsCFlkgLZ +EOcKjvbduWOXiqTA +EOcKjvbdkClKqGuH +EPCjjvbdMowpvOGs +EPCkKvbdxrmhmRag +DoCjjvbdiUzFXRuC +EOcLKvbdUMWPAvOi +DoDLKvbdmfdwlmgZ +EPCjjvbdehKurNpg +EOcLKvbdBsAcTevr +EPCjjvbdZjTIPgBf +EObjjvbdPIAXyAZB +EPCjjvbdCDoaVjNG +DncKjvbdrpVnicVf +DoDKjvbdlZTSSxgU +DncKjvbdGZVVAdYC +EPDLKvbdsCGMkfjy +EPCjjvbdSPsfjFdX +DoCjjvbdJXsbIMQp +DncKjvbdzeZnzdyp +DnbkKvbdlYsRsYft +DncKjvbdbiMjLFwY +EPDKjvbdyOShYSiD +DoCkKvbdOTTufduQ +EPDLKvbdVwJYVcdg +DoCkKvbdGFiqnJTq +EOcLKvbdUslselWK +EObjjvbdkxsSSyHU +EOcLKvbdxsNhmSBg +DnbjjvbdqqtkOLAm +DnbjjvbdeFPRawDK +DnbkKvbdLZQirzuG +EPCkKvbdFWYpPlie +EObkKvbdrWpMCiYq +EOcKjvbdiiehKNXr +EPDKjvbdEvYopNJe +EPCkKvbdxrmhmSCH +DoCkKvbdptUHSRkU +EOcKjvbdKCjDRJcY +DoDLKvbdrMzKYkgi +DoCjjvbdZLrDtNkm +DoCkKvbdqYnggQcx +DnbkKvbdrovOibvG +DncKjvbdADRwizIp +EOcLKvbdZisHpHCG +EPCjjvbdZRNFImFR +EPDKjvbdVwIxVceH +EOcKjvbdrDeJQNua +EPCkKvbdIxTaglQp +DncKjvbdGFiqmiUR +EPCjjvbdVwJXvEEg +DnbkKvbdwuMeRZMO +EPCkKvbdZRNFImFR +EPCkKvbdnHEwlmgZ +EPDKjvbdLYqKSzuG +DoDKjvbdZsiJYdTO +DoDLKvbdShyjRAAl +DoDKjvbdRadFLiYk +DnbkKvbdjbkjpgUg +EObkKvbdUaBpsRRy +EOcKjvbdehKuqnRH +EObkKvbdDwxMUTsl +EOcKjvbdptUHSSKt +EPDKjvbdHEKuibJj +EOcKjvbdxxIjBpZk +EObkKvbdelewGmJk +DncLKvbdTvLpKUAq +EPCjjvbdGLErbhNV +DncLKvbdfHjvRmqH +DnbjjvbdkMakyeHP +EPDKjvbdJcKCpjDY +DoCkKvbdRECaPpcr +EOcLKvbdmgFYMmgZ +EObjjvbdZRMdiMeR +DoCjjvbdYzcFqivZ +DoCkKvbdeOeTKtTr +EPCkKvbdXFxytAPT +DncLKvbdZnnJEdzK +DncLKvbdhtyeWrUb +EOcKjvbdEJgivXjA +EPDLKvbdssSTYyeD +EPDLKvbdLBLGmCXq +DnbkKvbdKeegbApu +DoDLKvbdJYUBhLqQ +EPDKjvbdwNWANDdm +DoCjjvbdKfGIBaRV +DoCjjvbdbhljLFwY +DncLKvbdmgFXmNgZ +DoDKjvbdZRMeJNFR +DoCkKvbdWeyZtAOs +DoCkKvbdbiNKLFvx +EPDKjvbdUsmTfMVj +EPCkKvbdijFgjMwr +DnbkKvbdbsCjtDia +DnbjjvbdZQleJNFR +DoDLKvbdNQXqWNfs +EOcLKvbdULunaVoJ +DncLKvbdrEEhpOVa +DncLKvbdRyigsCvA +DoCkKvbdVwJYWEEg +DncLKvbdjKGIKMwr +EObkKvbdrEFIpNvB +DoCjjvbdGLEsDINV +EOcLKvbdJSyArlxM +EPCjjvbdTJZiqABM +DncLKvbdCTAbsewS +DnbjjvbdZjTIPfaf +EPCjjvbdbPfgELzd +DnbjjvbdLBLHMbXq +EPCjjvbdqiAKFMoF +DnbkKvbdIBlZdzAD +EPDLKvbdyTNiNRag +DoDLKvbdZjSgogCG +EPCjjvbdjAPgAofj +EPCjjvbdxmrgxTJD +EObjjvbdSPsgKGEX +EObkKvbdRWnDblHc +DnbjjvbdZQmFImFR +DoCjjvbdjuwODaww +EOcLKvbdVviXvEFH +EPCjjvbdcImJkGXY +EPDKjvbdVAbQrqSZ +DoCjjvbdWWiXudFH +EPDKjvbdapGfdLzd +EObkKvbdQwOEDMID +EPCjjvbdKDKCqKCx +DncKjvbdJvUfEEgJ +EObkKvbdDoDLKvcE +EOcKjvbdqwPkbhyR +EObjjvbdyTOJNSCH +EObkKvbdZsiIxdTO +DoCjjvbdaSFbhTfL +EOcKjvbdUslsekvK +DoDKjvbdehLWSORH +EPCkKvbdBsBDTfWr +DoCkKvbdMfbpNQVL +DoCkKvbdezvZFJUX +EObjjvbdJYUBhMRQ +DncKjvbdlhcsptqa +DoCkKvbdiZtfMQnG +EObkKvbdZRMdhleR +EPDLKvbdkySrSxgU +DoCkKvbdYlSDsmkm +DnbkKvbdkNBkzEfo +EPDLKvbdyYJKCPzL +EOcKjvbdqwPkbiZR +DncLKvbdqdFJQOWB +DoDKjvbdFyUtaDxC +DnbjjvbdZyDinDMS +EOcKjvbdqrVKnKaN +DoCjjvbdMgDPlotk +EPCjjvbdUVlPitBR +DoDLKvbdbsCkTcjB +EPCjjvbdnGdwlnGy +DnbkKvbdapGfdLzd +EPDKjvbddndsKtTr +DncLKvbdsrrTZZeD +EObkKvbdqdFJQOWB +DncKjvbdRadFLhxk +DnbkKvbdfILWSORH +DnbkKvbdqZOggQcx +EPDKjvbdCDpAujMf +EObjjvbdxsOImSBg +DoDKjvbdrSUjmjaN +EObkKvbdrMyjYkhJ +EObkKvbdANHySvzY +EObkKvbdgGLynGgA +DoDLKvbdNdcshiKd +EObjjvbdePErkTtS +EPCkKvbdSCEFLhxk +DoDKjvbdIxUBhLqQ +EPCkKvbdVvhxWDdg +EOcLKvbdKfGHbBQu +DoCjjvbdajlFoNcA +DoCkKvbdQdDAopdS +DoDKjvbdSBceMJZL +DoDKjvbdOStWGdtp +DoCjjvbdGdLWKBij +DnbkKvbdvOszpjnt +DncLKvbdUVlPjTaR +DoDLKvbdliDsptrB +EOcKjvbdZisHpHCG +DoDKjvbdkVwODaxX +DoDLKvbdfVzwpJzs +DnbkKvbdDjIKWYKA +EObkKvbdrJAJdmPF +EObjjvbdeATpmYJf +DnbkKvbdQmYByOUz +EPDLKvbdxmrhXsJD +EPDLKvbdCJLBjiGK +DoCkKvbdYpmFJMeR +DoDKjvbdXnRAXuWU +DoDKjvbdiMFDmtby +DnbkKvbddZyQYZQb +DncLKvbdZtIiYdSn +EObjjvbdwMvANDdm +EPDLKvbdIwsbHkqQ +DncKjvbdURQntthN +EObkKvbdTqROttgm +EPCjjvbdTkvOaVni +EOcLKvbdfNFwHNKL +EObkKvbdjgflFfOL +EObjjvbdUQqOuUhN +DncLKvbdegjurNqH +EPDLKvbdxUmEqZMO +DoDKjvbdGcjvKBjK +DoDKjvbdVTltFkuj +DnbkKvbdLYqKSztf +DoDKjvbdUyHtZkOn +EPDLKvbdvAcyTOdh +DncKjvbdqFcdsvAh +DncLKvbdrbFmMHKy +EOcKjvbdYlRdTnLm +DoCjjvbdEASJMzXX +EObkKvbdMoxQvNfs +EOcKjvbdiHJcYujV +DnbjjvbdvAcyTPEh +DoDLKvbdGQASwGfZ +EObkKvbdMoxRVnHT +EObkKvbdhgJcYvJu +DnbjjvbduWOXipsA +DoDLKvbdQcbaQQdS +EObkKvbdUsltFkvK +EPDKjvbdKyQirzuG +EPCjjvbdmJDtQuSB +EObkKvbdXrkaMsoY +EOcKjvbdrEFIpOVa +EPDKjvbdVqmwadkc +EOcKjvbdqYoIGqDx +EObkKvbdtbbtwWOo +EPCkKvbdSKxfUfkT +EPCkKvbdmJDsqUrB +DncKjvbdhaoCeWpq +EObjjvbdFxuVAdYC +EPCkKvbdqFcdsvBI +EPDLKvbdOTUWGeVQ +EPCkKvbdlhdUQtrB +DoDKjvbdCJLCLJGK +EPDKjvbdMgCpMotk +DnbjjvbdrbFlkgLZ +DoDKjvbdqBJFAWhE +EPCjjvbdpyPHfqDx +EOcKjvbdTlVoBVni +EPCjjvbdrRtkNkBN +EPCkKvbdWWhwuceH +EPDKjvbdcImKKewY +EOcKjvbdYSlBNToY +EObkKvbdZRMeIldq +EPDLKvbdMoxRWNgT +EObjjvbdMIbMQxAS +EPCjjvbdQdDBQQdS +EObkKvbddZyPwxqC +EOcLKvbdACrXiyiQ +EPDLKvbdcSbkUEJa +DncLKvbdTkunaWPJ +DnbjjvbdvBEYrndh +EObjjvbdmIctQuRa +DncKjvbdiUydvqtb +DoCjjvbdhkdcnUby +EOcKjvbdePFTLTsr +EOcLKvbdiHJbxujV +EObjjvbdZsiJZESn +EOcKjvbdpxoHfqEY +EPDKjvbdFyUuBDwb +DoDLKvbdBiLBkJGK +EPCkKvbdliDtQuRa +DoDKjvbdhbOcEwQq +DncLKvbdRosgJfDw +EObjjvbdrzMQSaIO +EObkKvbdUsmTfMVj +EOcKjvbdWXIxWEFH +EPCjjvbdcTCjtDjB +EObkKvbdbBVeGQPw +EOcLKvbdaSGDHtFk +DoDLKvbdqFdFUVaI +EPCkKvbdxxIjBozL +DncLKvbdNddUIiLE +EObjjvbduMYWaUAw +EPCkKvbdWWiXvDdg +EObjjvbdJXsbILqQ +DnbkKvbdDnbjjwCd +DnbkKvbdxUldqZMO +DoCjjvbdKyRKSztf +DncLKvbdLFehBaQu +EPDLKvbdjvXNdBww +EOcLKvbduaEZTPFI +DoCkKvbdfMevfmKL +EPCkKvbdpxoIGqEY +EPCkKvbdKWUecdgJ +EObkKvbdmbJwYOmu +EPCkKvbdIsZArmYM +DnbjjvbdxLXDgzyf +DncLKvbdEvYopMjF +DncLKvbdmJETqVRa +DnbkKvbdrouoKDWG +EPDLKvbdbVCGwkTh +DoDKjvbdZirhPgCG +EPDKjvbdTvMQKUAq +DnbkKvbdLrWlzVQz +EOcLKvbdrEEiPmua +DnbjjvbdczZQXyRC +DncKjvbdnUtzKjSG +EPCjjvbdkNCLzFHP +DncKjvbdZyEKNbkr +EObkKvbdJuuFdEgJ +DncLKvbduCbuXWPP +EPCjjvbdyNrhXriD +DnbkKvbdIxTaglQp +EPCjjvbdJvVFceHJ +EPCkKvbdVBBprqSZ +EOcKjvbdkxrqsYgU +EPCjjvbdGLFSbhMu +EObjjvbdnPzZWLYb +EObkKvbdjblLRGuH +DoDLKvbduaDyTPFI +EPCjjvbdiifIJmXr +EObkKvbdYkqctOMN +EPCkKvbdelfXHMjL +EPDLKvbdeFOrCWbj +EObjjvbdeUAUATNW +EPCjjvbdWRmxBeMD +DoCjjvbdZxcinDMS +EOcLKvbdWRmwbElD +DoDLKvbdpssfrSLU +DncLKvbdQccApRES +DoDKjvbdGdKujBij +DoDKjvbdZLqdTmlN +DoCjjvbdbiNKLGXY +DoCjjvbdVZITzKoO +DoCkKvbdsPuoKCvG +EPDKjvbdNGbomQVL +DnbkKvbdkIHMGFnL +EPDKjvbdvPTzpjoU +EOcKjvbdczZPxZQb +DncKjvbdliEURUrB +DnbkKvbdGZUtaDxC +EPCjjvbdrMyjZLhJ +EPCjjvbdTulPjTaR +DoCkKvbdZeYGzhJC +DncLKvbdwygefYEr +DnbjjvbdehLVrOQg +DnbjjvbdZxcjNblS +DoCjjvbdSLYetgKs +EPCkKvbdVAbQrpqy +EPCjjvbdtTSTZZdc +DnbkKvbdSCEFMIyL +DoDKjvbdrDeJPmvB +EOcLKvbduDDVXVno +DoDLKvbdZdxGzhIb +EObkKvbdhgJbxujV +DncLKvbdlYsRsZHU +DoDLKvbdhzUelQmf +EObkKvbdWWhwvDeH +EPCjjvbdjgfkfFmk +EObkKvbdzaAPHGal +DoDLKvbdEPDLLXDE +DoCjjvbdTukpKTaR +EOcKjvbdhaoCeWpq +EPDKjvbdwjvdHzzG +EPDLKvbdJTZBTNYM +DoDLKvbdRECaPqDr +DncKjvbdjhGkfGNk +EObkKvbdjhGkfFmk +DncLKvbdqlyixkhJ +EObkKvbdjEkHUoAO +EPCkKvbdcasMrAUN +EObjjvbdhzUfLqOG +DoCkKvbdEvYopNKF +EPCjjvbdjuwODaxX +DncLKvbddiirWUzn +EObkKvbdOStVfduQ +DnbjjvbdypnmIjXA +DnbjjvbdRWnEClHc +EOcLKvbdbhljLFvx +EPDLKvbdJXsaglRQ +EObkKvbdhzUfLqOG +EObkKvbdnPyxujyC +DoDKjvbdBiKajiFj +DoDKjvbdZjTHpHBf +EPCjjvbdaSFcITek +EObjjvbdYzcFqiuy +DncLKvbdqdFIpNvB +DoDKjvbdLYqJrzuG +DoDLKvbdVwJXucdg +DnbjjvbdhbObdvqR +DoCkKvbdCEQBWJlf +DoDLKvbdSCDdlJYk +EPDLKvbdZyEJnCkr +DoDKjvbdvAcyTOeI +DoDKjvbdkIHLfFmk +EPCjjvbduaEYroFI +DnbkKvbdjblKpgUg +EOcKjvbdwygefYFS +EOcKjvbdliDsqUqa +DnbjjvbdjcMLRGtg +EObkKvbdRbEElJYk +EPCkKvbdqrUkNjaN +EOcLKvbdRotGifDw +DnbkKvbdUsmUGLuj +DoCjjvbdeKJqvUzn +EPDKjvbdQwNdClHc +EOcLKvbdcScLTcjB +DoCjjvbdvBDxroEh +DoDLKvbdIxUBglQp +EPDLKvbdfVzxQJzs +DncLKvbdqlzKYlIJ +DoDKjvbdaNLCSuMg +EOcKjvbdwjwDgzyf +EPDKjvbdIxTaglRQ +DoDKjvbdVTltGLuj +DoCkKvbdiMFENuDZ +EOcLKvbdZyEJnDMS +DnbkKvbdiBoCeXRR +EPCkKvbdbiMijewY +EOcKjvbdmttzLJqf +DncKjvbdYTLaMtOx +EPCjjvbdfIKuqmqH +DoCjjvbdBdQBVjNG +EObkKvbdieLGuPAO +EPDLKvbdsZlQSaIO +DnbkKvbdEztQeMDJ +EPCjjvbdIjEAJpHE +EOcLKvbdfILWRmpg +EPCjjvbdZyDinDLr +DncKjvbdLGGIBaRV +DncLKvbdmozZWLZC +DoCkKvbdlZSrSxft +EOcLKvbdFjdrcINV +EOcKjvbdQvnDblHc +DoCkKvbdqUUHRqkU +EPDKjvbdnBjWwnmu +DoCjjvbdZxcjNbkr +DncKjvbdZisIQHCG +DoCkKvbdJcJcRJbx +EPDLKvbdlhdUQtqa +DnbkKvbdrzLpSaHn +DoDKjvbdziuPpDrt +EPDKjvbdEYXlTtUM +EObkKvbdqdFIpOVa +DncKjvbdpxnhHQdY +DnbkKvbdLhakqYAS +EPCkKvbdrRtkNkBN +EObkKvbdqrVKmjaN +EOcKjvbdxUldqZMO +EOcKjvbdrbFllHKy +DoCkKvbdySmhlrBg +EPCkKvbdkxrqsYgU +EPCkKvbdZLqcsnMN +DncKjvbdFpATXHFy +EPDLKvbdZRMdiMeR +EPDLKvbdRNXbYmtz +DoCkKvbdpyPIGqEY +DoDLKvbdKaKfmCYR +EPDLKvbdrylPsBIO +EObjjvbdUQqOuVHm +EPCkKvbdezvZFItX +EOcKjvbdZirhQHCG +DoDKjvbdePFSjssr +EOcKjvbdCTAcTfXS +EOcKjvbdkxsRsYft +EPDLKvbdQwODcMHc +DoDKjvbdwuNFRZMO +EPCjjvbdEuyPomKF +DoCkKvbdpxnhGpcx +DncKjvbdiVZeWrUb +EOcKjvbdrEEiPmvB +EOcLKvbdZxdJnDLr +EObjjvbdUtNUFkvK +DoDLKvbdZQmFIldq +EObjjvbdnCJvwnmu +EPCkKvbdRWmccLgc +DnbkKvbdnUtykJqf +DnbkKvbdVBBqSpqy +EPCkKvbdZoOIddyj +DnbkKvbdZQldiNFR +DncLKvbdmRyVZsDi +DoCjjvbdcasMrATm +EOcLKvbdtbbtvuno +DoDLKvbdZtJJYdSn +DnbkKvbdGKeTDHlu +DoCkKvbdZjTHpGbG +EOcKjvbdHDjvKCKK +EObjjvbdddnqbXCj +EObkKvbdlZTSTYgU +EPCjjvbdqqtjmkBN +EObjjvbdtAGqIAAr +EObkKvbdrRtjmjaN +DnbjjvbdMRwMytpz +EPCkKvbdsQWPJbuf +DoDKjvbdqFceUWBI +DoCkKvbdnBjWxPNu +DoDLKvbdiUzFXRuC +EObkKvbdQccBPqES +DnbjjvbdOFDtIiLE +EPDKjvbdYlRcsnMN +DncKjvbdFfJrNhsq +DoCkKvbdsCFmMHKy +EPDLKvbdYkrETnMN +DoCjjvbdYNqAXuWU +EPDKjvbdrovPKDWG +DoDLKvbdbKlGOmcA +DoCkKvbdOStWHFVQ +EObjjvbdhbObeXQq +EPCjjvbdeEnrBwDK +DoDLKvbdrbFmMGkZ +DncKjvbdxZhGGYFS +EPDKjvbdbrbkTdKB +EPDKjvbdraellGkZ +EPCkKvbdssSTZZeD +EPDKjvbdDjHiuxKA +DoCjjvbdzoPqFDMY +EPCjjvbdlAlnmALA +DoDKjvbdmtuZjjRf +DoDKjvbdFpASvfey +DoCkKvbdjlakyeGo +DoDKjvbdxnSgxTIc +EPCjjvbdxZhFfXeS +EPCkKvbdqcdiPnVa +EOcLKvbdmfeYMnHZ +DoDLKvbduCbuWvOo +DoDKjvbdmIcsqUqa +EPDKjvbdzoQQdblY +DoDLKvbdRNXayOUz +DnbjjvbdrJAKFNOe +DnbjjvbdZLrEUOMN +EOcKjvbdwygeexEr +EPCkKvbdbVBfwjtI +EObkKvbdKDKDRJbx +DoCkKvbdGckWKBij +EOcKjvbdzjVQPdSt +EPDLKvbdqlzKYkhJ +DnbjjvbdajkennDA +DoDLKvbdRzJgsCvA +EObjjvbdehKuqmqH +DncKjvbdajlFnnDA +DnbjjvbdjEkHUoAO +DoCjjvbdFVyPomKF +DoCkKvbdJcJbpjCx +DnbkKvbdRaceLiZL +EPDKjvbdeEnrBwDK +DoDLKvbdxKvdHzyf +DoCkKvbdSPtHKFcw +EObkKvbdjhHMGGOL +EOcLKvbdGGJqnItR +DoCjjvbdnGdxNNgZ +DoDKjvbdbKkfOmcA +DnbjjvbdelewHNKL +EPCkKvbdcSbjsdJa +EPCkKvbdTAEhgbOd +DncLKvbdUslselVj +DnbjjvbdVrOYBeMD +EObjjvbdEzspeMDJ +EPCjjvbdcTDLTcjB +EPDLKvbdsPvPJbuf +EOcKjvbdqGEFUWBI +EPDKjvbdVgxWYGxz +EOcLKvbdSPtGjGDw +EObkKvbdGckVibJj +DoDLKvbdeEoSCWcK +EPCkKvbdQvmdClID +DncLKvbdhytelROG +EPCkKvbdeXzTtSFz +EPCkKvbdrXQMDIxq +EObkKvbdtlXvaUAw +DnbkKvbdiMFDmtcZ +EPDLKvbdJqZeOfNe +EPDLKvbdmIdUQtrB +DoDKjvbdVTltGLvK +DncLKvbdZRNEhleR +EPDKjvbdjlakydfo +DnbjjvbdFpASvfey +EPCkKvbdkySrTYft +EOcLKvbdVUMtGMVj +EPDLKvbdmRyUysDi +EPCkKvbdGKeScHlu +EObjjvbdczZPwyRC +EPDLKvbdVYhUZkOn +DncLKvbdJbibqKDY +EPDLKvbdfekzNfgA +EObkKvbdKQydoGOF +EObkKvbdVgwvXfxz +DncLKvbdQdDApQcr +DncLKvbdGFjRnJUR +DncKjvbdjgflFemk +DoDKjvbdlhctRVSB +DncLKvbdZLqctOLm +DncKjvbdfSAvzlCo +EPDKjvbdZRMeIleR +EObjjvbdZRMeJMdq +EOcKjvbdMuTSKmAX +DncKjvbdqYngfpdY +DnbkKvbdxrmiMqbH +EObjjvbdbPgGckzd +DoCkKvbdpstGqqkU +DncLKvbdmJDsqVSB +EPDLKvbdtunYKQsA +EObkKvbdDnbkKwCd +EPDLKvbdEXwkstUM +DoDKjvbdrRtkNkBN +DncLKvbdIwtCIMQp +EPDLKvbdZQmEhmEq +DnbkKvbdxmrhYTIc +DoCjjvbdCSaDUGWr +EPCkKvbdatagXkUI +DncLKvbdEPDKkWcE +DncKjvbdZjShPgBf +EPDKjvbdHDkVjCJj +DoCjjvbdsrrTYzEc +EObjjvbdhlEcnUby +DnbjjvbdemFvfmKL +EObkKvbdlhcsqUqa +DoCkKvbdZtIiYdTO +EObkKvbdEXwlTssl +DoDKjvbdhaoCdvqR +EObkKvbdliEURUrB +DoDLKvbdEYXkstTl +DncKjvbdFkEsDINV +DoDKjvbdFkErcHmV +DoDLKvbdKCjCpjDY +EPCjjvbdjJegjMxS +DnbkKvbdnCKWwnmu +DnbjjvbdqwQLbiYq +DoDLKvbdSZigsDWA +EObjjvbduVnYKRTA +EOcKjvbdTlWOaVoJ +DnbjjvbdSCDeMJYk +DnbkKvbdQvmdClID +EPCkKvbdziuQPdTU +EOcLKvbdhficZWJu +EOcKjvbdZLqdTmkm +DoDKjvbdcImKKevx +EOcLKvbdGFirOJUR +EObkKvbdREDApRES +DoDKjvbdHELWKBij +EOcKjvbdrSVLNkBN +EOcKjvbdBdQBWJlf +DoCjjvbdFpATXHGZ +DnbjjvbdqZOhGpdY +EPDLKvbdCSaDUGWr +DoDLKvbdrpWPJcWG +DnbjjvbdZsiJYdTO +EPDKjvbdJvVGEFGi +EPCkKvbdmIctRVSB +DncKjvbdBiLCKhfK +DoCkKvbdZisIQGbG +DoCjjvbduWNwjQsA +EOcLKvbdiHKCyVjV +EPCjjvbdlZSrTZGt +EObjjvbdNPxRWNgT +DncKjvbdeAURNXif +DncLKvbdOStWGeVQ +DoCjjvbdJvUeceGi +DoDKjvbdXsMBMsnx +EPDKjvbdGLFSbhMu +EPDLKvbdEvZPolie +EOcKjvbdrRtjnLBN +EPDKjvbdyOTHxTJD +EPDKjvbdmajWwnmu +EPCjjvbdrNZjZLhJ +DncKjvbdajlFoODA +DoDKjvbdrEFIpOVa +DnbkKvbdpedEtWBI +DncKjvbdqwQMChyR +DnbjjvbdnCKWwnnV +DoCjjvbdNUsRkNAX +EOcLKvbdULvPBWPJ +DncLKvbdjlalZdfo +EPDKjvbdjJfHjNYS +DoDKjvbdPxmAHTSK +DnbkKvbdmIctQtqa +EObjjvbdnHFXmNfy +EPCkKvbdqlzJyLhJ +DnbjjvbdVqnYCElD +EPDKjvbdqTsgRqkU +EPCjjvbdADSYKZhp +EPDLKvbdEvZPoljF +DoCkKvbdLFfICBRV +EOcLKvbdZRNFJNFR +EPDKjvbdpedFUWBI +EPDKjvbdVwJYVceH +DoCjjvbdGYtuBDwb +DoCjjvbdVYgtZjoO +DncKjvbdQccApQcr +EOcLKvbdWWiYWDdg +DncKjvbdyTOJNSBg +DnbjjvbdbAueFpQX +DnbkKvbdiUydwSUb +DoDKjvbdKVtfDeHJ +DoDKjvbdEObjkXCd +EOcKjvbdqlyjYlHi +EOcKjvbdfRaWzlCo +EObjjvbdRWmcblID +DoDLKvbdCDpAvKMf +DncLKvbdmuVZjjSG +EPDLKvbdkaMnmALA +EPCkKvbdcSbkTdKB +DnbjjvbdZtJIyESn +EPCkKvbdQvmccMHc +DncLKvbdfHjvRmpg +DoCjjvbdVvhwvEEg +EPCjjvbdXrkaNTnx +DnbkKvbdGFirNiUR +EObkKvbdZLrDsnLm +EObkKvbdySnJNRbH +DncKjvbdaMkBsUmH +EPCkKvbdqGEFUWBI +EObjjvbdmajXYOnV +DnbkKvbdHELWKBjK +EPDKjvbdWSOYCFLc +DncLKvbdehKurNqH +EPDLKvbdSZjIScWA +DncKjvbdZQldiNEq +DncLKvbdVwIwvEEg +DnbjjvbdauCGxKsh +DnbkKvbdKefHbApu +DoCkKvbdssSTYyeD +DnbjjvbdSPsgJfEX +DoCkKvbdeKKRvUzn +DoDLKvbdiMEcnVCy +DoDLKvbdoAKzsgcn +DoDKjvbdDoDKjvbd +DncKjvbdFWYopMie +EPDLKvbdRNXaxmtz +EOcLKvbdKefHaaRV +EPDKjvbderAvzkbo +EObjjvbdzoQREcMY +DnbkKvbdijFgjMwr +EObjjvbdhbObdvqR +EPCkKvbdySmiMqbH +EObkKvbdyzeOSIIh +DnbkKvbdjcLkRHUg +DoDLKvbdJpydoGNe +DoDKjvbdwXMBWBWV +EObkKvbdsBfMkgKy +DnbkKvbdYkqdTnMN +EPCjjvbdEPDLLWbd +EObkKvbdDwxLtUUM +DncKjvbdNrtVgFUp +EPDKjvbdZQleJNFR +EPDKjvbdJKEAKPfd +DnbjjvbdhgKCxvJu +EObkKvbdLAkHMbXq +EPDKjvbdhancEvqR +DoCjjvbdNsUWHEuQ +DnbkKvbdZjTHofaf +EPCjjvbdrDdiQOVa +EPDKjvbdkMbLzEgP +EPCkKvbdZoOJFEyj +EPCkKvbdADRxJyhp +EObjjvbdaSGCgsfL +DnbjjvbdJbjDQibx +EPCjjvbdpfEEtWBI +EOcLKvbdZxdJmblS +EPCkKvbdRpTgKGEX +DoCjjvbdzRPNIiwA +EObkKvbdzoPpeClY +EObjjvbdeFOrBwDK +DoCkKvbdOTTvHEtp +DnbjjvbdGQATWgFy +EPCjjvbdEvZQQNJe +EObkKvbdjvWnECYX +DoDLKvbdyTOIlqag +DnbkKvbdEASJNZvw +EOcKjvbdsZkosBHn +DoDLKvbdtSqsYyeD +DncKjvbdqlyixkgi +EPCjjvbdTppnuVHm +DncKjvbdatbHYKsh +DoCkKvbduVmwjQsA +EPCkKvbdvAcxsOeI +EObkKvbdRjyFuHLT +EObjjvbdTukoitAq +EOcLKvbdkySqrxft +EObjjvbdQccBPpdS +DoDKjvbdffLzNfgA +DoDKjvbdiCOcEvqR +DncKjvbdIBkzEzAD +EObjjvbdVZHsyjoO +EOcLKvbdZoNheEzK +DnbkKvbdsZkpTAhO +DnbjjvbdqFdEtVaI +DnbkKvbdIGfzZXwg +EPDLKvbdlrZVZsEJ +EObjjvbdBcpAvJmG +DnbjjvbdtSqsYzFD +EPDLKvbdJJdAJogE +DncKjvbdxVMdpyMO +EPCjjvbdQwOEDLhD +DoCjjvbdmgFXmNgZ +DoDLKvbdjEkGuPAO +EPCjjvbdACrXjZiQ +DoCjjvbdZMRdTmlN +DncLKvbdiLeDnVDZ +EObjjvbdVAaprpqy +DoDLKvbdRjyFuGjs +DnbjjvbdVAbQrprZ +EObkKvbdSZjHrcWA +EPDKjvbdVrOYBeMD +EPDLKvbdDwxMUTsl +EPDKjvbdRadElIxk +DnbjjvbdmozZWKyC +DoDLKvbdptTgRrKt +EPCjjvbdatagXkUI +DncLKvbdZLqcsnMN +DoDLKvbdfNFwGmJk +EObkKvbdqTsfrSKt +DncLKvbdZjTHpGbG +DoCjjvbduWNwipsA +EPDKjvbdauCGwkTh +DncLKvbdKVuGEFGi +EObjjvbdZirhPfaf +DoDKjvbdxKvcgzyf +DnbkKvbdxsNhlrCH +DoCkKvbdBsBDUGWr +DncKjvbdfMfXHNJk +DnbjjvbdOSsugFVQ +DncKjvbdZisIPfaf +DnbjjvbdZHXEAOsJ +DnbjjvbdLZRJrzuG +EObkKvbdwuNFQxlO +DncKjvbddxZtURez +EPCkKvbdxrmiNSCH +DoDKjvbdiUydwSVC +EObjjvbdiifIJlwr +DncLKvbdssSSxyeD +EPDKjvbdOEcsiJLE +EOcKjvbdySnIlrBg +EPCkKvbddZyQYZRC +DnbjjvbdWXJXudEg +DoDLKvbdKaLHNCXq +DoDKjvbdGGKRmiTq +DnbkKvbdlrYtyrdJ +EPDKjvbdhtzEvrVC +EObkKvbddZyQYYqC +DoDLKvbdhaoCdwRR +EPCkKvbdxLWdHzyf +DoDKjvbdySmhmRbH +DnbkKvbdZLqcsmlN +EObjjvbdZtJIxdTO +DoDKjvbdDwwksssl +EPDKjvbdFyVVAdXb +DoCkKvbdUtNUFkvK +EPDLKvbdxmsIXsIc +EPDLKvbdUsmUFkuj +EOcKjvbdGKdsDHlu +EOcKjvbdACqwjZiQ +EPDKjvbdFpASwHGZ +DoCkKvbdGZUtaDxC +DncKjvbdmSZVZsEJ +DoCjjvbdJbicRKCx +DncLKvbdTvMQJsaR +DoCjjvbdNeDtJJKd +EPCjjvbdnPzYvKxb +DoDLKvbdyTNhlrCH +EPDKjvbdRosgJecw +EObkKvbdTAEiICOd +EOcKjvbdapHHDkzd +DoCkKvbdjlakzFGo +DncLKvbdrpWPJbuf +DnbjjvbdNQXqVnHT +EOcLKvbdkNCLzFHP +EObjjvbdTukpKTaR +EOcLKvbdEuxpPlie +EPCkKvbdJuuFdFHJ +EPDKjvbdGGJqmiTq +DnbjjvbdOAIrtJrA +DnbjjvbdelfWgNKL +EObkKvbdhbOcEwRR +DncLKvbdqiAKFNPF +DncKjvbdVqnYCFMD +DoDLKvbdWHxWXgYz +EOcLKvbdNVTSKmAX +EPDKjvbduaDySndh +DnbkKvbdiifIJlxS +EPDKjvbdeATpmYJf +DncLKvbduCcVWuoP +EPCjjvbdhficYvJu +DncKjvbdehLVqnQg +EPCkKvbdrDeJPmua +DoCjjvbdTfzmlWue +DncKjvbdZoNiFEyj +DoDLKvbdxmsHxSiD +EObkKvbdVwJYVdFH +EPCjjvbduMXwBUBX +DnbkKvbdTqROuVIN +EPCjjvbdGKeTCglu +EPDLKvbdcyyPwxpb +EPDLKvbdQmXayOUz +EPDLKvbdZyDinCkr +EPDLKvbdZoNheEyj +DncLKvbdmfdxMnGy +DnbkKvbdkClLRGuH +DncLKvbdJXsbIMQp +DnbjjvbdjJegilxS +DoCkKvbdnPyxukZC +EPDKjvbdZMRcsnLm +DoCkKvbdHffzYxYH +DnbkKvbdbsDLTcjB +DoDLKvbdSwjlNzjx +DncKjvbdkaMnmALA +DncLKvbdqmZjZLhJ +DoDKjvbdqrUkNkBN +DncLKvbdmfeXmOGy +EPCjjvbdZMRdTmlN +DnbkKvbdypnlhjXA +EPDLKvbdyOTHxTJD +EObjjvbdMRwMzVQz +EPCjjvbdSCDeMIxk +EObjjvbdOXnuzdOU +EPDKjvbdOStWHFVQ +DoDLKvbdrzLpTAgn +DnbkKvbdULuoAvPJ +EPDKjvbdZxdKODMS +EOcKjvbdbAvEfPpX +DncKjvbdyOSgwriD +EPDLKvbdrJAJdmPF +EPDLKvbdauCGxKtI +DncLKvbdqrVLOLAm +EPDKjvbdkHgLfFmk +DncKjvbdUaCRSqSZ +DnbkKvbdbQGgELzd +EOcKjvbdcJMijfXY +EPCkKvbdeOeTLUTr +EOcKjvbdQmYByNtz +EPDLKvbdFxuVBDwb +EOcKjvbdGGJrNiUR +DoDKjvbddndsLTtS +EOcLKvbddZyPxYqC +EPCkKvbdSKxfVHLT +EOcKjvbdSCDdkiYk +DnbjjvbdtvNwjQsA +EOcKjvbdJXsbILqQ +EObjjvbdjcLkRHVH +EObjjvbdkCkkQgUg +DoCjjvbdTqQnttgm +EPCkKvbdEuyPoljF +DoCkKvbdTqQnuUgm +DoDLKvbdLrWlzVQz +EPCjjvbdRjyGVGkT +DoDLKvbdHEKvKBjK +DoCjjvbdnCJvxOnV +EObkKvbdptUGrRkU +EPDKjvbdQwNcblID +DoCjjvbdIidAKPgE +DoCjjvbdTYLMNzkY +DnbjjvbdEztRFMCi +EObkKvbdBhkCLJGK +EPDLKvbdZisHpGbG +EPDLKvbddePRbXDK +EObkKvbdUQpntuIN +EObjjvbdEPCjjvcE +DncKjvbdbiNJjewY +EPDLKvbdVrOYCElD +EPCkKvbdSBdElIyL +DoDLKvbdzjVQQETU +DoCjjvbdCDpAvKNG +EObkKvbdNHComPuL +EOcKjvbdGdKvJaij +DnbkKvbdqmZjYkgi +DncKjvbdQvnEClID +DncLKvbdWWiXudFH +DoDLKvbdCEQBWJlf +DncKjvbdMpXqWOGs +EPDKjvbdVBCRSqRy +EPDLKvbdqUTgSRjt +EOcLKvbdJXtCHkqQ +EObkKvbdBiLBkJFj +EOcLKvbdVvhwvEEg +EOcKjvbdCTBCsewS +EOcKjvbdyNsHwriD +DoDKjvbdwzHfFxEr +DnbjjvbdypoMiJwA +DoCjjvbdJbicQjCx +EOcLKvbdVUMsekuj +EOcKjvbdCEQBWJlf +EObjjvbdIjEAKQGd +DoCjjvbdDjIJvXjA +DoDLKvbdFyUuAdYC +DncLKvbdRotGiedX +DoCjjvbdBhkBjhej +EOcKjvbdBhkCKhfK +EPCkKvbdLFfHbBRV +DoCkKvbdNUrrLNAX +EOcKjvbdZoOIeEzK +EPCjjvbdkMbMZeHP +DoCjjvbdkVwNdBxX +EPCkKvbdNddThiKd +DnbjjvbdjcLkQftg +DnbkKvbdFkErcHmV +DnbjjvbdqGEEtWAh +DncKjvbdmSYuZsEJ +DoCjjvbdUsmTfMWK +DoCkKvbdVUMtFkvK +EOcKjvbdKfGICBRV +DnbkKvbdMSWlzUpz +EOcLKvbdVBBprpqy +EPCjjvbdnHEwmNgZ +DoCkKvbdeEoRawDK +DnbkKvbdpssgSSLU +DncKjvbdOSsugFUp +DnbkKvbdwzHfGYFS +DoCjjvbdTAEiHbPE +EObkKvbdKaLGmCXq +DnbkKvbdCWzciFQW +DncLKvbdnVVZjiqf +EPCjjvbdOStWHEtp +DoDKjvbdkIGkfFmk +DoDKjvbdZjTIPfbG +EOcKjvbdXsMAlsnx +DnbjjvbdILazmwRL +EOcKjvbdrDdiPmvB +EPDKjvbdiUzEwRuC +EOcKjvbdqAheAXHd +EPCjjvbdRyigsCvA +DoCjjvbdpyOggQcx +EPCkKvbdZyDjNblS +DncLKvbdFejSNiTq +EPDKjvbdzRPNIjXA +DncLKvbdaMkBsVMg +EObkKvbdLYqJrzuG +DncKjvbdsBfNMHLZ +EPDKjvbdjgflFfOL +DoDKjvbdCTAcUGWr +DnbjjvbdSLZGVGkT +DoCkKvbdZQmEhldq +EPDKjvbdUsmTfMWK +DoCjjvbdKefICBRV +EPCjjvbdZMSDsnMN +EObkKvbdwzIGGXdr +EObjjvbdrRtjnLAm +EPDKjvbdXrlAmTnx +EPCjjvbdZtJJZETO +DnbjjvbdieLGtoAO +DnbkKvbdnCJvxPOV +EPDKjvbdjKFgjNYS +DoCkKvbdlhcspuRa +EPDKjvbdbAvEfQPw +EOcLKvbdiGjDYuiu +DncKjvbdnQZxvLZC +DoDLKvbdaogHDkzd +DnbjjvbdMfcQMouL +DncKjvbdKaKgMbYR +DncKjvbdrbGNMHKy +DoCkKvbddoFSjtUS +EPDLKvbdNddTiIjd +EPDKjvbdhgKDZViu +EPDLKvbdkMbLzEfo +DoDKjvbdjmCMZdfo +DoDKjvbdSCDeLhyL +DoCkKvbdQwODcMID +DnbkKvbdgGLymgHA +EPDKjvbdWIYVwfxz +DnbkKvbdZLqdUNkm +DoCkKvbdYlSETmkm +DnbkKvbdLqvlyuQz +DnbkKvbdZRMdiMdq +EOcLKvbddePSCXCj +EPDLKvbdRacdkiYk +DnbjjvbdZisIQGbG +EObjjvbdrpVnibvG +DncLKvbdIxUCHlRQ +EPCkKvbdhuZeXRtb +DnbjjvbdQwODblID +DoDKjvbdezuyEhsw +DncKjvbdiLddNtcZ +EPCkKvbdiLeENtby +DnbjjvbdxKvcgzzG +EPDLKvbdRXNdClID +DncLKvbdEKHjVwjA +EOcLKvbdzoPqFCkx +DoDLKvbdliEURUqa +DoCjjvbdyOTIYTJD +DncLKvbdIHGyyXwg +EPCjjvbdShyjRABM +DoCkKvbdnPyyWLYb +EObjjvbdsPvPJcVf +EPDKjvbdTXjlNzjx +DoDKjvbddneTLUUS +EOcKjvbdmuUyjiqf +DncKjvbdZoOIddzK +DoCjjvbdpyOhGqEY +DoCkKvbdwjwDgzyf +DnbkKvbdxZgeexEr +EOcLKvbdHDjvKCKK +DoCkKvbdpxnhHQdY +DoDLKvbdLrWlzUpz +EPDKjvbdatbHXkTh +DoDLKvbdZyDinDLr +EPCjjvbdGGJqnJTq +DoDKjvbddneTLTsr +DncLKvbdyzdmqhJI +EObkKvbdRjxfVGkT +EPDKjvbdOAJTTirA +EPCjjvbdZoNiFEzK +DnbjjvbdOhAXyAYa +DnbjjvbdACqwizIp +DoDLKvbdcImJjevx +EPDLKvbdxmrhYTIc +DoDLKvbdjcLkRGuH +EPCkKvbdxVNEpxlO +EPCkKvbdKCibqJbx +DoCkKvbdjJfIKMxS +DoDLKvbdVYhUZjoO +EPDLKvbdrJAKEmPF +EOcLKvbdRDbaQRDr +DoCkKvbduWOXiqTA +DoCjjvbdZyDjNcLr +EObjjvbdbBWEeoow +EPDLKvbdUQpnttgm +EOcKjvbdlBNOmALA +DnbjjvbdSPsfiecw +DnbjjvbdwzIGGYFS +EOcKjvbdLGFgaaRV +EOcKjvbdrXQLcJYq +DnbkKvbdmbKXYPOV +DoCkKvbdZisHogCG +EPCkKvbdFVyPpMjF +EOcKjvbdYkrDsmkm +DoDKjvbdxUmEqYlO +EPDKjvbdKNAEZgUa +DoDLKvbdqZPIGpcx +DoCjjvbdMgComPtk +EObjjvbdUyHszKoO +DoCkKvbdeEnqavcK +EPDKjvbdqYoIGqEY +DoDLKvbdCDoaWJmG +EPDLKvbdlZSrTZHU +EPCkKvbdZxcinDMS +DoCkKvbdgFkzNfgA +EOcKjvbdYNqAXtvU +EObjjvbdwygefYEr +EPCkKvbdbBVdfQQX +DnbkKvbdqrVLOLAm +EOcKjvbdFjeTDINV +DnbjjvbdnHFYMnGy +EPCjjvbdrbFllHKy +EPCjjvbdZLrDtOMN +EPDLKvbdcJNKKfWx +DoCjjvbdraemMHLZ +DoDKjvbdeJjSWUzn +EPCkKvbdZnmiEdyj +DnbjjvbdwtleQxlO +DnbkKvbdDwwlUTtM +DoDKjvbdrWpMDJZR +EOcKjvbdegkVrORH +EPCkKvbdiCOcFWqR +DnbkKvbdBsBDTevr +DoCjjvbdjcLjpfuH +DnbjjvbdZxdKODLr +DoCjjvbdqceIpOVa +DoDLKvbdVvhxVceH +EObkKvbdsrqryZdc +DnbkKvbdMSWlytpz +DoDLKvbdqTsfqrKt +EPCjjvbdjKGIKNYS +EOcLKvbdiGibxvKV +EPCjjvbdKDKCpibx +EPDKjvbdQdDBPqDr +DncKjvbdozmdLYPA +DoCkKvbdTvLojUAq +DnbkKvbdbhmKLFwY +EPDKjvbdCIjbLIej +DncKjvbdkHfkeenL +DoDKjvbdtAGqIABS +EPCjjvbdRosfjFdX +EOcKjvbdraemLgLZ +DnbkKvbdxmrgxTIc +DoCkKvbdOAJStJrA +EPCjjvbdqYngfpdY +EPDLKvbdBvzdJEov +DoDKjvbdrDeIpOWB +EObjjvbdqUTfrSKt +EOcKjvbdxnShXsIc +DoDKjvbdEzsqFLcJ +EObjjvbdDxYMUUUM +EOcKjvbdjKFhKNYS +EOcKjvbdjgflGFmk +DoCkKvbdGGKRnItR +EPCkKvbdREDApRDr +EOcLKvbdNQYRWOHT +EPCjjvbdxmrgwriD +DncLKvbdbsCjsdJa +EOcKjvbdypoNIiwA +DncKjvbdZoOJFEyj +DoCjjvbdrbGMkgKy +EPDKjvbdyTNiNSBg +DoCjjvbdczZPwyQb +DoDKjvbdWfZZtAOs +EPDKjvbdznoqFClY +DncKjvbdTlVoBVoJ +EPCkKvbdIxUBhMRQ +DoCkKvbdZQmEiNEq +DoDKjvbdnVUykKRf +DnbjjvbdUtMtFlWK +EObjjvbdOTUVfeUp +DoCjjvbdZMSEUOMN +DoCjjvbdwjwDgzzG +DoDKjvbdYqNEiNFR +DoDLKvbdqiAKEmOe +EPDLKvbdfNGXHNJk +DnbjjvbdCEQBVjMf +EObkKvbdqUUGrRjt +DnbkKvbdjmCLyeHP +DnbjjvbdcJMikFwY +EPCjjvbdjuwNdBxX +DoCkKvbdeqaWzkbo +DncKjvbdTkvOaVoJ +DoDKjvbdZoOIeEzK +DoDLKvbdKDKDRKDY +DncLKvbdqwQMDJYq +EObkKvbdKeegbBRV +EPDKjvbdegjuqnRH +DoDKjvbdxwhjBpZk +EObjjvbdziuQPdSt +EPCjjvbdZyEKOCkr +EPCjjvbdRWmdCkhD +EOcLKvbdQcbaQRES +DncLKvbdIrxaTNYM +DnbjjvbdGFiqmiTq +DoCjjvbdZeXfzghb +DoCjjvbdSLZFuGkT +EPDKjvbdIryBSmYM +EOcLKvbdRyjHsCvA +EPDKjvbdzoPqFCkx +EPDLKvbdFeirOIsq +EObkKvbdLiBkpxAS +DoCjjvbdmuUyjirG +EOcKjvbdpfDeTuaI +DncLKvbdtSqsYyeD +EOcLKvbdAMhYrwZx +EOcKjvbdJSyAsNYM +DncLKvbddneTLTsr +EPDLKvbdANIYsWyx +EObkKvbdRXODblHc +DoCkKvbdYzcGRjWZ +DoDLKvbdkHgLfFnL +DoCkKvbdpyPIGqDx +EObkKvbdwuNEpxkn +DoDLKvbdJSxaTNYM +DoDLKvbdRNXbZOUz +DnbjjvbdNHDPlpUk +EObjjvbdKQzFPFnF +EOcKjvbdwkWdHzzG +EObkKvbdiCPCdvpq +EPCkKvbdwzHfFwdr +DoDLKvbdwuMeQxkn +DoDLKvbdmoyxujyC +DncLKvbdyYJKBoyk +EOcKjvbdhgJbxujV +EOcKjvbdvAcySndh +EPCjjvbdOYPVzcmt +DncKjvbderBWzlCo +DncLKvbdEuxoolie +DoDLKvbdUsmTelVj +DoCkKvbdcImKKfXY +EPCkKvbdKDJcRJcY +DoDLKvbdfILWSOQg +DoDLKvbdtcDVWuno +DoDKjvbdegjvSNpg +DncKjvbdjvXOEBxX +DncKjvbdvOszpjoU +EOcLKvbdkIGkfFnL +EPDKjvbdZxcinCkr +EOcKjvbdNxPVzcnU +DnbkKvbdNrsvHEtp +DnbjjvbdwygefXeS +EObkKvbdnHEwmOGy +EObkKvbdZRNFIleR +DoCjjvbdNHColotk +EPDKjvbdTkuoBVni +EObkKvbdkHgLfGNk +DoCkKvbdVvhxWEEg +EOcLKvbdtbcVWvOo +DoDKjvbdULvOaWOi +EObkKvbdNdcsiJLE +DoDLKvbdOYPVzdNt +DoCkKvbdNeDsiJLE +EOcLKvbdXGYytAOs +EOcKjvbdcIljLGWx +DoDKjvbdIMBzmwQk +EPDKjvbdbrcKscjB +DoCjjvbdqdEhpOWB +DnbjjvbdzoPqFClY +DnbjjvbdKDKCqJcY +EPDLKvbdZRNEhldq +DncLKvbddZyQXyRC +DncLKvbdRzKHrcWA +EObkKvbdTAFIgbPE +EObjjvbdwtmFRYkn +DoDLKvbdCTAbtFwS +EObjjvbdJzpFwdAN +DoCjjvbdCTAbsevr +EObjjvbdyzdmrIIh +DnbkKvbdANIZTXZx +EPCkKvbdVwJXvDeH +DncKjvbdmfdwlnHZ +DoCjjvbdZirhPfaf +EPCkKvbdiHJcYvJu +DnbjjvbdRMxCYmtz +EPDLKvbdZHWdAPSi +DnbjjvbdWSNxBdkc +DoDKjvbdNxPVzdNt +EObjjvbddePRawDK +DncKjvbdaSGCgtGL +DncKjvbddoFSjstS +DnbjjvbdOFETiJLE +DoDLKvbdeAUQmYJf +EObjjvbdZshiZESn +EPCjjvbdVwIwvEFH +DnbkKvbdKDKDQjDY +EPDLKvbdRbEFMJZL +DoDKjvbdiZuGLpnG +DoCjjvbdqGEEtWAh +DnbjjvbdnBiwYPNu +DnbjjvbdtlXwBTaX +DoCjjvbdqYoHfqEY +EPCkKvbdIsZArmXl +DoDLKvbdmfeYNNgZ +DoCkKvbdrafNLgKy +DnbkKvbdYfwEAOsJ +DoDLKvbdrEFIonWB +EPCjjvbdRXODcMID +EPCjjvbdZisIPfbG +DncKjvbdoAKzshEO +EOcLKvbdNQXqVmfs +DnbkKvbddoEsKssr +EPDKjvbdNeETiJLE +EPCkKvbdVgwvXfxz +EOcKjvbdIsZBTNXl +EObkKvbdFeirOJUR +EPCjjvbdVAbRSpqy +DnbjjvbdeXyssqez +EPDLKvbdZGwEAOri +DoCkKvbdVAaqSqRy +DoDLKvbdiVZeWrVC +EPDKjvbdGYuUaDwb +DncLKvbdLrXMyuQz +EPDKjvbdGZUtaEXb +EOcLKvbdzoQRFDLx +EPCkKvbdTAFJICOd +EPDKjvbdNPxRVmfs +DoCjjvbdauBfxKsh +DncLKvbdMIbLpxAS +DoCkKvbdmgEwmNfy +DoDLKvbdhanbdvqR +DoCkKvbdSLYfUfjs +DoCjjvbdTvMQJsaR +DnbkKvbdlhcspuRa +DnbjjvbdJSyBSlxM +EPCjjvbdSLZFuHLT +DoCkKvbdYTLaNUPY +EObjjvbdFeiqnJUR +EPDKjvbdYlRctNkm +EOcKjvbdHDjvJaij +DnbkKvbdnCJvwnnV +DoCjjvbdNHDPlouL +DncLKvbdWXIxWDdg +DoCkKvbdJSyAsMwl +EObkKvbdxmrhXriD +DnbkKvbdJzpGYEAN +EOcLKvbdddnqawDK +EOcLKvbdhyuFkpnG +DnbkKvbdtAHQhABS +DoCjjvbdjhGlFemk +DncLKvbdjJehJmXr +EPDLKvbdHffyyXwg +DoCkKvbdRbEFLiZL +DoCjjvbddePSBwCj +EPDKjvbdeOeTKtUS +DnbjjvbdrDeIomvB +DnbjjvbdVZIUZjoO +EPDKjvbdxmsIYTIc +EPCjjvbdDnbkLXDE +DnbkKvbdYlSDtNlN +EObkKvbdeFPSBvbj +EPCkKvbdkDMKpgUg +DoCkKvbdbKlGPODA +EObjjvbdGdLVjCKK +EPCkKvbdkCkjqGuH +EOcLKvbdqYngfpcx +EPDLKvbdeKJqvUzn +DoCkKvbdkIHMGGOL +DncKjvbdDoDKkXDE +EPCkKvbdsCGNMHLZ +EOcKjvbdyzeNqhJI +DnbjjvbdqwQLbhxq +EObjjvbdaaWEepPw +EObjjvbdDxXktUTl +DnbjjvbddwzTtRez +DnbjjvbdKQyeOfNe +EPDKjvbdbBVdepPw +DncLKvbdfSAvzkbo +DoDKjvbdqYoIHQcx +DoCkKvbdeEnrBwCj +DncKjvbdehLVqnRH +EPDLKvbdhfjDYuiu +EPCkKvbdvmWANEEm +EPCkKvbdZRNEiNFR +EOcLKvbdCSaCtGXS +DoDKjvbdbhljKevx +DoDKjvbdbBVdepQX +DncLKvbdqTsfrSKt +EPDKjvbdjEjgVPAO +DoCjjvbdFeiqmiTq +EObjjvbdcImJkGXY +EObjjvbdJbjCqJcY +DnbkKvbdjcLjpftg +EPDLKvbdWXJYWEEg +DoDKjvbdznpREbkx +EObjjvbdfILVqmqH +DnbkKvbdxwiKCQZk +EPDLKvbdOEdUJIjd +DnbkKvbdsCFmLgKy +DncKjvbdijFhKMxS +EPCjjvbdzitpQDrt +EPCkKvbdZQleImEq +DoDKjvbdZxdKNcLr +DncKjvbdGdLVjCKK +EOcKjvbdhzUfLpnG +DncLKvbdwzHfGYEr +EObjjvbdEObjjvcE +EOcLKvbdfHkVqmpg +DnbjjvbdXnRAXuVt +EOcLKvbdeFOrBwDK +EPCjjvbdzitoocsU +EPDKjvbdZxdJmblS +EObjjvbdFjeScHlu +DoDKjvbdjhGkfFmk +EOcLKvbduDDVXWPP +EPDLKvbdJYUCHkpp +EPCkKvbdkClKpgVH +EObkKvbdJcKCqJbx +DncKjvbdEXwlUTsl +EObkKvbdxwiJbPzL +DncLKvbdHDjujCKK +DnbkKvbdEuyQQMie +EPCkKvbdUaBpsRSZ +EPCkKvbddoFTKstS +EPCjjvbduaEYsOeI +DoDLKvbdcTDKscjB +DncLKvbdNdcshiKd +DnbjjvbdWSOYCEkc +EOcKjvbdZnmiEdzK +EPDKjvbdUQpnttgm +DoCjjvbdnGdwmOGy +DoCkKvbdZyDjNblS +EOcKjvbdShyjRAAl +DncKjvbdTkvOaWPJ +DoDKjvbdOEcsiJKd +DncKjvbdbVBfxKtI +EPCkKvbdrafNLfjy +DoDKjvbduaEZTOeI +DncLKvbdGGKSNhtR +EPCjjvbdnBjWxOmu +EObkKvbdKefICBRV +DncKjvbdZoNheFZj +DnbkKvbdEOcKkWbd +EPDKjvbdNGcPmQUk +EObkKvbdaMjbStlg +DnbkKvbdJYTbIMRQ +DncLKvbdJXsahLpp +DncKjvbddeOrBvbj +DoDLKvbdJSyAsMwl +EPCkKvbdZdwfzhJC +DoCjjvbduDDVWuno +DnbjjvbdEztQdkbi +EOcLKvbdUyHsykOn +EObjjvbdDjHivYKA +DoDLKvbdnUtzLKSG +DncLKvbdSLZFuGkT +DoDKjvbdlYrrTZGt +EOcLKvbdqUUGqrKt +EPDLKvbdEPCjjvcE +EPDKjvbddxZtTrFz +EObkKvbdlYrqrxgU +DoCjjvbdauCGwjtI +DnbjjvbdQZNAHTRj +DoDKjvbdMoxRVmfs +DncLKvbdOTTvGeUp +DncKjvbdcJNKKewY +DoDKjvbdmuVZjjSG +EPDKjvbdUWLpKUAq +EOcLKvbdSLZGVGjs +EObjjvbdCIjakJGK +EPDLKvbdZnmhddyj +EOcKjvbdLBKgMaxR +EOcLKvbdDjHjVwjA +DnbkKvbdYlRcsnLm +DoCjjvbdrRuKnKaN +EPCkKvbdptUHSSLU +DncLKvbdYpmEiNFR +EObkKvbdMIalQxAS +DnbjjvbdJuteceHJ +DncLKvbdFWYpPlie +EPCkKvbdmgFYMmgZ +DoCjjvbdmbJvxOnV +DncKjvbdIGfzZYXg +EPDLKvbdqTtGqrLU +EPCjjvbdWRmwbElD +EPDLKvbdGLErcIMu +EPDLKvbdwygefYEr +EPDKjvbdrSUkOLBN +DoCkKvbdNQYQumfs +DoCkKvbdRjyGVGjs +EPDKjvbdmajXXoOV +DncKjvbdIGgZxwwg +DnbkKvbdxwiJapZk +DoDKjvbdYqMdhleR +EOcLKvbdZtJIxdSn +EPDLKvbdTIzKRABM +EPDKjvbdCEPaWJlf +EOcLKvbdjgflFfOL +EPCjjvbdZjShQGbG +DoDLKvbdHDjvJbKK +EOcLKvbdBiKbLIfK +DncLKvbdiHJbxujV +EObkKvbdKeehBaQu +EPDLKvbdYSlBMsnx +EObkKvbdmJDsptrB +DoDKjvbdTkuoAvPJ +EPDKjvbdZyEJnDLr +EPCkKvbdZoNhddyj +EPDKjvbdVZHsykOn +DnbkKvbdjJegjNYS +DoDLKvbdtcCtwVno +EOcKjvbdkIHLefOL +EOcKjvbdYkqdTnLm +DnbkKvbdiZuGMQmf +DoCjjvbdZLrDsnLm +DoCjjvbdDwwktTsl +EObjjvbdRzKHrbvA +DoDKjvbdQlwaxnUz +EObkKvbdyTOImRag +EPCjjvbdQmYByOUz +EObjjvbdbrbkUDjB +DoDLKvbdGYtuAcwb +DncLKvbdePFSjssr +DoDKjvbdRbDdlIxk +DoDKjvbdwzIGGXeS +EPCjjvbdOTUVgEuQ +EPCkKvbdemGWfmJk +EOcLKvbdZQmEhmEq +DoCjjvbdZRMeJNFR +DoCjjvbdvBEZSoEh +DncLKvbdhlFDnVDZ +DoCjjvbdJJdAKPfd +EObjjvbdyYJKCQZk +EObjjvbdRzKITCvA +EPCjjvbdUMVnaWPJ +DoCjjvbdNddThhjd +EOcKjvbdNPwpvOHT +DnbjjvbdZisHpHCG +EObkKvbdGLFScINV +EOcLKvbdbsDLTdJa +EObjjvbdbhlijfWx +DoDLKvbdVZHszLPO +EObjjvbdZnnJFEyj +DoDKjvbdeOeSkTtS +DoDLKvbdkCkjpgUg +EPCjjvbdFejRnJUR +DoCjjvbdZsiIyDrn +DoDLKvbdtunYJqTA +DnbkKvbdoznELXoA +DoCjjvbdZtIiYcsO +EOcLKvbdGGKSOJUR +DoCjjvbdUMWPAuni +DnbkKvbdEPDKkWbd +EPCkKvbdUxhTzLPO +DoDKjvbdGdKvKBij +DncKjvbdmSZUzSci +EPCjjvbdZjShQGaf +DncLKvbdWRmxCElD +EPDLKvbdqvpMDIyR +DncKjvbdCJKakIfK +EPDKjvbdHELWJbKK +DoDKjvbdjlbLzFGo +EPCjjvbdTkvPBWOi +DoCkKvbdJvVGEFGi +EOcLKvbdUyHszLPO +EObjjvbdVBBpsQqy +DnbkKvbdZdxGzhIb +DnbjjvbdsPvOicVf +DoDKjvbdtcCtwWPP +EOcLKvbdwtmFRYkn +EPDKjvbdegjvSNqH +DoDKjvbdIxUBglQp +EOcLKvbdBcpAvKNG +DnbjjvbdwXMAvAvV +DnbkKvbddoEsLUUS +DncKjvbdCIkCKiGK +DoDKjvbdlZTSTYft +EPCjjvbddoEsKtTr +EObjjvbdFfJrOJTq +EPDLKvbdliDsqVSB +DncLKvbdbUagXjtI +EObkKvbdIsYaSlxM +EPCjjvbdHkaznXRL +DnbkKvbdxUmFQyMO +DoCjjvbdWWiXvDdg +EPCjjvbdSQUHKFcw +EPDLKvbdjKGIJlwr +EOcKjvbdXFxytAOs +DncKjvbdmbKWwoNu +EObjjvbdiZuFkpmf +DoCjjvbdFyVVBDwb +DnbjjvbdeqaWzlDP +EPCjjvbdRyjHsDWA +DnbkKvbdqlzJyMHi +DnbkKvbdZRNFImFR +DoCkKvbdYfwEAPSi +DoCjjvbdOAIrsjSA +EPCkKvbdaNLCTVMg +DnbjjvbdqceIomvB +DnbjjvbdsCFlkgLZ +DoDLKvbdmIdURUqa +EOcKjvbdZshhxcrn +DoDKjvbdZjTIPgCG +DncKjvbdemGWfmJk +DnbjjvbdACqxKZiQ +EObkKvbdkVvnEBxX +DncLKvbdUtNTfMWK +EPDLKvbduaDxsPFI +EObkKvbdgQBzvcxI +EObkKvbdSZihTDWA +EOcLKvbdqYnggREY +EPDKjvbdqiAJdmPF +EOcLKvbdiGjDZVjV +EOcLKvbdGZVVAdXb +DoDKjvbdhfjCxuiu +DnbkKvbduMYXBTaX +DoCkKvbdjSziTKiz +DoDKjvbdqlzKZMIJ +DnbjjvbdkVwOEBxX +DoCjjvbddtAUASmW +DoDLKvbdzjVQQESt +EOcLKvbdkySrSyHU +DncLKvbdNGbolotk +DnbjjvbddeOrBwCj +DoDLKvbdiLdcmuDZ +DoDKjvbdSPsfjFdX +DoCkKvbdbUafxKtI +DnbkKvbdcJNJkFvx +EObjjvbdFejSNiUR +EPDKjvbdQmYCYmtz +DncKjvbdfVzwpJzs +EPDKjvbdWRmwbEkc +DncLKvbdFkEsDIMu +DoCjjvbdQccBPqES +EObkKvbdKCibpjCx +EOcKjvbdLBLHNBwq +DoCkKvbdUMWOaVoJ +DoCjjvbdrbFmMGjy +EOcLKvbdJvVFdEgJ +EPCkKvbdjhHMGFnL +DncKjvbdNxOuzcmt +EPDKjvbdEXxLstUM +DoDKjvbdwygfGXeS +EObkKvbdyTNiMrBg +DncKjvbdlZSrSxgU +EPDKjvbdJXtCHlQp +EPCkKvbddndsLTsr +EObjjvbdNdcshhkE +DncLKvbdSCDeLhyL +DncLKvbdNsTvHEuQ +EOcKjvbdACqxKZiQ +DoCjjvbdptTgRqjt +EPDKjvbdOEdTiJLE +DoDKjvbdrpVoKCvG +DnbjjvbdFjeSbhNV +EPCjjvbdNGbolouL +EPDLKvbdrEFIonVa +DnbkKvbdOFDsiIjd +DoCkKvbdTqQoUuIN +EPDKjvbdeOdsKtTr +DncKjvbdyNrhXsIc +EPDKjvbdnQZxujyC +EPCkKvbdYqMdhmFR +DncLKvbddeOrBvbj +DoCjjvbdLGFgbApu +DoCjjvbdemFwHMik +DoCkKvbdRXOEClHc +DoCkKvbdZQmEiNFR +EPCjjvbdEASIlzXX +DnbkKvbdrWokbiZR +EObkKvbdHELWKBij +DnbkKvbdbUagXkUI +EOcKjvbdbsDLUDia +EOcLKvbdUWLojUAq +DnbjjvbdQvmccMID +DoDKjvbdZxcjODMS +EPDKjvbdTulPjUBR +DncLKvbdjSzhsKiz +EOcKjvbdTAFJICOd +DnbkKvbdKNADzHVB +DoCjjvbdliDtRVSB +EObjjvbdWXIxVceH +EPCjjvbdfHkWRnQg +EObkKvbdjAQGaPgK +EObkKvbdkClLRGuH +DncLKvbdZnnIdeZj +EObjjvbdlYsRsYgU +DoDLKvbdpyPHgQcx +DnbjjvbdnPyyWKyC +EObjjvbdQwNcblID +DnbjjvbdCJKajhfK +EPDKjvbdiHKCyWKV +EObjjvbdeEoRavbj +EOcKjvbdmaivwnnV +EOcKjvbdwNWANDeN +EPDKjvbdTAFIhCPE +DoCjjvbdZQleJMeR +EPDKjvbdmtuZjiqf +DnbkKvbdEPCkLXCd +EObkKvbdqGEEsvBI +EOcKjvbdmIdTqVSB +EObjjvbdJTZBSlwl +EPCjjvbdqlzKZMIJ +EPDKjvbduCbtwWOo +EPDLKvbdnPzYukYb +EPDKjvbdeFPSBvbj +EPDLKvbdHEKvKCJj +EPDKjvbdVUNUGLuj +EOcLKvbdJuuGEEgJ +EOcKjvbdzQnmJKXA +EOcLKvbdrbGMkfjy +DnbjjvbdUsltFkuj +DnbkKvbdDxYMUUUM +DnbjjvbdUQpoUuHm +EPDKjvbdRbDdlJZL +DncLKvbdmgFXlmfy +EPCjjvbdJbibqJcY +DoCjjvbdEPDLLWcE +DoDLKvbdMJCMRYAS +DoCkKvbdQZNAGsSK +EObjjvbdiCPDFXQq +EOcLKvbdVwJXvEEg +DoDLKvbdsrqsYzFD +DncLKvbdjuvnDbXw +EPDKjvbdhgKCyWKV +DoDLKvbdNdctIiKd +EObkKvbduaEYrneI +DoCkKvbdNVSrKmAX +DncKjvbdXnRAXtvU +DoDKjvbdhkddNtcZ +DoCkKvbdiBnbdwQq +DnbkKvbdLBLGlawq +DoDKjvbdygZMANEw +DnbkKvbdZsiIxcsO +EObjjvbdiBoDEwRR +DoCjjvbdHbLzEzAD +EPCkKvbdjbkkQgVH +EOcLKvbdsBemLgLZ +EOcLKvbdptUGrRkU +EPCjjvbdznpQdbkx +DoDKjvbdGYtuAdXb +EOcKjvbdzjUpQETU +EOcLKvbdypoNIjXA +DnbkKvbdSQUHJfDw +EPCkKvbdbsCjtEKB +DoDLKvbdajlFoODA +DoDKjvbdelevfmKL +DnbkKvbdCTAbsfWr +DoDKjvbdjhGlGGNk +DoCkKvbddCTMrATm +EPDLKvbdaMjbSuMg +DoCkKvbdKaLHNCYR +DncLKvbdGGKSNiTq +DoCjjvbdLZRJrztf +EPDLKvbdjlakyeGo +EObkKvbdwuMdpyLn +DnbkKvbdegjuqnQg +EPDKjvbdtTSTYydc +EObkKvbdZyDjOClS +DnbkKvbdqGEEtWAh +EOcLKvbdKQydoFnF +EPDLKvbdqUTgSSKt +DnbjjvbdMJCMQxAS +EPCkKvbdiMFDnUby +EOcKjvbdfpBzwEXh +DoCkKvbdSBceMIxk +EObjjvbdfMevgMik +EPCjjvbdjAQHAofj +EPCjjvbdZLrETnMN +EObkKvbdDoDLLXCd +DncLKvbdSZjHsDWA +DnbjjvbdOStVgFVQ +EObkKvbdbhlijfXY +DnbkKvbdjEjftoAO +DoCjjvbdeEnrCXDK +EOcLKvbdZyEKNcMS +EPDKjvbdWSNwadkc +EPCjjvbdkDLjqHUg +DoCkKvbdSCEFLiYk +DncKjvbdtkwwBTaX +EPDKjvbdCTAbsevr +DncLKvbdmfdwlnGy +DncLKvbdTukpJtBR +DoCjjvbdlYrrTZGt +EOcKjvbdnCKWwoOV +DncKjvbdMgColpVL +EPDLKvbddwytURez +DoCkKvbdakLenmcA +EPCkKvbdQvmdCkhD +DncLKvbdEARhlzWw +EOcLKvbdrXQMDJYq +EObkKvbdmJETptrB +EOcKjvbdAMgxsXZx +EPDKjvbdULvPBVni +DoDKjvbdqGEFTvAh +DoDKjvbdGLFTChMu +DoCjjvbdLBKgNCXq +DoCjjvbdOEcsiJLE +EObjjvbdSLZFuHKs +DoCjjvbdtkxXAsaX +DnbjjvbdNGbpNQVL +EOcLKvbdiLeEOUby +EObjjvbdDoCjjwDE +EPCkKvbdxrnJMrCH +EPDKjvbdJTZBTMwl +DncKjvbdBcpBWJlf +DncLKvbdGKdsDHmV +DncLKvbdDwwlUUTl +EPDLKvbdbQHHELzd +EPDLKvbdYlSEUOLm +EObjjvbdhtyeXSUb +EPCjjvbdACqxKZiQ +EObjjvbdrDdiPmua +EPCkKvbdcyxpYYqC +EPDKjvbdrXQLbiZR +DncKjvbdjmBlZeHP +DncKjvbdlYrrTYft +EObkKvbdaaWFFpPw +DncKjvbdwyhGFwdr +EPCkKvbduLxXAtBX +EObjjvbdhancEvpq +DncLKvbdbiMjKevx +DncKjvbdTIyjRABM +DoCkKvbdcImKLFvx +DnbkKvbdZjSgpHBf +EPCkKvbdGdKvJbJj +EOcLKvbdSCDeMIyL +EOcKjvbdZxdJnClS +EOcLKvbdHDkVibJj +DoDKjvbdezuxeJTw +EOcKjvbdqFceUVaI +EPDKjvbdWIYWXfxz +DoDKjvbdNQXqWOHT +DnbkKvbdOStWHEtp +EPDKjvbdLAkGmBxR +EPDKjvbdDxXksssl +EPCkKvbdTqRPVUgm +DoDLKvbdrDdhomvB +DncLKvbdptUGrSKt +EOcKjvbdiBnbeWqR +DoDKjvbdezvYeJUX +DnbkKvbdOAJStJrA +DnbjjvbdtcCuWvPP +DnbjjvbdIjEAKPgE +EObkKvbdWWiXvEEg +DnbkKvbdSBdFMJYk +EOcKjvbdQdCaQQcr +EPDLKvbdLZRKSzuG +DoCkKvbdpfEFTuaI +DnbkKvbdVBBqSqRy +DncLKvbdMoxRVnGs +EOcLKvbduoTzqKnt +DoCjjvbdxxJKCPyk +DncLKvbdVvhwvEFH +EPDLKvbdOYPVzcnU +EOcLKvbdBdPaWJlf +DnbkKvbdJSyAsMwl +DoCkKvbdYTLaMsnx +EOcKjvbdUWLpJsaR +DoCjjvbdhbOcEwRR +DncKjvbdKfGHbAqV +DoCjjvbdlZTSSyGt +DncLKvbdatbGxLTh +EPDLKvbdiGicYvKV +EOcLKvbdTIyjRAAl +EPDKjvbdZsiIyDsO +DnbjjvbdZLqcsmlN +EOcLKvbdeOeTLTtS +DncKjvbdQdCaPqDr +EPCjjvbdUGznLvvF +EObkKvbdrDdhpNvB +EPDLKvbdRadFLhxk +DnbjjvbdhytelQmf +EPDKjvbdFkFSbhNV +DoDKjvbdaSGDHsek +EObkKvbdzHYlAMdw +DnbjjvbdliDsptrB +EPCkKvbdYlSDtNlN +DoDKjvbdnPyxujxb +EObjjvbdRkYfVGjs +EPCjjvbdRaceMJZL +EOcLKvbdnUuZkJrG +DncKjvbdOYOuzdNt +DoCkKvbdJbjDQicY +DnbjjvbdRyjHsCvA +EOcLKvbdUGzmlXVe +EPCjjvbdMoxRWOGs +DncKjvbdlrZUzTEJ +DoCjjvbdJYUBgkpp +EOcLKvbdACrXizJQ +EPDKjvbdsCGMkfkZ +DncKjvbdqYnhGqEY +DncLKvbdjgflFemk +DncKjvbdrzMQTAgn +DoCjjvbdlZTSSxgU +EPDLKvbdKCibqKCx +EOcLKvbdmJDtQuSB +DncLKvbdQcbaPqES +DoCjjvbdOXoVzdNt +EObkKvbdbsCjsdKB +EPDKjvbdySmiMqbH +DoCjjvbdrMzKZLhJ +DncKjvbdtAGqIAAr +EPCjjvbdEXxMTtUM +EOcKjvbdVrOYBdkc +DoDKjvbdzROlhiwA +DncKjvbdqTtHRrLU +DnbkKvbdiUzEwSUb +DoCkKvbdZLqcsnMN +DnbjjvbdUaBqTRRy +DoDKjvbdRosgKGEX +EObkKvbdShzKRABM +DoDLKvbdqZOhHRDx +EPDLKvbdiUzFWqtb +DoCkKvbdZyEJmbkr +DncKjvbdREDBPpdS +EPCjjvbdMSWmZtpz +EPDLKvbdTAEiHaoE +DoDKjvbdNeETiIjd +EOcLKvbdqdFJPmua +DoCkKvbdRpTfjFcw +DncLKvbdznoqEcMY +DoCkKvbdFfJqmiUR +EOcLKvbdSPsfifEX +DnbjjvbdtunYJpsA +EPDKjvbdqcdiQOVa +DnbkKvbdeXyssrFz +EPDLKvbdQYmAGrqj +EObjjvbdegjuqmpg +EOcLKvbdbLLenmcA +EOcLKvbdpyPHgREY +DoDKjvbdZRMdhmEq +DncLKvbddZxoxZRC +EOcKjvbdKxpjSztf +EPDKjvbdKkBHvAJy +EObkKvbdnBiwYOnV +EObkKvbdrWolDJYq +DoCkKvbdZyEJmbkr +DoDKjvbdkDMLRHUg +EPCjjvbdQwNccMID +DncKjvbdSZihSbvA +DncLKvbdnHFXmNgZ +DncKjvbdGKeSbhMu +DncLKvbdULvPAuoJ +EOcLKvbdYqNFJMeR +DoDLKvbdMfcPmQVL +EPDKjvbdFpATWgGZ +EObjjvbdeqaWzkbo +EOcKjvbdZoNhddzK +EObjjvbdFeiqmiTq +DoDKjvbdauBfwjsh +EOcLKvbdBraDUFvr +DoDLKvbdyYIjCPzL +DnbjjvbdmRxuZsEJ +EObjjvbdMfcQMpUk +EOcKjvbdyNsIXrhc +EPDKjvbdREDBPpcr +EPCjjvbdRkYeuGkT +EPCkKvbdtAHRIAAr +DnbkKvbdxUmFQxkn +EObkKvbdtTSTZZdc +EOcKjvbdmIdUQtqa +EOcKjvbdXrkaNUPY +DoDKjvbdCWzdIePv +DoDKjvbdbBVdfQPw +EPCjjvbdZyEJmblS +DncKjvbdlZTRrxft +EPDLKvbdIxUCIMQp +DnbjjvbdKyRKSztf +EOcKjvbdNeEUIhjd +EOcLKvbdjKGIJmXr +DoDLKvbdCEPaVimG +EPCkKvbdOFDsiIkE +EOcLKvbdehKvSORH +DoDKjvbdwWkaWAuu +EPDKjvbdpxoHfpcx +EPDKjvbdJbjCqJbx +DncKjvbdZtJJZETO +EPDLKvbdsZkpTBHn +EPCkKvbdTlWPAuoJ +DoCjjvbdjggMFfOL +DoDKjvbdfMewGlik +EPDLKvbdnBivwoOV +DoCjjvbdwuNEpxkn +DnbkKvbdiifIKNYS +EOcKjvbdKVuFdFGi +EPCjjvbdZdxGzgiC +EOcLKvbduaDxsPEh +EPCkKvbdRotHJfEX +DncLKvbdCIjajhej +DoCkKvbdcImJjfWx +EOcLKvbdKVtecdgJ +DoCjjvbdeFOrBwCj +EPDKjvbdqvpLcIxq +EObjjvbdEARiMyvw +DncKjvbdbUafxLTh +DncLKvbdLAkGmCYR +DoDKjvbdxVMdqYkn +EPDKjvbdWWiYWDdg +EObkKvbdKDJbpjCx +DoCkKvbdnPyxvKyC +DoCkKvbdZsiJYcsO +EObkKvbdJpzFOeme +EOcLKvbdOSsufeUp +DoDLKvbdTfznMWvF +EPDLKvbdfNFwGlik +EPDLKvbdCDpAuilf +EPDKjvbdbiMikGWx +DoCkKvbdrbGMkfjy +DoCjjvbdWIXuxHYz +EPDKjvbdGFiqnIsq +EPDLKvbdNGbpMpVL +EOcLKvbdtSrTYyeD +DoDKjvbdjJfHjNXr +EPCkKvbdzitpPcrt +DoDLKvbdxmrgxSiD +EPDLKvbdcJNKLFvx +EPDLKvbdsrrSxydc +DnbkKvbdqceIonWB +EPCkKvbdZnnIddzK +DoCjjvbdLYpirztf +EPCjjvbdLrWlzUpz +DnbjjvbdRkZGVGjs +EObjjvbdnBivxOmu +DoCjjvbdmIdUQuSB +EObkKvbdtcCtvuoP +DnbjjvbdANIYrvzY +DncKjvbdmaivwoNu +EOcLKvbdrouoJcWG +DoDLKvbdTppoVVIN +DoDLKvbdVUMtFkuj +DncLKvbdznpQdblY +DncKjvbdEPCkLXDE +EOcLKvbdfHkVqmqH +EPDKjvbdapGgDkzd +EPCjjvbdSPsfifDw +DoDLKvbdGKeTDINV +EObjjvbdyqPNIjXA +EPCjjvbdatbGwkUI +DoCjjvbdCTAcTewS +DnbjjvbdxnTIXsJD +EOcKjvbdbKlFnnDA +DncKjvbdjJegjNXr +EObjjvbdMuTRkNAX +EObkKvbdUxgsykOn +DoCkKvbdRaceMIxk +EPDLKvbdJbibpibx +DoDKjvbdEztQdlCi +EPDKjvbdcyyPwyRC +DncKjvbdjlbMZdfo +EPCkKvbdRXNdClID +DncLKvbdtbbuXVoP +DoDKjvbdieLHVPAO +DoDKjvbdFVxopMie +EObjjvbdzoPpdblY +EPCjjvbdmIdUQuSB +EPCkKvbdYkrEUNkm +DoCkKvbdVwIxVdEg +DoCjjvbdOSsvGdtp +EPCjjvbdmSYtysDi +EObkKvbdWWiYVceH +DoDKjvbdrNZixkgi +EPDKjvbdbVCHYKsh +DnbkKvbdjKFgimXr +EPDKjvbdNsUWHFUp +EObkKvbdeAUQlwjG +EOcKjvbdTAEiICPE +DoCkKvbdZLqdUNkm +EOcKjvbdZisHogCG +EPCkKvbdKVtfEEgJ +EObjjvbdaSGDIUGL +EPDKjvbdZRNFIleR +DoDKjvbdyXiJaoyk +EObkKvbdRkYfVHKs +DnbkKvbdLAkHNCXq +DncKjvbdJpyePFnF +EPCkKvbdkHgMFenL +DoDLKvbdOFDtIhkE +DoCkKvbdtTSTZZdc +EOcLKvbdkClKpfuH +DoCjjvbdBcpBVjNG +DnbkKvbdfMfXHNJk +DoDKjvbdBsBCtFvr +DoCjjvbdHgGzYwwg +DncLKvbdSwjkmzkY +DoCkKvbdDihJuwjA +EPDKjvbdQccBPpdS +EPDKjvbdehLVqnQg +DoCjjvbdmozZVkZC +DoDLKvbdaNKasVNH +EObkKvbdrRtkOLBN +DoDKjvbdehLWRnRH +EObkKvbdSCEEkiYk +DoCjjvbdRXOEDMID +EOcKjvbdFejRmiUR +EOcLKvbdFkEsChNV +DncKjvbdWWhwuceH +EPCkKvbdNwoVzdOU +EOcKjvbdePFSkUTr +DoDKjvbdMRwMzUpz +EObjjvbdLrXMzUpz +EPDKjvbdZxdJnDLr +EOcLKvbdrRtkNjaN +EPCkKvbdTvLoitBR +DncKjvbdKeehCApu +EPDLKvbdemFvfljL +DncLKvbdeFOqawCj +DoDKjvbdZyEJnCkr +DoCjjvbdlZTRsZHU +DnbkKvbdRbDdlJZL +DnbjjvbdYqMdiNFR +EObjjvbdSQTfjFdX +DoCjjvbdgFlZnGgA +DoDLKvbdwtldqYkn +EObkKvbdjggLfFmk +DncLKvbdMgCpNPtk +DncKjvbdmpZyWKxb +EPDKjvbdVqnYBeMD +DoDKjvbdULuoBWOi +DncLKvbdezvZEiTw +EPCkKvbdjblLRHUg +EPCjjvbdBiKakJGK +DncKjvbdTukpJtAq +DoCkKvbdkWWnEBxX +EPCjjvbdnPzYvLZC +EOcLKvbdWHxVxGxz +DncLKvbdNsUWHEtp +EObkKvbdHDkWKBij +EObkKvbdVAbQsQrZ +DnbkKvbdKCibqKDY +EObjjvbdLYqKSztf +DoCkKvbdZLrDtOMN +EOcKjvbdemFvgNJk +DncLKvbdiCOcEvpq +DnbkKvbdEXxLtTtM +EObkKvbdFjdrbglu +EObkKvbdmttykJrG +DoCjjvbdePFTLUTr +DoCkKvbdWRmwadlD +DoDLKvbdVqmxCElD +EPCkKvbdnBiwXoOV +DnbjjvbdEvZQPmKF +EObkKvbdSKyGVGkT +EPCjjvbdauBgXkTh +EPCjjvbdVrNxBeLc +EObjjvbdOEcshiLE +DoDLKvbdbLMGPNcA +DnbkKvbddZxpYYqC +DoCkKvbdlZTSTZHU +EObkKvbdtlXwBTaX +EObkKvbdHffyxwxH +EPDKjvbdrpWOicVf +DncKjvbdkVvmdBww +EPDKjvbduaDySoFI +EObkKvbdsZkosBHn +DoDLKvbdTAFJICOd +DnbjjvbdpstHRrLU +DncKjvbdUQqOtuIN +EPDKjvbdVUMtFlWK +DoDLKvbdrouoKDVf +DoCjjvbdmRyUysDi +EPDKjvbdgFkzNgHA +DnbjjvbdZshiZDsO +DnbjjvbdIMBzmwRL +EObjjvbdZshhxdTO +EOcLKvbdZGwEAOri +EPCkKvbdkHflFfOL +DoCkKvbdKDJcQibx +EOcLKvbdFkEsCgmV +EPCjjvbdJutfEEgJ +DoCkKvbdOXnuzdNt +EPDLKvbduLwwAtAw +DoDKjvbdqvpLbiZR +EPCjjvbdGYuVBEXb +EOcLKvbdCJKajhfK +DnbjjvbdkMbLyeGo +EPCkKvbdijGIKMwr +DoDLKvbdJzpGXdAN +DoDKjvbdNwnuzdOU +EOcLKvbdtSqsYyeD +EOcLKvbdmRxuZrdJ +EPDKjvbdhlEcmtcZ +DoCkKvbdbiNJjevx +DoDKjvbdGckVibJj +DoDLKvbdGLFSbhMu +EPDKjvbdEObjkWbd +EObkKvbdBhkBjiGK +EPDKjvbdtAGqIAAr +DoCkKvbdWRmwadkc +EObjjvbdQdDAoqDr +EOcLKvbdwNWANDeN +EPCjjvbdMowqVmgT +EPDLKvbdegkWSNpg +EPDLKvbdjAQHAogK +DoDLKvbdvwLaVaWV +EPCjjvbdLGFgbBQu +DoCjjvbdxsOJMrCH +EObkKvbdFkFTChMu +EObjjvbdbLLenmcA +EPDLKvbdiCObeXRR +EPCjjvbdhbObdvpq +EObkKvbdVZIUZkOn +EPDLKvbdfVzxPizs +EPDKjvbdnPyyVjyC +DncLKvbdRzKITCvA +EOcLKvbdUtMsfLuj +DncKjvbdVBBpsRRy +DnbkKvbdzeZnzdzQ +EOcLKvbdUtNTfMVj +EObjjvbdqcdiQOWB +DoCkKvbdNddTiIjd +DncLKvbdrykosBHn +EPDKjvbdWRnYBeLc +DncLKvbdrXQLcIxq +EPCkKvbdUWLpKTaR +DoCkKvbdZRNFJMeR +EPDLKvbdunszpjoU +DoDKjvbdzitpPdSt +EObkKvbdvBDxrneI +DoDLKvbdVviXvDeH +EPCkKvbdDihJuxKA +EPCkKvbdNPxQunGs +DoCjjvbdmuUzKjRf +DnbkKvbdbPffdLzd +DoDLKvbdXrlBNTnx +DoDKjvbdZQmEhmFR +EObjjvbdmttzLKRf +DoCkKvbddijRvUzn +EPDLKvbdHffyyYXg +EPCkKvbdcTDKtEJa +EPCkKvbdpecdtWAh +DncKjvbdRjxeuGkT +EPCjjvbdqdEhpOVa +EPCjjvbdelfXGmJk +EObkKvbdWWhwudFH +EPDKjvbdhbObeXQq +DoCkKvbdffLynHHA +DnbjjvbdpaJFAXIE +DoDKjvbdqZPIGpcx +DoDLKvbdmaivxPOV +DncKjvbdqFdEsvAh +EPCjjvbdrpWOibvG +EPCkKvbdyfyMAMdw +DoDLKvbdhuZdvqtb +DncLKvbdWRnYBeMD +DncLKvbdDncLKvbd +EObkKvbdhzUfLpnG +EOcLKvbddoFSkTtS +EPDKjvbdbKlFoODA +DoCkKvbdRWmccLhD +EObjjvbdeAUQlxJf +DncLKvbdKVuGEEfi +EObkKvbdVvhwvEEg +EPDLKvbdhaoDEvqR +EPDKjvbdpfEFTvBI +EPCkKvbdyzeNrIJI +DoDLKvbdGckViaij +EObjjvbdnHExNNfy +EObkKvbdZLqdUOLm +DoDLKvbdDxXktTsl +EObkKvbdFVxpPmKF +DoDKjvbdNdctJJLE +DnbkKvbdTXkMNzjx +DncKjvbdbrbkUEKB +DoCkKvbdGKeSbhNV +EPDKjvbdYSkaMtOx +EPCjjvbdiGicYujV +EObjjvbdnHFXmOGy +DoDKjvbdZyDjNblS +EOcLKvbdGYtuBEXb +DnbjjvbdqGDeUWAh +DnbkKvbdTppnuVHm +EOcLKvbdPyNAGsRj +EPCkKvbdIrxaSlxM +DncKjvbdCfkfHAzc +DnbkKvbdIHHZxxXg +EPCjjvbdjKFhKMxS +EOcKjvbdehKvRnRH +EObjjvbdxVMdpyMO +DnbjjvbdSLYetgKs +EObkKvbdRjyGUfkT +DoCjjvbdwyhFeweS +DncLKvbdrJAKElne +EPCjjvbdiGjCxvKV +EPCjjvbdCIjajiFj +DoDLKvbdunszqLPU +DnbjjvbdySmhlrCH +DnbkKvbdnBjWxPNu +DoDKjvbdlhdTqUrB +DoCjjvbdGdKvJajK +EObjjvbdkySqryHU +EPCjjvbdYkqdTmkm +EObkKvbdDnbjkXDE +EPDKjvbdKDKCqKDY +EOcLKvbdeYZstSFz +EPDKjvbdZyDjNbkr +DncLKvbdPyNAGrrK +DoCkKvbdTlVoAuni +DncKjvbdEPCkKvbd +EPCkKvbdcTCkTcjB +DnbkKvbdcJNKLGXY +DnbjjvbdRkYfVHKs +DoDLKvbdaaWEfQQX +EPDKjvbdmbJvwnmu +EOcLKvbdZyDimcMS +DoDLKvbdYkrEUNkm +DoDKjvbdmaivwnmu +DoDLKvbdqYoIHQcx +EPDKjvbdLrWlyuQz +DncLKvbdkCkkQgVH +EObjjvbdrXPlChyR +DoCjjvbdJTYaTMwl +EPCkKvbdNsTvHFVQ +DnbjjvbdeEnqavcK +EPCjjvbdVvhwuceH +EPCkKvbdbLMFoODA +EPDLKvbdCIkCLIfK +DoDLKvbdbLLennDA +DncLKvbdyNrhYTIc +EPDLKvbdNHCpNQUk +DnbkKvbddndsLUTr +DncKjvbdaogHDkzd +EPDLKvbdZjSgpGbG +DnbjjvbdaSGDIUGL +EPCkKvbdjhGlFfNk +EPDLKvbdbKkenmcA +EOcKjvbdIHHZyXxH +DoCjjvbdiUydwRtb +EPDLKvbdauBgYKtI +EPDLKvbdZMSDsmlN +DoDKjvbddneSjtTr +EPCjjvbdJbibqJbx +DnbjjvbdGYtuAcwb +DoDLKvbdsQVoJbvG +DoCkKvbdxmrhXsIc +DoCjjvbdyNsHwsJD +DoCkKvbdKWVFceGi +DoDLKvbdsBfNMGkZ +DnbkKvbdJzoewdAN +EPDKjvbdwzHefYFS +DnbjjvbdBiKbKhej +EOcKjvbdjuvmdCXw +EOcKjvbdbhmKKevx +DoCjjvbdehLWRmpg +EPCjjvbdACrYJzJQ +EOcKjvbdhuZeXSUb +DoCkKvbdJcJbqJcY +EPDKjvbdYqMeJNEq +DncLKvbdmJDtRUqa +EPDKjvbdnBjWxOnV +DoDLKvbdOEctJIkE +DoCjjvbdDxYLtTtM +EOcLKvbdZnnJFFZj +EOcKjvbdKRZeOfNe +DoCjjvbdTukpJtAq +DoDKjvbdhyuGLpnG +DoDKjvbdhtzFWrUb +DnbkKvbdQccBQRDr +EPCjjvbdTukojUBR +EPDKjvbdeKKRvUzn +EOcLKvbdeXzTtSFz +DncKjvbdyTOJNSCH +EObkKvbdjmBkydfo +EPCjjvbdelevflik +DoDKjvbdZtJIxcrn +DoDKjvbdqiAJeNOe +DoCjjvbdddnqavbj +DoCjjvbdZLrDtOMN +EPDKjvbdZyEKNcLr +EObkKvbdMgDPmQVL +EPCjjvbdxrmiMrBg +EObjjvbdZGvdAPSi +EPCkKvbdvvkaWBWV +DncKjvbdfMewHNJk +DoCjjvbdlrYtyrdJ +DncLKvbdiLeDnVCy +DnbjjvbdvwLaWBWV +EOcLKvbdVBCRSprZ +DoDLKvbdYzbfSKVy +DnbkKvbdXrlBNUPY +EObjjvbdKfFhCAqV +DoCkKvbdVTmTekvK +EPDLKvbdaSGChTfL +DncLKvbdauCGwjsh +EObjjvbdBcpBWJlf +DnbjjvbdZjTIQHCG +DoCkKvbdDjHiuxKA +EObkKvbdZxdKNblS +DoDLKvbdptTfrRjt +DoDLKvbdJbjCqKDY +EOcKjvbdEJhKWYKA +DnbkKvbdssSSyZeD +EOcLKvbdZshhyESn +EPDKjvbdRjxfUgKs +DncKjvbdwygefYEr +EPCkKvbdiLeEOVCy +DnbkKvbdTvLojTaR +DoCkKvbdzdzOzdyp +EPDKjvbdVUNUGMWK +EObjjvbdqdEhonVa +EPDKjvbdKefHbAqV +DncKjvbdtSqsYzFD +DoDLKvbdZjTIPgBf +EPCkKvbdRjyFuHLT +EOcKjvbdUtMsfLvK +DoCjjvbdnHEwlnGy +DnbjjvbdURQnttgm +DoCkKvbdFfJrOIsq +DoDLKvbdjKGIKMwr +EOcKjvbdTAEiIBnd +EPDLKvbdFxttaEXb +DoDKjvbdJTZAsNYM +EPCkKvbdFejSNhtR +EPDKjvbdwkXEHzyf +DnbjjvbdbUafxLTh +DoCkKvbdZQleJNEq +EPCjjvbdmpZyVkZC +DnbjjvbdmJEUQuRa +EObkKvbdrEFIpNua +EOcLKvbdJpzEnfNe +DnbjjvbdyTNiMqag +EObjjvbdNQYQvOHT +EPDKjvbdGKdrbgmV +EOcLKvbdCJKakIej +DncLKvbdlhcsptrB +DnbjjvbdZirhPfaf +DncKjvbdZoNiFFZj +EOcLKvbdjuwNcaww +EOcKjvbdUyITzLPO +DnbjjvbdxVMdpyLn +EObjjvbdnCJwXnnV +EPCjjvbdIMBznWqL +EObkKvbdJpzFOenF +EObjjvbdlhdTpuRa +DncLKvbdSCDdkiZL +EObjjvbdZxcimcMS +EOcKjvbdxVMdqZLn +DoCkKvbdrJAKFMne +EObjjvbdXsMAmUPY +EObjjvbdeFOqbWbj +DncKjvbdCTBCsfWr +DoCjjvbdRyjHsCvA +EPDKjvbdziuQQDrt +EOcLKvbdziuPocrt +EPCkKvbdWWhwvEEg +EPCkKvbdeEoRavcK +EPCjjvbdSKyFuGkT +EPCjjvbdrEFIonWB +EObjjvbdrEFIpOVa +DncKjvbdzGyMANEw +EPDKjvbdrRtjmjaN +DoCkKvbdJbjDRKDY +EObkKvbdfNFvgNKL +DnbkKvbdZHWdAPTJ +EPCjjvbdCDoaWKMf +DncLKvbdJKEAKPgE +DnbjjvbdssSTYydc +EOcKjvbdIsYaTNYM +EPCkKvbdgPazvcxI +DoCjjvbdmozYvLYb +DnbkKvbdeATqNYKG +EObjjvbdIwsbIMQp +EPDLKvbdpssfrSKt +EPCkKvbdhzUfLpmf +EOcKjvbdNGcPlpUk +DncLKvbdhkeEOVDZ +EPDKjvbdLFfIBaRV +EPCkKvbdJuuGEFGi +EOcKjvbdRacdlJYk +EPCjjvbdmbKWxOmu +EPDLKvbdwtmFQxkn +DnbjjvbdgvyAzzAJ +EPDKjvbdNrsugFVQ +DncKjvbdmttzLKRf +DnbkKvbdZyEKNcLr +EObkKvbdxrmiNRag +DoDLKvbdiMFDnVCy +EObjjvbdWSNxBdlD +DnbkKvbdCTBDUFwS +DoDKjvbdYTLaMtPY +EOcLKvbdZtIiZDrn +EObjjvbdYzcGSJvZ +EObkKvbdCSaDUFvr +DoCjjvbdTppnuUgm +DoCkKvbdOTUVfduQ +EOcLKvbdfpBzwDwh +DncKjvbdGBPQyJzm +EPCjjvbdVZITyjnn +EObkKvbdVhXuxGxz +EObjjvbdiifHimXr +EPDKjvbdvwMAvAvV +EOcKjvbdkWXODbYX +DoDKjvbdmbKXXnnV +DoDLKvbdZsiJZDrn +DoCkKvbdlrZUzTDi +DoDKjvbdSQTfjGEX +EOcKjvbdqcdiPnWB +EOcLKvbdpssgSSKt +EPDLKvbdhkeENuCy +EPDKjvbdZQmEhmEq +DoDKjvbdZtJIxcrn +DncLKvbdhgJbxujV +DoCkKvbdDoDKkXCd +EObkKvbdZGvdAOsJ +EObkKvbdwjvdHzyf +EPCjjvbdUQpoUuHm +EPDKjvbdUGznMXVe +DnbjjvbduaEYroFI +DoDLKvbdehLWRnRH +DoDLKvbdgQBzwEYI +EObkKvbdbUagYKsh +EObjjvbdyqPMhiwA +EPDKjvbdvvkaWBWV +DnbkKvbdJTYaTNYM +DoDKjvbdZtIhxdSn +EOcLKvbduaEZTOdh +EObjjvbdkNCMZeGo +EPCjjvbdZLqdTnLm +DoCkKvbdUsltFkuj +DncKjvbdnPyyVkZC +DoDLKvbdwjvdHzzG +EPCkKvbdGKdsCgmV +DnbjjvbdiMFDmtby +EObjjvbddneSjtUS +DncLKvbdezvZFJUX +EPCjjvbdhbOcFWqR +DoCkKvbdaMjbTVMg +DoDLKvbdHDjvKCJj +EOcLKvbdpxoIHRDx +DoDKjvbdZshhxcrn +EOcLKvbdcJNKKewY +EObjjvbdTppntuHm +EPCjjvbdemGWfmJk +DoCkKvbdjcLkQftg +EObkKvbdQwODbkgc +EPDLKvbdCTAcUFwS +DnbjjvbdvOszpkPU +EOcKjvbdkClLRHUg +EOcLKvbdNHCpMpVL +EObjjvbdZMRcsnMN +DoCjjvbdpxnggQcx +EOcKjvbdyTOJNRbH +EPDKjvbdeKKRutzn +DncKjvbdrzLosAgn +EPDKjvbdYzcGRjWZ +EPDKjvbdQcbaPpdS +DnbkKvbdtkxXAsaX +DncKjvbdCDpAvKMf +EPDKjvbdHEKvKBjK +EOcKjvbdfpBzvdYI +DncLKvbdiifIJmYS +EPDLKvbddeOqbWbj +DnbkKvbdZyDinDMS +DoDLKvbdkNCLydgP +EOcLKvbddePSCWbj +DnbkKvbdZxcjNcMS +DoCjjvbdQwNccMID +EPDLKvbdiiehKMwr +EOcLKvbdCTBDUFwS +EPDLKvbdbLMGOnDA +EOcLKvbdUMWOaVni +DnbjjvbdyqPMhjXA +DncKjvbdCTAbsewS +DncKjvbdMpYQvOHT +EPDKjvbdTqRPVVIN +DoCjjvbdZxdJnClS +DoCjjvbdWSNwbElD +DnbkKvbdrWokcIxq +EObkKvbdWIYWXgYz +EPDKjvbdzitopDsU +EObjjvbdUVkojUBR +EPDLKvbdEObkLXCd +EOcKjvbdrbFmMHKy +DnbjjvbdehKuqmpg +EOcLKvbdZshiYcrn +DoCjjvbdZnnIdeZj +EOcLKvbdmttzLKRf +EObjjvbdGZUuBDwb +DoCjjvbdHDjvJaij +DnbjjvbdKQzFPGNe +DncKjvbdRbDeMJYk +DoCjjvbdezuyEhsw +DoDKjvbdwkWdHzzG +DncKjvbdEASJMyvw +DncLKvbdyfyMANEw +EPCjjvbdCSaDTfXS +EOcKjvbdCJKajiGK +EObjjvbdrJAKFNOe +DnbjjvbdFWZPoljF +DnbjjvbdmpZyVjyC +EPDKjvbdiifIKNYS +DncKjvbdGAnqYizm +EOcKjvbdiMFEOVDZ +DnbjjvbdJXtBglRQ +DoCkKvbdijGHilwr +DoCjjvbdDwxMUUUM +DoDLKvbdUMWPBVni +EPCjjvbdDwwksssl +DnbkKvbdNeDshhkE +EObkKvbdbAudfQQX +DnbkKvbdwuMdqZLn +DnbjjvbdijGHjNXr +EPCjjvbdOFETiIkE +DoCjjvbdxsOImSCH +DoCkKvbdLiBkqYAS +DncKjvbdFkFTDHmV +DoCjjvbddoErjstS +EObjjvbdyOTIXsIc +DncKjvbdeXzTtSFz +DoCjjvbdqdFIonWB +EPDLKvbdMpYRWNgT +DoDLKvbdfNGXHNJk +EPCjjvbdePErkTsr +DoCjjvbdNHCpNQVL +EObjjvbdsQVnjCuf +DnbjjvbdtcDUwWPP +DoCjjvbduaDySndh +EPDKjvbdqZPIGqDx +EObjjvbdijFgimYS +DncKjvbdZyEJmblS +DoDKjvbdirziSkJz +DncLKvbdeOeTKtTr +EOcKjvbdfpBzwEYI +DnbkKvbdezvZFItX +EPCjjvbdrRuLOKaN +DncLKvbdbrbjscjB +EObkKvbddBrlrAUN +EPDKjvbdZoOIdeZj +EOcKjvbdGYuUaEYC +EPCkKvbdNxPVzdNt +EOcLKvbdhlFDmuDZ +DncKjvbdKVtecdgJ +EPDLKvbdqlzJxkhJ +EOcKjvbdySmhlqbH +EPCkKvbdxsNiNRag +EPDKjvbdTYKkmzjx +EObkKvbdIryBTMxM +EPDLKvbdxnShXsIc +EPCjjvbdaSFbhUGL +EObjjvbdRDbaQQdS +EObkKvbdrbFmMGkZ +EPCkKvbdWXJXudEg +EOcLKvbdcJNKKfXY +DncKjvbdEuxpPljF +DncKjvbddCTNSATm +EOcLKvbdFVyQPmKF +EPCkKvbdpeceUWBI +DoDLKvbdVTmUGMWK +DoCjjvbdFyVVBEXb +EOcLKvbdTukpKTaR +DncLKvbdDHLegAzc +EPCjjvbddxZtTrFz +DncKjvbdssRsZZeD +DoDKjvbdeOeSjstS +DoDKjvbdQdDApQcr +DncLKvbdURQoUuIN +DnbkKvbdezuxdiUX +EPCjjvbdbPgHDkzd +EOcKjvbdFWZQQMjF +DoDKjvbdMfcQMotk +EPCjjvbdrWokbiYq +DoDKjvbdnGdwmOGy +EOcKjvbdnBjXYOmu +EOcLKvbdDoCjjvbd +DoDLKvbdsQVoJbuf +EObkKvbdZirhQHBf +EPCkKvbdIGgZxwwg +DncLKvbdrMzKZMIJ +DnbkKvbdkHflFemk +EObkKvbdfHkWSORH +DnbkKvbdwygfGYEr +EOcKjvbdxmrgxTJD +DnbjjvbdGdLViaij +DoDKjvbdmSYtysEJ +EObkKvbdfILVqmpg +DncLKvbdADSXizIp +DoCjjvbdznpQdbkx +DncLKvbdmbKWxOnV +EPCkKvbdJvUfEEfi +EOcLKvbdcScLTdJa +DnbjjvbdQcbaPpdS +EPDKjvbdDoDKjvcE +DncKjvbdhzUfMROG +DncKjvbdbrcKtDia +EOcLKvbdJpydoFme +DnbjjvbdxLWdHzyf +EPCjjvbdwuMeQyMO +EOcLKvbdiifHimXr +EOcLKvbdySmiNSCH +EPCjjvbdznopeCkx +EPDLKvbdZshhyESn +DoDLKvbdrDeJQNvB +DoDLKvbdILaznXQk +DoCjjvbdnUtzKiqf +DnbkKvbdjJehKMwr +EOcLKvbdDxXlUUUM +DoCkKvbdtSqsYyeD +DoDKjvbdxVMeQxlO +EPDLKvbdZjTHofaf +EObkKvbdZisHogBf +DnbkKvbdnBiwXoOV +DoCkKvbdYSkaMtPY +DncLKvbdHELVibKK +EPCkKvbdhlEcnVCy +EPCkKvbdZLqdTnMN +DoDKjvbdbsCkUEKB +EPCkKvbdMpYRVnHT +EOcLKvbdFWZQPljF +DoDLKvbdznoqEcLx +DnbkKvbdcImJjewY +EPCkKvbdvvlBVaWV +DoCkKvbdmIdTqUrB +DncKjvbdxZgeexFS +EOcLKvbdrouoJbvG +DoCkKvbdWRnYBdlD +DoCkKvbdBhjbLJFj +DnbjjvbdrouoKDWG +DoDKjvbdUxgsyjnn +DoDLKvbdakMFnnDA +EOcLKvbdZtJJYcsO +DncLKvbdrbFllHKy +EPCjjvbdmajXXnmu +DncLKvbdpyPHgQdY +EObjjvbdyNrgwsJD +EPCjjvbdaMjaruMg +DncLKvbdYfwEAPTJ +DoDKjvbdbiNKLFvx +DoCjjvbdajkfOnDA +EObjjvbdZoOJEeZj +EOcKjvbdqZOhGqEY +EOcKjvbdziuPodTU +DoDKjvbduLxWaUBX +EObkKvbdyXhjBoyk +DoDKjvbdTkunaWPJ +EObkKvbdBraCsfXS +DoDLKvbdTAEiICPE +DnbkKvbdDjHjVwjA +EOcKjvbdqlzKZLhJ +EObkKvbddneTLTsr +EObkKvbdWRmwaeMD +DoDLKvbdLBLHNBwq +DoDLKvbdUxhUZkPO +DncKjvbdYlSDsmkm +DoCkKvbdxZhGFwdr +EObjjvbdbsDKsdJa +EPCkKvbdGYuVAdYC +EObkKvbdRXNccLhD +DnbjjvbdFVxpQMjF +DoDLKvbdMgDQNPtk +EObkKvbdQvmccMHc +DncKjvbdMpXqVnHT +DoCjjvbddZxoxYqC +DncKjvbdnVUzKjRf +DoCjjvbdEuyQPmKF +DoDKjvbdLYqKSzuG +EPDLKvbdTAFJICOd +DoCjjvbdCJLCKiFj +EOcLKvbdFyVVAcwb +DoCjjvbdbQHHDkzd +DoCkKvbdNrsvGduQ +DnbjjvbdRWmcblID +DnbkKvbdQvnEDLgc +DnbjjvbdVZITzKnn +EPDLKvbdxxJJaoyk +EObkKvbddoEsLUTr +DncLKvbdZQldhldq +DoDLKvbddCSmSAUN +DoDLKvbdYpldhldq +DoDLKvbdDxXlUTsl +EPCkKvbdnGdxMmfy +DncKjvbdwWlBWAuu +EOcLKvbdkDMKpgUg +DoDLKvbdZshiYdSn +EPDLKvbdhfjCyWKV +EObjjvbdKRZeOeme +DoCkKvbdznopdcLx +EPCkKvbdZMSDsnMN +DnbkKvbdkWWmcbXw +EObjjvbdpxoHfqEY +DnbkKvbdtlYXAsaX +EPDLKvbdjvXNcaww +EPDLKvbduDDVXVoP +DoDKjvbdLGFgbBQu +EObjjvbdmuUzLKRf +EObjjvbdRaceMIyL +EPDLKvbdiHKCyVjV +DoCkKvbdxnTHwriD +EOcLKvbdZjTIPgCG +DncLKvbdBcpBVjNG +EPDLKvbdVwIxVceH +DoCkKvbdkIGkeemk +DnbkKvbdozmdKxPA +DoDKjvbdjuwNdCXw +DoCkKvbdeEoSCXCj +EPCkKvbdcScKtEJa +EPDLKvbdySnIlrBg +EPCjjvbdnQZyVkYb +DoDLKvbdqYnggREY +EObkKvbdBsBDUGXS +DnbkKvbdUWLoitAq +DoCkKvbdIGgZxxYH +DoDLKvbdvwLaWBVu +EObjjvbdmfeXlnHZ +EPDLKvbdRXNdDMID +EPCjjvbdZLrDsmkm +EOcKjvbdUQpoUuHm +DnbkKvbdEzsqFMDJ +EOcLKvbdQlwayOUz +EPDKjvbdyzdnRhJI +DoDLKvbdwzHfGXeS +EOcKjvbdTvMPitBR +EOcKjvbdJbicRJcY +DoDLKvbdFVxpQNJe +DoDLKvbduLxXBTaX +DoCjjvbdLYpirzuG +DnbjjvbdvwMAvBWV +EPCkKvbdBiKbKiFj +DncLKvbdIryArmYM +DncKjvbdySmiNRag +DncKjvbdeEoRbWbj +DoDLKvbdjuwOECXw +EPDLKvbdFWZPomJe +EObkKvbdjcMLRGtg +DncLKvbdQwNccMHc +EPDLKvbdzQoMiJwA +DoDKjvbdmSYtzSdJ +EOcLKvbdelfWgMjL +EOcLKvbdiMFENuCy +EPCkKvbdezvZEhsw +EPDLKvbdUVlPisaR +EPDKjvbdbKlGOmcA +EObkKvbdzGyMANEw +DoDKjvbdXFxzUAPT +EPDLKvbdqrUkNkAm +EOcKjvbdPxmAGsSK +EOcLKvbdyfyMAMeX +EObjjvbduDDUwVoP +DncLKvbdyYJJbQZk +DoDLKvbdxVNEqYkn +EPCjjvbdNPxRWOHT +EObkKvbdYqNEiNEq +EPDKjvbdXrlAlsoY +EPDLKvbdbrcKtEJa +EObjjvbdGdKvJbJj +DoCjjvbdrDeJPnVa +DoDKjvbdZLrETnMN +DoDKjvbdKVuGDeGi +DoCkKvbdZtJIyETO +EObjjvbdYSlAlsoY +DoDLKvbdCSaDUGWr +EObjjvbdmfeYNNgZ +DoDKjvbdtumwiqTA +DncKjvbdqFdEtWAh +EPCkKvbdauCHXjtI +DnbjjvbdvOszqKoU +EOcKjvbdxrnImSBg +DoCkKvbdjvWmdBww +EPCjjvbdmuUzKiqf +EObjjvbdNdcsiIjd +EOcLKvbdNPxRVnGs +EObkKvbdSPsgKFdX +EPDLKvbdVAbQsQqy +EPDKjvbdVZHsyjoO +DncKjvbdJzofXdAN +EObkKvbdFjeTChNV +DnbjjvbdjJegjNXr +DnbkKvbdZLrDsnLm +DnbjjvbdbAueGQQX +DncLKvbdQcbaQQdS +DnbjjvbdFjdrbglu +DncLKvbdAMgxsWyx +DnbjjvbdRpUHKGDw +DncLKvbdMfcPlpVL +EObjjvbdIwtBhMRQ +EPCkKvbdelfXGmKL +DoDLKvbdFkErbhMu +EPCjjvbdHffyyYXg +DoDKjvbdOEctJIkE +DoCkKvbdKkAgvAKZ +EObjjvbdzitopDsU +EPCjjvbdRpUHJfEX +DoCkKvbdZLrDtNkm +EPCkKvbdijGIKNXr +DoCjjvbdxUmEpxlO +DnbjjvbdIxTbIMRQ +EPCkKvbdMfbpMotk +DncLKvbdjlbLzFGo +EObkKvbdrRtkNjaN +DnbkKvbdRosgKFcw +EPDLKvbdpfDeUWAh +DnbkKvbdkxsRryHU +EPCkKvbdkVvmcbXw +EOcKjvbdhficZWJu +EPDKjvbdCEQBWKMf +DoCjjvbdUyITzKoO +DnbjjvbdaNKbStmH +EPDLKvbdFWYpQMie +EObjjvbdhytekqNf +EObjjvbdeXyssqez +DnbkKvbdLAjgNCYR +DncKjvbdSBdFLiZL +EPDKjvbdBhkBjiGK +DoDKjvbdmajWxOmu +DoCjjvbdrMzJyMHi +DoDKjvbdZLqctOMN +EOcKjvbdnPzYujxb +DncKjvbddoFTKstS +DncLKvbdjcMLRGuH +DoCkKvbdbUagYKtI +DncLKvbdVAaqTRSZ +EPCjjvbdOEdTiJLE +EPCjjvbdJvUfEFHJ +DnbjjvbdIryBTNYM +EPDKjvbdYpleJNEq +DncKjvbdZGwEAOri +DncLKvbdBdQAvJmG +DoCkKvbdmIdTqUqa +EPCkKvbdtcCuWuno +EPCjjvbdmuUyjjSG +DncLKvbdjAQHApHK +EPCjjvbdGdKujBjK +EPDKjvbdYkrETmlN +DncKjvbdYORAYUut +DnbkKvbdiHKCxvJu +EPCjjvbdkHgLfGOL +DoCjjvbdpssfqqkU +EPDKjvbdZnmheEzK +EPDLKvbdySmhlrCH +EPCkKvbdjJegilxS +DoCkKvbdqcdhpNua +EPDKjvbdIHHZyXxH +DnbjjvbdjmBkydgP +DoCjjvbdYkqcsnLm +EPCkKvbdZnmhdeZj +EPDLKvbdDjIJuwjA +EOcLKvbdnQZxvKyC +EPCkKvbdBhkCKiGK +DnbjjvbdYkrDsnMN +DncLKvbdyzeNqghh +DncLKvbdrRuKmjaN +EPCjjvbdssRsYzEc +DoDLKvbdZQleJNFR +EObjjvbdZQleJMeR +EPDKjvbdtvNxJqTA +EObjjvbdbBWFGPpX +EPDLKvbdajkeoODA +EPDLKvbdSZihTCvA +EObkKvbdZMRdTnMN +EPCkKvbdsCFmLgKy +EObjjvbdVvhxVceH +EPCkKvbdaaVeFpQX +DoCjjvbdZQmEhleR +EOcKjvbdhzUfLpmf +EPCkKvbdREDBQRDr +DncLKvbdemFwHNJk +EOcKjvbdGAnqYizm +DncLKvbdtTRsZZdc +DoDLKvbdGGKRmhtR +DoDLKvbdIidAJogE +DoCkKvbdxZhGFxEr +DncLKvbdpxoHgREY +DnbjjvbdQcbaQRES +EPDKjvbdjAPfaPgK +EPCkKvbdvwMAuaWV +EOcKjvbdZLrDsnMN +DncKjvbdyqOlhiwA +EObkKvbdRacdkiYk +DoDKjvbdUWMQJsaR +EPDKjvbdUGzmkvvF +DoCjjvbdhbPDFXRR +EObjjvbdXGZZtAPT +EPCjjvbdMoxRWNgT +EOcKjvbdGFiqmhtR +DoCkKvbdNPxRWNgT +EObkKvbdyNrgxTJD +EPDKjvbdrXPkcJYq +EOcLKvbdFjeTChMu +DncKjvbdjvXNcaww +DncKjvbdkMbMZdgP +EOcKjvbdDnbkLXDE +EObjjvbdbBWFGPow +DoCjjvbdAMhZSwZx +EPDLKvbdZRNEiMeR +DoDKjvbdqdEiQNvB +DoCkKvbddePRavbj +EPDKjvbdaMjbStlg +EObkKvbdHgGyxxYH +EOcKjvbdtkxXBUAw +DnbjjvbdmSZUysEJ +EObkKvbdrXQLbhxq +EObkKvbdVTlsfMWK +DoDKjvbdSLZGUfjs +DoCkKvbdFVyPpMjF +DoCjjvbdhgKCyViu +EPCkKvbdZMSDtOLm +EPCjjvbdySmhlqag +EPDKjvbdWRmwadlD +EPCjjvbdqZPHfpdY +DoDLKvbdXsMBMsoY +DncLKvbdelewHMjL +EObjjvbdYpleImEq +DoDKjvbdZirgogBf +EOcLKvbdrXPlChxq +EPCkKvbdFVxpQMie +DoCkKvbdrNZjZMHi +EOcKjvbdDjIJuxKA +DncLKvbdeOeSkTsr +DoCjjvbdZoNhddyj +DoDKjvbdkWXNcaxX +DoDLKvbdTpqOtthN +DnbjjvbdehKuqnQg +EPCjjvbdmgFXlmfy +DncLKvbdShyiqAAl +EOcKjvbdKaKgNBwq +EPDKjvbdEztREkbi +EOcKjvbdVviXvEFH +EPDKjvbdcIlikGWx +EPCkKvbdUWLojUAq +EPDLKvbdOStWHEtp +DoCjjvbdHlBzmwRL +DnbjjvbdWIYVxHYz +EPDLKvbdADSXjZhp +EPDKjvbdRzJgrcWA +EObkKvbdxrnIlqag +EObjjvbdRosgKFcw +DoDKjvbdkySrTYgU +DncKjvbdsrqrxydc +EPDLKvbdZyEKODLr +EPCjjvbdEXxMUUTl +EOcKjvbdtcCtwWOo +DncLKvbddndrkTtS +EPDKjvbdrafMkfjy +EPCjjvbdJcJbpibx +EObkKvbdFfJqnIsq +EPCkKvbdyNsHwriD +DoCjjvbdaRebgsfL +DnbjjvbduoTzpjnt +EPCjjvbdZGvdAOsJ +DoDKjvbdmozYujyC +EPDKjvbdZGvdAPSi +DnbjjvbdmSYtzTDi +DoCjjvbdRotGjFdX +EObkKvbdSBceLhxk +DoCjjvbddijRvUzn +EObkKvbdMgDQNPtk +DoCkKvbdFVxoomKF +DncKjvbdGcjujBjK +EPDKjvbdBcpAvJlf +DncLKvbdLBLHNCYR +EObkKvbdmIctQtrB +DoDLKvbdFpATXGey +EPCkKvbdbrbkUDjB +DncLKvbdcTCjtEJa +DncLKvbdBsAbsfXS +EPDKjvbdFpATXGfZ +DoDKjvbdwuMeQxlO +EObkKvbdqUUGqrKt +DncKjvbdZyEKODLr +EPDKjvbdjhHLefNk +EPCkKvbdrbFmMGjy +DoCkKvbdsQWOjCvG +DoCjjvbdLBLHMbXq +EObjjvbdrpVnicVf +EPCjjvbdVqmwaeMD +DncLKvbdRNYCYnUz +EObjjvbdRXNdCkhD +DncKjvbdIHHZyYXg +DnbjjvbdyTOJMrCH +DoDLKvbdUsmUFkuj +DncKjvbdQcbaPqES +DnbkKvbdmgFYNNgZ +EOcKjvbdkySrTYgU +DoCjjvbdHlBzmwQk +DnbjjvbdaSFcITek +EObjjvbdQdCaPqDr +DncKjvbdxVMdpyLn +EOcKjvbdiMEdOVCy +DoCjjvbdRosgJecw +DncLKvbdkDMLQftg +EPCkKvbdKDKCqKDY +DoCjjvbdjvWnDaww +EOcLKvbduVnYJpsA +DoDLKvbdWRnYBdlD +DoDKjvbdssSSxzFD +EPDLKvbdJYTaglRQ +EOcLKvbdhzUfLpmf +DoDLKvbdJutfDdgJ +EOcKjvbdxmrgwrhc +EObkKvbdwWkaVaVu +EOcKjvbdxrmiMrBg +DoDKjvbdRDcApRES +DoCjjvbddjJrVtzn +EOcKjvbdxVNEqYlO +DoCjjvbdJJdAJofd +DoDLKvbdemGWfmJk +EOcKjvbdnPyyWKyC +DoCjjvbdbrcLTcia +DoDKjvbdjuvmdCXw +DncLKvbdtkwvaUAw +EOcKjvbdHDkViaij +EObkKvbdRDbaPpcr +EOcLKvbdtSqryZeD +EOcKjvbdrRuLOKaN +EOcKjvbdczYowyRC +DnbkKvbdjcMLQfuH +DncKjvbdmbJwYOnV +EPDLKvbdZnmiFEzK +EPDKjvbdjbkkQgVH +EObkKvbdJTZArmYM +DncKjvbdSPsgJfEX +DncLKvbduMYXBUBX +EObkKvbdkIHMFfOL +EOcKjvbdYORAYVWU +DoCjjvbdyzdmqghh +DncLKvbdtumwiqTA +EPDKjvbdQmYCZOUz +DoCjjvbdtcCtvvPP +EObjjvbdVTmUGMVj +EObkKvbdBsAcUGXS +DoCjjvbdqYngfqDx +EPCkKvbdtkxXBTaX +DoDLKvbdACqwiyhp +DncKjvbdraelkgKy +EPDKjvbduLwvaUBX +DncKjvbdpssgSSLU +EPCjjvbdIxTbHlRQ +EPDKjvbdPyNAGrqj +DoDLKvbdnCJvxOnV +EObkKvbdZRNFJNEq +DoCjjvbdFxuVBEYC +EOcKjvbdVAbRSpqy +DnbjjvbdJbibqKDY +DoDLKvbdKCicQjCx +EPCjjvbdNrtVgFUp +EOcLKvbdZQleJNEq +DoDLKvbdaRebgsfL +DoCkKvbdCIjakIej +EOcLKvbdBraDUGWr +EPDLKvbdADRxKZiQ +DoCjjvbdHkazmvpk +EPDKjvbdUsltGLvK +EOcKjvbdTkvOaVoJ +DncLKvbdZnmiEdyj +DoDKjvbdZtJJYdSn +DoDLKvbdbiNJjfWx +DnbjjvbdIsZBTNYM +EPCkKvbdhbPDEvpq +DncKjvbdqlyjYlIJ +DoCkKvbdbsDLTcia +DoDKjvbdKCjCqKCx +DoDLKvbdnBiwYOmu +DnbkKvbdjKGIKMwr +EPCjjvbdHgGyxxYH +EOcLKvbdcyxpXxqC +DncLKvbdlZSrSyGt +EPCjjvbdTAFIhCPE +EObkKvbdZdwfzgiC +DoDLKvbdSLYfUgLT +DoCjjvbdRMwayNtz +DnbjjvbdCflGHAzc +DoCjjvbdrJAKFNOe +EPCjjvbdjblKpgUg +EPDLKvbdQccAoqDr +DnbjjvbdCJKbKhfK +EPDLKvbdiGibyWJu +EOcLKvbdyNsHxShc +EPDLKvbdmIcspuSB +DnbjjvbdnGdxNOHZ +DoCkKvbdhzVGMRNf +DoDLKvbdeFPRawDK +EObjjvbdsQWOjCvG +EObkKvbdhzUelQmf +EObkKvbdeJirWUzn +DncLKvbdxxIibPzL +EObkKvbdSBceMIxk +DoCkKvbdehKvRmqH +EObjjvbdRbDeLiZL +EObjjvbdGYtuAdYC +DnbjjvbdHDkVibKK +DoCjjvbdKQyeOfNe +DoCkKvbdmbJvxOmu +DoCkKvbdULvOaWPJ +DncLKvbdrWpMCiZR +EObjjvbdhytfLqNf +DoCjjvbdgPazvdXh +DoCjjvbdiHKDYuiu +EPDKjvbdRWnDbkhD +DncLKvbdrMzKZLhJ +EObkKvbdyXhiaoyk +EPCkKvbdjmCLydfo +DnbkKvbdDxYMUTsl +EPDKjvbdxmrgxSiD +DnbkKvbdmSYtyrci +EPCjjvbdqvokcIxq +DoDLKvbdXsMAmUPY +DncKjvbdDoDKkWcE +EPCkKvbdMgDPmQUk +DoDLKvbdKyQirztf +EPCjjvbdmajWwnmu +EOcLKvbddCSlrATm +EPDLKvbdrJAKElne +DoCkKvbdIsZBTMxM +DnbkKvbdffMZnGgA +EOcKjvbdJcKDQjDY +EObjjvbdxsOJMrCH +EObkKvbdEKHiuwjA +DncKjvbdunszpjnt +DoDLKvbdZjTIQHCG +DnbjjvbdsQVnibvG +DnbkKvbdGQATXHGZ +DnbkKvbdBsBDTfXS +DoCkKvbdBsAbsevr +DoCkKvbdRXNdDLhD +EPCjjvbdRadElJZL +DnbkKvbdxwhibPzL +EOcKjvbdCJLBjiFj +DncLKvbdZMSDsmkm +DoDKjvbduaEZSoFI +EPCjjvbdhgJbxujV +EOcLKvbdCJLBjhfK +DoCkKvbdZisHpHBf +DoCkKvbdqFdFUWBI +EPCkKvbdDGlFgAzc +DncKjvbdZxcjNblS +EPDLKvbdLqvmZuQz +DoDKjvbdxZhGFxFS +EObkKvbdZdxGzhIb +DoDLKvbdqwQMChyR +DoCkKvbdjlalZeGo +DncKjvbdZRNEhldq +EPCkKvbdZHXEAPSi +DoDKjvbdDoDLKwCd +DnbkKvbdmbJwYPNu +DncKjvbdMfcPlouL +DoCkKvbdQwODblHc +DoCjjvbdNQYQunGs +DnbjjvbdlqxtzSci +EOcLKvbdrDdhpNua +DncLKvbdKefICApu +EPDKjvbdatagXkUI +DoCjjvbdaofgDkzd +EObkKvbdIrxaTMwl +DncLKvbdSLYfVGkT +EPCkKvbdelevfmKL +DncKjvbdFfKSOIsq +EObjjvbdfILVqnQg +DncLKvbdZjShPgCG +DoCjjvbdrNZixlHi +DnbkKvbddoFTKstS +EOcKjvbdWSNwbFMD +EPDLKvbdpxngfqDx +EOcKjvbdIHGyxxYH +EOcLKvbdvwMAuaVu +EOcKjvbdkxrqryGt +DncLKvbdZjShQHBf +DnbjjvbdiUzEvquC +EObkKvbdpxoHfpcx +DoCkKvbdGAoRZJzm +EOcKjvbdehLVrOQg +EPDKjvbdkDMLRGuH +DnbkKvbdKCjDRKDY +EPCjjvbdLGFhBaRV +EPDLKvbdaMjbSuNH +DncKjvbdWfYzUAOs +DoCjjvbdsBelkfjy +DncLKvbdZnmheFZj +EOcLKvbdatagYLUI +EObkKvbdWXJXvEEg +DoDKjvbdZMRdTmlN +EPCjjvbdWXIwvEEg +DoCjjvbdkCkjqHUg +EPCjjvbdijFhJlxS +EPDKjvbdmSZUysEJ +DoDKjvbdMgDQMouL +EPCkKvbdrDdhomvB +EPCjjvbdRNXbYmtz +EPCkKvbdUtMtFlWK +DnbjjvbdGcjvJajK +EPDKjvbduaDyTOeI +DncLKvbdziuPocrt +DoCjjvbdcScKscjB +DncKjvbdmgExMmfy +EObjjvbdJcJcQibx +EPDKjvbdMpXpvNfs +EObkKvbdyqPNIjXA +EPCjjvbdCSaDUGWr +EOcKjvbdZnnJFEyj +EObkKvbdyOSgwriD +EPCjjvbdtkwwAtBX +DnbkKvbdDncLLXDE +EOcKjvbdZshhxcsO +DoCjjvbdxVMdpxlO +DncKjvbdLGGHaaQu +DoCkKvbdxUmFQyMO +EPDKjvbdpfEEsvAh +DoCkKvbdZRMdhldq +EPDLKvbdYzberJuy +EObjjvbdfHkWSOQg +EPDLKvbdRMxByNtz +DncLKvbdmoyyWLZC +EObkKvbdhtydvrVC +DoCkKvbdVhYWYGxz +EPDKjvbdbVCHXjsh +EPCkKvbdTlWPBVni +DncLKvbdFkEsCgmV +DnbkKvbdIsYaSlxM +DncKjvbdzaAOffbM +DncLKvbdaSFcHtGL +DoDLKvbdiGjDYuiu +EObjjvbdDigjVwjA +DncKjvbdqmZixlIJ +DnbkKvbdRjxfUgLT +EObkKvbdeAURNYKG +EPCjjvbdjvWnECXw +EPCjjvbdNQXqVmgT +DoDLKvbdxmsHxShc +EPCkKvbdqwPlChxq +DnbjjvbduLwwAsaX +DncKjvbduCbuWuno +DnbkKvbdJpydnenF +EPDLKvbdRXOEClID +DncKjvbdSKyFuGkT +DncKjvbdczZQYZRC +EPCkKvbdGZUtaDxC +EPCjjvbdOAJTUKSA +DnbkKvbdsZlQSaHn +DncKjvbduWNwiqTA +DoDLKvbdRNYCZOUz +DoCkKvbdVTmTfMVj +EOcLKvbdeATpmYJf +DncKjvbdbUbGxKsh +DnbkKvbdLZRKSztf +DncKjvbdcJMjLFwY +DnbkKvbdRadEkhyL +EPCkKvbdauBgXkTh +EObkKvbdrJAKFNOe +EOcKjvbdDnbjkXDE +DoDKjvbdrafMlGjy +EOcLKvbdliDtRVRa +EObjjvbdZjShQHCG +DnbjjvbdZnmiFEyj +EPDKjvbdbAueFpQX +EPCjjvbdVwJYVcdg +EObkKvbdijGIJmYS +DoCjjvbdJpyeOenF +DoDKjvbdYlSDsnMN +DncLKvbdehLVqmqH +DnbjjvbdTppnuVHm +EOcKjvbdSLYetgLT +EPCkKvbdZyEKOClS +DoDKjvbdHDjujBij +EPCkKvbdHkazmvpk +EObkKvbdkxrrTYft +EPCjjvbdOTUVfeVQ +DoCjjvbdYzbfSKWZ +DncKjvbdkxrrSxgU +EObjjvbdEOcKkXCd +EPDKjvbdcTCkTcia +DoDKjvbdatagXkTh +DoDLKvbdNHCpMpUk +DoDKjvbdhtzEvquC +EPCjjvbddePSBvbj +DoDLKvbddneTLUUS +DncLKvbdijFhKMwr +EPDLKvbdpxoIHRDx +DncLKvbdqquLOKaN +EPCkKvbdSCEEkiZL +DoDLKvbdvAdYroEh +DncLKvbdDwwksstM +EOcKjvbdKWVFcdgJ +EPDKjvbdZnmhdeZj +DoCjjvbdJSyBTMxM +DoDLKvbdtcDVXVoP +EOcLKvbdbAudfPow +EPCjjvbdpfDdtWAh +DncKjvbduCcUwWOo +DnbjjvbdGFirOItR +DnbjjvbdLBKgNBxR +DnbjjvbduVnYJpsA +DnbjjvbdjuvnDbXw +DoDKjvbdFkFTDINV +EOcKjvbdEvZQQMie +DoCkKvbdMfbolpUk +EPCjjvbdhbPCdwQq +DoDKjvbdZyEKNblS +EPCjjvbduCbtwWPP +DnbjjvbdgLGzbfAE +EObjjvbdqGDdsvAh +EPDLKvbdNGbolotk +DoCkKvbdSPsfifEX +DncLKvbdbVCGwjsh +EObkKvbdijGHjMwr +DnbjjvbdRosfifDw +DoCjjvbdQccApRDr +DoDKjvbdqTtHSSKt +EOcLKvbdsQWPJcVf +EObkKvbdeOdsLTsr +DncLKvbdcTDLUDjB +DoDKjvbdVgwvXfxz +EOcKjvbduoTzqKnt +EPCjjvbdYNqAYVWU +EObjjvbdemGXGmJk +DoCkKvbdVgxWXfxz +DoCjjvbdqlzKZLgi +EPDLKvbdLFfHaaQu +DnbkKvbdcSbkTcjB +EObjjvbdgGLzNgHA +EObjjvbdZjSgpGbG +DnbjjvbdGckVjBij +EOcLKvbdUMVnaWOi +EObkKvbdrylQSaHn +EPDLKvbdZHWdAOri +DoDKjvbdyfxlAMdw +DnbjjvbdZMSDsnLm +DoDKjvbdOTUVgEtp +DnbkKvbdJSxaSlwl +DncKjvbdkNCLzFGo +DoDKjvbdfMevgMik +DnbjjvbdMgDPlpVL +DncKjvbdqquLOLAm +DoCkKvbdfNFwGlik +DncLKvbdpxnhHRDx +DoDLKvbdZMRdTmlN +EPCkKvbdURRPVVHm +EPCkKvbdmgEwmOHZ +EOcLKvbdVAapsRSZ +DoCjjvbdczZPwxpb +EPDLKvbdWXIxWDdg +EPCkKvbdUVlQJtBR +EOcKjvbdelfWgNJk +EPDKjvbdUtMtFkuj +DnbjjvbdRkZFtfjs +EObkKvbdCJLCLJGK +DoDLKvbdKVuGEEgJ +DncKjvbdIxTbHkqQ +DncLKvbdMSWlzUpz +EPCkKvbdKefICAqV +EOcKjvbdtunXjRTA +DoDLKvbdZMSETmlN +EObkKvbdapHHELzd +EObkKvbdmRxtyrdJ +DoCjjvbdtTSSxzEc +EObjjvbddeOrBvbj +DncLKvbdJYUBgkpp +EPCjjvbduLxXBUAw +DnbjjvbdSLYetfjs +DncKjvbdzQnmIiwA +EPCjjvbdRpUGjFdX +EOcLKvbdddnqbWcK +EOcKjvbdWWhwucdg +EOcLKvbdCWzdJEov +EPDKjvbdTkuoAuni +DncLKvbdqUTgSSLU +DoDLKvbdNHDQMotk +DncLKvbdWXJXvEEg +EPCjjvbdaNKaruNH +EPDLKvbdraelkfjy +DncLKvbdLqvmZtpz +DnbjjvbdNddThhkE +DoDKjvbdzoQQdcLx +EPDKjvbdYpldiNFR +EObjjvbdZtJIyDsO +DoCkKvbdWWiYWDeH +DoCkKvbdeEoSBwDK +DoCjjvbdBsAcTevr +EObjjvbdqvpMChyR +EPCjjvbdsCGMlHKy +DnbkKvbduLwwAtAw +EObkKvbdMRwMyuQz +DncLKvbdwWlAuaWV +DncLKvbdHgHZxwxH +DncKjvbdBsAcTewS +DoDLKvbdJpyePFme +DncKjvbdVUNUFlWK +DncKjvbdEYXktTtM +DncLKvbdwMvANDeN +DnbkKvbdtSrTZZeD +EOcLKvbdJYUBhMRQ +DncKjvbdlYrrTZGt +DoDLKvbdliDsqUrB +EObjjvbdegjuqnQg +EObjjvbdlZSrTZHU +DncLKvbdfNGWfljL +DoDLKvbdLFegbBQu +DncLKvbdemGXGmKL +EPDKjvbdDwwksssl +DnbjjvbdxmsIYTJD +DoDLKvbdBsBCtGWr +DoCjjvbdIsYaTNYM +DncKjvbdJuuGEEgJ +EObkKvbdkySqsYgU +DnbkKvbdNPwqWNfs +EPDLKvbdmIdTptrB +DoDLKvbdyqOmIjXA +EPCjjvbdhkeEOUcZ +DoDKjvbdJqZePFme +EPDLKvbdfSAvzlCo +EObjjvbdbhljLFvx +EOcLKvbdaMkBsUmH +DoCjjvbdKyRKSzuG +EObjjvbdcSbjtEJa +EOcLKvbdkHflGFmk +DoDLKvbdemFwHMjL +EObjjvbdSLZGVHLT +DoCjjvbdJXtCILpp +EOcLKvbdaaVdfPow +EOcLKvbdFpATWgGZ +DoCjjvbdxZgeewdr +EObkKvbdeEnqawCj +EObjjvbdhytfMQmf +DnbjjvbdoznEKxPA +DnbjjvbdoAKzsgdO +DoCkKvbdYzbfRivZ +DoDLKvbdqqtkOKaN +DncLKvbdqvokcJYq +EPDKjvbdOStVfeUp +DoDKjvbdZxcinDLr +DoCkKvbdcyyQYYqC +EObkKvbdcIlikGWx +EOcLKvbdffLzNgHA +EPCjjvbdMtsRkNAX +EOcKjvbdpeceTvBI +EOcKjvbdZsiIxcsO +DncLKvbdJvVGDdgJ +DnbkKvbdZMRdTmlN +EPDLKvbdnCJwXnnV +EObkKvbdxUldqZLn +EPCjjvbdNddUJIkE +DoCjjvbdyYJJapZk +DnbjjvbdpxoHgQcx +EObjjvbdHDjvKBij +DncKjvbdUtNUFlWK +EPCkKvbdkVvmdBww +DnbjjvbdgGMZmgHA +DoDLKvbdmIdTqVSB +EOcLKvbdzitpPdTU +DncLKvbdkxrqrxgU +DoCjjvbdVBBpsRSZ +EOcLKvbdGFiqmiTq +EOcKjvbdxsOJMqag +DoCkKvbdHDkVjCJj +EPDKjvbdjSziTKiz +EOcKjvbdCTAbsewS +EPCkKvbdkWWnDbYX +DoDLKvbdJSxaTMxM +DoDLKvbdMoxRWNgT +DoDLKvbdmuVZkJrG +EPDKjvbdbUbHXjtI +DnbjjvbdkWWnEBxX +EOcLKvbdnPyxukZC +DnbjjvbdXrlBMtOx +DoDLKvbdJuuGEFGi +EPDKjvbdUaBprprZ +EObjjvbdsrqrxydc +EObjjvbduCbtwWOo +DoCkKvbdSLYeuHLT +DoDKjvbdKQyePFme +EOcKjvbdeYZssrFz +DoDKjvbdpxoHfpdY +EPCkKvbdcIljKfXY +EPDKjvbdDwwksstM +DnbkKvbdsQWOicVf +EPDLKvbdIidAKQHE +DoDLKvbdrDeJPnWB +EOcLKvbdZoNiEeZj +EObjjvbdptTgRrLU +EPDKjvbdmRyUzTEJ +DoDLKvbdFxtuBEYC +DnbkKvbdehLVqmqH +EPCjjvbdUtNUGLuj +DoDLKvbdxVNEqZLn +DncKjvbdySnImRbH +DoCjjvbdbLMGPNcA +EPCkKvbdzQoMiKXA +DnbkKvbdbiMijevx +EOcKjvbdSQTfiedX +DnbjjvbdZisIQHBf +EObkKvbdYpleIldq +DncLKvbdjmBlZeHP +DncKjvbdSCDdkhxk +DnbkKvbdrykpTAgn +EObkKvbdZQldiMeR +DnbjjvbdeYZssqez +EPDLKvbdlYrrSyHU +EOcLKvbdTpqOttgm +EOcKjvbdCJLCLIej +EPDKjvbdUQqOttgm +EObkKvbdGBOqZJzm +DncKjvbdqwQMDIyR +EPDKjvbdbBWFFoow +EOcLKvbdZMRctOLm +EPCkKvbdHEKuibKK +DnbjjvbdNddThiKd +DncKjvbdJuuFdEgJ +DncLKvbdRzJgsDWA +DncLKvbdRWmdCkhD +EPCjjvbdZRNFImEq +EOcLKvbdUaBqTRSZ +EObkKvbdWIXvYGxz +DoDKjvbdrRuKnKaN +DoCjjvbdYgXEAPTJ +DoCkKvbdwuMeQyMO +EPDLKvbdkHfkfFmk +DoDKjvbdTqQnuUhN +DoCkKvbdbKlFoODA +EObkKvbdrzLoraIO +DncLKvbdFxuVAdYC +DoCjjvbdZQldiMeR +EOcKjvbdJTZBTNXl +EPDKjvbdsQWPKCvG +EOcLKvbdeEoRawDK +EPDLKvbdtTSSxzEc +DncLKvbdliDsqUqa +DnbjjvbdZQleImEq +EPCjjvbdaSGDITek +DoDLKvbdRWnDbkhD +EPDLKvbdpedEsvAh +EPCkKvbdYpldhldq +DoCjjvbdZoOJEdyj +EOcLKvbdmoyxvKyC +EObjjvbdmSZVZsEJ +DoDLKvbdqUUGrSLU +EPDLKvbdmpZxujyC +EPCjjvbdCDpBVilf +EPCjjvbdFfJrNhsq +DoDKjvbdsZkosBIO +DnbjjvbdiBnbdvpq +DncKjvbdkDMKpftg +EPCkKvbdatbGxLTh +DoCjjvbdJTYaTNXl +DnbjjvbdhkdcnVCy +DncLKvbdyNrgxTIc +EPDLKvbdyNsHwriD +EPDLKvbdBdQBVilf +DoDLKvbdIsYaTNXl +DnbkKvbdkxsSTZHU +EPCjjvbdBsBDUGWr +EOcLKvbdgQBzwDxI +DnbjjvbdjblLQfuH +DnbkKvbdbVBgYKsh +DncLKvbdMgComPuL +EPDLKvbdqceIpOVa +DnbjjvbdqFceTvAh +EPCjjvbdFWYpQNJe +DoDLKvbdHDjujBjK +DncLKvbdIHGyyXxH +DnbjjvbdeFOqawCj +DoDKjvbdGQASwGfZ +DncLKvbdrWokbhyR +DncKjvbdSKyFtfkT +DoCkKvbdemFvfmKL +EPDKjvbdxsNhmRbH +EOcKjvbdsPunicVf +EObjjvbdrbGNMGjy +EPDLKvbdOXoVzcnU +EOcLKvbddZxpYYpb +DoDKjvbdVBBpsRRy +EPDKjvbdHDkWKCKK +DoCkKvbdSiZjRAAl +EPDKjvbdURQoVVHm +DoCkKvbdpyPHgQdY +EOcKjvbdGAoQxizm +DnbjjvbdMpXpvNfs +DncKjvbddndrjtUS +DnbkKvbdlhcsptqa +DoCkKvbdfNFvfmKL +EPCkKvbdHffyxxXg +DoCkKvbdYpleImFR +DoCkKvbdbBVdfPpX +DncLKvbdWSNxBdlD +EPDKjvbdSQTfjFcw +EPCjjvbdkxrqsYgU +EPDKjvbdrovOjCvG +DoCjjvbdaSGCgsek +DncLKvbdZGwEAOri +DoDLKvbdJmADzHUa +DoCjjvbdNdcshiKd +DoCkKvbddneTLTtS +EObkKvbdMoxQumfs +DncKjvbdVgxVwfxz +DoDKjvbdGcjuibKK +EObkKvbdTqQnuUhN +DncKjvbdURRPUuIN +EObkKvbdbrbjtEJa +DnbkKvbdKQyeOenF +EObjjvbdbKkfOnDA +EPDLKvbdlhdTptrB +EObjjvbdxnTHxTJD +EObjjvbdKCjCpjDY +DoDLKvbdMSWmZtpz +DoCkKvbdBsBCsfXS +DnbkKvbdfRaWzkcP +EPDKjvbdbAvFGQQX +DoCjjvbddoFSjtUS +DnbjjvbdypoNJJwA +EPDKjvbdzdzOzdyp +EObjjvbdJpzEoFme +DoCkKvbduCbuXWPP +EPCkKvbdFfJrOItR +DoDLKvbdkIGlFfOL +DnbjjvbdbAudfPpX +DoDLKvbdtAHRIABS +EOcLKvbduDCuWuno +DoDKjvbdkHgLfGNk +EOcLKvbdxZhFeweS +EObkKvbdUxgszKoO +EOcKjvbdiBoCeXRR +DnbkKvbdZeXfzhJC +EObkKvbdtcDUvvPP +EOcKjvbdMtrrLNAX +DnbkKvbdWXJYVceH +DnbkKvbdJbjCpibx +EPCkKvbdajlFnnDA +DnbjjvbduaEZTPEh +EOcKjvbdGcjuibJj +DncLKvbdKefHbAqV +DoDKjvbdUxgtZjnn +EPCjjvbdVZITzKnn +EPDKjvbdHkaznXRL +DnbkKvbdOEdTiIkE +DnbjjvbdiGjDYvJu +DoDKjvbdnUtykJrG +EPCkKvbdBdQBWKNG +EPDKjvbdsBemLfkZ +EPCjjvbdtumwiqTA +EOcKjvbdnCKXYPOV +DncLKvbdVwIxVdFH +DnbjjvbdWIYWYGxz +EObkKvbdFpATXHFy +DoCjjvbdauBgXjtI +DnbkKvbdTqROuVHm +DnbjjvbdlhcsqUqa +EPDLKvbdxZhGGXeS +DoDLKvbdZjTHogCG +EOcKjvbdbKlGOnDA +EObjjvbdLiBlRYAS +DncKjvbdxrnJMrCH +EOcLKvbdMJBlRYAS +EOcKjvbdUsmTekuj +DnbjjvbdEYYMTssl +EObkKvbdZMSEUNkm +DncLKvbdGGKSNhsq +DoDKjvbdGZVVAdXb +EPDKjvbdKRZdoFnF +EOcLKvbdEXwlUTtM +DoDKjvbdEztQeLcJ +DoCkKvbdJYUBglQp +DoCkKvbdJTZAsNXl +EObjjvbdvmWAMdEm +EPCjjvbdxZgefYFS +DncKjvbdtTRrxzEc +EOcLKvbdiGjDZWJu +DoCkKvbdYlRctOLm +DncKjvbdDxXlTtUM +EPCjjvbdcyxpYYqC +EOcLKvbdqGDeUWBI +DnbjjvbdnPyxvLZC +DoDLKvbdKefHbApu +DoCkKvbdjblKqHVH +EObkKvbdTfzmkvue +EOcKjvbdZnmiEdzK +EOcKjvbdDxXkstTl +EPDLKvbdBdQAujMf +DoDKjvbdGZVVBDwb +DoDLKvbdEvZPpMie +EPCjjvbdVwJXuceH +DoDLKvbdRjyFtgLT +DoCkKvbdXsLaNTnx +DnbjjvbdDHLfHAzc +DoCkKvbdVBCQrprZ +DoCkKvbdyNsIYShc +EPDKjvbdyXiJbPzL +DoCjjvbdUsltFlWK +EPCkKvbdcyyQYZRC +DnbkKvbdddnqbWbj +EPCkKvbdmuUyjjSG +EObkKvbdZyDinDLr +DnbjjvbdZtIiZESn +EPCjjvbdVBCRTRRy +EOcLKvbdCWzciFPv +EObkKvbdrEFJPnWB +DnbkKvbdqUUHSRkU +EPDLKvbdlqyUyrci +DoCjjvbdIMBznXQk +DoCjjvbdUxgsykOn +EPCjjvbdXsMBMsnx +DncKjvbdjuvmdBxX +EOcLKvbdkIGkeemk +DoCjjvbdjKGIKNYS +EPDLKvbdSLZGVGjs +EOcKjvbdMfcPmQUk +DoCjjvbdrNZjYlIJ +EOcLKvbdkyTSTZHU +EObjjvbdjAQGaQHK +EPDKjvbdMoxRVnHT +EObkKvbdeATpmXif +EObkKvbdFjdsDHmV +DncLKvbdbLLfOmcA +EPCkKvbdunszqLOt +DnbkKvbdnQZxvLZC +DncLKvbdZyDjNblS +DnbkKvbdptTfrSKt +DoDLKvbdzaAOgHCM +EPCjjvbdhbPCeXRR +DnbkKvbdmuVZkKSG +DoCkKvbdziuQQESt +DnbkKvbdhgKDZWKV +DnbjjvbdULuoBWPJ +DncLKvbdWXJXucdg +DoCjjvbdRacdlJYk +DoDLKvbdegjvSNqH +EOcLKvbdnUtzLKRf +EOcKjvbdFxtuBEXb +DoCkKvbdmIcsqUrB +EObjjvbdULvPAvPJ +EOcLKvbdSwkLmzkY +EPCkKvbdSZjITCvA +EPCkKvbdeOdrjtUS +EPCjjvbdIxUBhLpp +EObkKvbdqiAJeMoF +DnbkKvbdhlEcmtcZ +EOcLKvbdFejRnJTq +EOcKjvbdwXMAvBWV +DoDKjvbdmpZyWLZC +DoCjjvbdGLErbhNV +DoDLKvbdmaivwnmu +EOcLKvbdOXoVzcnU +DncLKvbdBhjbLJGK +EPDKjvbdZjTIQGaf +DoCkKvbdgPazwEYI +DncLKvbdGGKRmiUR +EObjjvbdfHkWRmpg +DnbkKvbdXrkaNUPY +EPCkKvbdzQoMhiwA +EOcKjvbdrpWOjDVf +DncKjvbdZtJJZDrn +EPDKjvbdqZOggRDx +DnbjjvbdhgJbyWKV +DoDKjvbdiVZdwRuC +DoDKjvbdIwtCHkpp +DoDKjvbdVAapsRRy +EPDLKvbdwjvcgzzG +DoDLKvbdRyihScWA +DoDLKvbdrRuKmkAm +DnbkKvbdqGDdsuaI +EPCkKvbdAMhYrwZx +DncKjvbdSPsfjGEX +DncKjvbdczYpXxpb +DoDLKvbdkIHMGFmk +EPCjjvbdkClKqHUg +EObkKvbdxVMdqZMO +DoDKjvbdBdQBVjMf +EObkKvbdZjTHpGbG +EPDKjvbdTfzmkvue +EPCkKvbdLAjfmCXq +DoCjjvbdLGGHbApu +EPDKjvbdEzsqEkcJ +DoDKjvbdwygfGYFS +DoDLKvbdhgJbyWKV +EPDLKvbdZshiZETO +EPDLKvbdKWUfDdfi +DnbkKvbdqYoHgQcx +DncKjvbdnGeYMmgZ +EPDKjvbdKCjDRKDY +DoCkKvbdJcKDQibx +EObkKvbdZoNiFFZj +EPCkKvbdUyHsykPO +EOcKjvbdtvNxKQsA +EObjjvbdatafwjtI +DoDLKvbdhzVFkpmf +EObkKvbdMgComQVL +EPCkKvbdSCEEkhxk +DoDLKvbdgFlZnGgA +EObjjvbdZMSETnLm +EObkKvbdtumxKQsA +EObjjvbdZoOIddyj +EOcLKvbdqZOggQcx +EOcLKvbdKfFhBaQu +DncLKvbdzGxlANEw +EObjjvbdehLWRnQg +EObkKvbdEPCjkWbd +EObkKvbdqYnhHRDx +EObkKvbdjvXODaww +DnbjjvbdqTsgSRkU +EOcKjvbdTqQoVVHm +DnbjjvbdQmYBxnUz +DnbjjvbdpyOhGqEY +EOcLKvbdLGGHbAqV +EObkKvbdZirgpHCG +EObkKvbdqYnhGpcx +DncLKvbdrbGNLgKy +EObkKvbdkySrSxgU +EOcLKvbdeAUQlwjG +DncKjvbdkVwNdCYX +DoCjjvbdJvVGDeHJ +EPCkKvbdEuyPpNKF +EOcKjvbdDjHivXjA +DnbjjvbdkNCLydfo +EPCjjvbdZjTHogBf +DoDKjvbdGKeTDINV +DnbkKvbdJXtBglQp +DnbjjvbdFejSOIsq +EOcKjvbdhytelRNf +DnbjjvbdbBVdeopX +DoCkKvbdFjdsDINV +DoDLKvbdjvXNcbXw +DnbkKvbdZdxGzhJC +EPDLKvbdjAPgBQGj +EObjjvbdJXsbHkqQ +EPDKjvbdiVZdwRtb +EObjjvbdGFjSNiTq +EPDKjvbdznpQdbkx +EPCjjvbdemFvgNKL +EPDKjvbdWXIxWEEg +DncLKvbdEObkKvcE +DnbjjvbdLAjfmCYR +EPDLKvbdEXwkstTl +EObjjvbdFfKSNhsq +DncKjvbdygZMANFX +EPCkKvbdYqNFIleR +DoCkKvbdSKyGUgLT +DncKjvbdBdQBVjNG +DnbkKvbdbUagYLTh +EOcKjvbdsPunjDWG +DncLKvbdrEFIonVa +DncKjvbdaSGChTfL +DoCkKvbdcJNKKfXY +EObkKvbdULuoBWOi +DncLKvbdKWVGEEgJ +EPCkKvbdqFdEsuaI +EPDKjvbdAMgySvyx +DncLKvbdiUzEwRuC +EObjjvbdZoNheEzK +DnbkKvbdZLrETnMN +EObjjvbdKWVFcdfi +DoDLKvbdcScLUEJa +EPCkKvbdIwsbIMRQ +EOcKjvbdsBemMHKy +EOcLKvbdzitoodSt +EPDKjvbdrMyjZLhJ +DnbjjvbdaRfCgsfL +DoCkKvbdKQzEnenF +EOcLKvbdUGznLvue +DncLKvbdZxcinCkr +DnbjjvbdEuyPpNKF +DncKjvbdGFirOIsq +EOcLKvbdVqmxBeMD +EOcLKvbdwuMeRZLn +DnbkKvbdBhkBkIej +EOcKjvbdNQXpumfs +EObkKvbdVBCRTRSZ +DoDLKvbdZeYGzhJC +DncLKvbdREDBPqES +DnbjjvbdvBEZSoFI +EPCjjvbdakLeoNcA +EPDLKvbdeFOqbWbj +EPDLKvbdiGicZWJu +EPCkKvbdEKHiuwjA +EPCjjvbdwkWcgzyf +DoDKjvbdmpZyVkZC +EPCkKvbdSZihSbvA +EPDKjvbdelevfmKL +DnbjjvbdeATplwif +DoCjjvbdGAnpxizm +EPDKjvbdTlWPBWOi +EOcKjvbdmSYtzTEJ +DncLKvbdnGeXmNfy +DoDKjvbdTIzJqAAl +EOcKjvbdqdEiPnVa +EOcKjvbdcTCkUEKB +DoCjjvbdEvYopMjF +DoDLKvbdwuMdpyMO +EPDKjvbdEuyQPlie +EOcLKvbdVUMsfMVj +EObjjvbdijFgilxS +DoDKjvbdnPyxujyC +EOcKjvbdTAFIgbPE +DnbkKvbdZxdJnDLr +DncLKvbdqdEiPmua +EOcKjvbdhgJcZVjV +DnbkKvbdRbEFLhxk +DoDKjvbdmaivwoNu +DoCkKvbdZQmFJMdq +DncLKvbdeYZtTqez +EObkKvbdqYoIGpdY +DnbjjvbdEASJMyvw +DoDKjvbdwzHfGYFS +DncKjvbdjvXOECYX +DncLKvbdbBVdepQX +DoDLKvbdrEFIomua +DnbjjvbdYgWdAOsJ +EOcKjvbdkMakydfo +EPCjjvbdegkWSNqH +EPDLKvbdYlSEUNkm +EPDLKvbdzRPMhjXA +DnbjjvbdmSZUyrci +EPDKjvbdiiehKNXr +EPDLKvbdwzIGGXdr +DncKjvbdSLYetfkT +EOcLKvbdURROtuHm +EPDLKvbdEYYLtUUM +EOcLKvbdaSGDIUFk +DnbkKvbdhfibyViu +DncKjvbdeFOqavcK +EPDLKvbdZtIhyETO +EOcKjvbdsPuoKDVf +DoDLKvbdBhkBjiGK +EPDLKvbdnQZyVkYb +DncLKvbdNsTugEtp +EPCjjvbdCDpBWJmG +DoCkKvbdmIdTqVRa +EOcKjvbdptUHRqjt +DnbjjvbdRpTfifDw +DncKjvbdaRebgtFk +EPDLKvbdEARiMyvw +EOcKjvbdyNsHxShc +DoCkKvbdxKwDgzyf +DncKjvbdwuNFQyLn +DncLKvbdegjvSORH +DncLKvbdOStWGdtp +EOcLKvbdcTCkTdKB +DncKjvbdRECaQRES +DoDLKvbdkIHMFemk +EPCkKvbdfjfzcGAE +DncKjvbdZLqdTnLm +EOcKjvbdIMBzmwRL +EOcKjvbdwzHeexFS +EPCjjvbdKVuFdFHJ +EPCjjvbdRXODcLgc +DoDLKvbdlrZVZrdJ +EPDKjvbdjKGIJmYS +EObkKvbdHEKujCJj +DncKjvbdNddTiIjd +DoDKjvbdZjSgpGaf +DoCjjvbdmfeXlnHZ +EPCjjvbdRosfifDw +DoCjjvbdZxcinDLr +DoCjjvbdNeDsiIjd +EPDKjvbdVgxVwgYz +DnbkKvbdqTtGrRjt +DnbkKvbdTqQntuIN +DncKjvbdBvzdJEpW +EPCjjvbdqUUHRrLU +DnbjjvbdqcdhonWB +DncKjvbdHDkWKBjK +DnbkKvbdxVMeQxlO +EObjjvbdkClKpgVH +EOcLKvbdCSaDUGXS +DncLKvbdUQqOttgm +DoCkKvbdZxcjOClS +EPDKjvbdVqmxCFMD +DnbjjvbdqmZixlHi +DnbjjvbdiUydvquC +DoCkKvbdOTTugFVQ +EOcKjvbdUQpoVVIN +DoCkKvbdNHDPlpVL +EOcLKvbdDncLKwCd +EOcLKvbddeOrCXCj +EObjjvbdqvolChyR +EOcLKvbdaofgELzd +DoDLKvbdrpVoKDWG +DncKjvbdaMjasUmH +EObjjvbdliETqUrB +DncLKvbdXsLaMtOx +EObkKvbdrykpTAhO +EPDKjvbdehKvRmpg +EObjjvbdUxhTzKnn +DncLKvbdTfznMXVe +EPDLKvbdqUTfqqkU +DoCjjvbdHELWKCKK +DoDLKvbdwuNFQyMO +DoCjjvbdffLynGgA +EOcLKvbdSLYetfkT +EPDKjvbdtTRryZeD +EPDKjvbdddoRbXDK +DoDKjvbdFVxooljF +DoDLKvbdxsNiNSCH +DoDLKvbdsCGNMGkZ +EOcLKvbdkHfkfFnL +EPCkKvbdqrUjnLAm +DnbkKvbdHELViajK +EOcKjvbdNHDQMouL +EPCkKvbdWWhxVdFH +DnbkKvbdUWMPitBR +DncLKvbdZoOJFFZj +DncKjvbdcIljKewY +DoDLKvbdVUNUGLvK +EObkKvbdNsTufdtp +DnbjjvbdGKdsCgmV +EObkKvbduDCtwWPP +EObjjvbdkMbMZeGo +EPCkKvbdJSyAsNXl +DnbjjvbdmbJwXnmu +EPCkKvbdRjxeuGkT +EObkKvbdaSFcITek +EPDLKvbdGYtuAdYC +DoDKjvbdFeirNiUR +EPCjjvbdhyuGMQmf +EObjjvbdDxYLstUM +EObkKvbdFfKRmhtR +DnbkKvbdyTNhmSCH +EPCjjvbdJSyAsNYM +EPCkKvbdEuxpQMie +DoDLKvbdkClLQgUg +DnbkKvbdssRrxzEc +EPDLKvbdRMwbZNtz +EPCkKvbdssSTYyeD +DoCkKvbdYqMeImEq +EOcLKvbdjuwOECXw +EOcKjvbdOTUWHFUp +EPCjjvbdliDtQtrB +EPDKjvbdZxdJmblS +DoDKjvbdbVCHXkTh +DoDKjvbdpstHSRjt +EOcLKvbdNPwpunGs +DoCkKvbdLAjgNCXq +DoCjjvbdDoDKjvbd +DoCkKvbdZirgpHBf +EPDLKvbdezuxdiTw +DoCkKvbdLrXMyuQz +DncLKvbdqlyjYkgi +DnbkKvbdLrWlzUpz +DoCjjvbdhytfLpnG +EObjjvbdxrmiNSBg +EPDLKvbdqquLNjaN +EObjjvbdiHKCyVjV +DncKjvbdjSziTKiz +EPCjjvbdCflGHAzc +EPCjjvbdZtJJZDrn +EPCjjvbdJKEAKQHE +EPDKjvbdIxTbHlRQ +EOcKjvbdZRMdhmEq +EOcLKvbdmttykJqf +DncLKvbdEzsqFMDJ +EPDKjvbdJuteceGi +EOcKjvbdemFvfmJk +DoCkKvbdkySqsZGt +EOcLKvbdlrZVZsDi +EOcLKvbdEXxLstTl +DnbkKvbdkNBlZeHP +DncLKvbdauCHYKsh +EPCkKvbdhuZeXSVC +EPCjjvbdOTTufdtp +DoDKjvbdDoCkKwCd +DoDLKvbdOAIrsirA +EPCjjvbdlAmPNALA +EOcLKvbdiBoCdwQq +DoCkKvbdnCJwYOnV +EOcLKvbdqwQLbhxq +DncLKvbdGYuVBEYC +EPCjjvbdcyyQXxqC +EPDKjvbdrEEiPmvB +DnbkKvbdJbibqJbx +DncLKvbdiGjCxuiu +EObjjvbdjKGIJmXr +EPCjjvbdFkEsDIMu +EPDKjvbdCWzchePv +EObjjvbdEObjjwDE +EPCkKvbdQdDApRDr +DoDLKvbdbAvEfQPw +DoDLKvbddtAUATNW +DnbjjvbdUxhUZkOn +DnbjjvbdwNWANEEm +EPCjjvbduDCuWuoP +DnbjjvbdjAQHApHK +DncLKvbdJzpFxEAN +DncKjvbdwtldpxlO +EObjjvbdBraCtGWr +EPDKjvbdJmADzGuB +DoDLKvbdRadEkiZL +DoCkKvbdAMhZTXZx +DoCjjvbdqGDeUVaI +DoCjjvbdVvhxWDdg +EOcKjvbdSBceMIyL +DnbkKvbdRkYfUfjs +EOcLKvbdFWYpQMjF +DoDLKvbdhlFENuCy +EObkKvbdiCObeWpq +DnbkKvbdHELWJaij +EObkKvbdCTAcTfWr +EPDKjvbdbrcLTdJa +DoDLKvbdDncKkXDE +DoCkKvbdmSYtzSdJ +EOcLKvbdVZHszLPO +DnbjjvbdhkdcmuCy +DnbkKvbdLrXNZuQz +EPDKjvbdZnmiFEzK +EPCkKvbdlrZVZsEJ +DnbjjvbdqmZixkhJ +DoDLKvbdcTCjsdKB +DoCkKvbdcyyPxYqC +DoDKjvbdssRrxydc +DoDKjvbdvPTzpjnt +EObjjvbdZLqctOMN +DoDLKvbdRNXbYnUz +DncKjvbdJYUBglRQ +EObkKvbdkIGlGFnL +DoDLKvbdiUzEwSUb +EPDKjvbdeEnrCWbj +DoDLKvbdRbDdkhxk +EObjjvbdYzcFqjWZ +EOcLKvbdjggLfFnL +DncLKvbdgQBzwEXh +DoCjjvbdQlxByNtz +DnbkKvbdoznDjwoA +DnbkKvbdVgwuxHYz +DoDLKvbdaaVdepQX +DoDKjvbdLZRKSztf +EPDKjvbdbUbHXkUI +EOcLKvbdjhGkfFmk +EObkKvbdeEoSBvcK +DncKjvbdUtMtGMVj +EPDLKvbdJTZAsMxM +DnbkKvbdOEdUJJKd +DoDKjvbdZHXEAPSi +EObkKvbduaDyTPFI +DnbjjvbdqAiFAWhE +EObjjvbdelevgNKL +DnbjjvbdTAEhgbPE +DoDKjvbdnPzZVkZC +DoDKjvbdQwNdDLhD +DnbjjvbdnBjWwoNu +EObkKvbdfMewGljL +DncKjvbdrpVnjCuf +EPDLKvbdLGFgbBRV +EObkKvbdkCkkRHUg +EObkKvbdTlVoAuoJ +EPDLKvbdrMyjZMHi +EOcLKvbdWHwuxHYz +EOcKjvbdLrXNZtpz +EObjjvbdbQHHDkzd +EOcLKvbdfILWRnRH +EPCjjvbdyfyMAMeX +DncLKvbdNHCpNQVL +EPCjjvbdFkEsDHlu +DncKjvbdGGJqmhtR +DnbkKvbdvAcxrndh +DoCjjvbdqGDeTvBI +DoCjjvbdJvUfDdgJ +DoCjjvbdUVlPisaR +DoCkKvbdqTsgSRkU +EObjjvbdjblKpftg +EObkKvbdtcDVXWPP +DnbkKvbdfHkVqnRH +DncLKvbdmoyxvLZC +EObjjvbdkHfkfFnL +EPDKjvbdwNWAMcdm +EPCjjvbdJpzFOfNe +DncKjvbdmbJvxOnV +DncKjvbdTqQnuUgm +EOcLKvbdTpqOuVHm +DoCjjvbdYlSETmkm +DoDKjvbdjEkGuPAO +DoCkKvbdwygefXdr +EObkKvbdrXPkcJYq +DoCjjvbdxUleQyMO +EOcLKvbdBsAcTfXS +EPDLKvbdLBLGlbXq +EObjjvbdmbJvwnnV +DnbjjvbdbVCGwjsh +DnbkKvbdxUmEpyMO +EPCkKvbdYSlBNTnx +DoDKjvbdeOeSkUTr +DncLKvbdqmZixlHi +EPCkKvbdNHCpNQVL +DoCkKvbdDigjWXjA +EObjjvbdrDeJQNvB +EOcLKvbdJuuGDeHJ +DoCkKvbdddnrCXCj +DoDKjvbdqTtGqrKt +DoDKjvbdeOeTKstS +EObjjvbdySmiNRbH +DnbjjvbdZshiYdTO +EObjjvbdnCKXXnmu +EPDKjvbdqiAKFMne +DoDKjvbdNeEUIiKd +DnbjjvbdzitpPdTU +EPCkKvbdzaAOffal +EOcKjvbdZtIiZDrn +DoCjjvbdtSrTYyeD +DoDLKvbdFVxopNJe +DoDLKvbdJJdAJpHE +DoDLKvbdHDjuiaij +EObkKvbdUWMQKUAq +EPDKjvbdTpqOuVIN +EOcLKvbdqvpMChyR +DoCkKvbdVviXudEg +DoCkKvbdGLErbgmV +EPCkKvbdZirhPfbG +DoCkKvbdWXJYVceH +DnbjjvbdhkeEOUcZ +DncKjvbdSPtHJedX +DncKjvbdFfKRnIsq +DncKjvbdWWhxVdEg +DoCkKvbdOStWHEuQ +DoDLKvbdEuyQPmKF +DncKjvbdrpVoKDWG +DoCjjvbdKVtfEEfi +DoCjjvbdWXIwudEg +EPDKjvbdSCDeMIyL +EPDKjvbdDoDKkXCd +DoCkKvbdJpzEnenF +EPDKjvbdaaWEfPow +DoCjjvbdVwJXucdg +EPCjjvbdauCHYKtI +EOcLKvbdNeDshhkE +DncLKvbdNGcQMpVL +EOcLKvbdIryBSmXl +DnbkKvbdTAFJICPE +EOcLKvbdrMzKYlHi +EOcKjvbdznopeDMY +EOcLKvbdMRvmZuQz +DncKjvbdeFOqbXCj +DncLKvbdbhlijfWx +EOcKjvbdqdEhpOWB +DoDLKvbdUWMQJsaR +DoDLKvbdptUGqrLU +EObjjvbdaSGChUFk +EPCjjvbdYTMAltOx +DncKjvbdEPCkLWbd +EOcKjvbdKCjDRKCx +EPDKjvbdZyDjNcMS +DncLKvbdFfKRnJUR +EPDKjvbdrNZiyLhJ +EOcKjvbdZeXfzgiC +EOcKjvbdbUbGwkTh +EPDLKvbdHfgZxwxH +DncLKvbdrovOjCuf +DnbjjvbdfNGWflik +DnbkKvbdZoNiFEyj +EPCjjvbddneTKtUS +EObjjvbdRbDdlIxk +EOcKjvbdKfFgbBRV +EPDKjvbdFyUuBDxC +EPCkKvbdiUzFXRtb +EPCjjvbdrJAJeNPF +DncLKvbdVAbRSqSZ +EObjjvbdaNKbTVMg +DoCkKvbdlhctQtqa +DoDKjvbdZshiZDrn +EPDLKvbdFkFSbglu +EPCjjvbdHffyxwxH +DncKjvbdTvLojTaR +DnbkKvbdauCHXkUI +DoDKjvbdGdKuiajK +EOcKjvbdkClKqHVH +EPDLKvbdnUtykKSG +DnbkKvbdBiKbKhej +DoDLKvbdHffzZXwg +EPCjjvbdbrbkTcjB +DoCkKvbdVwJYWDdg +DncLKvbdJJdAJogE +EPCkKvbdJvUfDdfi +DoDKjvbdZeYGzgiC +EObjjvbdZyEJnDMS +EOcLKvbdmSZVZsEJ +EPCkKvbdDnbjjvbd +EPCkKvbdJvVGDeGi +DoCjjvbdTXkLmzkY +DnbkKvbdLqwNZuQz +DncKjvbdZtIiYcsO +DoDKjvbdLYqKSztf +DnbkKvbdULuoBVni +EObkKvbdiBnbeWqR +EObjjvbdfILWRmqH +DncKjvbdezvYdhsw +DnbjjvbdJvUfEEfi +EPCkKvbdRpUHKGDw +EObkKvbdZGwEAPTJ +EOcLKvbdcTCkUEKB +EObjjvbdGAoQxizm +DnbjjvbdNwoVzcmt +DncLKvbdJbicRKDY +DnbkKvbdGZVVAcxC +EPCkKvbdRadFMJYk +DnbjjvbdxsNiNRag +DnbjjvbdiBncFXRR +EPCjjvbdySmiNRbH +DoDKjvbdeATqMxKG +DnbjjvbdtSrSyZdc +EOcKjvbdwtldpyLn +EPDKjvbdqwPkbiYq +EPDLKvbdzitpPcsU +DoDKjvbdDjHiuwjA +EPCkKvbdfMewGmKL +DncKjvbdlrYtyrci +EPCjjvbdZQldiMdq +EPDKjvbdJbjDQjCx +DncKjvbdqTsgRrKt +EPCkKvbdEvZQPljF +DoCkKvbdUsltGMWK +EOcLKvbdEJgivXjA +DnbkKvbdePFTLTtS +EPDKjvbdEYYLstTl +EPDKjvbdMfcPmPuL +DoDKjvbdBsAcTevr +EPDLKvbdwtleRZMO +EObjjvbdRotHJfDw +EOcKjvbdJuuFdFHJ +DnbjjvbdZoOIeFZj +DoDLKvbdsZlQSaHn +EPCjjvbddoFTLTtS +DncKjvbdbVBgXjsh +EPCkKvbdaMkBrtlg +EPDKjvbddiiqutzn +EObkKvbdiZuFkpnG +EPCkKvbdIxTaglRQ +EOcKjvbduaEYrndh +DnbjjvbdzQoMiJwA +DoCkKvbdsCGNMHKy +EObjjvbdMoxQunHT +DnbkKvbdxwiJbPzL +EOcLKvbdJbibpjCx +DncKjvbdIxTbHkpp +DoCkKvbdwuMeQxlO +EOcKjvbdKeehCBRV +EPCkKvbdZxdKNblS +EPCjjvbdLFegbBQu +DoCkKvbduLwwBUBX +DoDKjvbdjlbMZeHP +DoDLKvbdjAPfaPfj +EObjjvbdqGEFTvBI +EObjjvbdeAURNXif +EObjjvbdxmrgxTJD +EPCkKvbdqGDeUWAh +DncKjvbdqTsfqrKt +EObjjvbdjEjftoAO +EOcKjvbdNrtWHFUp +EObkKvbduCcUvvOo +EPCkKvbdvwMAvBWV +DncLKvbdtkwwBUBX +DoCjjvbdVZHsyjnn +EPDKjvbdQccBQQdS +DnbkKvbdjgfkeemk +EPDLKvbdFyVVBDxC +DncLKvbdrNZiyMIJ +EObjjvbdHfgZxwwg +DoDKjvbdqceIomvB +EPCkKvbdNGcPlouL +DoCkKvbdCIkBkIej +DoCjjvbdjKFhJmYS +EObkKvbdBsBDUGWr +EObkKvbdnQZxvKyC +DnbjjvbdhzVFkqOG +EPCjjvbdGLFScHlu +DoCjjvbdtlXwAtBX +DoDLKvbdUtMtFkvK +DoCkKvbdBvzchdov +DncLKvbdlZSrTZHU +EOcKjvbdZnnJEdyj +DncKjvbdYpleJMdq +EPDKjvbdiMEcmtcZ +EPCjjvbdfelZmgHA +DnbkKvbdLhalRYAS +DncKjvbdehLWRnRH +DnbjjvbdeKJqvUzn +EPCjjvbdqqtkOLBN +EOcLKvbdfRaWzlDP +DncLKvbdhtzFWquC +EObkKvbdJvVFdFGi +EObkKvbdMfcPlotk +DoCjjvbdtcCuWvPP +DnbjjvbdwtmFRZMO +DoDKjvbdsPvPKCvG +EPCjjvbdmfdwmOHZ +EPDLKvbdMgDPlouL +DoDKjvbdnGdwlnHZ +DoCkKvbdVwJXudFH +EObjjvbdQdCaQQcr +DnbkKvbdYSkaNUPY +DoCjjvbdULvPAuni +EPCjjvbdSZihScWA +DoCkKvbdBiLCKhej +DnbkKvbdhXZAzzAJ +EOcLKvbdQYmAGsRj +EOcLKvbdZtJIyDrn +DnbkKvbdNsTufduQ +EOcKjvbdEXxMUTsl +DoDLKvbdKyRJrzuG +DoDKjvbdrWpLbhxq +DnbjjvbdrDeIonWB +EPDKjvbdHELViaij +DoDLKvbdBdQBWJmG +DncLKvbdRjyGUfkT +EPDLKvbdYNqAYUut +EPDKjvbdRXNdClID +EPCkKvbdNwnuzdOU +EOcLKvbdjmBkydfo +DoCjjvbdrpWPKDVf +EPCkKvbdZyEKNbkr +EOcKjvbdQZNAHTRj +EOcKjvbdwtmEpxkn +DncLKvbdLhbMRYAS +DoCjjvbdsrrTZZdc +DncKjvbdxmrgxShc +EPCkKvbdmozZVkZC +EPCjjvbdbsDLTcia +DoDKjvbdGKeScIMu +EPCjjvbdrEFIpOWB +EOcKjvbdmpZxukZC +DoCkKvbdTkunaVni +DoCjjvbddneSkUUS +EPCjjvbdTlVoBWPJ +DoDKjvbdxsNhmSCH +EPCkKvbdVviXvDdg +DnbjjvbdwzHfFwdr +EPDKjvbdfMewHMjL +DoCjjvbdbsDKtDjB +EPDLKvbdUQpoVVIN +EObkKvbdrEFJPmua +EObkKvbdhlEcnUcZ +DoDKjvbdZRMeIleR +DnbjjvbdmajXYOnV +DoDKjvbdaRfDHtGL +DoCjjvbdbhljKewY +DoDLKvbdDwwksssl +DncLKvbdUMWOaVoJ +DncKjvbdWWiYWDdg +DoCjjvbdyXiJbQZk +DnbkKvbdHDkVibKK +EPCjjvbdtSrSxzEc +EOcLKvbdaSGChUFk +DnbkKvbdYSlBNUOx +EPDLKvbdJTZBSmYM +DoCjjvbdTkvOaWOi +DncKjvbdMowpvNfs +EPDKjvbdeEnqavcK +EOcLKvbdiifIJlxS +DnbkKvbdqceIpNua +EPDKjvbdrNZixkhJ +DncKjvbdiHKDZViu +DnbkKvbdrDdiPnWB +DncLKvbdLGFhCAqV +DoCjjvbdwuMdqYlO +EPCjjvbdePFTKssr +EObjjvbdVBCQrpqy +EObjjvbdbrcKsdKB +DnbkKvbdBvzciEpW +DoCjjvbdIHGyyXxH +EObjjvbdrzLpTAhO +EOcKjvbdemGWgNJk +EObkKvbdVZHtZjnn +EOcKjvbdiCObeXRR +EPCkKvbduoTzpkPU +DoCkKvbdrNZjYkgi +DnbkKvbdTAEhgand +EOcKjvbdhuZdwRuC +DoDLKvbdWWiXuceH +EPDKjvbdZoOIddzK +DncLKvbdVAbRSprZ +DnbjjvbdhgKDZWJu +DoCkKvbdVZITykOn +DoCkKvbdiGibyWKV +EPDLKvbdwyhGGYFS +DoDKjvbdiHKCxvJu +EPDLKvbdhyuGLpnG +EPDKjvbdOAJStKSA +EOcKjvbdzitpPdSt +DoCkKvbdzROlhjXA +DoDLKvbdtTSSxzEc +DoDKjvbdzoQRFCkx +DnbkKvbdxnSgxShc +DnbjjvbdiBoDFWqR +DoCjjvbdnBjWwoNu +DncLKvbdVYhTzKnn +DncLKvbdkIGkefNk +DnbkKvbdlqxuZsEJ +EOcLKvbdACrYJzIp +EPDKjvbdmaiwYOnV +EOcKjvbdYkrEUNlN +DoCjjvbdVUNTfLuj +DoDLKvbdfHkWSOQg +DnbkKvbdBraCsfXS +EOcKjvbdMJBkpxAS +DoDKjvbdcyyQXyQb +EObkKvbdeEnrCXDK +EObkKvbdFejSNiTq +DoCjjvbdEYXkstTl +EPDKjvbdyYIjBpZk +DncKjvbdiHJcZWKV +DncKjvbdQdDAoqDr +EObkKvbduDDUvvOo +EPCkKvbdzGyMANEw +DoDKjvbdQvnECkgc +DncKjvbdVviXudEg +DoDLKvbdQZNAHTSK +EPDKjvbdkCkjqHUg +EObjjvbdwyhFeweS +DoCjjvbdxwiJbQZk +EOcLKvbdEPDLLXDE +DncLKvbdVrNwbFLc +DoCkKvbdjAPgBPgK +EOcKjvbdpstGqqjt +EPDLKvbdHDkVjCKK +DncKjvbdirzhrjiz +DnbjjvbdxrnJNSBg +EPCkKvbdraelkgLZ +DncLKvbdptTgRqjt +DoCkKvbdIsYaTMxM +DoCjjvbdMpXqVnGs +DoDLKvbdUVkoitBR +DoCkKvbdjmCLyeHP +DoCjjvbdiVZeWquC +DoCjjvbdVUMtFlWK +EPDLKvbdxKvdHzzG +DoDKjvbdiMEdNuCy +EPDKjvbdwzIFfYEr +EObjjvbdJXsagkpp +EPCkKvbdxrmhmSBg +DoDKjvbdlqxuZsDi +EPDKjvbdsQVoJcVf +DnbjjvbdEYYLstUM +DncLKvbdkHgLfGNk +EPCjjvbdbsDKtDjB +DnbjjvbdJcKDQibx +DoCjjvbdyzdnSIIh +DnbkKvbdrpWOjCuf +EObjjvbdbAudeopX +DnbkKvbdYkqctNlN +EPDLKvbdfHkWRnRH +EPDLKvbdXmqAYUut +DncKjvbdFyVVBEXb +DnbkKvbdrDdhpNua +DncKjvbdeAURNXjG +DoCkKvbdOTUVgEuQ +EPCjjvbddwyssrFz +DoCjjvbdMpYRWNfs +DoCkKvbdjuvnDaww +DnbkKvbdVhXvXgYz +EObjjvbdTulQKTaR +EObjjvbdOAJTUJrA +EPDLKvbdsZkosBIO +DoCkKvbdhgJbxvKV +EPCjjvbdnBivxOnV +DncKjvbdxrnIlrCH +DncLKvbdzaAPHGbM +EPCkKvbduMXvaUBX +DnbkKvbdSBceMJZL +EObjjvbdJpzEoGOF +DnbkKvbdWexytAPT +DnbkKvbdkVwNcaxX +EOcLKvbdEYYLsstM +DoCkKvbdRosfiedX +EOcKjvbdwuMdpyMO +EObjjvbdUsmUFlWK +EObjjvbdjuwOECXw +DncKjvbdqlzJxkgi +DoCkKvbdiHJbxujV +EPDLKvbdakMFoNcA +EOcLKvbdmIcsqUqa +EPCkKvbdeKKSVtzn +EPCkKvbdvBEZTOeI +DncKjvbdpstHSRjt +EOcKjvbdKVuGEEfi +DoDLKvbdZQldiNFR +EPCjjvbdxnTIYShc +EOcKjvbdtunXjQsA +EPDKjvbdjcLkRHVH +DncKjvbdDoDLLXCd +DnbjjvbdZyEJnDMS +DoDLKvbdFkFTCgmV +EOcKjvbdhkddOUby +EPDLKvbdNeEUJIkE +DnbkKvbdyzeNqghh +EPDKjvbdFVxopMjF +EOcKjvbdGdLVibKK +DncKjvbdBdQAvJlf +DoDKjvbdbiNKLFwY +EPCkKvbdnGeYNNgZ +EPDLKvbdEYXlUTsl +DncLKvbdOEcsiIjd +DncKjvbdKaLHMbYR +DncKjvbdyTOIlrCH +EPCkKvbdMpXpumgT +EPCjjvbdtbbtwVno +DoDKjvbdrRtkOLAm +EObjjvbdbLLfPNcA +DncKjvbdjmCLydgP +DnbkKvbdTkuoBVoJ +DnbkKvbdSCDdlJYk +EObkKvbdCEPaVjNG +DoDLKvbdFaOpxizm +EPCjjvbdfMevgMjL +DoCkKvbdYzcGRjVy +DnbjjvbdKRZdoGNe +EPDLKvbdZisIQHCG +EOcLKvbdZMSEUOMN +DoCjjvbdiGibxuiu +EPDLKvbdZQmFJMeR +DoCkKvbdsBemLfjy +DncLKvbdzoPqEcMY +DncLKvbdMoxRWOGs +EOcLKvbdFeirOJUR +DoDLKvbdpyOgfpdY +DncLKvbdyzeOSIJI +DoDLKvbdRkZFuHKs +DnbkKvbdxVNEqZLn +DoCjjvbdMgDPmPuL +EPDKjvbdZQmEhmFR +DncKjvbdBraDUFwS +DoCkKvbdqqtjmkAm +EPDLKvbdLZQirzuG +DoDLKvbdlYsRryGt +EOcKjvbdKaLHNBxR +EOcKjvbdTqQoUthN +EObkKvbdhbObeXRR +EPDKjvbdJutfDeGi +DoDLKvbdRkZFuGkT +EOcKjvbdrbGNLgKy +DnbjjvbdmpZyWKyC +EPDKjvbdHELVjBij +EPCjjvbduDDUvuoP +EOcKjvbdrDeIonWB +DoCjjvbdnPyyWLZC +EPDKjvbddndrjtUS +EObjjvbdjuvnDbYX +EPDLKvbdCIkBjhfK +EObkKvbdZjTHogCG +EOcKjvbdjJehKNYS +DnbkKvbdSxLMNzkY +DoDLKvbdKDKDRJcY +EPCkKvbdmpZxvKxb +DnbjjvbdssSTYyeD +EObjjvbdHDkVibJj +DnbkKvbdSLZFtgLT +DoCjjvbdxnTIXriD +DnbkKvbdcSbjsdJa +DoCkKvbduoTzpjoU +DoCjjvbdXsLaNUOx +DoDLKvbdcScKtEJa +DnbkKvbdfpBzwDwh +EPDKjvbdjlakyeGo +DnbjjvbdYzcFqivZ +DncLKvbdCIkBjiGK +EPDLKvbdxZhFfYFS +EObjjvbdrEFJQNvB +DoDLKvbdjAPgBQHK +EOcLKvbdkDLjqHUg +DoCkKvbdiUzFWqtb +DoCkKvbdKVtfDdfi +DoDLKvbdwkXEHzyf +EObjjvbdqcdhpOWB +EPCkKvbdeEnrBvbj +DoCkKvbdCTAbsewS +DnbjjvbdNHCpMouL +DoDKjvbdSQUGiecw +DoDLKvbdelevfmKL +DoCkKvbdySnImSCH +DncKjvbdANIZSvzY +DncKjvbdrJAJeNPF +EPCjjvbdqTtGqqjt +EObjjvbdaRfDHsfL +EPCkKvbdrJAJeMne +EPDKjvbdiGjDYvJu +DoDKjvbdMgCpMpVL +DncKjvbdZjTIQHCG +EOcLKvbdJYTbILqQ +DoCkKvbdzoPqEbkx +EPDLKvbdvlvANDeN +DncLKvbdatafwjsh +DncLKvbdJuuFcdgJ +DncLKvbdwXMAvBWV +DoDLKvbdaMjbStmH +DoCkKvbdeOdsLTtS +DoDKjvbdbLLeoNcA +EPDKjvbdJKEAJpGd +DnbjjvbdZnnIeEyj +EOcLKvbdunszpjnt +EObkKvbdmoyyWKxb +EObkKvbdILazmvpk +EPDKjvbdQlwbYmtz +EPCjjvbderAvzkcP +EObkKvbdegjvSORH +EOcKjvbdsrqsYydc +EOcKjvbdfIKvSORH +DnbkKvbdFjdsDIMu +EPDKjvbdpstHRqjt +EOcLKvbdWRmxCElD +EOcLKvbdkHflGFnL +DoCjjvbdZjTHofbG +EObjjvbdeEoSBwCj +EPCkKvbdJSyBTNXl +DnbkKvbdUaCRTQqy +EPDKjvbdSLZFtfkT +DncKjvbdyNrgwsJD +DoDKjvbdezuxdiUX +DoDLKvbdACrXiyhp +DoDLKvbdxwiJaoyk +EOcKjvbdUxhTzLOn +DnbjjvbdnHFYNNfy +EOcLKvbdhanbeWqR +DoDKjvbdzHYlAMdw +DoCjjvbdKyRJrzuG +DncLKvbdliETpuRa +EObkKvbdczYpXyRC +DoDKjvbdFfKRnIsq +EPDKjvbdVAbQsRSZ +DncKjvbdezvZEiUX +DoCkKvbdZisHofbG +EPDKjvbdjKFgilxS +EOcLKvbduVmxKQsA +DnbjjvbdhuZeWrUb +EObkKvbdGYuUaDxC +DoDLKvbdaaWFGPpX +DnbkKvbdUQpoVUhN +EPCjjvbdZxdJmcMS +DncKjvbdhbPCdwRR +EObkKvbdZRMeJNFR +DnbjjvbdTlVoBWOi +DoCkKvbdatbHYKtI +EObkKvbdiHJbxvJu +DncKjvbdsQWOjCvG +DncLKvbdRosfjGEX +EObkKvbdREDBQRDr +EOcLKvbdeEnqawCj +EPDLKvbdGZVUaEXb +EPDLKvbdIryArmXl +EObjjvbdiiehJlwr +DoCkKvbdMJCMRYAS +DnbkKvbdlrYtzTDi +DoDLKvbdnGeXlmfy +DoCkKvbdSCDeMJZL +EObkKvbdLFegaaRV +DoDKjvbdGGKRmhsq +EObkKvbdiLdcnVDZ +DnbjjvbdGBOqZJzm +DnbjjvbdhfjCxvKV +EPCjjvbdlBNPNALA +EOcKjvbdtbbuXWPP +DncLKvbdEPCjjwDE +DoDLKvbdLqwNZtpz +EPDLKvbdbVCGwkUI +DncLKvbdZyDimcLr +DncLKvbdfILWSNpg +DoDKjvbdFVyPpNJe +DncKjvbdqiAJeMoF +EOcKjvbdqrVLOLAm +DoCjjvbdehKuqnQg +DoDLKvbdGLFTCglu +DoCjjvbdXrlBMtPY +DncKjvbdlYrrTYgU +EPCkKvbdWSNxCFMD +DncKjvbdUVkoitAq +DncLKvbdfHjvSORH +DoCkKvbdCEPaWKMf +EObkKvbdmbJvxPOV +EPDKjvbdwzHefXeS +EOcKjvbdvvlAvAuu +DncLKvbdpxngfqDx +DnbjjvbdIwtCIMQp +DncKjvbdHDjvKBjK +EOcKjvbdjmCLzFGo +DnbkKvbdZMRdTnMN +EObjjvbdEOcLLWbd +DoDLKvbdkNBlZdfo +EPCjjvbdemGXHNKL +EOcLKvbdkxrqryGt +EOcKjvbdsPvPKDWG +EOcKjvbdXsMAlsoY +DnbkKvbdmIcspuSB +DoCjjvbdUaBpsRRy +EOcLKvbdSPsfiedX +EOcKjvbdSCEEkiYk +DncKjvbdWXJXudEg +DncLKvbdRyigrbvA +DoDLKvbdUMVoAvOi +DnbjjvbdZtIhxcsO +EOcLKvbdJXsbHkpp +DnbkKvbdZtIhyETO +DncLKvbdHlBzmvpk +EObkKvbdzHZMAMeX +EPDKjvbdKCjCpjDY +EOcKjvbdjblKqHUg +DoDKjvbdGGJrNiUR +DoDLKvbdrEFIomvB +EPCkKvbdrovPKDVf +DoDKjvbdpxnhGpdY +EPDKjvbdemGWgNKL +EPDLKvbdTlWPAuoJ +EOcLKvbdhuZeWqtb +DnbkKvbdhyuGLpnG +EObjjvbdSBcdlJZL +DnbkKvbdeEnqbWcK +DnbjjvbdJKEAJofd +EObjjvbdbQGfckzd +EPCjjvbdRkYeuHLT +DoDLKvbdXrlBMtOx +EObkKvbdznoqFCkx +EPDLKvbdjggLfFnL +EPDKjvbdhuZdwSVC +EPCkKvbdeEoRbXDK +EPCkKvbdKaKgNCYR +DoDLKvbdWWhxWDdg +EPCjjvbdqUTfqqjt +EOcKjvbdcSbkTdJa +DncKjvbdauCHXjtI +DoCkKvbdQlwbZNtz +DnbjjvbdqvolCiYq +EOcLKvbdePFSjstS +EOcKjvbdhgKDZWKV +EObkKvbdCgLfHAzc +DncKjvbdnUuZkKSG +DnbjjvbdlhctRUrB +DoDKjvbdpyPHgREY +DoCkKvbdjJegimXr +EPDKjvbdfHkVrORH +EPDKjvbdyTOIlqbH +EPDKjvbdjKFhKNYS +EPDKjvbdFWZPpMie +EPCjjvbdIwsahLpp +EObkKvbdKfGIBaQu +DncKjvbdGFirOJTq +DnbjjvbdpedFUWBI +EPCkKvbdNeDshiKd +EObjjvbdBiLBjhej +EObjjvbdCJKbLJFj +DncKjvbdvwMAuaWV +DnbjjvbdZRMdhleR +DncKjvbdhgKCyViu +DoCkKvbdhficZWKV +DnbjjvbdwkWdHzyf +DncLKvbdVBBqSprZ +EOcLKvbdUsmTelVj +EOcLKvbdFxuVBEYC +DoDKjvbdKaLHMbYR +EPCkKvbdGdKuiaij +EPDKjvbdfIKvRnQg +DncKjvbdfekzNfgA +DoCkKvbdJbicRJbx +EOcKjvbdIwsagkpp +DncKjvbdOEctIiKd +DncKjvbdOTUVfduQ +EPCkKvbdFWZPomKF +EObjjvbdezvZFJUX +DoCjjvbdtSrTYzFD +DoCkKvbdbVCHYLTh +EPDLKvbdZMRdUOLm +DoDLKvbdNwoVzdNt +EPDLKvbdFaPRZJzm +DoCjjvbdxZhGFweS +EPCjjvbdZQmFImFR +DnbjjvbdsQWOibvG +DoCjjvbdSBdFMIxk +EPCkKvbdEObkKvcE +DoDKjvbdqFcdsvAh +EOcKjvbdezuyEhsw +DnbkKvbdVqnXaeMD +EObjjvbdnGeXlmgZ +DncLKvbdCIkBkIfK +EPDLKvbdpecdtWAh +EPDKjvbdsQVnjCvG +DoDKjvbdkDMLQfuH +EObjjvbdAMhZTWzY +EPCjjvbdiCObdvqR +DoDKjvbdUWLoisaR +DncLKvbdSPtHKGDw +EObjjvbdaNLBrtmH +EPDKjvbdUyHszKoO +DoDKjvbdQwNccLhD +EPDLKvbdnVUzKjRf +DoCkKvbdRyigrcWA +EOcLKvbdbiNKLGXY +DncKjvbdlhctRVSB +DoCkKvbdNPxRWNfs +EObjjvbdANHxsXZx +DnbjjvbdNrsvHEuQ +EPCjjvbdmbJvxPNu +EOcKjvbdJvVGEFGi +EPDKjvbdUWLoitAq +DoCkKvbdkDMKpfuH +EOcLKvbdfjfzbfAE +EOcLKvbdczZQYZRC +DoDLKvbdQwNcblHc +EObkKvbdOTTugEtp +DncKjvbdbUagYLTh +EPCjjvbdfNGWfmKL +EObjjvbdiVZdvrUb +DncLKvbdZyDinDMS +EPCkKvbdmaiwYOmu +EOcLKvbdqUUHSRkU +DncLKvbdDncKjvbd +DoCkKvbdVqmxCElD +EPCkKvbdaRfDIUFk +EOcKjvbdjKGIJlxS +DncLKvbdkxrrTZHU +DncKjvbdypnmIjXA +DoDLKvbdJpyeOfOF +DoDLKvbdwXMBVaVu +DoDKjvbdKfFhCAqV +DoCjjvbdIxTahLqQ +EOcLKvbdADSYKZiQ +DoCkKvbdMowpunHT +EOcKjvbdgKfzbfAE +EPDKjvbdhkddOVDZ +EPDLKvbdemFwHMik +EPCjjvbdUVlQKTaR +DncLKvbdRWnECkhD +DnbjjvbdkWXODbYX +DoCjjvbdZeYGzghb +DoCkKvbdSKyFtfkT +DoDLKvbdBhkCLJFj +DncKjvbdlhdTqVRa +EPDKjvbdqqtjmjaN +DoDLKvbdZjTHofbG +EPDLKvbdJmADzHVB +DoDLKvbdSBceLhyL +EObjjvbdqwPlCiYq +DncLKvbdYORAXtvU +EPDLKvbdZnnJEdyj +DoCjjvbduWNxKQsA +EPDKjvbdWSNxCElD +DoCkKvbdRjyFtgLT +DoCkKvbdeOeSkUUS +EOcKjvbdDihKVxKA +EObjjvbdffLymgHA +DoDLKvbdcScKsdKB +EPDLKvbdlYsSSyGt +DnbjjvbdGKeTDINV +DoDLKvbdCTBCtGXS +EObjjvbdEASIlyvw +EPDLKvbdfMfWfmKL +DoCkKvbdpstGqrLU +DncLKvbdtlXwAsaX +DoDKjvbdNrsvHEuQ +EObjjvbdCTBDTfXS +DoDKjvbdkMalZeHP +DoDLKvbdQccBPqDr +DnbkKvbdYqNEiNEq +DnbkKvbdvBDyTOeI +DnbjjvbdLAkGmBxR +EObkKvbdLiBlRYAS +EPCjjvbdTukpKUBR +EObkKvbdhuZeWqtb +DoDLKvbdZyEJmbkr +DnbjjvbdxrmiNSCH +EPCjjvbdKWVFdFHJ +EPCjjvbdRWmcblID +EPCkKvbdsQVoJcVf +EPCkKvbdGcjuibJj +DoCjjvbdJuteceHJ +DnbjjvbdLLAhWAJy +DncKjvbdULunaWOi +EOcLKvbdHlBznXQk +DoDKjvbdvBDxroEh +DoDKjvbdzaAPHGbM +DoDLKvbdUyITyjoO +DnbkKvbduaDxroFI +EObkKvbdAMhZSvzY +EObjjvbdDoDKkWbd +EObkKvbdGKdrbhNV +EPCkKvbdmgFXlnGy +EOcKjvbdzdzOzdzQ +EPCkKvbdKkBHvAJy +EOcKjvbdqAiFAWhE +DoCjjvbdQvmdClID +DncKjvbdMtsSKmAX +EObjjvbdziuPpETU +DoDKjvbddZyQYZQb +EPDLKvbdauBgXkTh +DnbkKvbdnCJvwnmu +DoCjjvbdxUmFQyMO +DncKjvbdXGYzUAPT +EPDLKvbdOAJTUKSA +DncKjvbddZyPwxqC +EOcKjvbdqlzKYlIJ +DnbjjvbdkVvnDaww +DnbjjvbdZdxGzhIb +DnbkKvbdDwxLtTsl +EObkKvbdGKdrcHmV +DncKjvbdTAFJHbOd +DoDKjvbdEObkKvcE +DnbkKvbdaNLCSuNH +DoDLKvbdDxYLtTtM +EObjjvbdVZIUZjnn +DoCkKvbdNsUVfduQ +EOcLKvbdGGKRmhtR +EPDKjvbdbKlFnmcA +DncKjvbdvvlAvBWV +DoCjjvbdliEUQtrB +DnbjjvbdjgfkfGNk +EPDKjvbdlYsSTYft +DoDLKvbdbKlGOnDA +EPDKjvbdjAPfaPfj +DnbkKvbdzGyMAMeX +DoCjjvbdZnmhddzK +EPCkKvbdIMBzmwQk +EObkKvbdjEkHVPAO +EPCkKvbdQccBPpdS +EPCjjvbdhgKCxvJu +DncLKvbdVgxVxHYz +EOcKjvbdxVNFQxkn +DoDKjvbdbLMGPNcA +DncLKvbdGckWJajK +DnbkKvbdrMyiyLgi +EOcLKvbdKefICApu +DoCjjvbdqFdEtWBI +EPCkKvbdYSlBNUPY +DoCjjvbdIwsbILpp +EPCjjvbdmgFYMnHZ +EObjjvbdQvmccMID +DncLKvbdURQntthN +EOcLKvbddxZtUSFz +EPCkKvbdhtzFWqtb +EOcKjvbdVBCRSpqy +DncKjvbdtbbtvvOo +EPCkKvbdczZQYZQb +DnbjjvbdQwODcLgc +EPDLKvbdtunXipsA +DncLKvbdBhjajhej +DoDKjvbdNrtVfduQ +EOcLKvbdKWUfDdfi +EObjjvbdpstHRrLU +DnbjjvbdznpRFClY +EPCjjvbdfNFvgMik +DoCjjvbdUsltGLvK +DnbjjvbdlqyVZsDi +DoCkKvbdNPwqWOHT +EOcLKvbdakLeoNcA +DoDKjvbdsCGNMGkZ +EPDKjvbdaRfDHsfL +DoDKjvbdZtIhyDrn +EPDLKvbdOStVgFUp +EPCkKvbdeATplxKG +DncLKvbdySmhlrBg +DoDKjvbdnCKWwoOV +DnbjjvbdDncKjvcE +EOcLKvbdwzIGGXdr +EObjjvbdmIdTqVSB +DnbjjvbdUGznLwVe +DncLKvbdTkvOaWPJ +DncKjvbdyOSgwsIc +DncKjvbdjmCLzFGo +DoDLKvbdpssfqqkU +EPDKjvbdmtuZjirG +EOcKjvbdOFEThhkE +DoDKjvbdIMBznWqL +EPCkKvbdJvVFcdfi +EPDKjvbdnBivxOmu +EObkKvbdTvLojTaR +DoCkKvbdMRwNZtpz +EObjjvbdEARhlzXX +DnbjjvbdcScLTcjB +DncKjvbdxmrhXrhc +DoDKjvbdEvZQQNKF +DncLKvbdGLErcHmV +DoDLKvbdFkFTChMu +DoCkKvbdOFETiIkE +EPDKjvbdnVUzLKRf +EPDKjvbdmuUzKjSG +EPCjjvbdwuNFQxkn +DncLKvbdeATpmXjG +EObjjvbdxUmEpxkn +EPDKjvbdcSbkTcjB +EPCjjvbdmbKXXoNu +EPDKjvbdSQUHKFdX +DoDKjvbdCTAbsewS +EOcLKvbdVwJYVdFH +DoDKjvbdZtIiYcsO +EPDKjvbdhkeENtcZ +EObkKvbdGBOpyJzm +EPCkKvbdRMxCYmtz +DoCjjvbdzjVPocsU +DoDLKvbdrDdiPnWB +EPCjjvbdFjdsDIMu +DoDLKvbdSLZGUgLT +EPDLKvbdKefHaaQu +DoDKjvbdKCibpicY +EOcLKvbdijGIJmYS +EObjjvbdelfWgNKL +DnbkKvbdbhmKKfWx +DoDKjvbdSQUHKGEX +EPCkKvbdnGdxMmgZ +DncLKvbdJJdAKPgE +EPDLKvbdmRyUyrdJ +EOcLKvbdhzUfLqOG +DoDKjvbdLAjgMaxR +DoDKjvbdRosfjGEX +EObkKvbdpssfqqjt +DnbkKvbdjAQHAofj +DncLKvbdidkHUoAO +DoCkKvbdCIjbLIej +DncLKvbdelfWfmKL +DoDLKvbdxUleQxkn +EPDLKvbdEvZQPljF +DncLKvbdJbjDQjCx +DncLKvbdyOTIXriD +DoDKjvbdTulPjUAq +DnbjjvbdJSyAsNYM +EOcLKvbdbBVeGQQX +EPCjjvbdbKkenmcA +EPCjjvbdiGjDZWJu +DncLKvbdcSbjsdJa +EObkKvbdZtJIyDsO +DoDLKvbdrafMkgLZ +DoCjjvbdiMFDmuDZ +DnbkKvbdnUtyjirG +EPDKjvbdfNFvflik +DoDLKvbdrWokcJZR +DncKjvbdWWhxWDdg +EPDLKvbdNeDtJJKd +EOcLKvbdqlzKYkhJ +DncKjvbdSQUHKGDw +DoCkKvbdkHflFfOL +EPCkKvbdRXNdDMID +DncLKvbdSLZFtfkT +EOcLKvbdZQldiMeR +DnbjjvbdSBdElJYk +DncLKvbdwWlBVaWV +DoCjjvbdhzUfLqOG +DoDLKvbdmJEUQuSB +DnbjjvbdULvPBVoJ +EPDLKvbdYkrDtOMN +EPDKjvbdHEKujBij +EObjjvbdJuuGDdfi +EObjjvbdzaAOgGbM +DncLKvbdkClLRHUg +EObkKvbdYTMAmToY +EObjjvbdxVMeQyLn +DoDKjvbdrEFJQNua +DncKjvbdYSlBNTnx +DnbjjvbdrSUkOLAm +EOcLKvbdrylQTBIO +DnbjjvbdrouoKDVf +DoDLKvbdwWkaVaVu +DoCkKvbdZQmFIleR +EPCjjvbdiLeENtby +DoCjjvbdrDeJQNua +EObjjvbdIGfzYxXg +DoCkKvbdySmiMqag +EOcKjvbdbVBgYLTh +DoDKjvbdLFehCApu +EPCkKvbdCDpAvJmG +EObkKvbdZLrDtOLm +EPCkKvbdZnnJEdyj +EPCjjvbdZjSgpGbG +EOcKjvbdWSOYBdkc +EPDKjvbdwtleQyLn +DnbkKvbdmJDtQuSB +EObkKvbdkWXODbXw +DncKjvbdezuyEiTw +EObjjvbdnBjWwnmu +EPDKjvbdZxdJmcMS +EPDKjvbdrbGNMHLZ +EObkKvbdEYXlTssl +DnbjjvbdyTOJNRag +DnbkKvbdGZVVAdYC +EPCjjvbdTYLMNzkY +DncLKvbdJcJcRKDY +EOcLKvbdYpmEhldq +DoCkKvbdjKFgjNYS +EPDLKvbdJbibqKCx +EPCjjvbdyTNiNSCH +DoDLKvbdGGKRmhsq +EPDLKvbdLAkGmCYR +EPDLKvbdCEPaWKMf +DoCkKvbdZsiIyDsO +EPCjjvbdjbkkRGuH +DnbkKvbdqYoHgREY +DoDLKvbdZMRctNkm +EObjjvbdDjIJvYKA +DncKjvbdVqnXbEkc +EPCkKvbdiHKCyViu +EOcKjvbdkHflGFmk +DoDKjvbdOFDsiIjd +EOcLKvbdVrOYCEkc +EPCjjvbdhtydvrUb +DoDLKvbdrNZjYlHi +EPDKjvbdVwIxWDeH +EObkKvbdhyuFlRNf +EPDLKvbdSKyFuHKs +DoCkKvbdBhjajiFj +DoDKjvbdhanbeWpq +DncKjvbdGGJqnJTq +EPDKjvbdZtJIyETO +EOcLKvbdANIZSvzY +DnbkKvbdptUHSSLU +DoDLKvbdRDcBPpdS +DoDKjvbdBcpAujNG +DnbjjvbdaaVdeopX +DnbjjvbdhtydvrUb +DoCkKvbdkWXNcaxX +DncLKvbdrNZjYkgi +EPCjjvbdBiKajiGK +EObkKvbdwkWcgzzG +EPCkKvbdRDcApQcr +DncLKvbdfekzNgHA +DoDKjvbdiBoCdwRR +EOcLKvbdIBlZdzAD +DnbkKvbdZLqcsnMN +DoDKjvbdatbGwkUI +EObjjvbdmgFXlmfy +EPDLKvbdxUmEqYkn +EPDLKvbdauBfxKsh +EObjjvbdsPvOjDVf +DnbkKvbdkVwNdBww +EPCkKvbdzaAPGfbM +EOcLKvbdRotGjGDw +EPCkKvbdqceJPmua +EPDLKvbdZyDinCkr +EObkKvbdCDoaWKMf +EOcKjvbdjmCLzEgP +EPDKjvbdHlBznXRL +DncKjvbdeOeTLTtS +EPCjjvbdGZUuBEXb +DnbkKvbdqTtHRqjt +EOcLKvbdFyUuAdXb +EPDLKvbdEARiMzWw +EOcKjvbdFeirNiUR +DoCkKvbdzjUoocsU +EOcLKvbdEztQdlCi +DncLKvbdKCjCpibx +EPCjjvbdxZhGFxFS +EObjjvbdwWkaWAvV +DnbkKvbdaaWFFoow +EOcKjvbdBsBDUGXS +EPDLKvbdmIdUQuRa +DncKjvbdVAbRTRRy +DoCkKvbdHffyxxYH +EObjjvbdDGkfHAzc +DoCkKvbdiCPDFXRR +EPCkKvbdVrNwbEkc +EPCkKvbdiGjDYvKV +DnbkKvbdIMBzmvpk +EPCkKvbdKxqJrztf +DncLKvbdmIctQuSB +EOcKjvbdaSFbhUGL +DoCjjvbdmbKWwnmu +DoCkKvbdiUyeWrVC +DncKjvbdGGKRmhsq +DoCjjvbdehLVqnQg +DncLKvbdTkunaVoJ +DnbjjvbdGZUtaDxC +EPCjjvbdtSrSyZeD +DoDLKvbdjbkkQfuH +EOcLKvbdOFDtJJLE +DnbjjvbdBdQAvJlf +DoCkKvbduDDVWvPP +EOcKjvbdZtJIyDsO +DncLKvbdQccBPpdS +DncLKvbdiUzEvquC +EPCjjvbdvvkaWAuu +DoDLKvbdZoOIeEzK +DnbkKvbdkCkkRGuH +EOcKjvbdRkZGVHLT +EObkKvbdtcCuXVno +EPCjjvbdMpYRVnGs +DoDKjvbdFfJrNiTq +DnbkKvbdZnmiFFZj +EPDLKvbdbhmKKfWx +DoDLKvbdDjHivXjA +DoDLKvbdiLeDnVDZ +EOcLKvbdUQqOtthN +EPDKjvbdZHXEAOri +EObkKvbdvAdYrndh +EObkKvbdQlwaxnUz +DoCjjvbdQwOEDLhD +EPDLKvbdqrVKnLBN +EObjjvbdwtmFQxkn +EPDLKvbdTfznMWvF +DnbkKvbdaMjasVNH +EPCjjvbdcyyQXxpb +DncKjvbdMfcQMpUk +DnbjjvbdZnmheEzK +DncLKvbdbrbkUDia +DncLKvbdiCOcFXRR +DoCjjvbdZxcimblS +EPDLKvbdRkYfVHKs +DncKjvbdDoDKjvbd +EOcKjvbdGAnpxizm +EOcKjvbdYpldhldq +DnbkKvbdQwOEDMID +DnbjjvbdcyxoxYpb +DoCjjvbdakMGOnDA +EPCjjvbdLAkGlawq +DncKjvbdJJdAKPfd +EOcLKvbdxrnImSBg +DoDLKvbdNddUJIjd +DncLKvbdfIKvRmpg +DoCjjvbdiZuGLqOG +EOcLKvbdeAURMwif +DncLKvbdiCPCeWpq +DoCjjvbdGcjvKBij +EPDKjvbdRDcBQQdS +EPCjjvbdUtMtGLvK +EPDKjvbdyXhjBoyk +DoDKjvbdqZOgfpcx +EObjjvbdYTMAmUPY +DoDLKvbdiCObeXQq +DncKjvbdmJDtRUqa +EObkKvbdSCEElIyL +EObkKvbdNGbpMouL +DoCkKvbdEzsqElCi +EObjjvbdOStWHFVQ +EPCjjvbdjmBlZdfo +EPDKjvbdiUyeWqtb +DnbjjvbdYSkaNUPY +DoCkKvbdTAEhhCPE +DoCjjvbdmttyjjSG +EOcKjvbdrMyjZMIJ +EPDKjvbdUsmTelVj +EPCkKvbdNsTugFUp +DnbkKvbdWRnYBeMD +DncLKvbdHgGzZXxH +EPDLKvbdZLrDsmlN +DncLKvbdcSbkUDjB +EObkKvbdziuPpDrt +DoCjjvbdZyEJmblS +EObkKvbdjggMFenL +DnbkKvbdmfeXmNfy +EObkKvbdiBncFXRR +EPDKjvbdADSXiyiQ +EObjjvbdLFfHbApu +EOcLKvbdRMwbZOUz +EPCkKvbdFVxoomJe +EOcLKvbdZnmiEdyj +DncLKvbdULunaVoJ +DncLKvbddndsKtTr +EPDKjvbdEztQeMDJ +EObkKvbdcScKscjB +EOcKjvbdFkErbglu +DoCkKvbdsBfMlGkZ +EPDLKvbdCSaCsfWr +EPCjjvbdVAapsRSZ +EOcLKvbdgFkzNfgA +EPDLKvbdjhHLefNk +EObjjvbdyNsIXsIc +DoCjjvbdqcdiPmvB +EOcKjvbdeXyssrFz +DnbjjvbdEOcKjwCd +DoDLKvbdGKdrbgmV +DncLKvbdKQzEoFnF +DoCkKvbdqvpMDJZR +EObkKvbdZyEKODMS +DncKjvbdBhjbKiFj +DncKjvbdfHkVrNqH +DncLKvbdeXyssrFz +EObjjvbdxmsHwriD +EPDKjvbdRyigsCvA +DoCkKvbdZoNiEeZj +EPCkKvbdhzUfLpnG +DncKjvbdVUNUFkuj +EPDKjvbdRXNdDMID +EObkKvbdlBMnmALA +EPDKjvbdffMZnHHA +EPCjjvbdEARhlyvw +EOcKjvbdVTltGLvK +EOcKjvbdJqZdoFme +EObkKvbdyOTHwsIc +DoDLKvbdCfkegAzc +DnbkKvbdZMRdTmkm +DnbkKvbdhkeEOUcZ +DoDKjvbdZnnIeEyj +DnbjjvbdrafNMGkZ +DoDLKvbdZtJIyESn +EOcLKvbdaRecITek +EPCjjvbdZoOJEdyj +DoDLKvbdxsNhlrBg +EPCjjvbdZxdKNcMS +DoCjjvbdCWzdJEov +EObkKvbdTppnttgm +DnbkKvbdjmCLydfo +EObkKvbdBsAbsewS +EObjjvbdjgflFemk +DnbjjvbdpstGrSKt +EOcLKvbdOTTvHFUp +DoCkKvbdczYowyRC +EObkKvbdTvMPjUAq +EOcKjvbdezvYeJUX +EPCkKvbdzHYlANEw +EPCkKvbdqcdiQOVa +DoCkKvbdsrrSxyeD +EObkKvbdOTUWGeUp +DoDKjvbdbUbHYLTh +DoCkKvbdHakydzAD +DoDKjvbddjJrWUzn +EPDKjvbdmaiwYPOV +DoCjjvbdtbcUwVno +EPDLKvbdrMyjYkgi +DoCjjvbdUQpoUtgm +DncKjvbdddoSBwDK +EPCkKvbdatbGwkTh +DncKjvbdmbJvxPNu +DnbjjvbdwzHeewdr +DncLKvbdzitpPcrt +EOcLKvbdrMyjYkgi +EOcLKvbdrEFIomvB +DoDLKvbdiifIJlxS +EOcLKvbdtvOYKQsA +DoCkKvbdxsNhlqag +DnbjjvbdyTOIlqag +DncLKvbdIGgZyYXg +EOcKjvbdUsmUGMWK +EObkKvbdhzUfMQnG +EPDLKvbdZxdJnCkr +DncKjvbdKWUeceGi +EOcLKvbdmbJvwnnV +DoDLKvbdDncKjvbd +EPCkKvbdZoNheEyj +DncLKvbdVqnXadlD +DncLKvbdtunXipsA +DncLKvbdjAPgBPfj +DoCkKvbdyqPNJKXA +DncKjvbdrpWPJbuf +EOcKjvbdqvpMDJYq +DnbjjvbdcTDLUDia +DnbkKvbdiGjCxvKV +EPDKjvbdauBfxKtI +DoCkKvbdLFfHbApu +DoDLKvbdHffyyXwg +EOcKjvbdIxUCHkqQ +DoDKjvbdzQoMiJwA +DoDKjvbdyYIjBoyk +EObkKvbdxnSgwriD +EObkKvbdIMBznWpk +EPDKjvbdYlSDtOMN +DoDKjvbdijGHjMxS +EOcKjvbdYkqcsnMN +DoCjjvbdmaiwYOmu +EPDKjvbdHELWKBjK +DoCjjvbdwtmFRYlO +EOcLKvbdFeiqnJTq +EPDKjvbdiBncEvqR +DoCkKvbdJXsbILpp +EObjjvbdULunaVni +DncKjvbdDwxLstUM +DoDKjvbdrWpMChyR +EObkKvbdYzcFqivZ +DncKjvbdEzspdlDJ +EPDKjvbdfMfXGmKL +DoCkKvbdCTAbtGWr +DoDLKvbdRkZGUgKs +EPCkKvbdFWZQQMie +DnbjjvbdxVNEqYkn +DoCjjvbdeFPRbWbj +EPCkKvbdZshhyESn +EObjjvbdqrVKnLAm +EPCjjvbdptUGqqjt +EOcLKvbdrEEhpOVa +DncKjvbdzQoNIjXA +DncLKvbdmgFXlnGy +DoDKjvbdZjShQHBf +DnbjjvbdjKGHjNXr +DoDLKvbdqFcdsvAh +EPCkKvbdOEdUIiLE +EPDLKvbdNeEUJJKd +EPCjjvbdzHZMANEw +DnbkKvbdqlzJyMIJ +DnbjjvbdelfXHMjL +EPCkKvbdANHyTWzY +DnbjjvbdREDBPpcr +DncLKvbdQmYCZOUz +EOcKjvbduoTzpjoU +DoCjjvbdqrUjmkBN +DnbjjvbdyfxlANFX +EOcLKvbdJmADygUa +EPDLKvbdyNrhYTIc +DoCjjvbdCTAbtFwS +DncLKvbdSwkLmzkY +DnbjjvbdjhHMFfNk +DoCkKvbdZeXfzhIb +DnbjjvbdbrbjtEJa +DoCkKvbdxrmhmRbH +DoDLKvbdrXQLbhxq +EObjjvbdTulQKUBR +EPCkKvbdMpYQumgT +DncKjvbderBWzlDP +DoCjjvbdiGjCxvJu +DoCjjvbdlZSqsZGt +EOcLKvbdZisIPfaf +DnbkKvbdHEKvKBij +DncLKvbdjSziSjiz +EPDKjvbdCEQBWJmG +EObkKvbdGGKRmiUR +EPDKjvbdMuTRkNAX +DnbjjvbdrXQLbiYq +EPCjjvbdOTUWGduQ +EPCjjvbdnBjXXoNu +DoDLKvbdcarmSAUN +DoCjjvbdNPwqWOGs +EObkKvbdUslsekvK +DnbjjvbdzaAPGfbM +DoCkKvbdGdLVjCJj +DoDLKvbdRjyFtfkT +DoDLKvbdGLFTDHlu +DnbkKvbdGFirOJUR +EPDLKvbddoFTLUUS +EObkKvbdkxrrTZGt +DncKjvbdxrnJMqag +EOcLKvbdCDpBWJmG +DoCjjvbdlqyUysDi +EPDKjvbdTfzmlXVe +DncKjvbdEuxpQMie +EOcKjvbdbLLfPNcA +DncKjvbdVgxWXgYz +DoDKjvbdrbFmLgKy +DoCjjvbdzaAPGfbM +DncLKvbdYSlAlsoY +DoDLKvbdZyEJnClS +EPDLKvbdEvYopMjF +DncKjvbdmtuZjiqf +DoCjjvbdCJKbLIfK +EOcLKvbdcIljLFvx +EObkKvbdrJAKFNPF +DoDKjvbdBiKbKhfK +EPDKjvbdWIYWYGxz +DoCkKvbdjAQGaQHK +DnbjjvbdjblLQftg +DncLKvbdbhlikGXY +EPDKjvbdZLrDsmkm +DoDLKvbdVTlsfMWK +DoCjjvbdliDsptqa +DnbkKvbdjuvmcbXw +DoCjjvbdbVCHXjtI +DoCkKvbdQvmdClID +DnbjjvbdLAkHNCXq +EPDKjvbdZtIhyETO +DnbkKvbdYkqdTmlN +DoDKjvbdMtrrKmAX +DncLKvbdJXtCIMQp +EPCkKvbdlhdTqUqa +EObjjvbdnHFYNNfy +EPDKjvbdxrmhlrBg +DncLKvbdiLeDmtcZ +DncKjvbdNrsufdtp +EObkKvbdlhcsptqa +EObjjvbdNeETiIkE +DnbkKvbdxsNhmRbH +DnbkKvbdADRxKZhp +DnbjjvbdTqROuUgm +EOcKjvbdpxoIGqDx +EOcLKvbdqBIeAWhE +DnbjjvbdCIkBjiFj +DncLKvbdTlWPBWPJ +DoCjjvbdEKHjVxKA +DnbkKvbdZRNFImEq +EObkKvbdJbicQjCx +DoDKjvbdNsTufeVQ +EObjjvbdDxYMUTsl +DoDLKvbdaSFcITfL +EPDKjvbdcTDLTcia +DoCkKvbdlhdTpuRa +EObjjvbdCJKbKiFj +DncKjvbdqAiFAWhE +EPDKjvbdUslsfLuj +EObjjvbdWWiXuceH +EPCjjvbdOEcshiLE +EPDLKvbdEJhJuxKA +DoCkKvbdKyRKSzuG +DncKjvbdHffzZXxH +EOcLKvbdSLZGUfkT +EObkKvbdHgHZxwxH +DnbkKvbdcSbjtEJa +EPDKjvbdZGwEAPTJ +DoDLKvbdeAURNXif +EPDLKvbdMpYQunGs +EObkKvbdNeDshiKd +DoDLKvbdzoQQdbkx +EPDKjvbdWHxWXfxz +EPCjjvbdCEPaVjNG +DoCjjvbdbhlikFvx +EOcLKvbdBvzdIdpW +DoCkKvbdNPwqWNfs +EPCjjvbdbhlijfWx +DncKjvbdqwQLbiZR +EObjjvbdkClLRGuH +DncKjvbdNHDQNQVL +DncKjvbdhkdcmuDZ +EOcKjvbdKWVFdFHJ +EPDLKvbdYTMBMtOx +EObkKvbdSKxfVGjs +DncKjvbdZoOJEdzK +EObjjvbdMpXqVmgT +EPDKjvbdhaoDFXRR +EPCjjvbdrpWPJcVf +EOcKjvbdczYpYZRC +DoDLKvbdLLAhWAJy +DoDKjvbdEObkLXDE +EPDKjvbdnVUykKRf +DnbkKvbdBvzdIdov +EOcKjvbdGFirOJUR +DoCjjvbdGGJrNiTq +EPDKjvbdqAheAWgd +DncKjvbdxmsIXriD +EObkKvbdVAbQsRRy +EPDKjvbdRXODbkhD +EObjjvbdVZHtZjoO +EOcKjvbdffMZmfgA +EOcLKvbdbiMjLGXY +DoDKjvbdUQpoVUhN +EPCkKvbdhfjCxuiu +DoCkKvbdziuPocsU +EObjjvbdBhkBkJFj +DnbjjvbdeAURNXif +DncKjvbdQlxByOUz +EPDLKvbdRbEEkhxk +EPCjjvbdrbFlkgKy +DoCjjvbdaSFbhUGL +EOcKjvbdsCGMkfkZ +DoCkKvbdJbicRJcY +DnbkKvbdqlzKYlHi +DoCjjvbdZyDimblS +EOcLKvbdsrqsZZdc +DoDKjvbdjggMGGNk +DnbkKvbdADSXiyiQ +DoCkKvbdehKurORH +EOcLKvbdrylPsAgn +EPCjjvbdRWmdClID +EPCjjvbdbsCjsdKB +EObjjvbdUQpoVVHm +DnbkKvbdiCObeXQq +DncLKvbdUQpoVUhN +DoCkKvbdKCicRKDY +DncKjvbdjlakzFGo +DnbkKvbdMgDQMpVL +DoDLKvbdWSNxBeMD +DnbkKvbdvBEZTOdh +EPCjjvbdsQWPKCuf +EObjjvbdZeYGzghb +DnbkKvbdxsNhmSCH +EPDLKvbdkySrTZGt +EObkKvbdrDdiQNvB +DncLKvbdHDjuiajK +DoCjjvbdURROtuIN +DncKjvbdKyRJrztf +EObjjvbdIGfyyYXg +DncLKvbdXsMBMtPY +EPCkKvbdaaVdfPpX +DncKjvbdiHJbyWJu +EOcKjvbdSKxfVGjs +DoDKjvbdxZgfFwdr +DnbkKvbdRNYCZNtz +EPCkKvbdCDoaWKNG +DoDKjvbdDjHjWYKA +EPDKjvbdyNsHwsIc +DoDKjvbdUtNTfLuj +DoDLKvbdGGKRnJTq +EPCkKvbdsBemMGjy +EPDKjvbdSQUHKFcw +DnbjjvbdkClKpfuH +EObjjvbdRyjHrcWA +EOcLKvbdSPsfjGEX +DoCjjvbdGckWKBij +EPCkKvbdGdKujBij +DnbjjvbdcJMijewY +EPDKjvbdkIGkefOL +EPCkKvbdrSVLNkBN +DnbkKvbdrpWPJbvG +DoDLKvbdZirgpHBf +EPCkKvbdHDjujBij +EPCkKvbdvBDySoEh +DoDLKvbdePEsKssr +DoDLKvbdZRMdhldq +EObjjvbdUQqPUtgm +DoDLKvbdMSXNZtpz +EObjjvbdVYhTzKnn +EOcKjvbdrNZixlIJ +DoDLKvbdTpqPVVIN +DnbkKvbdkCkjqHVH +DnbkKvbdkWWmcaxX +EOcLKvbdJSyBSlwl +EObkKvbdmRxtzTEJ +DncKjvbdptTgRqjt +EOcLKvbdqYoHfqEY +DoDKjvbdGZUtaDxC +EOcKjvbdKQydoGNe +EPDLKvbdssSTZZeD +EObjjvbdhkddOUcZ +DoDKjvbdGdKvJbKK +EOcKjvbdULvPAuoJ +DoCkKvbdrEFJPnWB +DnbjjvbdfNGWfmJk +EPCkKvbdkWXODaww +EOcKjvbdMtrrKmAX +DnbjjvbdEuyPpMie +EObjjvbdrSVKmkAm +EPDLKvbdhanbdvqR +DoCkKvbdkWWmdBww +DnbjjvbdxUleQyLn +EOcLKvbdpyPHfpdY +DncKjvbdpfDeTvBI +DoCkKvbdnVVZjirG +DnbkKvbdzjVPocsU +EPDLKvbdmfdwlmfy +DnbkKvbdSKyFuGjs +EObkKvbdVAaprpqy +EPCjjvbdUaBqTRRy +EObkKvbdZoNhddzK +DncKjvbdrNZiyLhJ +DncKjvbdaMkBruNH +DoDKjvbdZyDjNcMS +EPCjjvbdZjTIQHCG +EObkKvbdjJegilwr +EPDKjvbdHffzYxYH +EPDKjvbdaSGChTfL +DoDLKvbdcJMjLGWx +EOcLKvbdtlXvaTaX +DoCjjvbdGYuVAcxC +EOcLKvbdUsltGLvK +EPDLKvbdRNXayOUz +DoDLKvbdRadFLiYk +EOcKjvbdCTAbsfXS +EPCjjvbdGZVVAdYC +EPDLKvbdypnliJwA +EPCjjvbdSBdFLhxk +EOcLKvbdGLFSbhNV +DncKjvbdTppnuUhN +EObkKvbdezvYdiTw +DoCkKvbdIsZBSlxM +DncLKvbdRNYBxmtz +EPCkKvbdeFOqawCj +DnbjjvbdtSrTYzEc +DncKjvbdkDLkQgUg +DnbjjvbdEARhlzXX +EOcKjvbdWRmxBeMD +DoDLKvbdzQnliKXA +EPDKjvbdpfDdtWAh +DncLKvbdMgCpMpVL +DnbkKvbdiZtfLpmf +EPDLKvbdzQoNJJwA +EPCkKvbdaNKasUmH +EPDLKvbdRbDeLhyL +DoDLKvbdKRZeOeme +EOcKjvbdZxdJmcMS +DncLKvbdeKKSVtzn +EPDLKvbdRjxeuHLT +EObkKvbdNGcPmPtk +DoCkKvbdtcDVWvPP +EPCjjvbdcTDKscjB +DoDLKvbdbrcLTcia +EObjjvbdvlvAMcdm +EObjjvbdFxuVBDwb +EPCjjvbdhkdcmtby +EOcKjvbdRotHKFcw +DncLKvbdelfWgNKL +EObkKvbduCbuXVno +EPDKjvbdEYXlUUUM +EOcKjvbdbUbHXjsh +EOcLKvbdmgEwmOHZ +DoCjjvbdEXxLsssl +EPDLKvbdZLqdTmlN +EOcLKvbdbsCkUEJa +EOcKjvbdqvpLbhxq +EOcKjvbdfIKvRmpg +DncLKvbdGBOpxizm +DoDLKvbdnBiwXnmu +DoCjjvbdKWVFceGi +EOcLKvbdRbEEkiZL +EObjjvbdffMZmgHA +DoCjjvbdUMWPBWPJ +EObkKvbdkClKpftg +DoDLKvbdBhkBkIej +DoDKjvbdhgJbyWJu +DoCjjvbdEASIlzXX +EPDKjvbdGZUtaDxC +DnbjjvbdlYsRryHU +EOcKjvbdhgKCyWJu +EPCkKvbdsQWOibuf +DoCjjvbdRMwbYmtz +DoDKjvbdZxdJnClS +EPCjjvbdJTZBTNYM +DnbjjvbdiLeEOUby +EOcLKvbdjEjgUoAO +EPCkKvbdzitopDrt +EPCjjvbdtcCuWvPP +DncKjvbdZMRdUNlN +DoDLKvbddZxoxZRC +DoDKjvbdFVxoomKF +DoCkKvbdSLYeuGkT +DncLKvbdYSlBNTnx +EObkKvbdeuzwoizs +EPDKjvbdUQpoUuIN +DoDKjvbdmpZxujyC +EPCjjvbdDGlFgAzc +EPCjjvbdkCkkRGuH +DnbkKvbdvlvAMdFN +DoDLKvbdatbHXkUI +EPCjjvbdFWYoolie +DnbjjvbdrEFJPnWB +EObkKvbdpyOggQcx +EOcKjvbdqwQMChxq +EOcKjvbdqrVLNkAm +EOcKjvbderBWzlCo +DoDLKvbdRWmdDMHc +EOcLKvbdZoNhdeZj +DnbkKvbdunszpkPU +EPDKjvbdGAnpxizm +DoCkKvbdKCjCqKCx +EOcKjvbdZshhyDrn +DoDKjvbdddoSBvcK +DncKjvbdcScKtEJa +EOcLKvbdZjShQGbG +DncLKvbdDncKkXDE +EPDLKvbdrzMQTBHn +EPDLKvbdIxUBglRQ +EPDKjvbdcyxpXxpb +EObkKvbdMSXMytpz +EObkKvbdijGIKMwr +EObkKvbdzdzOzdyp +DnbjjvbdeATplwjG +DnbkKvbdcIlikFwY +DoDLKvbdsPunicVf +EPDKjvbdmozYvLZC +DoCkKvbdkyTSSxgU +DncLKvbdRWnDcLhD +DncKjvbdHELWJaij +DncKjvbdZQmFIleR +EOcKjvbdiCOcEvpq +EOcKjvbdbrbkUEKB +EOcLKvbdOFEThhjd +EObkKvbdbBVdepPw +EObkKvbdUxhTzKnn +EObkKvbdzoPpdblY +EOcLKvbdrbFllHLZ +DoDKjvbdjggMGGOL +DncLKvbdqceJQNua +DoDKjvbdiHJbxvJu +DoDLKvbdySnImSBg +EPCkKvbdtTRrxzFD +EOcLKvbdkVvnEBxX +DnbjjvbdtcCtvvOo +EPCkKvbdyzdmrHiI +DoDKjvbdFjdrbhMu +DoDLKvbdZyEKODLr +DoDKjvbdURQnuVHm +EPCkKvbdZyDimcMS +EOcLKvbdNQXpunHT +DnbjjvbdQlxCYmtz +DnbjjvbdCDoaVimG +EObjjvbdsPvOibvG +DnbjjvbdgGLynGgA +DncLKvbdCDoaWJmG +EObkKvbdnCKXXnnV +EOcLKvbdUxgtZkPO +DnbkKvbdiMFDmuDZ +DncKjvbdiGicZWKV +DoDKjvbdcScKtEJa +DoDKjvbdpssgRqkU +DncKjvbdsBfNLgKy +DoDLKvbdGYttaDwb +DncKjvbdjvWnDaxX +EPCjjvbdhgJcYuiu +DnbjjvbdxUldpxlO +DoDKjvbdUaCRSqSZ +DnbkKvbdNwoVzdNt +DoCkKvbdZnnIeEzK +EPDKjvbdNeEUJIkE +DnbjjvbdJbjDQjDY +EPDLKvbdKVuFceGi +EPCkKvbdKkBIWAJy +EObjjvbdrafMlHLZ +EOcLKvbdZLqctNkm +EObjjvbdMgComPtk +DncKjvbdjhHMGGOL +DnbkKvbdJYUCIMQp +DoCjjvbdhlEcnVCy +DoDLKvbdxsOJNSBg +EOcLKvbdRMxBxmtz +EOcLKvbdHDjujCJj +EObjjvbdZRMdhmFR +EPDLKvbdUQpoUthN +EPCkKvbdvlvANEFN +EObkKvbdSCEEkhxk +EPCjjvbdLBKfmCXq +EPDKjvbdOStVfduQ +EPCjjvbdGcjvJbKK +DnbjjvbdVBBprpqy +DoCjjvbdirziTLJz +DncLKvbdFWYpQNKF +DoDLKvbdjKGHjNYS +DncKjvbdZnmiEdzK +DoDKjvbdySmiMrBg +DncLKvbdeAURNYKG +EPDLKvbdemGWflik +DoDKjvbdaMkBrtmH +DoDKjvbdIxUBglRQ +DoDKjvbdOEcshhjd +EPCjjvbdpxnhGqDx +DncKjvbdYSlBNToY +DnbjjvbdGGKSOJUR +EOcLKvbdZjTHpGbG +EPCjjvbdIHGzZYXg +DncKjvbddndsLTsr +DnbjjvbdqAheAXIE +EOcKjvbdVhXvXfxz +DncKjvbdFyVVAdYC +DnbjjvbdJvVFceGi +EPCkKvbdoznDjwoA +EPDKjvbdvPTzqLPU +EObjjvbdiifIKMwr +EOcLKvbdlZTSSxgU +EObjjvbdQvnECkgc +DncLKvbdjgfkfGNk +DnbkKvbdCDoaWJmG +DnbkKvbdxnTHwriD +DncKjvbdoAKzshDn +DoDKjvbdvAdZSndh +DnbjjvbdRpTgKFcw +EOcLKvbdiiegilwr +EOcKjvbdGdLVjBjK +EObkKvbdGFjRmhtR +EPCjjvbdZsiJYdTO +EPCjjvbdJJdAKPfd +EPDLKvbdKfGHbBRV +DncLKvbdjhHMFenL +EObkKvbdbLMFnnDA +DoCjjvbdUWMPisaR +DnbkKvbdZjTHpHCG +EObkKvbdbsCkTcjB +EPCkKvbdSLYfUfkT +DoDKjvbdZeYGzhIb +DncKjvbdrovPJcVf +EPCjjvbdePFSjtTr +DncKjvbdJbibqJbx +EPDLKvbdDxYMUUTl +DnbkKvbdZHXEAPSi +DncKjvbdVTmUFlVj +EPDKjvbdzoQREcLx +EPDKjvbdKfFhCAqV +DoDKjvbduDDUwVoP +DoDKjvbdgFlZmfgA +EObjjvbdTAEiHbOd +DoCkKvbdMowqVmgT +DncKjvbduMXwBTaX +DncKjvbdeYZssrFz +DncLKvbdmfdxNNgZ +DncLKvbdxLXDgzzG +DoCjjvbdNsTvGduQ +EPDLKvbdTpqOtuHm +EObkKvbdZMRctOMN +EPCjjvbdHEKuibJj +EPCjjvbdBiKbLJGK +DoCjjvbdUtNUFkvK +EOcKjvbdVTltFkuj +DnbjjvbdczYpXxqC +EPDLKvbduWNxKQsA +EOcKjvbddZyQYYqC +DnbkKvbdyfyMAMdw +DncLKvbdDihKWXjA +EPCjjvbdoAKztIDn +DoCjjvbdcTDLUDjB +EPDKjvbdJcJcRKCx +DncKjvbdIxTahLqQ +DoDLKvbdTqROttgm +DoDKjvbdjblLQgUg +EOcLKvbdTppnuUhN +EPCjjvbdrMyjZLgi +EObjjvbdypnmIjXA +DoCkKvbdczYoxZRC +EObkKvbdFjeTDHmV +EPCjjvbdZxcimbkr +DoDKjvbdatbHXkUI +EPDKjvbdvmWAMdEm +DoCjjvbdqwQMCiYq +DoDKjvbduWNwjQsA +DncKjvbdACqwjZiQ +DoCjjvbdOTTvGduQ +EObkKvbdirzhsKiz +EObjjvbdOTTugFUp +EOcLKvbdKDJbqJcY +DoCjjvbdiUyeXRtb +EObjjvbdfMfXHNKL +EOcKjvbdjhHMFfNk +DncKjvbdRpUGjFcw +EPCjjvbdfILVqnRH +EOcKjvbdiHKCyWJu +DoDLKvbdnPzYvLYb +DnbkKvbdnGeYNOHZ +DoDKjvbdtvOXjQsA +EPCjjvbdmIctRVRa +EOcKjvbdpyOhGpcx +DnbkKvbdKQydoFnF +DoDKjvbdkVvnDaww +EObjjvbdbUbHXjsh +EOcKjvbdCJLCLIfK +EPDKjvbdZeYGzhJC +DncKjvbdcScLUDia +DoCkKvbdQmXbZOUz +EOcLKvbdRadFMIxk +DnbkKvbdziuPodSt +EOcKjvbdEXxMUUTl +DnbjjvbdegjvSOQg +EObkKvbdZtJJYdTO +EPDKjvbdVAbQsQrZ +DnbkKvbdkHflFfOL +EObkKvbdtcCuXWOo +DnbjjvbdcTDLUEJa +EPCjjvbdZjTIQHBf +EObjjvbdTAEhhCPE +EOcLKvbdbhlikFwY +DoDLKvbdEPDKkWbd +EOcKjvbdZtJJZESn +EPDKjvbdZMRdUNlN +EPCkKvbdhgJcZWJu +DncKjvbdUaBqSprZ +EOcLKvbdEJgiuxKA +EObjjvbdSPtHKFcw +DoCjjvbdFfKSOJUR +EObjjvbdVrOXaeMD +DoCjjvbdrXPkcIxq +DoDKjvbdZjTHofaf +EOcLKvbdVYgszLOn +DncKjvbdIwsagkpp +DncLKvbdTkvPBVni +EOcLKvbdUtNUFkuj +EObjjvbdZnmheEyj +EPDKjvbdyYIjBoyk +EPCkKvbdqlyiyMIJ +EPCjjvbdYzbeqjVy +EOcLKvbdUQqOuVIN +EObkKvbdZMSDtOMN +DncKjvbdVvhxWDdg +EOcLKvbdiZuFlRNf +EObjjvbdZtJJYcrn +EPCjjvbdmuUzKirG +DoDLKvbdVUMtGMVj +EPDLKvbdhWyAzzAJ +DoDLKvbdfIKvRmqH +DnbjjvbdqdFIpOVa +DnbkKvbdIwtCHkpp +EOcKjvbdeEnrBvcK +DnbkKvbdJuuFdFGi +DoDKjvbdeOeTKtUS +EObjjvbdKWUfDeGi +EPCjjvbdiHJbyViu +EOcKjvbdBraCsfWr +DoCjjvbdGYuVBEYC +DoCkKvbdnHEwmOHZ +EPDKjvbdZisIQGaf +EPCkKvbdmpZxvKyC +DoDLKvbdmSYuZrdJ +EObkKvbdKDJbqKCx +EOcLKvbdZsiJZETO +EPDKjvbdnCJvxOmu +DoCkKvbdjgflGGOL +DnbkKvbdRosfjFdX +EPCjjvbdRECaQQcr +DnbkKvbdNHComQVL +EPCjjvbdrJAKEmOe +DoDLKvbdqBJFAXIE +DncLKvbdGLFTDINV +EOcLKvbdhgJbxujV +DnbkKvbdjSzhsKiz +EOcKjvbdKWVGDdfi +DoDKjvbdZnnIeFZj +DnbjjvbdxxIiaoyk +EObkKvbdczYpYZQb +EPCjjvbdZxcjODMS +EObkKvbdiHJbxvKV +DoCjjvbdJzoexEAN +DoCjjvbdaRfChTek +DoDLKvbdxwhjCPyk +DoDLKvbdVqnYBeLc +DnbkKvbdRDcBPpdS +EObkKvbdYqNFImFR +EPDKjvbdsrrTYzFD +EOcKjvbdqcdhpOWB +EOcKjvbdaNLCTUmH +DoDKjvbdnPzYukZC +DncLKvbdKCjDRKCx +EObjjvbdFkEsDINV +EPDKjvbdMgDQMouL +DncLKvbdOXnuzdNt +EPCjjvbdpstGqrLU +EPCkKvbdRbDdkhyL +DnbkKvbdaogGdLzd +DncKjvbdjlbLydgP +DnbjjvbdUMVoAvPJ +EPCjjvbdJqZeOfOF +DoDLKvbdUsmTekvK +DoCjjvbdpyOgfpcx +DnbkKvbdJYUCIMRQ +DncLKvbdjJfHjMwr +DoCjjvbdRosgKGDw +DoCkKvbddZxpYYqC +DncKjvbdddnrBwCj +EPDKjvbdijGIJlxS +DoCjjvbdkWWnECYX +EObkKvbdqlzJxlIJ +EOcLKvbdzaAPHHBl +DoDKjvbdlZTSSyGt +DnbjjvbdatbHXkUI +EOcLKvbdNdcshiKd +DncKjvbdGdKujBjK +DnbjjvbdRWnDcMID +DoCjjvbdSxKlNzkY +EPDKjvbdHDkWJbJj +EPDLKvbdZxcjNcLr +EOcKjvbdLYqKSzuG +EPDLKvbdjuvmcaww +EPDKjvbdxmrhYTJD +EOcKjvbdZirhPfaf +DnbjjvbdfIKurNqH +EPCkKvbdYTLaNTnx +DoDLKvbddtAUASlv +EPCkKvbdZLrDtOLm +DnbjjvbdnGdxMnHZ +DoCjjvbdeFPSCXCj +DncLKvbdYORAYUvU +EPCjjvbdrXQMDJZR +EPCkKvbdRpTfjGDw +DoCjjvbdpssfrSKt +EPCkKvbdKWUedFHJ +DnbjjvbdVvhwvDdg +DncKjvbdLrWlzUpz +DncKjvbdwtmFQxkn +EObkKvbdmIdTqUqa +DnbkKvbdJutedFHJ +EOcKjvbdVZITykPO +DoDLKvbdhbPDFXQq +DnbjjvbdmuVZjirG +DncLKvbdieKgVPAO +DncKjvbdEuyPpNJe +DoDKjvbdiHJcYuiu +EPDKjvbdmgFYNNfy +DnbkKvbdOTUWGeUp +DoCjjvbdZRNFJNFR +EPDLKvbdYpmFJNEq +EObkKvbdRMxBxnUz +DncKjvbdNQYQvOHT +EOcLKvbdMoxRVnHT +DoDKjvbdpyOhGpcx +EObjjvbdRyjITDWA +EObjjvbdrykosAhO +EOcLKvbdhaoDFXRR +DoDLKvbdIryBSmYM +DnbjjvbdlZSrTYft +DncLKvbdegjurORH +EOcKjvbdJYUCHlRQ +EOcLKvbdREDApRES +EObjjvbdmgFYMnHZ +EPCkKvbdZyDimblS +DoCkKvbdiCPCdwQq +EObkKvbdbVBgYKtI +DoDLKvbdNddUJJLE +DoCjjvbdrpVnibuf +EPDLKvbdKaLGlbYR +DnbjjvbdTpqPVUhN +DoCjjvbdcyxoxYpb +EPDKjvbdhfibxvJu +EPCjjvbdJpydnfNe +DncLKvbduWOXipsA +DoDKjvbdrRtkNkAm +EObkKvbdNQXqVmgT +EObkKvbdCIkBkJFj +EPDLKvbdqUUHSRjt +EOcLKvbdeYZtTqez +EPCjjvbdqUUHRqkU +DncKjvbdkWXODaxX +EPCkKvbdaNKbTVNH +EPCjjvbdvAcxroEh +EOcKjvbdlZTSTZGt +EOcLKvbdLAkHNCYR +DoDLKvbdUtMselWK +EPCjjvbdnVUzKjRf +DoDLKvbdypoMiJwA +EObjjvbdKDKCqKDY +DoCjjvbdrWolDIxq +DoDKjvbdwyhFfXeS +EOcKjvbdnGeYMmgZ +DoDLKvbdREDAopcr +EPCjjvbdiUzFXRuC +DoDLKvbdZQldhmEq +EPCjjvbdtvNwipsA +EPDKjvbdbrcLUDia +DoDLKvbdegkVqnQg +DoCjjvbdznopdcMY +DoCjjvbdmfeXlmgZ +DncLKvbdXrlBMsnx +DoCjjvbdmgEwmOGy +DoCkKvbdjmCLydgP +DncLKvbdmJEUQuSB +DnbjjvbdRbDeLiYk +DnbkKvbdQdDBPqDr +EObkKvbdjKGHjMxS +DoCkKvbdyOTHxSiD +EPCjjvbdQwNdCkhD +EObjjvbdfNFwGljL +EObjjvbdVqmxCElD +EOcKjvbdeOeTKtTr +DoDKjvbdUaBqSpqy +DnbjjvbdmIdURUqa +DoCkKvbdUWMQJtBR +DnbjjvbdxnSgxSiD +DncKjvbdwXMBVaVu +DnbjjvbdvvkaVaWV +EObkKvbdmaiwXnmu +DoCjjvbdgQBzwEYI +EOcKjvbdFVxpPmJe +EObjjvbdKDJcQjCx +DoCkKvbdYlRdUOMN +EOcLKvbdZoOIddzK +DoCjjvbdffMZnHHA +DncKjvbdnQZxujxb +EPDLKvbdwXMBWBVu +DoCjjvbdLFfIBaQu +DncKjvbdGQASwHFy +DnbkKvbdauBfxKsh +EOcLKvbdraelkgKy +EObkKvbdnVUzLKSG +DoDKjvbdANHxrwZx +DncLKvbdqZPHfqEY +EObjjvbdvPTzpjoU +EObjjvbdrWpMDIyR +DnbkKvbdCDpBWKNG +DnbkKvbdyOSgwrhc +DnbkKvbdeKKSVtzn +DncKjvbdMowpumgT +EOcLKvbdOFDtIhjd +EPDKjvbdkDMLRGtg +EPDKjvbdiiehJlwr +EPDLKvbdBdQAvJlf +DoDLKvbdZyEKODMS +EObjjvbdJqZePFme +DnbkKvbdKxqKSztf +EObkKvbdmJEUQuSB +DnbkKvbdREDAopdS +EPDKjvbdwzHefYEr +EPDKjvbdnHExMnGy +EOcKjvbdmozZVjyC +EPDKjvbdZHWdAPTJ +DoDKjvbdjgfkfFnL +DncKjvbdczZPxYqC +DoDKjvbdEXwlUUTl +DncKjvbdhuZdvrVC +DnbkKvbdxKwDgzzG +EPCkKvbdsZlQSaIO +EOcKjvbdzRPMiKXA +DoDKjvbdqvolDIxq +DoDKjvbdQdCaPpcr +EPCjjvbdJmADyfuB +DnbjjvbdsCGNLgLZ +DoDKjvbdKfGICAqV +DoCkKvbdbiNJkGXY +DncKjvbdiGicYvKV +EPCjjvbdSxLLmzjx +DncKjvbdLAjflaxR +EPCkKvbdUyHsyjoO +DnbjjvbdcyxoxYqC +EObkKvbdxZgfGYFS +EPDLKvbdZoNiEeZj +DncLKvbdZtIhxcrn +EPDLKvbdIwtCILqQ +DncLKvbdQmXbYmtz +EOcLKvbdmuUzKiqf +EPDKjvbdsQVnibuf +EObjjvbdOSsugEtp +EOcLKvbdYlSETnLm +EObkKvbdUtNUGMWK +DoDLKvbdzeZnzeZp +DoDKjvbdqTtHRqkU +EObjjvbdmbJvxPNu +DoDLKvbdliDsqUqa +EPCjjvbdhanbdvpq +DoDKjvbdiifHilxS +DoDKjvbdmJDsptqa +DnbkKvbdDncKkWcE +EPCkKvbdaofgELzd +DncKjvbdijGIJmXr +EPCkKvbdRkYfUgLT +EObkKvbdHEKuibKK +DnbjjvbdVhXuwfxz +DoDLKvbdiMEcmuCy +DnbkKvbdJcJcQibx +DnbkKvbdmfeYNOGy +DoDKjvbdqUTgSSKt +EPDLKvbdePErjtUS +EObkKvbdaNKasUmH +EObkKvbdiifIJmYS +EOcKjvbdsPunjCvG +EObkKvbdbrcKtDjB +EPDKjvbdbhlikFwY +EPCjjvbdrpVnjDWG +EPCjjvbdaMkCStlg +DncKjvbdMpXqVnGs +EPDLKvbdZjShPfbG +EPDLKvbdfHkVrOQg +DoCkKvbdDnbjjvbd +DoCkKvbdkySqsYft +DoDLKvbdZRMeImEq +DoDLKvbdYpleIleR +DncKjvbdiHJbyViu +EObkKvbdrMyixkgi +EPDKjvbdqvokbiYq +EOcKjvbdzitoodTU +DnbjjvbdVYhTyjnn +EPDLKvbdyYJJbPzL +EObkKvbdeFPSCWcK +EPDKjvbdIsZArlxM +DnbjjvbdkIHLfGNk +DoDLKvbdehLVqmqH +EOcLKvbdvBEZTPFI +DncKjvbdnUuZjirG +EPCjjvbdakLfOnDA +DnbkKvbdEzsqEkcJ +DnbjjvbdVhXvXgYz +DoCjjvbdIryBTNYM +DncKjvbdZirgpHBf +DoDKjvbdEYYLsstM +DnbjjvbdZshhyETO +DoCjjvbdOTUVgFVQ +EObjjvbdZisHpGbG +DoDLKvbdkDLkRGtg +EObkKvbdegjvSNpg +DncLKvbdfIKvRnQg +DncLKvbdJKEAJpGd +DncKjvbdrRtkNkBN +EPCkKvbdjvWnDaxX +DoCjjvbdmfdwmNgZ +DnbjjvbdbrcLUEJa +DncLKvbdnQZxujxb +DoDKjvbdNsTugEuQ +EOcKjvbdUVlPisaR +EObkKvbdHDjujBij +EPDLKvbdSBdFMJYk +EPCkKvbdVvhxVdFH +DncKjvbdIsYaTNXl +EPDLKvbdIrxaSlxM +EPDKjvbdfoazwDwh +EPCkKvbddeOqbXDK +DoCjjvbdJpzEnfNe +DncKjvbdqiAKFNOe +EPDLKvbduDCtwWOo +DnbjjvbdZjShQGbG +EObjjvbdVAbQsRSZ +DncLKvbdtcCuWuoP +DoDKjvbdTvLoitAq +EOcLKvbdZQleIleR +DoCkKvbduLxXAtAw +DnbjjvbdqYoHfqDx +DoDKjvbdJYTbHkqQ +DncLKvbdGZUtaDxC +EObjjvbdqFdEtWAh +EPCkKvbdILaznWqL +EObkKvbdQwNdCkhD +EPCkKvbdmJDsqUqa +EOcKjvbdvBEYrneI +DoDKjvbdapGgELzd +DoCjjvbdwWlAvAvV +DoDLKvbdJbicQicY +EPDKjvbdaaVdepPw +DoCkKvbdsZkosAhO +DoCkKvbdNeETiJKd +EObkKvbdEObkLXCd +EPCjjvbduCbuXVno +DoCkKvbdrykpTBHn +DnbkKvbdrEFIpNua +DoCjjvbdlYrrSxft +DoDLKvbdqdFIpOVa +EObjjvbdrbFmMGjy +DnbkKvbdRpUHKGDw +EOcLKvbdzoPpdcMY +DoDLKvbdfILVqnQg +DoCkKvbdlZSqsZHU +DncKjvbdrzMQSaIO +DoCkKvbdhuZeWrUb +EObjjvbdfSAvzkbo +DoCkKvbdVZIUZjnn +EOcLKvbdhlEdOUcZ +DoDKjvbdbUagXkUI +DoCjjvbdqUTgRqjt +DoDLKvbdqTsfrRjt +DnbkKvbdrouoKCuf +EPDKjvbdmbKXXoNu +DoDLKvbdhbPDEwRR +DncLKvbduVnYKRTA +DoCjjvbdcJNKKfXY +EPCjjvbdeFOrCXDK +EPCkKvbdczYoxYpb +DnbkKvbdKfGHaaRV +DoCjjvbdMuTRjmAX +DoDKjvbdkMalZeGo +DnbkKvbdbhmKLFvx +EPDLKvbdjuwODbXw +DoDLKvbdUMVoBVoJ +DoCkKvbdRpTgJfDw +EOcLKvbdajlFoNcA +EPCjjvbdRMwaxnUz +EOcLKvbdJcJbpjDY +DoCjjvbdjhHLefNk +EOcLKvbdcasNSATm +DoDKjvbdyOTHwriD +EObjjvbdKQydnenF +EObjjvbdZirhPgBf +EPCjjvbdBiKbLIfK +EOcKjvbdNeDtIiKd +EOcKjvbdkDLjqGtg +DoDKjvbduDDVWuoP +DncLKvbdePErjtTr +EOcKjvbdJbicQjDY +EPDKjvbdrylQTBHn +DnbjjvbdkMbMZeGo +DncLKvbdtlYWaUAw +DoCjjvbdDwxMUTtM +EObkKvbdjblKqGtg +DoDKjvbdRMxCZNtz +EObkKvbdqYoIGqDx +EPDKjvbdmfeYNNgZ +EObjjvbdTAFIhCPE +DoCjjvbdjKGIKMxS +EOcLKvbdMpYRWOHT +EOcLKvbdMoxRVnGs +DncKjvbdhaoDEwQq +DnbkKvbdEXxMTtTl +EPCkKvbdMgCpMpVL +EObjjvbdRzKITDWA +EOcLKvbdrzLosBHn +EPCkKvbdBraCsfWr +DoCkKvbdaaVeGPow +EOcLKvbdIGgZyXxH +EPDKjvbdliETptqa +EOcLKvbdbKlGPODA +DnbjjvbdRadElJZL +EPDLKvbdjFLHVPAO +DnbkKvbdiBnbdwRR +EObkKvbdvBDyTOeI +DnbjjvbdUyHtZjnn +DnbkKvbdmgFYNOGy +DnbkKvbdGKdsDHlu +EPDLKvbdZRNEiMeR +DoCkKvbdbLLeoODA +EObkKvbdANIZSvzY +DoCkKvbdziuPpDrt +DnbjjvbdWHwvXgYz +EPDKjvbdsBfNLgLZ +DoCkKvbdWWiXudFH +EPDLKvbdwzIGGYEr +EOcLKvbdVTmUGMWK +EObjjvbdMSXMytpz +DncKjvbdZirhQGaf +EObjjvbdCJLBjiGK +EPCjjvbdZLrETnLm +EObjjvbdelevfljL +DncKjvbdGYuVBEYC +EPCkKvbdkCkjpgUg +DoCkKvbdbhljLFwY +DnbjjvbdeEoSBvbj +DncLKvbdvAcyTPFI +DnbkKvbdjblLQgVH +EPCjjvbdeEoSBvbj +DnbkKvbdaMjbStlg +EObjjvbdrDdhpOWB +EOcKjvbdbKlFoODA +EPDLKvbdZjTIQGaf +EObjjvbdEzsqEkcJ +DnbjjvbdZRNEiNEq +EObjjvbdqlzJxlIJ +DnbkKvbdkIHLfFmk +EObkKvbdMtrrKmAX +EPCkKvbdNQXpvNgT +EPCkKvbdbrcKtEKB +EObjjvbdSPtGjGEX +DoDKjvbdxwiJaoyk +DnbjjvbdVYhUZkPO +DoDLKvbdXrlBNUPY +DoDKjvbdZnmiEdzK +DoCjjvbdWWiXvDeH +DoDLKvbdyNsHwsIc +DoDKjvbdwyhFfYEr +EPDLKvbdNeDshhkE +EPDKjvbdBiLBkJFj +EOcKjvbdJqZdoGNe +EOcKjvbdbAvEepQX +DoCjjvbdaNLBsUlg +EPDLKvbdvBDxsOdh +DncKjvbdGFirNiTq +EPDLKvbdZnmiEeZj +DncLKvbdePFSjtTr +EOcKjvbdnGdwlnHZ +EOcLKvbduDDUvuno +EObjjvbdZQmFIldq +DoCkKvbdcyxpYYqC +EOcLKvbdMRvlzVQz +DoCjjvbdtcDUwVoP +EPCkKvbdrXQLbhxq +DoDKjvbdkVwODbXw +DnbjjvbdnCJwYOmu +DnbkKvbdqvpLbhxq +DoDKjvbdKDJcQjDY +DnbkKvbdvwMAvAuu +EPDKjvbdtvNxKRTA +DoDKjvbdYkqctOMN +DoDKjvbdtcCuWvOo +DoCjjvbdEObkLXDE +DoCkKvbdbrbjtDia +EObkKvbdDncKkXDE +DnbjjvbdxxJKBozL +EPCjjvbdbhlikGWx +DncKjvbdJXtCIMRQ +EOcLKvbdkVvmcaxX +DoCjjvbdqwPkbhyR +EObjjvbdySnImRbH +EObjjvbdZQleImFR +EObkKvbdmpZxujyC +EPCjjvbdhbPDEvpq +EObkKvbdpyPHgREY +DoDLKvbdwzIGGXeS +EObjjvbdaSGChUGL +DoDKjvbdrbFmMGkZ +EPCkKvbdxKwEHzyf +DnbkKvbdJXtBgkpp +EPCkKvbdlZTRrxft +EOcKjvbdFVyPpNKF +DoCkKvbdaRecHsek +DoDKjvbdFfKRnJUR +DoCjjvbdyOTIXrhc +DoDLKvbdyOSgxShc +DoDKjvbdEOcKjwCd +DoCjjvbdzoPpeClY +DoCkKvbdURRPVUhN +DoDLKvbdVqmxCFMD +EOcKjvbdNVSrKmAX +EOcKjvbdTvLpKTaR +EPDLKvbdCTAbtFwS +EPDLKvbdZyEKNblS +EOcLKvbdsCFllHLZ +EObkKvbdjlbMZeHP +EPDKjvbdMpXpunGs +EObjjvbdaNLCSuNH +DoDLKvbdkCkjqHUg +EPCjjvbdTYKlNzjx +DnbjjvbdNxOuzdOU +DoCkKvbdegjvRmpg +DoCjjvbdhfjCyWKV +DncLKvbdjggMFfNk +EOcKjvbduVmwjRTA +DnbkKvbdDjHiuxKA +EOcLKvbddePRavcK +DnbkKvbdwkWcgzyf +DnbkKvbdHlBznXQk +EPCkKvbdatafxKsh +EPCjjvbdcJMjKfXY +DoDKjvbdrDdiQOWB +DoDLKvbdVvhwvEEg +EObjjvbdwjvdHzzG +DncLKvbduMYXAtAw +DoDLKvbdZQmFJNEq +EPCjjvbdyOTIXriD +DoCkKvbdbiNKLGWx +DncKjvbdHEKvKBij +EPDLKvbdYlSDtNkm +DoDKjvbdTqROuVIN +EPCkKvbddeOqbXCj +EOcLKvbdCTBCsewS +EPCjjvbdnUtykJrG +DnbjjvbdlZTSSyGt +EPCjjvbdjmBkyeGo +DnbkKvbdVhXuwfxz +DncLKvbdePFTLTsr +EOcKjvbdemGWgMik +EObkKvbdhuZeWquC +EPCjjvbdEvYpQNKF +EOcKjvbdpaJFAXHd +DoDKjvbdJSyBSmYM +EOcLKvbdSCDdlIxk +DncKjvbdSLZGVGkT +DnbkKvbdrbFlkgKy +EObjjvbdJSyAsMwl +EOcKjvbdEOcKkXDE +EPCjjvbdMoxQumfs +EPDKjvbdUQpnuUgm +DncKjvbdaaWFFoow +DnbkKvbdakMGPODA +EObkKvbdrEEhomua +EOcKjvbdmozZWLYb +EObjjvbdVgwuxGxz +EOcLKvbdCJLCKhej +EPDLKvbdVUNUGLvK +EOcLKvbdLGGHbBRV +DoCkKvbdlqxtysEJ +EOcLKvbdcScLTdKB +DncKjvbdhtydwRtb +DoCjjvbdcTCjscia +DncLKvbdUslsekuj +DoDKjvbdwuNFRYkn +EOcLKvbdijGHjNYS +DoCjjvbdJSyBSmYM +DoDKjvbdEYXlUTtM +EPDKjvbdUyITzKoO +DnbkKvbdvBDyTPFI +DoDKjvbdYlRcsmkm +DoDKjvbddePRbXCj +EPCkKvbdVZHtZjoO +EPDLKvbdWXIxVceH +EPCjjvbduDDUwVoP +DncKjvbdQlxBxnUz +DoDLKvbdfpBzvdYI +DoCjjvbdMJBlRYAS +EPCkKvbdZisHofaf +DnbkKvbdkWXNdCXw +EOcKjvbdEYXkstTl +EOcKjvbdfekymgHA +EPDKjvbdelfWflik +EPCjjvbddCTNSAUN +EPDKjvbdpfDeUVaI +DncLKvbdiBnbeWqR +EObjjvbdEuyPoljF +EPCkKvbdRDcBQRES +DncKjvbdhfibxujV +EObkKvbdVqnYBeMD +EPDKjvbdJKEAKQGd +EOcLKvbdsQVoJbuf +EOcKjvbdqcdhonVa +EObjjvbdJcKCqJcY +EOcKjvbdpfEEsuaI +EPDLKvbdxnTIYShc +EOcLKvbdxVMdqYlO +EObjjvbdZyDimcMS +DncKjvbdiGjCxvKV +DoCkKvbdRbEEkiYk +DoCjjvbdWIYVxHYz +EPDLKvbdYzcFqjVy +DncLKvbdTYLLmzjx +DoDLKvbdwXLaVaWV +DoDLKvbdMRvlyuQz +DoCjjvbdajkeoNcA +EPCjjvbdjEkHUoAO +DoCjjvbdZoNiFFZj +DncLKvbdlZTRryHU +DoCjjvbdcTDLTdJa +EOcLKvbdlhctRVSB +EObjjvbduaEYroFI +DncKjvbdzjUpQDsU +DoDLKvbdyqPNIiwA +DnbjjvbdhkdcnUby +EObjjvbdVYgtZjoO +DnbjjvbdCJLCLJFj +EPCjjvbdzeZnzdyp +DnbjjvbdqlyjZMIJ +EOcLKvbdGAnpyJzm +DoDLKvbdNGcQMpVL +DncKjvbdADSXiyiQ +DoCjjvbdLBLHNCYR +DoCkKvbduVnXjRTA +DncKjvbdtSqsZZeD +EPDKjvbdpyOhGqEY +EObjjvbdEuyPomKF +EPDKjvbdyOSgxTIc +EPDKjvbdGFiqnJTq +EOcKjvbdyYJJbPzL +DncLKvbdADRwjZiQ +DncLKvbdCSaDUFwS +DoDLKvbdEzsqEkbi +EOcLKvbdssSTYyeD +DnbkKvbdSBdEkiZL +EObjjvbdFWZQPlie +EObkKvbdbBVeFpPw +DoDLKvbdBdQBVjMf +EPDLKvbdptUHRqjt +EPCkKvbdQwODcMID +DoDLKvbdelevgMik +DnbjjvbdVTmUFkuj +DnbkKvbdLYqJrzuG +DoCkKvbdCTAbsevr +DoCjjvbdJpyeOfOF +EPCkKvbdOStWHEtp +EOcLKvbdKVtfEEfi +DoCkKvbdmuUykJqf +DnbjjvbdQZNAHSrK +DnbjjvbdMgDPlpUk +DnbkKvbdCIkBjhfK +EObjjvbdBsBCsewS +EOcLKvbdYzbfRivZ +EOcLKvbdrzMQSaHn +EOcKjvbdRosfjFcw +EPDKjvbdANHyTXZx +EPCkKvbdliDsptqa +EOcLKvbdACrXizIp +EPCjjvbdLFfICApu +DoCjjvbdbAvEepPw +EOcKjvbdTpqPVVHm +DoCjjvbdsBemMGjy +EPCkKvbduaEZTPEh +DoCkKvbdOStWHEtp +EPCjjvbdbBVeGQPw +EObjjvbdOSsufeUp +DoCkKvbdjAQHBPgK +EPCjjvbdbBWEfPow +EPDKjvbdtSqsZZdc +EPCkKvbdegjuqmpg +DoDLKvbdRotGifDw +DoDKjvbdmJEUQtrB +DoCjjvbdcIljKewY +EObkKvbdbiMjKewY +EObjjvbdcScKsdJa +EPDKjvbdtSqsYyeD +DnbkKvbdrpWOjCvG +EPDLKvbdBiKbLIej +EPCkKvbdBdPaWJmG +EObjjvbdZRNEhmEq +EOcLKvbdiUzFWrUb +EPCkKvbdmIdUQtrB +EPCkKvbdbUafxLTh +EOcKjvbdnCKWxOmu +DoCkKvbdsZkosBIO +DnbkKvbdHDjujCJj +DoCjjvbdWSOYCFLc +EPDKjvbdmJETqVSB +DnbjjvbdrXPkcJYq +EObkKvbdMgDPlpVL +DnbjjvbdZisHpGaf +DoCjjvbdGGJqmiTq +EObkKvbdIHGyyYXg +EObkKvbdqTsgRrKt +EObjjvbdmJDtRVSB +DnbjjvbdddoSBvbj +EPDKjvbddePSBvbj +DnbjjvbdBcpAvJlf +DncKjvbdezvYeItX +DoDKjvbdmgEwmNfy +EObjjvbdDigivXjA +EOcLKvbdmJEURUrB +EOcLKvbdePFTLTtS +EPDKjvbdVTmUGMVj +EPDKjvbdnBivwnnV +EPCjjvbdZnmhddzK +DncKjvbdZeXfzgiC +DoDLKvbdEuyPpNJe +DoDLKvbdqdEhpNua +DoDKjvbdFWYpQMie +DoCkKvbdMfcQMpVL +EOcKjvbdmttykKSG +DnbjjvbdlhcspuSB +EPCjjvbdWSNwbFMD +EPDKjvbdRbEElIyL +EOcKjvbdyNsHwsIc +EPCjjvbdrylQTAgn +DncLKvbdADSYJyiQ +EOcKjvbdZjTIPgBf +EObjjvbdKDKDQibx +EObkKvbdKDJcRJcY +DoCkKvbdmSZUzSdJ +EPCjjvbdaNKartlg +DoDKjvbdIGgZyXwg +EObjjvbdauCHXjsh +EObkKvbdxUmEpyLn +EPCjjvbdNsTugEtp +EPDLKvbdZyDimblS +DoDKjvbdbUagYKtI +DncKjvbdliETpuSB +EOcKjvbdDihKWXjA +DncKjvbdZtIiZETO +EObjjvbdygZMAMeX +DoDKjvbdfNGWgMik +DoCjjvbdZMSEUNkm +EOcKjvbdsrqsZZdc +EPCkKvbdACqxJzJQ +EPDLKvbdNdcshiKd +DoDKjvbdyqOmIiwA +EOcKjvbdRMwbYmtz +EOcKjvbdYpmEhleR +DoDKjvbdjJfHimYS +DoCjjvbdrbFmMHLZ +DoCkKvbdBcpBWKNG +DoDKjvbdIxTbHkqQ +DoDKjvbdhuZdwSUb +EPDLKvbdJYUBglQp +EPCkKvbduCcUwVno +DnbkKvbdwuNEpyMO +DncKjvbdssSSxzEc +DoDLKvbdGdLWJbKK +EObjjvbdFjdsDIMu +DncLKvbdfkGzbfAE +EOcLKvbdrRtkOLBN +EPDLKvbdajkfOmcA +EPCjjvbdrMzJxkhJ +DncLKvbdqZOhHREY +DoDKjvbdmJEUQuSB +DnbkKvbdRDbaQRES +EPCjjvbdpyPHgREY +DnbjjvbdMIalQxAS +DncLKvbdiZuGMROG +DoDKjvbdgFkymfgA +DncLKvbdsCGMkgLZ +EObkKvbdRotHJecw +EPDKjvbdkClKpftg +EPCkKvbdRjyGUgLT +EOcKjvbdhuZdvqtb +EOcLKvbdmttzKjSG +EObjjvbdhlEdOVDZ +DoDLKvbdZisHpGaf +DnbkKvbdTqQntuHm +EPDLKvbdNdctIiLE +EObkKvbdWRnXbFLc +EPDLKvbdKVtfDdgJ +EPCkKvbdJSyBTMwl +DnbkKvbduWNxKQsA +DoCkKvbdqGEFUVaI +EPDKjvbdhkdcnVDZ +EPCjjvbdySnIlrBg +EOcLKvbdYlRctNlN +EObkKvbdvBDxroFI +DoDLKvbdxwiJbPzL +EPCjjvbdyNsHxTJD +DoCjjvbdhfjDYujV +DoDLKvbdcImKLFwY +DnbjjvbdqwQMChxq +DncLKvbdaaWEfQPw +DnbkKvbdUQqOuUhN +EOcLKvbdUaCRSqSZ +DnbjjvbdRMxByOUz +EPDKjvbdKCjCpjCx +DncLKvbdrMzJyMIJ +EPCjjvbdOEdThhjd +EPDKjvbdrSUkOKaN +EObkKvbdMowpunGs +DoCjjvbdhzVGLpmf +EOcLKvbdaMkBsVMg +DoCjjvbdkIGkfFnL +DnbkKvbdYpldiNFR +EPDLKvbdZxcjNcMS +EPDKjvbdGGKRnJUR +EPCjjvbdbiNKKfWx +EObjjvbdmRyUyrci +DncKjvbdLrXNZtpz +DncKjvbdZjTIPgCG +DnbkKvbdypoNIiwA +EPCjjvbdDihKVxKA +DncKjvbdyfxlANFX +DoDKjvbdiMFEOVCy +EPCkKvbdtcDUvvPP +DoCkKvbdEvYpQMie +DnbjjvbdZLrDtOLm +EPCjjvbdKQzFPGNe +EPDKjvbdGdLVjCJj +DoDKjvbdqYoHfqDx +DoDLKvbdFVxoomJe +DnbkKvbdKRZePFnF +DoCjjvbdFVyQQMjF +DnbkKvbdTulQJsaR +EObkKvbdkHgMFenL +DoDKjvbdVUMselVj +EPDLKvbdrDdhonVa +DncKjvbdkVvmcaxX +DoDLKvbdrRuKnLAm +EOcKjvbdJbibpjDY +EPDKjvbdXrlAmToY +DnbkKvbdZirhQGbG +DnbjjvbdjgfkfFnL +EOcKjvbdGFjSOJTq +DoDKjvbdSCDeMJYk +DoCkKvbdpecdtWAh +EObjjvbdzeZnzdyp +DoCjjvbdMJBlQxAS +EPDKjvbdnBivwnmu +DoDKjvbdRadElIyL +DoDLKvbdsZlPsBHn +EObjjvbdznopeDLx +EOcLKvbdCJKbKiFj +DncLKvbdmgExNNfy +DnbkKvbdnPzYvKxb +DncKjvbdrDdiPnVa +DoCjjvbdAMgxrwZx +DncLKvbdTfzmkwWF +DncKjvbdqiAJdloF +EPCkKvbdwuMeRZLn +DoCjjvbdVUNUFkuj +DoDLKvbdKQyePGNe +DncKjvbdLqvlzVQz +DoDKjvbdmgFYNNgZ +DnbjjvbddxZtTrFz +EObkKvbdqTsgSSKt +DnbkKvbdZxcimcMS +DoCjjvbdANHySvyx +DoDLKvbdZQmFJMdq +DoCkKvbdHDjujBij +EPDLKvbdsPuoJbuf +EPCjjvbdYpmEhmFR +DncLKvbdZjTHpGaf +EPDKjvbdEuyQQNKF +DoCkKvbdmbKWxPNu +DoCkKvbdRjyFtfjs +DoCkKvbdiifHjNYS +EPDKjvbdpyOhGpdY +DoDKjvbdUVlPitBR +DoCjjvbdEKIJuwjA +EPCjjvbdFkFTDHmV +EOcLKvbdySnJNSCH +DncLKvbdRpUHJedX +EPDKjvbdtvOYJpsA +DoDKjvbdKDKDQjCx +DoDLKvbdaMkCTUmH +EOcKjvbdMpYRVnGs +EOcKjvbdtSqsYzFD +DncLKvbdKaKgNCXq +DoCkKvbdsCFllGkZ +EObkKvbdNrsvGeUp +DoDKjvbdmaivxOnV +EOcLKvbdOEctIhjd +DoCkKvbdemGXGljL +DoDLKvbdjvWmdBxX +EPCkKvbdCIjbLIej +EPCjjvbdkHfkfFmk +DoDLKvbdwzIGFwdr +EOcKjvbddBrlrAUN +EPCkKvbdJutecdgJ +DoCjjvbdWRmwaeLc +DnbkKvbdiVZdwRuC +DnbjjvbdGLEsDHmV +EPCkKvbdxsOJNSCH +EPCjjvbdIwtBgkqQ +DncKjvbdbrbjtDjB +EPCkKvbdjhGkeemk +DncKjvbdWWiXvDeH +EPCjjvbdnUtzKiqf +DncKjvbdTukoitAq +DncLKvbdCIkBjhfK +DoCkKvbdhgKDZWJu +EPDKjvbdBhkBjiFj +DnbjjvbdMfbpNPtk +DoDKjvbdnBjWxPOV +DoCjjvbdEJhKWYKA +EOcKjvbdTpqOtuHm +DoCjjvbdwzIFfXdr +EOcKjvbdrpVoKDVf +EOcLKvbdEYYLtTsl +DoCkKvbdLFfICBQu +EOcKjvbdeXzTsrFz +EOcLKvbdSQUHKFdX +EOcLKvbdraemMHLZ +EPDKjvbdkIGlFemk +DncKjvbdOYOuzcnU +DoCkKvbdIwtCILpp +DncLKvbdZoNiEdzK +DoDKjvbdsrqsZZeD +EPDLKvbdzGyMANEw +DncLKvbdBraCsewS +EObkKvbdpyOgfpcx +DnbjjvbdxmrgxTIc +EOcLKvbdZjSgpHCG +EPCjjvbdrWpMDIxq +DncKjvbdZtJIyESn +EPCjjvbdJSxaSmXl +DoCjjvbdiMFEOVCy +DoCjjvbdDwwlTstM +DncLKvbdJYUCHkpp +EPDLKvbdsrrSxzFD +EObjjvbdkHgMFfNk +EPDKjvbdOStVgFUp +DnbjjvbdjhHMGGOL +DnbjjvbdZyEJmcLr +EPDKjvbdDihKWYKA +DncLKvbdRosfiecw +DoCjjvbdyTNhmSCH +DnbkKvbdFeirNhsq +DoDKjvbdrDeIpNvB +EObkKvbdVAaqTRSZ +EPDLKvbdLAkGlbXq +EOcKjvbdVAaprqRy +EPDLKvbdfIKvRnQg +EPCjjvbdUQpoVUgm +EObjjvbdxVNEpyMO +EOcKjvbdsCFllGkZ +DncKjvbdsBelkgLZ +DoDLKvbdvlvANDeN +DoCjjvbdnBivwoNu +EObjjvbdsCGMkgLZ +EObjjvbdsPvPJbvG +EPDLKvbdxrnImRbH +EPDLKvbdNPxRVnHT +DoDLKvbdMtrqkNAX +DoDKjvbdiGicZWJu +EPDKjvbdOFEUJJLE +EPDLKvbdoAKzshDn +DoDKjvbdehKvRnQg +EObjjvbdLLBIWAKZ +EPDKjvbdeOdsLUUS +DncKjvbdjvWmdBxX +DncLKvbdezuyFJTw +EPCkKvbdNPwpumgT +EPCjjvbdkxsRrxgU +EPDLKvbdptUHSSLU +EPDKjvbdeATqNXif +EPCkKvbdjlakzEgP +EObjjvbdyXiKCPzL +DoCjjvbdhlFDmuDZ +DncKjvbdauCGxLUI +EObjjvbdySmiNSBg +EOcLKvbdfNGWfljL +DncLKvbdVviYWDdg +EPCkKvbdkIHLefOL +EPDLKvbdRNYCZNtz +DoDLKvbdmfdxNOGy +DoDLKvbdcScKtDjB +EOcLKvbdEPDLKvcE +EPCjjvbdUaBprqSZ +EObkKvbdddnqbXDK +EPCkKvbdaaVeGQQX +DoDLKvbduoTzqKnt +DnbjjvbdqwPkbhxq +EObkKvbduaEZTOdh +EOcLKvbdKfFhBaRV +EOcKjvbdVYgtZjoO +EOcLKvbdrSVKnKaN +DnbkKvbdsCFmMGjy +DnbkKvbdSLYeuGkT +DoCkKvbdwWlAvAuu +EPCjjvbdRXOEClID +EPCkKvbdCIkCKiFj +EOcKjvbdGckViajK +DoCkKvbdznpRFCkx +DnbjjvbdxKwDgzyf +DncKjvbdVAaprprZ +DoDKjvbdOEctIhjd +EObjjvbdmIdTptqa +DnbjjvbdvwMAuaWV +EObkKvbdEYXksssl +EPCkKvbdiZtelQnG +EOcKjvbdqdEhpOVa +DnbjjvbdidjfuPAO +DnbkKvbdnBivxPNu +EObkKvbdrSVKmkBN +DnbkKvbdiCPDFWqR +DncKjvbdZisHofaf +DoCjjvbdJvVFcdfi +DoDLKvbdcyxpYYpb +DoCjjvbdrykpTBHn +EPDLKvbdqrUkOKaN +DoCkKvbdGQATWgFy +DncKjvbduaDxsPFI +EPCkKvbdYkqdTnLm +EObjjvbdQYmAGsRj +DnbkKvbdZyEKOCkr +DnbkKvbdOEdThhjd +EPDKjvbdiCOcFWpq +EOcKjvbdMfcQNPtk +EPDLKvbdLGFhBaRV +EPDLKvbdssSSyZeD +EPCkKvbdTAFJIBoE +EObkKvbdeFPRavbj +DnbkKvbdjKFhKNYS +DncLKvbdCJLBjiGK +DncLKvbdqlzJyLhJ +EOcLKvbdRyigsCvA +DoDKjvbdYqMdhldq +DnbjjvbdehKvSOQg +EObjjvbdMgColouL +DoCkKvbdehKuqnRH +DoDKjvbdQvmdCkhD +DoDKjvbdMSWlzVQz +EObkKvbdbhlikGXY +DoCjjvbdeAUQmYJf +EPCjjvbdZyEJmcMS +DoDKjvbdIGfzYxYH +DoDLKvbdHDjvJbJj +EOcKjvbdQwNdCkgc +EPCkKvbdRWnDcMHc +DnbjjvbdrMzJyMIJ +DncKjvbdlhctQuSB +DoDKjvbdbPgGdLzd +EObkKvbdijFhJmXr +DoCjjvbdbQGgDkzd +EPDLKvbdDihJvXjA +EObjjvbdaNKasUmH +DncKjvbdZyEKOClS +DnbjjvbdSLYfVHLT +DoDLKvbdwzHfFweS +EPCjjvbdfNFwHNJk +DoDLKvbdelewHNJk +EPCjjvbduaDxroEh +DoDKjvbddwytURez +DncKjvbdwtmEpyLn +EOcLKvbdCIkBkIej +EOcLKvbdiLddOUcZ +EPDKjvbdiUydwSVC +DncKjvbdrEEiQOVa +DnbkKvbdYzbeqivZ +DoCjjvbdkVwOECYX +DoDLKvbdZLqcsmkm +EObjjvbdVYgtZkPO +EOcLKvbdHffyxwwg +EPDKjvbdcIljLGWx +DnbkKvbdMpXpvNfs +EOcLKvbdFeirOJTq +DncLKvbdWWhxWEFH +DoCjjvbdZRMdhmEq +DnbkKvbdULvPBWPJ +EPDLKvbdZRMdiMdq +DnbjjvbdTYLMNzkY +DoCkKvbdZxcjNblS +DoCkKvbdKCibpicY +EPDLKvbddoFTKtUS +DncLKvbdcImKLGXY +EOcKjvbdKaLGmBwq +EPCkKvbdnHFYMnGy +EPDKjvbdUQqPUuIN +EPDKjvbdeAURNYJf +DoCkKvbdxwiKCQZk +DnbkKvbdKVuGDeGi +EPDKjvbdrovOicVf +DoDLKvbdrylQSaHn +EOcLKvbdySmhlrBg +EOcLKvbdNrsufeVQ +EOcKjvbdzoQREblY +EPCkKvbdzaAOgHCM +DoCjjvbdZLqdTmkm +EObkKvbdNGbpNQUk +EOcKjvbdZshiYdSn +EPDLKvbdDncLKvbd +EOcKjvbdqlzJyMHi +DoCkKvbdBhkCKiFj +EOcLKvbdRaceLhyL +EPDLKvbdxsNiNRbH +DoDKjvbdtcCtwWOo +DnbjjvbdmfdwlnGy +DncKjvbdREDBQQdS +DncLKvbdnPzYvKxb +EPCjjvbdjgfkefNk +DnbkKvbdnUtykJrG +EPDKjvbdSCEFLiYk +EOcLKvbdGcjuiajK +EPCjjvbdJYUCHlRQ +EPDLKvbdYpleIldq +EObkKvbdfMfWflik +DncLKvbdwuMdpyLn +DoDLKvbdEPDLLWcE +DoDLKvbdZLrDtOLm +DoCkKvbddZxoxYqC +DncLKvbdTulQKUAq +DncKjvbdqrUjnKaN +DoCkKvbdGFjRmiTq +EPCjjvbdpssfrRkU +EPDKjvbdrXQLbiYq +DoCkKvbdNQYQunHT +DoCkKvbdNrtWHEuQ +DncLKvbdjgflGGNk +DncKjvbdBsBCsewS +DoCkKvbdMpYRVmfs +DnbkKvbdKfFhBaQu +EObkKvbdGcjuiaij +EObkKvbdakMGOnDA +DnbkKvbdFyUuAcxC +DnbkKvbdtSrTZZdc +EPCjjvbdatafxLTh +EPCkKvbdUGzmlXVe +EObkKvbdZyDinClS +DncKjvbdyzdnSIJI +DnbkKvbdnPyxukZC +DoDKjvbdkDMLQgVH +EObjjvbdbVBfwjtI +EPDLKvbdzRPMhiwA +EObkKvbdhkeDmuCy +DnbkKvbdZQleImEq +EObjjvbdrDeJPnVa +EPDLKvbdaNLBsVMg +DnbkKvbdOEctIhjd +EOcKjvbdatagXkUI +DncKjvbdMowpunGs +EObkKvbdtvNwiqTA +DnbjjvbdyzdnSHiI +EObkKvbdbhlikFvx +EOcKjvbdaNKaruNH +DnbkKvbdiVZdvqtb +EObkKvbdVYgszKoO +DoCkKvbdjJfIKMwr +DncLKvbdezvZFJTw +EObkKvbdcyxoxYqC +EPDLKvbdFejSNiTq +DncKjvbdIwsbIMQp +DnbjjvbdTukpJsaR +EPDLKvbdIsZArlxM +EPDKjvbdTAEhgand +EOcLKvbdfNGXHMik +DoDKjvbdjcMLQgUg +DncKjvbdSLYfVHKs +DoCjjvbdnBjWwoOV +EPCjjvbdnBjWwnnV +EObkKvbdQvmccLgc +EPDKjvbdwuMeRYlO +DoDKjvbdNddUJIjd +DoCkKvbdqUTgSRkU +DoDLKvbdehLVqmpg +DoDLKvbdrovOjCvG +EObjjvbdzoPpdcMY +EPDLKvbdZRNFIleR +DnbkKvbdSLZGVGjs +DoCkKvbdySmiMrBg +DnbkKvbdwyhFfXeS +DoDLKvbdWHwvYHYz +DoCjjvbdIHHZyYYH +EObjjvbdJSyArmXl +DncKjvbdACqxJyiQ +DncLKvbdmpZxujyC +DoCjjvbdFkFScINV +EPDLKvbdCDpAujNG +DnbkKvbdhkeDnUby +DncLKvbdFWYopNJe +DoCjjvbdLAjfmCYR +EPCjjvbdxrmiMrCH +EObjjvbdcImJkGWx +DoCjjvbdFejRnJTq +EObkKvbdYTMAlsnx +EPCjjvbdsPvOibuf +EObjjvbdNeDshhjd +EOcLKvbdBiKbLIej +EObkKvbdauCGxLTh +EPDKjvbdbBWEepQX +EPCkKvbdVrNxBdlD +EObjjvbdMIalRYAS +EOcKjvbdJcKCpjCx +EOcLKvbdLqwNZtpz +DoCkKvbdZisHogBf +DnbjjvbdEPDKjvbd +DoDLKvbdFWZQQNJe +EObkKvbdHgGzYwxH +EOcKjvbdjbkkQfuH +DnbjjvbdtkxXAtBX +EPDLKvbdLAkHNCXq +EOcLKvbdWWhxVdFH +DncLKvbdCWzdIeQW +DoDLKvbdVvhwvDdg +EObjjvbdpfDeUWAh +EOcLKvbdqmZixkhJ +DncKjvbdyzdmrIJI +DncLKvbdRpTgJecw +DoDLKvbdGFjSOIsq +EOcKjvbdwuNFQyLn +DnbjjvbdIsZAsMwl +DncKjvbdptTgRqkU +DncKjvbdZQmEiNEq +DnbkKvbdauCHYLTh +EPDLKvbdyzdmrHhh +EPCjjvbdZoOJFEyj +EOcLKvbdUQqOttgm +DoCjjvbdRNYCZNtz +EPDKjvbdrRtkOLBN +DncLKvbdmajWxOmu +EPDLKvbdLBLHMbXq +DoDLKvbdCIjajhfK +EObjjvbdYkrDtOMN +EOcLKvbdUtNUGMVj +EObjjvbdaSFcHsek +DnbkKvbdXrkaMtPY +DoCkKvbdZQmFImFR +EOcLKvbdcJMijewY +EPDLKvbdGLErbhNV +DnbkKvbdiUydwSVC +EPDLKvbddndsKssr +DoDLKvbdxwhjCPzL +DoCkKvbdxVMeQxkn +DncKjvbdiBoCdwRR +EPDLKvbdnPyyVkZC +EPCjjvbdmuUzLKRf +DoDLKvbdSQUGiecw +DoDKjvbdRbDdlJZL +DncKjvbdqrVKnLAm +DoDKjvbdVBCQsQrZ +DoDKjvbdmbKWxPNu +EObjjvbdFVyQPmKF +DnbjjvbdiiehJlxS +EOcKjvbdIrxaSmYM +EOcKjvbdsZkosAgn +EOcLKvbdnCKWxPOV +EPDLKvbdKWUecdfi +DncLKvbdhgKDZWKV +EPDLKvbdySnImSCH +EObkKvbdJKEAKQGd +EOcLKvbdZMSETmkm +DoCjjvbdhgJcYujV +EOcLKvbdehLVqmpg +DoCkKvbdezuyFItX +DncLKvbdvBDxsOeI +EObkKvbdTulPisaR +DnbkKvbdajkfPODA +DoDKjvbdYkrEUOLm +EPCkKvbdfIKvSNpg +EPCkKvbdiBncEwQq +EOcKjvbdKWUecdgJ +EObkKvbdYlRcsmkm +EPCjjvbddwzUTqez +DnbjjvbdeYZstRez +EPDLKvbdxVNEqZLn +DncLKvbdFjeScINV +EObjjvbdxUleQxkn +DncKjvbdKWUfDdfi +DoDLKvbdssRrxzEc +EObjjvbdRpUGiedX +EOcLKvbdZQleJMdq +DnbkKvbdqdFIpNua +EPCjjvbdYzberKWZ +DoDKjvbdxxIjBoyk +EOcLKvbdEObkKwDE +DoDLKvbdqquLNjaN +DncKjvbdwuNFRZLn +DoCjjvbdqUTgRrKt +EObkKvbdVwIwvDeH +DnbkKvbdVwJYWEEg +DnbjjvbdYlSETnMN +DnbkKvbdqTsgRqjt +DoDKjvbdiGicZVjV +DnbjjvbdxnTHxTJD +EObkKvbdqUTfrSKt +DoCkKvbdFyVVBEXb +EOcKjvbdqGDdsvAh +EPCkKvbdTkunaVni +EObkKvbdMRvlzVQz +EPDKjvbdDncKkWbd +EObjjvbdqqtkNkBN +DncLKvbdfHkWRnRH +DnbjjvbdiLdcnUby +EOcKjvbdVYgsyjnn +EPCjjvbdUtNTfMWK +EPDKjvbdqYoHgREY +DncKjvbdGZUuAdYC +DnbjjvbdDnbjjwDE +EOcKjvbdTqQntthN +EOcLKvbdUyITzLPO +EOcLKvbdjblLRHVH +DoCkKvbdLGFhCBQu +DncLKvbdliEUQuSB +EObkKvbdRacdkiZL +EOcLKvbdaSFcHtFk +DoDKjvbdJYTahLpp +EPDLKvbdUQqOuVIN +EPCjjvbdqmZjYkhJ +DoCkKvbdRjyGUgKs +EObjjvbdyNrhYSiD +EPCkKvbdBhkCKiFj +EObjjvbdYlSDtOLm +DoCjjvbdTAFIhBoE +DncKjvbdNdctJIjd +DoDLKvbdGdKvJaij +EObjjvbdJpydnfNe +EPDLKvbdCDpAvKNG +DoDLKvbdeEoRavbj +DoCkKvbddoFSjssr +EPCjjvbdqYoHfqEY +EPCkKvbdFkFScHmV +EObjjvbdcyyQYZRC +DoDKjvbdyzdmrHhh +DoDKjvbdUWLojUAq +EObkKvbdiCPCdwRR +DoCkKvbdCTBDTevr +EOcKjvbdLAkGlbXq +EPDKjvbdcyyQXyRC +EPDLKvbdyNsHxSiD +EPDKjvbdqUTgRrKt +DoDKjvbdJuuFdEfi +DoDLKvbdEXwktTtM +EObkKvbdeJirVtzn +EObjjvbdYTMBMsnx +DnbkKvbdNQXpumfs +EPDLKvbdzitopDrt +DncLKvbdDxXlUUUM +EOcKjvbdADSXiyhp +DoCjjvbdqTsgSSKt +DoCkKvbdZtIhxdTO +EOcKjvbdUyHtZjnn +EPDLKvbdcSbkTdKB +DncLKvbdxZgfGYEr +DncKjvbdeATplxJf +DoDLKvbdnCJwXnmu +DnbkKvbdbKlFnnDA +DoCkKvbdrDeIpNua +EPCjjvbdmttzKirG +DoDKjvbdbrbkUDjB +DnbkKvbddZxoxZRC +EObkKvbdhgKDZWKV +DnbjjvbdGFiqmhtR +EPDKjvbdULvOaWPJ +EOcLKvbdygYlANFX +DnbjjvbdIHGzZYYH +EOcKjvbdhkeENuCy +EOcLKvbdNddTiJLE +EObjjvbdGFiqnJUR +EOcLKvbdjvWnEBxX +EPCjjvbdVBCRTRSZ +DncKjvbdVBCRTRSZ +EObkKvbdBdQAvJlf +EObkKvbdJYUCHkpp +EOcKjvbdGckVjCJj +EObkKvbdBsAcUGWr +DoDLKvbdIxUBhMQp +DoDKjvbdMgDQNPtk +EOcLKvbdHEKujCKK +DoCjjvbdLhalQxAS +EObkKvbdULuoBVoJ +EPDKjvbdhfjDZVjV +DoCkKvbdKDJbqJbx +DoCkKvbdbKlGPNcA +DncKjvbdrpVnicWG +EPDKjvbdvAdZSneI +DnbkKvbdFyVUaEYC +EOcKjvbdHDjuibJj +DnbjjvbdbiMjLFvx +EPCjjvbdUsltGLvK +DoCjjvbdkNBkzEgP +DncLKvbdFxtuBEYC +EOcKjvbdnBjWxPNu +DnbkKvbdqUTfrRjt +EPCjjvbdZHXEAPSi +DoCjjvbdxxJJapZk +DncKjvbdZyDimcLr +DnbjjvbdiBnbeWpq +EObjjvbdjbkkQftg +EObjjvbdqvokbhyR +EOcLKvbdeYZtTrFz +EPCkKvbdLqvmZtpz +DoDKjvbdNeDsiIjd +EPCkKvbdeXystRez +EOcKjvbdAMhZSvzY +EPCjjvbdSwkMNzkY +DoDKjvbdtlYXAtBX +EPCjjvbdBvzdIdov +DoDLKvbdVBBqSqRy +EOcLKvbdTvMQKUAq +EOcLKvbdxVMeQyMO +EPDLKvbdBsAbtGWr +DoCkKvbdKefHaaRV +DncLKvbdCTBDTewS +EPCjjvbdTIyjRAAl +DoDKjvbdkxsSSxft +EObjjvbdjvXOECXw +EPDKjvbdVTlsfLvK +EOcKjvbdjJfHjNXr +EObjjvbdfMfWflik +DnbkKvbdYqNFImEq +DoDLKvbdcJMikFvx +DoCkKvbdrXPlDIyR +EObjjvbdeOdsLTtS +DncLKvbdJSyArmXl +EObjjvbdkNBlZeHP +EObkKvbdfHkVqnRH +DncLKvbdKCjCqKDY +DoDLKvbdUyHsykOn +DncKjvbdWWiYWEEg +EPCkKvbdKWVFdEfi +EObkKvbdFpATWgFy +EOcKjvbdrzLpTAgn +EPCjjvbdhuZeWrVC +EPCkKvbdraellGjy +DncLKvbdGKeTCgmV +DoDLKvbdCEQAvJlf +DoDLKvbdJvUfEFGi +EOcKjvbdHDkVjCJj +EPCjjvbdZxdJnClS +DoCjjvbdcImJjewY +DoDLKvbdkDMLRHUg +DoDLKvbdqZOggREY +DoCkKvbdkMakyeHP +DoCkKvbdEvYpPmJe +DncLKvbdJJdAJpHE +DoDKjvbdEPCjkXCd +DnbjjvbdlAmOmALA +DoDLKvbdsBfNLgLZ +DncLKvbdKyQjSzuG +EPDLKvbdeAURMxJf +EPCjjvbdkHflGGOL +EOcKjvbdEuxpPlie +DncKjvbdcyyPxYqC +DoCkKvbdRDbaPqES +DncLKvbdaaVeFpQX +EOcLKvbdMuTSLNAX +EPCkKvbdbiMjKfWx +EOcKjvbdSCEEkiZL +DncKjvbdbhmJkGWx +DncKjvbdWXJYVcdg +EOcLKvbdvBDxrndh +DoCkKvbdCEQBVjNG +EPDLKvbdxUmFQyMO +DnbkKvbdznpRFCkx +DoCjjvbdKDJbpjDY +EOcLKvbdREDBQRDr +DoDLKvbdZtIhyETO +EObjjvbdKfGHbBQu +DnbjjvbdnUtzKirG +EPDLKvbdyNsHwsIc +DoCjjvbdIrxaSlxM +DoCkKvbdRjyFuHLT +EPCkKvbdJvUfDdgJ +DnbkKvbdgQBzvcwh +DnbkKvbdpyOgfqEY +DnbkKvbdmRxuZsEJ +EObkKvbdmRyUysDi +DnbjjvbdrzMPraIO +EPDLKvbdDxXksssl +EPDLKvbdqUUGrSKt +EPCjjvbdZisIPfbG +EPDLKvbdiGicZVjV +DnbjjvbdqcdiPnVa +DoDLKvbdGKdsCglu +EPCkKvbdYSlBNUOx +DoCkKvbdjmBkyeHP +EObjjvbdKDJcRKDY +EPDKjvbdiLdcmuCy +DoCjjvbdbAvEfQQX +EPDKjvbdegjvRmqH +EOcLKvbdrounibvG +DoCkKvbdliEUQtrB +DoCkKvbdrXPlChyR +DnbkKvbdcyxoxZRC +DoCkKvbdWIYWYHYz +DnbkKvbdmJETptrB +EObjjvbdbBVeGPpX +DoCkKvbdypnliKXA +EOcLKvbdatagXkTh +EPDKjvbdrounjDWG +EPDKjvbdUyHsyjnn +EPDKjvbddZxoxZRC +DnbjjvbdKCjCpjDY +DoCjjvbdKkBHvAJy +DnbjjvbdjbkkRGuH +DoCjjvbdrafNMGjy +DncKjvbdxnTHwsJD +DncKjvbdemFvfmJk +DnbjjvbdIwsbILqQ +EObjjvbdUMWPAvOi +EOcLKvbdGKdsChMu +DoCjjvbdWXIxWEEg +DoCjjvbdvPTzqKnt +DoDKjvbdILazmwRL +EPCkKvbdjlakzFHP +EPDLKvbdKDJbqKCx +EOcLKvbdHELWKBjK +DoCkKvbdOFDshhkE +EPDKjvbdBhkCKhej +DoDKjvbdNddTiJKd +EPCkKvbdVqmwadkc +EPCkKvbdFfKSOItR +EPCjjvbdZshiYcrn +DncLKvbdvAcxsOeI +EObkKvbdKVtfEFHJ +DncLKvbdXsMBNUPY +DoDLKvbdCTAbtGXS +DoDKjvbdRyjHsDWA +DoCjjvbdJcKDRJcY +EOcKjvbdEuxpPljF +DncLKvbduWNxKQsA +EOcLKvbdhuZeXSUb +EObjjvbdjvWnDaxX +EObjjvbdwWlAvAuu +EObkKvbdqquKnLBN +DoDLKvbddCSmSATm +DoCjjvbdwtmEpxlO +DnbjjvbdDoCkLWcE +DncLKvbdwyhGFxEr +EOcKjvbdrykosAgn +DnbjjvbdNeEUJJLE +DoDKjvbdjuwNdCYX +EPDKjvbdiGibyVjV +DnbjjvbdYqNEhmEq +EPDLKvbdxVNEpyLn +DoCjjvbdZeYGzgiC +DoCjjvbdZjTIQGbG +DnbkKvbdSPsfjGEX +EObjjvbdBsBDUGXS +DoCkKvbdsBfNMGkZ +EOcLKvbdLBLGmCXq +EPDKjvbdJTZBTNYM +DnbjjvbdJTZBSmYM +DoDLKvbdjKFgjNYS +DoDKjvbdqlzKYkhJ +EPCkKvbdkWXOECYX +EObkKvbdFkEsDINV +EObjjvbddndsKstS +DoCjjvbdauBfwjsh +DnbjjvbdFjeTCglu +EOcLKvbdfMfWflik +EObjjvbdlYsRryGt +EPCjjvbdtbcVWuoP +DnbjjvbdMgDPmQVL +DoDLKvbdjhHLefNk +EOcLKvbdUsmTfMWK +DoCkKvbdptTfqqjt +EObkKvbdrRuKmjaN +EPCjjvbdzoQQdcMY +DoDKjvbdrpVoKDVf +DoCkKvbdlZSrTYft +DoCjjvbdBhjajiFj +EOcLKvbdzoQQdbkx +EObkKvbdOhAYZAYa +EOcKjvbdjvXNdBww +DnbjjvbdEXwlTtTl +DoCkKvbdzjVPocsU +DoDLKvbdZQldiMeR +DncKjvbdYNqAYVVt +DnbjjvbdtvNxKRTA +EPCjjvbdqceIonWB +EOcKjvbdyXiKCPzL +DoCkKvbdfIKurNpg +DoDKjvbdFxuVAdYC +EOcLKvbdeOdrjssr +DncLKvbdxnShYTIc +EPDLKvbdoznEKwoA +DoDLKvbdptTfrRkU +DncLKvbdkWWnDaxX +EPCjjvbdKWVGDeHJ +EPCjjvbdtumwipsA +DoCkKvbdZxcinDMS +EObjjvbdCWzdIeQW +EPDKjvbdHgGzYwwg +EOcKjvbduDCtvvOo +DnbjjvbdqvokbiZR +DnbjjvbdmIcsptqa +DncLKvbdrJAJdmPF +EPCkKvbdKjaHvAJy +DoCkKvbdhuZdwSUb +EOcKjvbdnPzZVjyC +DoDKjvbdYSlAmUPY +EOcKjvbdffLzNgHA +DncLKvbdptUHRqjt +EPCjjvbdyTNiMqag +DoCjjvbdauBgXkTh +EPCjjvbdbiMikGXY +EOcLKvbdIHGzZXwg +DncKjvbdrXPkcIxq +DnbjjvbdOTTugEuQ +DnbkKvbdjcMKqHUg +DoDKjvbdffMZnHHA +DoCjjvbddijSWUzn +DncKjvbdBhkCKiGK +DncKjvbdJYTbHkqQ +DnbkKvbdqwPlCiZR +DoCkKvbdxUmFRYkn +DoDKjvbdmSZUzTDi +EPDLKvbdkyTSSxft +DoCjjvbdmajXYPOV +EPCkKvbdMowqVnHT +DncLKvbdTppoUuHm +EPDLKvbdgFkymfgA +EObjjvbdhgJcYujV +DncKjvbdtAGqIABS +DoDLKvbdqZOhGpdY +EObkKvbdjbkkRGuH +DoCjjvbdGLEsChNV +DnbjjvbdZoOIeEyj +DncLKvbdbrbjsdJa +EPCjjvbdGGJqmiTq +EPCkKvbdNPxRWNgT +EPCjjvbdJpydnfOF +EOcKjvbdcyxoxYpb +EPDKjvbdmozZWLYb +EObjjvbdVTmUFlVj +DoCjjvbdNrtWGduQ +DncKjvbdqUTfqqkU +DoDKjvbdTfznMWue +EOcLKvbdNsTugEuQ +DoDLKvbdjhHLfGOL +EObjjvbdZtJJYdSn +DoDKjvbdZjTHofbG +DncKjvbduCbtwVno +EPCkKvbdZtIhxcsO +EOcLKvbdnUuZkJqf +EObkKvbdiCPCeXQq +EOcKjvbdZtJIxcsO +EOcLKvbdZRNEhmFR +DnbkKvbdFjdsDINV +DncKjvbdsZlQSaIO +EObjjvbduLxXAtAw +DncKjvbddoFSjtTr +DoCkKvbdmbKXXoOV +DoDKjvbdOAIsTirA +DncLKvbdMfcQMpVL +EPDKjvbdsrqrxzFD +EOcLKvbdZRMdiMdq +EObkKvbdCTAbsfXS +EPDLKvbdtunYJpsA +EObkKvbdYSkaNToY +DoCkKvbdZMRdUOMN +EPCkKvbdIsYaSmYM +DncLKvbdVYgtZkPO +EObjjvbdaNLBsUmH +EOcLKvbdZyEKOCkr +DoDLKvbdOSsufdtp +DoDKjvbdhbPCdvqR +DnbkKvbdiZuFkpnG +DoDKjvbdHDjujCJj +EPDKjvbdCDpBVjMf +EObkKvbdeFOrBwDK +DoDLKvbdhgJbxvJu +EObjjvbdiZuFlQmf +EPDKjvbdeuzwpJzs +EPDKjvbdezuyEhsw +EPCkKvbdJYTbIMQp +DnbkKvbdkIHLeenL +DoCkKvbdAMgyTXZx +DnbkKvbdfIKvRnQg +EPDLKvbdJqZePFnF +DoCjjvbdRjxfVGkT +EOcLKvbdySmhlqbH +DnbjjvbdEYYMUTtM +DoDLKvbdhtydvquC +EObjjvbdZRMdiMdq +EPCjjvbdVZITzLOn +DoCkKvbdmuVZjjRf +DoCjjvbdzoQREbkx +DnbkKvbdkyTSSxgU +DoCjjvbdzRPNIjXA +EPDKjvbdnPyxvLZC +EOcKjvbdSZjHrbvA +EPCkKvbdShyjRABM +EObjjvbdYpmEiMeR +DoCjjvbdFaOqYizm +DncLKvbdEvZQQMjF +DncKjvbdNrtWGeVQ +DoDKjvbdqdFJPmvB +DnbjjvbdRXODblID +DoDLKvbdyzdnRhIh +EPCkKvbdcTCjsdKB +DncLKvbdJcKCqKCx +EObjjvbdmfdwmNgZ +EPDLKvbdqUTgSSLU +EObjjvbdZyEKODLr +EPDKjvbdTppoVVIN +DnbjjvbdFVyPpNJe +EPDKjvbdJYUBhLqQ +EPDLKvbdqceIpOWB +EPDLKvbdiBnbeXQq +DnbkKvbdGZVVBEYC +DncKjvbdGLFTDINV +EObjjvbdUGzmlXWF +EOcLKvbdxrmiMqbH +DoDLKvbdJpzEnenF +EObjjvbdEvYoomJe +DoDKjvbdJqZdoFme +EObjjvbdEuyPpMie +EOcKjvbdmtuZjjRf +EPDKjvbdjKGHilwr +EPCkKvbdpaIeAWgd +DoDKjvbdGZVUaDxC +DoCjjvbdFkErcHlu +EOcKjvbdrbFllGjy +DnbkKvbdMRwMzUpz +DoCkKvbdDxYLtTsl +EOcLKvbdLBKfmBxR +DoCjjvbdVwJYWDeH +DoCkKvbdZoOIdeZj +EPDLKvbdpfEFUWAh +EOcLKvbdKWVGDdfi +EObkKvbdtvNwipsA +DoCjjvbdwuNEqZMO +EObkKvbdfSBWzkbo +EPDLKvbdFxuVAdXb +DnbkKvbdRWnEClHc +EOcKjvbdkCkjqHUg +DoCjjvbdbsDKscia +EPDLKvbdzQoMiKXA +DnbkKvbdRDcApQcr +DoDKjvbdZtIiYcrn +DoDLKvbdqZPHgQdY +EObjjvbdyfxlAMeX +EObjjvbddjJrWUzn +EPDKjvbdjcMLQgVH +EOcLKvbdozmckXoA +EPDKjvbdcJMjLGWx +EPCkKvbdbhlijewY +EObjjvbdrEFJPnWB +EOcKjvbdmuVZjirG +DncKjvbdnBjXYOmu +DncLKvbdjcLjqHUg +EPDLKvbdlhdUQuRa +DoDKjvbdVwIwvEFH +EObkKvbdZMSDsnLm +DoDLKvbdzHZMAMdw +EOcKjvbdZMSDsnLm +DncKjvbdZshhyDsO +DncKjvbdCEPaWJlf +EOcKjvbdxxJKCQZk +EPCkKvbdezvZEiTw +EPDLKvbdypoMiKXA +EPCkKvbdnUuZjjRf +DnbkKvbdFfJqnJUR +DoCjjvbdTpqPUthN +DncKjvbdcyxoxYpb +EObkKvbdCSaCsfXS +DnbkKvbdRacdlIyL +DoCjjvbdTIzKRABM +EPCkKvbdatbGwjsh +EObjjvbdUsltGMWK +DoDLKvbdtvOXjQsA +DnbjjvbdYSlAmUPY +EOcKjvbdwuNEpxkn +EObkKvbdYqMdiMdq +EOcKjvbdnGeXlmgZ +DnbkKvbdqwQLcJYq +EObkKvbduVmxJqTA +EObjjvbdmoyyVkYb +DoDKjvbdBdPaWKMf +DncKjvbdVvhwvEFH +EObkKvbdauBfxLUI +EOcLKvbdMgDQNQUk +EOcKjvbdsQVnjCuf +EObkKvbdjuvnEBww +DoCkKvbdkWXODbXw +EPCkKvbdZyDjNblS +DoDKjvbdZLqdUNlN +DoDKjvbdbLMFoNcA +DoCkKvbdFVyQPmJe +EOcKjvbdhkdcmuCy +EPCkKvbdmtuZjiqf +DnbjjvbdRbEFLiYk +EPCkKvbdySnJMqag +EPDLKvbdhlFDnVCy +DoCjjvbdzoQREblY +EPCjjvbdvBEYroFI +EPCjjvbdJbjCqJcY +DnbkKvbdliEURUrB +DoDKjvbdOTUWGdtp +EOcLKvbdZnmhddzK +EPDKjvbdSBcdkiZL +DoCjjvbdZMRctOLm +DoDLKvbduCcUwVno +DoDLKvbdEzspeMDJ +EPCjjvbdULunaWOi +DoDLKvbdIwsaglQp +EObkKvbdJuuFdFGi +EPCkKvbdQccBQRDr +EPDKjvbdNrsugEtp +EPDLKvbdEXxLtUUM +DoDKjvbdVBCQsRRy +DncKjvbdeFPSCWcK +DoDLKvbdhficYvJu +DncKjvbdkClLRHVH +EOcLKvbduWNxKRTA +EObjjvbdNPwpumgT +DoCjjvbdjmCLzFGo +DncKjvbdZtIhxdSn +EObkKvbdKQyePFme +EPCjjvbdEuxpPljF +DoCkKvbdZtIhyDrn +EPDLKvbdJpzFOfNe +EPDKjvbduaEZTPFI +EPDLKvbdSQTgKFcw +EOcLKvbdBcpAujMf +EPCjjvbdfHkVrOQg +EPCjjvbdKaKflaxR +EObkKvbdZjTIQGaf +EOcLKvbdijGIKMwr +EPDLKvbdvBEZTOdh +DnbkKvbdZRNEhleR +DnbkKvbdijFgimXr +EObjjvbdEASIlywX +DoCjjvbdKaKgNCXq +EPDLKvbdTppoUuHm +EPCkKvbdwzHefYEr +EPCkKvbdhtyeWrUb +DnbkKvbdPyNAGsRj +EPDKjvbdmttzKiqf +DnbjjvbdRacdkhyL +EOcLKvbdeJjRvUzn +EObjjvbdNHCpNQVL +EPCjjvbdgLGzcGAE +DoCkKvbdidkGtoAO +DnbkKvbdKDJcRKCx +DnbjjvbdSQTgKGEX +EPDLKvbdyqPMiJwA +DnbkKvbdLrWlytpz +DnbjjvbdmgExNNgZ +EPCkKvbdlYsRrxgU +DnbjjvbdTkuoAvPJ +EOcKjvbdgFkymgHA +EPDLKvbdmaivxOnV +DnbjjvbdEztQeMDJ +EObjjvbdWfYzUAPT +DnbkKvbdiMEdNuDZ +DoDKjvbdgQBzwEXh +EOcLKvbdSBcdlIyL +DnbjjvbdrMzJxkhJ +DnbjjvbdddnrCXDK +DncLKvbdmbKXXnnV +DnbjjvbdYzbfSKWZ +EPCjjvbdUMWPBVoJ +EPDKjvbdBraDUGWr +DoCkKvbdFkFTDINV +DncKjvbdYkqdTmkm +DncKjvbdmpZyVjyC +DoCjjvbdZisIQHCG +DncLKvbdYqMeJMeR +EPDKjvbdZjTHpHBf +EOcLKvbdcJMikFwY +DoCkKvbdFpATXHGZ +DnbjjvbdVBBqSpqy +DoCkKvbddZyQXxpb +EOcLKvbdqlyiyMHi +EPDLKvbdfMfWgNJk +DoCjjvbdrNZjZLgi +EPCkKvbdeOdsKtTr +EPDKjvbdLrXMytpz +DncLKvbdQvnDcMHc +DoDLKvbdyYJJbPyk +DnbjjvbdrylPsBIO +DnbkKvbdTqROuUgm +DoCjjvbdcyyQYZRC +EObjjvbdbLMFnmcA +EObjjvbdbVCGxKsh +EObjjvbdelfWgMjL +EPDLKvbdnGdwmOGy +EPCkKvbdcTDLTdKB +DncLKvbdUxhTyjoO +EPCjjvbdwzHfFxEr +EPCjjvbdkxrqryHU +DncLKvbdDihJvYKA +EPCkKvbdRzJhScWA +EObjjvbdZHWdAOri +DoDLKvbdjbkkRGuH +DncKjvbdNVSrLNAX +DncKjvbdVqnYCElD +DnbjjvbdFWZPpMjF +DoCjjvbdZMRctNkm +EPCjjvbdRNXaxmtz +EOcLKvbdLZQjSztf +EObjjvbdePFSjssr +EOcKjvbdjbkkRHUg +EPDKjvbdcSbjtEJa +EObkKvbdKQzFPFme +DoCkKvbdnUtzKjRf +DncLKvbdeOeTKtUS +DoCjjvbdpstGqqjt +EOcKjvbdrpWPJcWG +EPCkKvbdwkXDgzyf +DncKjvbdnPyxvLYb +DoCkKvbdpxoIHRDx +DnbjjvbdLFegaaRV +EPCjjvbdrXQLcJYq +DncKjvbdWXJXvDdg +DnbjjvbdQdCaQRDr +EOcLKvbdWWiXuceH +DoCjjvbdbiNJkGXY +EPDKjvbdijGHjMxS +DoDLKvbdTfzmkwVe +EObkKvbdmSZUzTEJ +DnbjjvbdKefHaaRV +DncLKvbddoFSjstS +DncLKvbdSLYfUgKs +EPCkKvbdCIjbLJGK +DncKjvbdKNADzGuB +DoDKjvbdBcpBVjMf +DnbjjvbdpxoHfqEY +DoCjjvbdANHyTWyx +DoDKjvbdFjeSbgmV +DnbkKvbdxwiKCPzL +DncKjvbdqceIpNvB +DnbjjvbdLFfHbAqV +EPDLKvbdtTSTYydc +EPCjjvbdezvYdiTw +EObjjvbdWWiYVdFH +EOcLKvbdZyDjNbkr +EObkKvbdwzIFeweS +EPCjjvbdjmBkzFGo +EObjjvbdGAoRYizm +EObjjvbdjcMLQgVH +DoCjjvbddePRavbj +EOcKjvbdlhcspuSB +EPCjjvbdSCEFMJZL +EObkKvbdEYYLsssl +EObkKvbdpstGrSLU +DoDLKvbdIGgZxwwg +EObkKvbdWIYWYGxz +EPCjjvbdfILWSNqH +DnbkKvbdFWYpPljF +DoCjjvbdVAbRSqRy +EOcKjvbdeEoSCWcK +EOcKjvbdSBceMIxk +DoCjjvbdgFkzOGgA +EObkKvbdbPfgELzd +DnbjjvbdmtuZkJqf +EPCkKvbdYgWdAPSi +EObkKvbdmaiwXoOV +EOcKjvbdjuvnDbXw +DncLKvbdiBoCdvpq +DnbkKvbdZxcjNbkr +EPDKjvbdKfFgaaRV +DoDKjvbdNGcPlouL +EOcKjvbdHlBznXQk +EPCjjvbdKQydoFme +EPCjjvbdDxYLsssl +DoCjjvbdHbLydzAD +DnbkKvbdZisHofbG +DnbkKvbdvvkaWBWV +DncLKvbddxZtUSFz +EPCjjvbdBcpBWJlf +EObkKvbdVBBprpqy +DoCkKvbdaSFcITfL +DoCkKvbdZLqctOMN +EPDKjvbdFWYpQMie +DncKjvbdOEctJIjd +DoCkKvbdEuyQPmJe +DncLKvbdZGwEAOsJ +DncKjvbdlqyUzSci +EOcKjvbdKCibqKCx +DnbjjvbdEOcLKvbd +DncKjvbddneTLUUS +EPCjjvbdhbPDFWpq +DoCjjvbdeAUQmXjG +EPDKjvbdVwJYWDeH +DncKjvbdePFTKstS +DoCjjvbdjggMFemk +EPCjjvbdcScLUDjB +DoDKjvbdZjTIQGbG +EObjjvbdehKurNpg +DncLKvbdbsDLUEJa +EOcLKvbdEJgjWXjA +EPCkKvbdqquKnKaN +DnbjjvbdZjShQHCG +DoCjjvbdCEPaVilf +EObjjvbdzjUpQDrt +EOcLKvbdUVlPjUBR +DnbjjvbdeFPSCWbj +DoCkKvbdKxpirzuG +DncLKvbdrykpTAgn +DoDKjvbdemGXGljL +DncLKvbdTYKlNzkY +DncKjvbduaDyTOeI +EObkKvbdnBjWwoOV +EPCkKvbdGdLWKCJj +EPDKjvbdKeegaaQu +EObkKvbdxnShXrhc +DoCkKvbdsBemLgKy +EPCjjvbdrzLoraHn +EPDLKvbdrRuKmjaN +DncLKvbdmajWxPOV +DncKjvbdKVuGDeGi +EObjjvbdziuQPdTU +DnbkKvbdZxcinCkr +EPCkKvbdlqxtzTDi +EPCkKvbdyzeOSHiI +DnbkKvbdqmZiyMIJ +EOcLKvbdIwtBgkqQ +DncLKvbdfekzOHHA +EPCkKvbdKNADzGuB +EOcLKvbdUaBqSqRy +EPDKjvbdddnrBvbj +DncLKvbdmuVZjirG +EOcKjvbdbBWEepPw +DncLKvbdwjvdHzyf +EPDKjvbdmgFXlmgZ +EPCkKvbdtSqryZeD +EObkKvbdOFEUIhkE +EOcKjvbdiBncFXRR +DncLKvbdxZgeeweS +EPDLKvbdxwiKCPyk +EPDKjvbdHEKvJajK +DncKjvbdrafMlGjy +EOcLKvbdwWlBWBWV +DncLKvbdegjvRmqH +EObkKvbdehKvRmqH +DoDLKvbdUaBpsQrZ +EPDKjvbdRaceMJYk +DnbkKvbdZRNEhldq +DnbjjvbdKCibpjDY +DoDLKvbdKaLGmCXq +DncLKvbdKaKflbYR +DoCjjvbdZQleJNFR +EPCjjvbdZHWdAOsJ +EObkKvbdpxnggRDx +EPDKjvbdiUzFXSVC +DncKjvbdhfjDZWJu +DoCjjvbdYkrDtNlN +EOcLKvbdkVvmdBxX +DnbjjvbdFkFScHlu +DoCjjvbdlrYuZrci +EOcKjvbdrDdiPnWB +DoCjjvbdfoazvcwh +EPCkKvbdtkxWaUAw +EObjjvbdVYgsyjoO +EPCjjvbdssSTZZeD +DoCjjvbdbVBfwjsh +EPCjjvbdVgwuxGxz +EOcKjvbdZoNhdeZj +EPCkKvbdGYttaDwb +DncLKvbdvAcySoEh +DoDKjvbdIGfzZYYH +DoDKjvbdtcCtvvPP +EObjjvbdkxsRryHU +DnbkKvbdJSyBTMwl +DoCjjvbdsPuoJbuf +DnbjjvbdZxcimcMS +DoDKjvbdNGbpMouL +DnbjjvbdSZjHrbvA +DoCkKvbdmRxtysDi +EOcLKvbdZQmEiMeR +EPCjjvbdpfEEtVaI +EPCjjvbdtTRrxzEc +DoCkKvbdZdxGzghb +DncKjvbdrykpTBIO +EPCkKvbdxxIjCPyk +DncLKvbdCEQAujNG +EOcLKvbdrWokbhyR +EPDKjvbdjJehKMwr +DncLKvbdSxLMNzjx +DnbjjvbdZyDinDMS +EObjjvbdZirhQGaf +DncLKvbdkClKqHVH +EObkKvbdfIKvRmqH +DoDLKvbdQvmcblID +EPDKjvbdNsTufdtp +EObkKvbdZRMeIleR +DnbkKvbddwytTrFz +EObjjvbdZxdKODMS +EPCkKvbdSLZFtgKs +EPDKjvbdrovPJbuf +EPCjjvbdHgHZxxYH +EPCjjvbdddoSBvbj +DoDKjvbdegkVqmpg +DoDKjvbdCfkfHAzc +EObjjvbdtvNxJqTA +EPDKjvbdhtyeXSVC +EPDLKvbdUtMtGLvK +EPCjjvbdFaPRYizm +EPCkKvbdVZIUZkOn +EPDKjvbdFeiqnIsq +EObkKvbdddoRbWcK +EOcLKvbdaNLCSuMg +EObjjvbdFpATXGfZ +DncLKvbdrXPkcJYq +EPCjjvbdFjdrcHlu +EObkKvbdUQqPVUhN +DoDLKvbdpxoHfqDx +DncLKvbdypoNIjXA +EPCjjvbdmRxuZrdJ +EPDKjvbdqZPHgREY +EOcLKvbdZGwEAPTJ +DncLKvbdjuwNcbXw +DoCkKvbdTlWPBVoJ +DoCjjvbdRzKIScWA +EPDLKvbdZnnJFEzK +EPDLKvbdqvokbhyR +DnbkKvbdAMhZTWyx +EPCkKvbdqYoHgRDx +EPDKjvbdZtJJZETO +EObkKvbdWRmxBdlD +DnbkKvbdwWkaWBWV +DncKjvbdgKfzcGAE +DncLKvbdtbcUwVno +EOcLKvbdcImJjfWx +DncLKvbdSwjlNzjx +EObkKvbdjblLQftg +DncLKvbdQmYByNtz +DnbjjvbdhlFDmtby +DnbjjvbdcTDKsdJa +EPCkKvbdqUTgSRkU +EOcKjvbdZQleImEq +EOcLKvbdtTRrxzFD +EPCkKvbdUVkpKUAq +DncLKvbdmbJvwoNu +EPDKjvbdrJAKFMne +DncKjvbdpyOhGqEY +EOcLKvbdLrWlzVQz +DnbjjvbdvAdYsPFI +EPCkKvbdDoDKjvbd +DoDLKvbdelfWgMjL +EObkKvbdaMjbTUlg +EObjjvbduVmwjRTA +EPCjjvbdHffyxwwg +DnbkKvbdXrkaNToY +DoCjjvbdZshhyDrn +DoDKjvbdunszqKoU +EPCkKvbdmJDtRVSB +DnbkKvbdcImKLFwY +DoCjjvbdpedEtVaI +DnbjjvbduMXwAtBX +EPDLKvbdhbPDFWpq +EPCjjvbdrDdiQNua +DnbkKvbdKxpirzuG +EObkKvbdcTCjtEJa +DncLKvbdZQmFIldq +DoCkKvbdqUUGrRkU +DnbkKvbddZyQXyRC +DncLKvbdIryBTNXl +EPDKjvbduaDxrneI +DoCkKvbdZMSDsmlN +DoDKjvbdrovOjCvG +EOcLKvbdhyuFkpmf +DoDLKvbdddnrBwDK +DncKjvbdDwxLstTl +EPDLKvbddZxpXxpb +DoDKjvbdCSaDTewS +EPCkKvbdVqmxBeLc +DoCkKvbdZMSEUNkm +DnbkKvbdznopdcMY +EPCjjvbdqYoHgQcx +EPCkKvbdlhdUQuRa +EObjjvbdauBgYLUI +EObjjvbdySnJMrCH +EObjjvbdkIGlGGOL +DoCkKvbdwXMAvBWV +DnbjjvbdiCOcFXRR +EPCkKvbdIHGzZYXg +EPDKjvbdiMFDmuCy +EOcKjvbdtlXvaUBX +DoDLKvbdhfibxuiu +EPCkKvbdqwQMChxq +EObkKvbdRkYeuGjs +DoDKjvbdYkrEUNlN +EPDKjvbdZshiYcsO +DnbkKvbdQlxBxnUz +DncKjvbdSPtGifEX +DoDLKvbdmajXXoNu +EObjjvbdHbMZdzAD +EPCkKvbdZyEKNblS +EObkKvbdKfFgbBRV +EOcLKvbdOTUVgFVQ +DoCkKvbdfMevgMik +EPDKjvbdptTfrSKt +DnbkKvbdxZhFexFS +DncLKvbdUaBqTQrZ +DoCjjvbduDDUwWPP +DoDKjvbdNsUVfduQ +EObkKvbdvOszpjoU +EObkKvbdNsTvGdtp +EPDKjvbdxwhiapZk +DoDKjvbdiGjCxvJu +DoDLKvbdxxIibPyk +DncKjvbdvAdYroFI +EOcLKvbdLAkGmBwq +DncLKvbdIsYaTMxM +EPDLKvbdFejRmiUR +DoCkKvbdbrbjscia +DoDLKvbdiHJbyWJu +EOcKjvbdIwtBhMQp +EObkKvbdpfDdtVaI +EObjjvbdfMevfmJk +EObjjvbdptUHRrLU +EPDLKvbdYgXEAOri +EObkKvbdZoOJEeZj +DoDKjvbdqUUGqqjt +DnbjjvbdxnTHwriD +EPDKjvbdfHkWRmpg +EPDLKvbdePEsLUUS +EPCjjvbdEPCkLXDE +DoCjjvbdgQBzvdYI +DoCkKvbdZjSgogBf +EObkKvbdtunYKQsA +EPDKjvbdezvYdiTw +EPDLKvbdLBLGmCYR +EObkKvbdSLYfVHKs +EPDKjvbdfILWSNqH +EObjjvbdqlyixkhJ +DoCkKvbdjKFgjNXr +DoDLKvbdyzdmrHhh +DoDLKvbdYpleImEq +DoDKjvbdUxgtZkPO +EPDLKvbdJKEAKPgE +DoDKjvbdRXODblHc +DoCkKvbdmozYujxb +EOcKjvbdMgCpMouL +DncKjvbdZsiJZESn +EPCkKvbdzROmIiwA +DnbkKvbdEOcLKvbd +EPCjjvbdpxoIHRDx +DnbkKvbdEJgivXjA +DoDKjvbdfHjurOQg +EObjjvbdyYIjCPzL +DoCjjvbdvlvANEEm +DncLKvbdOXoVzdOU +EObkKvbdatagYKtI +DnbkKvbdGYtuAcwb +EObkKvbdegjuqnRH +DnbkKvbdtumxKQsA +DnbkKvbdIxTbILqQ +DncKjvbdIsZBTMxM +EPCjjvbdRjyFuHLT +EOcKjvbdJXtCIMQp +DoDKjvbdYkqdUOLm +EObjjvbdZsiIyESn +DnbkKvbdhtyeWrUb +EPCjjvbdEuyQPmKF +EOcLKvbdeFOrCWcK +DoDLKvbdEvYpPlie +DoCjjvbdZtJIyETO +EPCjjvbdrWokcJYq +DoDLKvbduaDySneI +DncLKvbdsPunjCuf +EObkKvbdpyOhGpcx +EObkKvbdliDsqUqa +DoDLKvbdhaoCeXQq +DncLKvbdaRfChUFk +EOcKjvbdYTMAlsoY +EPCkKvbdfkGzbfAE +EOcKjvbdURQnttgm +DoDLKvbdDoCjjvcE +DncLKvbdCJKbLJGK +EPDKjvbdhlFEOVDZ +DnbkKvbduCcVWvOo +EPCjjvbdQdDBPpcr +EObkKvbdbBVdeopX +DnbkKvbdWHwuwfxz +DoDLKvbdsrqrxzFD +DoDKjvbdCSaCsfXS +DoCkKvbdNPxQunGs +EPDLKvbdyzeNrHhh +EObjjvbdWXIwudFH +EPCjjvbdKWVFceHJ +EOcLKvbdqwPlCiZR +DncLKvbdyOTHwsJD +DncLKvbdxUleRZMO +DnbjjvbdZHWdAPTJ +DoDLKvbdePEsKstS +EPDKjvbdHDkVjBij +EObjjvbdSPtHJecw +EObjjvbdyTOJNRag +EOcKjvbdhfibxuiu +EOcKjvbdRDbaPqES +DnbjjvbdemGWflik +DoDKjvbdwjwEHzzG +EObjjvbdsCGNMGjy +DnbjjvbdssRsYyeD +DoDKjvbdJvVFceGi +EPCkKvbdLZQjSzuG +DoDLKvbdqUUHSSLU +EPCjjvbdaaWEeoow +EPCjjvbdDjHiuxKA +EPDKjvbdZQmFIleR +DoDKjvbdRDbaPpdS +EPCjjvbdZoOJFFZj +EObjjvbdQmYBxnUz +EPDKjvbdKCibqKDY +DoDLKvbdsCFmMGjy +DncKjvbdKaKgMaxR +DoCjjvbdrMzJxkhJ +EObkKvbdeKKRutzn +EPCkKvbdcTCjscjB +EPCkKvbdZsiIyDrn +EObjjvbdnBjXXoOV +DoDKjvbdBiKakIfK +EOcKjvbdRpTfjGEX +DoCkKvbdtSqrxydc +EObkKvbdHDkVjBij +DncLKvbdqTsgSSLU +DncLKvbdzdzOzdzQ +DoDLKvbdVrNwadlD +DncLKvbdSQUGifEX +DncLKvbdxxJKBoyk +EPCjjvbdrzLpSaIO +DnbkKvbdhtyeXRuC +DoDKjvbdyTOImSBg +EPDLKvbddZxpXxqC +DoCkKvbdZMSDsnLm +DncLKvbdEARhlzXX +EPDKjvbdkWXOECYX +EObkKvbdSLYetgLT +EPDKjvbdTfznLvvF +DoCjjvbdSZjHrcWA +DncKjvbdmJDsptqa +EOcLKvbdZxdJmblS +DnbjjvbdKWUfDeHJ +EPCkKvbdLiBkpxAS +EObkKvbdePFSkTtS +DoDKjvbdYzbfSKWZ +EPCjjvbdvAdYsPFI +EObkKvbdTAFJIBnd +DnbkKvbdsZkpSaHn +DoDLKvbdczZQYZRC +EPDKjvbdTvMQKTaR +DnbkKvbdyYJKCQZk +EPCkKvbdVAaqTQqy +EOcLKvbdbPfgDkzd +EObkKvbdePErjssr +EPDLKvbdyTOJNRag +EPDLKvbdyTNiNSBg +DoCjjvbdqvpMCiYq +DoDKjvbdRpUHKGEX +DoCjjvbdDoCkLWbd +DncLKvbddCTNSATm +DoCkKvbdcSbkUEJa +EPDLKvbdzjVPocrt +DnbkKvbdxVNFQyLn +DnbkKvbdSKyFtfkT +DoCkKvbdmpZxukZC +DncLKvbdGFjSOJTq +EOcKjvbdhkdcmtcZ +DoCjjvbdyzeORghh +EPCkKvbdRbDeMJZL +DoDLKvbdZMRctOMN +EObjjvbdAMgySvyx +EOcLKvbdTYLMNzkY +DnbjjvbdmuVZjjSG +DnbkKvbdZsiIyDrn +EPDLKvbdjEjfuPAO +DoCjjvbdkxrrSxgU +DncKjvbdSLYfUfkT +DnbjjvbdBcpAvJmG +DoDLKvbdSPsgKFcw +DoCkKvbdrXQMDIyR +EObkKvbdKVuFdEfi +DnbkKvbdrSVLOLBN +DoDKjvbdZnmhdeZj +DoDKjvbdNHDQNPuL +DoDKjvbdpyOggREY +DoCkKvbdQvmcblID +EPCkKvbdMfbomQVL +EPCjjvbdNVTRjmAX +EOcKjvbdbhlijevx +EObkKvbdWWiXvEFH +DncKjvbdlqyVZrdJ +DnbjjvbdrSUkNjaN +DncLKvbdmSZUzTDi +EObjjvbdZQmEhmEq +EOcKjvbdiLdcnVDZ +EObkKvbdySmhlqag +DnbjjvbdbUagYLTh +DncKjvbdBdQAvKNG +DncLKvbdyzdnRghh +EObkKvbdLZRKSztf +DoDLKvbdRXOEDMHc +DncKjvbdFkFSbgmV +EPCjjvbdZQldiMeR +EPDLKvbdFfJqmiTq +EOcLKvbdpssgRrKt +DnbjjvbdKRZeOeme +DnbkKvbdnPzYvLZC +DoDLKvbdUVlQJsaR +EPCjjvbdqFceTvAh +EPDKjvbdEARhlyvw +EPCjjvbdNGbolotk +DoCjjvbdVhYWXgYz +DoCjjvbdUtMtFkvK +DncKjvbdZQldhleR +DnbjjvbdCEPaWKMf +EObjjvbduWOXjQsA +EOcKjvbdIjEAKPfd +DoCjjvbdURRPUuIN +EObkKvbdbhmKKfWx +DoDKjvbdxrnJMrCH +EObjjvbdGFirNiTq +DoDLKvbdtSqsZZeD +EPDLKvbdKkAhWAJy +EPCkKvbdbVBgYKsh +DoCjjvbdKWVFdFGi +EPDKjvbdwXMAuaWV +DoCkKvbdRXNdCkhD +EPCjjvbdZRMdhmEq +DncLKvbdcJMijfWx +DnbkKvbdZRNEiNFR +EObjjvbdAMhYrvyx +EPDLKvbdijGIJmXr +DoCkKvbdbhmJjfXY +EOcLKvbdrzMQTBHn +DnbkKvbdKVtfEEfi +EPCkKvbdxVNFRZMO +EPDLKvbdjcMLQgUg +EObjjvbdjuwODbXw +EObkKvbdZeXfzhJC +EPCkKvbdUyITyjoO +EPCkKvbdGFjRnIsq +DnbjjvbdIwsbHlRQ +DncKjvbdtTSTYzEc +EPDKjvbdhfjCyWKV +DoCjjvbdhytelQnG +DoDKjvbdxnTHxTIc +EOcKjvbdUQqPUtgm +EPDLKvbdkNCMZdgP +DnbkKvbdGKeTDINV +EOcLKvbdZMRcsmlN +DnbjjvbdRXNdCkgc +DoCjjvbdRXNccMHc +EObkKvbdRjyFuGjs +EPDLKvbdmJDtRUrB +DoDLKvbdpyPIGpdY +EPCjjvbdkNCLzEgP +DoDLKvbdZoNiFEzK +DoDKjvbdKVuFcdfi +DoDKjvbdqZOggQdY +EPCkKvbdSQTgJecw +EOcKjvbdrRuKnLAm +EObkKvbdbUbHYLUI +EOcLKvbdyNrgwsJD +DoDKjvbdegkVqnQg +DnbkKvbdGBOpxizm +EObkKvbdJbjDQicY +DncLKvbdSLZFuGjs +DoCkKvbdGckVibJj +DoCkKvbdzeZnzdyp +EObjjvbdxxJKCQZk +EObjjvbdJpzFPGNe +EPCkKvbdUsltGLvK +DoDLKvbdziuQQDsU +DncLKvbdRzKIScWA +DoCkKvbdSLYfVGjs +EPCjjvbdhgKDYujV +DoDKjvbdtunXjQsA +EPDKjvbdqceJPnWB +DncKjvbdUQqOuUhN +EOcKjvbdJvVFceHJ +EPCkKvbdMfcPmQVL +EObkKvbdNrsufdtp +DncLKvbdUQpnuUhN +DncKjvbdYkqdUOMN +EObkKvbdqceJQNvB +EPDLKvbdCWzdJFPv +DncKjvbdauBfxLTh +DncKjvbdZnnJEdyj +DncLKvbdEvYpPlie +DoDLKvbdhaoCdvpq +EObkKvbdCEQBVimG +EOcKjvbdBiKbKhfK +DnbkKvbdeuzwpJzs +DncLKvbdhlEcnVDZ +EObkKvbdkCkjpftg +DncKjvbdZQldhmEq +DoDKjvbdFyVVBEXb +DncKjvbdZirgogCG +EPCkKvbdWXJXvEFH +DnbkKvbdOStVfduQ +DnbkKvbdNGbpMouL +EObkKvbdcIljKfXY +DoDLKvbdXrlBMsnx +EOcLKvbdfNFwGmJk +EObjjvbdUQqPUuHm +DnbjjvbdEXxLtUTl +EPDKjvbdLGFhCBQu +DncKjvbdTYLLmzkY +DoCkKvbdkaNPNALA +DoCjjvbdFxtuBDwb +EPDLKvbdGGJrNhsq +DoCkKvbdZyEJnDLr +EObkKvbdDxXlTssl +EPCkKvbdGKdrbglu +EOcLKvbdmoyyVjxb +DnbkKvbdRNYByNtz +EObjjvbdGFirOItR +DoCjjvbdxUmFRZLn +EPCkKvbdsQWPJcWG +EPCjjvbdegkWSORH +DncLKvbdYzcGRjVy +DoCkKvbdRXNcblHc +EObkKvbdwtldqYkn +DnbkKvbdZisHpGaf +EPCkKvbdGQASvfey +DnbjjvbdeFPRavbj +EOcLKvbdGZVVBEYC +EPCkKvbdKDKDQicY +EPCkKvbdUsmUFkuj +DoCkKvbdatbHXjtI +EObkKvbdlrYtyrdJ +DnbjjvbdjKGHilwr +EOcKjvbdjlakyeGo +DoDLKvbdnPzZVkZC +DnbjjvbdCIjbLJFj +DoCkKvbdegkWSORH +DoDLKvbdjvXODbYX +EPDKjvbdaaVeFoow +DncKjvbdwtmFRZLn +EObkKvbdkNCLzEfo +DncLKvbdrbGMlGkZ +EObjjvbdczZQXxqC +DoCkKvbduaEZTOdh +EObjjvbdZxcjNbkr +EOcKjvbdCJKbKiFj +DnbjjvbdjEkGuPAO +DnbjjvbdZshhyDsO +DoDLKvbdbsCkUDjB +DoCkKvbdNddUIhkE +EPDLKvbduVnYJpsA +DnbjjvbdQvmccMHc +DoDKjvbdDjIKWXjA +DoDLKvbdxZhGGYEr +EObkKvbdqquKmkBN +EObjjvbdLBLHMawq +DoDLKvbdrbFmLgLZ +EPDLKvbdddnrBwCj +DoCkKvbdbrcLUEKB +DoDKjvbdqlyjYlHi +DncKjvbdQwNdDMID +EObkKvbdBiLCKhej +EPCkKvbdSZigsDWA +DnbkKvbdwuNFRYlO +EPDLKvbduCbtvvOo +DnbjjvbdaaWFFpPw +EObkKvbdRECaQQdS +DncKjvbdyOShXsJD +EPCkKvbdFVyPomJe +DoDLKvbdcJMijevx +EObkKvbdSZigsCvA +EObjjvbdrNZjYlHi +DnbkKvbdKfFhBaRV +EPDLKvbdSLZFtgKs +EPDLKvbdrbGNMGjy +EPCjjvbddwzTtSFz +DoDLKvbdnGdxNNgZ +DncLKvbdTfzmlWue +EOcKjvbdbLLfOmcA +DoDLKvbdNGcQNPuL +DncLKvbdUaCQsQqy +EPCjjvbdCfkfHAzc +EPDKjvbdlrYuZsDi +EPDLKvbdmajXYPOV +EObjjvbduCcUvvOo +DoDLKvbdJXsahLqQ +EPCkKvbdOSsugEuQ +DnbkKvbduaDyTOeI +DncLKvbdYqNEhldq +EOcLKvbdeOdsKtUS +EOcKjvbdkHgLefOL +EPCkKvbdrpVoKCuf +EObjjvbdShzJqAAl +DnbjjvbdgPazwDxI +EPDLKvbdEztQdlDJ +DoDKjvbdYpmFImFR +DncLKvbdsBellHLZ +DoCjjvbdatbHYKsh +DoCjjvbdptTgRrLU +EOcLKvbdznpRFCkx +EPCjjvbdWWiYWEFH +EPCjjvbdRosgJedX +DnbjjvbdkIGkefOL +DnbjjvbdiZuGLqNf +EPCkKvbdANIZTWyx +EObjjvbdZQmFJMdq +EObkKvbdjvWmcbYX +DncLKvbdRbEFMJYk +EOcKjvbdpfDdtVaI +EPDKjvbdJqZePFnF +DnbjjvbdeFOqavcK +DoCjjvbdnHFXlnHZ +EPCjjvbdTvLpKTaR +EPDLKvbdVgxVxHYz +EObkKvbdZRNFJMdq +EPDLKvbdbUafwkUI +EObjjvbdKCjDQibx +EPDLKvbdrXPlChyR +DoCjjvbdxsNhlqbH +DoDKjvbdNGbomPtk +EPDLKvbdLBLGmBwq +DncLKvbdIsZBTNYM +EPDLKvbdOXnuzcmt +EPDKjvbdKDJcRJcY +EObkKvbdiBncFWqR +DncLKvbdlhcsqUrB +DncKjvbdrylQTAgn +DoDLKvbdTlWOaWOi +EPCkKvbdegjurNpg +EObjjvbdyTNhmSBg +EPCjjvbdQccBPpcr +EPDKjvbdeOeSkTtS +DoCjjvbdGYuVAdXb +EObjjvbdrzMPsAhO +DncLKvbdrEFJQOVa +EPCjjvbdbhmKKfWx +EPCkKvbdeYZssqez +DnbkKvbdURQntuHm +EPDLKvbdkDLkRHVH +EOcKjvbdlZSrSxft +EObkKvbdijGHimXr +EOcLKvbdpxnggQdY +DncKjvbdJKEAJpGd +EPCjjvbdMowpumfs +DoCkKvbdmSYtysDi +DoDLKvbdBsBDTfWr +EPDLKvbdrMzKZMHi +DnbkKvbdBraDUGWr +DnbjjvbdDxYMTtTl +DncKjvbdFyUuBEYC +EPCkKvbdVZITzKnn +DnbkKvbdTkvPBWPJ +EObkKvbdSQTfjFdX +DoCjjvbdZisIPgBf +EPCkKvbdLGFhCAqV +DoCjjvbdNGcQNPuL +DoCkKvbdqlzJyMIJ +EObjjvbdZtIiZDrn +DnbjjvbdeEoRawCj +DoDKjvbdUaBqSqRy +EOcLKvbdmfdwmOGy +DoDKjvbdptTfqrKt +DoDLKvbdvAcxsPEh +DoCkKvbdySmhmRbH +EOcLKvbdhfjDZWKV +EOcKjvbdHffzZXxH +DoDKjvbdLFfHaaQu +EPCjjvbdgFlZmfgA +EOcKjvbdtcCuXVno +DoDLKvbdZirgpGbG +EObjjvbdNsUWHEuQ +DoDLKvbdsBfNLgKy +DoDKjvbdGGKRnJUR +DoDLKvbdKkAhWAKZ +DnbjjvbdOFDtJJKd +EPCjjvbdMuSrKmAX +DnbjjvbdyXiKBpZk +DncLKvbdOFDtIhjd +DoDKjvbdNPxQumgT +DnbjjvbdrSVLOKaN +EPCjjvbdmJDtRVRa +EPCkKvbdZeXfzgiC +DoDKjvbdhaoCdwRR +DncKjvbdiBncFXRR +EPDLKvbdvBEYrndh +DnbjjvbdBiLBkIfK +EPDLKvbdhgJbyVjV +DncKjvbdzRPNIiwA +DnbjjvbdegjvRmpg +DncLKvbdyYIibQZk +EPCkKvbdxnTIXrhc +EPCkKvbdhkeEOUby +DnbkKvbdjJehKMxS +DoDKjvbdkVwODbYX +EPCkKvbdFWYpQNKF +EPCjjvbdXrkaMsnx +EPDKjvbdRjxetgLT +DoDKjvbdEztRFLbi +DnbkKvbdqdFJQNua +EPDLKvbdTqQntthN +DoDLKvbdYORAXtvU +DnbjjvbdEYXksstM +EPDKjvbdkMbMZdfo +DncLKvbdJKEAKQGd +EOcKjvbdFejSOJUR +DoCjjvbdYlRdTmkm +DoDKjvbdlYrqrxgU +EPDKjvbdKVuFdFGi +EOcLKvbdJqZeOfNe +DnbkKvbdzoPpdcLx +DoDKjvbddePSCXCj +DoDKjvbdEASIlywX +DoCjjvbdrEEiPmua +EPCkKvbdidkGuPAO +EObjjvbdKRZdnfNe +DncKjvbdhgJcZWJu +EPDLKvbdZxcimbkr +EPDKjvbdNeEUIiKd +EOcKjvbdvAdZSndh +DncLKvbdjggMGGNk +EObkKvbdOStVgFUp +EPCkKvbdRaceMIxk +DncKjvbdDwxMUUUM +DncKjvbdWeyZtAPT +EPCjjvbdEYXkstTl +EOcKjvbdxsOJNSBg +EPCkKvbdKQzFPFnF +EOcLKvbdJXtCHkpp +DoCjjvbdtlYXBUBX +EPCjjvbdwuNFRYkn +DoDLKvbdkDLjpfuH +EPDKjvbdxrmhlqbH +EOcLKvbdjmCLzEgP +DoCjjvbduaEYsPFI +EPCkKvbdCEPaWJmG +DncKjvbdwtmEpxlO +EPCkKvbdJbjCpjCx +DnbjjvbdhzVGMRNf +EPCkKvbdZxcinDMS +DoCkKvbdrNZiyLgi +EOcLKvbdIHGyyYYH +EObkKvbdYNqAXuWU +EPDKjvbdtvNwjRTA +EPCkKvbdcJMjLFvx +EPCjjvbdNrsvHEuQ +DoCjjvbdnGeYMmgZ +DoDLKvbdSLZGUfjs +EPDKjvbdtvOYKRTA +DoDKjvbdziuPpESt +DoCkKvbdMgDPlotk +DoCkKvbdeFOrCXDK +DnbkKvbdMgColpUk +EPCkKvbdKVuFdFGi +DoDLKvbduCcUvuoP +DoCkKvbdRDcAopdS +EPDLKvbdehKvSNpg +EOcKjvbdDoCjjvbd +DoCjjvbdOSsufdtp +EObjjvbdGQASwGfZ +DncLKvbdiHJcYujV +DncKjvbdRadFMJZL +EPDLKvbdZxcinDLr +EPDLKvbdhaoDFXQq +DoDKjvbdcJNJkGXY +DoDLKvbduaDySoEh +EOcKjvbdUxhUZkPO +DncLKvbdVYhTzKoO +DnbjjvbdehKvRnQg +DnbkKvbdOhAXyAYa +DncLKvbdxsNiNRag +DoDLKvbdTppoVUgm +EObkKvbdURROuVIN +EOcLKvbdNsTugFVQ +DoCkKvbdrXPlChxq +EPDKjvbdHDkWJajK +DoCkKvbdxnTHxTIc +EPDKjvbdEvZPoljF +EPDKjvbdrzMQTBIO +EPCjjvbdqZPHgQcx +DoCkKvbdVqmxCFMD +DncLKvbdSPsgKGEX +DoCkKvbdzjVPodSt +DoDKjvbdnUtyjiqf +DnbjjvbdIBkydzAD +DoDKjvbdcTDKscjB +EOcKjvbdiHKDYuiu +DncKjvbdBraDUFvr +DoCjjvbdQmYCZOUz +EPCkKvbdySnIlqbH +DnbkKvbdkDLjqGuH +DnbjjvbdVqnYCFMD +DncLKvbdGKeTCglu +DncKjvbdlZSqrxft +DncLKvbdrEEhpNvB +EOcLKvbdrDeJQNvB +EPCkKvbdQmXbYmtz +DoCkKvbdQlxCYnUz +EPCjjvbdEObkLWbd +EPDLKvbdehKuqmqH +EPCkKvbdkCkjpfuH +DncKjvbdRXNcblHc +EPCjjvbdsrqrxydc +EPDKjvbdddoSBvcK +EPCjjvbdADRxJzIp +EPDLKvbdvAcxsPEh +EPDKjvbdSLYfUgLT +DoCkKvbdsrrTYyeD +DoCkKvbdLFegbApu +EPCjjvbdyqOliJwA +EPDKjvbdqTtGrRjt +EPCkKvbdhbObdvqR +EPCjjvbdcScLUEJa +DoDLKvbdRWnDblID +EObkKvbdZLrETnLm +DoDKjvbdiBoDEvpq +DoDKjvbdMpXqVmfs +EPCjjvbdpxngfpcx +DncKjvbdsCGNLfjy +DncKjvbdRjyGVHLT +EPDKjvbdkHflGFmk +DoDKjvbdlhdUQuSB +EPCjjvbdKaLGlbXq +EPCkKvbdVhXvXgYz +EOcLKvbdKyQirztf +EOcLKvbdliDsqVRa +DncKjvbdJutfDdfi +DoDKjvbdEXwksssl +DncLKvbdxxIjCPyk +EObkKvbdKaKgMaxR +EPDKjvbdkCkjpgUg +EOcLKvbdZLqctNlN +EPDKjvbdNddThhjd +EOcKjvbdYlSDsmlN +EPDLKvbdmgExNOGy +DoDKjvbdePErjstS +DnbkKvbdZQleIldq +DncKjvbdpssfrRkU +EOcKjvbdDxYMTtTl +EPCjjvbdySmhmSBg +EPDKjvbdiiehJlxS +EOcLKvbdFkFTDINV +EPCjjvbdVqmxCFMD +DncLKvbdIsZAsMwl +DncKjvbdBraDTfXS +EPDKjvbdmuUykJqf +DnbkKvbdFyVUaEXb +EObjjvbdzROmJJwA +DncKjvbdEYXlUUTl +EPDKjvbdBhjbKhfK +DoCjjvbdJpzEneme +DncLKvbdVwIwuceH +EPDKjvbdhfjDYuiu +EOcLKvbdFpASwHGZ +EPDKjvbdZoOJEdyj +DoDKjvbdqdEiPnWB +DoDKjvbdnBjXYPNu +DoCjjvbdiHKCxuiu +EOcKjvbdGLFTChMu +EOcKjvbdiMEdNtby +DnbkKvbdGdKujBij +DncKjvbdKQydneme +DnbkKvbdziuPocsU +DoDKjvbdmfdxNNgZ +EObjjvbdDxXlUTtM +EObjjvbddePSBwCj +EOcKjvbdNPxQvOHT +DnbkKvbdZHWdAOsJ +EPDLKvbdyqPNIiwA +DoCkKvbdpyPHfqDx +EPDLKvbdUslsekuj +EPCjjvbdiZtfLpnG +DoCkKvbdmSZVZsDi +EPCjjvbdpyOhGpcx +EPDLKvbdzitoodSt +DoDKjvbdVYhUZkOn +EObkKvbdBsAbtGWr +EPDKjvbdvBEYsOdh +EObkKvbdGcjuibKK +DncKjvbdeATqNYKG +DoCjjvbdKNAEZgVB +DncLKvbdqUUHSRjt +EOcLKvbdGcjuibJj +DoDLKvbdnBivxPOV +DnbkKvbdKCjDRKCx +DnbkKvbdrykosAgn +EOcKjvbdUaBqTRRy +EPCjjvbdcSbkTcjB +DoDLKvbdIxTbILpp +DoCjjvbdHDjuibJj +DncKjvbduaDxroFI +DoDKjvbdpedEtWBI +EOcKjvbdXsLaNTnx +EPCjjvbdYORAYVWU +DoCjjvbdYpleIleR +DoDKjvbdCDpAujMf +EPCkKvbdpxoHfpcx +DoCkKvbdUWMPisaR +EPCjjvbdmuUzKjSG +EPDKjvbdkxsRsYgU +EPCkKvbdZxcjNblS +DnbkKvbdbPffckzd +EPDKjvbdUVkpJtBR +DoCkKvbdvlvANEFN +EObkKvbdShyjRAAl +EPDKjvbdxrmhmSCH +DoDKjvbdjvXNcaww +EPDKjvbdkDLjqGuH +EObkKvbdhfibxuiu +EPCjjvbdlqyUyrci +EPDLKvbdFVxopMjF +EOcKjvbdqdEiPnWB +DncKjvbdrXPlChxq +DoCkKvbdxVMeRYkn +EPCjjvbdlhdUQtqa +EObjjvbdRotHKFcw +EObkKvbdwjvcgzzG +EPDLKvbdBhkBjiFj +EObjjvbdlZTSTZGt +DoCkKvbdkIHMFemk +EObjjvbddndrkTsr +DoDLKvbdFVxpQNKF +EPCjjvbdZsiJZETO +EObjjvbdiMFEOUby +DoCkKvbdhlFEOUby +EPCkKvbdrWolDIyR +EObjjvbdmajWwoOV +DoCkKvbdypoMiJwA +DoDKjvbdCDpAvKMf +EPDLKvbdzjVQQDrt +EObjjvbdjlakydfo +EObkKvbdJpyeOeme +DoDLKvbdiHJcYvJu +EOcLKvbdbsDKtEKB +EOcLKvbdrpWOjDVf +EObjjvbdelfWfmKL +EObjjvbdxnSgwriD +DnbkKvbdqlyjZLhJ +EPCkKvbdQdDBPqDr +EPCkKvbdRkYfUfjs +EObjjvbdhtydwSVC +DnbjjvbdWWhwvDdg +DoDLKvbdypnliKXA +DncLKvbdhfibxvKV +DncLKvbdxrmiNSCH +DncKjvbdUaBqSqRy +DoDKjvbdZMSDsmkm +DncLKvbdFjeScHmV +EPDLKvbdQYmAHSrK +DoCkKvbdUVlQJsaR +DoDKjvbdGKdsDHmV +EPCkKvbdkHgLfGNk +EPDKjvbdCIkCLJFj +DoCkKvbdrpWOicVf +DncLKvbdqmZiyMIJ +EObkKvbdNGcQMpUk +EOcLKvbdhfibxuiu +DoCjjvbdjcLjqHVH +EPDLKvbdZxdJnDMS +DncLKvbdHDkViajK +EPDKjvbdhytelRNf +EPDKjvbdZRNFIleR +EObjjvbdNQYRWNgT +EPCjjvbdNdcsiIkE +DoCkKvbdajkfOnDA +EPCjjvbdRNYCZOUz +EPCkKvbdBcpAvKNG +DncKjvbdqTsfqrLU +EPCjjvbdsZlQSaHn +EOcKjvbdqdFIpNvB +DoCjjvbdtbcUwWPP +EObjjvbdEYYMTtTl +EOcLKvbdgGLzNfgA +DoDLKvbdzdynzeZp +DnbjjvbdajlGPNcA +EPCjjvbdEJhJuxKA +EPCjjvbdLLBIWAJy +DnbkKvbdwzIFewdr +DoCkKvbdBvzciEpW +DoDKjvbdaNKasVNH +EPDLKvbdVviXudEg +EPDKjvbdcbSmSAUN +EPDKjvbdqcdiQNua +EPCkKvbdbBVdfPpX +EOcLKvbdrEFIpOVa +DoDKjvbdDigivXjA +DoDKjvbdYSlBMtPY +DoDKjvbdrRtjnLAm +DoDKjvbdKeegbApu +DnbkKvbdHgHZyXxH +EPCkKvbddwzUTrFz +DnbjjvbduDCtwWPP +EOcLKvbdaRfDHsfL +EPCjjvbddeOqbWbj +DncLKvbdOFDsiJLE +EObkKvbdSBceMIyL +EOcLKvbdrylQSaIO +DncLKvbdJcJcQjCx +EPCkKvbdaRfCgsek +EOcKjvbdzitoocsU +DoDKjvbdyzdnSIJI +EObkKvbddndsLTsr +DoDLKvbdcTDKtEKB +EPCkKvbddZyQYYpb +EPDLKvbdCIjakJFj +DncLKvbdLrWlzVQz +EOcKjvbdxrnIlqag +DncLKvbddeOrCWcK +DoCkKvbdRaceLiZL +EPCkKvbddePSCXCj +DoDKjvbdJpzFOeme +DoCkKvbdiMFEOUby +DncKjvbdUQqPVVHm +EOcLKvbdcSbjscjB +DnbjjvbdvPTzpjoU +EPDKjvbdEPDLKvbd +DncKjvbdvBEYsPEh +DnbjjvbdIxTbIMQp +DoDLKvbdZLrETnMN +EPCkKvbdZxdJmbkr +EPCjjvbdIidAKQHE +DncKjvbdrSUjmjaN +DnbkKvbdkaNOmALA +DnbkKvbdiGjCyViu +EPCjjvbdYkrDsmlN +EOcKjvbdypoMhjXA +DoCkKvbdiGjDZViu +DoDLKvbdZxcinClS +DoCjjvbdqUUGrSLU +DnbkKvbdYTLaNUPY +EObkKvbdehKurNpg +EOcKjvbdmRyVZrdJ +EObkKvbdZirhPgBf +EOcKjvbdpyOggQcx +DnbkKvbdfoazwEXh +DnbkKvbdmuUzLJqf +EPDLKvbdYlRdUOLm +DncKjvbdRjyFuGjs +DoDLKvbdQdDAopdS +DoCkKvbdmSYtysEJ +EObjjvbdQdDApRDr +DoDKjvbdyOTHxShc +EPDKjvbdptUHSRkU +EOcKjvbdLGGHaaRV +EOcLKvbdaaWFFopX +DoCjjvbdlBMnmALA +DnbjjvbdZnnIdeZj +DoCjjvbdZMRdUNkm +DoDLKvbdRMxByNtz +EPCkKvbdJYTahMRQ +DncLKvbdpyPIHQdY +DoCkKvbdVBCRTRRy +EOcLKvbdZyEKODLr +EObkKvbdRadEkiYk +EOcKjvbdcyyQXyRC +DnbkKvbdVqnXadkc +EPCkKvbdGKeTDIMu +DnbkKvbdrRtjnKaN +EObkKvbdFVxooljF +DoDKjvbdDoCjjvcE +DnbkKvbddneTLTsr +EPDKjvbdGcjvKCKK +EObjjvbdgPazvdYI +DoDKjvbdSLYfVHKs +DoCkKvbdEPCjkWbd +DnbjjvbdmaivxPOV +EObjjvbdJJdAJogE +DoDKjvbdhkddNtby +DoCkKvbdiCPDEwQq +EOcKjvbdmajXYOmu +DnbkKvbdqYngfqEY +EOcKjvbdTppoUuIN +EPDKjvbdNddThhkE +DncKjvbdDnbkKvbd +DnbjjvbdZRNEiNFR +EPCjjvbdaaWFFopX +EPDLKvbdBhjbKhej +DoCkKvbdfpBzvcwh +DoDKjvbdmSZVZrdJ +EObkKvbdbAueGQQX +EOcKjvbdNQXqWOGs +EPCjjvbdvAcySndh +EOcLKvbdySnImRag +EObkKvbdSxLLmzkY +DnbjjvbdcJMjLGXY +EObkKvbdBsBDUFwS +DoCjjvbdqlyjZLhJ +EPCjjvbdliEURVRa +DoDKjvbdptTgRrLU +DncKjvbdiBoCdwQq +EOcKjvbdEOcLLXDE +EObjjvbdEYYLtTsl +EPDKjvbdVTmTekuj +DncLKvbdLFegbBQu +EPCjjvbdmttzLKRf +EPDLKvbdpfEFTuaI +DncKjvbdiiegjMwr +EObkKvbdxVNEqYlO +DoCjjvbdRWnDblHc +EPCjjvbdaSFbgtGL +DnbkKvbdozmcjwoA +DoDKjvbdPyNAHSrK +DncLKvbdVqnXbEkc +EPCkKvbdFWYpQNJe +EOcLKvbdlYsRsZHU +EOcLKvbdQvmcblID +EObjjvbdRkYetfkT +DoCjjvbdFjdsDINV +EPCjjvbdrafNMGkZ +EPDKjvbdczZQXxqC +EPDLKvbdDwxLtTsl +DoCjjvbdFpASvffZ +DoCjjvbdiMEdOVCy +DoCkKvbdelevfljL +DnbjjvbdaSFcHtFk +DncKjvbdBhkBkIfK +EObjjvbdGKdsDHmV +DncLKvbdhzUekqOG +EOcLKvbdZshiZDrn +DncLKvbdDjIJuwjA +EPCjjvbdpxoHfqEY +EPCjjvbdOAIrsjSA +EPDLKvbdEuyPolie +EPDKjvbdssRrxydc +EPDKjvbdjlakzEgP +DncKjvbdiUydwRuC +DoCkKvbdZMSDtNkm +EPDLKvbdbBVeGQPw +EObkKvbdNHDPlpVL +DoDLKvbdDjHiuxKA +EPDKjvbdatbGwkUI +DnbjjvbdeqaWzkbo +DoDKjvbdvvlBWAuu +EObjjvbdZirhQHBf +EPCkKvbdDncLKvcE +DnbjjvbdehKvSNpg +DncKjvbdVwIwudFH +DoCjjvbdNQYRVmgT +EOcKjvbdNrtWGeUp +DncKjvbdvvlAvAuu +DnbkKvbdjKGHimXr +EObjjvbdhkddNuDZ +EPCkKvbdNddThhkE +EPCjjvbdsPunjDVf +EPDKjvbdxZgfFwdr +DncKjvbdZyDjNblS +EPDKjvbdjcMLQfuH +DncKjvbdwtmFRZMO +DncKjvbdVhXuwgYz +DoCkKvbdVZITyjnn +EPCkKvbdNrtWHEtp +EPCjjvbdMfbomQUk +EObkKvbddwyssqez +EPCkKvbdhfjCyVjV +DoDKjvbdtvOYJpsA +DoDKjvbdiLdcnVCy +EObkKvbdLrWlzUpz +DoCkKvbdSPsgKFdX +EPCjjvbdkNCLyeGo +DncKjvbdCSaCtGWr +DnbjjvbdRkZFtgLT +DoCkKvbdVAaprprZ +DnbjjvbdyXhibQZk +DoCkKvbdsQVnibvG +EPCjjvbduaDyTPFI +DncLKvbdUaCRSpqy +DoDLKvbdnPzYukZC +DoDKjvbdRWnDcMHc +EOcKjvbdxVNFRZLn +EOcKjvbdRkZGUfkT +DnbkKvbdvmWAMdEm +EOcKjvbdmbKXYOmu +EPCkKvbdyXiKCPyk +DnbkKvbdkHgMFfOL +DncKjvbdVYgtZkPO +EPCkKvbdDnbkKwCd +EObkKvbdKfGHaaRV +EPCkKvbdqZOggQdY +EOcLKvbdTlVnaVoJ +DoCkKvbdhanbeWqR +DnbkKvbdypoMiJwA +DnbkKvbduMXvaUBX +DoDKjvbddiirWUzn +EObkKvbdqYoHgQcx +DnbjjvbdFyUuBDwb +DoCkKvbdKCicQjDY +EPDLKvbdezvYeJTw +EPCjjvbdSxKlNzkY +DoDKjvbdQmYByOUz +DnbjjvbdIGgZxxXg +EPDKjvbdqmZjZLgi +DncKjvbdmfeYMmgZ +DncLKvbdGdLVibKK +DoCkKvbdZGvdAOsJ +EObkKvbdjSzhrkJz +EPDLKvbddePRbWcK +EObjjvbdDxXkstUM +DoCjjvbdvlvANDeN +EOcKjvbdrDdiQOWB +DoCkKvbdmajXXoOV +DncKjvbdUtMsekvK +EOcLKvbdxxJKBoyk +EPDKjvbdqYnhGpcx +EObjjvbdatafwkTh +DncLKvbdajkenmcA +DnbjjvbdZQleImEq +EPCjjvbdDncLKwCd +EObjjvbdHELWKBij +EPDLKvbdxrmhmRag +DoCjjvbdwXMBWBVu +EObjjvbdsPvOjCvG +EOcLKvbdssSTZZdc +EPCkKvbddndrkUUS +EOcLKvbdNGbolotk +EObjjvbdZMSDtNlN +EObkKvbdZshiYcsO +DncKjvbdDwxLsstM +EOcLKvbdqZPIGqEY +EOcKjvbdZRNFImFR +EOcKjvbdrDeIonVa +DnbjjvbdYzberKWZ +EObjjvbdegjvRnQg +DoCkKvbduDDUwWOo +EPDKjvbdRotGjGEX +EOcKjvbdKQyeOeme +EPCjjvbdDwxMTtUM +EObjjvbdpedFTvAh +EPDLKvbdFxtuBDxC +DoCjjvbdlqxtzSdJ +DncKjvbdZLrDtOMN +EPCkKvbdGdKujBjK +DoCkKvbdezvYdiTw +DnbjjvbdrEEiQOVa +DncKjvbdOYPVzdOU +DnbjjvbdxwiKCPzL +EObkKvbdRpTgJecw +DoCkKvbdwtmEpxlO +EPDKjvbdqFceTuaI +DncKjvbdsPuoJcWG +DncLKvbdRyjHsCvA +EPCkKvbdyXiJaoyk +EPDLKvbdJvVFcdgJ +DncLKvbdrXPlChxq +EObjjvbdvBEZTOdh +DoDKjvbdqvokcJYq +EOcKjvbdlqxtzSci +EPDKjvbdFkErbglu +DoDKjvbdEPDLKvcE +EObkKvbdijFhJlxS +DoCjjvbdOFDtJJKd +DnbkKvbdyXhiapZk +DncKjvbdEXwlTtTl +DncLKvbdZyEKOCkr +DnbkKvbdqlyjYlIJ +EObkKvbdIGfyxwxH +DnbjjvbdyNrgxTIc +DnbkKvbdeOeSkTsr +EPCjjvbddZyPxZRC +DncLKvbdkDMKpgUg +EPDKjvbdfIKuqnQg +EPCkKvbdhlFENuDZ +DoDLKvbdiBoCdvqR +EPCkKvbdySnImRag +DnbjjvbdIxTahLqQ +DoDKjvbdZnmhddyj +EOcKjvbdgQBzwEXh +EPDLKvbdfILWSNqH +DncKjvbdjcMKqGtg +EObkKvbdKQzEnfNe +EPDKjvbdUQqPVVHm +EObjjvbdREDBPpcr +EObjjvbdnHExMnGy +DnbkKvbdvBDxrndh +DncKjvbdCEPaVimG +DnbkKvbdGBPQxizm +EPDKjvbdLqwMzVQz +DnbkKvbdEPDLLXDE +EPDKjvbdwWkaWBVu +EObkKvbdxrnImSCH +DncKjvbdsrqrxzEc +DnbkKvbdpfDeUWAh +EPDKjvbdjAQHApGj +DoCkKvbdaSGChTfL +DoDKjvbdiHJbxvKV +EPDLKvbdlhdURUqa +EPCjjvbdIwsahMRQ +EObjjvbdGYtuBEYC +DncLKvbdNeEThhkE +EObkKvbdBvzdIePv +EPCjjvbdbAueFpQX +EOcLKvbdjAQGaQGj +EPCjjvbdNHDQNPuL +DncLKvbddoFSkUUS +DncKjvbdACqxJzIp +DnbkKvbdxLWcgzyf +EPCkKvbdTlVnaWPJ +DoCkKvbdCJKbLIfK +DoCkKvbdDwxMUTtM +EPCkKvbdEPDLKwDE +EOcLKvbdTvMQKTaR +EOcLKvbdeXytTrFz +EPDKjvbdNUrrLNAX +DnbkKvbdZjShPgBf +EObjjvbdjAPfaQGj +EPCkKvbdYlRdUNlN +EPDKjvbdzjUoocsU +DoDLKvbdKDKCqJbx +EPCjjvbdQvnECkhD +DnbkKvbdGckVjBij +EObjjvbdXmqAXuVt +EPCjjvbdeFPRavcK +DoDKjvbdEYXlUTsl +DoCjjvbdXrlBNToY +DoDLKvbdrRuLNkAm +DncLKvbdDxXlUTtM +EOcKjvbdwuNEqZLn +EPDKjvbdEOcLLWbd +DoCkKvbdpfDdtVaI +EOcKjvbdmpZyVjyC +EOcKjvbdtSrSxzFD +EObkKvbdsBemLfjy +DoCjjvbdUGznMWue +DncLKvbdbAvEfPpX +DnbjjvbduCcUwVno +DoDLKvbdTppoUuIN +DncKjvbdYqMeImEq +DoCkKvbdrDdhomvB +EObjjvbdgFkzOGgA +EPDKjvbdSwjkmzjx +DoCjjvbdREDBPpcr +EObjjvbdYkrDtNlN +EObjjvbdZisHogCG +DncKjvbdUtMselWK +DoDKjvbdkHfkeemk +DncLKvbdSLYeuHLT +EOcLKvbdeFOrBwCj +EObjjvbdHDjvKCJj +DnbkKvbdkIGkeemk +DoCkKvbdZQmFJMeR +DoCkKvbdqTtGrSKt +DncLKvbdcIljKfWx +DnbjjvbdRjxfUgKs +DnbkKvbdhyuFlROG +EObkKvbdpxoHfpdY +DoDKjvbdhuZdwRtb +DnbkKvbdBdQAvKMf +DoCkKvbdVTlsekuj +EObkKvbdCJLBkIfK +EOcKjvbdmgFYNNgZ +EPDLKvbdxrnImRag +DoCjjvbdbKlGPODA +DoCjjvbdMoxRVmgT +EPDLKvbdKfGIBaRV +DoDKjvbdSCEElJZL +EPCkKvbdmRxtzSdJ +EPDKjvbdjKGIKNXr +DnbkKvbdlhdTptrB +EPDKjvbdBcoaVilf +EPDKjvbdRzKIScWA +EOcKjvbdnHFXmOGy +EPCjjvbdFfJrNhtR +DnbkKvbdzaAPHHCM +DnbkKvbdwXLaWBWV +DoDKjvbdKeegaaQu +EPCjjvbdRotHKFcw +EOcKjvbdnGeXmOGy +DoCjjvbdmIdTqVRa +DncLKvbdfNGWgMik +EPCkKvbdrovPJbuf +EObkKvbdEvYpPljF +DncLKvbdOYPVzdOU +EObjjvbdrzLosAhO +DnbjjvbdyzdnSIJI +EOcLKvbdIsZArmYM +DoDLKvbdvAdZTPEh +DoCkKvbdQvnDcMHc +EObjjvbduMYWaUBX +DncKjvbdUyHszLOn +EPCkKvbdbrbjscia +EObjjvbdTkunaVni +EObkKvbdeATpmYKG +EOcKjvbdqUTfqrLU +EPDLKvbdGYttaDxC +EPDKjvbdRNYByNtz +DncLKvbdADRwizJQ +DncLKvbdKfFgaaQu +EPDKjvbdxZhGGYFS +DncLKvbdwtmFRYlO +EOcLKvbdehLVrNqH +DnbkKvbdKxpirztf +DoCjjvbdZxdKNcLr +DoDLKvbdrbFmMGjy +DoDLKvbdqYnhHQcx +EPCjjvbdGKeTDIMu +EPCjjvbdZRNEhleR +DnbkKvbdfMfXGmJk +DnbjjvbdRjyGVHKs +EPDKjvbdZHXEAOri +EObjjvbdxnTIYTIc +DnbjjvbdTpqOttgm +EOcLKvbdWXIwuceH +EOcLKvbdzROmJKXA +EPCkKvbduCbtwWOo +DncLKvbdJTZBTMwl +EObkKvbdlqyUysDi +DnbjjvbdrpVoJcWG +DoCjjvbdHDjvKCKK +EObkKvbdVwJXvDeH +EPDKjvbdZsiJZDrn +DoCkKvbdhfjDYvJu +DoDLKvbdZyEJmcLr +DnbjjvbdmajXXoOV +DoCkKvbdelewGmKL +DoDLKvbdUtMsfMVj +EOcKjvbdegjuqmpg +DnbkKvbdZMRctNkm +DncKjvbdhlEdOUcZ +DoDLKvbdqAiFAXIE +EObjjvbddBsMrAUN +EPDKjvbdaSGDHtGL +DnbjjvbdbVCGwjtI +DncLKvbdzdzOzeZp +EPDKjvbdKQyePFnF +EPDLKvbdauBgXjtI +EPDLKvbdCSaCtGWr +DnbkKvbdbsCjtEKB +DoDKjvbdCWzdIeQW +EPCkKvbdRbDeLhxk +EObjjvbdOEctJIkE +DoCkKvbdSPtGiedX +DncKjvbddZyPxZRC +DnbjjvbdTukpKUBR +DoCjjvbdpstHRqkU +DncKjvbdNdctIhjd +EOcKjvbdUWMPjTaR +DoCkKvbdLGGHbApu +EObjjvbdmozZWLZC +EObjjvbdULvPAvOi +EPDLKvbdcJMikFvx +DncLKvbdjJfHjMxS +EPCjjvbdqYoIHREY +DoCjjvbdiifHjNXr +EObkKvbdZLrETnMN +DnbkKvbdtSqsYydc +EPDLKvbdCIkCLJFj +DoCkKvbdliDsqUrB +DnbkKvbdNPxQumgT +EPDKjvbdACrYJyiQ +EOcLKvbdYTMBMtOx +DoDLKvbdNGcQNPtk +DncKjvbdtbbtvuno +DncKjvbdZLrEUNlN +DoCkKvbdaogHELzd +DoCjjvbdgFlZmfgA +EPCjjvbdvPTzpkOt +DoCjjvbdjKGHjMxS +EPDLKvbdauBgXjsh +EOcLKvbdiBoCeWpq +EObkKvbdSPsfjGEX +DnbkKvbdzGxlAMeX +DoDLKvbdqFcdtWAh +EPCkKvbdOYOuzcmt +DoCjjvbdDwxLtUTl +DnbkKvbdOTUVgFUp +DnbkKvbdiGibyWJu +EPCjjvbdUyITzLOn +DoCkKvbdbLMFnnDA +DoCjjvbdDwxLsssl +DncLKvbdBiLBjhfK +EPDKjvbdNPwpvOGs +EObkKvbdzQnliKXA +DoCjjvbdeYZssqez +DoCjjvbdeATplxKG +EOcLKvbdRyjIScWA +EPDKjvbddeOqbWcK +EPDLKvbdACrXjZhp +DnbjjvbdmuVZkKSG +EPDKjvbdVqmwbFLc +EPCkKvbdCSaCtFwS +DnbjjvbdVZHszLPO +DoDKjvbdVrNxCFLc +EOcKjvbdegjuqnQg +EPCjjvbdZMSETmlN +EOcKjvbdHDjvKBjK +EPCkKvbdyOTIXsJD +DoDKjvbdnQZyWKxb +DncLKvbdxwhiaozL +DncLKvbdNdcshhkE +EPCjjvbdXnRAYUut +DoDLKvbdNsUWGeUp +DncKjvbdWHwuwfxz +DnbkKvbdRpUGifEX +DnbjjvbdEOcLKwCd +EPDKjvbduaEYsOeI +DnbkKvbdjhHLfFnL +DncLKvbdZoOJEeZj +EPCkKvbdEPCjjvcE +EObjjvbdxUldqYkn +EObkKvbdOEdThiLE +DnbkKvbdjcMKpgVH +EObjjvbdkIGkeenL +DncKjvbdZsiJZDrn +EPCkKvbdxnShXsIc +DoDKjvbdZnmiEdzK +DoCkKvbdVTmUGLvK +EOcLKvbduCcVXVno +EObjjvbdZQleJNFR +EObjjvbdFejRmhsq +EPDLKvbdaMkBruNH +DoCkKvbdNQXqWNgT +DoDKjvbdjuwNcbXw +EPCjjvbdSBceLiYk +DoCjjvbdMgColpVL +DoDLKvbdVZHtZkPO +DoDKjvbduMYXBUAw +EPDKjvbdNeDshiKd +DoDKjvbdTAFJICPE +EObjjvbdJvVFceGi +EObjjvbdNHCpMpUk +DnbkKvbdijGIKNYS +DoDLKvbdDncKkXCd +DncKjvbdkMakyeGo +EObkKvbdjKFgilwr +DoCkKvbdOhAXyAZB +DoCkKvbdUGznMWvF +EOcKjvbdRosfifEX +EPDLKvbdfNFvgMjL +EObkKvbdxxJJbPzL +EPCjjvbdQlxCYmtz +EOcLKvbdgPazwEXh +DoDLKvbdkySrTYft +DoDLKvbdhgKDYuiu +DoDKjvbdYkrETmkm +EObjjvbdNPwpunHT +EOcLKvbdYlRdUNlN +DnbkKvbdZLrDtOLm +EObjjvbdxrnJMrCH +EObjjvbdZnnIeFZj +DoCjjvbdzRPMhiwA +DncKjvbdssSSxyeD +EOcLKvbdjAPgAofj +DncKjvbdRosfifEX +DoDKjvbdEXwktUTl +DnbjjvbdWRmwadkc +EPDLKvbdeEoRavbj +DoDKjvbdXsMBNToY +DnbkKvbdVqmxCFLc +EOcKjvbdkVwOEBww +DoCjjvbdfNGXGmJk +EOcLKvbdmtuZjiqf +DoCkKvbdnPyyWKyC +EObjjvbdJpydoGNe +DnbkKvbdjJfHimYS +DoCkKvbdyXhjBozL +DoCjjvbdkIHLeenL +EOcLKvbdTAEiIBoE +DnbkKvbdvBDxsPFI +DncKjvbdlhdTpuRa +EObjjvbdFfJqmiUR +EPCjjvbderAvzkbo +DncLKvbdwygeexEr +EObjjvbdSBdElJZL +EOcKjvbdySmiMrBg +EPDKjvbdatbGwkTh +DncKjvbdnBivwnmu +EPDKjvbdFxuVAdYC +EPDLKvbdqlzJyMHi +EPDKjvbdZRMdhldq +DoCjjvbdNeDtIhkE +DoCkKvbdfMewGlik +EOcLKvbdhaoDEwQq +DnbjjvbdIwsagkqQ +DncKjvbdkIHMGFnL +DoDLKvbdGdKuibKK +DnbjjvbdTAEiICOd +DncLKvbdNeEThiKd +EObkKvbdYpmEiNFR +EPDLKvbdFkFTDHlu +DoCkKvbdkDLkRHUg +DnbkKvbdyYIjCPyk +DncLKvbdFVyQPmKF +DnbjjvbdZQldhldq +DoDKjvbdVqnYBdkc +EPDKjvbdSKxeuGkT +EPCjjvbdiZuGLqNf +DnbjjvbdJTZArmXl +DnbkKvbdyNrgwrhc +EOcLKvbdrNZiyLgi +DncKjvbdSBdFMJZL +EPCkKvbdfMfWfmKL +EPDLKvbdfMevfljL +DoCjjvbdmIcsqVRa +DoDLKvbdrEEhpOVa +EPDLKvbdZRMeImEq +DoDLKvbdyTNiMrBg +EPCjjvbdsQVnibvG +EOcKjvbdvBDxsPFI +DoDKjvbdqquKnKaN +DncLKvbdqGDeTuaI +EPCkKvbdZdxGzgiC +DoDKjvbdkDLkQftg +DoDKjvbdePEsKtUS +DoDKjvbdUxgtZjoO +DncLKvbdxUmFRYlO +DnbjjvbdwuMeRYkn +DoCkKvbdRWmdClID +EPDLKvbdCDpBWJlf +DncKjvbduaEYrneI +DnbjjvbdfHkVqmpg +EPDKjvbdKxpirzuG +DoDLKvbdZLqdUNkm +DoDLKvbdDwxMTstM +EOcKjvbdrzLosAhO +DnbjjvbdqZPHgQdY +EObkKvbdjggMFfNk +EPCjjvbdZMRcsmkm +EObjjvbdEJgiuxKA +DncLKvbdZtJJZDsO +EObkKvbdRjxeuGkT +DncKjvbdqdFJPmua +DoCkKvbdGYtuAcxC +DoCjjvbdZnmheEzK +DoCkKvbdKWUfEFGi +DoCkKvbdfMfXGmKL +DnbjjvbdjvWmcbXw +DnbkKvbdyzeORhJI +EPDLKvbdpstHRqjt +DoDKjvbdTukpKUAq +DoDKjvbdSPtGjFcw +DncKjvbdWSNxCFMD +DnbkKvbdjlalZdgP +EOcLKvbdkxsRsYgU +EObjjvbdLFfICApu +DoDKjvbdCEQBWKMf +DoDKjvbdbAvFFpQX +DoCkKvbdhgKCxvKV +DncLKvbdjcMLQgVH +EPCkKvbdzitpQDrt +EOcKjvbdNVTRjmAX +EPDKjvbdkxsRsZHU +DoDKjvbdKDJcRKCx +EPDKjvbdFjeScHmV +EPCkKvbdZjTIQHBf +DnbkKvbdlqyUyrdJ +DoDKjvbdehKurORH +EObjjvbdbKlFoODA +DoCkKvbdwtmFQyMO +DoCjjvbdXnRAYUut +DoDKjvbdxsOIlqbH +DncLKvbdyNsIXrhc +DoDLKvbdCEQAvKNG +DncKjvbdRotHJedX +EPDLKvbdVZHsyjoO +DnbjjvbdkCkkRHVH +DoDKjvbdRWmcblHc +DncLKvbdqvokbiYq +DoDLKvbdRkZGVHLT +EObjjvbduCbuXVno +DoCkKvbdEJgivYKA +DoDKjvbdkWWnDbYX +EPDKjvbdnGdxMmfy +DoDLKvbdIHGzYxYH +DoDKjvbduCbtwVno +EObkKvbdqlyjYkgi +EObjjvbdVwIwudEg +DnbjjvbdfRaWzkcP +EPCkKvbdEARhlzXX +DnbkKvbdfMevfmJk +DncLKvbdZyDjNcLr +EOcKjvbdtAHQhABS +DncKjvbdkClKqGtg +DoCkKvbdEObkLXCd +EObjjvbdFkFTDINV +EOcKjvbdEztQdkcJ +DoCkKvbdKaLHNBxR +EPDLKvbdhaoCdvqR +EObkKvbdrJAJdmOe +EObjjvbdrpVnjCuf +EPCkKvbdFjeTCglu +DoCjjvbdqdEiPnWB +EPDKjvbdGFirOJUR +EPCkKvbdJmADzHUa +EPCjjvbdWWhwucdg +DncLKvbdBhkBjiFj +DoCkKvbdSZihSbvA +DncKjvbdZtIiZETO +EPDLKvbdCTAcUGXS +DoDKjvbdVqmxCFLc +DncLKvbdmajWwoOV +EPDKjvbdVhYVxHYz +DoDLKvbddoFSjtTr +DoDLKvbdrzMQTAgn +DoCjjvbdUVlPjUBR +EPDLKvbdtvOXipsA +DoCjjvbdrouoKCvG +EObkKvbdOSsufdtp +EPDLKvbdIGfzZXxH +EObkKvbdbQGgDkzd +DoCkKvbdOFDtJIkE +EPCjjvbdiHJbyWJu +DnbjjvbdLAkHMaxR +EPCkKvbdJTZBTMwl +DncLKvbdSQTfjGEX +EOcLKvbdlrZVZrci +EObjjvbdkyTSTZHU +EPCjjvbdxUleQxkn +EPDLKvbdEKIKWYKA +DoCkKvbdZHWdAPSi +EPDLKvbdxVNFRZMO +EPDLKvbdcSbkTcjB +DoCkKvbdlYsSTZGt +EPDKjvbduaDxroFI +EObkKvbdNHDQMouL +DoDLKvbdxrnJMqbH +DnbjjvbdmfeXmOGy +DoDKjvbdidkGtoAO +DnbjjvbdGYtuBEXb +DnbjjvbdRECaQQdS +DoCkKvbdmajXXnnV +DncKjvbdZMSEUNlN +EPCkKvbdZtJIxcrn +DncLKvbdJpydneme +DncKjvbdVviYWEEg +DoDLKvbdyXhjBoyk +DoCjjvbdbhlikGXY +DnbkKvbdVviXudFH +EPCkKvbdYTMAlsnx +EPCjjvbdxZhFeweS +DoCjjvbdyNsIXriD +DoDKjvbdznoqEcMY +DnbjjvbdauCHXjtI +DncKjvbdIsZAsMwl +EPCkKvbdZMSDtOLm +DnbkKvbdJqZePFme +EPDKjvbdkHfkeenL +DoDLKvbdaNLCStmH +DncLKvbdIwsbHkqQ +EObkKvbdfHjvRnRH +EPCjjvbdlqyVZsDi +EObkKvbdEuxoolie +DoDKjvbdjAPgAofj +EOcLKvbdjcMLRHVH +DncKjvbdjKFgjNXr +EPCkKvbdmIctQuRa +DncLKvbdJpyePGOF +DncLKvbdNGbpMouL +EObkKvbdpfDdsuaI +EPCjjvbdyzeORhIh +DoDKjvbdrDdhpNua +DoCjjvbdFfKRmhtR +EPDLKvbdpfEEsuaI +EPDLKvbdqcdhpOVa +EPCjjvbdVYgsykPO +DoDLKvbdDncLLXCd +EObkKvbduaEYroEh +EOcLKvbdkNBlZeHP +EObjjvbdGcjvJajK +DncLKvbdrpVoJbuf +EObjjvbdEKIJuxKA +DncKjvbdZxcjODMS +DncLKvbdmgFXmOGy +DoCkKvbdUMVoAuoJ +DoDKjvbdqcdiQNua +DnbkKvbdbrcKtDia +DnbkKvbdKfFgbApu +DncKjvbdezvZEiTw +DnbkKvbdlqxtzSdJ +DoCjjvbdOTUWGeUp +EPCkKvbdJXtBhMQp +EOcLKvbdOAJTTjSA +EOcKjvbdfILVrNpg +EOcLKvbdnQZxvLZC +EPDKjvbdyYJJaoyk +DnbjjvbdkMakzFHP +DnbjjvbdjbkjpfuH +DoCkKvbdgGLymfgA +DoDLKvbdJYUBhLpp +EPCjjvbdJSyBTMxM +DnbjjvbdyTNiMrBg +DnbkKvbdqYoHfpdY +EOcKjvbdZyEKNcLr +DoCkKvbdZtIiYcsO +EPCkKvbdZQmFJNFR +DncKjvbdSPsgKFdX +DoCjjvbdvwMAuaWV +EPDKjvbdHfgZxxYH +EObkKvbdrSUjnKaN +DnbjjvbdKWVGEFGi +DncKjvbdsPvOjDWG +EPDKjvbdhzVFkqOG +DoDKjvbdssSSyZdc +DoDKjvbdYkqcsmlN +EPCjjvbdYpldiNFR +DncLKvbdemFwGlik +DoDLKvbdjuvmdBxX +DoDKjvbdCTBDTewS +DoCkKvbdKeehBaQu +EObkKvbdwyhFexEr +DoDKjvbdQvmccMID +DoDKjvbdVviYVceH +EPCkKvbdmRxtyrdJ +EPDLKvbdYqMeJNFR +EPCkKvbdRbDeMIxk +EPCkKvbdcJMjKfXY +DnbkKvbdVwIwvDdg +DnbjjvbdIwtCHkpp +DncLKvbdczYpYYqC +EPCkKvbdKaLGmBxR +DncKjvbduLwwAsaX +DncLKvbdssRrxzEc +EObjjvbdrXQMCiZR +DnbkKvbdZRNFImFR +EOcKjvbdACqwjZhp +DnbjjvbdbKlGOmcA +EObjjvbdGFirOJUR +EPDLKvbdqvokbiYq +EOcKjvbdJmAEZgUa +DoCkKvbdbhljKevx +EPCjjvbdbKlGPNcA +EOcKjvbdRMxByOUz +EOcKjvbdbsDLUEJa +EPCkKvbdRacdlJZL +EObkKvbdmuUyjjSG +EObkKvbdjKFgjNXr +DoDLKvbdlhctQuRa +DoCkKvbdjKFhKMxS +EObjjvbdpedEtVaI +EOcKjvbdIwtBhLpp +DnbjjvbdZHWdAPSi +EOcLKvbdiLdcmuCy +EOcLKvbdjcMLRGuH +EPCjjvbdRbDdkiZL +EOcKjvbdiHJbxvKV +EOcLKvbdaSGDHsfL +DoCkKvbdjKFhJlwr +DncKjvbdiBoCeWqR +EOcLKvbdegjvSNpg +EOcLKvbdrbGMlHLZ +DnbjjvbdBraDUGXS +DncLKvbdFeirOIsq +EPDLKvbdhytekpmf +EOcKjvbdIsYaTMwl +DnbkKvbdrSVLOKaN +DoCkKvbdTIyjRABM +EOcLKvbdsBfNMGkZ +EPDLKvbdUtNTfMWK +EObkKvbdRjxeuGjs +EObkKvbdTqQnuVIN +EObjjvbdhuZdwRuC +EOcLKvbdqTtHSSKt +DncKjvbdmpZxvLZC +DoDLKvbdlAloNALA +EPDKjvbdiLddOUby +EPDLKvbdwuMdpxlO +DncKjvbdNrsvHEuQ +EPCkKvbdyOSgxTJD +EOcLKvbdIryArlxM +EPDLKvbdZHXEAPSi +EPCjjvbdSCDdlIxk +EOcKjvbdySnJNSCH +DnbjjvbdijGIKNXr +EPDKjvbdVAaqTRSZ +EObjjvbdkxsSSxft +EPCkKvbdnUtzKiqf +EPCkKvbdlqxuZsEJ +EObjjvbdEXxMUUUM +EPCkKvbdLFfIBaQu +DnbjjvbdrRtkNjaN +DoCjjvbdNHCpMpUk +EPDKjvbdZjTIQGaf +EPCkKvbdHELWJbKK +DoDKjvbdJbibpjCx +DnbjjvbdJSyArmYM +EPCjjvbdfNFwGmJk +EOcLKvbdYTMBMsnx +DoDLKvbdyTOJMqbH +EObjjvbdEPDLLXDE +DncLKvbdkyTSTZGt +EObjjvbdGBPRYizm +DoCkKvbdVviXvDeH +DncKjvbdsQWOicVf +DoCkKvbdfHjvSNqH +DncKjvbdlZTSSxft +DncKjvbdFVyPolie +EPCjjvbdRXODblID +DoCjjvbdlhcsqVSB +DncLKvbdqYnhGqDx +EObjjvbdFeiqmiUR +DnbjjvbdKefHaaQu +DoDKjvbdRNXbYmtz +EOcKjvbdNwnuzcmt +DoDLKvbdXFxytAPT +EPDLKvbdOTUVfdtp +DoCjjvbdraelkfkZ +DncKjvbdXsMAltPY +DoDKjvbdVUMsfLuj +EPDLKvbdZisIPfbG +EPDKjvbddZxpYYqC +DnbkKvbdzjUopESt +DnbkKvbdVUMtGMVj +DncLKvbduCbtwWOo +EObkKvbdaaVeFpPw +DncKjvbdKNADzGta +DncKjvbdeEoSCXCj +EObjjvbdhancEvqR +EObkKvbdKCicQibx +DncLKvbdijGHjMwr +DoCkKvbdziuPpETU +DoCjjvbdiBnbeXRR +DoCkKvbdZQmEiMdq +EObkKvbdrMyjZMHi +EOcKjvbddoErkTtS +DoCkKvbdtkwvaUAw +EPDLKvbdTlVnaVoJ +DncKjvbdfHjurOQg +DoDLKvbdWWiXvEEg +EPCkKvbdqdEhpNua +EOcLKvbdYSkaMtPY +EPCkKvbdxmsHxTIc +DnbjjvbdJqZdnenF +EPDKjvbdWexzUAOs +EOcLKvbdrovPKCuf +DoDKjvbdkxsSSyGt +Dnbjjvbdzdynzdyp +EOcLKvbdHEKvJbJj +EObjjvbdOStWHEuQ +DnbjjvbdkyTRsZGt +DoCkKvbdcJNKKevx +DoDKjvbdSPtGifDw +EObkKvbdGdLVibKK +DnbjjvbdbBVdfPow +DncKjvbdhtyeXSVC +EPDLKvbdptTfrSLU +DncKjvbdjvXODaww +DncKjvbdqZOgfqDx +DncLKvbdTJZjRABM +EOcLKvbdTpqPVUhN +EOcKjvbdRWmdClID +DoCjjvbdqquLOLAm +DoCjjvbdFfJqmiUR +EOcKjvbddBsMrATm +EOcKjvbdYzcFrKVy +EPCjjvbdsZlQSaIO +EPCkKvbdkHfkeenL +EOcKjvbdiHJcYuiu +DoDKjvbdCEPaVilf +DoCjjvbddBrmSAUN +EPDLKvbdSPtGifDw +EOcLKvbdAMhYrvyx +DncLKvbdTIyjRAAl +EOcLKvbdZtIhyESn +DnbjjvbdVUNUFlWK +EOcKjvbdyXiJaoyk +EPCkKvbdDncLKvbd +EOcLKvbdKWVFcdgJ +EPDKjvbdnQZxvKyC +DncKjvbdjJehJlxS +DoDKjvbdRkYfVHKs +EPDLKvbdirzhsLJz +EObkKvbdVUMtFkuj +DnbjjvbdqwPkbiYq +EPCjjvbdIGfzZYXg +DoCkKvbdlYsRryGt +EObjjvbdpfDeUWBI +EOcKjvbdwtldpxkn +DoCkKvbdzitopETU +DoDKjvbdJuuGEEfi +DnbkKvbdnPzZVkZC +EOcKjvbdmfeYMnGy +EPDKjvbdkIGlGGNk +DncKjvbdezvZEhtX +EPDKjvbdqqtjmkAm +EPDLKvbdzRPNIiwA +DoCkKvbdGKeSbgmV +EPDLKvbdmJETqVSB +EPDKjvbdbVCGwkTh +DoCjjvbdBhkBkIej +EOcLKvbdbBWFFopX +DncLKvbdjggLfGOL +EPCkKvbdzQnmIiwA +EOcLKvbdhbPDFWpq +EPDLKvbdkClLQgVH +EObkKvbdrWpMChyR +DncKjvbdMfbpNPuL +DnbjjvbdNsUVfeVQ +EOcKjvbdaRfDHtFk +DoDKjvbdRbEFLhyL +EOcKjvbdmIcsqUqa +DncKjvbdFVyPpNJe +DoCjjvbdLAjgMaxR +EOcLKvbdypoNJKXA +DncLKvbdEztRFMCi +DoCkKvbduVmwiqTA +EObkKvbdUyHsykPO +DoCkKvbdhzUfLqNf +EPCjjvbdiUzEvqtb +EPDKjvbdpfDeTuaI +EPCkKvbdSwjkmzjx +DncLKvbdjKFgjMwr +EOcLKvbdRWnECkhD +EOcKjvbdZoOJFEyj +DnbkKvbdvvlAvAvV +DncKjvbdZLqcsmlN +DncKjvbdyqOliJwA +EPCkKvbdKWUedEfi +DoCkKvbdePEsLTtS +DnbkKvbdtcDVXVoP +EPCjjvbdKCjCpicY +EObkKvbdZdwfzhJC +EPDLKvbdBhjajiGK +EOcKjvbdJXsahMRQ +DoCkKvbdZxdKNcLr +EPDKjvbdnBjWwoOV +DncLKvbdapGgDkzd +EPDKjvbdjmCLzEgP +EPCkKvbdWRmwbFMD +DnbjjvbdBdQAujMf +EObkKvbdzjUpPcsU +DoDLKvbdwtmFQyMO +DoCkKvbdiMEcmtby +DncKjvbdSBcdkiYk +EPCkKvbdfSBWzkbo +EOcLKvbdxVMeRZLn +DnbjjvbdCSaDUGXS +DncKjvbdZtJIyETO +EPCkKvbdTkvOaVni +DnbkKvbdkySqsYft +EPCjjvbdxsOJMrCH +EPCjjvbdCWzdJEov +EPCjjvbdEARiMywX +EObkKvbdxsNiNSCH +DncLKvbdhbPDFWqR +EObkKvbdVUNUFlVj +EObjjvbdXrlBNToY +EOcLKvbdfHjvSOQg +EPCjjvbdwWkaWAuu +DncKjvbdbKlFnnDA +EPCkKvbdRkZFuGkT +EPCjjvbdMowpvNfs +DncLKvbdmtuZjjSG +DnbkKvbdiCPDEvqR +DncLKvbdbAudfPow +DnbjjvbdFjeSbhMu +DncKjvbdSQTfjGEX +EPDKjvbdbAueGQQX +DnbkKvbdjKGIJmXr +EOcKjvbdIryBTNYM +EPDLKvbdmgEwlnGy +EObjjvbdSBdEkhxk +DoCjjvbdfMfWgMjL +EPDLKvbdEObjjwCd +EObjjvbdhzUekqOG +EObjjvbdWSNwbElD +DoDKjvbdrNZjYkhJ +DoCkKvbdRkYfUgKs +EObjjvbdczYpYZRC +DoCkKvbdzoQQeDMY +DncKjvbdFxuVBEXb +DoDKjvbdSiZjRABM +DoDLKvbdYzbfRivZ +EPDLKvbdlqyUyrdJ +EOcLKvbdtbbuWvOo +DncKjvbdSKxfVGkT +DoCjjvbdEXxLtUTl +EOcLKvbdEPCjkWbd +EPDLKvbdEObkLXDE +EPCkKvbdxKvdHzzG +EPDKjvbdpfDdtVaI +DoCjjvbdbAueGPpX +DoCjjvbdZMRdUOLm +DoDLKvbdwtmFRYkn +DoCjjvbdNPwpumgT +DoCkKvbddijSWUzn +DoDKjvbdJXsbHkqQ +DnbjjvbdxZhFexEr +DoCjjvbdSQUHJedX +EPDLKvbdjmCMZdgP +DncLKvbdMfbomPtk +EOcLKvbdqTtHRqjt +EPCkKvbdqceIpNvB +DncLKvbdFxtuBDxC +EPCkKvbdxVNEpyLn +EOcKjvbdYzbeqivZ +DoCjjvbdNdcsiJLE +DoDKjvbdzjVQQDsU +EObjjvbdvBDySneI +DoDKjvbdBhjbKhej +EPDLKvbdWSOYBdlD +EOcKjvbdOYOuzcnU +EPCkKvbdkCkkQgVH +DnbkKvbdtlXwBTaX +DnbkKvbdTppoVUgm +DoCjjvbdQmXaxnUz +DncKjvbdkHfkfFmk +EPCjjvbdmgEwlnHZ +EPDLKvbdZdxGzhJC +EPCkKvbdmIdTqUqa +DoDKjvbdzGyMAMeX +DnbkKvbdTppnuUhN +DoCjjvbdSLYfUgLT +DnbkKvbdZsiJZETO +EObkKvbdNUrqjmAX +EObjjvbdZyDimcLr +DoCkKvbdRDbaQRDr +DnbjjvbdbAudfPow +EPDKjvbdZjTHpGaf +DoDKjvbdqwQLcIxq +DnbjjvbdZLqdTmkm +DoDKjvbdyXiKCPzL +EObjjvbdssSTYyeD +DoCjjvbdddoRawCj +DoCjjvbdkMbLydfo +DoCjjvbdVTmUFkvK +DoCjjvbdhyuFkpmf +EObkKvbdlYsSSyGt +EPCjjvbdtvNxKQsA +DoDKjvbdRpTgKFdX +EObjjvbdjbkkQgVH +DnbjjvbdaNLCStlg +EOcKjvbdDxYLsssl +DoCjjvbdfNFvgMjL +DncLKvbdrovPJcWG +DnbkKvbddoFSjssr +DnbjjvbdSQTgKGDw +DoCjjvbdQvnEDLhD +EOcKjvbdUxhUZkOn +EPCjjvbdEzsqFMDJ +DoDKjvbdGdKuiaij +EOcKjvbdxrnJMrCH +DnbjjvbdUWMQJtBR +EObkKvbdEKHivYKA +EPDLKvbdYSlAltOx +DnbjjvbdbVCHXjtI +DnbkKvbdtkwwAtBX +DoCjjvbdZQleJNEq +EPDKjvbdEPCjjvcE +EPCjjvbdCSaDUFwS +EPDKjvbdHELViajK +DoDLKvbdijFgjNXr +DncLKvbdjmCLydfo +EObkKvbddZyQXxqC +DnbkKvbdySnImSCH +EPCjjvbdqmZjYkgi +EPCjjvbdGFirNiTq +DoDKjvbdRXNdDMID +DncLKvbdMfcQNQUk +EOcLKvbdZdwfzghb +EPDLKvbdULuoBWOi +EObjjvbdFyVUaDwb +DoCjjvbdNQXpumfs +DnbkKvbdrWolDIxq +EPCkKvbdBvzdIeQW +DnbkKvbdfIKuqmpg +EOcKjvbdnBiwXoNu +EObjjvbdiHKDZWKV +EPCjjvbdZLqdTnLm +DoCjjvbdlYsSTYgU +EPDLKvbdsBfNMHKy +DnbkKvbdjuvmdCXw +EPDLKvbdRDcBQQdS +EOcKjvbdySmhmRbH +EPDLKvbdbrbjscia +EPDLKvbdkxrrTZGt +DoDKjvbdcJMjLGWx +EPDKjvbdKeegbBQu +DnbjjvbdvPTzqKoU +EOcLKvbdIidAKPgE +DoDLKvbdVrOYBdkc +EObjjvbdeFOqawDK +EOcLKvbdZRNEhmFR +EObjjvbdKfFgbBRV +DoCjjvbdiLeEOVCy +EPCkKvbdqmZjYkgi +EPDKjvbdHffyxxXg +EPDKjvbdZLrDsmlN +DnbjjvbdTkuoBVoJ +EOcKjvbduDDUvvOo +DoDKjvbdZdwfzhJC +EPCkKvbdfMfWgNKL +EPCjjvbdRXOECkgc +EOcKjvbdMowpvNfs +DoDLKvbdiBoCeWpq +EObkKvbdNwoVzdOU +EPDLKvbdDoDKjvbd +EObjjvbdLFehCBRV +EOcLKvbduCcVWuno +EOcKjvbdXsMBMtOx +DnbkKvbdcIljKewY +DoDLKvbdEzspdkcJ +DncKjvbdqcdhomua +EPDKjvbdiifHjNXr +EObkKvbdVqnXbFLc +EPCkKvbddwyssrFz +DncKjvbdrSVKmkAm +EPCjjvbdTlVoBVni +EObjjvbdOhAYZAYa +EPCjjvbdRadEkiZL +DoCkKvbdSCEEkiYk +EObjjvbdGZVVAcxC +DnbjjvbdZyEJnDMS +EOcKjvbdzitoodSt +EPDKjvbdXFxzUAPT +DnbjjvbdziuQQESt +EPCjjvbdEARhmZvw +DncLKvbdatbHXkTh +DncKjvbdbsCjtDjB +EPCjjvbdKWVGDdgJ +EPDKjvbdrafNLfkZ +EObkKvbdFkEsChMu +DnbkKvbdVgxWXfxz +EObjjvbdJbjDRJbx +EObkKvbdwyhFfYFS +EPCjjvbdMfbpNPtk +EObkKvbdbsDKtDia +EPCkKvbdkxsRsZHU +DnbkKvbdvAdZTOdh +DncKjvbdptUHRrLU +DncKjvbdvPTzqKnt +DncLKvbdTppoUthN +DnbkKvbdrbFlkgLZ +EPCjjvbdGdKvJajK +EPDLKvbdACqxKZiQ +DoCkKvbdbPffckzd +DoCkKvbdhbOcEvqR +DnbjjvbduCcVWvOo +DoCkKvbdmuUzLKRf +EPCjjvbdbUbHYLUI +DoDKjvbdbKkeoNcA +DoCjjvbdcScKtEJa +DoCjjvbdyzdnRgiI +EPCjjvbdkIGlFfOL +EOcLKvbdzjUpPcsU +DoDLKvbdJuuGEEgJ +DncLKvbdTqROtthN +EOcLKvbdpstGqqkU +EPCkKvbdtSrTYzEc +EPDKjvbdezvYdiUX +DoDKjvbdtTRrxzFD +DoCjjvbdrovOjDWG +DoDKjvbdUQpoUthN +EOcKjvbdKDJbpicY +DnbjjvbdaSGCgtFk +DoDKjvbdGZVVAcwb +DnbjjvbdEvYopNJe +EObjjvbdSQTgKFdX +EPDLKvbdrXPkbhyR +DoDLKvbdhyuGMROG +DoDKjvbdzoQRFClY +EPCkKvbdKWUeceHJ +EObkKvbdZnmiFFZj +DnbjjvbdtcDUwVoP +DoCkKvbdjlakyeHP +EPCkKvbdBvzdIdpW +EPCjjvbddePRawCj +DoDKjvbdmfeYNNfy +DnbkKvbdSLYetgKs +DncKjvbdFejRnJTq +EPDLKvbdIGfzZXwg +DncKjvbdJvVFdFHJ +EOcLKvbdIHHZyYYH +EPDLKvbdyXhiaoyk +DoCjjvbdADSYJzIp +EObjjvbdNPxQunHT +EPCkKvbdxnTHwrhc +DncKjvbdTppnuVHm +EObkKvbdjlbLydfo +DoDLKvbdVBBpsRRy +DnbjjvbdACqwiyhp +DoCkKvbdZRNFJNEq +EOcLKvbdaRfDHtFk +DoCkKvbdKfFgbBQu +DnbjjvbddCTNSAUN +EPDLKvbdTfznMXVe +EOcKjvbdeOeSkUTr +DnbkKvbdqdEiPnVa +EOcLKvbdsBemMHLZ +DoCkKvbdNPxQvOGs +EPDLKvbdOTTufeUp +DncKjvbdraelkfjy +DoDLKvbdZoOIeFZj +DnbkKvbdptTgRrLU +DncKjvbdACrXiyhp +EPDLKvbdIGgZxwxH +DnbjjvbdZnmiEeZj +DnbkKvbdWRmxCFLc +DoDLKvbdyYIiaozL +EPCjjvbdOTTvGeUp +EPCkKvbdNUsSKmAX +EPCjjvbdDigiuwjA +DoDKjvbdIrxaTMxM +DoDKjvbdZyDimcLr +EPCjjvbdjbkkRHVH +DoCjjvbdWXJYVceH +EOcLKvbdlZTSSyHU +DncLKvbdwuNEqYlO +EPCkKvbdrpWPJbuf +DncKjvbdtbcUwWPP +EOcKjvbdGKeScINV +DncKjvbdZeXfzhJC +DncKjvbdUQqPVVIN +DoDKjvbdxsNhmSBg +DoDKjvbdURROuVHm +DncKjvbdRMwbYmtz +DoDKjvbdZRMeImEq +EOcLKvbdWHwvXgYz +EPDLKvbdIwsahMQp +EOcKjvbdfHkVrNqH +EObjjvbddjKSWUzn +DncKjvbdxwiJbQZk +EPCkKvbdMSWlzVQz +DoDLKvbdUQpnuUhN +DncLKvbdiCPCdvqR +DoCjjvbdapHHELzd +DncKjvbdyOSgwrhc +DoCkKvbdDxYLtUTl +EObjjvbdyfyMAMdw +EObjjvbdHffzYxYH +DoDKjvbdYzcFrKWZ +EPDLKvbddZyPwyRC +EPCkKvbdLhalRYAS +DoCkKvbdGYtuBEXb +DoCjjvbdrylQTAgn +DoCjjvbdbBVeGPpX +EPDLKvbdYpmFImFR +DnbkKvbdJcKCpjDY +DncLKvbdYTLaNUPY +DnbkKvbdeOeSjtTr +DoCkKvbdEYYLtTtM +EPCkKvbdrzLoraIO +DoCjjvbdKWVGDdfi +DoDKjvbdBhjbLIfK +EPCkKvbdNQYQvOGs +EOcLKvbduLxXBTaX +EPDKjvbdANHySwZx +DnbkKvbdeOdsLTtS +DnbkKvbdUsmTfMWK +DoDLKvbdcImJkGXY +DncKjvbdsPunibuf +DnbjjvbdIGfyxxYH +DoDLKvbdvBDyTOeI +EPDLKvbdGKeScHmV +EOcLKvbdqFceUVaI +DncLKvbdqdEhpOWB +DoDLKvbdTulPitAq +DnbjjvbdWXIwudEg +EPDLKvbdcTDKtDjB +DoCjjvbdgFlZnHHA +DnbkKvbdwuNEqZLn +EObkKvbdmRxtzSci +EObjjvbdjvXNdCYX +DnbkKvbdqGDdsvBI +DncKjvbdqdEhomvB +DoCjjvbdrpVoKCvG +EObkKvbdWHwvYHYz +EOcKjvbdrykoraHn +EPCkKvbdsPuoKCuf +DncKjvbdZjSgofaf +DncKjvbdNeETiIjd +DoDLKvbddoFSkTsr +EPCkKvbdkWWnECXw +DnbkKvbdZRNFIldq +EObjjvbdzjVQPdTU +DnbjjvbdhytelRNf +EOcKjvbdNPxQunHT +DoCkKvbdmuVZkJrG +EPCjjvbdUVlQJtBR +DoDKjvbdzitpQESt +DoCjjvbdraemLfkZ +DoDLKvbdkNBlZeHP +EObkKvbdrbGNMHLZ +EPDLKvbdkIHLeemk +DoDKjvbdbAvEeopX +DoDKjvbdiGjCxujV +EPCkKvbdqlzJxkgi +DncLKvbdVZITzLPO +EOcLKvbdVZITykOn +EPCjjvbdjuvnDaww +DoDKjvbdkVwOECYX +EObjjvbdcyxpXyRC +DnbjjvbdULvPAuni +DnbkKvbdOTUWGdtp +EOcLKvbdKDJcRKCx +EPCkKvbdBsBDUFwS +DncLKvbdQdDAopcr +EObjjvbdcSbjtEKB +DnbjjvbdlAloNALA +DoCjjvbdADSXizJQ +EOcKjvbdrpWOibvG +EObjjvbdIGfzZXwg +EPDKjvbdptUHRrKt +DncLKvbdZdwfzhIb +DoCkKvbdQZNAGrrK +DoDKjvbduCbtvuoP +EPCjjvbdJuuFceGi +EPCkKvbdgGLymgHA +DnbjjvbdcyyPxYpb +EPCkKvbdhuZeWquC +EObkKvbdyTNiNRbH +DoCjjvbdVAaqSprZ +DncLKvbdoznDkYPA +EPCkKvbdiUydvquC +DncLKvbdhytfMROG +DoCkKvbdmbKXYPNu +DnbkKvbdMpYQunHT +EOcLKvbdHkaznXQk +DoDLKvbdTvMPisaR +DoCkKvbdIryBTNXl +DoDLKvbdZLrDsmkm +DncLKvbdlhctRVRa +EPCjjvbdYkqcsmkm +EPCjjvbdEXwlUTtM +EObkKvbdEvZPoljF +EPDLKvbdZRNEiNFR +DoCkKvbdANIZTXZx +DncKjvbdZoOIeFZj +DoDLKvbdeJirWUzn +DoCjjvbdRWmdDLgc +DoDKjvbdACrYKZhp +EPDKjvbdMowpunHT +EOcKjvbdYTLaNTnx +DnbjjvbdQvnEClHc +DnbkKvbdSBceLhyL +DoDKjvbdjgflGGOL +EOcKjvbdYpldiMdq +DoCjjvbdrovPKDWG +DoDKjvbdZisHofbG +DoDKjvbdEOcLKwDE +EPCjjvbdhfjDZWJu +DncKjvbdhfjCyWJu +EOcLKvbdtSqsYzEc +DoDLKvbdbQHHELzd +DoDKjvbdySnImRbH +EOcLKvbdVqmxCElD +DnbjjvbdNdcsiJKd +EPCkKvbdkNBkzEfo +DnbkKvbdJKEAKPfd +DncLKvbdiifIJlwr +DnbjjvbdhtzEvqtb +EObjjvbdwWlAvBWV +EPDLKvbdlhctQuSB +EOcLKvbdNddUIiKd +EPDKjvbdJSxaTMxM +EPDLKvbdVrOXaeMD +DoDLKvbdGcjvKBjK +DncLKvbdqvpLbiZR +EPCkKvbdjKFgilxS +DncLKvbdDoCjjvbd +DoCjjvbdqqtjnKaN +EOcKjvbdBvzdJEpW +DoCkKvbdcarlrATm +DoDLKvbdQdCaQQdS +DncKjvbdVqnXadkc +DoCjjvbdJvUecdgJ +DnbkKvbdVYhUZkPO +EPDKjvbdxZgfFxEr +EPCjjvbdsPunicWG +DnbkKvbdmSYtyrdJ +DnbjjvbdTulQJsaR +DncKjvbdsrrSxyeD +DnbkKvbdzQnmJJwA +DncKjvbdatafxLTh +EOcLKvbdmfeYNNgZ +EObkKvbdNxOuzcnU +EPDLKvbdDwwksstM +EPDLKvbdxnTIYTIc +EPDKjvbdHgGyyXxH +EOcKjvbdGAnpyJzm +DoCkKvbdUQqPVUhN +DncLKvbdYgWdAOri +DoDLKvbdygZMANFX +EPCkKvbdrJAJdlne +EPDLKvbdZnmheEyj +DnbjjvbdIxUCHkpp +DnbkKvbdjJehJlwr +DoDKjvbdhlEdNuDZ +EOcKjvbdeOeSkTsr +EOcLKvbdVqnYBdlD +DoDKjvbdeATqMwif +EPCjjvbdrXQLbhyR +DnbjjvbdFkErbhMu +DoCjjvbdpxnhHQcx +EOcLKvbdrWpMDIxq +EPDKjvbdVhYWYGxz +DoCkKvbdwzIGFxFS +DoCjjvbdEztQeLbi +DnbjjvbdlZTRrxgU +DncLKvbdSZihSbvA +DnbjjvbdrzLpTAgn +EPCjjvbdNrsugFVQ +DnbjjvbdxUleQxlO +DncKjvbdtkwwBUAw +DoCjjvbdbBVdeoow +EPDKjvbdEObjkXDE +DnbjjvbdhgJbxvKV +EPCkKvbdIwtCHlQp +DoCkKvbdxmsIXrhc +EObkKvbddePSCXDK +EOcKjvbdVrOXbEkc +EOcLKvbdFVyPomJe +DoDLKvbdREDBPqDr +DncLKvbdaNLCStmH +DncLKvbdbAudfQPw +DoDKjvbdRaceLiZL +DoCkKvbdJYUCIMRQ +DnbkKvbdYkrDtOMN +DnbjjvbdFkFTChNV +EOcLKvbdZRMeImFR +EObkKvbdUxgszLOn +EOcKjvbdFjdsChMu +EObkKvbdrafNLgLZ +EPDKjvbdelewGmJk +EOcKjvbdZMRctNlN +DoDLKvbdliEUQtqa +DncKjvbdqUUHSRjt +EPDKjvbduCbtwVno +DoCkKvbdaaVeFoow +EPDLKvbdkClKqGuH +DoDLKvbdCflFgAzc +DoDLKvbdTAEhgbPE +EObkKvbdmtuZjjRf +EObjjvbdKDKCqJbx +DncKjvbdrovOjDVf +DoCkKvbdhtzFWqtb +DncLKvbdEvYpQNKF +EOcLKvbdeFPRavcK +DoDLKvbdhlEcnUby +DoCkKvbdegjvSOQg +DncKjvbdhbPCeWpq +DnbjjvbdsrrTYyeD +DncLKvbdTlWPAvOi +EPCjjvbdwzHeexEr +DncLKvbdmJEUQuRa +DnbkKvbdkIHLeemk +EObkKvbdhtyeXSUb +EOcLKvbdHDkWKCJj +EOcLKvbdRbDdkhyL +EObkKvbdRosfifDw +EPCjjvbdOStVfduQ +DnbkKvbdiHJbxujV +DoCjjvbdsPuoJcWG +EPCkKvbdDxXktTtM +DoCjjvbdHDjujCJj +EObjjvbdUWLoisaR +EPDKjvbdqiAKEmOe +DoDLKvbdxmsIYShc +EPCkKvbdCJKbKiGK +DoDLKvbdRECaQRDr +EPDLKvbdYqNEiNEq +DnbkKvbdiMEcnVCy +DoCkKvbduCbtwVno +DoDKjvbdHbMZdzAD +DnbkKvbdemGXGmKL +DoDLKvbdgQBzwDwh +DoDKjvbdKQzEoGOF +DoDKjvbdWSNwaeMD +EPDKjvbdySmhlqbH +EObkKvbdDxYLtTtM +DnbjjvbdFxuVBEXb +EObjjvbdiBoCdwRR +EPCjjvbdGQATWgGZ +EPCkKvbdYpleJNEq +EOcLKvbdvPTzqKoU +DnbkKvbdZQmEhldq +DncKjvbdLBKgMawq +EPCkKvbdqFceTvAh +EPCjjvbdkIHMFenL +DoDKjvbdehLVqnRH +DoDKjvbdxwhibPyk +DnbkKvbdkMbMZeHP +EOcKjvbdsrrSyZeD +EOcLKvbdMowpunHT +EObjjvbdJqZdnfOF +DoCkKvbdezuxdhtX +DnbjjvbdaaWFFopX +DoCjjvbdqdFJQOVa +EPCjjvbdWWhwudFH +EPDKjvbdhtzFWrUb +EPCkKvbdWSNwaeMD +EObkKvbdcIlikFvx +EPCkKvbdauCGwkTh +EPCkKvbdbhmJkGWx +EPDKjvbdRosgJfEX +DnbkKvbdTvMQJtAq +DnbkKvbdsBfMlGkZ +DnbkKvbdVrNxCElD +DoDLKvbdmpZxukZC +EObkKvbdhlEcnVCy +EOcLKvbdwzIFfYFS +DnbkKvbdZtIhxdSn +DoDLKvbdjgfkfFmk +DoDLKvbdqTtHSRkU +EObjjvbdSCDeLiZL +DoDKjvbdeATplxJf +DnbkKvbdIBkzEzAD +EOcKjvbdFWZQPljF +DoCjjvbdRbDeMJYk +EPDLKvbdDoCkKvcE +DoCkKvbdZjShPfbG +DnbjjvbdNPxQvOGs +EPDLKvbdKyQirztf +DoDLKvbdJutecdfi +DoCjjvbdTppoUuHm +EPDLKvbdjEkGuPAO +DnbkKvbdVTmTekuj +DnbkKvbdZyEJmcMS +EOcKjvbdNddThhjd +DncLKvbdrDdhpNua +EOcKjvbdBiLBkJGK +DoCkKvbdrXPkbhxq +DnbjjvbdZQmEiMdq +DncLKvbdhzUfMROG +EPDKjvbduaEYroEh +DoCjjvbdJYUCHkqQ +DoCjjvbdwzHfFxEr +EPCjjvbdLiBkqYAS +DoDLKvbdxZgfFxEr +DoCkKvbdraemLgLZ +DoDLKvbdxxJJaozL +EPDLKvbdKeehBaRV +DoCkKvbdPIAYZAZB +EObjjvbdBvzdIdov +DoDKjvbdjblKqGuH +DoDKjvbdlhdURVSB +EPDKjvbdqvpMDJZR +DncKjvbdajkeoODA +EOcKjvbdkySqsZHU +DnbjjvbdJqZdnfOF +DncKjvbdZHWdAOsJ +DoCkKvbdaNLCStlg +DoDLKvbdVZHszKnn +DoCjjvbdtvOYJpsA +DoCjjvbdNPxQvNfs +DoDLKvbdZLqctOMN +EObjjvbdvwMAvAvV +DnbkKvbdEuxpPlie +DnbkKvbdAMhYsWyx +DoCkKvbdtumwjQsA +EPCjjvbdVAaprqRy +EObkKvbdlZSqsYgU +EObkKvbdBvzdIdov +DnbjjvbdyOShYTJD +EOcLKvbdZshhxdSn +EPDKjvbdUtMselWK +DoDLKvbdYqNEiMeR +DncLKvbddePSBwDK +DncLKvbdqYnggQcx +DnbkKvbdqceJQOVa +DoDLKvbdtSrTZZeD +EPCjjvbdANHyTWzY +DoDLKvbdcIlikFvx +DoDKjvbdxmsHwsIc +EObkKvbdYzbfRiuy +EPDKjvbdWHwuwfxz +EOcLKvbddndsLTsr +EObkKvbdwXMAuaVu +EPDLKvbdbVBfwjtI +EObjjvbdfMfXHMik +DoCkKvbdOXoVzdOU +DnbkKvbdnGeXlnHZ +EPCjjvbdGGJrOJTq +EPCkKvbdhanbeWqR +EOcLKvbdLhbLpxAS +EPDLKvbdbBVdepPw +EOcKjvbdWSNwadlD +DoCkKvbdaRfChTek +EPCkKvbdmbJvxOmu +DoCkKvbdCSaCsfXS +EObkKvbdbhljKewY +DncLKvbddZxowxpb +DnbjjvbdRDcBQQdS +DnbjjvbdKDJbqKDY +EObkKvbdWRmxCFLc +EPDLKvbdYlSETmkm +EOcLKvbdMIalRYAS +DoDKjvbdCEQAuimG +EPDKjvbdCTAcTewS +EPCjjvbdrRtkOKaN +DnbkKvbdtTRryZeD +DnbjjvbdMgColpVL +EOcKjvbdrDdhomua +EPDKjvbdRbDeMJZL +DnbkKvbdxnSgwrhc +DoDKjvbdVvhxVdFH +DncKjvbdLYqJrzuG +DncLKvbdZsiIyETO +EPDLKvbdieLHUoAO +EPDLKvbdNsUVgEuQ +EPDLKvbdoAKztHcn +DncKjvbdfNFvgNJk +DoCkKvbdqYoHgQcx +DncLKvbddwzUUSFz +DoCkKvbdIHGzZYXg +DncLKvbddZxpXxpb +DnbjjvbdhlFDnUcZ +EPCjjvbdSKxfUfjs +DoCkKvbdbAvFGPpX +EOcLKvbdVhXuwfxz +EPCkKvbddoEsKtTr +DncKjvbdhkeEOVDZ +EObjjvbdNUrqjmAX +EPDLKvbdUWLojTaR +DoDLKvbdWIYVwfxz +DnbkKvbdUtMsekvK +EOcKjvbdRpUHJecw +DoDKjvbdCJKbKiFj +EObjjvbdEuxoomJe +EPCjjvbdLrWlytpz +EObjjvbdMgDPlotk +DncLKvbdNrtWHFVQ +DoCjjvbdZeYGzgiC +EPCkKvbdKaKfmCYR +DoCjjvbdjlakzEfo +EPDKjvbdpeceTvBI +DnbkKvbdKDKCqJcY +DoDKjvbdMowqWNgT +EPDKjvbdRMxCYmtz +EObjjvbdrXQLbiYq +DncLKvbdZnmheFZj +EOcLKvbdiLeENtcZ +DncKjvbdzaAPGfal +EPCkKvbdeATqNYKG +EObjjvbdSCDdlIyL +DoCkKvbdVZHtZjnn +EPCjjvbdZtIhxdTO +EPDKjvbdTlVoAuoJ +EObjjvbdZRNFIleR +DoDLKvbdEPDLKwCd +DnbjjvbdfRaWzkbo +EPDLKvbddneSjstS +EObkKvbduCbtwWOo +EPCkKvbdmoyyWKyC +EPCjjvbdehLVrORH +DoDLKvbduCcUvuno +EObkKvbddZxowxqC +EObkKvbdKQydoFme +EPCkKvbdqqtkOKaN +DoDKjvbduaEYsOeI +EObkKvbdePEsLUTr +DoDLKvbdbsDLTcia +DncLKvbdDwwlTtUM +EOcKjvbdOEdUIhkE +DoDLKvbdtvOXjRTA +EObkKvbdeFPSCXCj +EPCkKvbdqlzJxlIJ +EOcKjvbdUMVoBVni +EPCkKvbdqqtkNkBN +DoDLKvbdiVZeWquC +DncKjvbdZLrDsmlN +EPCkKvbdzitopESt +EOcKjvbdnBjXYPOV +EObkKvbdehKurOQg +DoCjjvbdmJDsptrB +DnbkKvbdaNKbTVNH +DncLKvbdGQASvfey +EOcLKvbdtbcUwVno +EOcKjvbdqUUHSSLU +EOcLKvbdvwLaWBWV +EPCkKvbdRacdlIxk +DnbkKvbdxZgfGXeS +EOcLKvbdVAapsQqy +EOcLKvbdQvnECkhD +EPDKjvbdCWzchdpW +DoCjjvbdpedFUWBI +EPDKjvbdqvpMCiYq +EPDLKvbdEPDKjwCd +DncLKvbdGckWJaij +EObjjvbdgPazwEXh +DoCkKvbdUVlPitBR +DoCjjvbdMSXMzVQz +DnbkKvbdliEUQuRa +DoCkKvbdOStVgFUp +EPCjjvbdUtMtGMVj +DoCkKvbdKWVFdFHJ +EPCkKvbdUxhUZkOn +DnbkKvbdLBKflbYR +EPCkKvbdFkEsCglu +DnbkKvbdKCibpjCx +DnbkKvbdGLEsChNV +DoCjjvbdLGFhCApu +DncLKvbdeXzTsqez +DoCkKvbdxrmhlqbH +EPDLKvbdYlRdTmlN +EPCjjvbdqYnhHRDx +EPDKjvbdWfYzUAOs +EPCkKvbdMJCLpxAS +EObkKvbduCbtwVoP +DoCkKvbdmfdwlmfy +EPCjjvbdVBBprpqy +DoDLKvbdEKHivXjA +DoDLKvbdkWWnECYX +EOcKjvbdqUUHSRkU +DncKjvbdYlRcsnLm +EOcKjvbdelfWfmJk +EPDLKvbdZtIhxcsO +EOcLKvbdGKdrcINV +EPDLKvbdOAIsUKSA +DoCjjvbdXFxytAOs +EPCjjvbdUQpntuIN +EPDLKvbdTvLpJtBR +EPDKjvbdRyihSbvA +DnbjjvbdhyuFlROG +EObkKvbdZxcinClS +EOcKjvbdptTfqrKt +DoDLKvbdURRPUtgm +EObkKvbdaNKbTVNH +EOcLKvbdiZuFlQmf +EPDKjvbdePEsLUTr +EPCjjvbdFxuUaEYC +EPDLKvbdliETpuRa +EObjjvbdjKFhKNYS +DoCkKvbdwzHefXeS +DoDLKvbdFfJqmiUR +EObjjvbdcJMjKewY +EObjjvbdqdFIomua +DnbkKvbdFejRnJTq +DnbjjvbdEzsqFMCi +EPDLKvbdhzUelROG +EPDKjvbdLKaIWAKZ +DoCkKvbdGGJrOIsq +EOcKjvbdVUMtGMWK +EObkKvbdmpZyVkZC +DoDLKvbdJTYaSmXl +EObjjvbdmSZUyrci +EObkKvbdxnSgwsIc +EOcLKvbdhgJcYujV +DoDKjvbdUQpoVVHm +EPDKjvbdKWVFdEgJ +DoCkKvbdWXJXudEg +EObkKvbddxZtURez +DnbkKvbdZRMeJNEq +EOcKjvbdpxoIHRDx +EObkKvbdGGKSOJTq +EOcKjvbdkIHMFenL +EPDLKvbdTqQoUtgm +DnbjjvbdtvNxJpsA +DnbkKvbdFyUtaDxC +DnbkKvbdSLYeuHKs +DncLKvbdxrmhlrBg +DncLKvbdGdLWJajK +EPCkKvbdSPtHJfEX +EPCkKvbdeKJrVtzn +DoCjjvbdWRnXadlD +DncKjvbdhkdcmtby +DoDLKvbdVviYWEFH +EOcKjvbdTAFJICPE +EPCjjvbdCJKbLIej +DoDLKvbdyYJJaoyk +EPDKjvbdNsUVgFUp +EPCjjvbdrDdhomua +DoDKjvbdySnJNRag +EPCjjvbdyNrgxShc +DnbjjvbdADRxKZhp +DnbkKvbdaMkCStmH +EPDKjvbdfIKvRnRH +DnbkKvbdoAKztIEO +DnbjjvbdDjHjVwjA +EObkKvbdjuwODbYX +DoDLKvbdbhmKKfWx +EPDLKvbdKaLGlaxR +DoDLKvbdwzIGFxFS +EPCkKvbdGBOpxizm +EPDKjvbdRXODcMHc +EOcLKvbdYqNFJMdq +EOcKjvbdxUleQxkn +EPDKjvbdZirgpHCG +DncLKvbderAvzkbo +EPCkKvbdTvMPisaR +EPCkKvbdZtJIxdTO +EOcKjvbddePRavcK +DncLKvbdCDpAuimG +EPDLKvbdQdCaPqES +EObjjvbdZyEJmbkr +DoDLKvbdOEcsiIkE +EOcKjvbdrbFlkgLZ +EOcKjvbdRacdlJZL +EPCkKvbdKDKCqKCx +EPDKjvbdrDeIonVa +DncKjvbdOFEThhjd +DncLKvbdLAkHMbXq +EObkKvbdhytekpnG +DncLKvbdrSUkOLAm +DncLKvbdiCOcFWpq +DoCjjvbdrylPsAhO +EOcKjvbdxVNEpyLn +DnbkKvbdmbJvwnnV +DnbkKvbdVAbQsQrZ +EPCkKvbdCTBCtGXS +DncKjvbdTAEiHbPE +EObjjvbdFeiqnJTq +EPDLKvbdDxYMTtTl +DncLKvbdHDkVibKK +DnbkKvbddePSBvcK +DoCjjvbdauCGwkTh +EPDLKvbdWIYWYGxz +DoDLKvbdjcLjqHVH +DoDLKvbdTfznMXWF +DnbkKvbdkVwNcaww +EObjjvbdlYrrSxgU +DncKjvbdaNLCTUmH +EOcKjvbdznoqEblY +DncLKvbdjuwOEBww +DncKjvbdGQATXHGZ +EOcKjvbdiZuFkpmf +EPCjjvbdajlGOnDA +EPDKjvbdJcJbpjCx +DncKjvbdauBgXjtI +EPCkKvbdsZkpTAhO +EPCkKvbdOEdUIhjd +EOcKjvbdNsUWGduQ +DnbkKvbdVTltFlVj +EObjjvbdaNKasVNH +DnbjjvbdhancEvpq +EPDLKvbdZtIiZETO +DoDKjvbdFxuUaEYC +DoDLKvbdLGGHbAqV +DoDKjvbdqceIpOWB +DoDKjvbdvBEZTPEh +DoDKjvbdKefHbBQu +EPDLKvbdlZTSSyHU +DncKjvbdnPyyWKyC +EObjjvbdsZkpTBHn +DoCjjvbdaaVdepPw +EPDKjvbdtkwvaUAw +EObjjvbdEPCkKvbd +EPCjjvbdtkwvaUBX +DncKjvbdRbDeMIyL +EOcKjvbdxwhjBoyk +DoDLKvbdFxuVAcxC +DnbkKvbdxZgfFxFS +EOcKjvbdjhGkefNk +EOcKjvbdEPDKkWcE +EPDLKvbdQvnEDMID +EOcLKvbdqquKmjaN +DoCkKvbdZtJJZESn +EPDLKvbdTkvOaWPJ +DnbjjvbdcSbkUEJa +EObjjvbdQlxBxmtz +EOcLKvbdehKuqmpg +EObjjvbdpyOggQcx +DncLKvbdnVVZjjSG +EPCjjvbdyqOmIiwA +EPDLKvbddZxpXyRC +EObkKvbdRXODcMID +EOcKjvbdnHFXlmfy +EPDKjvbdznpQdcLx +EOcLKvbdqGDdtWBI +EPCjjvbdZoNhddzK +EOcKjvbdqTsgSSLU +EOcLKvbdRzJhTCvA +EOcKjvbdCIjbLIfK +DncKjvbdKQzEoGNe +EOcKjvbdACrXizJQ +EObjjvbdEzspdkcJ +EObkKvbdsZlQTAhO +EPDKjvbdfoazwEYI +DoDLKvbdjAQGaQGj +DoDLKvbdEzsqFMCi +EPDKjvbdyYJJapZk +DnbkKvbdIxUBglRQ +DoCjjvbdtTRsYyeD +EPDKjvbdGKdsDIMu +EOcLKvbdFyVVAcxC +DnbkKvbdZLrDtNkm +EPDLKvbdsrqrxydc +EPDKjvbdrpVnjCvG +DoDLKvbdmSYtzTEJ +EPDKjvbdajkfOmcA +EPDLKvbdssSSxzEc +EObjjvbdDxYMTssl +DnbkKvbdiMFEOVDZ +EOcLKvbdULvOaVni +EPDLKvbdlqyUzSdJ +EObjjvbdZoNheFZj +DncKjvbdcScLTdKB +EObkKvbdGLFTDINV +DncKjvbdcyyQYZRC +EOcKjvbdYqMeIldq +DoCkKvbdOEcshhkE +EObkKvbdirzhrjiz +EOcLKvbdxUmFRYlO +DoDKjvbdkyTRsZGt +DncKjvbdIryAsNYM +EObkKvbduWNxJpsA +DncKjvbdYkqcsnLm +DoDLKvbddZxpXyQb +DncKjvbdRotGiedX +DnbkKvbdKVtedEgJ +EOcKjvbdjvWnEBww +EObkKvbdFyVVAdXb +DoCkKvbdYlSEUNkm +EOcKjvbdcTDLTcia +EPCkKvbdzjUpQESt +DnbkKvbdqUTfqrLU +EPDKjvbdSQUHJfEX +DnbjjvbdiGjDYvKV +EObkKvbdhkdcnVCy +EPCjjvbdJuuFdFHJ +EObjjvbdYkqdTnMN +DoCkKvbdpssgSRkU +EObkKvbdUWLpKUBR +DoDKjvbdZsiJZESn +DnbkKvbdYqMdhmEq +DoCkKvbdjcLkRHVH +DnbkKvbdSPsgKGDw +DoDLKvbdKVtfEEfi +EPCjjvbdiGibyWKV +EPCjjvbdEYYLtUTl +EPCjjvbdFejSOIsq +DncLKvbdRECaQRES +EPCkKvbdEuyQQNKF +EObkKvbdxwhjCPzL +DncLKvbdiLeDnUby +EOcKjvbdEuxpQMie +EOcKjvbdIidAJogE +DoDKjvbdxsNhlqag +EOcKjvbdEzsqFLcJ +EObjjvbdYTMAmToY +DoDLKvbdwuNFQyLn +DoCkKvbdzitpQDrt +EOcLKvbdZtJIxdSn +DncLKvbdqZPHgRDx +EPDLKvbdMoxQvNfs +DncKjvbdmIctQuSB +DoCkKvbdFfKSNiUR +EPDLKvbdhtydvqtb +EObjjvbdxrnJNRag +DnbjjvbddoFTKssr +EPDKjvbdqlyjZLgi +DnbkKvbdyNsHwsJD +EOcLKvbdxnTHwsJD +EObjjvbdUQqOtuIN +DnbkKvbdwtleQyMO +DoDLKvbdrovPKDVf +EOcLKvbdFaPQxizm +EObjjvbdVAapsQqy +EOcKjvbdJvVFdFGi +DnbkKvbduDDVXVno +EObkKvbdZjTHpGbG +EObjjvbdZirgofaf +DncKjvbdAMgySvzY +DoDKjvbdGdLVibKK +DoDKjvbdWRmwbEkc +DncKjvbdXsMAlsnx +DoDLKvbdtcCuXVoP +DoDLKvbdqlyjYlIJ +EPCjjvbdHELVjCKK +DncLKvbdBdQAuilf +DoCjjvbdeFOrCXDK +DoCjjvbdRpTgJfDw +DoCkKvbdLAkHMbXq +EOcLKvbdaRebhUGL +DncLKvbdnQZyWLYb +EObjjvbdXsMBNUOx +DncKjvbdrSVKnKaN +EPCjjvbdAMhZSwZx +EOcLKvbdcScKtEKB +DncKjvbdKaLGlaxR +EOcKjvbdZRMeJNFR +EPCkKvbdwygeewdr +DnbkKvbdhancFXRR +EOcKjvbdOTUVfdtp +EPDLKvbdmbKXYOnV +DoDKjvbdGLFSbhNV +EPDLKvbdMfbomPtk +DnbkKvbdmIcsqVRa +DoDKjvbdwtmFRZLn +DoCkKvbddtAUATMv +DncKjvbdiBoDEvqR +EObkKvbdiHJcYujV +DnbjjvbdiCPDFWqR +EOcKjvbdyTNhlrCH +DoDKjvbdNQYRVmfs +EOcLKvbdFjdrbhMu +DoCjjvbdsrrSyZeD +EPCkKvbdXsMBMsoY +DoDKjvbdjhHLfFmk +EPCkKvbdyOTIYTIc +EOcLKvbdbhmKLGWx +DnbjjvbdxnTHwsIc +EOcLKvbdZoOJEeZj +EOcKjvbdjmBkzEfo +EPDKjvbdYORAXuWU +EPDKjvbdtkxXAsaX +DoDLKvbduaEYsPFI +EPCjjvbdypoNIiwA +DoDKjvbdVBCRTQrZ +DnbjjvbdlrYtyrdJ +DoCjjvbdhzUekpnG +EOcKjvbdcTCjsdJa +EObkKvbdbhlijfWx +EOcLKvbdYTLaMsoY +DnbjjvbdKVtedFGi +EOcLKvbdsPvPJbuf +DncLKvbdNrsvHEuQ +EObkKvbdmfeYMmfy +EPCjjvbdZjTHpHCG +DoDLKvbdpyOhGqDx +DoDKjvbdRkZGVGjs +DnbjjvbdRWnEDMHc +EPCkKvbdjlbMZdfo +DoCkKvbdyqOmIiwA +DoCkKvbddxZstSFz +DnbjjvbdKCibqJbx +DoCjjvbdqqtjnLBN +DnbjjvbdBhjbLJGK +DoDLKvbdrWokbhxq +EOcLKvbdJzpGXdAN +EPDKjvbdRMxCZNtz +DncKjvbdkClLRGuH +DncLKvbdIHHZxxXg +EPDKjvbdZshiYdSn +EPCkKvbdqcdhomvB +DoDKjvbdVTmUFkvK +EObkKvbdZisHogBf +DoCjjvbdRbDdkiYk +DnbkKvbdGGJrOJTq +DncLKvbdeFPRavcK +DnbjjvbdSPtHKGDw +DoDLKvbdJmADyfuB +EPCjjvbdKCibpicY +DoDLKvbdiGicZVjV +DoCkKvbdZLqdUNkm +EPDKjvbdVUNUFkvK +EPCjjvbdemFvflik +EPCkKvbdkxrqrxft +DnbkKvbdRbEElIxk +EPCjjvbdaaVdfQQX +DoDLKvbdySmhlqag +EPCjjvbdrRuKnKaN +DncLKvbdezuyEhtX +DnbkKvbdtbbuWuoP +DnbkKvbdZtIhxcrn +EObkKvbdcyxoxZQb +EOcKjvbdDxYLtTtM +EObjjvbdjggMFfOL +EPCkKvbdGckWJbKK +DnbjjvbdddnqavcK +EPDKjvbdYgWdAPTJ +DnbjjvbdbhlikGXY +DncKjvbdNPxRVmgT +EObkKvbdRpUHKGDw +EObkKvbdmfdwlmgZ +DoDLKvbdBvzdJFPv +DnbjjvbdZHXEAPSi +EPDKjvbdbQHGdLzd +EOcKjvbdCIjbLIej +DnbjjvbdOXnuzdNt +EObkKvbdrSUkNkBN +DoDLKvbdNeDsiJLE +EPCkKvbdiUyeXRtb +EObkKvbdbsDKsdJa +DncLKvbdbrcLTdJa +DncLKvbdSPsgJecw +EObjjvbdKNADzGta +EPDLKvbdFWZPomKF +EPCjjvbdRzKISbvA +EOcKjvbdvmWAMcdm +DncKjvbdwyhGGYEr +EPDLKvbdfHjuqnRH +EPCjjvbdRXOEDLhD +EPCkKvbdyOSgwsJD +DoDLKvbdnCKXYOmu +DnbjjvbdjmCLyeGo +DnbjjvbdTYKlNzjx +DoCjjvbdZisHpGbG +EObjjvbdUWMPisaR +EObjjvbdqFcdtWAh +EOcLKvbdYqNEhleR +DnbjjvbdlZSrSyGt +EPDLKvbdePEsLTsr +DncKjvbdSBcdlJYk +EPDKjvbdePEsLTsr +EPDKjvbdypnmIjXA +DnbjjvbdsQWPKCuf +EOcKjvbdZRNEhldq +EPCjjvbdYpmFImEq +EPCkKvbdKfFhBaRV +DncLKvbdezvZEhtX +DncKjvbdiCObdvpq +DnbjjvbdmJETqUrB +EOcLKvbdfpBzvcxI +DncKjvbdRbDdkhxk +EPCkKvbdmpZyVkZC +EPDLKvbdyNsIXrhc +DnbkKvbdyYJJaoyk +DncKjvbdwWlBVaWV +DoDKjvbdqwPlCiYq +DncLKvbdvvkaVaWV +DncKjvbdcJMjKewY +EObkKvbdbBWFFpPw +EPCjjvbdpyOhGqEY +EPDKjvbdCDpAujNG +EPDLKvbdCSaCtFvr +DoCjjvbdwygfFxEr +EOcLKvbdLFehBaQu +EPCjjvbdssSSxydc +EPCjjvbdHfgZyYYH +DnbkKvbdnBjWxOmu +DnbkKvbdcJNJjewY +EObjjvbdrzLoraIO +EOcKjvbdADRwjZiQ +EPCkKvbdOAJStJrA +DncLKvbdajkennDA +DoCjjvbdmbKWxPNu +EObkKvbdmbKXYPOV +DoCkKvbdKCjCpjDY +EPCkKvbdIjEAJogE +DoCkKvbdkHgLfGOL +DoCkKvbdJcJbqKCx +EPCkKvbdVUMtGMWK +DoDKjvbdNxOuzcmt +EPDLKvbdNQYRVnGs +DnbkKvbdzjUoocrt +DoDKjvbdDnbjjvcE +DoCkKvbdGBPRZJzm +DoCjjvbdtvNwjRTA +EPDLKvbdZQldhleR +DoDLKvbdUtMsfMWK +DnbkKvbdDxYLtTsl +DoCjjvbdmbJwYPOV +DoCjjvbdaNLCTVMg +DoCjjvbdWXIwvEFH +DoDKjvbddZxoxYpb +DncLKvbdijGHimXr +EPDKjvbdZQmEiMdq +DncKjvbdTulPisaR +DncLKvbdnGdxMnGy +EPCkKvbdlYsSSyHU +DoDKjvbdKRZePFme +DoCkKvbdZRNFJNEq +DncLKvbdkMbMZeGo +DoCkKvbdBiLBkIej +EObjjvbdWXIwvEFH +EOcLKvbdGGJqnJTq +DoDLKvbdRWmcblID +EObjjvbdxUleQxlO +DnbkKvbdREDBPpdS +DnbjjvbdiifHjMwr +EObjjvbdZLqctOMN +EPCjjvbdmRxtyrci +DoDLKvbdDxXlTtUM +DoDKjvbdxrmiNSBg +DoDKjvbdTppntthN +EObjjvbdnUtykKRf +DoCkKvbdRNYBxmtz +EOcLKvbdQYmAHTSK +EPCjjvbdZtIhxcsO +DoCjjvbdbsCjsdJa +EPDKjvbdsZkoraIO +DoDKjvbdEJhJvYKA +EOcLKvbdJSxaTMwl +DoDLKvbdANHxrvzY +EObkKvbdcTDKtDia +EPDKjvbdrWolDJZR +DoDKjvbdsQVnicVf +EPCjjvbdYSlAlsoY +EPCkKvbdJYUBhMRQ +DncLKvbdtlXwBUBX +EObjjvbdVrOYBeMD +EPCjjvbdcJNJkGWx +DncLKvbdjKGHjNXr +DncKjvbdRMwayOUz +EObjjvbdzdzOzdyp +DnbjjvbdNHColpVL +DoDLKvbdNddThiLE +EPDKjvbdFjdsCgmV +DnbjjvbdTJZjRABM +DncKjvbdOTTugFVQ +DncLKvbdVYgszLPO +DncKjvbdEARhlzWw +EPDLKvbdUGzmkvvF +DoDLKvbdmRyVZsEJ +EObjjvbdptUHRqjt +EOcKjvbdJpzFOeme +DnbkKvbdMgDPmPtk +EOcKjvbdhzUfMRNf +DoDLKvbdpyPHgQdY +DoCjjvbdZjShQHCG +EOcKjvbdOTTvGeVQ +EPCjjvbdRacdkiZL +DnbjjvbdzitoodTU +EOcKjvbdxxIjCPyk +EObjjvbdunszqLPU +EObjjvbdwjwDgzzG +DnbkKvbdUyHtZkOn +DnbjjvbdqvpMChyR +DnbjjvbdmIctRUrB +EObkKvbdNHCpMpUk +DoDKjvbdeFPSCXCj +EOcKjvbdtvOXjRTA +DncLKvbdZGvdAPSi +DoCjjvbdQcbaPpcr +DoDLKvbdVUMselVj +DnbjjvbdVgxWXgYz +DoDLKvbdjAQHBQHK +EOcKjvbdxxJKCPyk +DnbkKvbdQdDApQcr +DnbjjvbdqrUjmjaN +EOcKjvbdJzofYEAN +DoDLKvbdJvVGEFHJ +EObkKvbdJcJbpjDY +EPDLKvbdhanbdwRR +EObkKvbdiZtfLqOG +DoCjjvbdeOdsLTsr +DoCjjvbdSLZFuGjs +DoCjjvbdqTsfrRjt +EObjjvbdACqxKZhp +EPCjjvbdxZhFexEr +EPDKjvbdiBoCeXRR +DoDKjvbdqFcdtVaI +DnbkKvbdkClLQgVH +DnbkKvbdZQmEhldq +DnbjjvbdQYmAGrqj +DnbjjvbdiLddNuDZ +DoDLKvbdsQWOjDWG +EPDKjvbdVqnXaeLc +DnbjjvbdwNWANEFN +EPCkKvbdsBfNMHKy +EOcLKvbdKQzFOfOF +DoDKjvbdHELVibJj +EPDKjvbdcImJkFwY +DncKjvbdIwtBgkqQ +EObkKvbdANHySvyx +DoDLKvbdpxnhGqEY +EPCjjvbdrafNMHKy +DoDLKvbdSQTfiecw +DnbkKvbdiMEdOUcZ +EObjjvbdQmYCYnUz +EPDLKvbdWIYWXfxz +EPCjjvbdNeEThiLE +EObjjvbdHDkWJaij +DncKjvbdMgDQNPuL +DncKjvbdKWUedFGi +EPDLKvbdJYUCIMRQ +EOcLKvbdRacdkhyL +EPCkKvbdSBdEkhyL +EPCkKvbdMRwMzUpz +EPDLKvbdkxrqsYft +EObkKvbdRkYetgLT +EPCkKvbdNrsvHFVQ +DoCjjvbdqiAKFNOe +DoDKjvbddwystRez +EOcKjvbdrylQTBHn +EPDKjvbdDjHjWXjA +EObjjvbdCIkCLJGK +DnbjjvbdqwPlDJYq +EPCjjvbdnVUzLKRf +EOcLKvbdUxhUZjnn +DnbjjvbdRpUHJecw +DnbjjvbdjhGlFfNk +EObkKvbdJKEAKPgE +DoDLKvbdIidAKPgE +DncKjvbdCSaCtGXS +DoCjjvbdIidAKQHE +DnbkKvbdFjdsCgmV +DoCkKvbdGKeTCglu +EOcKjvbdEzspeMDJ +EOcLKvbdqUTgSSKt +DoCkKvbdnBivwnmu +DncLKvbdJcJcRKCx +EPCjjvbdVwJXucdg +DnbjjvbdKVuGEFHJ +DncLKvbdnVUzKjSG +DoCkKvbdqGDeTuaI +DnbkKvbdLFfICBQu +DnbkKvbdZjTIQGbG +DoDLKvbddBrlrATm +DncKjvbdYNqAXtut +DnbjjvbdURROtuHm +EObjjvbdxmrgxSiD +DoCkKvbdjJfHjMwr +DncLKvbdNwoVzdOU +EPDLKvbdyTNhlqbH +EObkKvbdiMEcnUby +DoDKjvbdJcKCqJbx +EPDLKvbdNrtVgEtp +DncKjvbdjEkGtoAO +DoDKjvbdNVSrKmAX +EOcLKvbdxmsIYTIc +EObkKvbdcTDKtDjB +EPDLKvbdxsOIlrCH +DnbkKvbdbrbjsdKB +DoCjjvbdpfEEtWAh +DoCkKvbdMowqVmfs +EPCkKvbdeATqMxJf +EObkKvbdjJehJmYS +EPDKjvbdxmrhYSiD +EObjjvbdjbkkQgUg +DoCjjvbdYlRdUNlN +DoDLKvbdiHKDZWJu +DoDKjvbdpedEsvAh +DoCkKvbdEuyPomJe +EPCkKvbdhtyeWrVC +DncLKvbdbAvEfQQX +DnbjjvbdTkvPBWPJ +DncKjvbdYlRdUOLm +DncLKvbdCIjajiGK +EPDKjvbdUtNTfLuj +DnbkKvbdKVuFdEgJ +DoDKjvbdfVzwoizs +EPCjjvbdySmiMrBg +EPCkKvbdrpWPJcVf +DoDKjvbdcImJjewY +DoCkKvbdkVvnECYX +DncKjvbdWRnYCEkc +DoDKjvbdCIkBjhfK +EObkKvbdmIdURVSB +DoCkKvbdTppoUuHm +EPDLKvbdUQqOtuHm +DnbkKvbdhgKDYvJu +DnbkKvbdkHgLfFmk +EPDLKvbdCDoaVjMf +EPCkKvbdehKvSNqH +DncKjvbdNeEUJJLE +DncKjvbdlhdTqVSB +EOcKjvbdEuxpPmJe +DncLKvbdqceIpNua +DnbjjvbdnVVZjjRf +DnbkKvbdKDJcRJbx +EObkKvbdnHEwlmgZ +EOcLKvbdFWZQQMjF +DoDKjvbdKWUedEgJ +DoDLKvbdmozZVkZC +DoCkKvbdZdxGzhJC +EObkKvbdGQATWffZ +EPCkKvbdJuuGDeHJ +DoCkKvbdiGibxvJu +DnbkKvbdBraDUGXS +EPDLKvbdiHKDYvKV +DnbjjvbdZxcjODMS +DnbkKvbdnGdwlmgZ +DoDKjvbdkxsRrxgU +EOcKjvbdrzMQTAgn +DncLKvbdjhHLfGOL +DnbjjvbdQvnEClID +DoDKjvbdqdEhomvB +DoDLKvbdGdKvKCJj +DnbjjvbdqvpLbiYq +EObjjvbdsPvOjCuf +DoDLKvbdVqnXbElD +EPDLKvbdeEoRbXCj +DoCkKvbdyYJKBoyk +DoDLKvbdlhdURUqa +EPDLKvbdYkqdTnMN +DoCkKvbdnGdwmNgZ +EObkKvbdGGKSOIsq +EObjjvbdLLAgvAJy +DnbjjvbdajlFnmcA +DoDLKvbdiifHimYS +EPCjjvbdnPzYukYb +EPDLKvbdVYhTyjnn +EOcLKvbdfNFwHNJk +DoCjjvbdbrbkTcia +DncLKvbdRkZGVHLT +EObkKvbdSQUHKFdX +EOcKjvbdSKxeuHKs +DncKjvbdFxuUaDwb +DoCkKvbdaSGDHtFk +EPDKjvbdZyDimcLr +EObjjvbdiGibxvJu +EPCkKvbdDwwktTsl +EPDKjvbdRadEkiZL +EPDKjvbdmgEwlmfy +DncLKvbdaogHDkzd +EOcLKvbdjuvmdCXw +EPDKjvbdqwPlCiYq +DoDKjvbdLBLHNBxR +EObjjvbdeFOrBvbj +EPDKjvbdFyVVAdYC +EPDLKvbdKNADygUa +DncKjvbdbVCGxLUI +DoCkKvbdJSyArmXl +EObkKvbdQvnDbkgc +EObjjvbdrEEiQOWB +EOcKjvbdZMSDtOLm +DoDKjvbdQvmccLhD +EPCkKvbdrzMQTBHn +EPDKjvbdMgCpNQUk +DoDKjvbdmbJwYPOV +EOcKjvbdgGLymgHA +EObjjvbdsrqsYzFD +EPDLKvbdrNZiyLgi +DnbkKvbdiiegimYS +DoDKjvbdqwQLcJYq +EObkKvbdaNLCSuNH +EPCkKvbdnUuZkJqf +EPCjjvbdSCEEkiZL +DncLKvbdVZHszKnn +DnbjjvbdUtMsfLuj +DoDKjvbdxmrgwriD +DoCkKvbdxxJKBpZk +EObkKvbdZMRdUNlN +EObkKvbdbPgHDkzd +EObkKvbdqqtjnLAm +EPDKjvbdURROuUhN +DoDKjvbdCWzdJFPv +DoDLKvbdMSXMytpz +DnbjjvbdqlyjZMHi +DoDKjvbdbsDLUDia +EOcLKvbduVnXiqTA +DoCjjvbdDxYLsssl +DoDLKvbdyqPMiJwA +EObkKvbdeOdsLUUS +EOcKjvbdEuyQQMjF +DoDKjvbdEztQeMDJ +EPCkKvbdGZVVBDxC +DnbkKvbdnGdxNNgZ +DoCkKvbdcIljLFvx +DoCjjvbdYqMdhmEq +EPDLKvbdgKfzbfAE +EPCjjvbdJcKDRJcY +EOcKjvbdOFDtJJLE +DncKjvbdiLdcmuDZ +EObkKvbdrWpLcJZR +DnbkKvbdVAaqTQrZ +DnbjjvbdFkFTChMu +DncKjvbdaaWEepQX +EPCkKvbdpedEsvAh +DncKjvbdjAQGaPfj +DoDKjvbdbUbHXkTh +DoDKjvbdRjyFtfkT +EOcLKvbdOTTvHEtp +DoCjjvbdRkYfVGjs +DncLKvbdzoQRFCkx +DncKjvbdrMzJyMHi +EOcKjvbdULvPBWOi +EOcLKvbdzdynzdzQ +EPCjjvbdtumxJpsA +DoDLKvbdwMvAMcdm +EOcLKvbdqceIonVa +EObjjvbdOEdUIiKd +EObjjvbdHELVjBij +EObjjvbdqcdiPmvB +DoCjjvbdJvVFdFGi +EPDKjvbdWRmwaeLc +EPDKjvbdZxdJnDMS +DoDKjvbdZxdJnDMS +EObjjvbdxUldpxkn +DnbkKvbdSLYetfjs +EPDLKvbdYqMeIldq +DoCjjvbdrMyjYlIJ +EObkKvbddxZtTqez +EPCkKvbdWSNxCElD +DoDKjvbdWWiYVcdg +DoDLKvbdqGDdsvAh +EOcLKvbdhzVFlRNf +EOcKjvbdaNLCSuNH +DnbkKvbdkHgMFfNk +DnbkKvbddePRbXDK +DncKjvbdNVTSKmAX +EObkKvbdhzUfLpmf +EOcKjvbdZMSDtNkm +EPDKjvbdTqROtuHm +DoCkKvbdddnqbXCj +DoDKjvbdliEURVSB +DncKjvbdtvNxKQsA +DnbjjvbdqceJQOVa +EPDKjvbdpyOggQcx +EOcKjvbdtcDUvuoP +EObjjvbdrWpMChxq +EPDKjvbdGYttaEYC +EObjjvbdiifIKNYS +DoCjjvbdZyEJmcMS +EPDLKvbdKQzFOfNe +DoCkKvbdqYoIGpdY +EPDLKvbdxwhibPzL +EPDKjvbdRadElJYk +DoDLKvbdtkwwAtAw +EPCjjvbdDjHjVxKA +EPDKjvbdrzLosBIO +EPCkKvbdBdPaVimG +DoCjjvbdrafMkfjy +EPDKjvbdNGcPmQVL +DoDLKvbdVviYVdFH +EPCjjvbdkVwODaxX +DncKjvbdkMbMZeGo +EOcLKvbdfkGzbfAE +DnbkKvbdpyOhHQdY +DoDKjvbdQdCaPqES +EObjjvbdEKHiuxKA +DnbjjvbdpxnhGpcx +DnbkKvbdkxsSSxgU +DnbjjvbdURQnuUgm +DoDLKvbdTukpJtBR +EPCkKvbdqAiFAWgd +DnbjjvbdgGLymfgA +EOcLKvbdyYIibQZk +DoDLKvbdWHxVxGxz +EPDLKvbdFyVVAdXb +DnbkKvbdrRuKnKaN +DoDLKvbdTpqOttgm +EPDKjvbdLhbLqYAS +DoCjjvbdHELVjCKK +DncLKvbdfSBWzlDP +DoCkKvbdRDcBPpdS +DoDLKvbdsQWPJcVf +EPCkKvbdySmiMrCH +EPCkKvbdbUbHXjtI +DoDLKvbdUtMsfLuj +EPCjjvbdEvZQPmKF +EObjjvbddeOqbXDK +EPDKjvbdkClKqGtg +DncKjvbdqiAJdmPF +EOcLKvbdlrZUyrci +EOcKjvbdbBVeFpPw +EOcLKvbdULvPBWOi +EPCkKvbdcJMjLFwY +DnbjjvbdZtIhxcsO +EPDLKvbdSPtHJfDw +EObkKvbdaNLBsUlg +DoDLKvbdqvpLcIxq +DoCkKvbdpxoIHQcx +EPCkKvbdlZTRsZGt +DoCjjvbderBWzkcP +EPDLKvbdZtJIxdSn +EOcLKvbdmoyyWKxb +DoDLKvbduaDxroEh +EPDLKvbddoErkTtS +DncKjvbdnPzYvKxb +EObjjvbdsZlPsAhO +EPDLKvbdjJfHjMxS +EOcLKvbdbsDLUDia +DncLKvbdMuTSLNAX +EPDLKvbdemGWfmKL +EObkKvbdKefHbBQu +EOcLKvbduVnXjRTA +DnbjjvbdGZVUaEYC +EOcKjvbdkNCMZeGo +EPCkKvbdGKeSbgmV +DoDKjvbdqrVLNjaN +DnbjjvbdEASIlzWw +DnbjjvbdeOdrkUUS +DncKjvbdDjIJvXjA +DoCjjvbdqGEFUWAh +EPCjjvbdQcbaQRES +DnbkKvbdhtydwSUb +DoCkKvbdMuTRjmAX +DnbjjvbdJutfEEfi +EPCjjvbdzGxlAMeX +DncLKvbdIHGyyYYH +DoDLKvbdxUmEqZLn +DnbkKvbdNHCpMotk +DnbjjvbdFyVVAcwb +EPCjjvbdShzJqABM +DnbjjvbdcyxoxZRC +EPCjjvbdqquKnLBN +DncLKvbdcIlikFwY +DoCkKvbdeOeSkTsr +EOcLKvbdYpldhldq +EPDLKvbdQYmAGsRj +DoCkKvbdzGyMAMeX +EPCkKvbdqrVKnLBN +EObkKvbdxUldpxlO +EPCjjvbdfIKuqnRH +EPDKjvbdFWYpQMjF +EPDLKvbdOFEUJJKd +EOcLKvbdHEKvKBij +DoDKjvbdjcMLRHUg +EPCkKvbdWXIwudEg +DncLKvbdgPazvcwh +DnbjjvbdnVUykJrG +EPCjjvbdxxJJbPyk +DncLKvbdjJehKMxS +DncKjvbdEzspdkbi +EPDKjvbdrpVnjDWG +DnbjjvbdVrOYCFLc +DoDLKvbdMfbpMotk +DncKjvbdbhljLGWx +DncKjvbdxrmhlrBg +EOcKjvbdbKlGPODA +DoDKjvbdJvUfEFHJ +EPCkKvbdySnIlqag +EPDKjvbdVAbQrpqy +DnbjjvbdrykosAhO +DnbkKvbdKfFhCBQu +DnbjjvbdEXwktTsl +DoDKjvbdDoDLLXCd +EObkKvbdvwMAvAvV +EObkKvbdXsLaNUOx +DnbkKvbdRDcBQRES +EOcLKvbdZisIPgCG +DoDKjvbdpfEEtWBI +DoDKjvbdfoazwDwh +EPCkKvbdFpASvffZ +EObjjvbdRWnDblHc +DoCkKvbdNxOuzdOU +DncLKvbdYlSDtOLm +EPCjjvbdjbkjqHVH +EPCkKvbdrMzJxkgi +EPDKjvbdCIkBjhfK +EPCkKvbdUslsekvK +EOcKjvbdFejRnJUR +EPDLKvbdNHColotk +EPCjjvbdUxgtZjnn +DoDKjvbdEOcLLXCd +EPCkKvbdkHflGFnL +EPCjjvbdwygfFxEr +DncKjvbdeOdrjtTr +DoDLKvbdqTtHRqjt +EPDLKvbdQwNdCkgc +EPCkKvbdhzVGLpnG +DoDKjvbdxwiKCPzL +EPCkKvbdZirhQGbG +DoCjjvbdqrUkOKaN +DoDLKvbdlrZUysEJ +DoCjjvbdqFdFUWAh +DnbjjvbdyYJKCPzL +DncKjvbdxUldpyMO +EPCjjvbdvAcyTOeI +EObjjvbdLFegaaRV +DncKjvbdemFvgNKL +EOcLKvbdjcLjqHVH +DoDKjvbdRMxCYnUz +EPDLKvbdRjxfUfkT +DoDLKvbdiMEdNuDZ +DoDLKvbdZRMdhmEq +DoDLKvbdqlyiyLgi +EObjjvbdiiehJmYS +DoCjjvbdwuMeRYlO +EPDKjvbdqquKmkAm +EOcKjvbdlrYtysDi +EPDLKvbdliETqUrB +EObjjvbdePErkTsr +DoDLKvbdfHjvRnQg +EObjjvbdRXOECkgc +EObkKvbdMpXqWOGs +DncKjvbdEJhJvYKA +DoCkKvbdVrOYBeMD +EPDKjvbdTkvPBWOi +EOcLKvbdjuvmcbYX +DncKjvbdMfcQMouL +EOcLKvbdMpXpvOHT +DoCjjvbdiLdcmtcZ +DnbkKvbdiHJcZWJu +EPDLKvbdTqQnuUgm +DncKjvbdLGFgbBQu +EPDKjvbdNdctIiLE +EPDKjvbdZxdKODLr +DoDKjvbdSZjITCvA +EPCjjvbdDwxMUTsl +EPCkKvbdySmhmRag +EOcLKvbdSPtHKGDw +DoDKjvbdmIctRUqa +DoDKjvbdaRfChTek +DncLKvbdyNrhXsIc +DncLKvbdJTZBSlxM +DoDKjvbdFeirOIsq +DnbjjvbdJutedFHJ +DnbkKvbdUsltGMWK +DnbkKvbdbhljLGWx +EPCjjvbdirziTLJz +EOcKjvbdnPzYvKyC +DoDKjvbdkDMLRGtg +DncLKvbdyzeNqhIh +EPCjjvbdYTMAmUPY +DoCkKvbdgGMZnHHA +DncLKvbdlZSqsYft +EOcLKvbdZjShQHCG +DnbjjvbdjhGlGGNk +DoDLKvbdkxsRryGt +DoCjjvbdZyDjNbkr +DnbkKvbdNeEUJIjd +EOcKjvbdxxJJbPyk +DoDLKvbdRbDeMIxk +EObjjvbdrDeJPnWB +EPCkKvbdrXPkbiYq +EPCjjvbdeFPRbWbj +DncLKvbdHffyxxYH +EPDKjvbdcyyQYZQb +DoCkKvbdNsTvGeUp +EPCkKvbdfpBzwDxI +EPCjjvbdqTtHRrLU +EPCkKvbdhgJbxvJu +EOcKjvbdkxsRryGt +EPCkKvbdZshhyETO +DnbkKvbdrWpLbiZR +EObkKvbdnHExMmfy +DnbkKvbdbUbGwkTh +DnbkKvbdnHExMnHZ +EObjjvbdZnmiFEyj +EObkKvbdSQUGjGDw +EPCkKvbdqTtGrRkU +EObjjvbdcImKLGXY +EObkKvbdShzJqAAl +DncLKvbdGGJqnIsq +DnbkKvbdehKuqmpg +DncLKvbddeOrCXDK +EOcLKvbdRMwbYmtz +DnbjjvbdgFlZmgHA +DnbkKvbdyOSgxTJD +EOcLKvbdQZNAGsSK +DoCkKvbdRMwayNtz +DncLKvbdezvYeItX +EOcLKvbdVAapsQrZ +DoCjjvbdcImKLFwY +DoDKjvbdTqQnttgm +DnbjjvbdOEdUJIkE +DoDKjvbdeYZssqez +DnbjjvbdZjSgpHCG +DoCkKvbdTvMPisaR +EOcKjvbdZjSgofaf +EPDLKvbdfVzwoizs +DnbjjvbdCSaCsewS +EPDLKvbdFVyPpMjF +EObkKvbddjJrVtzn +DnbjjvbdyOSgxTIc +EOcLKvbdrovPKDVf +DnbjjvbdxZhGGXeS +DncLKvbdbLLeoNcA +EOcKjvbdMfbomQUk +EPDLKvbdaRebhTfL +DoDLKvbdoAKztHcn +EOcLKvbdGckWJbJj +DncLKvbdqmZjYlHi +DncKjvbdZyDinDLr +DoCkKvbdxwhibPzL +DnbkKvbdZoOJFFZj +EPDLKvbdYpmEiMdq +DoCkKvbdiUzFWquC +DnbjjvbdsPvPJcVf +DncKjvbdDwxMTssl +EObkKvbdZQleJNEq +DoDLKvbdWSNxBdkc +DoCjjvbdcSbkTcia +EOcKjvbdqvolChyR +DnbjjvbdqlzJxlHi +DoCjjvbdlrZUzTEJ +EPCkKvbdGdLWJbJj +EObkKvbdzoPqFDLx +DncLKvbdANIYrwZx +EObjjvbdSPsgJfEX +DoCjjvbdbiNJjfWx +DnbkKvbdMfbpNQVL +EObkKvbddePRbXCj +EPDKjvbdShzKRAAl +DoDKjvbdnPyxukYb +EObjjvbdVZITzKoO +EPDLKvbdZyDinDMS +EPCjjvbdYpldhmFR +DoCkKvbdZjTIPfaf +EObjjvbdqdEiPmua +DnbkKvbdRadEkhxk +EPDLKvbdzjVPpDrt +DnbkKvbdaMkBsUlg +DncLKvbdMpXpunGs +DoDKjvbdUxgszLPO +EPCkKvbdiiegilxS +DoCjjvbdEOcKkWbd +EOcLKvbdcTDLUEJa +EPDLKvbdZtIiYcrn +DoDLKvbdmttyjirG +EPDLKvbdGdLVjBjK +DncLKvbdDigjVxKA +EPCkKvbdelfWflik +DoDKjvbdOTUVfdtp +DncKjvbdTlWOaVni +EPDKjvbdrpWOibvG +EPDKjvbdfRaWzlCo +DncKjvbdlrYuZrdJ +DoDKjvbdIsZBSlwl +EPDLKvbdqquLOKaN +DnbjjvbdJmAEZgUa +EPCkKvbdcImJkFvx +DncLKvbdkxrqsYft +EPCkKvbdUWLojTaR +DoDKjvbdnGeXlmfy +DoCkKvbdiMFDmuCy +EPDKjvbdauCHXjtI +DoCjjvbdBsAcUGXS +DoDKjvbdACrYJyhp +DoDKjvbdsZlPsBHn +DoDLKvbdjJegimXr +DoDKjvbdWXIwvDdg +DncKjvbdelewHNJk +EObkKvbdyTOJMrCH +DoCkKvbdNddUIiKd +DoCkKvbdRyjHrbvA +DoCjjvbdiGjCyWKV +DoDLKvbdhlFEOVDZ +EPCkKvbdQdDAoqDr +DoDKjvbdBiLBjhej +EOcKjvbdqlyjZLgi +DncLKvbdtSrTYzFD +DoCkKvbdrMyjYlHi +EObjjvbdhficYuiu +DoDKjvbdfekymgHA +EOcLKvbdiifHjNXr +EObjjvbdIwsaglQp +DoCjjvbdCIkBkIfK +EPDKjvbdaSFcHsfL +DoDLKvbdMgDPlpUk +EPDKjvbdqYnggQdY +DoDKjvbdaSFbgsek +DoCjjvbdiZtekqNf +EPDLKvbdkClKpftg +DoCkKvbduMYWaUAw +EObkKvbdtTSTYydc +DnbjjvbdptUGqrKt +EObjjvbdYlRctNlN +DncKjvbdMgDQNPtk +DncLKvbdILaznXQk +DoDLKvbdiCPDFWpq +DoCkKvbdiGicZWKV +DncKjvbdFjdrbglu +DncLKvbdKWUfDeGi +DoCjjvbdVhXuwgYz +DoDKjvbdhtzFWquC +EPCjjvbdRpTfiedX +DoCkKvbdKVuFdEfi +DoDLKvbdbBWEfPow +DoCkKvbdZyDjODLr +DncLKvbdeAUQmXif +DoCkKvbdIidAKQHE +EPCkKvbdTqROuVIN +DncKjvbdRXODcMID +DoDKjvbdkyTRsZHU +EPCjjvbdxnTIXrhc +EObjjvbdJzofXdAN +EOcKjvbdiBncFWpq +EObkKvbdYORAXuVt +DnbjjvbdiMEdNtby +EPDKjvbdVrOXbFMD +EPCkKvbdAMgxrwZx +DoCkKvbdtbbuXVoP +EPCjjvbdDoCkKwCd +DncLKvbdVBBpsRRy +DoDKjvbdemGWgMik +EObkKvbdeEnqbXDK +EPCjjvbdhanbdvqR +DnbkKvbdmaiwYOnV +DoCjjvbdcJMjLGXY +DnbkKvbdIryArlxM +EPCjjvbdtkwvaUAw +DnbkKvbdxZgefYFS +EPCkKvbderBWzlDP +EPCjjvbdNxPVzdOU +EPDKjvbdaSGDHsek +EOcKjvbdqcdhpOVa +EPCkKvbdxmsHxShc +DoDKjvbdDncKjwDE +DoCjjvbdYpmEhmFR +DncKjvbdaRfCgsfL +EObjjvbdegjurNpg +DnbkKvbdjhHMFenL +EPCjjvbdMfcPmQUk +EOcLKvbdACrYKZhp +DoDKjvbdffMZmgHA +DoCjjvbdaaVeGQQX +EOcKjvbdSCDdkiZL +EOcKjvbdqwPlCiYq +DoDKjvbdajlGPODA +DncLKvbdJYTbHkpp +DncLKvbdtcDVXWOo +EPCjjvbdEXxLtTsl +EPCjjvbdJuteceGi +DnbjjvbdDoCkLWbd +DoCkKvbduCbtwWOo +EPDLKvbdauBgYLTh +EPCjjvbdOXoVzcmt +DoCkKvbdRMxByOUz +DoCjjvbdqYoIGqDx +EPCjjvbdNGbpMpVL +DoCjjvbdJpzFOfNe +EOcKjvbdVAapsQrZ +DncKjvbdpxoIHQcx +EOcKjvbdRaceLiZL +DncLKvbdtcCuWvOo +EObjjvbdbBVeGPow +DnbjjvbdKyRKSzuG +EOcLKvbdFyVUaEYC +EPDKjvbdkCkkRHUg +EObkKvbdKaKfmBxR +DoDLKvbdbUbGwjsh +DnbjjvbdrovOjDVf +EPCjjvbdZsiIyDsO +EObjjvbdRDbaPqDr +EOcKjvbdnBivwnmu +EPCjjvbdYTMBMsoY +DoDLKvbdxKwEHzzG +EPCkKvbdqTsgRqkU +EPDKjvbdfMfWgNKL +DnbkKvbdznpREbkx +DncKjvbdJXtCHlRQ +EPDLKvbdGYuVBEXb +EPDKjvbdZLrEUOMN +EPDKjvbdtcCtvuoP +EObjjvbdXsLaNUPY +EPDLKvbdyOTIYSiD +EObjjvbdsrrTYyeD +EObjjvbdZisHpGaf +DoDLKvbdvOszqLOt +DncLKvbdaMjbSuNH +DncLKvbdYTMBMsoY +EPDKjvbdwzIGFxFS +EPDLKvbdmRyUyrci +DncLKvbdTkvPBWOi +EPCjjvbdNdcsiIjd +EPCkKvbdEzspdkbi +EObkKvbdrovOicVf +DoDKjvbdhbObeXQq +DncKjvbdZnnIeFZj +EObkKvbdRECaPpdS +EOcKjvbdnGeXlnHZ +EPCjjvbdauCGwjsh +EPCjjvbdczYpXyRC +EOcLKvbdDihJuxKA +EOcKjvbdkVwNcbXw +EObjjvbdbsCkTcia +DoCkKvbdfMewHNKL +DoCjjvbdxZgeexEr +EOcLKvbdiBoDEwQq +DnbkKvbdpstHSSKt +EOcKjvbdQvmdClHc +EPDKjvbdIxUBhLqQ +EObkKvbdZtJIyESn +EPCjjvbdtumwjQsA +DoCjjvbdNPxQunHT +EOcLKvbddndrkUTr +EObjjvbdCTBCsevr +EOcKjvbdiUzEwRuC +EPDKjvbdRyigrbvA +DoCjjvbdezvYeJTw +EOcLKvbdVgxVxGxz +DnbjjvbdZeXfzhIb +DncKjvbdxZgfFweS +DoCkKvbdKxqKSztf +DncLKvbdpyOggREY +EPDLKvbdXrlBNUOx +EPCkKvbdqwPkbiZR +EPDLKvbdbsCjscia +DoDKjvbdnGeYMmgZ +EOcLKvbdUsmTfLvK +DnbkKvbdjuwOEBxX +DnbjjvbdTAFJICPE +DncKjvbdEuxoomKF +EPDKjvbdeOdsLTsr +EObkKvbdZshiYdSn +DncKjvbdcTDKscjB +DncLKvbdvwMBWAvV +EOcKjvbdVwIwudFH +EPDLKvbdlZTSSxgU +EOcKjvbdMgColotk +EOcLKvbdZdxGzgiC +DnbjjvbdULuoBWOi +EObjjvbdiCObeXQq +EPDKjvbdNUsRkNAX +DoCjjvbdZxcjOClS +DncLKvbdiUzEwSVC +DoDLKvbdvlvAMceN +DoDLKvbdqcdhpOWB +EObkKvbdCSaDUGWr +DoCkKvbdssSTYydc +DoCkKvbdnGdxMmgZ +DoCkKvbdHELWJbKK +DoDKjvbdKefHbApu +EObkKvbdVqmwbFLc +DoCkKvbdUtNTekuj +EPDLKvbdTlWOaVni +DoCjjvbdDxXkstUM +EPCkKvbdpxoHfqEY +EPDKjvbdmSYtzTEJ +DoCjjvbdddnrCXDK +EPCkKvbdZjTHpGbG +DncLKvbdhzVGLqOG +EPCjjvbdZjSgogBf +EPDLKvbdkDLjqGuH +DncLKvbdxUmFRZLn +EPDLKvbdjhHMFfNk +EPCkKvbdZjTHpHBf +EObkKvbdegkVqnQg +EPDLKvbdGYttaEXb +EObjjvbdZdwfzhJC +DoCkKvbdGQASwHFy +EPDKjvbdkVvnDbXw +EObkKvbdJYTagkqQ +DoCjjvbdMSWlzVQz +DoCjjvbdnGeYMmfy +DoDLKvbdADRxKZiQ +EObkKvbdZLqdTmkm +EPCkKvbdFeirOItR +EPCkKvbdRjyGVGjs +DncLKvbdiMFDnUcZ +EObkKvbdVAaqSpqy +EPCkKvbdULunaVni +DnbkKvbdcImKKevx +DoCjjvbduaDyTPFI +EPDKjvbdKQydoFnF +EPCjjvbdozmcjwoA +DoDLKvbdZLqdUNlN +DoDKjvbdJXsbHkpp +DoCkKvbdelfXHNJk +EObjjvbdeFOqavcK +EPDLKvbdqlyjZMIJ +DoCjjvbdUtMsekvK +DoCkKvbdIxUBhMQp +EOcKjvbdemGWgMjL +DoCkKvbdwuMeQyLn +DncKjvbdkClKpgVH +DoDKjvbdfNFvflik +DncKjvbdhkdcmuCy +DoDLKvbdCJKakIfK +DnbkKvbdSQTgJfEX +DnbkKvbdkIGlGFmk +DoDKjvbdySmhlqbH +DoCjjvbdGdLVibJj +EPCjjvbdSLZGUfkT +EPDLKvbdSKxfVHKs +DoDKjvbdGLFSbhMu +DoCkKvbdqFcdtWAh +EOcLKvbdbVBfxLUI +DoDKjvbdcScKsdKB +DnbkKvbdVwJYWEFH +EPCjjvbdGQASwHFy +DnbjjvbdqUTfrRjt +EPDLKvbdEYYMTtUM +DoDLKvbdfNFwHNKL +EObkKvbdsQWPJbvG +EOcKjvbdIsYaSmYM +EPDKjvbdBdQAuilf +DnbkKvbdrounibvG +EObkKvbdiCPCdvqR +EOcLKvbdBsAbsfXS +DoCjjvbduDDVWuoP +EPCkKvbdbsCjtEJa +EOcKjvbdcTDLTdKB +DoCjjvbdXGYytAPT +DnbjjvbdePFTLTsr +EObkKvbddoErjssr +EPCkKvbdcTDKsdJa +EPDKjvbdjgflGFnL +EObjjvbddeOqbWcK +EObkKvbdACqwizJQ +EObjjvbdHgGyyXxH +DoCjjvbdqlzKZMHi +DnbjjvbdhfibxvJu +DoDKjvbdSCEFLiZL +EPCjjvbdSCEFLiYk +EObkKvbdiLdcmuDZ +EObkKvbdzGyMAMeX +EPDKjvbdVYhTzKoO +EPCkKvbdxrmiNRag +DoDLKvbdjKGHilxS +EOcKjvbdhWyAzzAJ +EPDLKvbdMfcQNQVL +DncKjvbdYkqdTmlN +DoDLKvbdjJfIJlwr +EOcLKvbdZeYGzghb +DncLKvbdJuuFceGi +EPCkKvbdhzUelRNf +DnbkKvbdBhkCKhej +DoDLKvbdhbObeXRR +DnbkKvbdzHZMAMdw +DoDKjvbdZxcjNblS +DoCjjvbdDwwksstM +DoCkKvbdUVkpJtAq +DoDLKvbdaaWEepPw +DncLKvbdGdKvJbKK +DoDLKvbdTulQJtBR +DoDKjvbdqceJPnVa +DnbkKvbdvAdZTOeI +EOcKjvbdVAbRSqRy +EPCkKvbdTqQnuVHm +DoCjjvbdwNWANDeN +DnbkKvbdZtIiYdSn +EPCjjvbdPIAXyAZB +EPCjjvbdZoOIeEzK +DoDLKvbdmJETqUrB +DoCjjvbdOFDtIiKd +DnbkKvbdqvolDIxq +DnbjjvbdmgFYNNfy +DncLKvbdieLHUoAO +EPCkKvbdDnbkLWcE +DoCjjvbdmJETpuSB +DncLKvbdiiegjNXr +EPDKjvbdZQldiMeR +EOcKjvbdZHXEAPTJ +EObkKvbdWHwvXfxz +DnbkKvbdxUleRZLn +DnbkKvbdtvNxKQsA +DoDKjvbdOStWHEuQ +DnbkKvbdsBellHLZ +DoDKjvbdsCFllGkZ +EPDKjvbdjhGlGGOL +DncKjvbdxxJKBoyk +DncKjvbdrXPkcJYq +DoCkKvbduVnXipsA +DoDKjvbdjKGHjMwr +DoDKjvbdbBWEfPpX +EOcKjvbdznoqEcMY +DoCkKvbdySnJMqbH +DoCjjvbdlrZVZsDi +EPDLKvbdKfFgbApu +DoDLKvbdZRMdiNFR +EObjjvbdpeceUWAh +EObkKvbdRotHKFcw +DncKjvbdiZuFkpmf +DoDKjvbdnGdwmNgZ +DoDKjvbdMoxRVnGs +DoDLKvbdiVZeXRtb +EOcKjvbdGAoRYizm +DoDKjvbdJJdAJpGd +DoDKjvbdwMvANEFN +DnbjjvbdaaWFFpQX +DnbjjvbdqlzKZMIJ +EPDLKvbdxnShXsJD +DncLKvbdMfcPlotk +DncLKvbdURRPVUhN +DnbkKvbdHgGzZXxH +EOcLKvbdYlRctOMN +DncKjvbdnHEwlnGy +DoDKjvbdlYsSTZGt +EOcKjvbdZxcjNcLr +EObjjvbdmttyjjSG +EObkKvbdffLynHHA +DnbkKvbdmpZxvLZC +DncLKvbdBhjakJGK +DoCkKvbdpstHSRkU +EPDLKvbdiLddOVCy +EOcKjvbdxUleQyLn +EPCkKvbdTukpKTaR +EOcLKvbdjvXOECYX +EObjjvbdRWnEDLgc +EObkKvbdbhljLGWx +EPCkKvbdZoOJEdyj +DnbkKvbdqrVKnLAm +DoDKjvbdVAbRTRRy +DnbkKvbdhfjDZWKV +EOcLKvbdkWXOECYX +DnbkKvbdYTLaMsnx +EObjjvbdZRNFImFR +DncLKvbdCWzdIdpW +EOcLKvbdpyPIGqDx +DoDLKvbdiCOcFWpq +EPCjjvbdhtzFXSUb +Dnbjjvbdlqxtyrci +DoCkKvbdiZtelROG +EPCkKvbdVUNUFkvK +DnbkKvbdNddUJJLE +DoCkKvbdNdctIhjd +DnbkKvbdcyyQYZQb +EObkKvbdQmYByNtz +DoDLKvbdVrNxBeMD +EPCjjvbdCTBCsevr +DncLKvbdtSrTYyeD +DnbjjvbdRyigsDWA +DncLKvbdJYUBglQp +DoDKjvbdSPsfiedX +DoCkKvbdADRxKZiQ +EPDLKvbdrEFJPmvB +DnbjjvbdvAcyTOdh +EOcKjvbdaMjasUmH +DoDKjvbdZjSgogBf +DnbkKvbdnGeXmOGy +DnbjjvbdMgComPuL +EPCkKvbdxKvcgzzG +DncKjvbdwtldpyMO +DoDKjvbdbhlikGXY +EPCkKvbdpyPIHREY +DoDLKvbdkClLRHUg +EPDKjvbdqFdFUWBI +EOcLKvbdkxrqrxgU +DoDLKvbdTvLoitAq +DoCjjvbdJuuFcdfi +EPCjjvbdrykpTAhO +EPCjjvbdiZuFkqNf +EObjjvbdEuxpQNKF +EPCjjvbdGGKSOJUR +EPCkKvbdcyxowxqC +DnbjjvbdjhGkeemk +EPDKjvbdijGIJmYS +DnbkKvbdypnliKXA +EOcKjvbdRadFLhyL +EPCjjvbdxwiKCPyk +DoCkKvbdfILVqnQg +DoDLKvbdkNCLzEgP +DoCkKvbdGKdrbglu +DnbkKvbdJcJcRJcY +DoDLKvbdIwsahMRQ +DnbkKvbdNddUIhjd +EPCkKvbdJuuGDdgJ +EPDLKvbdjKGHjMwr +EObkKvbdGdKvKCJj +DncKjvbdNUrqkNAX +DoDLKvbdTqQoVVHm +DoDKjvbdNddTiIkE +EPCkKvbduaEZTPFI +DnbjjvbdFWYopMie +EObjjvbdyXhiaozL +EPCjjvbdhaoDFWpq +DncKjvbdJJdAKQHE +DoDKjvbdegkVrOQg +DnbjjvbdwuMdqYlO +EPCkKvbdLKaHvAJy +DoDKjvbdRbEFLiYk +DoDKjvbdSxLMNzjx +DnbkKvbdGKdsChMu +DncKjvbdACrYJzJQ +DoCjjvbdbUafwkUI +DncKjvbdzjVPpDrt +DnbjjvbdFfKSOJTq +EPDKjvbdHffyyXxH +EOcLKvbdRkZFtgLT +EOcKjvbdXsMAmToY +EOcLKvbdNPwqWNfs +DoCjjvbdEuxpPljF +DncLKvbdjJfIJlxS +DoCjjvbdhgJbxuiu +EPCkKvbdrDdhpOWB +DnbkKvbdwWlBWAuu +EObjjvbdySmiMrCH +EPCjjvbduWOXjRTA +DncLKvbdRDbaPqES +EPCkKvbdjEkHVPAO +EPDLKvbddiiqvUzn +EPDKjvbdyYJKCPyk +DncKjvbdNeEThiKd +DncKjvbdrbGMlGkZ +EOcKjvbdOTTvHEuQ +EObjjvbdFyVUaEYC +EPCkKvbdbiMikFwY +EPDKjvbduaDxsPFI +DncLKvbdozmckYPA +DoDLKvbdVYgsykPO +DoCjjvbdQvnDbkgc +DncKjvbdZLrDtNkm +DoDKjvbdHfgZyYXg +DoDKjvbdauCGwkUI +DoDKjvbdmJDsqVSB +EOcKjvbdhgJbyWKV +EPCjjvbdrouoKDWG +DoDKjvbdQmYCYnUz +DoDLKvbdfHkVqmpg +DoCjjvbdZjShPfaf +DoCkKvbdIGfzYxYH +EPDKjvbdZRMeJNFR +EPCjjvbdRpTgKFdX +EPCkKvbdEYYMUUUM +DncLKvbdwuMdqZLn +EOcKjvbdmuVZkJqf +DncKjvbdhgJbyWJu +DnbjjvbdKVuFcdfi +EPCkKvbdRadElIxk +EPCkKvbdYlSDsmkm +DoDKjvbdhlFEOVDZ +DoCjjvbdIsZBSlwl +DoDKjvbdLAkGmCXq +DoDLKvbdqwQMCiYq +EPDKjvbdURROtuIN +DoCjjvbdpxoHgREY +DncKjvbdwXLaWAuu +EObjjvbdrpWPJcWG +EPDLKvbdmozYvLYb +EPCkKvbdMowpunGs +DnbkKvbdANHySvzY +DncLKvbdZyDinDLr +DoCjjvbdziuPpESt +EPDKjvbdiVZeXRuC +EPDLKvbdDncKkWbd +EOcLKvbdFVxopNJe +DncLKvbdACqxJzIp +DncKjvbdaMkCTUlg +DoCkKvbdhyuGMQnG +EObjjvbdbBWFFpPw +EObkKvbdTAEiICPE +DoDKjvbdbUagXjtI +DoDLKvbdGZUuAcwb +DoDKjvbdnGdwlmgZ +DoDLKvbdVBCRSpqy +DnbjjvbdfIKvRnRH +EObkKvbdaRebgsek +DnbjjvbdNVSrLNAX +EPDKjvbdrJAKEmPF +DnbkKvbdBdQBWKNG +DoCjjvbdePFTLUUS +EPCkKvbdRDcAoqDr +DncLKvbdrNZiyLhJ +DoCkKvbdLqwNZtpz +EPDLKvbdlqxtzTEJ +DnbkKvbdrRtjmkBN +EPCkKvbdZRMeJNEq +DnbkKvbdZsiJYdTO +EObjjvbdUtMtGLvK +EOcLKvbdnCJwYOnV +DncLKvbdUMWPAuni +EOcKjvbdJcJbpjDY +DoCkKvbdcImKLGXY +EObkKvbdYSlAmTnx +DncLKvbdCTBCtFvr +EObjjvbdqlyjYlIJ +DoCkKvbdmSZUzSci +DoDKjvbdjEjfuPAO +EPCjjvbdWfYzUAPT +DnbjjvbdzROmJJwA +EObjjvbdnQZyVjyC +DncKjvbdjAQGaPgK +EObkKvbdtTSTZZeD +DoDLKvbdZLrETnLm +DncKjvbdCDpAujNG +DncKjvbdUyHsykOn +EPDLKvbdeXystRez +EPCjjvbdlrZUyrci +EPDKjvbdwjvcgzzG +EPDKjvbdnHExNOGy +EOcKjvbdZLqdTmlN +EPCkKvbdEuxopMjF +EObjjvbdJYTaglRQ +EPCjjvbdrWpLbiZR +EPCjjvbdNxOuzcnU +DoDLKvbdijFhKNXr +DnbkKvbdKWVGEFHJ +DnbkKvbdKCicQjCx +DoCkKvbdcScLTdKB +EOcKjvbdKWUecdfi +DoCjjvbdiLeDmuDZ +DncKjvbdySnJNSCH +EPDLKvbdZshhyDrn +DnbkKvbdssSSxydc +EOcLKvbdqrUjnLBN +EPDKjvbdGdLWKCKK +EObjjvbdsQWPJbuf +DoDLKvbdJcKDRJcY +DoCjjvbdZoNiEeZj +DnbkKvbdGFjSOJTq +EPDLKvbdxxJKBozL +DoDKjvbdBraDUGXS +EPDKjvbdJbjCpicY +DoCjjvbdVqmwbEkc +EPDKjvbdijFhKMwr +EPDLKvbdrSVLNkBN +DoCkKvbdiUzEvquC +EPCjjvbdWIYVxGxz +DnbkKvbdZoOIdeZj +DncLKvbdZRMeJNEq +EObjjvbdZMSDtOMN +DnbjjvbdRWnDcLgc +DoDLKvbdmRxtzTDi +EOcKjvbdJmADygUa +EOcKjvbdxUmFQyMO +EOcLKvbdOTUWHEtp +DoDLKvbdZRNFJMeR +EOcLKvbdxmsHxShc +EPCkKvbdUxhTykPO +DoCkKvbdelfWfljL +EPDLKvbdFejSOJTq +EPCkKvbdKefIBaRV +DncKjvbddeOqbXDK +EOcKjvbdhlEcnUcZ +DoCkKvbdZtJJZETO +DnbjjvbdSPtHJfDw +DncLKvbdOFDtIhkE +EPDLKvbdFyVVAcwb +DoCjjvbdqTtGqqjt +EOcLKvbdyTOIlrCH +DnbjjvbdACrYKZiQ +DoDLKvbdvmWAMceN +DoDKjvbdLBLHNCYR +EPCkKvbdIxUCHlQp +EPDLKvbdQmXayNtz +DoCjjvbdKRZdoFme +DncLKvbdZoNiEdyj +DoDKjvbdqqtkOLBN +EPCkKvbdiZuFkpmf +DncKjvbdEPCjkXCd +DoDKjvbdbVBgXjsh +DoCjjvbdmRyUzSdJ +EObjjvbdMJCLpxAS +DoCjjvbdwWlBWAvV +EPDKjvbdNHCpMouL +DncKjvbdEOcLKwDE +DoCjjvbdwjvcgzzG +DnbkKvbdNGbpNPtk +DoDLKvbdZGwEAOri +EObjjvbdaRfDITfL +DoDKjvbdVvhwudEg +EPCjjvbdHgGyxwwg +DncKjvbdcJMikFwY +EObjjvbdwMvAMdEm +EOcKjvbduMYXBUAw +EPDLKvbdpfDeTuaI +DoDKjvbdssSSxzEc +DnbjjvbdjblLRHUg +EOcLKvbdVwIxWDeH +EPCkKvbdLGFgaaQu +EPDKjvbdBiKakIfK +DoDLKvbdEOcKjwDE +EOcKjvbddijRvUzn +DoCjjvbdmaivxPOV +DnbkKvbdMfcQNPuL +DncLKvbdZtIiZDsO +DoDLKvbdhlEcmuDZ +EOcKjvbdIGfzYxYH +DncLKvbdICLydzAD +EPDLKvbdMfcPmPuL +DnbjjvbdrRuKmjaN +DnbkKvbdbsDKscjB +DoCkKvbdhkddNtcZ +EOcLKvbdNQXqVnGs +DoDLKvbdrEFIonVa +DoCjjvbdQvnDcMID +EPCjjvbdjlalZeGo +EPCkKvbdjJfIKNYS +EObjjvbdREDBPqES +EPCjjvbdiZtfMRNf +DoDKjvbdADRxJyiQ +DncLKvbdYkqcsnMN +DncLKvbdZshiZDsO +DoDLKvbdRNXayNtz +DncLKvbdqcdiPmvB +EPCkKvbdrNZixlHi +EPCjjvbdwtmFRYlO +EObkKvbdJTZBTNXl +EOcLKvbdWRnXadkc +DoDLKvbdvwMBVaVu +DoDKjvbdlZSrTYgU +EPDLKvbdQcbaQRDr +DoCjjvbdhuZdvrUb +DnbkKvbdZxdKOClS +DncKjvbdJzoexEAN +EOcLKvbdQvmdDLhD +DncLKvbdunszpkPU +EOcKjvbdiZuGMQnG +DncKjvbdVZIUZkOn +DoDLKvbdkxsRsYgU +EPCjjvbdGQASwGey +DncKjvbdnBivwoNu +EPDLKvbdsBelkfjy +DoDLKvbdddoRbWbj +EPCjjvbdhancFXQq +EObkKvbdJvUfEEfi +EPDLKvbdIidAKPfd +DoDLKvbdxVMdpxkn +DoCjjvbdaNLCTVNH +DnbkKvbdZyDinDMS +DoDLKvbdrMzJyLhJ +EPDLKvbdyXhiaozL +DoCjjvbdGKeTDHlu +DncKjvbdwzIGFxFS +EObjjvbdJvUedEfi +DncLKvbdIjEAJpGd +DncKjvbdyTNiNRbH +EOcKjvbdidkGuPAO +DoDLKvbdkVvmcbXw +DoCjjvbdJYTbHkpp +DoDLKvbdFyVVBEYC +EPDLKvbdmoyyVjyC +EOcKjvbdcTDKtDjB +EPCjjvbdEvYpPmJe +DoCjjvbdCJLCKhej +DoCjjvbdSKxfUgLT +DoDLKvbdFjeTDINV +DncLKvbdEXxMUTtM +EOcKjvbdWRnXaeMD +DoCjjvbdrMzJyLgi +DoCkKvbdcSbkUEKB +DnbkKvbdyzeOSIIh +DncLKvbdpstGqrKt +EPDKjvbdCJLBkJGK +EOcLKvbdJcJcQjDY +EPDLKvbdbLLfPNcA +DnbjjvbdEASImZwX +DnbjjvbdtumwiqTA +DnbkKvbdxKvdHzyf +DoCjjvbdVwIxWDeH +DncLKvbdYzcFqjVy +EPDKjvbdqiAJeMoF +DoDLKvbdNQXqVmfs +EPDLKvbdFjdsChNV +DoCkKvbdOTUWGdtp +EOcKjvbdOEdUIiKd +EOcLKvbduaEZSoFI +EOcLKvbdxsNhlrBg +EObkKvbdcIlijfXY +DoDLKvbdLqvlytpz +DoDKjvbdIryBTNXl +EObjjvbdQwOECkhD +DoCjjvbdLFegaaQu +EObkKvbdFkFTChNV +DnbjjvbdyzeOSHiI +EObjjvbdLAkHNCYR +DnbkKvbdZyDimcMS +DncKjvbdkMbLzEgP +DnbjjvbdRbEEkhyL +EOcKjvbdLrXMzVQz +EOcKjvbdVBBqTRRy +EObjjvbdyNsHxTIc +EPCjjvbdMuTRkNAX +DoCkKvbdUaCQrprZ +EPCjjvbdjmCLydfo +DoCjjvbdFyVVAcxC +EPCjjvbdQvnDblID +DnbjjvbdLhbLqYAS +DncLKvbdFxuVBEYC +DncKjvbdGLFScIMu +DncKjvbdBvzcheQW +EPDLKvbdSPsfjFcw +DnbkKvbdsQWOibvG +DnbkKvbdaSGChTfL +EPDLKvbdjmBkzFGo +DoDLKvbdqAiFAWhE +EPDLKvbdkVwNcaww +DoCkKvbdKRZePGOF +EOcLKvbdJXtCIMRQ +EPCkKvbdaNLCTUmH +EPDLKvbdliDtRUrB +EOcLKvbdKfGHbApu +EObkKvbdDwwlTstM +DoDLKvbdmgExMmfy +EOcLKvbdKWUfEFHJ +EPCjjvbdkxrqrxft +DncLKvbdkClKqHUg +DoDKjvbdVqnXadlD +DoDLKvbdULvPBWPJ +DoDKjvbdUslsfMWK +EOcLKvbdJvVFdFGi +DncKjvbdiifHilxS +EPCkKvbdRaceMJYk +DoCkKvbddwytTrFz +EPDLKvbdYkrETnLm +DoCjjvbdiMEdOUby +DoCkKvbdxVMeQyLn +EPCkKvbdwuMdpxlO +EPDLKvbdNPxQumfs +DncKjvbdYpleJNEq +DncKjvbdTAEhhCPE +EOcLKvbdUGznLwVe +EOcKjvbdNPwpunHT +EPDLKvbdKaLHNBwq +EOcLKvbdFfKRmhtR +EObkKvbdYlRcsmlN +DoDLKvbdWSOXadlD +EOcLKvbdWWiXucdg +DoCkKvbdZsiIxcsO +DoDLKvbdbhlikFvx +EOcKjvbdtlYXAsaX +EOcLKvbdUtNTelVj +DoDKjvbdhaoDFXRR +DoDLKvbdEuxoomJe +DoDLKvbdEYYLtTsl +DncLKvbdbhmJkGWx +EPDLKvbdqwPkbhxq +DnbjjvbdlrYuZsEJ +DncLKvbdeKKSWUzn +DnbkKvbdyTNiNSCH +DncKjvbddwzTsqez +DncLKvbdTXkMNzjx +DoDKjvbdJmAEZgUa +DncKjvbdeEnqavbj +EPDLKvbdcJNJjfWx +DncLKvbdPyNAGsRj +DoCjjvbdLGGHbAqV +DncKjvbdddoRbWcK +DoDLKvbdZjTHogBf +EPDLKvbdRkZFuHKs +EOcLKvbdEuyPoljF +EPDKjvbdEYYMTtUM +DncKjvbdDxXlTssl +DnbkKvbdQvmcblID +EObkKvbdjmBkydgP +DoCkKvbdOAJTUKSA +DncKjvbdhgJbxvJu +DoDKjvbdVvhxVceH +DoCkKvbdjvXODaww +EPDKjvbdemFvflik +DoDKjvbdkCkkRGtg +DoCjjvbdDigjVxKA +DncLKvbdLAjgNCYR +EPDKjvbdbUbGwkTh +EObjjvbdmuUzLJrG +DnbjjvbdmgFXlnGy +DoCkKvbdFxttaDwb +EPCjjvbdJcKDRKCx +DoCkKvbdpfDeUWAh +EPDLKvbdADSYJyhp +DoCjjvbdHkazmvqL +DnbkKvbduLxWaUBX +EPCkKvbdQdCaPpdS +EOcLKvbdZdwfzhIb +EPDKjvbdKWUeceGi +EPDKjvbdSCDeMJZL +DoDKjvbdyOShYShc +EObjjvbdliEURVSB +DncLKvbdmgEwlnGy +DnbkKvbdsBemMHKy +DoDKjvbdYzcGSJvZ +EObkKvbdGcjvKBjK +EOcLKvbdJuuGDdgJ +EPCjjvbdOStWGeUp +EOcLKvbdGLEsChMu +EOcLKvbdeATqNYJf +DncLKvbdxxIjCQZk +EObkKvbddZyQXyQb +DoDKjvbdVBCRTRRy +EPCjjvbduDDVWuoP +EOcKjvbdVZHtZkOn +EPCjjvbdZQmEhmFR +DnbkKvbdZyDimcLr +EPDLKvbdjblKqHVH +EOcLKvbdZtIiZDsO +DnbkKvbdRWmcbkhD +EPCjjvbddneSjtTr +DoCkKvbdZQmFJMdq +DoDLKvbdLFegbBRV +EOcKjvbdSwkMNzjx +DoCjjvbdFjeTDHlu +EPCjjvbdtSqrxydc +DncLKvbdSPtHKFcw +DncLKvbdyYJJapZk +EOcKjvbddxZssrFz +EObjjvbdfekzOGgA +EPDKjvbdrylQSaHn +DnbjjvbdZisHofbG +EObjjvbdrbGNMHKy +DnbkKvbdLBKfmBxR +DncKjvbdACqxJyhp +DncLKvbddijRutzn +EPDLKvbdMpYRVmfs +DncLKvbdmttzKiqf +DnbkKvbdZnmhdeZj +EPCkKvbdjKFgjNYS +DnbjjvbdxnTHxShc +EPCjjvbdlZTSTYgU +DoCjjvbdqlyjYkgi +EObkKvbdxVMeQyMO +EPDLKvbdSPtHJecw +EPDLKvbdrpWOibvG +EObkKvbdRbEFLhyL +DoCkKvbdYNqAYUvU +DoCkKvbdnCKXXnnV +EObkKvbdddoSBvbj +DncKjvbdNGcPlpUk +DnbkKvbdmajXXnmu +DoCjjvbdJXsbHlQp +DncLKvbdNGcPlouL +DoCkKvbdTAFJHaoE +EPCjjvbdnPyxvKyC +EPCkKvbdRyihTDWA +DncLKvbdQlxCZNtz +EObkKvbdJSyAsMwl +DoCjjvbdmttykJrG +EPCkKvbdfpBzwEXh +DoCjjvbdrzMQTBIO +EPDKjvbddZxowyRC +DncKjvbdaNKaruNH +DnbjjvbdaNKasVMg +DncKjvbdcbTNSATm +EPCkKvbdiLdcnVDZ +EObjjvbdYTLaMtOx +EOcKjvbdEASIlzWw +DnbjjvbdziuPodTU +EOcLKvbdqUUHRqkU +DnbkKvbdyNsHxSiD +EObjjvbdhkeDnUcZ +EOcKjvbdNHCpNQUk +EPDLKvbdIryBSmYM +DnbkKvbdfekynGgA +EOcLKvbdiHKCyWJu +EObkKvbdrMzKYlIJ +DoCjjvbdsZkoraIO +EOcKjvbdQccAoqES +DoCjjvbdtTRrxzFD +EPCjjvbdJXtBhMRQ +DnbjjvbdsBfNMHKy +DnbkKvbdeEnrBwCj +DoDLKvbdTfzmkvvF +DoCjjvbdCJLCLIej +DnbjjvbdNUrrLNAX +DoCkKvbdxsNiNRag +EPCjjvbdtbcUwVoP +DoDKjvbdaogHDkzd +DncKjvbdpedFTuaI +DnbjjvbdqYngfpdY +DncKjvbdbiNJkGWx +DoCjjvbdGckVjBij +EObkKvbdqceIomvB +EPDLKvbdFWZQQNJe +EObkKvbdrRtkOLAm +DncKjvbdDwwktUTl +EObkKvbdwNWAMceN +DncKjvbdZMSDtOLm +EObjjvbdTkvPAuni +DoDLKvbdUxhTykPO +EOcLKvbdVBCQsQqy +EPDKjvbdZshhxcrn +DnbjjvbdqdEiQOWB +DoDKjvbdkWWmdBww +DoDLKvbdzQoMhiwA +DnbjjvbdUGzmlXWF +DncKjvbdJTYaTMwl +DoDKjvbdGLFScHmV +DoDKjvbdrWpLcJZR +EOcKjvbdwNWAMcdm +EObkKvbdmfeYNOGy +EObkKvbdtcDUwVoP +DnbjjvbdiZuGMQmf +EObjjvbdfMewGmJk +DnbjjvbdANIZTWyx +DncKjvbdtTSSxydc +DnbkKvbdsBfMkfjy +DoDKjvbdSLYfUgKs +DoDLKvbdZisHogCG +EObkKvbdVTlsfMVj +DncKjvbddZyPwxpb +DncLKvbdAMhYsXZx +DncLKvbdxwhjCPzL +EOcKjvbdKRZeOeme +DoCkKvbdunszqLOt +EPDKjvbdZRMdiMdq +DnbjjvbdEuxpPljF +EPDLKvbdGGJrOJUR +EPDKjvbdVviXudEg +DnbjjvbdpfDeTvBI +DncLKvbdRadElJYk +EPDKjvbdaMjbSuMg +EPDLKvbdTAEhhCOd +DncLKvbdTIyiqABM +EPCkKvbdBsBDUFvr +DoCjjvbdcSbkUEJa +EObjjvbdCIjbKhfK +DoDKjvbdauCHXjsh +DoCkKvbdpyPHfqEY +EOcLKvbdDwxMUUUM +DnbjjvbdGFjRmiUR +DoDLKvbdbQGgELzd +EOcKjvbdGGJqnItR +EPCjjvbdxrnJNRag +DoDLKvbdbhmJkFwY +EPDKjvbddoFSkTtS +DncKjvbdNUsSKmAX +EPCjjvbdfelZmfgA +DoCkKvbdjKGIJlwr +EPDLKvbdJYTaglQp +EPCkKvbdVrOXbFMD +EPDKjvbdTpqPUuIN +EPCjjvbdGckViaij +DnbjjvbdczZQYYqC +DoDKjvbdMtrqkNAX +EObkKvbdaNKartmH +EPDKjvbdmSZUysDi +EOcLKvbdlhdURVSB +DncKjvbdWRnXbEkc +DncLKvbdLBKfmBwq +EPDKjvbdZdwfzhIb +EPCkKvbdhancFXRR +EObkKvbdaSFbgtGL +DncLKvbdJXsaglQp +DncLKvbdUsltFlVj +DoDKjvbdLBKfmBwq +EPCkKvbdnVVZjirG +EObjjvbdiZuFlROG +EObkKvbdwygeeweS +EPCkKvbdwjvcgzyf +DnbkKvbdssRsYzFD +DnbjjvbdxwiJaoyk +EPCjjvbdVhYWYHYz +DncKjvbdhzVFkpnG +DncLKvbdeJjSVtzn +DncLKvbdyYIjCPyk +EPDLKvbdJpzEoGNe +DncKjvbdnBiwXoNu +EOcKjvbdVrOYCElD +EObkKvbdLBKgNCXq +EPDKjvbdTlWPBVni +EPDKjvbdFxuVBDxC +DncKjvbdnHFXlnGy +EPCjjvbdYkrDtOMN +DoCkKvbdUWMPjTaR +DoCjjvbdjSziSjiz +DnbjjvbdeOdsKtUS +EPCkKvbdmfdwmOHZ +EObjjvbdtSrTYydc +DnbkKvbdRjxeuGkT +EObkKvbdKeehCApu +EOcLKvbdpxoIGqEY +DncKjvbdbLMGOnDA +EPCkKvbdEXwktUUM +EObkKvbdiUzFWqtb +DoCjjvbdiHKCyViu +EObkKvbdvwLaWAuu +DoDLKvbdiCPDEvqR +EOcKjvbdWXJXvEEg +DoCkKvbdqTtGrSLU +DnbkKvbdtbbuXWOo +EObjjvbdgGLzOGgA +DncKjvbdTlVoBWPJ +DoCkKvbdeEoRbWcK +DoCkKvbdkWWmdCXw +DncKjvbdehLWRmpg +EPCkKvbdjFLGtoAO +DoDKjvbdGLFScIMu +EObjjvbdrRtkOKaN +EPCkKvbdczZQYYqC +DnbjjvbdfHkVqnRH +EOcLKvbdtvNxKRTA +EPCkKvbdADSYJyiQ +EOcKjvbdmJETptrB +EOcLKvbdURQoUtgm +DoDLKvbdZMSDtOMN +EPCjjvbdFfJqnIsq +EOcKjvbdcJNKKfWx +DnbjjvbdkySqrxft +DncLKvbdJpyePFme +DncKjvbduCcVXWPP +EOcLKvbdxKvcgzzG +DoDLKvbdpfEEsvAh +EObkKvbdZyDjNblS +EPCjjvbdhbPDEwRR +EPDLKvbdTqQoUthN +DoDKjvbdxnSgxShc +DoCkKvbdcTCjscjB +DoCkKvbdOTUVfeVQ +DncKjvbdkMbMZeHP +DncLKvbdEvYpPmKF +DncLKvbdJTZBTNYM +EObjjvbdIHGyxxYH +EOcKjvbdraemLfkZ +EOcKjvbdMpYRVmgT +DncKjvbdxZgfFxEr +DnbkKvbdpxoIGpcx +EPCkKvbdkIGlGFnL +DoDKjvbdUslselVj +DnbjjvbdZnnJEdzK +DncLKvbdehLVrORH +DoCjjvbdySmhlqbH +DoDLKvbdADSXiyhp +DoDKjvbdZtJJZDrn +DoCjjvbdezvZEiUX +EOcLKvbdqTtHSRkU +EPDKjvbdVgxWXgYz +DoCjjvbdGZUuBDwb +DncLKvbdhzUekpnG +EPCjjvbdZxcinDMS +EPCkKvbdOFEThiLE +DoDLKvbdhzVGLqOG +EObjjvbdkySqryGt +DoDKjvbdmpZyVkYb +DoCjjvbdnHFYMnGy +EObkKvbdRotGjFcw +EPDKjvbdjblKpgUg +EOcLKvbdWWiYVdFH +DoDLKvbdtbcVXVoP +EPDLKvbdqqtkOLAm +EPDLKvbdmRyUysEJ +DnbkKvbdxnShYTJD +DoDLKvbdGKeSbhMu +DoCkKvbdjuwODbXw +DncLKvbdaMkCSuMg +DncKjvbdtbcUvuno +DnbjjvbdiVZeWqtb +DoCjjvbdLBKgNBxR +EObkKvbdlZSqrxgU +EPCkKvbdULunaWOi +DoCkKvbdwzIGGYEr +EPCkKvbdnHExNOHZ +EObjjvbdpyOgfqEY +DnbjjvbdpedFUWAh +DoCkKvbdhaoDFXQq +DnbkKvbdYqMdhleR +DnbjjvbdsZkpSaIO +EPDKjvbdJcJbqJbx +EObjjvbdehKvRmqH +EOcLKvbdmIdURVSB +EPDLKvbdvOszqKoU +EOcLKvbdZisIQGbG +DnbjjvbdFyVUaDwb +EPCjjvbdTAEiIBoE +DncLKvbdRkZFtgKs +EOcLKvbdzdynzdyp +EOcLKvbdnUtykKSG +DoDKjvbdZQmEhldq +EOcKjvbdnBjWxOnV +EPCkKvbdqvpLbiZR +DoDKjvbdrykosBIO +EOcLKvbdBiKbLJGK +EPDLKvbdBvzciFPv +DoCjjvbdemFwGlik +EPDLKvbdqTsfqqjt +DncLKvbdptUHRrLU +EObkKvbdbUbGwjsh +DoCkKvbdHffyyXwg +EPCjjvbdgGMZnHHA +EPDKjvbdFejRmhsq +DoCkKvbdQvmdCkgc +DncLKvbdyNsHxShc +DoCkKvbdrDeIpOWB +EObkKvbdYzcGRiuy +DncKjvbdMowqWNfs +DoDLKvbdbsDLTcjB +EPCkKvbdZQmEiNEq +EObjjvbdNPwqWNfs +DoDLKvbddeOrBwDK +EObkKvbdrNZixkgi +DoDKjvbdtlXvaUBX +DncKjvbdtunYKRTA +EOcLKvbdfSBWzkcP +EObjjvbdVAbRTQrZ +DnbjjvbdcJNKLFvx +DncKjvbdssRsYyeD +DoDLKvbdqTsgSSLU +EPCkKvbdMowqVmgT +DoCjjvbdDnbjjvbd +EPCkKvbdlhdURUqa +DncKjvbdqrVLOLAm +DoDKjvbdNHDQNQUk +EPCkKvbdXsLaMtOx +EPCkKvbdRosgJfDw +DncLKvbdKVuFcdgJ +DoCjjvbdGGKRnItR +DnbkKvbdeEnrCWcK +EPDLKvbdlZSrTYgU +EPCjjvbdtSrTYyeD +DoCkKvbdZisHpHCG +DnbjjvbdbrbkUDia +DnbkKvbdhficYvKV +EOcKjvbdsBfMlHLZ +DoDKjvbdBdQBVjNG +DnbkKvbdTvLpKUAq +DoCjjvbdzaAPGgCM +EObjjvbdiVZeWrVC +EPCjjvbdZshiYcrn +EObjjvbdRNXbYnUz +EObkKvbdBcpBWJlf +DncKjvbdtbcUvuoP +DoCkKvbdmfeXmNgZ +DncLKvbdbPfgELzd +DncKjvbdZshiYdSn +EObkKvbdDjHiuwjA +DoDLKvbdfIKvRnRH +DnbjjvbdiLeDmtcZ +DoDLKvbdQwNcblID +EObkKvbdmRyUzSdJ +DnbkKvbdnHFYMnHZ +EOcLKvbdfHjvSORH +DncLKvbdlZSrSyHU +EObkKvbdtSrSxzFD +EObjjvbdZyEKNcLr +EObkKvbdRkYeuHLT +EOcKjvbdTkuoAuoJ +DnbjjvbdEPDKkXCd +EPCkKvbdnCJwXoOV +EObjjvbdxrmiMqbH +DoDLKvbdRaceMIyL +EPDKjvbdRosgKFdX +DoCjjvbdzoQQeDMY +DncKjvbdZyEJmcMS +DoDLKvbdOFDshiLE +EPDKjvbdSQUGiedX +EPCkKvbdTIyjRAAl +EObjjvbdxUmFRYkn +DncKjvbdmpZyWLYb +DoCkKvbdygZMANEw +DoDLKvbdhuZeWquC +EObkKvbdFyUuAcxC +DoCkKvbdiCPCeXQq +DncKjvbdsCFlkfkZ +EPCjjvbdNPwpvOHT +DoCjjvbdSPtGjGDw +DncLKvbdAMhZSvyx +EPCkKvbdWXJYWDdg +EPDKjvbdaogHDkzd +DoDLKvbdRosgKFcw +EPDLKvbdrRtjnKaN +DncKjvbdvBEZSoEh +DoDLKvbdmajXYOmu +DnbjjvbdfNFwHMjL +EPCkKvbdezuyEhtX +DoCkKvbdHffzZYYH +EPCkKvbdvAdYsOdh +EPCjjvbdhlFDnVDZ +DncKjvbdbiNKLFvx +DoDLKvbdMIalQxAS +EPDLKvbdGckWKBjK +EOcKjvbdvOszqKnt +DoCkKvbdraelkgKy +EOcKjvbdMgComPtk +DoDKjvbdOSsugFVQ +DoCkKvbdyNrhYTJD +EPCjjvbduDDVXWOo +DncLKvbdiCPDFXRR +DncLKvbdiGibyWKV +EOcLKvbdfNGXHNJk +EObkKvbdBhjakIej +EPCjjvbdxmrhXriD +DnbkKvbdJbibqKDY +DnbkKvbdSCDdkhyL +EPCjjvbdGFirOIsq +DnbkKvbdKVtfDeHJ +DoDKjvbdGKdrbhMu +DncLKvbdZLrETmlN +EObjjvbdjuvmcbXw +DncKjvbdQdDApRDr +EObkKvbdeATplwjG +DoCjjvbdZMRdUNkm +DoDKjvbdTqQoVVIN +EPCkKvbdOTTufeVQ +EPDKjvbdWRnXadlD +DncKjvbdZsiJYdSn +DoCkKvbdZLrDsnMN +DoDKjvbdEKHiuwjA +EPDLKvbdnBivxPOV +EPCjjvbdddnrCWbj +EOcLKvbdpssgSRkU +EPCjjvbdzdzOzdyp +EPCjjvbdZxcinClS +DoDKjvbdvAcySoEh +DnbjjvbdWHxWXfxz +DoDLKvbdCWzdJEpW +DoCjjvbdehLVqnRH +EObjjvbdEXxLstTl +EObjjvbdkMakzEfo +EPCkKvbdKaKflbXq +EPDLKvbdijFgjNYS +DoCjjvbdZsiIxdSn +DncKjvbdeATqNXif +DncLKvbdzoPqEblY +EObkKvbdLAjgNBwq +DncKjvbdUxgsykPO +DoDKjvbdaogGckzd +DncKjvbdFVxpPmJe +EOcLKvbdZLrDtNlN +EObjjvbdYNqAXuWU +DoCkKvbdEYYLstUM +EObjjvbdeFPSBwDK +DncKjvbdePEsKssr +DncKjvbdZjTHogCG +EPCkKvbdjKGHjNXr +DoCkKvbdNrtVgFVQ +DncLKvbdaMjaruNH +DoDLKvbdwjwEHzzG +EOcLKvbdTIzJqABM +DoDLKvbdliETqVSB +DoDLKvbdNrtVfdtp +DnbjjvbdZxdKNcMS +EPDLKvbdbUafxKsh +DoCkKvbdVrNxCFMD +DoCkKvbdxZgefYEr +DoDKjvbdYTLaMsoY +DncKjvbdeAURMwif +EOcLKvbdNGcPmQVL +EPDKjvbdqceJQOVa +DncKjvbdRotHKGEX +DoCjjvbdwNWAMdFN +EPCkKvbdFyVVAcwb +DoDKjvbdmozYvKyC +DncKjvbdSPsgJecw +EPDKjvbdZtJJYcrn +EOcLKvbdGckWKCJj +DoDKjvbdkxrrSxft +DnbjjvbdRbDdlIxk +DncKjvbdyYJJbPyk +DnbjjvbdhgJcYvKV +EObkKvbdjcLjqHUg +EObkKvbdhgJbyWKV +EObjjvbdrovPKCvG +DoCkKvbdbBVdepQX +DnbjjvbdUVkojTaR +EPCkKvbdbUagYLUI +DoDLKvbdptUGqqkU +DoCjjvbdyTNhlqag +DncKjvbdEYXlTssl +EPCkKvbdXFxytAOs +EOcLKvbdNdctIhkE +EPDLKvbdkDMLRGuH +EPDLKvbdDihJuxKA +EOcLKvbdrafNMHLZ +EPDLKvbdbKlFoODA +DncLKvbdZLqcsnMN +DnbjjvbdznpRFDLx +DncLKvbdziuQPdSt +EPCkKvbdbrcKsdKB +DncLKvbdaMkCTUmH +EPDLKvbdYkqdUOLm +DoDKjvbdjhHLfGNk +DoDLKvbdZMSDtNlN +DnbjjvbdZjTHpHCG +DoCkKvbdemFvgNKL +DncKjvbdrRtkOLAm +EPCjjvbdyNrhXsIc +EObjjvbdgPazwDwh +DoDKjvbdRDcAoqDr +DoDKjvbdvvkaWBWV +EOcKjvbdZRMdiNFR +EPCkKvbddePRawCj +DoCkKvbdHDjvKBij +DnbkKvbdZirgpGbG +EOcKjvbdhbPCeWqR +DnbkKvbdNPwpvNfs +EPCjjvbdZirhPfbG +EOcLKvbdIGgZxwxH +EPCkKvbdrykosBHn +DoDKjvbdxnTIYShc +DnbjjvbdNsTvGduQ +DncLKvbdBcpAvJlf +DnbjjvbdlqxtysDi +DoCkKvbdOEdTiIjd +DncKjvbdfHkVrOQg +DoCkKvbdiHKDYvKV +DoDKjvbdOTUVgFUp +EObkKvbdaaVdfPow +DncLKvbdZHXEAPTJ +DnbkKvbdkIHLefNk +DnbkKvbdjEjfuPAO +EObjjvbdhtzFWqtb +DoDLKvbdSQTfjFdX +DncLKvbdHEKvKBjK +DncLKvbdHDkVjBij +EPDKjvbdRpTfiecw +DnbkKvbdiBncEwQq +EObkKvbdRadEkhyL +EPCkKvbdezvYdiTw +EOcKjvbdaMjasUlg +EObkKvbdczZPwyQb +EPCjjvbdTvMQJtAq +EPCjjvbdJXtCIMRQ +DoDLKvbdkDMKpftg +EPCjjvbdiVZdvqtb +DnbkKvbdtunXipsA +DoCjjvbdjJehKNYS +DnbjjvbdJvUeceHJ +DoDKjvbdKRZdoFme +DncLKvbdJcKCpjCx +EPDKjvbdmbKXYPNu +DnbjjvbdkIHLeenL +EPDLKvbdNPxQunHT +DnbjjvbdUtMtFkvK +EPDLKvbdsPvPJcWG +EObjjvbdMRvlzVQz +DoCkKvbdsQWOjDWG +DnbjjvbdXGZZtAPT +DnbjjvbdunszpkOt +DncKjvbdxZhFfXdr +DnbjjvbdRzJgsCvA +EPCkKvbdSCDdlIxk +EPDKjvbdREDBPqES +DnbjjvbdBvzdIdov +DoDLKvbdSLYetfkT +EObjjvbdKWVGDeHJ +DoCjjvbduDDUvuoP +EOcLKvbdWIYWXgYz +DoCjjvbdbhmJjfWx +EPDKjvbdIxUCILpp +EOcLKvbdeXzTsrFz +EPDLKvbdsBemLgKy +EPCkKvbdzjVPpDrt +DncLKvbdZyDimbkr +DnbjjvbdRNYBxmtz +EPCkKvbdvOszpkPU +EObkKvbdSQTfiedX +DncKjvbdZRNFIldq +DoDKjvbdbhlijfXY +EObkKvbdEzspeLcJ +EPCjjvbdKCicRJbx +EOcLKvbdOYOuzcnU +DoCkKvbdhkddOVDZ +DncKjvbdIxTahMQp +EOcLKvbdwygeexFS +EPCjjvbdKRZeOeme +EPDLKvbdgPazvcxI +DncKjvbdfNFwHMik +EOcLKvbdtkwvaTaX +EObjjvbdURQnuVIN +DnbkKvbdiBncFWqR +DncLKvbdaMkCStmH +EPCjjvbdZjSgogBf +DoDKjvbdMowpvOGs +EPCkKvbdsrqsZZdc +DnbkKvbdRpTfjFdX +EOcKjvbdaMjbTVMg +EOcLKvbdmgExMmfy +DncKjvbdCJLCLJGK +DoCkKvbdNeDshiKd +DnbkKvbdGLFSbgmV +EObjjvbdMtrrLNAX +EOcKjvbdpedEsvAh +DoDKjvbdcyxpXyQb +EObkKvbdxZhGGXdr +DoCkKvbdEztQdlCi +EObkKvbdijFgilxS +EPDLKvbdkHgMFenL +EOcLKvbdlrYtysDi +DncLKvbdjcLjpgVH +DoCjjvbdnVVZkKRf +EPDKjvbdFeirNhsq +DnbkKvbdjblLRGuH +EPDLKvbdtTSTZZeD +DoDKjvbdVBCRTRSZ +DncKjvbdTYLMNzjx +DoCkKvbdEztQdkcJ +EObjjvbdpfEFTuaI +DncLKvbdYSlAmUPY +DncKjvbdYpldiNFR +DncLKvbdWXIwvDdg +DoDLKvbdeXyssrFz +DncLKvbdqdEhonVa +EOcLKvbdNQYRVnGs +EObjjvbdRpTgKGDw +DoDKjvbdauCHXkUI +DoDLKvbdhficZViu +DnbjjvbdzoPpeCkx +DoCkKvbdJYTaglQp +DoDKjvbdnBiwYPNu +EOcLKvbdMJCLqYAS +EPCjjvbdYkrDsnMN +EPCkKvbdehKvRmqH +EObkKvbdVqmxCFMD +DncKjvbdrDeJPmvB +EPDLKvbdzaAOgHCM +EOcLKvbdNPxQvNfs +DncLKvbdFVxopMie +EPDKjvbdgQBzwDwh +EObjjvbdTfzmkvvF +EPDLKvbdUaBprpqy +DoCkKvbdnGdxNOGy +DncLKvbdfIKurOQg +EPCkKvbdKDJcRKCx +EPCjjvbdmJEUQuSB +DncLKvbdrafNMGjy +EOcKjvbdZxdKNbkr +DnbkKvbdJmADzGuB +EPCjjvbdQvmdDMID +DnbkKvbdemGWgNJk +DncKjvbdyfxlAMdw +EPCkKvbddtAUATNW +DncKjvbdcasMrATm +DoDKjvbdVhYVxHYz +EPCjjvbdhyuFkpmf +DoDLKvbdcbTMrATm +EPCkKvbdILaznXRL +DoDKjvbdRDbaQQcr +DncKjvbdijFgjNYS +EObkKvbdIMBznXRL +EPCjjvbdxVNEpyLn +DncLKvbdYkqctOMN +EOcKjvbdxrmiNSBg +EPDLKvbdtTRsYzFD +EOcKjvbdzjVQQDsU +EPCjjvbdZMRctNlN +DncKjvbdXrlAmTnx +EOcLKvbdbPgGdLzd +EPDLKvbdFfJqmhsq +EOcLKvbdyzdmqgiI +DoCjjvbduCbtvuoP +DncLKvbdNGcPlpVL +EPCjjvbdGBOpyJzm +EPCkKvbdRDcBPpcr +EOcLKvbdRbEFLhyL +EOcLKvbdePFTLTsr +EObkKvbdcTCkUDjB +DnbkKvbdrWokbhxq +DncLKvbdqUTfrRjt +EOcLKvbdRyihTDWA +EObkKvbdpxnhHQdY +DnbkKvbdrSUkOKaN +DoCjjvbdIGgZyYXg +DoDLKvbdMowqWNfs +DoDKjvbdUxgtZkOn +EObjjvbdUtNTelVj +EObjjvbdlqxtyrdJ +DncKjvbdkVvnDbYX +EObjjvbdePFTKssr +DoCkKvbdMuSrLNAX +EOcLKvbdnQZyWLZC +DoDKjvbdhgJcYujV +DoDLKvbdaMjasVMg +EPCjjvbdcScLUDia +DnbjjvbdbKkeoNcA +DnbkKvbdfpBzwEYI +DoCkKvbdBhkBjhej +DnbjjvbdkDMLRGtg +EObkKvbdeATqNXjG +EOcKjvbdFkFSbglu +DnbjjvbdznpQdcMY +DncLKvbdIidAJpHE +DoCjjvbdLZQirzuG +DnbjjvbdzjUopDrt +EOcLKvbdnUuZjiqf +DoDLKvbdwyhFeweS +DoCkKvbdaoffckzd +EObkKvbdzaAPGgCM +EObkKvbdEzspdkcJ +DnbjjvbdDjHiuxKA +DnbkKvbdVqmxBdlD +EOcLKvbdrJAKFMne +EOcKjvbdZjSgofbG +EPCjjvbdfMfWgNJk +DoCkKvbdTukpJsaR +DoCjjvbdySmiNSBg +DnbkKvbdzGyMANFX +EObkKvbduWNxKQsA +DoDKjvbdRkZFuHLT +DncLKvbdbKlGOmcA +DncLKvbdyNsIXsJD +DnbkKvbdMpXqWNfs +DoCkKvbdHEKujBjK +DncLKvbdDxXktTsl +EPCkKvbdACrYJyiQ +EOcKjvbdqUUHSRjt +DoDLKvbdOFDsiJLE +EObkKvbdrbGMlGjy +DoCjjvbdjblKpgUg +EPCkKvbdiHJcYujV +EPDKjvbdrDeJQNvB +EPDLKvbdbrbkTdJa +DnbkKvbdNeDtIhkE +DnbkKvbdcJNKKevx +EPCjjvbdxVNFQxkn +EObjjvbdhyuGLqOG +EOcKjvbdrafMkfkZ +EObkKvbdRkYetgKs +DnbjjvbdUWLoitBR +DoCjjvbdQvmcblID +EOcLKvbdDoDLLXCd +DncLKvbdzRPMiJwA +DoCkKvbdsZkoraHn +DoDKjvbdkHgMGFnL +EObkKvbdrbFmMGjy +DnbkKvbdRWnDbkhD +EPDKjvbdJbicRJbx +DncKjvbdGZUuAcwb +DoCjjvbdmfdwmNfy +DoDKjvbdBdQAujNG +EPDLKvbdwWlAuaVu +DncLKvbdxmrgxSiD +DoCkKvbdUsmUFkuj +EOcKjvbdcTDKsdKB +DnbjjvbdjcLkRHVH +DoDKjvbdbiMijewY +EPCjjvbdPyNAHSrK +DnbjjvbdFkErcINV +EPDKjvbdZQldhmFR +EPDKjvbdTJZjRABM +EOcKjvbdKaKgMaxR +DoCjjvbdwzHefYEr +DoDLKvbdDwxLtUUM +DoCkKvbdfILWRmpg +DoCkKvbdRyihTCvA +DoDKjvbdSQUGjFcw +DoCjjvbdEYXktUTl +EPCjjvbdoznEKxPA +EPDLKvbdSiZiqABM +EObkKvbdVUNUFkuj +DncKjvbdMfbpNQUk +DncLKvbdEvYopMie +DnbjjvbdMowpvNgT +DncLKvbdKjaHvAKZ +DoDKjvbdqmZjZMIJ +EObjjvbdGcjuibJj +DoDLKvbduLwvaTaX +DoCkKvbdHgHZyYYH +EObjjvbdEOcKjwCd +EPCjjvbdGckWKCKK +EObkKvbdEuyQQMie +DnbjjvbdHgGzZYYH +EObjjvbdVUMsekuj +EObkKvbdWWiXucdg +EPDKjvbdRWnECkgc +EPDKjvbdxZgefYFS +DnbkKvbdEuyPomKF +EPCjjvbddePSCXCj +DoDKjvbdUsltFlWK +DnbkKvbdbsDKtEJa +EObkKvbdmoyyWLZC +DoDKjvbdSCDeMJZL +DnbkKvbdwtleRYkn +EPDLKvbdJpzEnfNe +DncKjvbdZisIQGbG +DoCjjvbdiUzEwRtb +DncKjvbdrounicVf +DncLKvbdmIdURVRa +DoDKjvbdYSlBNUPY +DnbjjvbdKDKDQibx +DoDLKvbdnCJvwoOV +EPDKjvbdgFlZmfgA +DoDKjvbdTukojTaR +DnbjjvbdVAbQsQqy +EOcLKvbdtAHRIABS +DnbjjvbdmbJvwnnV +EOcKjvbdvBDxrneI +DnbjjvbdeJirWUzn +DnbjjvbdKeegaaQu +DnbjjvbdzQoMiKXA +DnbjjvbdxwiJbPyk +EPDLKvbdKNADzHUa +DoCkKvbdANHyTXZx +EObkKvbdxLXDgzyf +EOcKjvbdpxoHgQcx +DncKjvbdLBKflawq +EPDKjvbdhanbdwQq +DnbkKvbdEASIlyvw +EPCkKvbdwzHfGYEr +EOcLKvbdqZPHgQdY +EPDKjvbdqTtGqqjt +DoCjjvbdDxXksssl +DoDKjvbdQlwayNtz +EOcKjvbdTvLoitAq +DnbkKvbdirzhsKiz +EPDKjvbdyzeORghh +DncLKvbdmJDsqVRa +DncLKvbdKefICAqV +EOcLKvbdZnmheFZj +DoDKjvbdIxUCILpp +DncLKvbdxsOIlrBg +DoCkKvbdiVZdvqtb +EPDLKvbdbBWEfQPw +EObkKvbdsCFllGkZ +EObkKvbdNdctIiKd +EObjjvbdozmcjwoA +EPDLKvbdlhdTqUqa +EOcKjvbdbUagYKsh +DnbkKvbdJpydoGOF +DnbkKvbdnGeYMmfy +DncKjvbdtlXwBUAw +DncKjvbdqiAJdlne +EPCkKvbdMIakqYAS +DnbkKvbdCWzchdov +EObkKvbdelewHNJk +EPCjjvbdFpASvgFy +DoDLKvbdVrNxCFMD +DnbkKvbdMpYQvNfs +EPCkKvbdEObkKwDE +EPDLKvbdHDjuibJj +EPCjjvbdKaLHMaxR +DoDKjvbdakLfOmcA +EPDLKvbdMgDQNQVL +DoCjjvbdEvYpQNKF +EPDKjvbdrEEhpOVa +EOcLKvbdOFDsiIjd +DncKjvbdtTSTYyeD +EObjjvbdQvnDblHc +DoDKjvbdVrNwbElD +EPCjjvbdZMRdUNkm +DoCjjvbdhfibxujV +DnbjjvbdYpmFJMeR +DncLKvbdDihKVxKA +DoCjjvbdrNZjYkgi +EOcLKvbdYqNFImEq +DoDLKvbdJbjDQjCx +DoDKjvbdwygefXeS +DncLKvbdUyHsykPO +DncLKvbdJSyBTMxM +EPDKjvbdcImKKfXY +EPCjjvbddndsLTtS +DoDLKvbdEASIlzWw +EObjjvbdrylQTAgn +DoDKjvbdFkFTChMu +DncLKvbdUaCQrprZ +DnbjjvbdOFEThhjd +EObjjvbdlYsRrxgU +EPCkKvbdnGeYNOGy +DoDKjvbdwygefYEr +DoCjjvbdGckViajK +DoDKjvbdSZjITDWA +EObjjvbdkWXNdCXw +EPCkKvbdKjaIWAJy +EObkKvbdKkBIWAKZ +DoDLKvbdptTfqrLU +DoDKjvbdPxmAGsRj +EObkKvbdTvMPitBR +EPCkKvbdegjvSOQg +DoDKjvbdwNWANEEm +EOcLKvbdRNXbYmtz +DoDKjvbdEOcKjwDE +EPDLKvbdfMfXHMik +DoCkKvbdWHwvXfxz +EPCjjvbdelfWgNKL +EPCjjvbdqcdiQOVa +DncKjvbdkyTSTZGt +DoCkKvbdbAueFpPw +EOcKjvbdQwNdClHc +DnbjjvbdxmsIYSiD +EPDKjvbdCTAbtFwS +DncLKvbdJpzFOeme +EOcKjvbdiZuGLqOG +DncKjvbdKaLHMaxR +EPDLKvbdbiMjLFvx +EPCkKvbdjvXODaxX +EOcLKvbdOAJSsirA +EPDKjvbdqYnhHQdY +DoCkKvbdDwwlTtUM +DnbkKvbdRjxfVHKs +EObjjvbdzjUpPcrt +EOcLKvbdeUAUATNW +EObkKvbdQlwaxmtz +EObkKvbdEXxLtUUM +EObkKvbdYkrETmkm +DoCkKvbdxmsHwsIc +DoDKjvbdzjUoocrt +EPDKjvbdqGEFTuaI +EPCjjvbdbiMjLGXY +EPDKjvbdfpBzwEXh +DncKjvbdZeYGzhJC +DoCjjvbdFkEsCglu +DncKjvbdOFDshhjd +DncKjvbdZMRcsnMN +EPCkKvbdrEFJPnVa +DoCkKvbdcyyPxYpb +EPDLKvbdijGIKMwr +DoCjjvbdbAudepQX +DncLKvbdFejSOItR +EOcKjvbdSLZGVHLT +EPDKjvbdMJBkpxAS +DncKjvbdJXsaglQp +DnbkKvbdjcMLRHVH +DoCkKvbdFjeTCgmV +DnbjjvbdqUTfrRkU +DnbjjvbdznoqFCkx +EObkKvbdVqnYBeLc +DoDLKvbdaMjbTVMg +DoCkKvbdSQUHKFdX +DoCjjvbdrDdhomua +DncLKvbdcTCjsdJa +DoCkKvbdsCFlkgKy +EPCkKvbdmbKWwnmu +DoCjjvbdZQmFImEq +EPCkKvbdyXiKCPzL +EOcLKvbdKQzEnenF +EPCjjvbdrbGNMGjy +EPDKjvbdgGMZnHHA +EOcLKvbdfHjuqnRH +EOcLKvbdFeirNiUR +DoCjjvbduaEZSoFI +DncKjvbdbAudfPow +DoCkKvbdbiMikFwY +DoDLKvbdcyxpYYqC +DnbjjvbdpxoHfpdY +DncKjvbdqUTgRqjt +DoDKjvbdcImKKfWx +DnbjjvbdmfeYNNfy +EPCjjvbdIjEAJofd +EObjjvbdLBKgNCXq +EObjjvbduLxWaUAw +DnbjjvbdJTZBTNXl +DoCkKvbduaDyTOeI +EOcLKvbdUyIUZkPO +EOcLKvbddePRawCj +EPDKjvbdhbObeWqR +EOcKjvbdBdQAvJmG +EOcKjvbdkVwODaww +DnbkKvbdUVkoisaR +DnbkKvbdMoxQvNfs +EObjjvbdCJKbLIfK +DncKjvbdYpmFJNEq +DoCjjvbdjKFhKMxS +DnbjjvbdZLrEUNlN +EPDKjvbdwuNFRZMO +EObjjvbdjuvnECXw +EPCkKvbdlZTSTZGt +DoCjjvbdsQVoJcWG +DncLKvbdmJETqVSB +DnbjjvbdjggLfGOL +EObjjvbdxwiKBpZk +DoDLKvbdKDKCpjDY +EPCjjvbdzRPNIjXA +DoCkKvbdkaMoNALA +EPCkKvbdjvWnDaww +EPCkKvbdSBcdkiZL +DnbkKvbdbUbHXkUI +EOcKjvbdURROtuHm +DncLKvbdJmAEZgVB +DoDLKvbdDxYLsssl +DncKjvbdWRnXadlD +EPCjjvbdADSXiyhp +DnbkKvbdNGcPlouL +DnbjjvbdBsAcTevr +EObjjvbdWWhwvDeH +EOcLKvbdbUafxKsh +DoCkKvbdtcCuXWOo +EOcKjvbdbKkennDA +EPDLKvbdGcjujBjK +DoDKjvbdRWmdDMHc +EPCkKvbdmSZUyrdJ +DoCkKvbdLZRKSztf +DncKjvbdZQmFJNFR +EPDLKvbdjhGkefNk +DncKjvbdeATpmYJf +EPCkKvbdDjHivXjA +EObjjvbdFyVVBEXb +DncKjvbdIHHZxxXg +DnbjjvbdMoxQvNfs +EObjjvbdlYsRsZGt +EOcLKvbdZHWdAPTJ +DoCkKvbdoznDjwoA +EOcLKvbdYpmEiNEq +EOcLKvbdfMfWgNJk +DnbjjvbdjlalZeGo +EPDLKvbdVgxVxGxz +DoDKjvbdZRMdiMeR +DnbkKvbdNsUVgFUp +EObjjvbdNGcPmPuL +EPDLKvbdrSUjnKaN +DncKjvbdMgDPmQUk +DoDLKvbdRkZGUfkT +EOcLKvbdpxoIGqDx +DoCkKvbdVwIxVcdg +DoDKjvbdZQmFIleR +EPDKjvbdZshiZDrn +EPCkKvbdFWZPpNJe +DnbkKvbdcImKKfXY +DoCkKvbdiVZeWqtb +EPCkKvbdkxsSSyHU +EObkKvbdcSbkTdKB +EOcKjvbdFxttaEYC +EPCkKvbdhtzEwSVC +EOcKjvbdLAjgNBwq +DoCkKvbdZisHofbG +DoDLKvbdIsYaTNYM +EPDLKvbdADRxJzIp +DoDKjvbdTkuoAvOi +EOcLKvbdZRMeJMdq +EPDLKvbdWWiXvDdg +DnbjjvbdbsDKscjB +DnbkKvbdtlXwBUBX +EPCjjvbdmgFXlmgZ +EObkKvbdjmBlZeGo +EObkKvbdmgEwmOGy +DoCjjvbdtlXwBTaX +EPDKjvbdSiZiqABM +EPDLKvbdEXxMTssl +EPCkKvbdRWmccLhD +DncLKvbdrWpMDJZR +EPDLKvbdelfXGlik +EOcLKvbdFjdsChNV +EPCkKvbdVUMtFkuj +DoDLKvbdtkxXBUBX +DncLKvbdMgDQNPtk +DnbkKvbdMJCMQxAS +EOcLKvbduWOYJpsA +EPCjjvbdZxcimcMS +DoDKjvbdqrUjmkAm +EObjjvbdRzJgsCvA +EOcLKvbdiBoDFXRR +EPCjjvbdSPtHKFcw +DncKjvbdbBVeGPpX +DnbjjvbdRotGiedX +DoDKjvbdIHGzZYXg +DnbjjvbdiGjCyViu +EPCjjvbdSxKkmzjx +EPCjjvbdmajWwoOV +DnbjjvbdmbKWxPNu +EObkKvbdCTBCsfXS +DoCjjvbdKQzEnfOF +EPCkKvbddijRutzn +EObkKvbdFjeTCgmV +DnbjjvbdURQnuUhN +DnbkKvbdiCOcFXRR +EObkKvbdJutfEEfi +DncLKvbdhtydwRuC +DoCjjvbdcTCjsdJa +DnbjjvbdzoPqEcMY +DoDLKvbdSCDdlJZL +EOcKjvbdlhctQuSB +EPDKjvbdOFETiJKd +EObkKvbddZyQYZQb +EOcLKvbdrMyjYlHi +DoDLKvbdqrVLOLBN +DncKjvbdyNsHwriD +EObkKvbdQvnECkgc +DnbkKvbdznopeClY +DoCkKvbdCJLBjiGK +EOcLKvbdauCGxKtI +EPCjjvbdeFOrCWcK +DncLKvbdcSbjtDia +DnbkKvbdKWVGDdgJ +EPDKjvbdrDdiQNua +DncLKvbdqTtGqrKt +DoDKjvbdjJfIKMwr +DoCkKvbdkxsSTZHU +EObkKvbdFejSNhtR +DoDKjvbdnCKWxOmu +DoDLKvbdvBDySneI +DncKjvbddZxpXyRC +EPDKjvbddwzTsqez +DoDLKvbdLFfIBaQu +DncLKvbdwzHeewdr +DncLKvbdOFEUJJKd +DoDLKvbdEvZQQMie +EPDLKvbdWHxVwgYz +DoCjjvbdiGjCxujV +EPDKjvbdrovPJcWG +DoDLKvbdZxcjOCkr +DnbjjvbdRzJgsDWA +DoDLKvbdiZuGLpnG +DncLKvbdTukoitBR +DnbkKvbdnBiwXnnV +DoDKjvbdBvzdIdov +EObkKvbdRWnECkhD +DoCkKvbdRbDeMJZL +DncKjvbdiGjDYujV +EPCkKvbdNdctIiLE +EPCjjvbdKWUfDdfi +EOcKjvbdkIGlGGNk +EPDKjvbdGZVVBDxC +EObkKvbdXsMBNUOx +EObjjvbdANHxrvyx +EPDKjvbdZtIhyDrn +DoCkKvbdRWmdCkgc +EObkKvbdffLynGgA +DoDKjvbdIxTahMQp +DncKjvbdKQzFPGOF +DoDKjvbduDCtwWOo +EOcKjvbdnCJvxOmu +DoCjjvbdEJgivXjA +DncKjvbdemGWgMjL +DncKjvbdCDpBVjMf +DncLKvbdmoyxukZC +EOcLKvbdtkwwBTaX +DoCkKvbdLqwMzUpz +DncLKvbdqFdFUWBI +EPDLKvbdZyEJmblS +EOcKjvbdEzsqFMCi +DoCkKvbdcarmSATm +DncLKvbdFfJqmiTq +DncLKvbdKQzEoGNe +DoCjjvbdUaCRTRSZ +EOcLKvbdqZOhGqEY +DoCkKvbdZisIQGaf +DoCkKvbdeFOrBwCj +DoDLKvbdmIctQtqa +EObkKvbdxVMdqYkn +DncKjvbdwygfFxFS +DoCkKvbdRWnEDLhD +EOcKjvbdmRyUyrci +DoCkKvbdWXIwvDeH +EPDLKvbdRXODcLgc +DoDLKvbdBsBDUGWr +EOcKjvbdEvYopNJe +DoCjjvbdBvzdIdov +DoCkKvbdyzeNrIJI +EObkKvbdCJKbKhej +EObjjvbdQccBQQcr +DnbkKvbdxZgeewdr +DoDKjvbdqcdhpNua +DoCjjvbdeJjSVtzn +DncKjvbddneTKssr +DnbjjvbdZxcjNbkr +EPCjjvbdZisIPfaf +EPCkKvbdkyTRrxft +DncKjvbdVwIxVcdg +DncLKvbdIxTagkpp +EPCjjvbdbrbjtEJa +DncKjvbdkCkjqHUg +DoCkKvbdUxgsyjnn +EObjjvbdUaCRSprZ +DnbjjvbdMJCLpxAS +DncLKvbdliEUQuRa +EPCkKvbdANHxrvzY +EPCjjvbdeAURMwjG +EPDKjvbdZoOIeEzK +DoDKjvbdmuVZkJqf +DncLKvbdaNLCTUlg +DoCkKvbdnQZxvLYb +DncLKvbdhficZWJu +DncKjvbdatbHYLUI +DoCjjvbddndrjtUS +EOcLKvbdsBfMkgKy +DnbjjvbdBiKakIfK +DnbjjvbdSQTfjFcw +DoCjjvbdmoyxvKyC +DoCkKvbdGcjuibKK +DnbkKvbdZQldiMeR +EObkKvbdqquKnKaN +DoCjjvbdZRNEhldq +EPCjjvbdBiKbLJFj +EPCjjvbdyXhjCPyk +DncLKvbdtTSSxzEc +EPCjjvbdnCJwXnmu +DoDLKvbdbBWEfQPw +EOcLKvbdemGXHNKL +DoDLKvbdmfdxMnGy +EOcLKvbdTqQntthN +EOcLKvbdrMyixlIJ +EOcLKvbdVUMselWK +EOcLKvbdBvzchePv +DoCjjvbdbVCHXjsh +EPCjjvbdZRMdhleR +EOcLKvbdhbObeXRR +EPCkKvbdFWZPpMie +DncLKvbdXFyZtAOs +DnbkKvbdTqQoUuHm +EPCjjvbdCSaDUFvr +DoDKjvbdQZNAHTSK +EOcLKvbdmoyyVkZC +DoCkKvbdGLErbhMu +EOcLKvbdtvNwjRTA +EObkKvbdFjdsDINV +EOcKjvbdeOdsLUUS +DncKjvbdMtrrKmAX +EObkKvbdBsBCtGWr +EOcLKvbdVBCRTRSZ +DoDKjvbdKQydoFme +DncLKvbdnHFXmOGy +DnbkKvbdGAnqYizm +EOcLKvbdjlakzEfo +EOcKjvbdegkWSOQg +DoCjjvbdtkwwAsaX +EPCkKvbdeKKSWUzn +EObjjvbdrRtjnLBN +EPCkKvbdeATqMxKG +DnbkKvbdZMRdTmlN +DoDKjvbdNsUWGeVQ +EObjjvbdyXiKBpZk +EOcLKvbdJKEAJpHE +DoDKjvbdzQoNJJwA +DoCkKvbdwygeewdr +EObkKvbdsCGNMHKy +EOcLKvbdlhdUQuRa +EObjjvbdyNsHwsIc +DoDLKvbdWRnXbFLc +EObjjvbduCcUvvPP +EOcLKvbdrEEhonWB +EPCjjvbdRjyFtgKs +EPCjjvbdkNCLzFGo +DoCkKvbdRDbaPpcr +DoDKjvbdQdCaQQdS +DncKjvbdwyhFexFS +EPDLKvbdBhjakJGK +EPDKjvbdaNKaruMg +EObkKvbdzQnliJwA +DnbjjvbdptTfrSLU +DoDKjvbdFWZPpNJe +EObkKvbdZxcjOCkr +DoDKjvbdehLWRnQg +EOcLKvbdcSbkUEKB +EObjjvbdbUafxLTh +EObkKvbdBcpAvKNG +DoDLKvbdySmiNSBg +DncLKvbdmIdUQuRa +EPCkKvbduDDUvuoP +DoDLKvbdMtrqjmAX +DoDLKvbdVZHtZkOn +EOcLKvbdiZuGLpnG +EOcKjvbdxmrgxShc +DoCjjvbdMpYQvNfs +EOcKjvbdCIkCKiFj +EPDLKvbdaaVdepPw +EObkKvbdXFyZtAOs +EPDLKvbdbKlFnnDA +DncLKvbdqGEFTuaI +EOcKjvbdqFcdsvAh +EPCkKvbdcSbkUDjB +DncKjvbdrJAJeMoF +EObjjvbdZMRdUNkm +DncKjvbdCEPaVjNG +DnbjjvbdptUHSSLU +EPCkKvbdUtNTekuj +DoCkKvbdVqmwadlD +EObjjvbdCIkBjiFj +EOcLKvbdbVCGwkUI +EObjjvbdFfKSNiTq +EPDKjvbdJXtCHlRQ +EPDKjvbdTvMQJtBR +EPCjjvbdZMRdTnLm +EPCjjvbdemGXGljL +EPDKjvbdxmsHxTJD +EOcKjvbdiVZdvrVC +DnbkKvbdmSZUzSdJ +EPCkKvbdUaCRTRSZ +DncLKvbdoAKztIDn +EObjjvbdHffyyXxH +EPCkKvbdaMjbStmH +EObjjvbdZyDinDMS +DoDKjvbdjlbMZdgP +DncKjvbdQwOEDMHc +DncLKvbdGLFSbgmV +EPCkKvbdjvXOECXw +DoCkKvbdSBceLhyL +DoDLKvbdEvYpPmKF +EOcKjvbdrbFlkfkZ +EPDKjvbdTvMQJsaR +DncLKvbdjvXNcaxX +DnbkKvbdijGIKNXr +EOcLKvbdiHJcZViu +DoCjjvbdlqxuZsDi +DnbkKvbdhuZeXRtb +DncLKvbdACqxJzJQ +EObjjvbdjlbLydgP +EPDKjvbdxZgefXdr +EOcKjvbdSCEFLiYk +EObjjvbdKefICApu +EPDKjvbdjlbLyeGo +DncLKvbdbAvEepQX +EPCkKvbdrSVKnLAm +DncLKvbdZjTHpHBf +DnbkKvbdCWzdIdov +DoDLKvbdxUmFQyLn +DnbkKvbdxVNFRYkn +DoCkKvbdZisHpHCG +DoDKjvbdwkXEHzzG +DoCjjvbdSPtHJedX +EOcLKvbdBiLBkIej +DoCkKvbdiLdcnVCy +DnbkKvbdlhcsqUqa +EPCjjvbdwzIGFxEr +EPCkKvbdySmiNRag +DncLKvbdHEKujCKK +EPDLKvbddeOrCXDK +DoDLKvbdNGbolpUk +EOcLKvbdtlYXBTaX +EOcLKvbdqwQLcIyR +EObjjvbdIrxaSlxM +EObjjvbdbrcKtEKB +EOcKjvbdpxngfqDx +DoDLKvbdKfFhCApu +DoDLKvbdJvUfEEfi +DncKjvbdsQWOibuf +DoCjjvbdHgGyxxXg +DoCkKvbdZHWdAPTJ +DncKjvbdauBgYLTh +DoDLKvbdJYUCIMRQ +DncKjvbdbrbjtEJa +DnbjjvbdemFwHNJk +DnbkKvbdBvzcheQW +EPCkKvbdJqZePGNe +EPCkKvbdSKxeuGkT +EPDLKvbdIryBTMxM +EPCjjvbdwWlAuaVu +EOcLKvbdyTOJNRbH +EPCjjvbdQvmdClID +DnbjjvbdyTOJMqag +DncKjvbdrXQMDJYq +EPCkKvbdGdLVjBij +EOcLKvbdjJehJmXr +DnbkKvbdCJKakJGK +DoCjjvbdLrWlzUpz +EPCkKvbdhzVFlRNf +DoCjjvbdRDcApRES +EObkKvbdzROmJKXA +DncKjvbdxUmFRYlO +EPCkKvbdURQoVVIN +EPDLKvbdVZHtZkPO +DnbkKvbdatafwjsh +EObjjvbdNrtWGdtp +DoDLKvbdBiLCLJFj +EOcKjvbdmgFXmOHZ +EObjjvbdZRMeImEq +DoCjjvbdiMEdNtcZ +DnbjjvbdgFkzNfgA +DnbjjvbdGKdsDHmV +DncLKvbdIxUBhMRQ +DoDLKvbdjSzhrjiz +DoDLKvbdpyPHgRDx +DoDLKvbdqYoIGpdY +DoCkKvbdUQqPUuHm +EPCkKvbdBraDTfXS +DncKjvbdNrtWGeUp +DncKjvbdJqZdnenF +EPCjjvbdCWzdIePv +DoDKjvbdrXPlDIxq +EPDKjvbdauBgYLUI +EPCjjvbdQmXbYnUz +DoCjjvbdGGJqnJUR +EPDLKvbdkVvnEBww +EPCjjvbdTukoitBR +DoCjjvbdRkZFtgLT +DoDKjvbdEuyPpMie +EPCkKvbdSLYfUgLT +DnbjjvbdIwtBglQp +DnbkKvbdznpQeDMY +EOcKjvbdznpRFCkx +EPDLKvbdtumwjQsA +DoDLKvbdBhjajiGK +DoDKjvbdhlFDmuDZ +DnbkKvbdqquKnKaN +DncLKvbdMowqVmfs +EOcKjvbdqrUjnLAm +EObjjvbdqwQMDIyR +EPDKjvbdnCKXYPOV +DnbkKvbdHffyyXxH +DoCjjvbdlZSrTZGt +DoDLKvbdznpRFDMY +EPDKjvbdWWiXvDdg +DoDKjvbdRWnEClID +DnbjjvbdJcKCqKDY +EPDKjvbdJbjDQicY +DncLKvbdhaoDEwRR +DncLKvbdvAdZSoEh +DncLKvbdeEnrCWbj +DoDKjvbdVvhwvDeH +EOcKjvbdVAapsQqy +EPCkKvbdxnTIYSiD +EPCkKvbdrouoJbuf +EObjjvbdePEsKtUS +EPDLKvbdirziSkJz +DnbjjvbdhaoCdvqR +EPCkKvbdGZVVAdYC +DncKjvbdtbbuWuoP +DoCkKvbdLFehCBRV +DoDKjvbdLZRJrztf +EObkKvbdkHflGFmk +EOcKjvbdJYUCIMQp +EPDLKvbduCcVXWOo +EPCkKvbdptTfqqkU +DoDKjvbdGQATWgGZ +DncKjvbdEztQeMCi +EObkKvbdZtJJZETO +DoCjjvbdZsiIyETO +EObkKvbddndrjstS +EOcLKvbddeOqbXDK +DnbkKvbdCTBDUGXS +EPDKjvbdQlwayOUz +EPCjjvbdlqyUzTEJ +DoDLKvbdhtydvrUb +EOcKjvbdlZTSSyGt +EOcKjvbdmJDtQuSB +DnbjjvbdtSqsZZeD +DoDLKvbdUaBpsRSZ +EPDKjvbdLGFhBaRV +DnbkKvbdSBcdkhxk +DoCjjvbdDoDKkXDE +DoDKjvbdwyhFfYFS +EPDKjvbdOEctJIjd +EPCjjvbdEObjkWcE +EPDLKvbdhtzEvquC +EObkKvbdZjShQHCG +EPCjjvbdmIctQuRa +EPCkKvbdVwIwucdg +EOcLKvbdADRxJzJQ +EOcLKvbdWWiXvEEg +EPCjjvbdTAFIhBoE +EPDLKvbdZLqdTnMN +EPDLKvbdZQldhmEq +EOcKjvbdLLBIWAJy +DncLKvbdrMzKYlIJ +EPCjjvbdzitoodSt +EPDLKvbdLFehCAqV +DoCkKvbdrMyiyMHi +EPDKjvbdkVvmcaxX +EOcKjvbdmpZxvKxb +EPCkKvbdliDtRUrB +DncLKvbdkxsRsYft +EPDKjvbdTqROuVHm +EPCjjvbdSQTgJedX +EPDLKvbdHlBznXRL +DncKjvbdQdDBQRDr +EPDLKvbdliDsqVRa +DoDKjvbdjgflFfOL +EPDKjvbdeEoSCWbj +DnbkKvbdfSBWzkcP +EObkKvbdmIcspuSB +EPCjjvbdvAdZTPEh +DoCkKvbdIGfyxwxH +DnbjjvbdWWiYWDeH +EObkKvbdZQleImFR +DncLKvbdQwNdCkgc +EOcLKvbdQdDBPqES +DnbjjvbdrpWPJbuf +DoCkKvbdTulQKTaR +DoDLKvbdeUAUASlv +EPCjjvbdZQmFJNEq +DncLKvbdVBBqSqSZ +EOcKjvbdqceJPmvB +DncLKvbdZtIiYcrn +EOcLKvbdJSxaSmYM +DoCkKvbdqqtkOLBN +EObkKvbdgFkymfgA +DnbjjvbdVqmwadlD +DncLKvbdsBfNMGkZ +EPDKjvbdEPDKjwCd +EObjjvbdHDjvKBjK +DncLKvbdCTAbsevr +EObkKvbdFxuUaEXb +DoCjjvbdcyyQYZQb +EObjjvbdZsiIxdSn +EPDLKvbdZQmEhmEq +DnbkKvbdxnTIXriD +DncKjvbdfHkVrORH +EOcKjvbdddoSCXDK +EPCkKvbdhanbdvpq +EOcKjvbdRyihTDWA +DnbjjvbdajkeoODA +EOcLKvbdlhdTpuSB +EPDLKvbdhgJbxuiu +EPCjjvbdnHFXmNgZ +EPCkKvbdpecdsvAh +DnbkKvbdVZIUZjnn +DncKjvbdbAvFGPpX +DnbjjvbdkMalZeHP +EOcLKvbdYSlAmUOx +DoCjjvbdHDkWKCKK +EPDLKvbdaRecHsek +EPCjjvbdJXsagkqQ +EObjjvbdRMwbZNtz +EPCkKvbdrbGMlHKy +DncLKvbdKfGICApu +EPDLKvbdUtNTfLvK +EPCkKvbdMJCMRYAS +EOcLKvbdCJKbLJFj +DoDKjvbdfpBzvcxI +EObkKvbdYpldhmFR +EOcLKvbdSPsfiecw +DoCjjvbdHEKvKCKK +DnbjjvbdUGzmkwVe +DnbjjvbdfMfXGmJk +DnbkKvbdZoOIeEyj +EObkKvbdZnmhdeZj +EOcKjvbdTkuoBVoJ +EPCjjvbdGKdsChMu +DoDLKvbdJYTahLpp +EPCjjvbdbhmJkFwY +DoDLKvbdkIHMGGOL +EPDKjvbdZsiIxdSn +EPCjjvbdMgCpNQUk +DncLKvbdjblKqGtg +DncLKvbdOYOuzdNt +DncKjvbdTvMPjTaR +EPDLKvbdiiehKNXr +DoCjjvbdZdxGzghb +DoDLKvbdeOdsKssr +DoDLKvbddBsMrAUN +DoCkKvbdxxIjBozL +DoDKjvbddoErkUTr +EOcLKvbdwzIFeweS +DoDLKvbdREDBQRES +EObkKvbdhlEdOUby +DoCjjvbdNPxRWNgT +DoDLKvbdZLqctNlN +EObjjvbdbUbHXkUI +DnbkKvbdhtydwSVC +EPDKjvbdeUAUASmW +EObjjvbdhgKDYvJu +EOcLKvbdZnmhddyj +DoDLKvbdUVlQKUAq +DoDKjvbdDihJvXjA +DnbkKvbdZLrETmlN +EPCjjvbdxxJJbQZk +EPCkKvbdrounjDVf +DoCjjvbddiirVtzn +DoDLKvbdmttyjiqf +DncKjvbdfHjvSNpg +DoCjjvbdmRxuZsEJ +DoCkKvbdjAQGaQGj +DncLKvbdnVUzLJrG +EPCjjvbdLAjgNCXq +DoDLKvbdqmZixlHi +EPDLKvbdVUMsekvK +EPDKjvbdrMzKZMIJ +EPCkKvbdKDKCpicY +EOcLKvbdwtmEqZMO +EPDLKvbdmgFXlnGy +DncKjvbdyTNhlqbH +DncKjvbdnHFXlnHZ +DoDLKvbdTqROuUgm +DoDKjvbdRMwbZOUz +EPDKjvbdRMwbYmtz +DoDKjvbdZnmheEyj +EPCkKvbdbBWEfPow +DoDKjvbdQwNccLgc +DoCjjvbdhtzFWqtb +DoDKjvbdRotHKGEX +DncKjvbdZsiJZETO +EObjjvbdaNKbStlg +DoCkKvbdsZlQTAhO +EObjjvbdjhGlGGNk +EObkKvbdQdDBQQcr +DoDKjvbdMtrrLNAX +EPCjjvbdRotHKGDw +EPCjjvbdqZPIGqDx +EOcLKvbdiGicZViu +DnbjjvbdJvVGEFGi +DoCkKvbdKNAEZfuB +EPDLKvbdLZRJrzuG +DnbkKvbdhytfLpnG +EPDKjvbdRbEEkiYk +EOcLKvbdcJMjLFvx +DncKjvbdFfKRnItR +DoDLKvbdegjurORH +DnbjjvbdEPDKjvcE +EPCjjvbdkHgLeenL +DncLKvbdZnmheEzK +DncKjvbdZjSgpHCG +DoCkKvbdbBVdeoow +DoDLKvbdZQmEhleR +EPDLKvbdpxoHfpcx +EPCkKvbdSPtGjGEX +DncKjvbdRbDeLhxk +EObkKvbdrpWOibvG +DnbjjvbdfIKurNpg +EPDLKvbdZyEKNbkr +DoDLKvbdwXMAvBWV +EOcLKvbdWWiXvDdg +EOcKjvbdelfWfljL +DncLKvbdjuvnEBxX +DncLKvbdliDspuRa +EObjjvbdVTlsekuj +DoCjjvbderAvzlDP +EPDKjvbdNeDtIhkE +Dnbjjvbddwyssqez +EObkKvbdGGKRnItR +DoCkKvbdHbLzEzAD +EPCkKvbdTvMPjUBR +EObjjvbdTAEiIBoE +DoCjjvbdRjxfUgLT +DnbkKvbdnUuZkKRf +EPDLKvbdjmBkydgP +EObkKvbdNeDsiIjd +DncKjvbdrounjDWG +DnbjjvbdrWokbhxq +DoDLKvbdsPvPKDWG +DncKjvbdZdwfzgiC +EOcLKvbdZLqdUNlN +DoCjjvbdkDMLRHVH +EPDKjvbdirziSjiz +EObkKvbduDDUvuno +DoDLKvbdkHgMGGOL +DncLKvbdhkdcmuCy +EObkKvbdCJLCLIej +DnbkKvbdeFPRawCj +DncKjvbdsQVoKDVf +EPDLKvbdRXNccLhD +EObkKvbdFxttaDxC +EObkKvbdqrVKnKaN +EPCjjvbddoEsKtUS +EObjjvbdzaAOffbM +DoCjjvbdWSNxBdlD +EPCjjvbdqlzKYlIJ +EOcLKvbdQdDApRDr +DncKjvbdczZPwyRC +EOcLKvbdtlXwBUBX +EOcKjvbdmgFYNOGy +DoCjjvbdKVtfEFGi +EObkKvbdrNZjZLgi +EOcKjvbdliETqVSB +EOcKjvbdbVBgXkUI +DncLKvbdNHDPmPtk +DnbjjvbdjlakzEfo +EOcKjvbdVUNTfLvK +EPDKjvbdTXjkmzjx +DncLKvbdrylQTBIO +EPCkKvbdJpzEoGOF +DncKjvbdFeiqmhtR +DncLKvbdZnnJFFZj +EPDLKvbdlrZUzTEJ +EPDKjvbdLFfICBRV +EPCjjvbdcyxpXyRC +DoDLKvbdQdCaQQcr +DncLKvbdZsiJZDsO +EObjjvbdzQoNIjXA +DncLKvbdVqmxBdlD +DoDKjvbdRjxfUgLT +EObjjvbdWIYVxHYz +DoCkKvbdIGfzZXxH +DncKjvbdxsNhlqag +DoDKjvbdFWYopNJe +EPDKjvbdVBCRTRSZ +EPDKjvbdwyhFfXeS +DoCjjvbdziuPocsU +EPDKjvbdYSkaNUPY +EObjjvbdznopdcLx +EOcLKvbduMYWaUBX +EPDKjvbdnPzZWKyC +EObkKvbdZxcimbkr +EObkKvbdBhjbKiFj +EOcLKvbdjuwNdBww +EPDKjvbdmbKWxOnV +DoCkKvbdnHFYNNgZ +DoDLKvbdrMzKYkhJ +EOcLKvbdqdFIpNvB +EPDKjvbdcScKtDjB +EOcLKvbdygZMAMdw +EOcLKvbdsCGNLgLZ +DoDLKvbdaMkBsUlg +DncKjvbdlZSqsYft +DnbkKvbdnVUzLKRf +DoCkKvbdnHFXlmgZ +EPDKjvbdxZgfGYFS +DoCkKvbdxwiKCPzL +DnbkKvbdBcpAvKMf +DoCjjvbddZyQXxpb +DncLKvbdzQnmIjXA +EPDKjvbdFWZQQMjF +DnbjjvbdMgDQMpUk +DncLKvbdOFDtIiKd +DoDKjvbdKNAEZfta +EOcKjvbdhyuGMQmf +DnbjjvbdZnmhdeZj +DncLKvbdhbOcFXRR +EOcLKvbdvBEZSoEh +EOcKjvbdYkrEUOLm +EPCkKvbdNrtWGduQ +EPDKjvbdZjSgpHCG +EObkKvbdyzdmrHhh +DoDLKvbdznpQdblY +DncLKvbdZshhyDrn +DnbkKvbdjvWmdCYX +EOcLKvbdAMgxsWzY +DnbjjvbdwzIGGXdr +EPDKjvbdrNZixlIJ +DoDKjvbdsQWOicVf +DoDKjvbdjuvmdBxX +EObkKvbdzHZMANFX +DoDLKvbddjJqutzn +EOcKjvbdwNWAMdFN +DnbkKvbdTqRPUtgm +EOcKjvbdVYgtZkOn +EPDKjvbdNGcPlotk +DnbjjvbdJbjDRJcY +EPDLKvbdZtJIyESn +DoDKjvbdtcCuXVoP +DoCjjvbdZMSETmlN +DoCjjvbdgGLzNfgA +EPDKjvbdxKvcgzyf +EObjjvbdrMzKZMIJ +DncLKvbdMoxQumfs +EPCjjvbdbhlikFvx +DoDLKvbdRadFMJYk +DnbjjvbdHgGzYxYH +EObjjvbdVZHtZkOn +DnbkKvbdakLfPNcA +DoCjjvbdmfeXmOGy +DoDLKvbdrRtjmjaN +DnbjjvbdUxgsyjoO +DnbjjvbdbhlikFvx +EPDLKvbdRbEFMJYk +EOcKjvbdRXNcblHc +DnbkKvbdqmZixlHi +DoCjjvbdrzLpTBIO +DoCjjvbdILaznXRL +EPDLKvbdRjyGVGkT +EOcLKvbdehKurOQg +DncLKvbdYkrDsnLm +DoDKjvbdZisHpGaf +DncLKvbdpyPIGpcx +EOcLKvbdijFhKNYS +EOcKjvbdMuSqkNAX +EObjjvbdajlFnnDA +EOcKjvbduLxXAsaX +DnbjjvbdiiegjMwr +EPCkKvbdiMEdNuCy +EPCkKvbdqTtHSRkU +EPCkKvbdIryBTNXl +DncLKvbdFjdrcHlu +EPDKjvbdZoOIeFZj +DncLKvbdcbTNSATm +DoDKjvbddePSCWcK +DoDKjvbdZsiJYcsO +DoDKjvbdpeceTuaI +EOcKjvbdjhHMGFnL +EOcLKvbdjcLkRGtg +DnbjjvbdCJLCKiFj +EPDLKvbdZsiIxdSn +EObkKvbdVTlsekvK +EObkKvbdCTAcTewS +DoDLKvbdOYOuzcnU +EPCkKvbdiUydwRuC +DncLKvbdGQATXGey +EPDLKvbdDjIJvXjA +DncKjvbdpxoIHQdY +EObkKvbdZMSDsmkm +EOcLKvbdBvzchdov +EOcLKvbdKRZeOenF +DnbkKvbdwzIFfYEr +DnbkKvbdSKyFuHKs +EPDKjvbddCSlrATm +EObkKvbdSCDeMIyL +EPCjjvbdsCFllGjy +DnbjjvbdHgGyyYYH +DncKjvbdjKFgilwr +DncLKvbdEvYoomJe +EObkKvbdlhdTpuSB +DoDKjvbdWWiYVceH +DnbjjvbdLGGHbBQu +EObkKvbdOXoVzcnU +DnbjjvbdbsCjtDjB +DnbjjvbdQwOECkhD +DnbjjvbdMgComQVL +DoCjjvbdRotGjFcw +DnbjjvbdmajWxOmu +EPCkKvbdbPfgDkzd +Dnbjjvbdpxngfpcx +DoCkKvbdBraCtGWr +DncKjvbduDCtwWPP +EPDLKvbdYzcFrKVy +EObjjvbdbVBgXkTh +DnbkKvbdyYIibPyk +DncLKvbdUVlPitAq +EObkKvbdbKlGOnDA +DnbjjvbdrJAKFNPF +EPDLKvbdLAjgMbYR +DoCjjvbdSxLLmzjx +DncKjvbdeEnqawCj +EObkKvbdFWZQPmKF +EOcKjvbdGdKvJbJj +DnbkKvbdjcLjqHUg +EPCjjvbdQvnDcLgc +EPCkKvbddoFTLTtS +DnbkKvbdZtIhyDrn +EPDKjvbdBvzdIdpW +EObjjvbdEYYLstUM +EPCkKvbdyzdnSHiI +EObjjvbdZLqdTmlN +EPDLKvbdIHHZyXwg +DoCkKvbdbVBfxKtI +DnbkKvbdMpYRWOGs +EOcKjvbdczYoxYqC +EPCjjvbddwytTqez +EPCjjvbduaDySoEh +EObkKvbdTJZiqAAl +EObjjvbdmoyyWLYb +EPDKjvbdnPyxukZC +EObjjvbdrWolDJZR +DoCkKvbduCbtvvPP +EPDLKvbdJbicQibx +DncLKvbdHELVibJj +DnbjjvbdKefHbAqV +DncLKvbdsZkpTBHn +DoDKjvbduCcVXWOo +DnbkKvbdidkGtoAO +DnbjjvbdrEFIonWB +EPCkKvbdfpBzwEYI +DncLKvbdwuNFRZMO +EPDLKvbdrounjCvG +DncLKvbdxxJJaoyk +EPCjjvbdJmADzHUa +EPDLKvbdqGEFTvBI +EPDLKvbdyOShYTJD +EPCjjvbdJutecdfi +EPDLKvbdIMBznXQk +DncKjvbdmoyxvKyC +EPDLKvbdrXQMChyR +DoCkKvbddwytUSFz +DncKjvbdZjTHofbG +EPDKjvbdGcjujCJj +EPCkKvbdvBEYsOeI +DncKjvbdCTAcUGWr +EPCkKvbdmbKWwnnV +DnbjjvbdpxnhHREY +EObjjvbdlZTRsYft +DoCjjvbdhkdcmtcZ +EObjjvbdMfcPmPtk +EPCkKvbdJXtCHkpp +DnbjjvbdrSUjmkBN +EOcLKvbdYSlBMtOx +EObjjvbdznopdbkx +DncLKvbdddoSCXDK +DoCjjvbdOXnuzcnU +EPCkKvbdZGwEAOsJ +EOcKjvbdauCGwjtI +EPDLKvbdNHDPmPuL +EOcLKvbdNHCpMpUk +DoCjjvbdmSYtysDi +DncKjvbdFjeTDINV +DncKjvbdNrtWHFUp +EPCjjvbdmJETqUqa +DncKjvbdEzsqEkcJ +EOcLKvbdmoyyVjyC +EOcLKvbdZMSETnMN +EOcLKvbdBsAbtFvr +EPCjjvbdJutfEFHJ +DoCkKvbdiBoDEwRR +EPDLKvbdZQmFImFR +EPDLKvbdpfDdsuaI +DnbkKvbdmbKXYPNu +EObjjvbdjKGHjNXr +EOcLKvbdpssgSRjt +DoDLKvbdKRZePGOF +DnbkKvbdfekymgHA +DoDLKvbdiCOcFWqR +DnbjjvbdiHJbyWKV +DoDKjvbdsCGNMHKy +DoCjjvbdGKeSbgmV +DoDLKvbdkIGkfFnL +DncKjvbdfILWRnRH +DoDKjvbdGLEsChNV +EPCjjvbdVrNxBeMD +EPDKjvbdSLZGVHKs +EPDLKvbdQlxByOUz +EOcLKvbdMgDQNQVL +DoDLKvbdrRtjnLAm +EObjjvbdCIkBjhfK +DncKjvbdDwwlTssl +DoDLKvbdANIYsWzY +DnbjjvbdxVMdqYkn +DoCkKvbdzdynzdzQ +DnbjjvbdxsNhmRag +EObjjvbdzjVQPcrt +DoCkKvbdbBWFFopX +EPDKjvbdhfibxvKV +DnbkKvbdegjvRmqH +EPCjjvbdkNCMZdgP +EOcLKvbdmtuZkJqf +EObjjvbdemFvfljL +DncLKvbdyYIibPyk +EObjjvbdieKftoAO +DncKjvbdvOszqKoU +DncLKvbdVUNTelWK +EOcKjvbdCDoaWKMf +EPCkKvbdbsDKtDjB +EPDLKvbdmSYuZsDi +DncLKvbdwWlBWBWV +EObjjvbdkVwOEBww +EObkKvbdWSNwbFLc +DnbjjvbdZRNFImEq +DoDKjvbdrounjDVf +EPDKjvbdCJKbKhej +DncKjvbdsrrTYyeD +DoCjjvbdQvnEDMHc +DoCkKvbdGQASwGfZ +EOcLKvbdfSBWzkbo +DoDLKvbdRkZGVGkT +EOcKjvbdyXhjCPzL +EPCkKvbdbrbkTdJa +EPDLKvbdsQVnibvG +DnbjjvbdpyOgfpdY +DoDLKvbdtunXiqTA +EPDKjvbdqGDdsvAh +DncKjvbdjEkHUoAO +EPCjjvbdGQATXGfZ +EOcKjvbdKDJcRKCx +DncKjvbdhyuGMQnG +DoCkKvbdYkrDsnMN +DoCjjvbdaNKbSuMg +EOcLKvbdrykpTAhO +DnbkKvbdrSUkNkAm +EPCjjvbdwzHeeweS +DoDLKvbdSBdFMJYk +DnbjjvbdqUUGrRjt +DoDKjvbdzitoocrt +EPDKjvbdxnShXriD +DoCkKvbdVviXvEEg +EObkKvbdFxuUaDxC +EObkKvbdygZMAMeX +DnbjjvbdiifHilxS +EPDKjvbdZxcjODMS +DoDLKvbdWWhxWEFH +EPCjjvbdzoQQeClY +EOcLKvbdptUHRqjt +DoDKjvbdVviXudEg +EPDLKvbdUQpnuVHm +EPCjjvbdwzHfFweS +EOcLKvbdZxcjNbkr +EObkKvbdZnmhddyj +DoDLKvbdvlvANDdm +EOcKjvbdMfbolpVL +EObjjvbdbAvFFpQX +EOcKjvbdBdPaWJlf +DncKjvbdqceIonWB +DoCkKvbdtcDVWvOo +DoCkKvbddoFTKssr +DoDKjvbdaMkBruMg +EPCjjvbdEuyPolie +DnbkKvbdOEcsiJLE +DncKjvbdHlBznWqL +EPDKjvbdbhlijewY +EObjjvbdfoazwDwh +EOcLKvbdaNKbStlg +DoCkKvbdqdEiQOWB +DoCkKvbdTvLpKUBR +DncKjvbdkNBkzFHP +EObkKvbdFkErcHlu +DoCkKvbdZshiYcrn +EObjjvbdEJhJvYKA +DnbkKvbdOTUWHFUp +DoDLKvbdVhXvXfxz +EPDLKvbdBdPaWKMf +EObjjvbdFejRnJTq +EPDLKvbdULvPBVoJ +EPDKjvbdJzpFwdAN +EPDKjvbdqwPkbiZR +EPDLKvbdrEFIomua +EOcLKvbdijFhJlxS +DnbkKvbdYkrEUOLm +DnbkKvbdIMBznXQk +DncKjvbdZisHpHCG +EPDLKvbdzjUopESt +DnbjjvbdzjUpPcrt +EPDKjvbdqZOgfpdY +DoDKjvbduLxXAsaX +EObkKvbdrMyiyMHi +EPCkKvbdqTsfqrKt +DoDKjvbdTfznMXVe +EObkKvbddoErkUTr +EOcLKvbdHELWKCJj +DncLKvbdUVkpJtAq +EPCjjvbdRMxBxmtz +EPDKjvbdjEjftoAO +EOcLKvbdYkrDsmkm +DoDLKvbdajlFoNcA +DoCjjvbdmJDtRUqa +EPDKjvbdTqQoUuIN +DnbkKvbdtcDUvvPP +DncLKvbdrbGMlHLZ +DnbkKvbdKfGHbApu +DncLKvbdGFjRnIsq +EPDLKvbdJzpGYEAN +DoCjjvbdkySrSyHU +EObjjvbdKVtfDdfi +EPDKjvbdNrsugFUp +DoCkKvbdNxOuzcmt +DoDLKvbdDihJuxKA +DnbkKvbdzdzOzdzQ +DncKjvbdmSYuZrci +EOcLKvbdptTfqqkU +EPCkKvbdVUNTfLvK +DoCkKvbdGdKujBjK +DoCjjvbdzitopETU +DoDKjvbdqvokbiYq +EPDLKvbdGFjSOJTq +DoDKjvbdliETqUrB +DoDKjvbdZisIQGbG +DoCjjvbdnQZyWLZC +EOcLKvbdGdKujCJj +EPCkKvbdaRfDIUGL +EOcKjvbdauCHXjtI +DnbkKvbdbQHHDkzd +DoCjjvbddZxpYYpb +EObkKvbdbBWEepPw +DncKjvbdSLYfVGkT +EObkKvbdVgxVxHYz +DoCjjvbdfpBzwEYI +DoDKjvbdmfdxMmfy +DncKjvbdhancEwRR +DnbkKvbdEASJMzXX +EObjjvbdmfdwmNfy +DnbjjvbdhbOcFXQq +DoCjjvbdVgxVxGxz +EPCkKvbdQcbaQQdS +EPCjjvbdhbObeXRR +EPDKjvbdePFSkUTr +EPDLKvbdMoxQumgT +DoCkKvbdIBkydzAD +EOcLKvbdcasMrAUN +DoCkKvbdUQqOttgm +DnbkKvbdelevfljL +EObjjvbdZeXfzgiC +EPCjjvbdQYmAGrrK +EObjjvbdxZhGFxFS +EObjjvbdJuuGEEgJ +DoDLKvbdEARhlyvw +EPDKjvbdZdxGzhJC +DoCkKvbdzRPMhiwA +DoCkKvbdZxcinClS +EOcKjvbdFyVVBEYC +EOcLKvbdtbcUwVoP +DncLKvbdlZSrTYft +EObkKvbdaaVeGPow +DncLKvbdEKIJvXjA +DncLKvbdbhljKfWx +EObkKvbdVhYVxGxz +EPDKjvbdmpZxukZC +DoDLKvbdnBivxOnV +EObjjvbdRbEEkiZL +EPCkKvbdZRNFIleR +DoDLKvbdZyEJmblS +DncKjvbdkIGkefNk +EPDKjvbdRkZGVGjs +DnbkKvbdiHJbyVjV +EPDLKvbdFjeSbglu +DncLKvbdqFcdtVaI +EOcKjvbdGYuVAdYC +DoCjjvbduaEZSneI +DnbjjvbdKWVFdFHJ +EObjjvbdGdLVjCJj +DnbkKvbdpssgSSKt +DoCjjvbdssRryZdc +EPDKjvbdZisIQHCG +EOcKjvbdCIjajhfK +DoDKjvbdrafNMGjy +EObkKvbdgQBzwEXh +DnbjjvbdgQBzwDwh +DncKjvbdCEQAvKMf +EPCkKvbdiCOcFWpq +EPDLKvbdLFfHbBQu +EPCjjvbdJTYaSmXl +EPCjjvbdRjyFuGkT +DoCkKvbdjFKftoAO +DncKjvbdmaiwXoNu +DoCjjvbdVZITyjnn +DoDLKvbdDxYLtUTl +DnbjjvbdqvpLcJYq +EOcLKvbdlqxuZsDi +DoDKjvbdZshhyDsO +DoCjjvbdGFjSOIsq +DnbkKvbdcScKtEKB +EPCjjvbdMpXqVmfs +EPCjjvbduoTzpjoU +DoDLKvbdYkqctNkm +EObkKvbddoErjstS +DnbjjvbduLxWaUAw +DoCkKvbdRXODbkgc +DoCjjvbdwzIGFweS +DoCkKvbdZyEKOClS +EObjjvbdiGjCxvJu +EObkKvbdbiMijewY +DoDKjvbdqrVKmkBN +DoCkKvbdFyUuBEYC +DoDLKvbdNsTufduQ +DoDLKvbdEPCkKvcE +DoDLKvbdNQYRWNgT +DnbjjvbdNrtWGeUp +DoCjjvbdPxmAGrqj +EPDKjvbdKNAEZgVB +EPDKjvbdmttzKjSG +EPDKjvbdssSSxydc +DoCjjvbdTlWPAuni +EObjjvbdDHLegAzc +EObjjvbdXnRAXtvU +EObkKvbdKfFgaaQu +EOcKjvbdhtzFXSUb +EPCkKvbdJTZAsMwl +EOcKjvbdQYmAGsSK +DoCkKvbdjhHLeemk +EOcLKvbdiifIJmYS +EPDKjvbdLrWlzVQz +DoCjjvbdxsOIlrBg +EPDLKvbdNPxQvNfs +DnbkKvbdIGfyxwxH +DoCjjvbdjKFhKMwr +DnbjjvbddjKSVtzn +DoCjjvbdZoNiFEzK +EPCjjvbdeFOqavcK +DoDLKvbdEuxpQMie +EObjjvbdZjShQHCG +DoDLKvbdZMSDsmkm +DoDLKvbdGYtuBEYC +EPCjjvbdUaBprqRy +EOcLKvbdmozZWLZC +DncLKvbdUWLpKUBR +EPCjjvbdqYnhHQcx +DoDLKvbdUaBprpqy +EPDKjvbdrzMQSaHn +DnbjjvbdGdLWKCJj +EObkKvbdfILVrNqH +EPCjjvbdehKvRmqH +EPDKjvbdOSsvGeVQ +DncLKvbdxxJJaozL +EPCjjvbdZLqctNkm +EOcLKvbdZxcinCkr +DncLKvbdkWWmcbXw +DoDLKvbduCcVXWPP +DncLKvbdyTNhlqbH +DncKjvbdYTMAlsoY +DoCkKvbdRosfjFcw +EPDLKvbdDwxLsstM +EOcKjvbdlZTRryHU +DoCjjvbdNGbpMpVL +EOcLKvbdYgWdAOri +DoCjjvbdDxYLstTl +EObjjvbdIwtBglRQ +EOcKjvbdvPTzpkPU +DoCjjvbduLxXAtBX +DoCjjvbdiLeENuCy +DnbjjvbdUaCRSqRy +DnbjjvbdYpmEhleR +EObjjvbdsPvOjDWG +DoCkKvbdLFfICApu +DncKjvbddxZstRez +EPCkKvbdFyVVAdXb +DoCjjvbdFyVVBDxC +DoDLKvbdFeirNiTq +EPCjjvbdxnSgxTIc +EOcKjvbdAMgySwZx +EObkKvbdkyTRryHU +DoCkKvbdMRwMzUpz +DnbjjvbdCWzdJEov +DoCkKvbdUyITzLPO +EPCkKvbdcSbjsdKB +DoCkKvbdqceIonVa +DoCkKvbdjmCMZeGo +DncKjvbdfMewGljL +EObkKvbdpfEEtVaI +DoDLKvbdczZQYYqC +DoDLKvbdRNXbYmtz +EObjjvbdTvLojUBR +EPCkKvbdtbcVXWPP +DncLKvbdmSYuZrdJ +DoDLKvbdTukpKUBR +EPDLKvbdsQVoKCvG +EPDLKvbdBraCtFvr +EPDLKvbdZQmEiNEq +EPCjjvbdrzLosAgn +EPCjjvbdssRsZZdc +DncKjvbdbAudepQX +DncKjvbdcTDKscia +DncLKvbdlqyVZsEJ +EOcLKvbdbVCHXkTh +EObkKvbdYTMBMsnx +DnbjjvbdULvPAuoJ +DoCjjvbddtAUASlv +DoDKjvbdxUmEpxkn +DncKjvbdQwOEDLgc +DoCkKvbdSPsgKGDw +DncKjvbdiCOcFXQq +EPDKjvbdRkYfUfkT +EObkKvbdKCjDRJcY +DoCjjvbdZLqctOMN +EPCjjvbdUWLpKTaR +EPCjjvbdLqwMzVQz +DnbjjvbdnBivxPNu +EObkKvbdRpUHKFdX +EPCjjvbdeATqNXif +DoCjjvbdfILVrOQg +DoDKjvbdNrtVfeUp +EOcLKvbdNUrrKmAX +EPCjjvbdrbFllHLZ +DncKjvbdkDMLQgUg +DoCkKvbdVvhwvDeH +DnbjjvbdKeegaaRV +DoDKjvbdcJMjKfXY +DnbjjvbdZtJJYcrn +DoDLKvbdyqOliJwA +DoDLKvbdMgDPmPuL +DoCkKvbdHffzZXxH +DoCjjvbdZxdKNblS +EPDKjvbdkDLjqGtg +EPDKjvbdYzbeqjVy +DncLKvbdTppnttgm +EObkKvbdVYgtZjnn +EPCjjvbdzaAOgHCM +EOcKjvbdcyxoxZRC +EPDLKvbdxnSgxTJD +EObkKvbdfMfXHNJk +EPDKjvbdunszpjoU +EObkKvbdFfKRmhsq +EOcLKvbdhtydwRtb +DoDLKvbdYkrDsnLm +EPDLKvbdGGKSOItR +EPCkKvbduDCuXVno +EPDLKvbdrEFJQOVa +EPDLKvbdIjEAKQGd +EObjjvbdIryArmYM +DoDLKvbdYkqctOMN +EPCkKvbdiZtekqOG +DncKjvbdzdzOzeZp +DoDLKvbdbiNKLFwY +DnbkKvbdlhcsqUrB +DnbkKvbdKyRJrzuG +DoDKjvbdOFDtIiKd +DnbjjvbdvvlBWBVu +DnbkKvbdlrZUyrdJ +EObkKvbdxZgeewdr +DncKjvbdegkVrNpg +DoCjjvbdrJAJeNPF +EObjjvbdmfeXmOHZ +DoCjjvbdNPwqVmfs +DnbjjvbdnPzYvLZC +EPDKjvbdZshiYcrn +EOcLKvbdhgJcYvJu +DoDLKvbdXrlAmToY +DnbkKvbdwWlAvBVu +DnbkKvbdjvWnEBww +DoDLKvbdTYLLmzjx +EOcKjvbdDihJuxKA +DncLKvbdTfznLvue +DoCjjvbdVgwvXgYz +EObjjvbdsBfMkgKy +EPCjjvbdUaBqTQrZ +DnbjjvbdbhmJkGWx +EPCjjvbdLBLGmCYR +DoDKjvbdwjwEHzyf +EPDLKvbdegkVrNpg +DoCkKvbdJpzEnfOF +EPCkKvbdFejSOItR +DnbjjvbdTqQnuUhN +EOcLKvbdUMVoAvOi +EPCkKvbdSCEFLiZL +EPCkKvbdnCKXYPNu +EPDLKvbdZyEKNbkr +DncLKvbdZisIQGaf +EObjjvbdGLEsDHmV +DoCjjvbdBcpAujNG +EObjjvbdZRNFIleR +DnbjjvbdVrOXaeLc +EPCjjvbdHELViaij +EOcLKvbdqcdhpNvB +EPCkKvbdiZuFkqOG +DoCkKvbdOSsufeVQ +DoDLKvbduoTzpjnt +EOcLKvbdTqRPUuHm +DoDLKvbdCDpAuilf +EOcKjvbdZMSDsnMN +DoDLKvbdYqNFJMeR +DnbkKvbdbAvFFpPw +EOcKjvbdVqmwaeMD +EPCkKvbdUyHsyjnn +EPCjjvbdKeehBaQu +DoCjjvbdZshiYdTO +EObkKvbdTvMQJsaR +EPCjjvbdjblKqHUg +DnbkKvbdYlSDtOMN +EObkKvbdrWpMCiZR +EOcKjvbdUGzmlWue +DncKjvbdFyUuAcwb +EPCkKvbdLZQjSztf +EPCjjvbdfjfzbfAE +DncKjvbdFWZQQMie +DoCjjvbdVgxVxHYz +EOcKjvbdWWhxWEFH +DoDLKvbdUWLoitAq +DoDLKvbdzaAOffbM +EOcLKvbdrXPkbiYq +DoCkKvbdYzberKVy +DncLKvbdIMBznWpk +EPCkKvbdEPCkKwDE +DnbkKvbdWWiYVcdg +DoCkKvbdCWzchdpW +EOcLKvbdjvXNcbYX +EPDLKvbdSxLMNzjx +DnbjjvbdhficYuiu +DncLKvbdvmWAMdEm +EObjjvbduaDyTOdh +DncKjvbdwWlAvBWV +DoDKjvbdVviYWDeH +EOcKjvbdNsUWGdtp +DoCjjvbdzjVPodTU +EPCkKvbdmIcsptqa +EPDLKvbdIHHZxxYH +EPDLKvbdUyIUZkPO +EObkKvbdCDpBWJlf +EPDKjvbdWSNwaeMD +DoCjjvbdACrXjZhp +EPDLKvbdwuMdqYlO +DnbjjvbdHlBznWpk +DnbjjvbduaDyTPEh +DnbjjvbdwuNFRZLn +EObjjvbdajkfOnDA +DnbkKvbdWWiYWEEg +EPDLKvbdffLymgHA +EOcLKvbdkDMKpfuH +EPDLKvbdMoxQvOHT +DnbkKvbdbKkenmcA +DoCjjvbdhytfMRNf +DoCjjvbdIsZAsNXl +DoDKjvbdLiBkqYAS +DncLKvbdyzdmrHiI +DnbjjvbdemFvfmJk +EOcLKvbdSCEEkiYk +DoDKjvbdbiNKKevx +DoDLKvbdaaVdeoow +DnbjjvbdNGcQNPuL +DncLKvbdQYmAGrrK +EPDKjvbdrbGMkfjy +EPCjjvbdZjShPfbG +DnbjjvbdJmADyfuB +DnbjjvbdhtzFWquC +DnbjjvbdQvmdDMID +DncLKvbdjvWnEBww +EPCjjvbdxZgfGXdr +EObkKvbdDihKWXjA +EPCkKvbdZMSETnLm +EPDKjvbdZLqcsnMN +EObkKvbdqwPlDJZR +DoDKjvbdZisIQGaf +EObjjvbdjlalZeGo +DncKjvbdxsOJMqag +DoDKjvbdOFEUIhkE +DoCkKvbdzitoodSt +DncLKvbdVrNwaeMD +DoCjjvbdezuyEiTw +EPDKjvbdiCOcEvpq +DoCjjvbdvvlAvAvV +DnbjjvbdJuuFceHJ +DoCjjvbdlYrrSyGt +EPCkKvbdfILVrNqH +DoDLKvbdxsOJNRbH +DncKjvbdIwtBgkpp +DnbkKvbdOTUWHEtp +EPDKjvbdFejRnIsq +DnbjjvbdVBCRTQrZ +EPCjjvbdiMEcnUcZ +EObkKvbdiZuGMRNf +EOcKjvbdatbHYLTh +DoCkKvbdmSZVZrdJ +DoDKjvbdqTsgRqjt +DoDLKvbdCEQBWKNG +DnbjjvbdZtJJZESn +DncLKvbdIHGzZXwg +EPDLKvbdwtmFRZMO +DoCjjvbdKDJbqJcY +EObkKvbdatbHXkUI +DnbkKvbdYqNEhleR +EObjjvbdNHColotk +EPDKjvbdegkWSNpg +DoDLKvbdRjyFtfjs +DoCjjvbddoEsKtUS +EOcLKvbdsQWOjCvG +DoCkKvbdvAcxsOeI +EObjjvbdbAueGQQX +EOcLKvbdxKwEHzzG +DoDKjvbdqTtHSRkU +EOcKjvbdOAIsUKSA +EPCjjvbdWSNxCElD +EPDLKvbdnCKWwoNu +DncLKvbdEARiMzXX +DoCkKvbdbAvEeoow +EOcKjvbdhgJcYvJu +DnbjjvbdTulPisaR +DnbjjvbdIidAKQGd +EPDKjvbdyOTIXrhc +EPCkKvbdrbFmLgLZ +EPCjjvbddeOqbXDK +DncKjvbdRacdlJZL +EOcLKvbdbsDKtDjB +EPCjjvbdUyHtZkOn +EObkKvbdyTOImSBg +DncKjvbdtbbtwWPP +EPDKjvbdKDKDRJcY +EObjjvbdhanbeXQq +EOcLKvbdvvlAuaWV +EPDLKvbdVYgsyjoO +EPDLKvbdKaKflawq +EOcLKvbdCIjajiFj +EObkKvbdUsmUGMWK +EPDLKvbdIjEAJofd +EOcLKvbdqBJFAWhE +EPCkKvbdEJgivXjA +DnbkKvbdYkqdTmkm +EPCkKvbdliDsqUrB +EObjjvbdKVtfEEfi +EObkKvbdmgFYMmgZ +EObjjvbdEARhlyvw +DncKjvbdaRecHtGL +DnbjjvbdNQYRVmfs +EOcLKvbdFfKRnJTq +DncLKvbdMgDQNQUk +EObkKvbdHgGyyXwg +EPCkKvbdCJKbKiFj +EPCkKvbdBraDUGXS +EPDLKvbdiMEcnVCy +DoDLKvbdkCkkQfuH +EOcLKvbdwtmFRZLn +EPDKjvbdKefHbApu +DnbkKvbdkxrqsZGt +EPCkKvbdfIKvRmqH +EOcKjvbdDnbkLWbd +EPDLKvbdaRebhTek +DoDLKvbdjuwODaxX +DnbjjvbdREDBPpdS +DncLKvbdjuwNcaww +EOcKjvbdbiMjKevx +EPDKjvbdqvpLcIyR +EPCjjvbdijGIKMxS +EPDLKvbdQmYCZNtz +EObjjvbdCDpAvKMf +EOcLKvbdJJdAKPgE +DoDKjvbdUxgszLOn +DnbjjvbdOEcshhjd +DoCjjvbdUaCRSprZ +EPCkKvbdxmrhYTJD +EPDKjvbdICLydzAD +EPCjjvbdKRZdoFme +EObkKvbdNdctJIjd +EPCjjvbdKVuFdEgJ +EObjjvbdrXPlDIyR +DoCkKvbdfMewGmKL +DnbkKvbdIwsahMQp +EOcLKvbdRaceMIxk +EPCkKvbdcyxoxZQb +EObjjvbdRkYeuGkT +DncLKvbdbVBfwkTh +EObjjvbdTppoVUhN +EPCjjvbdhytfMROG +EOcKjvbdUxgszKoO +DoCjjvbdGLEsDHlu +EObkKvbdegkVqmqH +DncKjvbdkMbLyeGo +DncKjvbdyzdmqghh +EPCkKvbdGFiqnIsq +EPDKjvbdpstGqqjt +EPDKjvbdYkrDsmkm +EPCkKvbdKaLGlbXq +DoCkKvbdxwiJbPyk +EPCkKvbdJcKDQibx +EPCkKvbduDCuXWPP +DnbjjvbdiGicZWKV +DoCkKvbdsPunicWG +DnbjjvbdKNAEZgVB +EPDLKvbdnPyxujyC +EObkKvbdJXsagkpp +EObkKvbdNddUIiKd +DnbjjvbdQwOEClID +DnbkKvbdFVxpQMie +EPCkKvbdVrNxBeLc +EPCjjvbdUsmUGLuj +EPDLKvbdGZVVBDwb +DoCjjvbdmRyUyrdJ +DncKjvbddZxoxZQb +DnbjjvbdGKdsDINV +EObjjvbdrafNLgKy +DoCjjvbdJbjCqJbx +DnbjjvbdlYsSTYgU +DoCkKvbdQvnDblID +DoDKjvbdssSTYzFD +DncKjvbdmozZVkZC +EPDKjvbdjbkkRGuH +DoDLKvbdxmrgwriD +DoDKjvbdfHkVrORH +EPCkKvbdJuuFceHJ +DoDKjvbdcbSlrATm +EPCkKvbdeATpmXif +DncLKvbdBiKajhej +EPCkKvbdrNZixlIJ +EPDLKvbdKVteceGi +EObkKvbdzjVPodTU +DoDLKvbdWSNxCEkc +EOcKjvbdZxcimcLr +EOcKjvbdZnnIeEyj +DnbkKvbdmbKWxPOV +EPCkKvbdZLrETmkm +EPDKjvbdnUtyjiqf +DoCkKvbdrWpLcJZR +DoCkKvbdaMkCStmH +DncLKvbdFVxpQMie +EPCjjvbdrpWOicWG +EOcKjvbdyOTIYShc +EObkKvbdqrVLNkBN +EOcLKvbdQvnDbkhD +EOcLKvbdDigiuxKA +DncLKvbddoErkTtS +DoDKjvbdRWmdDLgc +EPCjjvbdiHKDZVjV +DnbkKvbdADSYKZiQ +DnbkKvbdsPunibuf +DoCjjvbdSPsfiedX +EPDKjvbdJmAEZfta +EOcKjvbdZMRcsnLm +DoCkKvbdiLddOUcZ +EObkKvbdqqtkOLAm +DoDLKvbdYpmFImFR +EObjjvbdVhYWXfxz +DnbjjvbdMowqWNfs +EObkKvbdVgwuwgYz +DoDKjvbdDxYLsssl +DnbjjvbdZtIiYcsO +DnbkKvbdxwiKBpZk +DoDKjvbdEuxpPmKF +EOcKjvbdJcKDRKCx +EObkKvbdUtNUFlWK +EOcKjvbdjhHLfFnL +DoCkKvbdSQTgKGDw +DncLKvbdQccBQRDr +DncLKvbdILazmwRL +DoDKjvbdYTMBNUPY +DoDLKvbdKaKfmCXq +EPCjjvbdkIHMGGOL +DnbjjvbdCIjbKhfK +DnbkKvbdVgwuwfxz +EPCjjvbdwtmFQxkn +EPDLKvbdcyyQYZRC +DoDKjvbdPyNAGsRj +EObjjvbdSLYetgLT +DoDLKvbdMRwNZuQz +DncKjvbdFjdrcHlu +DoCjjvbdZyDimbkr +DnbkKvbdRXNdClID +EObjjvbdEYYLtUTl +EObkKvbdVqmxBdlD +DoDLKvbdptTgRqkU +EOcLKvbdBdPaWKMf +EPCjjvbdiBncEvpq +DoDLKvbdzQoNJKXA +DoDKjvbdUQpoUtgm +DnbkKvbdrzLpTBHn +DoCjjvbdunszpkPU +EPDLKvbdSZjHsCvA +DncKjvbdRotHJfDw +DnbkKvbdFejSOItR +EOcKjvbdeFOrBwCj +DoDLKvbdkVwNdCXw +EPCkKvbdeOdrjtTr +EPCjjvbdhuZdwRuC +DnbkKvbdfILVqmqH +DncKjvbdnPzYvLYb +DncKjvbdHgGzZYXg +DncKjvbdkVwNcaxX +DoDLKvbdOAJSsjSA +DncKjvbdOFDtJIjd +EOcLKvbdVgwvYGxz +EObkKvbdsQVnjDWG +DoCjjvbdZjShQHCG +DncKjvbdzoPpeCkx +DoDLKvbdSLZFtfjs +DnbkKvbdBsBCtFvr +EOcLKvbdFyUuAcwb +DnbjjvbdqUTfqrKt +DoCjjvbdZxdJmcLr +DncLKvbdmbJwYPOV +EObjjvbdEObjkXDE +EOcKjvbdaSFcIUGL +EPCkKvbdqYoIHQcx +EOcKjvbdfNGWgMjL +DoCjjvbdbrcKtEKB +EPCkKvbdvBDxsOdh +DnbjjvbdtcCuXVoP +DnbjjvbdrpWPKDVf +EOcKjvbdwyhFfYFS +EPCjjvbdnPyyWLZC +EPDLKvbduMYXBUAw +DoDKjvbduaDySoFI +DoCjjvbdyXiKCPzL +DncLKvbdGFjSOIsq +DoDLKvbdeEoRbXDK +DncLKvbdcTCjtDia +DnbjjvbdnUuZjiqf +DnbjjvbdjlakzFHP +EOcLKvbdwWlBWAvV +DnbkKvbdWWiXuceH +EObkKvbdemGWfmKL +EObkKvbdmuUykJrG +DoCkKvbdmozYvKxb +DncKjvbdQZNAGsSK +EObjjvbdjblKpgUg +DncKjvbdSZigsDWA +EOcLKvbdZyEJmblS +DoCjjvbdnCJwYOmu +EPDKjvbdtkxWaTaX +EPDKjvbdGZUuAcwb +DoCkKvbdyfxlANEw +EPCkKvbdTAFJIBnd +DncKjvbdZLqctOMN +DncKjvbdUMWPBWPJ +EPCkKvbdDwwksstM +EPDKjvbdEObjjvbd +EObjjvbdWXJYWEEg +DnbjjvbdpaIeAXIE +DoCjjvbdqYoIHREY +DnbjjvbdvmWAMceN +EObkKvbdLFfHaaQu +EOcLKvbdpaIeAWgd +EPDLKvbdkCkkQgUg +DnbjjvbdePErkTtS +DnbkKvbdNGbomQVL +DoDLKvbdEPCjkWcE +DoCkKvbdehLWRnRH +EOcKjvbdyXhibQZk +EOcLKvbdZyEKOCkr +DoCjjvbdkDLkRGtg +DoDLKvbdkaNPNALA +EObkKvbdrWpLbiYq +DoDLKvbdfHkVqmqH +DoDLKvbdEOcLKwCd +DoDKjvbdrykpTBHn +DncKjvbdxZgefYFS +DnbkKvbdJpzFPFnF +DoCkKvbdNGcPmPtk +EPCjjvbdhzUelRNf +EObkKvbdVTltFlWK +DoCkKvbduaDxrneI +EObkKvbdSQTgJfEX +EOcKjvbdVhYVxHYz +EOcKjvbdkCkkQgUg +EObkKvbdqUUHSSLU +EOcLKvbduLwwAtAw +EPDKjvbdZLrETnMN +EObkKvbdmttyjjRf +DoDKjvbdYqMdiMdq +DoCkKvbdkNBkzEfo +DncKjvbdiLeDnUcZ +DoDKjvbdZLrDsnLm +EPCkKvbduVnYKRTA +EPCjjvbdCIkCLJFj +EPDKjvbdssRrxyeD +DncKjvbdQwOEClHc +EPCkKvbdwXLaWAuu +EPCkKvbdUyHszKoO +EPCkKvbdJYTagkqQ +DoCkKvbdwuNFRYlO +EPCjjvbdfHkWRmqH +EOcKjvbddeOqbXCj +EObkKvbdhficYujV +EPCkKvbdmSYtzTEJ +EPCjjvbdtkxWaTaX +EPDLKvbdwygfGYEr +EPDKjvbdmpZxvKyC +DoCjjvbdpstGrSLU +EPDKjvbdUtMtGLuj +EOcKjvbdjlbLzFGo +EObkKvbdkyTSTZGt +EOcLKvbdLYpjSzuG +EPDLKvbdyXhibQZk +DncKjvbdptUHSRkU +DnbjjvbdFfKRmhtR +DoCjjvbdtbcUwVoP +EPDKjvbdhyuFkpnG +EPDLKvbdFpASwHFy +EPCjjvbdRbDeLiYk +DncLKvbdXmqAYUut +EObjjvbdqlyjZLgi +DoCjjvbdssSTYydc +DnbkKvbdTIzJqABM +EPCkKvbdxsOJNRag +EPCjjvbdlhcspuSB +EObkKvbdqUTgSRjt +EOcKjvbdOEcshhkE +EObjjvbdzjUpPdTU +DnbkKvbdvwLaVaWV +EPCjjvbdmoyyVkYb +DoCkKvbdOFETiJKd +EPCjjvbdeEnqawCj +EObjjvbdmuUzKjRf +EPDLKvbdVvhxVdFH +EPCkKvbdaSGDHsek +EPCjjvbdkySrTZHU +EObjjvbdtAGqIABS +EObkKvbdZyEJmblS +DncKjvbdyTOJMrCH +DncLKvbdFWYoolie +DoDLKvbdTvMPjUAq +EObjjvbdZLqctOLm +DnbkKvbdmIctQuSB +DoCkKvbdZGvdAPTJ +DoCjjvbdkDMLRGuH +DoDLKvbdnVUykKSG +DoDKjvbdLGFhBaRV +DncLKvbdxwiKBozL +DncLKvbdWIYWXgYz +DncLKvbdFkFSbglu +DoDKjvbdIGgZxxXg +DnbjjvbdEztRFMDJ +DoDLKvbdZQldiNEq +EOcLKvbdwWkaWAvV +DoDKjvbdLBLHMawq +DoDLKvbdkMbLzFGo +EPDKjvbdREDAopcr +DoCkKvbdZoNiEdyj +EPDLKvbddneSkUUS +DnbkKvbdSQUHJecw +DoCjjvbdZshhxcrn +DnbjjvbdRkZFuHLT +EPDKjvbdwuNEqYkn +DoDLKvbdemGXGmJk +EOcLKvbdKWVGDeGi +DoCkKvbdWSOXadkc +EObjjvbdVTmTelWK +DncKjvbdhkeDmuDZ +EPCkKvbdRWnEDMID +DnbjjvbdNQYRVnGs +DnbkKvbdTfzmlWvF +DoCkKvbdFpASvgGZ +DoCjjvbdqTsfqqkU +EObkKvbdUVkpKUAq +DoDLKvbdrRtkNjaN +EPCkKvbdrJAKEmOe +DncKjvbdIGfyyYXg +DnbjjvbdZLrDtNkm +EObjjvbdiMEcmuCy +DncKjvbdkyTSTZHU +DncLKvbdBsAbtFvr +DnbkKvbdrpWPKDWG +DncKjvbdbBWFFoow +DoDLKvbdxmsIXsJD +DnbkKvbdehLWRnRH +EObkKvbdiVZeXRuC +DnbkKvbdOTUVfduQ +DncLKvbdZjTIQHCG +DoDLKvbdOSsugFVQ +DoCjjvbdrafNLgKy +EPDLKvbdNPxRVmgT +EPDKjvbdHlBznXQk +EPCkKvbdCEQBWKMf +EObjjvbdtcDUwWOo +DoCjjvbdZMSDtNlN +DoDLKvbdvAcxrneI +EObjjvbdIxUCILpp +EOcKjvbdfSBWzkbo +EObkKvbdShzKRAAl +DnbjjvbdGZUuBDxC +EObkKvbdqlzKYkhJ +EPDKjvbdZyEKNbkr +DoDLKvbdsrrTYzFD +DoCkKvbdfSAvzkcP +DnbjjvbdqlzKYlHi +EPDKjvbdYTLaNToY +EPCjjvbdjEjgUoAO +EOcKjvbdTJZjRABM +EObkKvbdYORAXtvU +DoDLKvbdGKdrcHmV +DoDLKvbdbrcLUEJa +DncLKvbdqvpLcJZR +DnbkKvbdFeiqnIsq +EPDKjvbdZnnIeEzK +EPCjjvbdnUtzLKRf +DoDLKvbdDxXlUUTl +DoDKjvbdiMEcnUby +EObkKvbdYzbeqjWZ +DncKjvbdTvLojUAq +EOcLKvbdjuvmdBxX +DnbjjvbdzoPpdcMY +DoDKjvbdrovOibuf +DoDKjvbdFWZPomJe +DoDKjvbdqGDeUWBI +DoCkKvbdWWiYVdEg +EObkKvbdtvOXiqTA +DnbjjvbdqZPIGpdY +EObkKvbdLBKgNCYR +DoCjjvbdLBKgNCYR +EObjjvbdZsiJZESn +DoCkKvbdTqROtuIN +EPCjjvbdyfyMAMdw +EOcLKvbdptTgSSLU +DncLKvbdPxmAHTSK +DnbjjvbdRkZFtfkT +EPDLKvbdtlXvaUAw +EPCkKvbdqBJFAWhE +EPCkKvbdIidAJogE +EPDLKvbdKQydoGOF +EObkKvbdauCGwkTh +EPCjjvbdNddUIiKd +DoDLKvbdFfKRmhsq +EPCkKvbdeEnqbXCj +EObkKvbdJvVGDdfi +DoDKjvbdWRmwaeLc +EObkKvbdSCDeLiZL +EPDKjvbdDoDLLWcE +EPDLKvbdiMEcnUby +DnbjjvbdLBLGmBxR +EPCjjvbdZnmiEdyj +EObjjvbdVhXuwgYz +DncLKvbdUtNTfMVj +EPDLKvbdKaKgMaxR +DncKjvbdJcJbpicY +DnbkKvbdSKyGVHLT +DoDKjvbdzROlhjXA +DnbkKvbdlrZUysEJ +DoCkKvbdnQZyWLYb +DoCjjvbdeFOqbWbj +EOcLKvbdjgfkfGOL +EObkKvbdiHJbyWKV +DnbkKvbdGdLVibJj +DoDKjvbdGLErcINV +EPCjjvbdNGcPlpUk +EOcKjvbdjFLGtoAO +EOcKjvbdsBfMlGkZ +EObjjvbdhtydvquC +DoCjjvbdznpRFCkx +DncLKvbdYSkaNUOx +DoCjjvbdVvhxVdFH +EPDLKvbdNeETiJLE +DoDKjvbdcScLTdJa +EOcLKvbdQwNdDLgc +DoDLKvbdUMWPBWPJ +DncKjvbdqFdEtVaI +EObjjvbdhbPCeXRR +DoCjjvbdKeehCApu +DncKjvbdYNqAXuVt +DoDLKvbdjmCLzFGo +DoCkKvbdtlXwBUAw +EObkKvbdwtmEqYlO +EObjjvbdrovOjCvG +EObkKvbdqrVLOLBN +DoCjjvbdSBcdkhxk +DncLKvbdrEEhomua +EObkKvbdtbbtvuno +EPDLKvbdZjShQGaf +EPCjjvbdTAFJHbPE +DnbjjvbdcScLTcia +EObkKvbdbsDLUDia +DnbkKvbdkyTSTYgU +DncKjvbdySmhmSCH +DoCjjvbdnBivxPNu +DncKjvbdEXxLtTtM +EObjjvbdZshhyESn +DoDKjvbdkMbLzEfo +EObjjvbdssRrxyeD +DoDKjvbdcSbkTdKB +EPDLKvbdHDjvJbKK +DncLKvbdsQVnjCvG +DnbjjvbdJSyBTMwl +EOcLKvbddZxpYYqC +EPCjjvbdrXQLcJZR +DoCkKvbdnHEwlmfy +EOcKjvbdGZUuBDwb +EObjjvbdvOszqKnt +EOcLKvbdRosgKFdX +EPCjjvbdMpXqWNfs +EPCkKvbdJbibqJcY +DncKjvbdJvVFdEgJ +EObkKvbdqwPkcIyR +DnbkKvbdDwxMUTtM +DncKjvbdtcDVXVno +EPDLKvbdlZSrSxft +DoCkKvbdKeehCApu +EPDLKvbdQlxCYmtz +EOcLKvbdYqNFJNFR +DoCkKvbdnCKWwoOV +EObjjvbdwzIFfYEr +EOcKjvbdkDMLQfuH +EPCjjvbdrSUjnLBN +EPCkKvbdTfznMXVe +EPCkKvbdZxdKNcMS +DoCjjvbdJXsaglRQ +DoCjjvbdNPwqWNgT +DoCjjvbdLqwMzUpz +EOcKjvbdCDoaWJlf +DnbjjvbdlYsRsZGt +DncKjvbdeOdsLUUS +EOcKjvbdEvZQPmJe +DoCkKvbdqBJFAXHd +DnbjjvbdtkwwBUBX +EObjjvbdLFfHaaQu +DoDLKvbdbLMFoNcA +EPDLKvbdiLdcnUby +DnbkKvbdUQqPVUgm +EOcLKvbdEOcLLXDE +DoDKjvbdrEEhpOWB +DncKjvbdkCkkQftg +DncLKvbdMfbpNQUk +DnbjjvbdTulQKUAq +DoDLKvbdUtNUFkvK +DncKjvbddndsKtTr +EPDKjvbdliDsqVSB +EPCkKvbdhbOcEvqR +DoCkKvbdqceJQNua +DoCkKvbdrWpLcIyR +DncKjvbdrSVLNkAm +DoDLKvbdyOShYTJD +DncKjvbdyYJKBoyk +DnbjjvbdZQldiNFR +EPDLKvbdePEsKstS +EPCjjvbdcScKtDia +DncLKvbdxsOJNRbH +EObjjvbdEYXlUUTl +DoCkKvbdxUldqZMO +EOcKjvbdRjxeuGkT +EOcLKvbdqrVLNjaN +DoCkKvbdDwwktUUM +EOcLKvbdZQmEiNFR +EPCkKvbdMSXMytpz +DnbkKvbdnUtzKiqf +DoCjjvbdREDAoqDr +EPCjjvbdZyDinDMS +EPCjjvbdiCPDEwRR +EPCkKvbdmSZUzSci +DoDKjvbdkWWmdCXw +DnbkKvbdmJDsqVRa +EPDKjvbdhzVGLpnG +DoCkKvbdsPuoKDWG +DoDLKvbdrylPsAgn +EPCjjvbdsPuoJbuf +EOcKjvbdrEFJQOVa +EPCjjvbdEPDLLXCd +DncKjvbdkVwOEBxX +EPCkKvbdqGEFUWAh +DncLKvbdtbcUvuno +EOcKjvbdWIYWYGxz +EPDLKvbdZLqcsmkm +DoDKjvbdmaivwnnV +DoCkKvbdOYPVzcmt +DoCjjvbdVwIwvDeH +DoCjjvbdYkrETmkm +DoDKjvbdLFfHbAqV +EObjjvbdkIHLefOL +EPDKjvbdZjShPfaf +DoCjjvbdehLWSORH +DncLKvbdKfFgbBQu +EObkKvbdsPunjDVf +DncKjvbdiMEdNuCy +DncKjvbdFfKSNhtR +EOcKjvbdFVxpQNKF +DncLKvbdfHkVrORH +EObjjvbdKefIBaQu +EPDKjvbduCbtvuoP +EPCkKvbdGdLWKCKK +DncLKvbdLAkGmBwq +DncLKvbdZshiZESn +DnbjjvbdySmhmSCH +DoDKjvbdACqxJyiQ +DncLKvbdmajXYOmu +DnbjjvbdxVNFRZMO +DnbjjvbdVqmxBdlD +DnbkKvbdIGgZyYXg +DncKjvbdddnrBvcK +EPCjjvbdUGzmkwVe +DncLKvbdaNLCTVNH +DoCkKvbdWWhwucdg +DncKjvbdkWWmcaxX +DoDKjvbdaRfChUGL +EPDLKvbdOEcsiJKd +DoDLKvbdGLFTChMu +EObjjvbdjmBkzFHP +DncLKvbdrWokcJYq +EObjjvbdDHMGHAzc +EObkKvbdRyjITCvA +DnbjjvbdWRnXbElD +DoCjjvbdEARiNZvw +DnbkKvbdRjyFtfjs +DoCkKvbdMgDQNQVL +DoDKjvbdCEPaWJmG +DoCkKvbdUtNTfLuj +DoDKjvbdNGcQMpVL +DoDKjvbdZQmFImEq +EObjjvbdyYIibPyk +DoDLKvbdcSbjtDjB +EPCjjvbdPxmAGsSK +EPCjjvbdnUuZjirG +EPCkKvbddijSVtzn +EOcKjvbdxUmEqYlO +EOcKjvbdxrmiNRag +EPCkKvbdjmBlZeHP +EOcKjvbdvBDySndh +EObjjvbdliDsqVSB +EOcKjvbdTvMQKUBR +DncLKvbdRNXbYnUz +DnbjjvbdyYIiaozL +DoCkKvbdhbPDEwRR +EPDKjvbdptUGrSLU +DoDKjvbdFjeTChMu +DnbkKvbdFVxoomJe +EObkKvbdlYrrSyGt +EPDLKvbdVZHszKnn +DncLKvbdDwwktUUM +DncLKvbdDnbkKvcE +EPCkKvbdjJfHjMwr +EPDKjvbdUtNTfMWK +EObjjvbdbhlikGWx +DncLKvbdKfFhCBQu +DoDKjvbdVgwvXgYz +EPDLKvbdiBoCdwRR +EPDLKvbdzdzOzeZp +EObkKvbdMoxRWNgT +EPDKjvbdjvXNdBww +EObkKvbdUtMsfLuj +EOcLKvbdnUuZjjRf +DnbkKvbduCbtwVoP +EPDLKvbdGGKRmhsq +EObkKvbdePEsLTtS +DoCjjvbdSKyGUgLT +EOcLKvbdRbDdlIyL +DoDLKvbdNxPVzcnU +EObjjvbdkCkkRGtg +DncKjvbdVTmUFkvK +DncKjvbdUsltFkuj +EPDKjvbdSCEElJZL +EOcKjvbdZxcjNcMS +DoCjjvbdEJgjWYKA +DncLKvbdREDBQRDr +DncKjvbddoErjtUS +EPDLKvbdADSYJyiQ +EPDKjvbdatafxKsh +EPDLKvbdkIGkeemk +DoDLKvbdmRxtzSci +DnbkKvbdTlWPAvPJ +DncKjvbdjJegjMwr +DoCkKvbdqTtHSSKt +EOcKjvbdkMakzFHP +DncLKvbddZyPwxpb +DnbkKvbdTppnuUgm +EObkKvbdnPyxukZC +DoDKjvbdbiNJjewY +EPDKjvbdJSyArlwl +EPDLKvbdvvlBVaVu +EOcLKvbdjJfIKMxS +EPDLKvbdliETqVRa +DoCkKvbdWXJXvEFH +DncLKvbdiHKDZWKV +EObkKvbdEXwktUUM +EOcKjvbdRWnDcMID +EPDLKvbdbhljKfWx +DnbkKvbdVTlsfMVj +DnbjjvbdZoOIdeZj +DoDKjvbdDxYLtUTl +EObjjvbdmIdTqUqa +EPCjjvbdiZtekqNf +DoDLKvbdMfcPmPtk +EPDLKvbdKxpirztf +DnbkKvbdEARhlzWw +EOcKjvbdqiAJeMne +DnbjjvbdUsltGMWK +DnbkKvbdMoxRWNfs +EPCjjvbdTqQntuIN +EPDKjvbdLFfHbApu +EOcLKvbdANIZSwZx +DoCjjvbdSLZGUfjs +DoDLKvbdJSyArlxM +EOcLKvbddZxoxZRC +DoDLKvbdRpTfjFcw +EObjjvbdKefHbBRV +EPCkKvbdjlakyeGo +DoDLKvbdiBncFXRR +EObkKvbdkHfkefOL +DnbjjvbdfILVrORH +DnbjjvbdbsDKtDia +DoCjjvbdqiAKElne +EObkKvbdEXxMTtUM +DncKjvbdHfgZxxXg +EPDKjvbdQvnDcMID +DoDKjvbdCSaCsewS +DncLKvbdSZigsDWA +DnbkKvbdiUyeXSUb +DnbkKvbdZRNFJMeR +EPDKjvbdDxXlTstM +EPCjjvbdkNBlZdfo +DnbkKvbdhuZdvqtb +DncLKvbdHDkWJajK +EOcKjvbdhficZWKV +DoDLKvbdxwiKCPyk +EPDLKvbdZQleJMeR +DoDLKvbdLrXMytpz +DncKjvbdcTCjtEJa +DnbkKvbdUMVnaWPJ +DoCjjvbdnBjXYPOV +EObjjvbduWNwjQsA +DoCjjvbdRpUHJecw +DnbkKvbdJYUBglQp +EOcLKvbduoTzqKoU +EObjjvbdZMRctNlN +EObkKvbdziuPpESt +DoDLKvbduLxWaTaX +EOcLKvbdhgKDZWKV +DnbkKvbdZQldhmFR +EOcLKvbdcyyPxZQb +EOcKjvbdRWnDcLgc +DncLKvbdxZgfFweS +EPCkKvbdyqOliJwA +DnbjjvbdsPvPKCuf +DoCjjvbdMgCpNQVL +DncLKvbdOEdTiJKd +EPDKjvbdEARiMyvw +EOcLKvbdJbibqKDY +DoCkKvbdeEnrCWbj +DoCkKvbdGKdrcIMu +DnbkKvbdUMWOaVoJ +DoCkKvbdKaKgNCXq +DnbkKvbdoAKztHdO +EPDKjvbdDxXlUUTl +EOcLKvbdFVxoomJe +EOcKjvbdpyPHfpdY +EPCjjvbdxwiJaoyk +DoCkKvbdlqxtyrci +EOcKjvbdfHkWRmpg +DoCjjvbdkMalZdfo +EPCjjvbdJpyePGOF +DncLKvbdqUUHRqjt +DoDLKvbdziuQPdSt +DoDKjvbdBhjajiGK +EPDKjvbdjcLjpftg +EPDKjvbdVwJYWEFH +DnbjjvbdNdcsiJLE +DoCjjvbdQwODcLgc +EOcLKvbdtkxXAtAw +EPDKjvbdwMvANEEm +DoCjjvbdqFdEsuaI +EObjjvbdrSUjmjaN +DoDLKvbdnGeYMnGy +EOcLKvbdPyNAHTSK +DnbkKvbdMowpvNgT +DoCjjvbdGdLVibKK +DoDLKvbdtcDVXVno +EObkKvbdtlXwBUAw +DoCjjvbdSPsgKGEX +EPCjjvbdURQntuHm +DncLKvbdrMyjZLgi +EPDKjvbdwXMAvBVu +EOcLKvbdRjxfUfkT +DnbkKvbdGFjRnJTq +DoCkKvbdbUbHYLTh +EPDKjvbdoznEKxPA +EPCjjvbdLiBlQxAS +DncKjvbdfVzxPizs +DnbjjvbdSKyFtgLT +EPDKjvbdrXPlCiZR +DncLKvbdhzVGLpnG +EObjjvbdVwJYVdFH +EPDKjvbdwXLaWBVu +EPCjjvbdjhHMGFmk +EObkKvbdKyQjSzuG +DoCjjvbdmfeYNOHZ +DoDLKvbdZirgofaf +EOcLKvbdZoOIdeZj +EPCkKvbdLFfHbApu +EPCkKvbdjvWnEBww +DoDKjvbdcScLUEKB +DoCkKvbdkCkjqHUg +DoDKjvbdyTNhmSBg +DoCkKvbdkHgLfFnL +EPCjjvbdzoQQdcLx +DoCjjvbdOTTvHEtp +EPCkKvbdznopeDLx +EPCkKvbdGFjRmhtR +EPCkKvbdUaCQrpqy +EOcKjvbdnGeXmOHZ +DoDKjvbdiCPDEwRR +DoCjjvbdRbEFLiYk +DncKjvbdRXOECkgc +EPCjjvbdKWUedEgJ +DncKjvbdDjIJvYKA +DoDKjvbdyTOJNRbH +DoCjjvbdePFTKtTr +DoDKjvbdhtyeWrVC +EPCkKvbdqvolCiZR +DoDLKvbdapHHELzd +EObjjvbdlhdUQtrB +EOcKjvbdptUGrRkU +EPCjjvbdqUTfqrLU +EPCkKvbdcJMikGWx +DoDKjvbdlhctRVRa +EOcLKvbdANHyTXZx +EPDKjvbdpssfqrKt +EPCkKvbdFeiqnJTq +DoCkKvbdxZgfGXdr +EOcLKvbdRWmcblHc +DncLKvbdjggMFemk +DoDKjvbdKeegbBQu diff --git a/hotspot/test/runtime/7158988/TestFieldMonitor.sh b/hotspot/test/runtime/7158988/TestFieldMonitor.sh index 8715bd546d8..c9268f862e3 100644 --- a/hotspot/test/runtime/7158988/TestFieldMonitor.sh +++ b/hotspot/test/runtime/7158988/TestFieldMonitor.sh @@ -18,8 +18,6 @@ then exit 1 fi -BIT_FLAG="" - # set platform-dependent variables OS=`uname -s` case "$OS" in @@ -27,12 +25,6 @@ case "$OS" in NULL=/dev/null PS=":" FS="/" - ## for solaris, linux it's HOME - FILE_LOCATION=$HOME - if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" -a `uname -p`='sparc' ] - then - BIT_FLAG="-d64" - fi ;; Windows_95 | Windows_98 | Windows_ME ) NULL=NUL @@ -56,11 +48,11 @@ esac cp ${TESTSRC}${FS}*.java . -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -fullversion +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -fullversion ${TESTJAVA}${FS}bin${FS}javac -classpath .${PS}$TESTJAVA${FS}lib${FS}tools.jar *.java -${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -classpath .${PS}$TESTJAVA${FS}lib${FS}tools.jar FieldMonitor > test.out 2>&1 & +${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -classpath .${PS}$TESTJAVA${FS}lib${FS}tools.jar FieldMonitor > test.out 2>&1 & P_PID=$! diff --git a/hotspot/test/serviceability/ParserTest.java b/hotspot/test/serviceability/ParserTest.java index b031b4de017..b70d235260d 100644 --- a/hotspot/test/serviceability/ParserTest.java +++ b/hotspot/test/serviceability/ParserTest.java @@ -20,6 +20,7 @@ public class ParserTest { testNanoTime(); testJLong(); testBool(); + testQuotes(); testMemorySize(); } @@ -95,6 +96,33 @@ public class ParserTest { parse(name, "false", "", args); } + public void testQuotes() throws Exception { + String name = "name"; + DiagnosticCommand arg1 = new DiagnosticCommand(name, + "desc", DiagnosticArgumentType.STRING, + false, null); + DiagnosticCommand arg2 = new DiagnosticCommand("arg", + "desc", DiagnosticArgumentType.STRING, + false, null); + DiagnosticCommand[] args = {arg1, arg2}; + + // try with a quoted value + parse(name, "Recording 1", name + "=\"Recording 1\"", args); + // try with a quoted argument + parse(name, "myrec", "\"" + name + "\"" + "=myrec", args); + // try with both a quoted value and a quoted argument + parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\"", args); + + // now the same thing but with other arguments after + + // try with a quoted value + parse(name, "Recording 1", name + "=\"Recording 1\",arg=value", args); + // try with a quoted argument + parse(name, "myrec", "\"" + name + "\"" + "=myrec,arg=value", args); + // try with both a quoted value and a quoted argument + parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\",arg=value", args); + } + public void testMemorySize() throws Exception { String name = "name"; String defaultValue = "1024"; diff --git a/jaxp/.hgtags b/jaxp/.hgtags index c8892c35ae6..ff99b6a10c0 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -160,3 +160,14 @@ e187f3ede64965dc2979df9a211107cd3d38eacb jdk8-b35 cfd288fe1d3e2b700838342e70d71d44ac991af5 jdk8-b36 90204bfab4e2bed402badcc997cbf8446ab5669f jdk8-b37 5bbe0cb6f2f2d7ce292da77bf4fa9d618d770a78 jdk8-b38 +f95fdbe525c88ef0d57dc1390be6582a8af5e07c jdk8-b39 +9ecfdbd6aed4702674eaede2023b4a19513d6b36 jdk8-b40 +6f5c0e17415de7a9c74900ef4ba12f47accdf88b jdk8-b41 +39ee03c1602155ff02e5feb6cd44869452f24cf7 jdk8-b42 +eff4ece9c8bc43b3ce2b3758574c4c20147f0689 jdk8-b43 +0b3f3a4ce13930430b32b616a717dfc7fe385b28 jdk8-b44 +57476f66e13c55eea2f2fe2b858369a4c64b9936 jdk8-b45 +300f45e990643af230d6cca39477ff62c44a9a54 jdk8-b46 +404521944ac9383afda7d55d60713b212c730646 jdk8-b47 +1c88da9a1365797e49be77ae42c34bbc0a3c3f0c jdk8-b48 +f81e981eca7b63316cf9d778f93903a4fc62161d jdk8-b49 diff --git a/jaxp/makefiles/Makefile b/jaxp/makefiles/Makefile index 6d258386a08..e2e359f25c1 100644 --- a/jaxp/makefiles/Makefile +++ b/jaxp/makefiles/Makefile @@ -23,12 +23,13 @@ # questions. # +# This must be the first rule +default: all + -include $(SPEC) include MakeBase.gmk include JavaCompilation.gmk -default: all - JAVAC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \ -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar DISABLE_JAXP_WARNINGS:=-Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java index f1c611b0d1a..d6680eceb05 100644 --- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java +++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java @@ -286,12 +286,13 @@ public class XMLDocumentFragmentScannerImpl //STAX related properties //defaultValues. + protected boolean fSupportDTD = true; protected boolean fReplaceEntityReferences = true; protected boolean fSupportExternalEntities = false; protected boolean fReportCdataEvent = false ; protected boolean fIsCoalesce = false ; protected String fDeclaredEncoding = null; - /** Disallow doctype declaration. */ + /** Xerces Feature: Disallow doctype declaration. */ protected boolean fDisallowDoctype = false; // drivers @@ -1847,7 +1848,7 @@ public class XMLDocumentFragmentScannerImpl // start general entity if (!fEntityStore.isDeclaredEntity(name)) { //SUPPORT_DTD=false && ReplaceEntityReferences should throw exception - if (fDisallowDoctype && fReplaceEntityReferences) { + if (!fSupportDTD && fReplaceEntityReferences) { reportFatalError("EntityNotDeclared", new Object[]{name}); return; } diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java index c705b1881b8..b6ef755a473 100644 --- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java +++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java @@ -278,7 +278,7 @@ public class XMLDocumentScannerImpl fDoctypeSystemId = null; fSeenDoctypeDecl = false; fNamespaceContext.reset(); - fDisallowDoctype = !((Boolean)propertyManager.getProperty(XMLInputFactory.SUPPORT_DTD)).booleanValue(); + fSupportDTD = ((Boolean)propertyManager.getProperty(XMLInputFactory.SUPPORT_DTD)).booleanValue(); // xerces features fLoadExternalDTD = !((Boolean)propertyManager.getProperty(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.IGNORE_EXTERNAL_DTD)).booleanValue(); @@ -628,7 +628,7 @@ public class XMLDocumentScannerImpl // scanning methods /** Scans a doctype declaration. */ - protected boolean scanDoctypeDecl(boolean ignore) throws IOException, XNIException { + protected boolean scanDoctypeDecl(boolean supportDTD) throws IOException, XNIException { // spaces if (!fEntityScanner.skipSpaces()) { @@ -653,7 +653,7 @@ public class XMLDocumentScannerImpl fHasExternalDTD = fDoctypeSystemId != null; // Attempt to locate an external subset with an external subset resolver. - if (!ignore && !fHasExternalDTD && fExternalSubsetResolver != null) { + if (supportDTD && !fHasExternalDTD && fExternalSubsetResolver != null) { fDTDDescription.setValues(null, null, fEntityManager.getCurrentResourceIdentifier().getExpandedSystemId(), null); fDTDDescription.setRootName(fDoctypeName); fExternalSubsetSource = fExternalSubsetResolver.getExternalSubset(fDTDDescription); @@ -661,7 +661,7 @@ public class XMLDocumentScannerImpl } // call handler - if (!ignore && fDocumentHandler != null) { + if (supportDTD && fDocumentHandler != null) { // NOTE: I don't like calling the doctypeDecl callback until // end of the *full* doctype line (including internal // subset) is parsed correctly but SAX2 requires that @@ -916,6 +916,10 @@ public class XMLDocumentScannerImpl } case SCANNER_STATE_DOCTYPE: { + if (fDisallowDoctype) { + reportFatalError("DoctypeNotAllowed", null); + } + if (fSeenDoctypeDecl) { reportFatalError("AlreadySeenDoctype", null); @@ -924,7 +928,7 @@ public class XMLDocumentScannerImpl // scanDoctypeDecl() sends XNI doctypeDecl event that // in SAX is converted to startDTD() event. - if (scanDoctypeDecl(fDisallowDoctype)) { + if (scanDoctypeDecl(fSupportDTD)) { //allow parsing of entity decls to continue in order to stay well-formed setScannerState(SCANNER_STATE_DTD_INTERNAL_DECLS); fSeenInternalSubset = true; @@ -934,8 +938,6 @@ public class XMLDocumentScannerImpl setDriver(fContentDriver); //always return DTD event, the event however, will not contain any entities return fDTDDriver.next(); - // If no DTD support, ignore and continue parsing - //return fDisallowDoctype ? next() : dtdEvent; } if(fSeenDoctypeDecl){ @@ -950,7 +952,7 @@ public class XMLDocumentScannerImpl if (fDoctypeSystemId != null) { if (((fValidation || fLoadExternalDTD) && (fValidationManager == null || !fValidationManager.isCachedDTD()))) { - if (!fDisallowDoctype) + if (fSupportDTD) setScannerState(SCANNER_STATE_DTD_EXTERNAL); else setScannerState(SCANNER_STATE_PROLOG); @@ -967,7 +969,7 @@ public class XMLDocumentScannerImpl // This handles the case of a DOCTYPE that had neither an internal subset or an external subset. fDTDScanner.setInputSource(fExternalSubsetSource); fExternalSubsetSource = null; - if (!fDisallowDoctype) + if (fSupportDTD) setScannerState(SCANNER_STATE_DTD_EXTERNAL_DECLS); else setScannerState(SCANNER_STATE_PROLOG); @@ -1113,7 +1115,7 @@ public class XMLDocumentScannerImpl } fMarkupDepth--; - if (fDisallowDoctype) { + if (!fSupportDTD) { //simply reset the entity store without having to mess around //with the DTD Scanner code fEntityStore = fEntityManager.getEntityStore(); diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java index c1ddeb6cb59..84e2c81634a 100644 --- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java +++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java @@ -182,7 +182,8 @@ protected static final String PARSER_SETTINGS = EXTERNAL_GENERAL_ENTITIES, EXTERNAL_PARAMETER_ENTITIES, ALLOW_JAVA_ENCODINGS, - WARN_ON_DUPLICATE_ENTITYDEF + WARN_ON_DUPLICATE_ENTITYDEF, + STANDARD_URI_CONFORMANT }; /** Feature defaults. */ @@ -192,6 +193,7 @@ protected static final String PARSER_SETTINGS = Boolean.TRUE, Boolean.TRUE, Boolean.FALSE, + Boolean.FALSE }; /** Recognized properties. */ @@ -600,7 +602,7 @@ protected static final String PARSER_SETTINGS = if (reader == null) { stream = xmlInputSource.getByteStream(); if (stream == null) { - URL location = new URL(escapeNonUSAscii(expandedSystemId)); + URL location = new URL(expandedSystemId); URLConnection connect = location.openConnection(); if (!(connect instanceof HttpURLConnection)) { stream = connect.getInputStream(); @@ -2584,64 +2586,6 @@ protected static final String PARSER_SETTINGS = } // fixURI(String):String - /** - * Escape invalid URI characters. - * - * Passed a URI that contains invalid characters (like spaces, non-ASCII Unicode characters, and the like), - * this function percent encodes the invalid characters per the URI specification (i.e., as a sequence of - * %-encoded UTF-8 octets). - * - * N.B. There are two problems. If the URI contains a '%' character, that might be an indication that - * the URI has already been escaped by the author, or it might be an invalid '%'. In the former case, - * it's important not to escape it, or we'll wind up with invalid, doubly-escaped '%'s. In the latter, - * the URI is broken if we don't encode it. Similarly, a '#' character might be the start of a fragment - * identifier or it might be an invalid '#'. - * - * Given that the former is vastly more likely than the latter in each case (most users are familiar with - * the magic status of '%' and '#' and they occur relatively infrequently in filenames, and if the user parses - * a proper Java File, we will already have %-escaped the URI), we simply assume that %'s and #'s are legit. - * - * Very rarely, we may be wrong. If so, tell the user to fix the clearly broken URI. - */ - protected static String escapeNonUSAscii(String str) { - if (str == null) { - return str; - } - - // get UTF-8 bytes for the string - StringBuffer buffer = new StringBuffer(); - byte[] bytes = null; - byte b; - try { - bytes = str.getBytes("UTF-8"); - } catch (java.io.UnsupportedEncodingException e) { - // should never happen - return str; - } - int len = bytes.length; - int ch; - - // for each byte - for (int i = 0; i < len; i++) { - b = bytes[i]; - // for non-ascii character: make it positive, then escape - if (b < 0) { - ch = b + 256; - buffer.append('%'); - buffer.append(gHexChs[ch >> 4]); - buffer.append(gHexChs[ch & 0xf]); - } - else if (b != '%' && b != '#' && gNeedEscaping[b]) { - buffer.append('%'); - buffer.append(gAfterEscaping1[b]); - buffer.append(gAfterEscaping2[b]); - } - else { - buffer.append((char)b); - } - } - return buffer.toString(); - } // // Package visible methods diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java index 61fb43d1bc9..0c66aa236fa 100644 --- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java +++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java @@ -402,6 +402,16 @@ public abstract class XMLScanner boolean dataFoundForTarget = false; boolean sawSpace = fEntityScanner.skipSpaces(); + // since pseudoattributes are *not* attributes, + // their quotes don't need to be preserved in external parameter entities. + // the XMLEntityScanner#scanLiteral method will continue to + // emit -1 in such cases when it finds a quote; this is + // fine for other methods that parse scanned entities, + // but not for the scanning of pseudoattributes. So, + // temporarily, we must mark the current entity as not being "literal" + Entity.ScannedEntity currEnt = fEntityManager.getCurrentEntity(); + boolean currLiteral = currEnt.literal; + currEnt.literal = false; while (fEntityScanner.peekChar() != '?') { dataFoundForTarget = true; String name = scanPseudoAttribute(scanningTextDecl, fString); @@ -499,6 +509,9 @@ public abstract class XMLScanner } sawSpace = fEntityScanner.skipSpaces(); } + // restore original literal value + if(currLiteral) + currEnt.literal = true; // REVISIT: should we remove this error reporting? if (scanningTextDecl && state != STATE_DONE) { reportFatalError("MorePseudoAttributes", null); diff --git a/jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java index 99c05b901bf..ab138efa477 100644 --- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java +++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java @@ -55,7 +55,7 @@ import com.sun.org.apache.xalan.internal.utils.ObjectFactory; final class CharInfo { /** Given a character, lookup a String to output (e.g. a decorated entity reference). */ - private HashMap m_charToString; + private HashMap m_charToString = new HashMap(); /** * The name of the HTML entities file. @@ -72,50 +72,42 @@ final class CharInfo "com.sun.org.apache.xml.internal.serializer.XMLEntities"; /** The horizontal tab character, which the parser should always normalize. */ - static final char S_HORIZONAL_TAB = 0x09; + public static final char S_HORIZONAL_TAB = 0x09; /** The linefeed character, which the parser should always normalize. */ - static final char S_LINEFEED = 0x0A; + public static final char S_LINEFEED = 0x0A; /** The carriage return character, which the parser should always normalize. */ - static final char S_CARRIAGERETURN = 0x0D; - static final char S_SPACE = 0x20; - static final char S_QUOTE = 0x22; - static final char S_LT = 0x3C; - static final char S_GT = 0x3E; - static final char S_NEL = 0x85; - static final char S_LINE_SEPARATOR = 0x2028; + public static final char S_CARRIAGERETURN = 0x0D; /** This flag is an optimization for HTML entities. It false if entities * other than quot (34), amp (38), lt (60) and gt (62) are defined * in the range 0 to 127. * @xsl.usage internal */ - boolean onlyQuotAmpLtGt; + final boolean onlyQuotAmpLtGt; /** Copy the first 0,1 ... ASCII_MAX values into an array */ - static final int ASCII_MAX = 128; + private static final int ASCII_MAX = 128; /** Array of values is faster access than a set of bits - * to quickly check ASCII characters in attribute values, - * the value is true if the character in an attribute value - * should be mapped to a String. + * to quickly check ASCII characters in attribute values. */ - private final boolean[] shouldMapAttrChar_ASCII; + private boolean[] isSpecialAttrASCII = new boolean[ASCII_MAX]; /** Array of values is faster access than a set of bits - * to quickly check ASCII characters in text nodes, - * the value is true if the character in a text node - * should be mapped to a String. + * to quickly check ASCII characters in text nodes. */ - private final boolean[] shouldMapTextChar_ASCII; + private boolean[] isSpecialTextASCII = new boolean[ASCII_MAX]; + + private boolean[] isCleanTextASCII = new boolean[ASCII_MAX]; /** An array of bits to record if the character is in the set. * Although information in this array is complete, the * isSpecialAttrASCII array is used first because access to its values * is common and faster. */ - private final int array_of_bits[]; + private int array_of_bits[] = createEmptySetOfIntegers(65535); // 5 for 32 bit words, 6 for 64 bit words ... @@ -146,38 +138,33 @@ final class CharInfo /** - * A base constructor just to explicitly create the fields, - * with the exception of m_charToString which is handled - * by the constructor that delegates base construction to this one. - *

    - * m_charToString is not created here only for performance reasons, - * to avoid creating a Hashtable that will be replaced when - * making a mutable copy, {@link #mutableCopyOf(CharInfo)}. + * Constructor that reads in a resource file that describes the mapping of + * characters to entity references. + * This constructor is private, just to force the use + * of the getCharInfo(entitiesResource) factory * + * Resource files must be encoded in UTF-8 and can either be properties + * files with a .properties extension assumed. Alternatively, they can + * have the following form, with no particular extension assumed: + * + *

    +     * # First char # is a comment
    +     * Entity numericValue
    +     * quot 34
    +     * amp 38
    +     * 
    + * + * @param entitiesResource Name of properties or resource file that should + * be loaded, which describes that mapping of characters to entity + * references. */ - private CharInfo() + private CharInfo(String entitiesResource, String method) { - this.array_of_bits = createEmptySetOfIntegers(65535); - this.firstWordNotUsed = 0; - this.shouldMapAttrChar_ASCII = new boolean[ASCII_MAX]; - this.shouldMapTextChar_ASCII = new boolean[ASCII_MAX]; - this.m_charKey = new CharKey(); - - // Not set here, but in a constructor that uses this one - // this.m_charToString = new Hashtable(); - - this.onlyQuotAmpLtGt = true; - - - return; + this(entitiesResource, method, false); } private CharInfo(String entitiesResource, String method, boolean internal) { - // call the default constructor to create the fields - this(); - m_charToString = new HashMap(); - ResourceBundle entities = null; boolean noExtraEntities = true; @@ -203,10 +190,12 @@ final class CharInfo String name = (String) keys.nextElement(); String value = entities.getString(name); int code = Integer.parseInt(value); - boolean extra = defineEntity(name, (char) code); - if (extra) + defineEntity(name, (char) code); + if (extraEntity(code)) noExtraEntities = false; } + set(S_LINEFEED); + set(S_CARRIAGERETURN); } else { InputStream is = null; @@ -290,8 +279,8 @@ final class CharInfo int code = Integer.parseInt(value); - boolean extra = defineEntity(name, (char) code); - if (extra) + defineEntity(name, (char) code); + if (extraEntity(code)) noExtraEntities = false; } } @@ -300,6 +289,8 @@ final class CharInfo } is.close(); + set(S_LINEFEED); + set(S_CARRIAGERETURN); } catch (Exception e) { throw new RuntimeException( Utils.messages.createMessage( @@ -317,8 +308,31 @@ final class CharInfo } } + /* initialize the array isCleanTextASCII[] with a cache of values + * for use by ToStream.character(char[], int , int) + * and the array isSpecialTextASCII[] with the opposite values + * (all in the name of performance!) + */ + for (int ch = 0; ch Unlike internal entities, character references are a string to single * character mapping. They are used to map non-ASCII characters both on - * parsing and printing, primarily for HTML documents. '&lt;' is an + * parsing and printing, primarily for HTML documents. '<amp;' is an * example of a character reference.

    * * @param name The entity's name * @param value The entity's value - * @return true if the mapping is not one of: - *
      - *
    • '<' to "<" - *
    • '>' to ">" - *
    • '&' to "&" - *
    • '"' to """ - *
    */ - private boolean defineEntity(String name, char value) + private void defineEntity(String name, char value) { StringBuilder sb = new StringBuilder("&"); sb.append(name); sb.append(';'); String entityString = sb.toString(); - boolean extra = defineChar2StringMapping(entityString, value); - return extra; + defineChar2StringMapping(entityString, value); } - /** - * A utility object, just used to map characters to output Strings, - * needed because a HashMap needs to map an object as a key, not a - * Java primitive type, like a char, so this object gets around that - * and it is reusable. - */ - private final CharKey m_charKey; - /** * Map a character to a String. For example given * the character '>' this method would return the fully decorated @@ -413,21 +400,21 @@ final class CharInfo /** * Tell if the character argument that is from - * an attribute value has a mapping to a String. + * an attribute value should have special treatment. * * @param value the value of a character that is in an attribute value * @return true if the character should have any special treatment, * such as when writing out attribute values, - * such as when writing out entity references. + * or entity references. * @xsl.usage internal */ - final boolean shouldMapAttrChar(int value) + final boolean isSpecialAttrChar(int value) { // for performance try the values in the boolean array first, // this is faster access than the BitSet for common ASCII values if (value < ASCII_MAX) - return shouldMapAttrChar_ASCII[value]; + return isSpecialAttrASCII[value]; // rather than java.util.BitSet, our private // implementation is faster (and less general). @@ -436,27 +423,48 @@ final class CharInfo /** * Tell if the character argument that is from a - * text node has a mapping to a String, for example - * to map '<' to "<". + * text node should have special treatment. * * @param value the value of a character that is in a text node - * @return true if the character has a mapping to a String, - * such as when writing out entity references. + * @return true if the character should have any special treatment, + * such as when writing out attribute values, + * or entity references. * @xsl.usage internal */ - final boolean shouldMapTextChar(int value) + final boolean isSpecialTextChar(int value) { // for performance try the values in the boolean array first, // this is faster access than the BitSet for common ASCII values if (value < ASCII_MAX) - return shouldMapTextChar_ASCII[value]; + return isSpecialTextASCII[value]; // rather than java.util.BitSet, our private // implementation is faster (and less general). return get(value); } + /** + * This method is used to determine if an ASCII character in + * a text node (not an attribute value) is "clean". + * @param value the character to check (0 to 127). + * @return true if the character can go to the writer as-is + * @xsl.usage internal + */ + final boolean isTextASCIIClean(int value) + { + return isCleanTextASCII[value]; + } + +// In the future one might want to use the array directly and avoid +// the method call, but I think the JIT alreay inlines this well enough +// so don't do it (for now) - bjm +// public final boolean[] getASCIIClean() +// { +// return isCleanTextASCII; +// } + + private static CharInfo getCharInfoBasedOnPrivilege( final String entitiesFileName, final String method, final boolean internal){ @@ -491,17 +499,15 @@ final class CharInfo { CharInfo charInfo = (CharInfo) m_getCharInfoCache.get(entitiesFileName); if (charInfo != null) { - return mutableCopyOf(charInfo); + return charInfo; } // try to load it internally - cache try { charInfo = getCharInfoBasedOnPrivilege(entitiesFileName, method, true); - // Put the common copy of charInfo in the cache, but return - // a copy of it. m_getCharInfoCache.put(entitiesFileName, charInfo); - return mutableCopyOf(charInfo); + return charInfo; } catch (Exception e) {} // try to load it externally - do not cache @@ -528,41 +534,7 @@ final class CharInfo method, false); } - /** - * Create a mutable copy of the cached one. - * @param charInfo The cached one. - * @return - */ - private static CharInfo mutableCopyOf(CharInfo charInfo) { - CharInfo copy = new CharInfo(); - - int max = charInfo.array_of_bits.length; - System.arraycopy(charInfo.array_of_bits,0,copy.array_of_bits,0,max); - - copy.firstWordNotUsed = charInfo.firstWordNotUsed; - - max = charInfo.shouldMapAttrChar_ASCII.length; - System.arraycopy(charInfo.shouldMapAttrChar_ASCII,0,copy.shouldMapAttrChar_ASCII,0,max); - - max = charInfo.shouldMapTextChar_ASCII.length; - System.arraycopy(charInfo.shouldMapTextChar_ASCII,0,copy.shouldMapTextChar_ASCII,0,max); - - // utility field copy.m_charKey is already created in the default constructor - - copy.m_charToString = (HashMap) charInfo.m_charToString.clone(); - - copy.onlyQuotAmpLtGt = charInfo.onlyQuotAmpLtGt; - - return copy; - } - - /** - * Table of user-specified char infos. - * The table maps entify file names (the name of the - * property file without the .properties extension) - * to CharInfo objects populated with entities defined in - * corresponding property file. - */ + /** Table of user-specified char infos. */ private static HashMap m_getCharInfoCache = new HashMap(); /** @@ -604,8 +576,7 @@ final class CharInfo * the creation of the set. */ private final void set(int i) { - setASCIItextDirty(i); - setASCIIattrDirty(i); + setASCIIdirty(i); int j = (i >> SHIFT_PER_WORD); // this word is used int k = j + 1; @@ -640,43 +611,24 @@ final class CharInfo return in_the_set; } + // record if there are any entities other than + // quot, amp, lt, gt (probably user defined) /** - * This method returns true if there are some non-standard mappings to - * entities other than quot, amp, lt, gt, and its only purpose is for - * performance. - * @param charToMap The value of the character that is mapped to a String - * @param outputString The String to which the character is mapped, usually - * an entity reference such as "<". - * @return true if the mapping is not one of: - *
      - *
    • '<' to "<" - *
    • '>' to ">" - *
    • '&' to "&" - *
    • '"' to """ - *
    + * @return true if the entity + * @param code The value of the character that has an entity defined + * for it. */ - private boolean extraEntity(String outputString, int charToMap) + private boolean extraEntity(int entityValue) { boolean extra = false; - if (charToMap < ASCII_MAX) + if (entityValue < 128) { - switch (charToMap) + switch (entityValue) { - case '"' : // quot - if (!outputString.equals(""")) - extra = true; - break; - case '&' : // amp - if (!outputString.equals("&")) - extra = true; - break; - case '<' : // lt - if (!outputString.equals("<")) - extra = true; - break; - case '>' : // gt - if (!outputString.equals(">")) - extra = true; + case 34 : // quot + case 38 : // amp + case 60 : // lt + case 62 : // gt break; default : // other entity in range 0 to 127 extra = true; @@ -686,61 +638,49 @@ final class CharInfo } /** - * If the character is in the ASCII range then - * mark it as needing replacement with - * a String on output if it occurs in a text node. + * If the character is a printable ASCII character then + * mark it as not clean and needing replacement with + * a String on output. * @param ch */ - private void setASCIItextDirty(int j) + private void setASCIIdirty(int j) { if (0 <= j && j < ASCII_MAX) { - shouldMapTextChar_ASCII[j] = true; + isCleanTextASCII[j] = false; + isSpecialTextASCII[j] = true; } } /** - * If the character is in the ASCII range then - * mark it as needing replacement with - * a String on output if it occurs in a attribute value. + * If the character is a printable ASCII character then + * mark it as and not needing replacement with + * a String on output. * @param ch */ - private void setASCIIattrDirty(int j) + private void setASCIIclean(int j) { if (0 <= j && j < ASCII_MAX) { - shouldMapAttrChar_ASCII[j] = true; + isCleanTextASCII[j] = true; + isSpecialTextASCII[j] = false; } } - /** - * Call this method to register a char to String mapping, for example - * to map '<' to "<". - * @param outputString The String to map to. - * @param inputChar The char to map from. - * @return true if the mapping is not one of: - *
      - *
    • '<' to "<" - *
    • '>' to ">" - *
    • '&' to "&" - *
    • '"' to """ - *
    - */ - boolean defineChar2StringMapping(String outputString, char inputChar) + private void defineChar2StringMapping(String outputString, char inputChar) { CharKey character = new CharKey(inputChar); m_charToString.put(character, outputString); - set(inputChar); // mark the character has having a mapping to a String - - boolean extraMapping = extraEntity(outputString, inputChar); - return extraMapping; - + set(inputChar); } /** * Simple class for fast lookup of char values, when used with * hashtables. You can set the char, then use it as a key. * + * This class is a copy of the one in com.sun.org.apache.xml.internal.utils. + * It exists to cut the serializers dependancy on that package. + * * @xsl.usage internal */ private static class CharKey extends Object diff --git a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java index 94fbce6d64e..aa48eaed8b4 100644 --- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java +++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java @@ -58,7 +58,7 @@ public final class ToHTMLStream extends ToStream * Map that tells which XML characters should have special treatment, and it * provides character to entity name lookup. */ - private final CharInfo m_htmlcharInfo = + private static final CharInfo m_htmlcharInfo = // new CharInfo(CharInfo.HTML_ENTITIES_RESOURCE); CharInfo.getCharInfo(CharInfo.HTML_ENTITIES_RESOURCE, Method.HTML); @@ -1369,7 +1369,7 @@ public final class ToHTMLStream extends ToStream // System.out.println("ch: "+(int)ch); // System.out.println("m_maxCharacter: "+(int)m_maxCharacter); // System.out.println("m_attrCharsMap[ch]: "+(int)m_attrCharsMap[ch]); - if (escapingNotNeeded(ch) && (!m_charInfo.shouldMapAttrChar(ch))) + if (escapingNotNeeded(ch) && (!m_charInfo.isSpecialAttrChar(ch))) { cleanLength++; } diff --git a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java index cf07a695c83..8c4c2ec8892 100644 --- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java +++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java @@ -919,8 +919,7 @@ abstract public class ToStream extends SerializerBase { // This is the old/fast code here, but is this // correct for all encodings? - if (ch >= CharInfo.S_SPACE || (CharInfo.S_LINEFEED == ch || - CharInfo.S_CARRIAGERETURN == ch || CharInfo.S_HORIZONAL_TAB == ch)) + if (ch >= 0x20 || (0x0A == ch || 0x0D == ch || 0x09 == ch)) ret= true; else ret = false; @@ -1029,7 +1028,7 @@ abstract public class ToStream extends SerializerBase * * @throws java.io.IOException */ - int accumDefaultEntity( + protected int accumDefaultEntity( java.io.Writer writer, char ch, int i, @@ -1048,7 +1047,7 @@ abstract public class ToStream extends SerializerBase { // if this is text node character and a special one of those, // or if this is a character from attribute value and a special one of those - if ((fromTextNode && m_charInfo.shouldMapTextChar(ch)) || (!fromTextNode && m_charInfo.shouldMapAttrChar(ch))) + if ((fromTextNode && m_charInfo.isSpecialTextChar(ch)) || (!fromTextNode && m_charInfo.isSpecialAttrChar(ch))) { String outputStringForChar = m_charInfo.getOutputStringForChar(ch); @@ -1399,6 +1398,7 @@ abstract public class ToStream extends SerializerBase if (m_cdataTagOpen) closeCDATA(); + // the check with _escaping is a bit of a hack for XLSTC if (m_disableOutputEscapingStates.peekOrFalse() || (!m_escaping)) { @@ -1421,173 +1421,82 @@ abstract public class ToStream extends SerializerBase try { int i; + char ch1; int startClean; // skip any leading whitspace // don't go off the end and use a hand inlined version // of isWhitespace(ch) final int end = start + length; - int lastDirtyCharProcessed = start - 1; // last non-clean character that was processed - // that was processed - final Writer writer = m_writer; - boolean isAllWhitespace = true; - - // process any leading whitspace - i = start; - while (i < end && isAllWhitespace) { - char ch1 = chars[i]; - - if (m_charInfo.shouldMapTextChar(ch1)) { - // The character is supposed to be replaced by a String - // so write out the clean whitespace characters accumulated - // so far - // then the String. - writeOutCleanChars(chars, i, lastDirtyCharProcessed); - String outputStringForChar = m_charInfo - .getOutputStringForChar(ch1); - writer.write(outputStringForChar); - // We can't say that everything we are writing out is - // all whitespace, we just wrote out a String. - isAllWhitespace = false; - lastDirtyCharProcessed = i; // mark the last non-clean - // character processed - i++; - } else { - // The character is clean, but is it a whitespace ? - switch (ch1) { - // TODO: Any other whitespace to consider? - case CharInfo.S_SPACE: - // Just accumulate the clean whitespace - i++; - break; - case CharInfo.S_LINEFEED: - lastDirtyCharProcessed = processLineFeed(chars, i, - lastDirtyCharProcessed, writer); - i++; - break; - case CharInfo.S_CARRIAGERETURN: - writeOutCleanChars(chars, i, lastDirtyCharProcessed); - writer.write(" "); - lastDirtyCharProcessed = i; - i++; - break; - case CharInfo.S_HORIZONAL_TAB: - // Just accumulate the clean whitespace - i++; - break; - default: - // The character was clean, but not a whitespace - // so break the loop to continue with this character - // (we don't increment index i !!) - isAllWhitespace = false; - break; + int lastDirty = start - 1; // last character that needed processing + for (i = start; + ((i < end) + && ((ch1 = chars[i]) == 0x20 + || (ch1 == 0xA && m_lineSepUse) + || ch1 == 0xD + || ch1 == 0x09)); + i++) + { + /* + * We are processing leading whitespace, but are doing the same + * processing for dirty characters here as for non-whitespace. + * + */ + if (!m_charInfo.isTextASCIIClean(ch1)) + { + lastDirty = processDirty(chars,end, i,ch1, lastDirty, true); + i = lastDirty; } } - } /* If there is some non-whitespace, mark that we may need * to preserve this. This is only important if we have indentation on. */ - if (i < end || !isAllWhitespace) + if (i < end) m_ispreserve = true; + +// int lengthClean; // number of clean characters in a row +// final boolean[] isAsciiClean = m_charInfo.getASCIIClean(); + + final boolean isXML10 = XMLVERSION10.equals(getVersion()); + // we've skipped the leading whitespace, now deal with the rest for (; i < end; i++) { - char ch = chars[i]; - - if (m_charInfo.shouldMapTextChar(ch)) { - // The character is supposed to be replaced by a String - // e.g. '&' --> "&" - // e.g. '<' --> "<" - writeOutCleanChars(chars, i, lastDirtyCharProcessed); - String outputStringForChar = m_charInfo.getOutputStringForChar(ch); - writer.write(outputStringForChar); - lastDirtyCharProcessed = i; - } - else { - if (ch <= 0x1F) { - // Range 0x00 through 0x1F inclusive - // - // This covers the non-whitespace control characters - // in the range 0x1 to 0x1F inclusive. - // It also covers the whitespace control characters in the same way: - // 0x9 TAB - // 0xA NEW LINE - // 0xD CARRIAGE RETURN - // - // We also cover 0x0 ... It isn't valid - // but we will output "�" - - // The default will handle this just fine, but this - // is a little performance boost to handle the more - // common TAB, NEW-LINE, CARRIAGE-RETURN - switch (ch) { - - case CharInfo.S_HORIZONAL_TAB: - // Leave whitespace TAB as a real character + { + // A tight loop to skip over common clean chars + // This tight loop makes it easier for the JIT + // to optimize. + char ch2; + while (i startClean) { int lengthClean = i - startClean; @@ -1606,32 +1515,6 @@ abstract public class ToStream extends SerializerBase if (m_tracer != null) super.fireCharEvent(chars, start, length); } - - private int processLineFeed(final char[] chars, int i, int lastProcessed, final Writer writer) throws IOException { - if (!m_lineSepUse - || (m_lineSepLen ==1 && m_lineSep[0] == CharInfo.S_LINEFEED)){ - // We are leaving the new-line alone, and it is just - // being added to the 'clean' characters, - // so the last dirty character processed remains unchanged - } - else { - writeOutCleanChars(chars, i, lastProcessed); - writer.write(m_lineSep, 0, m_lineSepLen); - lastProcessed = i; - } - return lastProcessed; - } - - private void writeOutCleanChars(final char[] chars, int i, int lastProcessed) throws IOException { - int startClean; - startClean = lastProcessed + 1; - if (startClean < i) - { - int lengthClean = i - startClean; - m_writer.write(chars, startClean, lengthClean); - } - } - /** * This method checks if a given character is between C0 or C1 range * of Control characters. @@ -1751,7 +1634,7 @@ abstract public class ToStream extends SerializerBase * * @throws org.xml.sax.SAXException */ - private int accumDefaultEscape( + protected int accumDefaultEscape( Writer writer, char ch, int i, @@ -1815,15 +1698,16 @@ abstract public class ToStream extends SerializerBase * to write it out as Numeric Character Reference(NCR) regardless of XML Version * being used for output document. */ - if (isCharacterInC0orC1Range(ch) || isNELorLSEPCharacter(ch)) + if (isCharacterInC0orC1Range(ch) || + (XMLVERSION11.equals(getVersion()) && isNELorLSEPCharacter(ch))) { writer.write("&#"); writer.write(Integer.toString(ch)); writer.write(';'); } else if ((!escapingNotNeeded(ch) || - ( (fromTextNode && m_charInfo.shouldMapTextChar(ch)) - || (!fromTextNode && m_charInfo.shouldMapAttrChar(ch)))) + ( (fromTextNode && m_charInfo.isSpecialTextChar(ch)) + || (!fromTextNode && m_charInfo.isSpecialAttrChar(ch)))) && m_elemContext.m_currentElemDepth > 0) { writer.write("&#"); @@ -2087,86 +1971,28 @@ abstract public class ToStream extends SerializerBase string.getChars(0,len, m_attrBuff, 0); final char[] stringChars = m_attrBuff; - for (int i = 0; i < len;) + for (int i = 0; i < len; ) { char ch = stringChars[i]; + if (escapingNotNeeded(ch) && (!m_charInfo.isSpecialAttrChar(ch))) + { + writer.write(ch); + i++; + } + else + { // I guess the parser doesn't normalize cr/lf in attributes. -sb +// if ((CharInfo.S_CARRIAGERETURN == ch) +// && ((i + 1) < len) +// && (CharInfo.S_LINEFEED == stringChars[i + 1])) +// { +// i++; +// ch = CharInfo.S_LINEFEED; +// } - if (m_charInfo.shouldMapAttrChar(ch) || !(escapingNotNeeded(ch))) { - // The character is supposed to be replaced by a String - // e.g. '&' --> "&" - // e.g. '<' --> "<" i = accumDefaultEscape(writer, ch, i, stringChars, len, false, true); } - else { - i++; - if (0x0 <= ch && ch <= 0x1F) { - // Range 0x00 through 0x1F inclusive - // This covers the non-whitespace control characters - // in the range 0x1 to 0x1F inclusive. - // It also covers the whitespace control characters in the same way: - // 0x9 TAB - // 0xA NEW LINE - // 0xD CARRIAGE RETURN - // - // We also cover 0x0 ... It isn't valid - // but we will output "�" - - // The default will handle this just fine, but this - // is a little performance boost to handle the more - // common TAB, NEW-LINE, CARRIAGE-RETURN - switch (ch) { - - case CharInfo.S_HORIZONAL_TAB: - writer.write(" "); - break; - case CharInfo.S_LINEFEED: - writer.write(" "); - break; - case CharInfo.S_CARRIAGERETURN: - writer.write(" "); - break; - default: - writer.write("&#"); - writer.write(Integer.toString(ch)); - writer.write(';'); - break; - } - } - else if (ch < 0x7F) { - // Range 0x20 through 0x7E inclusive - // Normal ASCII chars - writer.write(ch); - } - else if (ch <= 0x9F){ - // Range 0x7F through 0x9F inclusive - // More control characters - writer.write("&#"); - writer.write(Integer.toString(ch)); - writer.write(';'); - } - else if (ch == CharInfo.S_LINE_SEPARATOR) { - // LINE SEPARATOR - writer.write("
"); - } - else if (m_encodingInfo.isInEncoding(ch)) { - // If the character is in the encoding, and - // not in the normal ASCII range, we also - // just write it out - writer.write(ch); - } - else { - // This is a fallback plan, we should never get here - // but if the character wasn't previously handled - // (i.e. isn't in the encoding, etc.) then what - // should we do? We choose to write out a character ref - writer.write("&#"); - writer.write(Integer.toString(ch)); - writer.write(';'); - } - } - } } /** @@ -2936,14 +2762,6 @@ abstract public class ToStream extends SerializerBase closeCDATA(); m_cdataTagOpen = false; } - if (m_writer != null) { - try { - m_writer.flush(); - } - catch(IOException e) { - // what? me worry? - } - } } public void setContentHandler(ContentHandler ch) diff --git a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java index 51e1331144a..e64cc3face8 100644 --- a/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java +++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java @@ -56,7 +56,7 @@ public final class ToXMLStream extends ToStream * Map that tells which XML characters should have special treatment, and it * provides character to entity name lookup. */ - private CharInfo m_xmlcharInfo = + private static CharInfo m_xmlcharInfo = // new CharInfo(CharInfo.XML_ENTITIES_RESOURCE); CharInfo.getCharInfo(CharInfo.XML_ENTITIES_RESOURCE, Method.XML); @@ -329,11 +329,12 @@ public final class ToXMLStream extends ToStream /** * Before Xalan 1497, a newline char was printed out if not inside of an - * element. The whitespace is not significant if the output is standalone + * element. The whitespace is not significant is the output is standalone */ if (m_elemContext.m_currentElemDepth <= 0 && m_isStandalone) writer.write(m_lineSep, 0, m_lineSepLen); + /* * Don't write out any indentation whitespace now, * because there may be non-whitespace text after this. diff --git a/jaxp/src/com/sun/xml/internal/stream/XMLEventReaderImpl.java b/jaxp/src/com/sun/xml/internal/stream/XMLEventReaderImpl.java index fd7c9e120e2..ee4103a9c6a 100644 --- a/jaxp/src/com/sun/xml/internal/stream/XMLEventReaderImpl.java +++ b/jaxp/src/com/sun/xml/internal/stream/XMLEventReaderImpl.java @@ -248,8 +248,11 @@ public class XMLEventReaderImpl implements javax.xml.stream.XMLEventReader{ object = nextEvent(); }catch(XMLStreamException streamException){ fLastEvent = null ; - //xxx: what should be done in this case ? - throw new NoSuchElementException(); + //don't swallow the cause + NoSuchElementException e = new NoSuchElementException(streamException.getMessage()); + e.initCause(streamException.getCause()); + throw e; + } return object; } diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 6513a494ea2..36a8d495d93 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -160,3 +160,14 @@ e8afc16522e190cb93c66bcb15d6fba0fe9e6833 jdk8-b35 89b36c658e39f0a2957be55453a3a3befd9c8a6b jdk8-b36 b05a948db1b6c933c980f24e4dc8fd897b7cf4ef jdk8-b37 ac1ba3b56775e3cdcd91b7a48793b59f6a3c18b5 jdk8-b38 +7f6b44fd303478caa83575dbc225de187c509c50 jdk8-b39 +09a0ddda03cb36deb6ee9edf789da12aa4674c6b jdk8-b40 +f2072b164b0519227833a2994f78e3988ee67827 jdk8-b41 +1f20f37818a91b66eaeba268d0b785718598ee0e jdk8-b42 +f00c12994562c2f68d348a7c3e829374a89294e2 jdk8-b43 +f6a417540ef124c9b4123d07da5e26f2ab909949 jdk8-b44 +e80ac58b5ba904f24e125c742c30d0d740f05f86 jdk8-b45 +ae368a83c2404b65c9e38c65e2aa081f2201ca74 jdk8-b46 +fe6a060afc404dcf0921708a740de770666b781f jdk8-b47 +efb564de8a8ee397a65fab77d45cb20200f6ddd8 jdk8-b48 +b48865af8ac559ba6f60fb86fa3fe0ebdd22746c jdk8-b49 diff --git a/jaxws/makefiles/Makefile b/jaxws/makefiles/Makefile index f44d17d8068..bfb2c56b937 100644 --- a/jaxws/makefiles/Makefile +++ b/jaxws/makefiles/Makefile @@ -23,12 +23,13 @@ # questions. # +# This must be the first rule +default: all + include $(SPEC) include MakeBase.gmk include JavaCompilation.gmk -default: all - JAVAC_JARS ?= -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \ -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar DISABLE_JAXWS_WARNINGS:=-Xlint:all,-varargs,-rawtypes,-deprecation,-unchecked,-serial,-dep-ann,-cast,-fallthrough,-static diff --git a/jdk/.hgtags b/jdk/.hgtags index 296cc4b01a8..a49f7948b7a 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -160,3 +160,14 @@ ddfe5562f61f54ed2121ac0c73b688b94f3e66b5 jdk8-b32 45da9cb055ee258dc09e69c1718e27eadea38e45 jdk8-b36 9e82ac15ab80370d6e021aea7b98c7c9626adb5e jdk8-b37 c45f3509a70796c54b48f32910d1caf435763416 jdk8-b38 +b6f52911752110a2889681923992c7a0baa52ccc jdk8-b39 +b88fc3359dc7edabfa8a228855d8cebf8843c055 jdk8-b40 +4eac56f073ea8179b1a35fcd2af9b48b0088be9f jdk8-b41 +cf5c1f6fbc5ba14163fe0ef8eb8601b33f951372 jdk8-b42 +b3246687c3695dff6f461bb407f9db88f7d072e7 jdk8-b43 +db471a7af03168e4441c245b1d9976f720a7cb77 jdk8-b44 +b92353a01aa049bc508fc56f0347d5934b7c4390 jdk8-b45 +8d2ed9d58453c8049715a72a6d26b6b66b37a94c jdk8-b46 +00b22b23269a57d0bb46c57753be2fe9a9d2c1a3 jdk8-b47 +3e4ab821f46166fcf63e8fe5c8046216003c941f jdk8-b48 +51707c3b75c0f521794d9ab425f4e5b2351c70c1 jdk8-b49 diff --git a/jdk/THIRD_PARTY_README b/jdk/THIRD_PARTY_README index ee5463a922e..759733bfceb 100644 --- a/jdk/THIRD_PARTY_README +++ b/jdk/THIRD_PARTY_README @@ -3383,3 +3383,397 @@ included with JRE 7, JDK 7, and OpenJDK 7, except where noted: ------------------------------------------------------------------------------- +%% This notice is provided with respect to Mozilla Network Security +Services (NSS), which is supplied with the JDK test suite in the OpenJDK +source code repository. It is licensed under Mozilla Public License (MPL), +version 2.0. + +The NSS libraries are supplied in executable form, built from unmodified +NSS source code labeled with the "NSS_3.13.1_RTM" release tag. + +The NSS source code is available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/src + +The NSS libraries are available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/lib + +--- begin of LICENSE --- + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + diff --git a/jdk/make/com/apple/osxui/Makefile b/jdk/make/com/apple/osxui/Makefile index 63d78d2872e..0970061d1f7 100644 --- a/jdk/make/com/apple/osxui/Makefile +++ b/jdk/make/com/apple/osxui/Makefile @@ -65,12 +65,8 @@ FILES_export = \ com/apple/laf/ScreenMenuPropertyHandler.java \ com/apple/laf/ScreenMenuPropertyListener.java -#RESOURCE_BUNDLES_COMPILED_PROPERTIES += \ -# com/apple/laf/resources/aqua.properties \ -# com/apple/laf/resources/aqua_de.properties \ -# com/apple/laf/resources/aqua_fr.properties \ -# com/apple/laf/resources/aqua_ja.properties - +RESOURCE_BUNDLES_COMPILED_PROPERTIES += \ + com/apple/laf/resources/aqua.properties # # Rules diff --git a/jdk/make/com/oracle/Makefile b/jdk/make/com/oracle/Makefile index a657750b2c1..63718869a4f 100644 --- a/jdk/make/com/oracle/Makefile +++ b/jdk/make/com/oracle/Makefile @@ -30,6 +30,22 @@ PRODUCT = oracle #SUBDIRS_MAKEFLAGS += JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation,-path include $(BUILDDIR)/common/Defs.gmk +JFR_SRCDIRS_EXIST := $(shell \ + if [ -d $(CLOSED_SHARE_SRC)/native/oracle/jfr ] ; then \ + echo true; \ + else \ + echo false; \ + fi) + +JFR = +ifndef OPENJDK + ifndef JAVASE_EMBEDDED + ifeq ($(JFR_SRCDIRS_EXIST), true) + JFR = jfr + endif + endif +endif + # build com/oracle/security/ucrypto on Solaris platform for non-OpenJDK builds UCRYPTO = ifndef OPENJDK @@ -38,13 +54,6 @@ ifndef OPENJDK endif endif -JFR = -ifndef OPENJDK -ifndef JAVASE_EMBEDDED - JFR = jfr -endif -endif - SUBDIRS = $(JFR) net nio util $(UCRYPTO) include $(BUILDDIR)/common/Subdirs.gmk diff --git a/jdk/make/com/oracle/security/ucrypto/Makefile b/jdk/make/com/oracle/security/ucrypto/Makefile index 8ea7a749a7b..f6545e89828 100644 --- a/jdk/make/com/oracle/security/ucrypto/Makefile +++ b/jdk/make/com/oracle/security/ucrypto/Makefile @@ -139,7 +139,7 @@ ifndef OPENJDK # CLASSDESTDIR = $(TEMPDIR)/classes JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)" + "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" include $(BUILDDIR)/common/Mapfile-vers.gmk include $(BUILDDIR)/common/Library.gmk diff --git a/jdk/make/com/sun/jmx/Makefile b/jdk/make/com/sun/jmx/Makefile index 2f036de3576..62435751673 100644 --- a/jdk/make/com/sun/jmx/Makefile +++ b/jdk/make/com/sun/jmx/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -100,6 +100,23 @@ FILES_ties = $(subst javax/management/remote/rmi/,javax/management/remote/rmi/ # so that *_tie classes are generated in package without the prefix # org.omg.stub (6375696) # +# To ensure the latest stub generator files are picked up from corba repo +# when available, we need to run with latest rmic version available. rmic +# launch tool not built at this stage but we can invoke via rmi class. + +RMIC_JAVA = $(OUTPUTDIR)/bin/java +# need to treat 64bit solaris differently +ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) +RMIC_JAVA = $(OUTPUTDIR)/bin/amd64/java +endif +ifeq ($(PLATFORM)-$(LIBARCH), solaris-sparcv9) +RMIC_JAVA = $(OUTPUTDIR)/bin/sparcv9/java +endif + +ifeq ($(CROSS_COMPILE_ARCH),) +RMIC = $(RMIC_JAVA) $(JAVA_TOOLS_FLAGS) -cp $(OUTPUTDIR)/classes sun.rmi.rmic.Main +endif + $(CLASSDESTDIR)/%_Stub.class: $(CLASSDESTDIR)/%.class $(prep-target) $(RMIC) -classpath "$(CLASSDESTDIR)" \ diff --git a/jdk/make/common/Defs-embedded.gmk b/jdk/make/common/Defs-embedded.gmk index 089fae9d586..b95bfe468ae 100644 --- a/jdk/make/common/Defs-embedded.gmk +++ b/jdk/make/common/Defs-embedded.gmk @@ -42,7 +42,7 @@ REQUIRED_ALSA_VERSION = OTHER_CPPFLAGS += -DJAVASE_EMBEDDED # Product naming -PRODUCT_SUFFIX = SE Runtime Environment for Embedded +PRODUCT_SUFFIX = SE Embedded Runtime Environment RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) # Reduced JRE locations diff --git a/jdk/make/common/Defs-solaris.gmk b/jdk/make/common/Defs-solaris.gmk index 5c272be1c35..b08488f4277 100644 --- a/jdk/make/common/Defs-solaris.gmk +++ b/jdk/make/common/Defs-solaris.gmk @@ -99,6 +99,9 @@ CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! # variable names because the incoming option value can be overridden # in some situations, e.g., a VARIANT != OPT build. +ADD_GNU_DEBUGLINK = $(ABS_BUILDTOOLBINDIR)/add_gnu_debuglink +FIX_EMPTY_SEC_HDR_FLAGS = $(ABS_BUILDTOOLBINDIR)/fix_empty_sec_hdr_flags + ifeq ($(VARIANT), OPT) FULL_DEBUG_SYMBOLS ?= 1 ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS) @@ -113,26 +116,11 @@ _JUNK_ := $(shell \ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # Default OBJCOPY comes from the SUNWbinutils package: DEF_OBJCOPY=/usr/sfw/bin/gobjcopy - ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) - # On Solaris AMD64/X64, gobjcopy is not happy and fails: - # - # usr/sfw/bin/gobjcopy --add-gnu-debuglink=.debuginfo .so - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - _JUNK_ := $(shell \ - echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64") - OBJCOPY= - else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif + OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) + ifneq ($(ALT_OBJCOPY),) + _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") + # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path + OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) endif # Setting ENABLE_FULL_DEBUG_SYMBOLS=1 (and OBJCOPY) above enables the @@ -243,18 +231,21 @@ endif # optimization flags as used by FASTDEBUG. We also want all the # debug info in one place (-xs). # +CFLAGS_COMMON= +CXXFLAGS_COMMON= ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1) ifeq ($(VARIANT), OPT) - CC_OPT = -g -xs $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXX_OPT = -g0 -xs $(CXX_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) + OPTIMIZATION_LEVEL = $(FASTDEBUG_OPTIMIZATION_LEVEL) + CFLAGS_COMMON += -g -xs + CXXFLAGS_COMMON += -g0 -xs endif CFLAGS_DEBUG_OPTION += -xs CXXFLAGS_DEBUG_OPTION += -xs endif endif -CFLAGS_COMMON = -L$(OBJDIR) +CFLAGS_COMMON += -L$(OBJDIR) # Do not allow C99 language features like declarations in code etc. CFLAGS_COMMON += -xc99=%none diff --git a/jdk/make/common/Defs.gmk b/jdk/make/common/Defs.gmk index e92eed9ae06..70ce7783053 100644 --- a/jdk/make/common/Defs.gmk +++ b/jdk/make/common/Defs.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -297,6 +297,7 @@ BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars # for generated tool class files BUILDTOOLBINDIR = $(OUTPUTDIR)/btbins +ABS_BUILDTOOLBINDIR = $(ABS_OUTPUTDIR)/btbins # for generated java source files GENSRCDIR = $(OUTPUTDIR)/gensrc # for generated C source files (not javah) diff --git a/jdk/make/common/Library.gmk b/jdk/make/common/Library.gmk index 2583e83dc5d..7b47adf7786 100644 --- a/jdk/make/common/Library.gmk +++ b/jdk/make/common/Library.gmk @@ -245,6 +245,12 @@ ifneq ($(PLATFORM), macosx) ARFLAGS = -r endif +ifeq ($(PLATFORM), solaris) + ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1) +$(ACTUAL_LIBRARY):: $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) + endif +endif + $(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder) @$(prep-target) @$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), OPTIMIZATION_LEVEL=$(OPTIMIZATION_LEVEL)" @@ -260,11 +266,29 @@ endif # WRITE_LIBVERSION ifneq ($(PLATFORM), macosx) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1) + ifeq ($(PLATFORM), 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. (set -e ; \ $(CD) $(@D) ; \ - $(OBJCOPY) --only-keep-debug $(@F) $(LIBRARY).debuginfo ; \ - $(OBJCOPY) --add-gnu-debuglink=$(LIBRARY).debuginfo $(@F) ; \ + $(FIX_EMPTY_SEC_HDR_FLAGS) $(@F) ; \ + $(OBJCOPY) --only-keep-debug $(@F) $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ + $(ADD_GNU_DEBUGLINK) $(LIB_PREFIX)$(LIBRARY).debuginfo $(@F) ; \ ) + else # PLATFORM != solaris + (set -e ; \ + $(CD) $(@D) ; \ + $(OBJCOPY) --only-keep-debug $(@F) $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ + $(OBJCOPY) --add-gnu-debuglink=$(LIB_PREFIX)$(LIBRARY).debuginfo $(@F) ; \ + ) + endif # PLATFORM == solaris ifeq ($(STRIP_POLICY),all_strip) $(STRIP) $@ else @@ -281,8 +305,8 @@ endif # WRITE_LIBVERSION ifeq ($(ZIP_DEBUGINFO_FILES),1) (set -e ; \ $(CD) $(@D) ; \ - $(ZIPEXE) -q $(LIBRARY).diz $(LIBRARY).debuginfo ; \ - $(RM) $(LIBRARY).debuginfo ; \ + $(ZIPEXE) -q $(LIB_PREFIX)$(LIBRARY).diz $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ + $(RM) $(LIB_PREFIX)$(LIBRARY).debuginfo ; \ ) endif endif # LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS diff --git a/jdk/make/common/Program.gmk b/jdk/make/common/Program.gmk index 4e211d84600..f6228d40a6d 100644 --- a/jdk/make/common/Program.gmk +++ b/jdk/make/common/Program.gmk @@ -230,6 +230,13 @@ else # # This rule only applies on unix. It supports quantify and its ilk. # + + ifeq ($(PLATFORM), solaris) + ifeq ($(PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS),1) + $(ACTUAL_PROGRAM):: $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) + endif + endif + $(ACTUAL_PROGRAM):: $(FILES_o) @$(prep-target) @set -- $?; \ @@ -244,11 +251,29 @@ else ifneq ($(PLATFORM), macosx) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) ifeq ($(PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS),1) + ifeq ($(PLATFORM), 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. + (set -e ; \ + $(CD) $(@D) ; \ + $(FIX_EMPTY_SEC_HDR_FLAGS) $(@F) ; \ + $(OBJCOPY) --only-keep-debug $(@F) $(@F).debuginfo ; \ + $(ADD_GNU_DEBUGLINK) $(@F).debuginfo $(@F) ; \ + ) + else # PLATFORM != solaris (set -e ; \ $(CD) $(@D) ; \ $(OBJCOPY) --only-keep-debug $(@F) $(@F).debuginfo ; \ $(OBJCOPY) --add-gnu-debuglink=$(@F).debuginfo $(@F) ; \ ) + endif # PLATFORM == solaris ifeq ($(STRIP_POLICY),all_strip) $(STRIP) $@ else diff --git a/jdk/make/common/internal/Resources.gmk b/jdk/make/common/internal/Resources.gmk index 56a81fbf09e..fccfe273c63 100644 --- a/jdk/make/common/internal/Resources.gmk +++ b/jdk/make/common/internal/Resources.gmk @@ -197,6 +197,10 @@ $(GENSRCDIR)/%.java: $(SHARE_SRC)/classes/%.properties $(add-property-java-file) $(GENSRCDIR)/%.java: $(GENSRCDIR)/%.properties $(add-property-java-file) +ifdef PLATFORM_SRC_MACOS +$(GENSRCDIR)/%.java: $(PLATFORM_SRC_MACOS)/classes/%.properties + $(add-property-java-file) +endif ifndef OPENJDK $(GENSRCDIR)/%.java: $(CLOSED_PLATFORM_SRC)/classes/%.properties $(add-property-java-file) diff --git a/jdk/make/common/shared/Defs-java.gmk b/jdk/make/common/shared/Defs-java.gmk index 5002c28198a..eb50e475e48 100644 --- a/jdk/make/common/shared/Defs-java.gmk +++ b/jdk/make/common/shared/Defs-java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -139,7 +139,7 @@ JAVACFLAGS += $(JAVAC_LINT_OPTIONS) # built implicitly/explicitly. # ifeq ($(wildcard $(SHARE_SRC)/classes/javax/crypto/Cipher.java),) - JCEFLAGS = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar + JCE_PATH = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar endif # Add the source level @@ -152,11 +152,11 @@ TARGET_CLASS_VERSION = 7 CLASS_VERSION = -target $(TARGET_CLASS_VERSION) JAVACFLAGS += $(CLASS_VERSION) JAVACFLAGS += -encoding ascii -JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCEFLAGS)" +JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCE_PATH)" JAVACFLAGS += $(OTHER_JAVACFLAGS) # Needed for javah -JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCEFLAGS)" +JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCE_PATH)" # Needed for javadoc to ensure it builds documentation # against the newly built classes diff --git a/jdk/make/java/java/FILES_c.gmk b/jdk/make/java/java/FILES_c.gmk index a8256b78e16..2fa706bc825 100644 --- a/jdk/make/java/java/FILES_c.gmk +++ b/jdk/make/java/java/FILES_c.gmk @@ -69,7 +69,6 @@ FILES_c = \ jdk_util_md.c \ check_version.c \ java_props_md.c \ - DriverManager.c \ ConstantPool.c \ MessageUtils.c \ GC.c \ diff --git a/jdk/make/java/java/FILES_java.gmk b/jdk/make/java/java/FILES_java.gmk index 01529b4f9b1..9842527f05a 100644 --- a/jdk/make/java/java/FILES_java.gmk +++ b/jdk/make/java/java/FILES_java.gmk @@ -372,6 +372,7 @@ JAVA_JAVA_java = \ java/util/spi/CurrencyNameProvider.java \ java/util/spi/LocaleNameProvider.java \ java/util/spi/LocaleServiceProvider.java \ + java/util/spi/ResourceBundleControlProvider.java \ java/util/spi/TimeZoneNameProvider.java \ java/io/Closeable.java \ java/io/Flushable.java \ @@ -482,6 +483,7 @@ JAVA_JAVA_java = \ sun/misc/JavaNioAccess.java \ sun/misc/Perf.java \ sun/misc/PerfCounter.java \ + sun/misc/Hashing.java \ sun/net/www/protocol/jar/Handler.java \ sun/net/www/protocol/jar/JarURLConnection.java \ sun/net/www/protocol/file/Handler.java \ diff --git a/jdk/make/java/java/mapfile-vers b/jdk/make/java/java/mapfile-vers index 8517e713dd9..23cca532fd7 100644 --- a/jdk/make/java/java/mapfile-vers +++ b/jdk/make/java/java/mapfile-vers @@ -232,7 +232,6 @@ SUNWprivate_1.1 { Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; Java_java_security_AccessController_getStackAccessControlContext; Java_java_security_AccessController_getInheritedAccessControlContext; - Java_java_sql_DriverManager_getCallerClassLoader; Java_java_util_ResourceBundle_getClassContext; Java_java_util_TimeZone_getSystemTimeZoneID; Java_java_util_TimeZone_getSystemGMTOffsetID; diff --git a/jdk/make/java/nio/Makefile b/jdk/make/java/nio/Makefile index 76f746c73e4..9b9ef88a47c 100644 --- a/jdk/make/java/nio/Makefile +++ b/jdk/make/java/nio/Makefile @@ -55,6 +55,9 @@ FILES_java += \ sun/nio/ch/DevPollArrayWrapper.java \ sun/nio/ch/DevPollSelectorImpl.java \ sun/nio/ch/DevPollSelectorProvider.java \ + sun/nio/ch/EventPortSelectorImpl.java \ + sun/nio/ch/EventPortSelectorProvider.java \ + sun/nio/ch/EventPortWrapper.java \ sun/nio/ch/InheritedChannel.java \ sun/nio/ch/PollSelectorProvider.java \ sun/nio/ch/PollSelectorImpl.java \ diff --git a/jdk/make/java/nio/mapfile-linux b/jdk/make/java/nio/mapfile-linux index d72244170b9..63c9cbf1443 100644 --- a/jdk/make/java/nio/mapfile-linux +++ b/jdk/make/java/nio/mapfile-linux @@ -39,7 +39,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_EPollArrayWrapper_epollCreate; Java_sun_nio_ch_EPollArrayWrapper_epollCtl; Java_sun_nio_ch_EPollArrayWrapper_epollWait; - Java_sun_nio_ch_EPollArrayWrapper_fdLimit; Java_sun_nio_ch_EPollArrayWrapper_init; Java_sun_nio_ch_EPollArrayWrapper_interrupt; Java_sun_nio_ch_EPollArrayWrapper_offsetofData; @@ -87,7 +86,9 @@ SUNWprivate_1.1 { Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; Java_sun_nio_ch_IOUtil_fdVal; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; diff --git a/jdk/make/java/nio/mapfile-solaris b/jdk/make/java/nio/mapfile-solaris index 4d86f28a566..5a4908e1f6d 100644 --- a/jdk/make/java/nio/mapfile-solaris +++ b/jdk/make/java/nio/mapfile-solaris @@ -36,7 +36,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_DatagramDispatcher_readv0; Java_sun_nio_ch_DatagramDispatcher_write0; Java_sun_nio_ch_DatagramDispatcher_writev0; - Java_sun_nio_ch_DevPollArrayWrapper_fdLimit; Java_sun_nio_ch_DevPollArrayWrapper_init; Java_sun_nio_ch_DevPollArrayWrapper_interrupt; Java_sun_nio_ch_DevPollArrayWrapper_poll0; @@ -74,8 +73,10 @@ SUNWprivate_1.1 { Java_sun_nio_ch_InheritedChannel_soType0; Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_fdVal; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; @@ -112,13 +113,13 @@ SUNWprivate_1.1 { Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs; Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect; - Java_sun_nio_ch_SolarisEventPort_init; - Java_sun_nio_ch_SolarisEventPort_portCreate; - Java_sun_nio_ch_SolarisEventPort_portClose; - Java_sun_nio_ch_SolarisEventPort_portAssociate; - Java_sun_nio_ch_SolarisEventPort_portGet; - Java_sun_nio_ch_SolarisEventPort_portGetn; - Java_sun_nio_ch_SolarisEventPort_portSend; + Java_sun_nio_ch_SolarisEventPort_port_1create; + Java_sun_nio_ch_SolarisEventPort_port_1close; + Java_sun_nio_ch_SolarisEventPort_port_1associate; + Java_sun_nio_ch_SolarisEventPort_port_1dissociate; + Java_sun_nio_ch_SolarisEventPort_port_1get; + Java_sun_nio_ch_SolarisEventPort_port_1getn; + Java_sun_nio_ch_SolarisEventPort_port_1send; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGio; Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGio; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGnomeVfs; diff --git a/jdk/make/java/redist/Makefile b/jdk/make/java/redist/Makefile index f72ad57333b..fb257f5c354 100644 --- a/jdk/make/java/redist/Makefile +++ b/jdk/make/java/redist/Makefile @@ -261,8 +261,7 @@ ifndef BUILD_CLIENT_ONLY ifeq ($(ZIP_DEBUGINFO_FILES),1) # the import JDK may not contain the target of the symlink ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DIZ_NAME)),) - # check for the .diz file, but create the .debuginfo link - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) + IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DIZ_NAME) endif else # the import JDK may not contain the target of the symlink @@ -319,8 +318,7 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) ifeq ($(ZIP_DEBUGINFO_FILES),1) # the import JDK may not contain the target of the symlink ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DIZ_NAME)),) - # check for the .diz file, but create the .debuginfo link - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) + IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DIZ_NAME) endif else # the import JDK may not contain the target of the symlink @@ -472,11 +470,24 @@ $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME): $(call install-sym-link, ../$(LIBJSIG_NAME)) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# we don't create a symlink to a libjsig.diz file +# We don't create a symlink to a libjsig.diz file, but we do put +# the libjsig.debuginfo symlink into a libjsig.diz file. The aurora +# system does not like dangling symlinks. + ifeq ($(ZIP_DEBUGINFO_FILES),1) +$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DIZ_NAME) \ +$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DIZ_NAME): + @$(prep-target) + $(LN) -s ../$(LIBJSIG_DEBUGINFO_NAME) $(@D)/$(LIBJSIG_DEBUGINFO_NAME) + ( $(CD) $(@D) ; \ + $(ZIPEXE) -y $(LIBJSIG_DIZ_NAME) $(LIBJSIG_DEBUGINFO_NAME) ; \ + $(RM) $(LIBJSIG_DEBUGINFO_NAME) ; \ + ) + else $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) \ $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): @$(prep-target) $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) + endif endif else $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME): @@ -484,10 +495,22 @@ $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME): $(call install-sym-link, ../$(LIBJSIG_NAME)) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) -# we don't create a symlink to a libjsig.diz file +# We don't create a symlink to a libjsig.diz file, but we do put +# the libjsig.debuginfo symlink into a libjsig.diz file. The aurora +# system does not like dangling symlinks. + ifeq ($(ZIP_DEBUGINFO_FILES),1) +$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DIZ_NAME): + @$(prep-target) + $(LN) -s ../$(LIBJSIG_DEBUGINFO_NAME) $(@D)/$(LIBJSIG_DEBUGINFO_NAME) + ( $(CD) $(@D) ; \ + $(ZIPEXE) -y $(LIBJSIG_DIZ_NAME) $(LIBJSIG_DEBUGINFO_NAME) ; \ + $(RM) $(LIBJSIG_DEBUGINFO_NAME) ; \ + ) + else $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): @$(prep-target) $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) + endif endif endif diff --git a/jdk/make/jprt.properties b/jdk/make/jprt.properties index 2e4e0fb8ac7..f41a227d30e 100644 --- a/jdk/make/jprt.properties +++ b/jdk/make/jprt.properties @@ -89,6 +89,7 @@ jprt.make.rule.core.test.targets= \ ${jprt.my.test.target.set:TESTNAME=jdk_text}, \ ${jprt.my.test.target.set:TESTNAME=jdk_tools1}, \ ${jprt.my.test.target.set:TESTNAME=jdk_tools2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jfr}, \ ${jprt.my.test.target.set:TESTNAME=jdk_misc} # All vm test targets (testset=all) diff --git a/jdk/make/netbeans/jconsole/build.xml b/jdk/make/netbeans/jconsole/build.xml index a6960676510..9c1fc9515d2 100644 --- a/jdk/make/netbeans/jconsole/build.xml +++ b/jdk/make/netbeans/jconsole/build.xml @@ -50,6 +50,7 @@ + diff --git a/jdk/make/sun/awt/make.depend b/jdk/make/sun/awt/make.depend index 02b3b1672d1..85097bc6ca4 100644 --- a/jdk/make/sun/awt/make.depend +++ b/jdk/make/sun/awt/make.depend @@ -32,13 +32,13 @@ $(OBJDIR)/awt_Clipboard.obj:: $(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLAS $(OBJDIR)/awt_Color.obj:: $(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Component.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Component.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_Container.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_Cursor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_DataTransferer.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_DataTransferer.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_DCHolder.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_DCHolder.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_ole.h ../../../src/windows/native/sun/windows/stdhdrs.h @@ -48,7 +48,7 @@ $(OBJDIR)/awt_Desktop.obj:: ../../../src/share/javavm/export/classfile_constants $(OBJDIR)/awt_DesktopProperties.obj:: $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Dialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Dialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_Dimension.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/stdhdrs.h @@ -60,11 +60,11 @@ $(OBJDIR)/awt_DrawingSurface.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDR $(OBJDIR)/awt_Event.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_FileDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_FileDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_Font.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Frame.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Frame.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_GDIObject.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h @@ -90,11 +90,11 @@ $(OBJDIR)/awt_Label.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java $(OBJDIR)/awt_List.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Menu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Menu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_MenuBar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_MenuBar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_MenuItem.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_MenuItem.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_Mlib.obj:: $(CLASSHDRDIR)/java_awt_image_BufferedImage.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Mlib.h ../../../src/windows/native/sun/windows/stdhdrs.h @@ -114,13 +114,13 @@ $(OBJDIR)/awt_parseImage.obj:: $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLAS $(OBJDIR)/awt_Pen.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_PopupMenu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_PopupMenu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_PrintControl.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_PrintDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_PrintDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_PrintJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_PrintJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_Rectangle.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h @@ -130,13 +130,13 @@ $(OBJDIR)/awt_Scrollbar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/ $(OBJDIR)/awt_ScrollPane.obj:: $(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_TextArea.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_TextArea.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_TextComponent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_TextField.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Toolkit.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Toolkit.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_TrayIcon.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h @@ -146,7 +146,7 @@ $(OBJDIR)/awt_Win32GraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLA $(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32FontManager.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/Blit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_Blit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h diff --git a/jdk/make/sun/font/Makefile b/jdk/make/sun/font/Makefile index 5dd35dd533e..b449b5a3dc3 100644 --- a/jdk/make/sun/font/Makefile +++ b/jdk/make/sun/font/Makefile @@ -90,6 +90,12 @@ else # PLATFORM unix endif # PLATFORM +# Turn off aliasing with GCC for ExtensionSubtables.cpp +ifeq ($(PLATFORM), linux) + CXXFLAGS += $(CXXFLAGS_$(@F)) + CXXFLAGS_ExtensionSubtables.o = -fno-strict-aliasing +endif + #In the non-OpenJDK mode we need to build T2K ifndef OPENJDK t2k: diff --git a/jdk/make/sun/jconsole/FILES.gmk b/jdk/make/sun/jconsole/FILES.gmk index 61085e65681..8fc34acb6d9 100644 --- a/jdk/make/sun/jconsole/FILES.gmk +++ b/jdk/make/sun/jconsole/FILES.gmk @@ -30,17 +30,22 @@ MANIFEST = sun/tools/jconsole/manifest PNG_FILES = \ - sun/tools/jconsole/resources/brandlogo.png \ - sun/tools/jconsole/resources/collapse-winlf.png \ - sun/tools/jconsole/resources/connected16.png \ - sun/tools/jconsole/resources/connected24.png \ - sun/tools/jconsole/resources/disconnected16.png \ - sun/tools/jconsole/resources/disconnected24.png \ - sun/tools/jconsole/resources/expand-winlf.png \ - sun/tools/jconsole/resources/masthead-left.png \ - sun/tools/jconsole/resources/masthead-right.png + sun/tools/jconsole/resources/brandlogo.png \ + sun/tools/jconsole/resources/collapse-winlf.png \ + sun/tools/jconsole/resources/connected16.png \ + sun/tools/jconsole/resources/connected24.png \ + sun/tools/jconsole/resources/disconnected16.png \ + sun/tools/jconsole/resources/disconnected24.png \ + sun/tools/jconsole/resources/expand-winlf.png \ + sun/tools/jconsole/resources/masthead-left.png \ + sun/tools/jconsole/resources/masthead-right.png GIF_FILES = \ - sun/tools/jconsole/resources/mbean.gif \ - sun/tools/jconsole/resources/mbeanserverdelegate.gif \ - sun/tools/jconsole/resources/xobject.gif + sun/tools/jconsole/resources/mbean.gif \ + sun/tools/jconsole/resources/mbeanserverdelegate.gif \ + sun/tools/jconsole/resources/xobject.gif + +PROP_FILES = \ + sun/tools/jconsole/resources/messages.properties \ + sun/tools/jconsole/resources/messages_ja.properties \ + sun/tools/jconsole/resources/messages_zh_CN.properties diff --git a/jdk/make/sun/jconsole/Makefile b/jdk/make/sun/jconsole/Makefile index da0200d7d20..c2651ce70e8 100644 --- a/jdk/make/sun/jconsole/Makefile +++ b/jdk/make/sun/jconsole/Makefile @@ -53,21 +53,21 @@ AUTO_FILES_JAVA_DIRS = sun/tools/jconsole \ FILES_png = $(PNG_FILES:%.png=$(CLASSBINDIR)/%.png) FILES_gif = $(GIF_FILES:%.gif=$(CLASSBINDIR)/%.gif) - +FILES_prop = $(PROP_FILES:%.properties=$(CLASSBINDIR)/%.properties) build: $(GENSRCDIR)/sun/tools/jconsole/Version.java # # Resources # LOCALE_SET_DEFINITION = jdk -RESOURCE_BUNDLES_JAVA = $(PKGDIR)/resources/JConsoleResources.java +RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES = $(PKGDIR)/resources/messages.properties # # Rules. # include $(BUILDDIR)/common/Classes.gmk -build: $(FILES_png) $(FILES_gif) $(TEMPDIR)/manifest $(JARFILE) +build: $(FILES_png) $(FILES_gif) $(FILES_prop) $(TEMPDIR)/manifest $(JARFILE) $(GENSRCDIR)/sun/tools/jconsole/Version.java: \ $(SHARE_SRC)/classes/sun/tools/jconsole/Version.java.template @@ -85,7 +85,7 @@ $(TEMPDIR)/manifest: $(SHARE_SRC)/classes/$(PKGDIR)/manifest # Extra rule to build jconsole.jar # -$(JARFILE): $(LIBDIR) $(FILES_class) $(FILES_png) $(FILES_gif) $(TEMPDIR)/manifest +$(JARFILE): $(LIBDIR) $(FILES_class) $(FILES_png) $(FILES_gif) $(FILES_prop) $(TEMPDIR)/manifest $(BOOT_JAR_CMD) -cfm $(JARFILE) $(TEMPDIR)/manifest \ -C $(CLASSBINDIR) sun/tools/jconsole \ -C $(CLASSBINDIR) com/sun/tools/jconsole \ diff --git a/jdk/make/sun/security/Makefile b/jdk/make/sun/security/Makefile index 217a7ef1bc0..50720320121 100644 --- a/jdk/make/sun/security/Makefile +++ b/jdk/make/sun/security/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -44,15 +44,8 @@ ifneq ($(PLATFORM), windows) JGSS_WRAPPER = jgss/wrapper endif -# Build PKCS#11 on all platforms except 64-bit Windows. -# We exclude windows-amd64 because we don't have any -# 64-bit PKCS#11 implementations to test with on that platform. +# Build PKCS#11 on all platforms PKCS11 = pkcs11 -ifeq ($(ARCH_DATA_MODEL), 64) - ifeq ($(PLATFORM), windows) - PKCS11 = - endif -endif # Build Microsoft CryptoAPI provider only on Windows platform. MSCAPI = diff --git a/jdk/make/sun/security/ec/Makefile b/jdk/make/sun/security/ec/Makefile index 841fc3716d2..0e92dd59cff 100644 --- a/jdk/make/sun/security/ec/Makefile +++ b/jdk/make/sun/security/ec/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -160,7 +160,7 @@ ifeq ($(NATIVE_ECC_AVAILABLE), true) $(PKGDIR)/ECKeyPairGenerator.java JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)" + "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" # diff --git a/jdk/make/sun/security/mscapi/Makefile b/jdk/make/sun/security/mscapi/Makefile index 65eef782654..1cd6024a9c4 100644 --- a/jdk/make/sun/security/mscapi/Makefile +++ b/jdk/make/sun/security/mscapi/Makefile @@ -150,7 +150,7 @@ OTHER_INCLUDES += \ # CLASSDESTDIR = $(TEMPDIR)/classes JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)" + "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" include $(BUILDDIR)/common/Mapfile-vers.gmk diff --git a/jdk/make/sun/security/pkcs11/Makefile b/jdk/make/sun/security/pkcs11/Makefile index d7e049d9e1f..ecdba0997da 100644 --- a/jdk/make/sun/security/pkcs11/Makefile +++ b/jdk/make/sun/security/pkcs11/Makefile @@ -151,7 +151,7 @@ OTHER_INCLUDES += \ # CLASSDESTDIR = $(TEMPDIR)/classes JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)" + "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" include $(BUILDDIR)/common/Mapfile-vers.gmk diff --git a/jdk/make/sun/xawt/Makefile b/jdk/make/sun/xawt/Makefile index 6ed7370888f..791bd2dc326 100644 --- a/jdk/make/sun/xawt/Makefile +++ b/jdk/make/sun/xawt/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -225,10 +225,16 @@ ifeq ($(ARCH_DATA_MODEL), 32) SIZERS = $(SIZER).32 SIZERS_C = $(SIZER_32_C) SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 +ifdef CROSS_COMPILE_ARCH +CFLAGS_32 = -m32 +endif else # !32 SIZERS = $(SIZER).64 SIZERS_C = $(SIZER_64_C) SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.64 +ifdef CROSS_COMPILE_ARCH +CFLAGS_64 = -m64 +endif endif # 32 endif # !macosx endif # solaris @@ -264,15 +270,16 @@ WRAPPER_GENERATOR_TEMPDIR=$(TEMPDIR)/sun/awt/X11/generator WRAPPER_GENERATOR_CLASS=$(WRAPPER_GENERATOR_TEMPDIR)/WrapperGenerator.class XLIBTYPES=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/xlibtypes.txt +ifndef CROSS_COMPILE_ARCH +SIZERS_CC = $(CC) +else +SIZERS_CC = $(HOST_CC) +endif + $(SIZERS): $(SIZERS_C) $(prep-target) -ifndef CROSS_COMPILE_ARCH - $(CC) $(CFLAGS_$(subst .,,$(suffix $@))) $(CPPFLAGS) -c -o $(SIZER)$(suffix $@).o $(SIZER)$(suffix $@).c - $(CC) $(CFLAGS_$(subst .,,$(suffix $@))) -o $@ $(CPPFLAGS) $(SIZER)$(suffix $@).o -else - $(HOST_CC) $(CPPFLAGS) -c -o $(SIZER)$(suffix $@).o $(SIZER)$(suffix $@).c - $(HOST_CC) $(CPPFLAGS) -o $@ $(SIZER)$(suffix $@).o -endif + $(SIZERS_CC) $(CFLAGS_$(subst .,,$(suffix $@))) $(CPPFLAGS) -c -o $(SIZER)$(suffix $@).o $(SIZER)$(suffix $@).c + $(SIZERS_CC) $(CFLAGS_$(subst .,,$(suffix $@))) -o $@ $(CPPFLAGS) $(SIZER)$(suffix $@).o $(WRAPPER_GENERATOR_CLASS): $(WRAPPER_GENERATOR_JAVA) $(prep-target) diff --git a/jdk/make/tools/CharsetMapping/GBK.map b/jdk/make/tools/CharsetMapping/GBK.map index 153f2386a48..edef5878a42 100644 --- a/jdk/make/tools/CharsetMapping/GBK.map +++ b/jdk/make/tools/CharsetMapping/GBK.map @@ -3,6 +3,10 @@ # (1)sorted # (2)added the singlebyte entries # +# (3)updated 0xA140-0xA7A0 mappings to follow GB18030/MS936 +# (4)added euro sign entry A2E3 20AC (instead of 0xA2E3 0xE76C) +# this is what gb18030 does. +# 0x00 0x0000 0x01 0x0001 0x02 0x0002 @@ -6508,12 +6512,12 @@ 0xA2A8 0x2177 0xA2A9 0x2178 0xA2AA 0x2179 -0xA2AB 0xE586 -0xA2AC 0xE587 -0xA2AD 0xE588 -0xA2AE 0xE589 -0xA2AF 0xE58A -0xA2B0 0xE58B +0xA2AB 0xE766 +0xA2AC 0xE767 +0xA2AD 0xE768 +0xA2AE 0xE769 +0xA2AF 0xE76A +0xA2B0 0xE76B 0xA2B1 0x2488 0xA2B2 0x2489 0xA2B3 0x248A @@ -6564,8 +6568,8 @@ 0xA2E0 0x2467 0xA2E1 0x2468 0xA2E2 0x2469 -0xA2E3 0xE58C -0xA2E4 0xE58D +0xA2E3 0x20AC +0xA2E4 0xE76D 0xA2E5 0x3220 0xA2E6 0x3221 0xA2E7 0x3222 @@ -6576,8 +6580,8 @@ 0xA2EC 0x3227 0xA2ED 0x3228 0xA2EE 0x3229 -0xA2EF 0xE58E -0xA2F0 0xE58F +0xA2EF 0xE76E +0xA2F0 0xE76F 0xA2F1 0x2160 0xA2F2 0x2161 0xA2F3 0x2162 @@ -6590,104 +6594,104 @@ 0xA2FA 0x2169 0xA2FB 0x216A 0xA2FC 0x216B -0xA2FD 0xE590 -0xA2FE 0xE591 -0xA340 0xE592 -0xA341 0xE593 -0xA342 0xE594 -0xA343 0xE595 -0xA344 0xE596 -0xA345 0xE597 -0xA346 0xE598 -0xA347 0xE599 -0xA348 0xE59A -0xA349 0xE59B -0xA34A 0xE59C -0xA34B 0xE59D -0xA34C 0xE59E -0xA34D 0xE59F -0xA34E 0xE5A0 -0xA34F 0xE5A1 -0xA350 0xE5A2 -0xA351 0xE5A3 -0xA352 0xE5A4 -0xA353 0xE5A5 -0xA354 0xE5A6 -0xA355 0xE5A7 -0xA356 0xE5A8 -0xA357 0xE5A9 -0xA358 0xE5AA -0xA359 0xE5AB -0xA35A 0xE5AC -0xA35B 0xE5AD -0xA35C 0xE5AE -0xA35D 0xE5AF -0xA35E 0xE5B0 -0xA35F 0xE5B1 -0xA360 0xE5B2 -0xA361 0xE5B3 -0xA362 0xE5B4 -0xA363 0xE5B5 -0xA364 0xE5B6 -0xA365 0xE5B7 -0xA366 0xE5B8 -0xA367 0xE5B9 -0xA368 0xE5BA -0xA369 0xE5BB -0xA36A 0xE5BC -0xA36B 0xE5BD -0xA36C 0xE5BE -0xA36D 0xE5BF -0xA36E 0xE5C0 -0xA36F 0xE5C1 -0xA370 0xE5C2 -0xA371 0xE5C3 -0xA372 0xE5C4 -0xA373 0xE5C5 -0xA374 0xE5C6 -0xA375 0xE5C7 -0xA376 0xE5C8 -0xA377 0xE5C9 -0xA378 0xE5CA -0xA379 0xE5CB -0xA37A 0xE5CC -0xA37B 0xE5CD -0xA37C 0xE5CE -0xA37D 0xE5CF -0xA37E 0xE5D0 -0xA380 0xE5D1 -0xA381 0xE5D2 -0xA382 0xE5D3 -0xA383 0xE5D4 -0xA384 0xE5D5 -0xA385 0xE5D6 -0xA386 0xE5D7 -0xA387 0xE5D8 -0xA388 0xE5D9 -0xA389 0xE5DA -0xA38A 0xE5DB -0xA38B 0xE5DC -0xA38C 0xE5DD -0xA38D 0xE5DE -0xA38E 0xE5DF -0xA38F 0xE5E0 -0xA390 0xE5E1 -0xA391 0xE5E2 -0xA392 0xE5E3 -0xA393 0xE5E4 -0xA394 0xE5E5 -0xA395 0xE5E6 -0xA396 0xE5E7 -0xA397 0xE5E8 -0xA398 0xE5E9 -0xA399 0xE5EA -0xA39A 0xE5EB -0xA39B 0xE5EC -0xA39C 0xE5ED -0xA39D 0xE5EE -0xA39E 0xE5EF -0xA39F 0xE5F0 -0xA3A0 0xE5F1 +0xA2FD 0xE770 +0xA2FE 0xE771 +0xA340 0xE586 +0xA341 0xE587 +0xA342 0xE588 +0xA343 0xE589 +0xA344 0xE58A +0xA345 0xE58B +0xA346 0xE58C +0xA347 0xE58D +0xA348 0xE58E +0xA349 0xE58F +0xA34A 0xE590 +0xA34B 0xE591 +0xA34C 0xE592 +0xA34D 0xE593 +0xA34E 0xE594 +0xA34F 0xE595 +0xA350 0xE596 +0xA351 0xE597 +0xA352 0xE598 +0xA353 0xE599 +0xA354 0xE59A +0xA355 0xE59B +0xA356 0xE59C +0xA357 0xE59D +0xA358 0xE59E +0xA359 0xE59F +0xA35A 0xE5A0 +0xA35B 0xE5A1 +0xA35C 0xE5A2 +0xA35D 0xE5A3 +0xA35E 0xE5A4 +0xA35F 0xE5A5 +0xA360 0xE5A6 +0xA361 0xE5A7 +0xA362 0xE5A8 +0xA363 0xE5A9 +0xA364 0xE5AA +0xA365 0xE5AB +0xA366 0xE5AC +0xA367 0xE5AD +0xA368 0xE5AE +0xA369 0xE5AF +0xA36A 0xE5B0 +0xA36B 0xE5B1 +0xA36C 0xE5B2 +0xA36D 0xE5B3 +0xA36E 0xE5B4 +0xA36F 0xE5B5 +0xA370 0xE5B6 +0xA371 0xE5B7 +0xA372 0xE5B8 +0xA373 0xE5B9 +0xA374 0xE5BA +0xA375 0xE5BB +0xA376 0xE5BC +0xA377 0xE5BD +0xA378 0xE5BE +0xA379 0xE5BF +0xA37A 0xE5C0 +0xA37B 0xE5C1 +0xA37C 0xE5C2 +0xA37D 0xE5C3 +0xA37E 0xE5C4 +0xA380 0xE5C5 +0xA381 0xE5C6 +0xA382 0xE5C7 +0xA383 0xE5C8 +0xA384 0xE5C9 +0xA385 0xE5CA +0xA386 0xE5CB +0xA387 0xE5CC +0xA388 0xE5CD +0xA389 0xE5CE +0xA38A 0xE5CF +0xA38B 0xE5D0 +0xA38C 0xE5D1 +0xA38D 0xE5D2 +0xA38E 0xE5D3 +0xA38F 0xE5D4 +0xA390 0xE5D5 +0xA391 0xE5D6 +0xA392 0xE5D7 +0xA393 0xE5D8 +0xA394 0xE5D9 +0xA395 0xE5DA +0xA396 0xE5DB +0xA397 0xE5DC +0xA398 0xE5DD +0xA399 0xE5DE +0xA39A 0xE5DF +0xA39B 0xE5E0 +0xA39C 0xE5E1 +0xA39D 0xE5E2 +0xA39E 0xE5E3 +0xA39F 0xE5E4 +0xA3A0 0xE5E5 0xA3A1 0xFF01 0xA3A2 0xFF02 0xA3A3 0xFF03 @@ -6782,102 +6786,102 @@ 0xA3FC 0xFF5C 0xA3FD 0xFF5D 0xA3FE 0xFFE3 -0xA440 0xE5F2 -0xA441 0xE5F3 -0xA442 0xE5F4 -0xA443 0xE5F5 -0xA444 0xE5F6 -0xA445 0xE5F7 -0xA446 0xE5F8 -0xA447 0xE5F9 -0xA448 0xE5FA -0xA449 0xE5FB -0xA44A 0xE5FC -0xA44B 0xE5FD -0xA44C 0xE5FE -0xA44D 0xE5FF -0xA44E 0xE600 -0xA44F 0xE601 -0xA450 0xE602 -0xA451 0xE603 -0xA452 0xE604 -0xA453 0xE605 -0xA454 0xE606 -0xA455 0xE607 -0xA456 0xE608 -0xA457 0xE609 -0xA458 0xE60A -0xA459 0xE60B -0xA45A 0xE60C -0xA45B 0xE60D -0xA45C 0xE60E -0xA45D 0xE60F -0xA45E 0xE610 -0xA45F 0xE611 -0xA460 0xE612 -0xA461 0xE613 -0xA462 0xE614 -0xA463 0xE615 -0xA464 0xE616 -0xA465 0xE617 -0xA466 0xE618 -0xA467 0xE619 -0xA468 0xE61A -0xA469 0xE61B -0xA46A 0xE61C -0xA46B 0xE61D -0xA46C 0xE61E -0xA46D 0xE61F -0xA46E 0xE620 -0xA46F 0xE621 -0xA470 0xE622 -0xA471 0xE623 -0xA472 0xE624 -0xA473 0xE625 -0xA474 0xE626 -0xA475 0xE627 -0xA476 0xE628 -0xA477 0xE629 -0xA478 0xE62A -0xA479 0xE62B -0xA47A 0xE62C -0xA47B 0xE62D -0xA47C 0xE62E -0xA47D 0xE62F -0xA47E 0xE630 -0xA480 0xE631 -0xA481 0xE632 -0xA482 0xE633 -0xA483 0xE634 -0xA484 0xE635 -0xA485 0xE636 -0xA486 0xE637 -0xA487 0xE638 -0xA488 0xE639 -0xA489 0xE63A -0xA48A 0xE63B -0xA48B 0xE63C -0xA48C 0xE63D -0xA48D 0xE63E -0xA48E 0xE63F -0xA48F 0xE640 -0xA490 0xE641 -0xA491 0xE642 -0xA492 0xE643 -0xA493 0xE644 -0xA494 0xE645 -0xA495 0xE646 -0xA496 0xE647 -0xA497 0xE648 -0xA498 0xE649 -0xA499 0xE64A -0xA49A 0xE64B -0xA49B 0xE64C -0xA49C 0xE64D -0xA49D 0xE64E -0xA49E 0xE64F -0xA49F 0xE650 -0xA4A0 0xE651 +0xA440 0xE5E6 +0xA441 0xE5E7 +0xA442 0xE5E8 +0xA443 0xE5E9 +0xA444 0xE5EA +0xA445 0xE5EB +0xA446 0xE5EC +0xA447 0xE5ED +0xA448 0xE5EE +0xA449 0xE5EF +0xA44A 0xE5F0 +0xA44B 0xE5F1 +0xA44C 0xE5F2 +0xA44D 0xE5F3 +0xA44E 0xE5F4 +0xA44F 0xE5F5 +0xA450 0xE5F6 +0xA451 0xE5F7 +0xA452 0xE5F8 +0xA453 0xE5F9 +0xA454 0xE5FA +0xA455 0xE5FB +0xA456 0xE5FC +0xA457 0xE5FD +0xA458 0xE5FE +0xA459 0xE5FF +0xA45A 0xE600 +0xA45B 0xE601 +0xA45C 0xE602 +0xA45D 0xE603 +0xA45E 0xE604 +0xA45F 0xE605 +0xA460 0xE606 +0xA461 0xE607 +0xA462 0xE608 +0xA463 0xE609 +0xA464 0xE60A +0xA465 0xE60B +0xA466 0xE60C +0xA467 0xE60D +0xA468 0xE60E +0xA469 0xE60F +0xA46A 0xE610 +0xA46B 0xE611 +0xA46C 0xE612 +0xA46D 0xE613 +0xA46E 0xE614 +0xA46F 0xE615 +0xA470 0xE616 +0xA471 0xE617 +0xA472 0xE618 +0xA473 0xE619 +0xA474 0xE61A +0xA475 0xE61B +0xA476 0xE61C +0xA477 0xE61D +0xA478 0xE61E +0xA479 0xE61F +0xA47A 0xE620 +0xA47B 0xE621 +0xA47C 0xE622 +0xA47D 0xE623 +0xA47E 0xE624 +0xA480 0xE625 +0xA481 0xE626 +0xA482 0xE627 +0xA483 0xE628 +0xA484 0xE629 +0xA485 0xE62A +0xA486 0xE62B +0xA487 0xE62C +0xA488 0xE62D +0xA489 0xE62E +0xA48A 0xE62F +0xA48B 0xE630 +0xA48C 0xE631 +0xA48D 0xE632 +0xA48E 0xE633 +0xA48F 0xE634 +0xA490 0xE635 +0xA491 0xE636 +0xA492 0xE637 +0xA493 0xE638 +0xA494 0xE639 +0xA495 0xE63A +0xA496 0xE63B +0xA497 0xE63C +0xA498 0xE63D +0xA499 0xE63E +0xA49A 0xE63F +0xA49B 0xE640 +0xA49C 0xE641 +0xA49D 0xE642 +0xA49E 0xE643 +0xA49F 0xE644 +0xA4A0 0xE645 0xA4A1 0x3041 0xA4A2 0x3042 0xA4A3 0x3043 @@ -6961,113 +6965,113 @@ 0xA4F1 0x3091 0xA4F2 0x3092 0xA4F3 0x3093 -0xA4F4 0xE652 -0xA4F5 0xE653 -0xA4F6 0xE654 -0xA4F7 0xE655 -0xA4F8 0xE656 -0xA4F9 0xE657 -0xA4FA 0xE658 -0xA4FB 0xE659 -0xA4FC 0xE65A -0xA4FD 0xE65B -0xA4FE 0xE65C -0xA540 0xE65D -0xA541 0xE65E -0xA542 0xE65F -0xA543 0xE660 -0xA544 0xE661 -0xA545 0xE662 -0xA546 0xE663 -0xA547 0xE664 -0xA548 0xE665 -0xA549 0xE666 -0xA54A 0xE667 -0xA54B 0xE668 -0xA54C 0xE669 -0xA54D 0xE66A -0xA54E 0xE66B -0xA54F 0xE66C -0xA550 0xE66D -0xA551 0xE66E -0xA552 0xE66F -0xA553 0xE670 -0xA554 0xE671 -0xA555 0xE672 -0xA556 0xE673 -0xA557 0xE674 -0xA558 0xE675 -0xA559 0xE676 -0xA55A 0xE677 -0xA55B 0xE678 -0xA55C 0xE679 -0xA55D 0xE67A -0xA55E 0xE67B -0xA55F 0xE67C -0xA560 0xE67D -0xA561 0xE67E -0xA562 0xE67F -0xA563 0xE680 -0xA564 0xE681 -0xA565 0xE682 -0xA566 0xE683 -0xA567 0xE684 -0xA568 0xE685 -0xA569 0xE686 -0xA56A 0xE687 -0xA56B 0xE688 -0xA56C 0xE689 -0xA56D 0xE68A -0xA56E 0xE68B -0xA56F 0xE68C -0xA570 0xE68D -0xA571 0xE68E -0xA572 0xE68F -0xA573 0xE690 -0xA574 0xE691 -0xA575 0xE692 -0xA576 0xE693 -0xA577 0xE694 -0xA578 0xE695 -0xA579 0xE696 -0xA57A 0xE697 -0xA57B 0xE698 -0xA57C 0xE699 -0xA57D 0xE69A -0xA57E 0xE69B -0xA580 0xE69C -0xA581 0xE69D -0xA582 0xE69E -0xA583 0xE69F -0xA584 0xE6A0 -0xA585 0xE6A1 -0xA586 0xE6A2 -0xA587 0xE6A3 -0xA588 0xE6A4 -0xA589 0xE6A5 -0xA58A 0xE6A6 -0xA58B 0xE6A7 -0xA58C 0xE6A8 -0xA58D 0xE6A9 -0xA58E 0xE6AA -0xA58F 0xE6AB -0xA590 0xE6AC -0xA591 0xE6AD -0xA592 0xE6AE -0xA593 0xE6AF -0xA594 0xE6B0 -0xA595 0xE6B1 -0xA596 0xE6B2 -0xA597 0xE6B3 -0xA598 0xE6B4 -0xA599 0xE6B5 -0xA59A 0xE6B6 -0xA59B 0xE6B7 -0xA59C 0xE6B8 -0xA59D 0xE6B9 -0xA59E 0xE6BA -0xA59F 0xE6BB -0xA5A0 0xE6BC +0xA4F4 0xE772 +0xA4F5 0xE773 +0xA4F6 0xE774 +0xA4F7 0xE775 +0xA4F8 0xE776 +0xA4F9 0xE777 +0xA4FA 0xE778 +0xA4FB 0xE779 +0xA4FC 0xE77A +0xA4FD 0xE77B +0xA4FE 0xE77C +0xA540 0xE646 +0xA541 0xE647 +0xA542 0xE648 +0xA543 0xE649 +0xA544 0xE64A +0xA545 0xE64B +0xA546 0xE64C +0xA547 0xE64D +0xA548 0xE64E +0xA549 0xE64F +0xA54A 0xE650 +0xA54B 0xE651 +0xA54C 0xE652 +0xA54D 0xE653 +0xA54E 0xE654 +0xA54F 0xE655 +0xA550 0xE656 +0xA551 0xE657 +0xA552 0xE658 +0xA553 0xE659 +0xA554 0xE65A +0xA555 0xE65B +0xA556 0xE65C +0xA557 0xE65D +0xA558 0xE65E +0xA559 0xE65F +0xA55A 0xE660 +0xA55B 0xE661 +0xA55C 0xE662 +0xA55D 0xE663 +0xA55E 0xE664 +0xA55F 0xE665 +0xA560 0xE666 +0xA561 0xE667 +0xA562 0xE668 +0xA563 0xE669 +0xA564 0xE66A +0xA565 0xE66B +0xA566 0xE66C +0xA567 0xE66D +0xA568 0xE66E +0xA569 0xE66F +0xA56A 0xE670 +0xA56B 0xE671 +0xA56C 0xE672 +0xA56D 0xE673 +0xA56E 0xE674 +0xA56F 0xE675 +0xA570 0xE676 +0xA571 0xE677 +0xA572 0xE678 +0xA573 0xE679 +0xA574 0xE67A +0xA575 0xE67B +0xA576 0xE67C +0xA577 0xE67D +0xA578 0xE67E +0xA579 0xE67F +0xA57A 0xE680 +0xA57B 0xE681 +0xA57C 0xE682 +0xA57D 0xE683 +0xA57E 0xE684 +0xA580 0xE685 +0xA581 0xE686 +0xA582 0xE687 +0xA583 0xE688 +0xA584 0xE689 +0xA585 0xE68A +0xA586 0xE68B +0xA587 0xE68C +0xA588 0xE68D +0xA589 0xE68E +0xA58A 0xE68F +0xA58B 0xE690 +0xA58C 0xE691 +0xA58D 0xE692 +0xA58E 0xE693 +0xA58F 0xE694 +0xA590 0xE695 +0xA591 0xE696 +0xA592 0xE697 +0xA593 0xE698 +0xA594 0xE699 +0xA595 0xE69A +0xA596 0xE69B +0xA597 0xE69C +0xA598 0xE69D +0xA599 0xE69E +0xA59A 0xE69F +0xA59B 0xE6A0 +0xA59C 0xE6A1 +0xA59D 0xE6A2 +0xA59E 0xE6A3 +0xA59F 0xE6A4 +0xA5A0 0xE6A5 0xA5A1 0x30A1 0xA5A2 0x30A2 0xA5A3 0x30A3 @@ -7154,110 +7158,110 @@ 0xA5F4 0x30F4 0xA5F5 0x30F5 0xA5F6 0x30F6 -0xA5F7 0xE6BD -0xA5F8 0xE6BE -0xA5F9 0xE6BF -0xA5FA 0xE6C0 -0xA5FB 0xE6C1 -0xA5FC 0xE6C2 -0xA5FD 0xE6C3 -0xA5FE 0xE6C4 -0xA640 0xE6C5 -0xA641 0xE6C6 -0xA642 0xE6C7 -0xA643 0xE6C8 -0xA644 0xE6C9 -0xA645 0xE6CA -0xA646 0xE6CB -0xA647 0xE6CC -0xA648 0xE6CD -0xA649 0xE6CE -0xA64A 0xE6CF -0xA64B 0xE6D0 -0xA64C 0xE6D1 -0xA64D 0xE6D2 -0xA64E 0xE6D3 -0xA64F 0xE6D4 -0xA650 0xE6D5 -0xA651 0xE6D6 -0xA652 0xE6D7 -0xA653 0xE6D8 -0xA654 0xE6D9 -0xA655 0xE6DA -0xA656 0xE6DB -0xA657 0xE6DC -0xA658 0xE6DD -0xA659 0xE6DE -0xA65A 0xE6DF -0xA65B 0xE6E0 -0xA65C 0xE6E1 -0xA65D 0xE6E2 -0xA65E 0xE6E3 -0xA65F 0xE6E4 -0xA660 0xE6E5 -0xA661 0xE6E6 -0xA662 0xE6E7 -0xA663 0xE6E8 -0xA664 0xE6E9 -0xA665 0xE6EA -0xA666 0xE6EB -0xA667 0xE6EC -0xA668 0xE6ED -0xA669 0xE6EE -0xA66A 0xE6EF -0xA66B 0xE6F0 -0xA66C 0xE6F1 -0xA66D 0xE6F2 -0xA66E 0xE6F3 -0xA66F 0xE6F4 -0xA670 0xE6F5 -0xA671 0xE6F6 -0xA672 0xE6F7 -0xA673 0xE6F8 -0xA674 0xE6F9 -0xA675 0xE6FA -0xA676 0xE6FB -0xA677 0xE6FC -0xA678 0xE6FD -0xA679 0xE6FE -0xA67A 0xE6FF -0xA67B 0xE700 -0xA67C 0xE701 -0xA67D 0xE702 -0xA67E 0xE703 -0xA680 0xE704 -0xA681 0xE705 -0xA682 0xE706 -0xA683 0xE707 -0xA684 0xE708 -0xA685 0xE709 -0xA686 0xE70A -0xA687 0xE70B -0xA688 0xE70C -0xA689 0xE70D -0xA68A 0xE70E -0xA68B 0xE70F -0xA68C 0xE710 -0xA68D 0xE711 -0xA68E 0xE712 -0xA68F 0xE713 -0xA690 0xE714 -0xA691 0xE715 -0xA692 0xE716 -0xA693 0xE717 -0xA694 0xE718 -0xA695 0xE719 -0xA696 0xE71A -0xA697 0xE71B -0xA698 0xE71C -0xA699 0xE71D -0xA69A 0xE71E -0xA69B 0xE71F -0xA69C 0xE720 -0xA69D 0xE721 -0xA69E 0xE722 -0xA69F 0xE723 -0xA6A0 0xE724 +0xA5F7 0xE77D +0xA5F8 0xE77E +0xA5F9 0xE77F +0xA5FA 0xE780 +0xA5FB 0xE781 +0xA5FC 0xE782 +0xA5FD 0xE783 +0xA5FE 0xE784 +0xA640 0xE6A6 +0xA641 0xE6A7 +0xA642 0xE6A8 +0xA643 0xE6A9 +0xA644 0xE6AA +0xA645 0xE6AB +0xA646 0xE6AC +0xA647 0xE6AD +0xA648 0xE6AE +0xA649 0xE6AF +0xA64A 0xE6B0 +0xA64B 0xE6B1 +0xA64C 0xE6B2 +0xA64D 0xE6B3 +0xA64E 0xE6B4 +0xA64F 0xE6B5 +0xA650 0xE6B6 +0xA651 0xE6B7 +0xA652 0xE6B8 +0xA653 0xE6B9 +0xA654 0xE6BA +0xA655 0xE6BB +0xA656 0xE6BC +0xA657 0xE6BD +0xA658 0xE6BE +0xA659 0xE6BF +0xA65A 0xE6C0 +0xA65B 0xE6C1 +0xA65C 0xE6C2 +0xA65D 0xE6C3 +0xA65E 0xE6C4 +0xA65F 0xE6C5 +0xA660 0xE6C6 +0xA661 0xE6C7 +0xA662 0xE6C8 +0xA663 0xE6C9 +0xA664 0xE6CA +0xA665 0xE6CB +0xA666 0xE6CC +0xA667 0xE6CD +0xA668 0xE6CE +0xA669 0xE6CF +0xA66A 0xE6D0 +0xA66B 0xE6D1 +0xA66C 0xE6D2 +0xA66D 0xE6D3 +0xA66E 0xE6D4 +0xA66F 0xE6D5 +0xA670 0xE6D6 +0xA671 0xE6D7 +0xA672 0xE6D8 +0xA673 0xE6D9 +0xA674 0xE6DA +0xA675 0xE6DB +0xA676 0xE6DC +0xA677 0xE6DD +0xA678 0xE6DE +0xA679 0xE6DF +0xA67A 0xE6E0 +0xA67B 0xE6E1 +0xA67C 0xE6E2 +0xA67D 0xE6E3 +0xA67E 0xE6E4 +0xA680 0xE6E5 +0xA681 0xE6E6 +0xA682 0xE6E7 +0xA683 0xE6E8 +0xA684 0xE6E9 +0xA685 0xE6EA +0xA686 0xE6EB +0xA687 0xE6EC +0xA688 0xE6ED +0xA689 0xE6EE +0xA68A 0xE6EF +0xA68B 0xE6F0 +0xA68C 0xE6F1 +0xA68D 0xE6F2 +0xA68E 0xE6F3 +0xA68F 0xE6F4 +0xA690 0xE6F5 +0xA691 0xE6F6 +0xA692 0xE6F7 +0xA693 0xE6F8 +0xA694 0xE6F9 +0xA695 0xE6FA +0xA696 0xE6FB +0xA697 0xE6FC +0xA698 0xE6FD +0xA699 0xE6FE +0xA69A 0xE6FF +0xA69B 0xE700 +0xA69C 0xE701 +0xA69D 0xE702 +0xA69E 0xE703 +0xA69F 0xE704 +0xA6A0 0xE705 0xA6A1 0x0391 0xA6A2 0x0392 0xA6A3 0x0393 @@ -7282,14 +7286,14 @@ 0xA6B6 0x03A7 0xA6B7 0x03A8 0xA6B8 0x03A9 -0xA6B9 0xE725 -0xA6BA 0xE726 -0xA6BB 0xE727 -0xA6BC 0xE728 -0xA6BD 0xE729 -0xA6BE 0xE72A -0xA6BF 0xE72B -0xA6C0 0xE72C +0xA6B9 0xE785 +0xA6BA 0xE786 +0xA6BB 0xE787 +0xA6BC 0xE788 +0xA6BD 0xE789 +0xA6BE 0xE78A +0xA6BF 0xE78B +0xA6C0 0xE78C 0xA6C1 0x03B1 0xA6C2 0x03B2 0xA6C3 0x03B3 @@ -7314,13 +7318,13 @@ 0xA6D6 0x03C7 0xA6D7 0x03C8 0xA6D8 0x03C9 -0xA6D9 0xE72D -0xA6DA 0xE72E -0xA6DB 0xE72F -0xA6DC 0xE730 -0xA6DD 0xE731 -0xA6DE 0xE732 -0xA6DF 0xE733 +0xA6D9 0xE78D +0xA6DA 0xE78E +0xA6DB 0xE78F +0xA6DC 0xE790 +0xA6DD 0xE791 +0xA6DE 0xE792 +0xA6DF 0xE793 0xA6E0 0xFE35 0xA6E1 0xFE36 0xA6E2 0xFE39 @@ -7333,121 +7337,121 @@ 0xA6E9 0xFE42 0xA6EA 0xFE43 0xA6EB 0xFE44 -0xA6EC 0xE734 -0xA6ED 0xE735 +0xA6EC 0xE794 +0xA6ED 0xE795 0xA6EE 0xFE3B 0xA6EF 0xFE3C 0xA6F0 0xFE37 0xA6F1 0xFE38 0xA6F2 0xFE31 -0xA6F3 0xE736 +0xA6F3 0xE796 0xA6F4 0xFE33 0xA6F5 0xFE34 -0xA6F6 0xE737 -0xA6F7 0xE738 -0xA6F8 0xE739 -0xA6F9 0xE73A -0xA6FA 0xE73B -0xA6FB 0xE73C -0xA6FC 0xE73D -0xA6FD 0xE73E -0xA6FE 0xE73F -0xA740 0xE740 -0xA741 0xE741 -0xA742 0xE742 -0xA743 0xE743 -0xA744 0xE744 -0xA745 0xE745 -0xA746 0xE746 -0xA747 0xE747 -0xA748 0xE748 -0xA749 0xE749 -0xA74A 0xE74A -0xA74B 0xE74B -0xA74C 0xE74C -0xA74D 0xE74D -0xA74E 0xE74E -0xA74F 0xE74F -0xA750 0xE750 -0xA751 0xE751 -0xA752 0xE752 -0xA753 0xE753 -0xA754 0xE754 -0xA755 0xE755 -0xA756 0xE756 -0xA757 0xE757 -0xA758 0xE758 -0xA759 0xE759 -0xA75A 0xE75A -0xA75B 0xE75B -0xA75C 0xE75C -0xA75D 0xE75D -0xA75E 0xE75E -0xA75F 0xE75F -0xA760 0xE760 -0xA761 0xE761 -0xA762 0xE762 -0xA763 0xE763 -0xA764 0xE764 -0xA765 0xE765 -0xA766 0xE766 -0xA767 0xE767 -0xA768 0xE768 -0xA769 0xE769 -0xA76A 0xE76A -0xA76B 0xE76B -0xA76C 0xE76C -0xA76D 0xE76D -0xA76E 0xE76E -0xA76F 0xE76F -0xA770 0xE770 -0xA771 0xE771 -0xA772 0xE772 -0xA773 0xE773 -0xA774 0xE774 -0xA775 0xE775 -0xA776 0xE776 -0xA777 0xE777 -0xA778 0xE778 -0xA779 0xE779 -0xA77A 0xE77A -0xA77B 0xE77B -0xA77C 0xE77C -0xA77D 0xE77D -0xA77E 0xE77E -0xA780 0xE77F -0xA781 0xE780 -0xA782 0xE781 -0xA783 0xE782 -0xA784 0xE783 -0xA785 0xE784 -0xA786 0xE785 -0xA787 0xE786 -0xA788 0xE787 -0xA789 0xE788 -0xA78A 0xE789 -0xA78B 0xE78A -0xA78C 0xE78B -0xA78D 0xE78C -0xA78E 0xE78D -0xA78F 0xE78E -0xA790 0xE78F -0xA791 0xE790 -0xA792 0xE791 -0xA793 0xE792 -0xA794 0xE793 -0xA795 0xE794 -0xA796 0xE795 -0xA797 0xE796 -0xA798 0xE797 -0xA799 0xE798 -0xA79A 0xE799 -0xA79B 0xE79A -0xA79C 0xE79B -0xA79D 0xE79C -0xA79E 0xE79D -0xA79F 0xE79E -0xA7A0 0xE79F +0xA6F6 0xE797 +0xA6F7 0xE798 +0xA6F8 0xE799 +0xA6F9 0xE79A +0xA6FA 0xE79B +0xA6FB 0xE79C +0xA6FC 0xE79D +0xA6FD 0xE79E +0xA6FE 0xE79F +0xA740 0xE706 +0xA741 0xE707 +0xA742 0xE708 +0xA743 0xE709 +0xA744 0xE70A +0xA745 0xE70B +0xA746 0xE70C +0xA747 0xE70D +0xA748 0xE70E +0xA749 0xE70F +0xA74A 0xE710 +0xA74B 0xE711 +0xA74C 0xE712 +0xA74D 0xE713 +0xA74E 0xE714 +0xA74F 0xE715 +0xA750 0xE716 +0xA751 0xE717 +0xA752 0xE718 +0xA753 0xE719 +0xA754 0xE71A +0xA755 0xE71B +0xA756 0xE71C +0xA757 0xE71D +0xA758 0xE71E +0xA759 0xE71F +0xA75A 0xE720 +0xA75B 0xE721 +0xA75C 0xE722 +0xA75D 0xE723 +0xA75E 0xE724 +0xA75F 0xE725 +0xA760 0xE726 +0xA761 0xE727 +0xA762 0xE728 +0xA763 0xE729 +0xA764 0xE72A +0xA765 0xE72B +0xA766 0xE72C +0xA767 0xE72D +0xA768 0xE72E +0xA769 0xE72F +0xA76A 0xE730 +0xA76B 0xE731 +0xA76C 0xE732 +0xA76D 0xE733 +0xA76E 0xE734 +0xA76F 0xE735 +0xA770 0xE736 +0xA771 0xE737 +0xA772 0xE738 +0xA773 0xE739 +0xA774 0xE73A +0xA775 0xE73B +0xA776 0xE73C +0xA777 0xE73D +0xA778 0xE73E +0xA779 0xE73F +0xA77A 0xE740 +0xA77B 0xE741 +0xA77C 0xE742 +0xA77D 0xE743 +0xA77E 0xE744 +0xA780 0xE745 +0xA781 0xE746 +0xA782 0xE747 +0xA783 0xE748 +0xA784 0xE749 +0xA785 0xE74A +0xA786 0xE74B +0xA787 0xE74C +0xA788 0xE74D +0xA789 0xE74E +0xA78A 0xE74F +0xA78B 0xE750 +0xA78C 0xE751 +0xA78D 0xE752 +0xA78E 0xE753 +0xA78F 0xE754 +0xA790 0xE755 +0xA791 0xE756 +0xA792 0xE757 +0xA793 0xE758 +0xA794 0xE759 +0xA795 0xE75A +0xA796 0xE75B +0xA797 0xE75C +0xA798 0xE75D +0xA799 0xE75E +0xA79A 0xE75F +0xA79B 0xE760 +0xA79C 0xE761 +0xA79D 0xE762 +0xA79E 0xE763 +0xA79F 0xE764 +0xA7A0 0xE765 0xA7A1 0x0410 0xA7A2 0x0411 0xA7A3 0x0412 diff --git a/jdk/make/tools/CharsetMapping/MS936.map b/jdk/make/tools/CharsetMapping/MS936.map index f5df8d50854..b37fd9d240e 100644 --- a/jdk/make/tools/CharsetMapping/MS936.map +++ b/jdk/make/tools/CharsetMapping/MS936.map @@ -1,31 +1,8 @@ -# Copy/pasted from MS936.b2c # -# This table comes from MS CP936 table posted on unicode.org webpage -# with the modifications of +# This table comes from MultiByteToWideChar, the only entry +# not included is # -# (1)added Euro sign -# 0x80 - 0x20ac -# (2)removed DBCS lead byte entries -# 0x80 - 0xff -# (3)added GBK UDC block (1894) -# 0xAAA1 - 0xAFFE U+E000 - U+E233 -# 0xF8A1 - 0xFEFE U+E234 - U+E4C5 -# 0xA140 - 0xA7A0 U+E4C6 - U+E79F -# (4)added Microsoft defined "not GBK" EUDC -# a: u+E586 - u+E591 -# b: u+E652 - u+E65C -# c: u+E6BD - u+E6C4 -# d: u+E725 - u+E73F -# e: u+E7A0 - u+E864 -# -# Mapping of (3) and (4) comes from Masayuki Fuse at FUSE@jp.ibm.com -# -# Format: Three tab-separated columns -# Column #1 is the cp936 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in unicode order +# 0xFF 0xF8F5 # 0x00 0x0000 0x01 0x0001 @@ -6533,12 +6510,12 @@ 0xA2A8 0x2177 #SMALL ROMAN NUMERAL EIGHT 0xA2A9 0x2178 #SMALL ROMAN NUMERAL NINE 0xA2AA 0x2179 #SMALL ROMAN NUMERAL TEN -0xA2AB 0xE586 #PRIVATE USE AREA-E586 -0xA2AC 0xE587 #PRIVATE USE AREA-E587 -0xA2AD 0xE588 #PRIVATE USE AREA-E588 -0xA2AE 0xE589 #PRIVATE USE AREA-E589 -0xA2AF 0xE58A #PRIVATE USE AREA-E58A -0xA2B0 0xE58B #PRIVATE USE AREA-E58B +0xA2AB 0xE766 #PRIVATE USE AREA-E766 +0xA2AC 0xE767 #PRIVATE USE AREA-E767 +0xA2AD 0xE768 #PRIVATE USE AREA-E768 +0xA2AE 0xE769 #PRIVATE USE AREA-E769 +0xA2AF 0xE76A #PRIVATE USE AREA-E76A +0xA2B0 0xE76B #PRIVATE USE AREA-E76B 0xA2B1 0x2488 #DIGIT ONE FULL STOP 0xA2B2 0x2489 #DIGIT TWO FULL STOP 0xA2B3 0x248A #DIGIT THREE FULL STOP @@ -6589,8 +6566,8 @@ 0xA2E0 0x2467 #CIRCLED DIGIT EIGHT 0xA2E1 0x2468 #CIRCLED DIGIT NINE 0xA2E2 0x2469 #CIRCLED NUMBER TEN -0xA2E3 0xE58C #PRIVATE USE AREA-E58C -0xA2E4 0xE58D #PRIVATE USE AREA-E58D +0xA2E3 0xE76C #PRIVATE USE AREA-E76C +0xA2E4 0xE76D #PRIVATE USE AREA-E76D 0xA2E5 0x3220 #PARENTHESIZED IDEOGRAPH ONE 0xA2E6 0x3221 #PARENTHESIZED IDEOGRAPH TWO 0xA2E7 0x3222 #PARENTHESIZED IDEOGRAPH THREE @@ -6601,8 +6578,8 @@ 0xA2EC 0x3227 #PARENTHESIZED IDEOGRAPH EIGHT 0xA2ED 0x3228 #PARENTHESIZED IDEOGRAPH NINE 0xA2EE 0x3229 #PARENTHESIZED IDEOGRAPH TEN -0xA2EF 0xE58E #PRIVATE USE AREA-E58E -0xA2F0 0xE58F #PRIVATE USE AREA-E58F +0xA2EF 0xE76E #PRIVATE USE AREA-E76E +0xA2F0 0xE76F #PRIVATE USE AREA-E76F 0xA2F1 0x2160 #ROMAN NUMERAL ONE 0xA2F2 0x2161 #ROMAN NUMERAL TWO 0xA2F3 0x2162 #ROMAN NUMERAL THREE @@ -6615,104 +6592,104 @@ 0xA2FA 0x2169 #ROMAN NUMERAL TEN 0xA2FB 0x216A #ROMAN NUMERAL ELEVEN 0xA2FC 0x216B #ROMAN NUMERAL TWELVE -0xA2FD 0xE590 #PRIVATE USE AREA-E590 -0xA2FE 0xE591 #PRIVATE USE AREA-E591 -0xA340 0xE592 #PRIVATE USE AREA-E592 -0xA341 0xE593 #PRIVATE USE AREA-E593 -0xA342 0xE594 #PRIVATE USE AREA-E594 -0xA343 0xE595 #PRIVATE USE AREA-E595 -0xA344 0xE596 #PRIVATE USE AREA-E596 -0xA345 0xE597 #PRIVATE USE AREA-E597 -0xA346 0xE598 #PRIVATE USE AREA-E598 -0xA347 0xE599 #PRIVATE USE AREA-E599 -0xA348 0xE59A #PRIVATE USE AREA-E59A -0xA349 0xE59B #PRIVATE USE AREA-E59B -0xA34A 0xE59C #PRIVATE USE AREA-E59C -0xA34B 0xE59D #PRIVATE USE AREA-E59D -0xA34C 0xE59E #PRIVATE USE AREA-E59E -0xA34D 0xE59F #PRIVATE USE AREA-E59F -0xA34E 0xE5A0 #PRIVATE USE AREA-E5A0 -0xA34F 0xE5A1 #PRIVATE USE AREA-E5A1 -0xA350 0xE5A2 #PRIVATE USE AREA-E5A2 -0xA351 0xE5A3 #PRIVATE USE AREA-E5A3 -0xA352 0xE5A4 #PRIVATE USE AREA-E5A4 -0xA353 0xE5A5 #PRIVATE USE AREA-E5A5 -0xA354 0xE5A6 #PRIVATE USE AREA-E5A6 -0xA355 0xE5A7 #PRIVATE USE AREA-E5A7 -0xA356 0xE5A8 #PRIVATE USE AREA-E5A8 -0xA357 0xE5A9 #PRIVATE USE AREA-E5A9 -0xA358 0xE5AA #PRIVATE USE AREA-E5AA -0xA359 0xE5AB #PRIVATE USE AREA-E5AB -0xA35A 0xE5AC #PRIVATE USE AREA-E5AC -0xA35B 0xE5AD #PRIVATE USE AREA-E5AD -0xA35C 0xE5AE #PRIVATE USE AREA-E5AE -0xA35D 0xE5AF #PRIVATE USE AREA-E5AF -0xA35E 0xE5B0 #PRIVATE USE AREA-E5B0 -0xA35F 0xE5B1 #PRIVATE USE AREA-E5B1 -0xA360 0xE5B2 #PRIVATE USE AREA-E5B2 -0xA361 0xE5B3 #PRIVATE USE AREA-E5B3 -0xA362 0xE5B4 #PRIVATE USE AREA-E5B4 -0xA363 0xE5B5 #PRIVATE USE AREA-E5B5 -0xA364 0xE5B6 #PRIVATE USE AREA-E5B6 -0xA365 0xE5B7 #PRIVATE USE AREA-E5B7 -0xA366 0xE5B8 #PRIVATE USE AREA-E5B8 -0xA367 0xE5B9 #PRIVATE USE AREA-E5B9 -0xA368 0xE5BA #PRIVATE USE AREA-E5BA -0xA369 0xE5BB #PRIVATE USE AREA-E5BB -0xA36A 0xE5BC #PRIVATE USE AREA-E5BC -0xA36B 0xE5BD #PRIVATE USE AREA-E5BD -0xA36C 0xE5BE #PRIVATE USE AREA-E5BE -0xA36D 0xE5BF #PRIVATE USE AREA-E5BF -0xA36E 0xE5C0 #PRIVATE USE AREA-E5C0 -0xA36F 0xE5C1 #PRIVATE USE AREA-E5C1 -0xA370 0xE5C2 #PRIVATE USE AREA-E5C2 -0xA371 0xE5C3 #PRIVATE USE AREA-E5C3 -0xA372 0xE5C4 #PRIVATE USE AREA-E5C4 -0xA373 0xE5C5 #PRIVATE USE AREA-E5C5 -0xA374 0xE5C6 #PRIVATE USE AREA-E5C6 -0xA375 0xE5C7 #PRIVATE USE AREA-E5C7 -0xA376 0xE5C8 #PRIVATE USE AREA-E5C8 -0xA377 0xE5C9 #PRIVATE USE AREA-E5C9 -0xA378 0xE5CA #PRIVATE USE AREA-E5CA -0xA379 0xE5CB #PRIVATE USE AREA-E5CB -0xA37A 0xE5CC #PRIVATE USE AREA-E5CC -0xA37B 0xE5CD #PRIVATE USE AREA-E5CD -0xA37C 0xE5CE #PRIVATE USE AREA-E5CE -0xA37D 0xE5CF #PRIVATE USE AREA-E5CF -0xA37E 0xE5D0 #PRIVATE USE AREA-E5D0 -0xA380 0xE5D1 #PRIVATE USE AREA-E5D1 -0xA381 0xE5D2 #PRIVATE USE AREA-E5D2 -0xA382 0xE5D3 #PRIVATE USE AREA-E5D3 -0xA383 0xE5D4 #PRIVATE USE AREA-E5D4 -0xA384 0xE5D5 #PRIVATE USE AREA-E5D5 -0xA385 0xE5D6 #PRIVATE USE AREA-E5D6 -0xA386 0xE5D7 #PRIVATE USE AREA-E5D7 -0xA387 0xE5D8 #PRIVATE USE AREA-E5D8 -0xA388 0xE5D9 #PRIVATE USE AREA-E5D9 -0xA389 0xE5DA #PRIVATE USE AREA-E5DA -0xA38A 0xE5DB #PRIVATE USE AREA-E5DB -0xA38B 0xE5DC #PRIVATE USE AREA-E5DC -0xA38C 0xE5DD #PRIVATE USE AREA-E5DD -0xA38D 0xE5DE #PRIVATE USE AREA-E5DE -0xA38E 0xE5DF #PRIVATE USE AREA-E5DF -0xA38F 0xE5E0 #PRIVATE USE AREA-E5E0 -0xA390 0xE5E1 #PRIVATE USE AREA-E5E1 -0xA391 0xE5E2 #PRIVATE USE AREA-E5E2 -0xA392 0xE5E3 #PRIVATE USE AREA-E5E3 -0xA393 0xE5E4 #PRIVATE USE AREA-E5E4 -0xA394 0xE5E5 #PRIVATE USE AREA-E5E5 -0xA395 0xE5E6 #PRIVATE USE AREA-E5E6 -0xA396 0xE5E7 #PRIVATE USE AREA-E5E7 -0xA397 0xE5E8 #PRIVATE USE AREA-E5E8 -0xA398 0xE5E9 #PRIVATE USE AREA-E5E9 -0xA399 0xE5EA #PRIVATE USE AREA-E5EA -0xA39A 0xE5EB #PRIVATE USE AREA-E5EB -0xA39B 0xE5EC #PRIVATE USE AREA-E5EC -0xA39C 0xE5ED #PRIVATE USE AREA-E5ED -0xA39D 0xE5EE #PRIVATE USE AREA-E5EE -0xA39E 0xE5EF #PRIVATE USE AREA-E5EF -0xA39F 0xE5F0 #PRIVATE USE AREA-E5F0 -0xA3A0 0xE5F1 #PRIVATE USE AREA-E5F1 +0xA2FD 0xE770 #PRIVATE USE AREA-E770 +0xA2FE 0xE771 #PRIVATE USE AREA-E771 +0xA340 0xE586 #PRIVATE USE AREA-E586 +0xA341 0xE587 #PRIVATE USE AREA-E587 +0xA342 0xE588 #PRIVATE USE AREA-E588 +0xA343 0xE589 #PRIVATE USE AREA-E589 +0xA344 0xE58A #PRIVATE USE AREA-E58A +0xA345 0xE58B #PRIVATE USE AREA-E58B +0xA346 0xE58C #PRIVATE USE AREA-E58C +0xA347 0xE58D #PRIVATE USE AREA-E58D +0xA348 0xE58E #PRIVATE USE AREA-E58E +0xA349 0xE58F #PRIVATE USE AREA-E58F +0xA34A 0xE590 #PRIVATE USE AREA-E590 +0xA34B 0xE591 #PRIVATE USE AREA-E591 +0xA34C 0xE592 #PRIVATE USE AREA-E592 +0xA34D 0xE593 #PRIVATE USE AREA-E593 +0xA34E 0xE594 #PRIVATE USE AREA-E594 +0xA34F 0xE595 #PRIVATE USE AREA-E595 +0xA350 0xE596 #PRIVATE USE AREA-E596 +0xA351 0xE597 #PRIVATE USE AREA-E597 +0xA352 0xE598 #PRIVATE USE AREA-E598 +0xA353 0xE599 #PRIVATE USE AREA-E599 +0xA354 0xE59A #PRIVATE USE AREA-E59A +0xA355 0xE59B #PRIVATE USE AREA-E59B +0xA356 0xE59C #PRIVATE USE AREA-E59C +0xA357 0xE59D #PRIVATE USE AREA-E59D +0xA358 0xE59E #PRIVATE USE AREA-E59E +0xA359 0xE59F #PRIVATE USE AREA-E59F +0xA35A 0xE5A0 #PRIVATE USE AREA-E5A0 +0xA35B 0xE5A1 #PRIVATE USE AREA-E5A1 +0xA35C 0xE5A2 #PRIVATE USE AREA-E5A2 +0xA35D 0xE5A3 #PRIVATE USE AREA-E5A3 +0xA35E 0xE5A4 #PRIVATE USE AREA-E5A4 +0xA35F 0xE5A5 #PRIVATE USE AREA-E5A5 +0xA360 0xE5A6 #PRIVATE USE AREA-E5A6 +0xA361 0xE5A7 #PRIVATE USE AREA-E5A7 +0xA362 0xE5A8 #PRIVATE USE AREA-E5A8 +0xA363 0xE5A9 #PRIVATE USE AREA-E5A9 +0xA364 0xE5AA #PRIVATE USE AREA-E5AA +0xA365 0xE5AB #PRIVATE USE AREA-E5AB +0xA366 0xE5AC #PRIVATE USE AREA-E5AC +0xA367 0xE5AD #PRIVATE USE AREA-E5AD +0xA368 0xE5AE #PRIVATE USE AREA-E5AE +0xA369 0xE5AF #PRIVATE USE AREA-E5AF +0xA36A 0xE5B0 #PRIVATE USE AREA-E5B0 +0xA36B 0xE5B1 #PRIVATE USE AREA-E5B1 +0xA36C 0xE5B2 #PRIVATE USE AREA-E5B2 +0xA36D 0xE5B3 #PRIVATE USE AREA-E5B3 +0xA36E 0xE5B4 #PRIVATE USE AREA-E5B4 +0xA36F 0xE5B5 #PRIVATE USE AREA-E5B5 +0xA370 0xE5B6 #PRIVATE USE AREA-E5B6 +0xA371 0xE5B7 #PRIVATE USE AREA-E5B7 +0xA372 0xE5B8 #PRIVATE USE AREA-E5B8 +0xA373 0xE5B9 #PRIVATE USE AREA-E5B9 +0xA374 0xE5BA #PRIVATE USE AREA-E5BA +0xA375 0xE5BB #PRIVATE USE AREA-E5BB +0xA376 0xE5BC #PRIVATE USE AREA-E5BC +0xA377 0xE5BD #PRIVATE USE AREA-E5BD +0xA378 0xE5BE #PRIVATE USE AREA-E5BE +0xA379 0xE5BF #PRIVATE USE AREA-E5BF +0xA37A 0xE5C0 #PRIVATE USE AREA-E5C0 +0xA37B 0xE5C1 #PRIVATE USE AREA-E5C1 +0xA37C 0xE5C2 #PRIVATE USE AREA-E5C2 +0xA37D 0xE5C3 #PRIVATE USE AREA-E5C3 +0xA37E 0xE5C4 #PRIVATE USE AREA-E5C4 +0xA380 0xE5C5 #PRIVATE USE AREA-E5C5 +0xA381 0xE5C6 #PRIVATE USE AREA-E5C6 +0xA382 0xE5C7 #PRIVATE USE AREA-E5C7 +0xA383 0xE5C8 #PRIVATE USE AREA-E5C8 +0xA384 0xE5C9 #PRIVATE USE AREA-E5C9 +0xA385 0xE5CA #PRIVATE USE AREA-E5CA +0xA386 0xE5CB #PRIVATE USE AREA-E5CB +0xA387 0xE5CC #PRIVATE USE AREA-E5CC +0xA388 0xE5CD #PRIVATE USE AREA-E5CD +0xA389 0xE5CE #PRIVATE USE AREA-E5CE +0xA38A 0xE5CF #PRIVATE USE AREA-E5CF +0xA38B 0xE5D0 #PRIVATE USE AREA-E5D0 +0xA38C 0xE5D1 #PRIVATE USE AREA-E5D1 +0xA38D 0xE5D2 #PRIVATE USE AREA-E5D2 +0xA38E 0xE5D3 #PRIVATE USE AREA-E5D3 +0xA38F 0xE5D4 #PRIVATE USE AREA-E5D4 +0xA390 0xE5D5 #PRIVATE USE AREA-E5D5 +0xA391 0xE5D6 #PRIVATE USE AREA-E5D6 +0xA392 0xE5D7 #PRIVATE USE AREA-E5D7 +0xA393 0xE5D8 #PRIVATE USE AREA-E5D8 +0xA394 0xE5D9 #PRIVATE USE AREA-E5D9 +0xA395 0xE5DA #PRIVATE USE AREA-E5DA +0xA396 0xE5DB #PRIVATE USE AREA-E5DB +0xA397 0xE5DC #PRIVATE USE AREA-E5DC +0xA398 0xE5DD #PRIVATE USE AREA-E5DD +0xA399 0xE5DE #PRIVATE USE AREA-E5DE +0xA39A 0xE5DF #PRIVATE USE AREA-E5DF +0xA39B 0xE5E0 #PRIVATE USE AREA-E5E0 +0xA39C 0xE5E1 #PRIVATE USE AREA-E5E1 +0xA39D 0xE5E2 #PRIVATE USE AREA-E5E2 +0xA39E 0xE5E3 #PRIVATE USE AREA-E5E3 +0xA39F 0xE5E4 #PRIVATE USE AREA-E5E4 +0xA3A0 0xE5E5 #PRIVATE USE AREA-E5E5 0xA3A1 0xFF01 #FULLWIDTH EXCLAMATION MARK 0xA3A2 0xFF02 #FULLWIDTH QUOTATION MARK 0xA3A3 0xFF03 #FULLWIDTH NUMBER SIGN @@ -6807,102 +6784,102 @@ 0xA3FC 0xFF5C #FULLWIDTH VERTICAL LINE 0xA3FD 0xFF5D #FULLWIDTH RIGHT CURLY BRACKET 0xA3FE 0xFFE3 #FULLWIDTH MACRON -0xA440 0xE5F2 #PRIVATE USE AREA-E5F2 -0xA441 0xE5F3 #PRIVATE USE AREA-E5F3 -0xA442 0xE5F4 #PRIVATE USE AREA-E5F4 -0xA443 0xE5F5 #PRIVATE USE AREA-E5F5 -0xA444 0xE5F6 #PRIVATE USE AREA-E5F6 -0xA445 0xE5F7 #PRIVATE USE AREA-E5F7 -0xA446 0xE5F8 #PRIVATE USE AREA-E5F8 -0xA447 0xE5F9 #PRIVATE USE AREA-E5F9 -0xA448 0xE5FA #PRIVATE USE AREA-E5FA -0xA449 0xE5FB #PRIVATE USE AREA-E5FB -0xA44A 0xE5FC #PRIVATE USE AREA-E5FC -0xA44B 0xE5FD #PRIVATE USE AREA-E5FD -0xA44C 0xE5FE #PRIVATE USE AREA-E5FE -0xA44D 0xE5FF #PRIVATE USE AREA-E5FF -0xA44E 0xE600 #PRIVATE USE AREA-E600 -0xA44F 0xE601 #PRIVATE USE AREA-E601 -0xA450 0xE602 #PRIVATE USE AREA-E602 -0xA451 0xE603 #PRIVATE USE AREA-E603 -0xA452 0xE604 #PRIVATE USE AREA-E604 -0xA453 0xE605 #PRIVATE USE AREA-E605 -0xA454 0xE606 #PRIVATE USE AREA-E606 -0xA455 0xE607 #PRIVATE USE AREA-E607 -0xA456 0xE608 #PRIVATE USE AREA-E608 -0xA457 0xE609 #PRIVATE USE AREA-E609 -0xA458 0xE60A #PRIVATE USE AREA-E60A -0xA459 0xE60B #PRIVATE USE AREA-E60B -0xA45A 0xE60C #PRIVATE USE AREA-E60C -0xA45B 0xE60D #PRIVATE USE AREA-E60D -0xA45C 0xE60E #PRIVATE USE AREA-E60E -0xA45D 0xE60F #PRIVATE USE AREA-E60F -0xA45E 0xE610 #PRIVATE USE AREA-E610 -0xA45F 0xE611 #PRIVATE USE AREA-E611 -0xA460 0xE612 #PRIVATE USE AREA-E612 -0xA461 0xE613 #PRIVATE USE AREA-E613 -0xA462 0xE614 #PRIVATE USE AREA-E614 -0xA463 0xE615 #PRIVATE USE AREA-E615 -0xA464 0xE616 #PRIVATE USE AREA-E616 -0xA465 0xE617 #PRIVATE USE AREA-E617 -0xA466 0xE618 #PRIVATE USE AREA-E618 -0xA467 0xE619 #PRIVATE USE AREA-E619 -0xA468 0xE61A #PRIVATE USE AREA-E61A -0xA469 0xE61B #PRIVATE USE AREA-E61B -0xA46A 0xE61C #PRIVATE USE AREA-E61C -0xA46B 0xE61D #PRIVATE USE AREA-E61D -0xA46C 0xE61E #PRIVATE USE AREA-E61E -0xA46D 0xE61F #PRIVATE USE AREA-E61F -0xA46E 0xE620 #PRIVATE USE AREA-E620 -0xA46F 0xE621 #PRIVATE USE AREA-E621 -0xA470 0xE622 #PRIVATE USE AREA-E622 -0xA471 0xE623 #PRIVATE USE AREA-E623 -0xA472 0xE624 #PRIVATE USE AREA-E624 -0xA473 0xE625 #PRIVATE USE AREA-E625 -0xA474 0xE626 #PRIVATE USE AREA-E626 -0xA475 0xE627 #PRIVATE USE AREA-E627 -0xA476 0xE628 #PRIVATE USE AREA-E628 -0xA477 0xE629 #PRIVATE USE AREA-E629 -0xA478 0xE62A #PRIVATE USE AREA-E62A -0xA479 0xE62B #PRIVATE USE AREA-E62B -0xA47A 0xE62C #PRIVATE USE AREA-E62C -0xA47B 0xE62D #PRIVATE USE AREA-E62D -0xA47C 0xE62E #PRIVATE USE AREA-E62E -0xA47D 0xE62F #PRIVATE USE AREA-E62F -0xA47E 0xE630 #PRIVATE USE AREA-E630 -0xA480 0xE631 #PRIVATE USE AREA-E631 -0xA481 0xE632 #PRIVATE USE AREA-E632 -0xA482 0xE633 #PRIVATE USE AREA-E633 -0xA483 0xE634 #PRIVATE USE AREA-E634 -0xA484 0xE635 #PRIVATE USE AREA-E635 -0xA485 0xE636 #PRIVATE USE AREA-E636 -0xA486 0xE637 #PRIVATE USE AREA-E637 -0xA487 0xE638 #PRIVATE USE AREA-E638 -0xA488 0xE639 #PRIVATE USE AREA-E639 -0xA489 0xE63A #PRIVATE USE AREA-E63A -0xA48A 0xE63B #PRIVATE USE AREA-E63B -0xA48B 0xE63C #PRIVATE USE AREA-E63C -0xA48C 0xE63D #PRIVATE USE AREA-E63D -0xA48D 0xE63E #PRIVATE USE AREA-E63E -0xA48E 0xE63F #PRIVATE USE AREA-E63F -0xA48F 0xE640 #PRIVATE USE AREA-E640 -0xA490 0xE641 #PRIVATE USE AREA-E641 -0xA491 0xE642 #PRIVATE USE AREA-E642 -0xA492 0xE643 #PRIVATE USE AREA-E643 -0xA493 0xE644 #PRIVATE USE AREA-E644 -0xA494 0xE645 #PRIVATE USE AREA-E645 -0xA495 0xE646 #PRIVATE USE AREA-E646 -0xA496 0xE647 #PRIVATE USE AREA-E647 -0xA497 0xE648 #PRIVATE USE AREA-E648 -0xA498 0xE649 #PRIVATE USE AREA-E649 -0xA499 0xE64A #PRIVATE USE AREA-E64A -0xA49A 0xE64B #PRIVATE USE AREA-E64B -0xA49B 0xE64C #PRIVATE USE AREA-E64C -0xA49C 0xE64D #PRIVATE USE AREA-E64D -0xA49D 0xE64E #PRIVATE USE AREA-E64E -0xA49E 0xE64F #PRIVATE USE AREA-E64F -0xA49F 0xE650 #PRIVATE USE AREA-E650 -0xA4A0 0xE651 #PRIVATE USE AREA-E651 +0xA440 0xE5E6 #PRIVATE USE AREA-E5E6 +0xA441 0xE5E7 #PRIVATE USE AREA-E5E7 +0xA442 0xE5E8 #PRIVATE USE AREA-E5E8 +0xA443 0xE5E9 #PRIVATE USE AREA-E5E9 +0xA444 0xE5EA #PRIVATE USE AREA-E5EA +0xA445 0xE5EB #PRIVATE USE AREA-E5EB +0xA446 0xE5EC #PRIVATE USE AREA-E5EC +0xA447 0xE5ED #PRIVATE USE AREA-E5ED +0xA448 0xE5EE #PRIVATE USE AREA-E5EE +0xA449 0xE5EF #PRIVATE USE AREA-E5EF +0xA44A 0xE5F0 #PRIVATE USE AREA-E5F0 +0xA44B 0xE5F1 #PRIVATE USE AREA-E5F1 +0xA44C 0xE5F2 #PRIVATE USE AREA-E5F2 +0xA44D 0xE5F3 #PRIVATE USE AREA-E5F3 +0xA44E 0xE5F4 #PRIVATE USE AREA-E5F4 +0xA44F 0xE5F5 #PRIVATE USE AREA-E5F5 +0xA450 0xE5F6 #PRIVATE USE AREA-E5F6 +0xA451 0xE5F7 #PRIVATE USE AREA-E5F7 +0xA452 0xE5F8 #PRIVATE USE AREA-E5F8 +0xA453 0xE5F9 #PRIVATE USE AREA-E5F9 +0xA454 0xE5FA #PRIVATE USE AREA-E5FA +0xA455 0xE5FB #PRIVATE USE AREA-E5FB +0xA456 0xE5FC #PRIVATE USE AREA-E5FC +0xA457 0xE5FD #PRIVATE USE AREA-E5FD +0xA458 0xE5FE #PRIVATE USE AREA-E5FE +0xA459 0xE5FF #PRIVATE USE AREA-E5FF +0xA45A 0xE600 #PRIVATE USE AREA-E600 +0xA45B 0xE601 #PRIVATE USE AREA-E601 +0xA45C 0xE602 #PRIVATE USE AREA-E602 +0xA45D 0xE603 #PRIVATE USE AREA-E603 +0xA45E 0xE604 #PRIVATE USE AREA-E604 +0xA45F 0xE605 #PRIVATE USE AREA-E605 +0xA460 0xE606 #PRIVATE USE AREA-E606 +0xA461 0xE607 #PRIVATE USE AREA-E607 +0xA462 0xE608 #PRIVATE USE AREA-E608 +0xA463 0xE609 #PRIVATE USE AREA-E609 +0xA464 0xE60A #PRIVATE USE AREA-E60A +0xA465 0xE60B #PRIVATE USE AREA-E60B +0xA466 0xE60C #PRIVATE USE AREA-E60C +0xA467 0xE60D #PRIVATE USE AREA-E60D +0xA468 0xE60E #PRIVATE USE AREA-E60E +0xA469 0xE60F #PRIVATE USE AREA-E60F +0xA46A 0xE610 #PRIVATE USE AREA-E610 +0xA46B 0xE611 #PRIVATE USE AREA-E611 +0xA46C 0xE612 #PRIVATE USE AREA-E612 +0xA46D 0xE613 #PRIVATE USE AREA-E613 +0xA46E 0xE614 #PRIVATE USE AREA-E614 +0xA46F 0xE615 #PRIVATE USE AREA-E615 +0xA470 0xE616 #PRIVATE USE AREA-E616 +0xA471 0xE617 #PRIVATE USE AREA-E617 +0xA472 0xE618 #PRIVATE USE AREA-E618 +0xA473 0xE619 #PRIVATE USE AREA-E619 +0xA474 0xE61A #PRIVATE USE AREA-E61A +0xA475 0xE61B #PRIVATE USE AREA-E61B +0xA476 0xE61C #PRIVATE USE AREA-E61C +0xA477 0xE61D #PRIVATE USE AREA-E61D +0xA478 0xE61E #PRIVATE USE AREA-E61E +0xA479 0xE61F #PRIVATE USE AREA-E61F +0xA47A 0xE620 #PRIVATE USE AREA-E620 +0xA47B 0xE621 #PRIVATE USE AREA-E621 +0xA47C 0xE622 #PRIVATE USE AREA-E622 +0xA47D 0xE623 #PRIVATE USE AREA-E623 +0xA47E 0xE624 #PRIVATE USE AREA-E624 +0xA480 0xE625 #PRIVATE USE AREA-E625 +0xA481 0xE626 #PRIVATE USE AREA-E626 +0xA482 0xE627 #PRIVATE USE AREA-E627 +0xA483 0xE628 #PRIVATE USE AREA-E628 +0xA484 0xE629 #PRIVATE USE AREA-E629 +0xA485 0xE62A #PRIVATE USE AREA-E62A +0xA486 0xE62B #PRIVATE USE AREA-E62B +0xA487 0xE62C #PRIVATE USE AREA-E62C +0xA488 0xE62D #PRIVATE USE AREA-E62D +0xA489 0xE62E #PRIVATE USE AREA-E62E +0xA48A 0xE62F #PRIVATE USE AREA-E62F +0xA48B 0xE630 #PRIVATE USE AREA-E630 +0xA48C 0xE631 #PRIVATE USE AREA-E631 +0xA48D 0xE632 #PRIVATE USE AREA-E632 +0xA48E 0xE633 #PRIVATE USE AREA-E633 +0xA48F 0xE634 #PRIVATE USE AREA-E634 +0xA490 0xE635 #PRIVATE USE AREA-E635 +0xA491 0xE636 #PRIVATE USE AREA-E636 +0xA492 0xE637 #PRIVATE USE AREA-E637 +0xA493 0xE638 #PRIVATE USE AREA-E638 +0xA494 0xE639 #PRIVATE USE AREA-E639 +0xA495 0xE63A #PRIVATE USE AREA-E63A +0xA496 0xE63B #PRIVATE USE AREA-E63B +0xA497 0xE63C #PRIVATE USE AREA-E63C +0xA498 0xE63D #PRIVATE USE AREA-E63D +0xA499 0xE63E #PRIVATE USE AREA-E63E +0xA49A 0xE63F #PRIVATE USE AREA-E63F +0xA49B 0xE640 #PRIVATE USE AREA-E640 +0xA49C 0xE641 #PRIVATE USE AREA-E641 +0xA49D 0xE642 #PRIVATE USE AREA-E642 +0xA49E 0xE643 #PRIVATE USE AREA-E643 +0xA49F 0xE644 #PRIVATE USE AREA-E644 +0xA4A0 0xE645 #PRIVATE USE AREA-E645 0xA4A1 0x3041 #HIRAGANA LETTER SMALL A 0xA4A2 0x3042 #HIRAGANA LETTER A 0xA4A3 0x3043 #HIRAGANA LETTER SMALL I @@ -6986,113 +6963,113 @@ 0xA4F1 0x3091 #HIRAGANA LETTER WE 0xA4F2 0x3092 #HIRAGANA LETTER WO 0xA4F3 0x3093 #HIRAGANA LETTER N -0xA4F4 0xE652 #PRIVATE USE AREA-E652 -0xA4F5 0xE653 #PRIVATE USE AREA-E653 -0xA4F6 0xE654 #PRIVATE USE AREA-E654 -0xA4F7 0xE655 #PRIVATE USE AREA-E655 -0xA4F8 0xE656 #PRIVATE USE AREA-E656 -0xA4F9 0xE657 #PRIVATE USE AREA-E657 -0xA4FA 0xE658 #PRIVATE USE AREA-E658 -0xA4FB 0xE659 #PRIVATE USE AREA-E659 -0xA4FC 0xE65A #PRIVATE USE AREA-E65A -0xA4FD 0xE65B #PRIVATE USE AREA-E65B -0xA4FE 0xE65C #PRIVATE USE AREA-E65C -0xA540 0xE65D #PRIVATE USE AREA-E65D -0xA541 0xE65E #PRIVATE USE AREA-E65E -0xA542 0xE65F #PRIVATE USE AREA-E65F -0xA543 0xE660 #PRIVATE USE AREA-E660 -0xA544 0xE661 #PRIVATE USE AREA-E661 -0xA545 0xE662 #PRIVATE USE AREA-E662 -0xA546 0xE663 #PRIVATE USE AREA-E663 -0xA547 0xE664 #PRIVATE USE AREA-E664 -0xA548 0xE665 #PRIVATE USE AREA-E665 -0xA549 0xE666 #PRIVATE USE AREA-E666 -0xA54A 0xE667 #PRIVATE USE AREA-E667 -0xA54B 0xE668 #PRIVATE USE AREA-E668 -0xA54C 0xE669 #PRIVATE USE AREA-E669 -0xA54D 0xE66A #PRIVATE USE AREA-E66A -0xA54E 0xE66B #PRIVATE USE AREA-E66B -0xA54F 0xE66C #PRIVATE USE AREA-E66C -0xA550 0xE66D #PRIVATE USE AREA-E66D -0xA551 0xE66E #PRIVATE USE AREA-E66E -0xA552 0xE66F #PRIVATE USE AREA-E66F -0xA553 0xE670 #PRIVATE USE AREA-E670 -0xA554 0xE671 #PRIVATE USE AREA-E671 -0xA555 0xE672 #PRIVATE USE AREA-E672 -0xA556 0xE673 #PRIVATE USE AREA-E673 -0xA557 0xE674 #PRIVATE USE AREA-E674 -0xA558 0xE675 #PRIVATE USE AREA-E675 -0xA559 0xE676 #PRIVATE USE AREA-E676 -0xA55A 0xE677 #PRIVATE USE AREA-E677 -0xA55B 0xE678 #PRIVATE USE AREA-E678 -0xA55C 0xE679 #PRIVATE USE AREA-E679 -0xA55D 0xE67A #PRIVATE USE AREA-E67A -0xA55E 0xE67B #PRIVATE USE AREA-E67B -0xA55F 0xE67C #PRIVATE USE AREA-E67C -0xA560 0xE67D #PRIVATE USE AREA-E67D -0xA561 0xE67E #PRIVATE USE AREA-E67E -0xA562 0xE67F #PRIVATE USE AREA-E67F -0xA563 0xE680 #PRIVATE USE AREA-E680 -0xA564 0xE681 #PRIVATE USE AREA-E681 -0xA565 0xE682 #PRIVATE USE AREA-E682 -0xA566 0xE683 #PRIVATE USE AREA-E683 -0xA567 0xE684 #PRIVATE USE AREA-E684 -0xA568 0xE685 #PRIVATE USE AREA-E685 -0xA569 0xE686 #PRIVATE USE AREA-E686 -0xA56A 0xE687 #PRIVATE USE AREA-E687 -0xA56B 0xE688 #PRIVATE USE AREA-E688 -0xA56C 0xE689 #PRIVATE USE AREA-E689 -0xA56D 0xE68A #PRIVATE USE AREA-E68A -0xA56E 0xE68B #PRIVATE USE AREA-E68B -0xA56F 0xE68C #PRIVATE USE AREA-E68C -0xA570 0xE68D #PRIVATE USE AREA-E68D -0xA571 0xE68E #PRIVATE USE AREA-E68E -0xA572 0xE68F #PRIVATE USE AREA-E68F -0xA573 0xE690 #PRIVATE USE AREA-E690 -0xA574 0xE691 #PRIVATE USE AREA-E691 -0xA575 0xE692 #PRIVATE USE AREA-E692 -0xA576 0xE693 #PRIVATE USE AREA-E693 -0xA577 0xE694 #PRIVATE USE AREA-E694 -0xA578 0xE695 #PRIVATE USE AREA-E695 -0xA579 0xE696 #PRIVATE USE AREA-E696 -0xA57A 0xE697 #PRIVATE USE AREA-E697 -0xA57B 0xE698 #PRIVATE USE AREA-E698 -0xA57C 0xE699 #PRIVATE USE AREA-E699 -0xA57D 0xE69A #PRIVATE USE AREA-E69A -0xA57E 0xE69B #PRIVATE USE AREA-E69B -0xA580 0xE69C #PRIVATE USE AREA-E69C -0xA581 0xE69D #PRIVATE USE AREA-E69D -0xA582 0xE69E #PRIVATE USE AREA-E69E -0xA583 0xE69F #PRIVATE USE AREA-E69F -0xA584 0xE6A0 #PRIVATE USE AREA-E6A0 -0xA585 0xE6A1 #PRIVATE USE AREA-E6A1 -0xA586 0xE6A2 #PRIVATE USE AREA-E6A2 -0xA587 0xE6A3 #PRIVATE USE AREA-E6A3 -0xA588 0xE6A4 #PRIVATE USE AREA-E6A4 -0xA589 0xE6A5 #PRIVATE USE AREA-E6A5 -0xA58A 0xE6A6 #PRIVATE USE AREA-E6A6 -0xA58B 0xE6A7 #PRIVATE USE AREA-E6A7 -0xA58C 0xE6A8 #PRIVATE USE AREA-E6A8 -0xA58D 0xE6A9 #PRIVATE USE AREA-E6A9 -0xA58E 0xE6AA #PRIVATE USE AREA-E6AA -0xA58F 0xE6AB #PRIVATE USE AREA-E6AB -0xA590 0xE6AC #PRIVATE USE AREA-E6AC -0xA591 0xE6AD #PRIVATE USE AREA-E6AD -0xA592 0xE6AE #PRIVATE USE AREA-E6AE -0xA593 0xE6AF #PRIVATE USE AREA-E6AF -0xA594 0xE6B0 #PRIVATE USE AREA-E6B0 -0xA595 0xE6B1 #PRIVATE USE AREA-E6B1 -0xA596 0xE6B2 #PRIVATE USE AREA-E6B2 -0xA597 0xE6B3 #PRIVATE USE AREA-E6B3 -0xA598 0xE6B4 #PRIVATE USE AREA-E6B4 -0xA599 0xE6B5 #PRIVATE USE AREA-E6B5 -0xA59A 0xE6B6 #PRIVATE USE AREA-E6B6 -0xA59B 0xE6B7 #PRIVATE USE AREA-E6B7 -0xA59C 0xE6B8 #PRIVATE USE AREA-E6B8 -0xA59D 0xE6B9 #PRIVATE USE AREA-E6B9 -0xA59E 0xE6BA #PRIVATE USE AREA-E6BA -0xA59F 0xE6BB #PRIVATE USE AREA-E6BB -0xA5A0 0xE6BC #PRIVATE USE AREA-E6BC +0xA4F4 0xE772 #PRIVATE USE AREA-E772 +0xA4F5 0xE773 #PRIVATE USE AREA-E773 +0xA4F6 0xE774 #PRIVATE USE AREA-E774 +0xA4F7 0xE775 #PRIVATE USE AREA-E775 +0xA4F8 0xE776 #PRIVATE USE AREA-E776 +0xA4F9 0xE777 #PRIVATE USE AREA-E777 +0xA4FA 0xE778 #PRIVATE USE AREA-E778 +0xA4FB 0xE779 #PRIVATE USE AREA-E779 +0xA4FC 0xE77A #PRIVATE USE AREA-E77A +0xA4FD 0xE77B #PRIVATE USE AREA-E77B +0xA4FE 0xE77C #PRIVATE USE AREA-E77C +0xA540 0xE646 #PRIVATE USE AREA-E646 +0xA541 0xE647 #PRIVATE USE AREA-E647 +0xA542 0xE648 #PRIVATE USE AREA-E648 +0xA543 0xE649 #PRIVATE USE AREA-E649 +0xA544 0xE64A #PRIVATE USE AREA-E64A +0xA545 0xE64B #PRIVATE USE AREA-E64B +0xA546 0xE64C #PRIVATE USE AREA-E64C +0xA547 0xE64D #PRIVATE USE AREA-E64D +0xA548 0xE64E #PRIVATE USE AREA-E64E +0xA549 0xE64F #PRIVATE USE AREA-E64F +0xA54A 0xE650 #PRIVATE USE AREA-E650 +0xA54B 0xE651 #PRIVATE USE AREA-E651 +0xA54C 0xE652 #PRIVATE USE AREA-E652 +0xA54D 0xE653 #PRIVATE USE AREA-E653 +0xA54E 0xE654 #PRIVATE USE AREA-E654 +0xA54F 0xE655 #PRIVATE USE AREA-E655 +0xA550 0xE656 #PRIVATE USE AREA-E656 +0xA551 0xE657 #PRIVATE USE AREA-E657 +0xA552 0xE658 #PRIVATE USE AREA-E658 +0xA553 0xE659 #PRIVATE USE AREA-E659 +0xA554 0xE65A #PRIVATE USE AREA-E65A +0xA555 0xE65B #PRIVATE USE AREA-E65B +0xA556 0xE65C #PRIVATE USE AREA-E65C +0xA557 0xE65D #PRIVATE USE AREA-E65D +0xA558 0xE65E #PRIVATE USE AREA-E65E +0xA559 0xE65F #PRIVATE USE AREA-E65F +0xA55A 0xE660 #PRIVATE USE AREA-E660 +0xA55B 0xE661 #PRIVATE USE AREA-E661 +0xA55C 0xE662 #PRIVATE USE AREA-E662 +0xA55D 0xE663 #PRIVATE USE AREA-E663 +0xA55E 0xE664 #PRIVATE USE AREA-E664 +0xA55F 0xE665 #PRIVATE USE AREA-E665 +0xA560 0xE666 #PRIVATE USE AREA-E666 +0xA561 0xE667 #PRIVATE USE AREA-E667 +0xA562 0xE668 #PRIVATE USE AREA-E668 +0xA563 0xE669 #PRIVATE USE AREA-E669 +0xA564 0xE66A #PRIVATE USE AREA-E66A +0xA565 0xE66B #PRIVATE USE AREA-E66B +0xA566 0xE66C #PRIVATE USE AREA-E66C +0xA567 0xE66D #PRIVATE USE AREA-E66D +0xA568 0xE66E #PRIVATE USE AREA-E66E +0xA569 0xE66F #PRIVATE USE AREA-E66F +0xA56A 0xE670 #PRIVATE USE AREA-E670 +0xA56B 0xE671 #PRIVATE USE AREA-E671 +0xA56C 0xE672 #PRIVATE USE AREA-E672 +0xA56D 0xE673 #PRIVATE USE AREA-E673 +0xA56E 0xE674 #PRIVATE USE AREA-E674 +0xA56F 0xE675 #PRIVATE USE AREA-E675 +0xA570 0xE676 #PRIVATE USE AREA-E676 +0xA571 0xE677 #PRIVATE USE AREA-E677 +0xA572 0xE678 #PRIVATE USE AREA-E678 +0xA573 0xE679 #PRIVATE USE AREA-E679 +0xA574 0xE67A #PRIVATE USE AREA-E67A +0xA575 0xE67B #PRIVATE USE AREA-E67B +0xA576 0xE67C #PRIVATE USE AREA-E67C +0xA577 0xE67D #PRIVATE USE AREA-E67D +0xA578 0xE67E #PRIVATE USE AREA-E67E +0xA579 0xE67F #PRIVATE USE AREA-E67F +0xA57A 0xE680 #PRIVATE USE AREA-E680 +0xA57B 0xE681 #PRIVATE USE AREA-E681 +0xA57C 0xE682 #PRIVATE USE AREA-E682 +0xA57D 0xE683 #PRIVATE USE AREA-E683 +0xA57E 0xE684 #PRIVATE USE AREA-E684 +0xA580 0xE685 #PRIVATE USE AREA-E685 +0xA581 0xE686 #PRIVATE USE AREA-E686 +0xA582 0xE687 #PRIVATE USE AREA-E687 +0xA583 0xE688 #PRIVATE USE AREA-E688 +0xA584 0xE689 #PRIVATE USE AREA-E689 +0xA585 0xE68A #PRIVATE USE AREA-E68A +0xA586 0xE68B #PRIVATE USE AREA-E68B +0xA587 0xE68C #PRIVATE USE AREA-E68C +0xA588 0xE68D #PRIVATE USE AREA-E68D +0xA589 0xE68E #PRIVATE USE AREA-E68E +0xA58A 0xE68F #PRIVATE USE AREA-E68F +0xA58B 0xE690 #PRIVATE USE AREA-E690 +0xA58C 0xE691 #PRIVATE USE AREA-E691 +0xA58D 0xE692 #PRIVATE USE AREA-E692 +0xA58E 0xE693 #PRIVATE USE AREA-E693 +0xA58F 0xE694 #PRIVATE USE AREA-E694 +0xA590 0xE695 #PRIVATE USE AREA-E695 +0xA591 0xE696 #PRIVATE USE AREA-E696 +0xA592 0xE697 #PRIVATE USE AREA-E697 +0xA593 0xE698 #PRIVATE USE AREA-E698 +0xA594 0xE699 #PRIVATE USE AREA-E699 +0xA595 0xE69A #PRIVATE USE AREA-E69A +0xA596 0xE69B #PRIVATE USE AREA-E69B +0xA597 0xE69C #PRIVATE USE AREA-E69C +0xA598 0xE69D #PRIVATE USE AREA-E69D +0xA599 0xE69E #PRIVATE USE AREA-E69E +0xA59A 0xE69F #PRIVATE USE AREA-E69F +0xA59B 0xE6A0 #PRIVATE USE AREA-E6A0 +0xA59C 0xE6A1 #PRIVATE USE AREA-E6A1 +0xA59D 0xE6A2 #PRIVATE USE AREA-E6A2 +0xA59E 0xE6A3 #PRIVATE USE AREA-E6A3 +0xA59F 0xE6A4 #PRIVATE USE AREA-E6A4 +0xA5A0 0xE6A5 #PRIVATE USE AREA-E6A5 0xA5A1 0x30A1 #KATAKANA LETTER SMALL A 0xA5A2 0x30A2 #KATAKANA LETTER A 0xA5A3 0x30A3 #KATAKANA LETTER SMALL I @@ -7179,110 +7156,110 @@ 0xA5F4 0x30F4 #KATAKANA LETTER VU 0xA5F5 0x30F5 #KATAKANA LETTER SMALL KA 0xA5F6 0x30F6 #KATAKANA LETTER SMALL KE -0xA5F7 0xE6BD #PRIVATE USE AREA-E6BD -0xA5F8 0xE6BE #PRIVATE USE AREA-E6BE -0xA5F9 0xE6BF #PRIVATE USE AREA-E6BF -0xA5FA 0xE6C0 #PRIVATE USE AREA-E6C0 -0xA5FB 0xE6C1 #PRIVATE USE AREA-E6C1 -0xA5FC 0xE6C2 #PRIVATE USE AREA-E6C2 -0xA5FD 0xE6C3 #PRIVATE USE AREA-E6C3 -0xA5FE 0xE6C4 #PRIVATE USE AREA-E6C4 -0xA640 0xE6C5 #PRIVATE USE AREA-E6C5 -0xA641 0xE6C6 #PRIVATE USE AREA-E6C6 -0xA642 0xE6C7 #PRIVATE USE AREA-E6C7 -0xA643 0xE6C8 #PRIVATE USE AREA-E6C8 -0xA644 0xE6C9 #PRIVATE USE AREA-E6C9 -0xA645 0xE6CA #PRIVATE USE AREA-E6CA -0xA646 0xE6CB #PRIVATE USE AREA-E6CB -0xA647 0xE6CC #PRIVATE USE AREA-E6CC -0xA648 0xE6CD #PRIVATE USE AREA-E6CD -0xA649 0xE6CE #PRIVATE USE AREA-E6CE -0xA64A 0xE6CF #PRIVATE USE AREA-E6CF -0xA64B 0xE6D0 #PRIVATE USE AREA-E6D0 -0xA64C 0xE6D1 #PRIVATE USE AREA-E6D1 -0xA64D 0xE6D2 #PRIVATE USE AREA-E6D2 -0xA64E 0xE6D3 #PRIVATE USE AREA-E6D3 -0xA64F 0xE6D4 #PRIVATE USE AREA-E6D4 -0xA650 0xE6D5 #PRIVATE USE AREA-E6D5 -0xA651 0xE6D6 #PRIVATE USE AREA-E6D6 -0xA652 0xE6D7 #PRIVATE USE AREA-E6D7 -0xA653 0xE6D8 #PRIVATE USE AREA-E6D8 -0xA654 0xE6D9 #PRIVATE USE AREA-E6D9 -0xA655 0xE6DA #PRIVATE USE AREA-E6DA -0xA656 0xE6DB #PRIVATE USE AREA-E6DB -0xA657 0xE6DC #PRIVATE USE AREA-E6DC -0xA658 0xE6DD #PRIVATE USE AREA-E6DD -0xA659 0xE6DE #PRIVATE USE AREA-E6DE -0xA65A 0xE6DF #PRIVATE USE AREA-E6DF -0xA65B 0xE6E0 #PRIVATE USE AREA-E6E0 -0xA65C 0xE6E1 #PRIVATE USE AREA-E6E1 -0xA65D 0xE6E2 #PRIVATE USE AREA-E6E2 -0xA65E 0xE6E3 #PRIVATE USE AREA-E6E3 -0xA65F 0xE6E4 #PRIVATE USE AREA-E6E4 -0xA660 0xE6E5 #PRIVATE USE AREA-E6E5 -0xA661 0xE6E6 #PRIVATE USE AREA-E6E6 -0xA662 0xE6E7 #PRIVATE USE AREA-E6E7 -0xA663 0xE6E8 #PRIVATE USE AREA-E6E8 -0xA664 0xE6E9 #PRIVATE USE AREA-E6E9 -0xA665 0xE6EA #PRIVATE USE AREA-E6EA -0xA666 0xE6EB #PRIVATE USE AREA-E6EB -0xA667 0xE6EC #PRIVATE USE AREA-E6EC -0xA668 0xE6ED #PRIVATE USE AREA-E6ED -0xA669 0xE6EE #PRIVATE USE AREA-E6EE -0xA66A 0xE6EF #PRIVATE USE AREA-E6EF -0xA66B 0xE6F0 #PRIVATE USE AREA-E6F0 -0xA66C 0xE6F1 #PRIVATE USE AREA-E6F1 -0xA66D 0xE6F2 #PRIVATE USE AREA-E6F2 -0xA66E 0xE6F3 #PRIVATE USE AREA-E6F3 -0xA66F 0xE6F4 #PRIVATE USE AREA-E6F4 -0xA670 0xE6F5 #PRIVATE USE AREA-E6F5 -0xA671 0xE6F6 #PRIVATE USE AREA-E6F6 -0xA672 0xE6F7 #PRIVATE USE AREA-E6F7 -0xA673 0xE6F8 #PRIVATE USE AREA-E6F8 -0xA674 0xE6F9 #PRIVATE USE AREA-E6F9 -0xA675 0xE6FA #PRIVATE USE AREA-E6FA -0xA676 0xE6FB #PRIVATE USE AREA-E6FB -0xA677 0xE6FC #PRIVATE USE AREA-E6FC -0xA678 0xE6FD #PRIVATE USE AREA-E6FD -0xA679 0xE6FE #PRIVATE USE AREA-E6FE -0xA67A 0xE6FF #PRIVATE USE AREA-E6FF -0xA67B 0xE700 #PRIVATE USE AREA-E700 -0xA67C 0xE701 #PRIVATE USE AREA-E701 -0xA67D 0xE702 #PRIVATE USE AREA-E702 -0xA67E 0xE703 #PRIVATE USE AREA-E703 -0xA680 0xE704 #PRIVATE USE AREA-E704 -0xA681 0xE705 #PRIVATE USE AREA-E705 -0xA682 0xE706 #PRIVATE USE AREA-E706 -0xA683 0xE707 #PRIVATE USE AREA-E707 -0xA684 0xE708 #PRIVATE USE AREA-E708 -0xA685 0xE709 #PRIVATE USE AREA-E709 -0xA686 0xE70A #PRIVATE USE AREA-E70A -0xA687 0xE70B #PRIVATE USE AREA-E70B -0xA688 0xE70C #PRIVATE USE AREA-E70C -0xA689 0xE70D #PRIVATE USE AREA-E70D -0xA68A 0xE70E #PRIVATE USE AREA-E70E -0xA68B 0xE70F #PRIVATE USE AREA-E70F -0xA68C 0xE710 #PRIVATE USE AREA-E710 -0xA68D 0xE711 #PRIVATE USE AREA-E711 -0xA68E 0xE712 #PRIVATE USE AREA-E712 -0xA68F 0xE713 #PRIVATE USE AREA-E713 -0xA690 0xE714 #PRIVATE USE AREA-E714 -0xA691 0xE715 #PRIVATE USE AREA-E715 -0xA692 0xE716 #PRIVATE USE AREA-E716 -0xA693 0xE717 #PRIVATE USE AREA-E717 -0xA694 0xE718 #PRIVATE USE AREA-E718 -0xA695 0xE719 #PRIVATE USE AREA-E719 -0xA696 0xE71A #PRIVATE USE AREA-E71A -0xA697 0xE71B #PRIVATE USE AREA-E71B -0xA698 0xE71C #PRIVATE USE AREA-E71C -0xA699 0xE71D #PRIVATE USE AREA-E71D -0xA69A 0xE71E #PRIVATE USE AREA-E71E -0xA69B 0xE71F #PRIVATE USE AREA-E71F -0xA69C 0xE720 #PRIVATE USE AREA-E720 -0xA69D 0xE721 #PRIVATE USE AREA-E721 -0xA69E 0xE722 #PRIVATE USE AREA-E722 -0xA69F 0xE723 #PRIVATE USE AREA-E723 -0xA6A0 0xE724 #PRIVATE USE AREA-E724 +0xA5F7 0xE77D #PRIVATE USE AREA-E77D +0xA5F8 0xE77E #PRIVATE USE AREA-E77E +0xA5F9 0xE77F #PRIVATE USE AREA-E77F +0xA5FA 0xE780 #PRIVATE USE AREA-E780 +0xA5FB 0xE781 #PRIVATE USE AREA-E781 +0xA5FC 0xE782 #PRIVATE USE AREA-E782 +0xA5FD 0xE783 #PRIVATE USE AREA-E783 +0xA5FE 0xE784 #PRIVATE USE AREA-E784 +0xA640 0xE6A6 #PRIVATE USE AREA-E6A6 +0xA641 0xE6A7 #PRIVATE USE AREA-E6A7 +0xA642 0xE6A8 #PRIVATE USE AREA-E6A8 +0xA643 0xE6A9 #PRIVATE USE AREA-E6A9 +0xA644 0xE6AA #PRIVATE USE AREA-E6AA +0xA645 0xE6AB #PRIVATE USE AREA-E6AB +0xA646 0xE6AC #PRIVATE USE AREA-E6AC +0xA647 0xE6AD #PRIVATE USE AREA-E6AD +0xA648 0xE6AE #PRIVATE USE AREA-E6AE +0xA649 0xE6AF #PRIVATE USE AREA-E6AF +0xA64A 0xE6B0 #PRIVATE USE AREA-E6B0 +0xA64B 0xE6B1 #PRIVATE USE AREA-E6B1 +0xA64C 0xE6B2 #PRIVATE USE AREA-E6B2 +0xA64D 0xE6B3 #PRIVATE USE AREA-E6B3 +0xA64E 0xE6B4 #PRIVATE USE AREA-E6B4 +0xA64F 0xE6B5 #PRIVATE USE AREA-E6B5 +0xA650 0xE6B6 #PRIVATE USE AREA-E6B6 +0xA651 0xE6B7 #PRIVATE USE AREA-E6B7 +0xA652 0xE6B8 #PRIVATE USE AREA-E6B8 +0xA653 0xE6B9 #PRIVATE USE AREA-E6B9 +0xA654 0xE6BA #PRIVATE USE AREA-E6BA +0xA655 0xE6BB #PRIVATE USE AREA-E6BB +0xA656 0xE6BC #PRIVATE USE AREA-E6BC +0xA657 0xE6BD #PRIVATE USE AREA-E6BD +0xA658 0xE6BE #PRIVATE USE AREA-E6BE +0xA659 0xE6BF #PRIVATE USE AREA-E6BF +0xA65A 0xE6C0 #PRIVATE USE AREA-E6C0 +0xA65B 0xE6C1 #PRIVATE USE AREA-E6C1 +0xA65C 0xE6C2 #PRIVATE USE AREA-E6C2 +0xA65D 0xE6C3 #PRIVATE USE AREA-E6C3 +0xA65E 0xE6C4 #PRIVATE USE AREA-E6C4 +0xA65F 0xE6C5 #PRIVATE USE AREA-E6C5 +0xA660 0xE6C6 #PRIVATE USE AREA-E6C6 +0xA661 0xE6C7 #PRIVATE USE AREA-E6C7 +0xA662 0xE6C8 #PRIVATE USE AREA-E6C8 +0xA663 0xE6C9 #PRIVATE USE AREA-E6C9 +0xA664 0xE6CA #PRIVATE USE AREA-E6CA +0xA665 0xE6CB #PRIVATE USE AREA-E6CB +0xA666 0xE6CC #PRIVATE USE AREA-E6CC +0xA667 0xE6CD #PRIVATE USE AREA-E6CD +0xA668 0xE6CE #PRIVATE USE AREA-E6CE +0xA669 0xE6CF #PRIVATE USE AREA-E6CF +0xA66A 0xE6D0 #PRIVATE USE AREA-E6D0 +0xA66B 0xE6D1 #PRIVATE USE AREA-E6D1 +0xA66C 0xE6D2 #PRIVATE USE AREA-E6D2 +0xA66D 0xE6D3 #PRIVATE USE AREA-E6D3 +0xA66E 0xE6D4 #PRIVATE USE AREA-E6D4 +0xA66F 0xE6D5 #PRIVATE USE AREA-E6D5 +0xA670 0xE6D6 #PRIVATE USE AREA-E6D6 +0xA671 0xE6D7 #PRIVATE USE AREA-E6D7 +0xA672 0xE6D8 #PRIVATE USE AREA-E6D8 +0xA673 0xE6D9 #PRIVATE USE AREA-E6D9 +0xA674 0xE6DA #PRIVATE USE AREA-E6DA +0xA675 0xE6DB #PRIVATE USE AREA-E6DB +0xA676 0xE6DC #PRIVATE USE AREA-E6DC +0xA677 0xE6DD #PRIVATE USE AREA-E6DD +0xA678 0xE6DE #PRIVATE USE AREA-E6DE +0xA679 0xE6DF #PRIVATE USE AREA-E6DF +0xA67A 0xE6E0 #PRIVATE USE AREA-E6E0 +0xA67B 0xE6E1 #PRIVATE USE AREA-E6E1 +0xA67C 0xE6E2 #PRIVATE USE AREA-E6E2 +0xA67D 0xE6E3 #PRIVATE USE AREA-E6E3 +0xA67E 0xE6E4 #PRIVATE USE AREA-E6E4 +0xA680 0xE6E5 #PRIVATE USE AREA-E6E5 +0xA681 0xE6E6 #PRIVATE USE AREA-E6E6 +0xA682 0xE6E7 #PRIVATE USE AREA-E6E7 +0xA683 0xE6E8 #PRIVATE USE AREA-E6E8 +0xA684 0xE6E9 #PRIVATE USE AREA-E6E9 +0xA685 0xE6EA #PRIVATE USE AREA-E6EA +0xA686 0xE6EB #PRIVATE USE AREA-E6EB +0xA687 0xE6EC #PRIVATE USE AREA-E6EC +0xA688 0xE6ED #PRIVATE USE AREA-E6ED +0xA689 0xE6EE #PRIVATE USE AREA-E6EE +0xA68A 0xE6EF #PRIVATE USE AREA-E6EF +0xA68B 0xE6F0 #PRIVATE USE AREA-E6F0 +0xA68C 0xE6F1 #PRIVATE USE AREA-E6F1 +0xA68D 0xE6F2 #PRIVATE USE AREA-E6F2 +0xA68E 0xE6F3 #PRIVATE USE AREA-E6F3 +0xA68F 0xE6F4 #PRIVATE USE AREA-E6F4 +0xA690 0xE6F5 #PRIVATE USE AREA-E6F5 +0xA691 0xE6F6 #PRIVATE USE AREA-E6F6 +0xA692 0xE6F7 #PRIVATE USE AREA-E6F7 +0xA693 0xE6F8 #PRIVATE USE AREA-E6F8 +0xA694 0xE6F9 #PRIVATE USE AREA-E6F9 +0xA695 0xE6FA #PRIVATE USE AREA-E6FA +0xA696 0xE6FB #PRIVATE USE AREA-E6FB +0xA697 0xE6FC #PRIVATE USE AREA-E6FC +0xA698 0xE6FD #PRIVATE USE AREA-E6FD +0xA699 0xE6FE #PRIVATE USE AREA-E6FE +0xA69A 0xE6FF #PRIVATE USE AREA-E6FF +0xA69B 0xE700 #PRIVATE USE AREA-E700 +0xA69C 0xE701 #PRIVATE USE AREA-E701 +0xA69D 0xE702 #PRIVATE USE AREA-E702 +0xA69E 0xE703 #PRIVATE USE AREA-E703 +0xA69F 0xE704 #PRIVATE USE AREA-E704 +0xA6A0 0xE705 #PRIVATE USE AREA-E705 0xA6A1 0x0391 #GREEK CAPITAL LETTER ALPHA 0xA6A2 0x0392 #GREEK CAPITAL LETTER BETA 0xA6A3 0x0393 #GREEK CAPITAL LETTER GAMMA @@ -7307,14 +7284,14 @@ 0xA6B6 0x03A7 #GREEK CAPITAL LETTER CHI 0xA6B7 0x03A8 #GREEK CAPITAL LETTER PSI 0xA6B8 0x03A9 #GREEK CAPITAL LETTER OMEGA -0xA6B9 0xE725 #PRIVATE USE AREA-E725 -0xA6BA 0xE726 #PRIVATE USE AREA-E726 -0xA6BB 0xE727 #PRIVATE USE AREA-E727 -0xA6BC 0xE728 #PRIVATE USE AREA-E728 -0xA6BD 0xE729 #PRIVATE USE AREA-E729 -0xA6BE 0xE72A #PRIVATE USE AREA-E72A -0xA6BF 0xE72B #PRIVATE USE AREA-E72B -0xA6C0 0xE72C #PRIVATE USE AREA-E72C +0xA6B9 0xE785 #PRIVATE USE AREA-E785 +0xA6BA 0xE786 #PRIVATE USE AREA-E786 +0xA6BB 0xE787 #PRIVATE USE AREA-E787 +0xA6BC 0xE788 #PRIVATE USE AREA-E788 +0xA6BD 0xE789 #PRIVATE USE AREA-E789 +0xA6BE 0xE78A #PRIVATE USE AREA-E78A +0xA6BF 0xE78B #PRIVATE USE AREA-E78B +0xA6C0 0xE78C #PRIVATE USE AREA-E78C 0xA6C1 0x03B1 #GREEK SMALL LETTER ALPHA 0xA6C2 0x03B2 #GREEK SMALL LETTER BETA 0xA6C3 0x03B3 #GREEK SMALL LETTER GAMMA @@ -7339,13 +7316,13 @@ 0xA6D6 0x03C7 #GREEK SMALL LETTER CHI 0xA6D7 0x03C8 #GREEK SMALL LETTER PSI 0xA6D8 0x03C9 #GREEK SMALL LETTER OMEGA -0xA6D9 0xE72D #PRIVATE USE AREA-E72D -0xA6DA 0xE72E #PRIVATE USE AREA-E72E -0xA6DB 0xE72F #PRIVATE USE AREA-E72F -0xA6DC 0xE730 #PRIVATE USE AREA-E730 -0xA6DD 0xE731 #PRIVATE USE AREA-E731 -0xA6DE 0xE732 #PRIVATE USE AREA-E732 -0xA6DF 0xE733 #PRIVATE USE AREA-E733 +0xA6D9 0xE78D #PRIVATE USE AREA-E78D +0xA6DA 0xE78E #PRIVATE USE AREA-E78E +0xA6DB 0xE78F #PRIVATE USE AREA-E78F +0xA6DC 0xE790 #PRIVATE USE AREA-E790 +0xA6DD 0xE791 #PRIVATE USE AREA-E791 +0xA6DE 0xE792 #PRIVATE USE AREA-E792 +0xA6DF 0xE793 #PRIVATE USE AREA-E793 0xA6E0 0xFE35 #PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS 0xA6E1 0xFE36 #PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS 0xA6E2 0xFE39 #PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET @@ -7358,121 +7335,121 @@ 0xA6E9 0xFE42 #PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET 0xA6EA 0xFE43 #PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET 0xA6EB 0xFE44 #PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET -0xA6EC 0xE734 #PRIVATE USE AREA-E734 -0xA6ED 0xE735 #PRIVATE USE AREA-E735 +0xA6EC 0xE794 #PRIVATE USE AREA-E794 +0xA6ED 0xE795 #PRIVATE USE AREA-E795 0xA6EE 0xFE3B #PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET 0xA6EF 0xFE3C #PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET 0xA6F0 0xFE37 #PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET 0xA6F1 0xFE38 #PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET 0xA6F2 0xFE31 #PRESENTATION FORM FOR VERTICAL EM DASH -0xA6F3 0xE736 #PRIVATE USE AREA-E736 +0xA6F3 0xE796 #PRIVATE USE AREA-E796 0xA6F4 0xFE33 #PRESENTATION FORM FOR VERTICAL LOW LINE 0xA6F5 0xFE34 #PRESENTATION FORM FOR VERTICAL WAVY LOW LINE -0xA6F6 0xE737 #PRIVATE USE AREA-E737 -0xA6F7 0xE738 #PRIVATE USE AREA-E738 -0xA6F8 0xE739 #PRIVATE USE AREA-E739 -0xA6F9 0xE73A #PRIVATE USE AREA-E73A -0xA6FA 0xE73B #PRIVATE USE AREA-E73B -0xA6FB 0xE73C #PRIVATE USE AREA-E73C -0xA6FC 0xE73D #PRIVATE USE AREA-E73D -0xA6FD 0xE73E #PRIVATE USE AREA-E73E -0xA6FE 0xE73F #PRIVATE USE AREA-E73F -0xA740 0xE740 #PRIVATE USE AREA-E740 -0xA741 0xE741 #PRIVATE USE AREA-E741 -0xA742 0xE742 #PRIVATE USE AREA-E742 -0xA743 0xE743 #PRIVATE USE AREA-E743 -0xA744 0xE744 #PRIVATE USE AREA-E744 -0xA745 0xE745 #PRIVATE USE AREA-E745 -0xA746 0xE746 #PRIVATE USE AREA-E746 -0xA747 0xE747 #PRIVATE USE AREA-E747 -0xA748 0xE748 #PRIVATE USE AREA-E748 -0xA749 0xE749 #PRIVATE USE AREA-E749 -0xA74A 0xE74A #PRIVATE USE AREA-E74A -0xA74B 0xE74B #PRIVATE USE AREA-E74B -0xA74C 0xE74C #PRIVATE USE AREA-E74C -0xA74D 0xE74D #PRIVATE USE AREA-E74D -0xA74E 0xE74E #PRIVATE USE AREA-E74E -0xA74F 0xE74F #PRIVATE USE AREA-E74F -0xA750 0xE750 #PRIVATE USE AREA-E750 -0xA751 0xE751 #PRIVATE USE AREA-E751 -0xA752 0xE752 #PRIVATE USE AREA-E752 -0xA753 0xE753 #PRIVATE USE AREA-E753 -0xA754 0xE754 #PRIVATE USE AREA-E754 -0xA755 0xE755 #PRIVATE USE AREA-E755 -0xA756 0xE756 #PRIVATE USE AREA-E756 -0xA757 0xE757 #PRIVATE USE AREA-E757 -0xA758 0xE758 #PRIVATE USE AREA-E758 -0xA759 0xE759 #PRIVATE USE AREA-E759 -0xA75A 0xE75A #PRIVATE USE AREA-E75A -0xA75B 0xE75B #PRIVATE USE AREA-E75B -0xA75C 0xE75C #PRIVATE USE AREA-E75C -0xA75D 0xE75D #PRIVATE USE AREA-E75D -0xA75E 0xE75E #PRIVATE USE AREA-E75E -0xA75F 0xE75F #PRIVATE USE AREA-E75F -0xA760 0xE760 #PRIVATE USE AREA-E760 -0xA761 0xE761 #PRIVATE USE AREA-E761 -0xA762 0xE762 #PRIVATE USE AREA-E762 -0xA763 0xE763 #PRIVATE USE AREA-E763 -0xA764 0xE764 #PRIVATE USE AREA-E764 -0xA765 0xE765 #PRIVATE USE AREA-E765 -0xA766 0xE766 #PRIVATE USE AREA-E766 -0xA767 0xE767 #PRIVATE USE AREA-E767 -0xA768 0xE768 #PRIVATE USE AREA-E768 -0xA769 0xE769 #PRIVATE USE AREA-E769 -0xA76A 0xE76A #PRIVATE USE AREA-E76A -0xA76B 0xE76B #PRIVATE USE AREA-E76B -0xA76C 0xE76C #PRIVATE USE AREA-E76C -0xA76D 0xE76D #PRIVATE USE AREA-E76D -0xA76E 0xE76E #PRIVATE USE AREA-E76E -0xA76F 0xE76F #PRIVATE USE AREA-E76F -0xA770 0xE770 #PRIVATE USE AREA-E770 -0xA771 0xE771 #PRIVATE USE AREA-E771 -0xA772 0xE772 #PRIVATE USE AREA-E772 -0xA773 0xE773 #PRIVATE USE AREA-E773 -0xA774 0xE774 #PRIVATE USE AREA-E774 -0xA775 0xE775 #PRIVATE USE AREA-E775 -0xA776 0xE776 #PRIVATE USE AREA-E776 -0xA777 0xE777 #PRIVATE USE AREA-E777 -0xA778 0xE778 #PRIVATE USE AREA-E778 -0xA779 0xE779 #PRIVATE USE AREA-E779 -0xA77A 0xE77A #PRIVATE USE AREA-E77A -0xA77B 0xE77B #PRIVATE USE AREA-E77B -0xA77C 0xE77C #PRIVATE USE AREA-E77C -0xA77D 0xE77D #PRIVATE USE AREA-E77D -0xA77E 0xE77E #PRIVATE USE AREA-E77E -0xA780 0xE77F #PRIVATE USE AREA-E77F -0xA781 0xE780 #PRIVATE USE AREA-E780 -0xA782 0xE781 #PRIVATE USE AREA-E781 -0xA783 0xE782 #PRIVATE USE AREA-E782 -0xA784 0xE783 #PRIVATE USE AREA-E783 -0xA785 0xE784 #PRIVATE USE AREA-E784 -0xA786 0xE785 #PRIVATE USE AREA-E785 -0xA787 0xE786 #PRIVATE USE AREA-E786 -0xA788 0xE787 #PRIVATE USE AREA-E787 -0xA789 0xE788 #PRIVATE USE AREA-E788 -0xA78A 0xE789 #PRIVATE USE AREA-E789 -0xA78B 0xE78A #PRIVATE USE AREA-E78A -0xA78C 0xE78B #PRIVATE USE AREA-E78B -0xA78D 0xE78C #PRIVATE USE AREA-E78C -0xA78E 0xE78D #PRIVATE USE AREA-E78D -0xA78F 0xE78E #PRIVATE USE AREA-E78E -0xA790 0xE78F #PRIVATE USE AREA-E78F -0xA791 0xE790 #PRIVATE USE AREA-E790 -0xA792 0xE791 #PRIVATE USE AREA-E791 -0xA793 0xE792 #PRIVATE USE AREA-E792 -0xA794 0xE793 #PRIVATE USE AREA-E793 -0xA795 0xE794 #PRIVATE USE AREA-E794 -0xA796 0xE795 #PRIVATE USE AREA-E795 -0xA797 0xE796 #PRIVATE USE AREA-E796 -0xA798 0xE797 #PRIVATE USE AREA-E797 -0xA799 0xE798 #PRIVATE USE AREA-E798 -0xA79A 0xE799 #PRIVATE USE AREA-E799 -0xA79B 0xE79A #PRIVATE USE AREA-E79A -0xA79C 0xE79B #PRIVATE USE AREA-E79B -0xA79D 0xE79C #PRIVATE USE AREA-E79C -0xA79E 0xE79D #PRIVATE USE AREA-E79D -0xA79F 0xE79E #PRIVATE USE AREA-E79E -0xA7A0 0xE79F #PRIVATE USE AREA-E79F +0xA6F6 0xE797 #PRIVATE USE AREA-E797 +0xA6F7 0xE798 #PRIVATE USE AREA-E798 +0xA6F8 0xE799 #PRIVATE USE AREA-E799 +0xA6F9 0xE79A #PRIVATE USE AREA-E79A +0xA6FA 0xE79B #PRIVATE USE AREA-E79B +0xA6FB 0xE79C #PRIVATE USE AREA-E79C +0xA6FC 0xE79D #PRIVATE USE AREA-E79D +0xA6FD 0xE79E #PRIVATE USE AREA-E79E +0xA6FE 0xE79F #PRIVATE USE AREA-E79F +0xA740 0xE706 #PRIVATE USE AREA-E706 +0xA741 0xE707 #PRIVATE USE AREA-E707 +0xA742 0xE708 #PRIVATE USE AREA-E708 +0xA743 0xE709 #PRIVATE USE AREA-E709 +0xA744 0xE70A #PRIVATE USE AREA-E70A +0xA745 0xE70B #PRIVATE USE AREA-E70B +0xA746 0xE70C #PRIVATE USE AREA-E70C +0xA747 0xE70D #PRIVATE USE AREA-E70D +0xA748 0xE70E #PRIVATE USE AREA-E70E +0xA749 0xE70F #PRIVATE USE AREA-E70F +0xA74A 0xE710 #PRIVATE USE AREA-E710 +0xA74B 0xE711 #PRIVATE USE AREA-E711 +0xA74C 0xE712 #PRIVATE USE AREA-E712 +0xA74D 0xE713 #PRIVATE USE AREA-E713 +0xA74E 0xE714 #PRIVATE USE AREA-E714 +0xA74F 0xE715 #PRIVATE USE AREA-E715 +0xA750 0xE716 #PRIVATE USE AREA-E716 +0xA751 0xE717 #PRIVATE USE AREA-E717 +0xA752 0xE718 #PRIVATE USE AREA-E718 +0xA753 0xE719 #PRIVATE USE AREA-E719 +0xA754 0xE71A #PRIVATE USE AREA-E71A +0xA755 0xE71B #PRIVATE USE AREA-E71B +0xA756 0xE71C #PRIVATE USE AREA-E71C +0xA757 0xE71D #PRIVATE USE AREA-E71D +0xA758 0xE71E #PRIVATE USE AREA-E71E +0xA759 0xE71F #PRIVATE USE AREA-E71F +0xA75A 0xE720 #PRIVATE USE AREA-E720 +0xA75B 0xE721 #PRIVATE USE AREA-E721 +0xA75C 0xE722 #PRIVATE USE AREA-E722 +0xA75D 0xE723 #PRIVATE USE AREA-E723 +0xA75E 0xE724 #PRIVATE USE AREA-E724 +0xA75F 0xE725 #PRIVATE USE AREA-E725 +0xA760 0xE726 #PRIVATE USE AREA-E726 +0xA761 0xE727 #PRIVATE USE AREA-E727 +0xA762 0xE728 #PRIVATE USE AREA-E728 +0xA763 0xE729 #PRIVATE USE AREA-E729 +0xA764 0xE72A #PRIVATE USE AREA-E72A +0xA765 0xE72B #PRIVATE USE AREA-E72B +0xA766 0xE72C #PRIVATE USE AREA-E72C +0xA767 0xE72D #PRIVATE USE AREA-E72D +0xA768 0xE72E #PRIVATE USE AREA-E72E +0xA769 0xE72F #PRIVATE USE AREA-E72F +0xA76A 0xE730 #PRIVATE USE AREA-E730 +0xA76B 0xE731 #PRIVATE USE AREA-E731 +0xA76C 0xE732 #PRIVATE USE AREA-E732 +0xA76D 0xE733 #PRIVATE USE AREA-E733 +0xA76E 0xE734 #PRIVATE USE AREA-E734 +0xA76F 0xE735 #PRIVATE USE AREA-E735 +0xA770 0xE736 #PRIVATE USE AREA-E736 +0xA771 0xE737 #PRIVATE USE AREA-E737 +0xA772 0xE738 #PRIVATE USE AREA-E738 +0xA773 0xE739 #PRIVATE USE AREA-E739 +0xA774 0xE73A #PRIVATE USE AREA-E73A +0xA775 0xE73B #PRIVATE USE AREA-E73B +0xA776 0xE73C #PRIVATE USE AREA-E73C +0xA777 0xE73D #PRIVATE USE AREA-E73D +0xA778 0xE73E #PRIVATE USE AREA-E73E +0xA779 0xE73F #PRIVATE USE AREA-E73F +0xA77A 0xE740 #PRIVATE USE AREA-E740 +0xA77B 0xE741 #PRIVATE USE AREA-E741 +0xA77C 0xE742 #PRIVATE USE AREA-E742 +0xA77D 0xE743 #PRIVATE USE AREA-E743 +0xA77E 0xE744 #PRIVATE USE AREA-E744 +0xA780 0xE745 #PRIVATE USE AREA-E745 +0xA781 0xE746 #PRIVATE USE AREA-E746 +0xA782 0xE747 #PRIVATE USE AREA-E747 +0xA783 0xE748 #PRIVATE USE AREA-E748 +0xA784 0xE749 #PRIVATE USE AREA-E749 +0xA785 0xE74A #PRIVATE USE AREA-E74A +0xA786 0xE74B #PRIVATE USE AREA-E74B +0xA787 0xE74C #PRIVATE USE AREA-E74C +0xA788 0xE74D #PRIVATE USE AREA-E74D +0xA789 0xE74E #PRIVATE USE AREA-E74E +0xA78A 0xE74F #PRIVATE USE AREA-E74F +0xA78B 0xE750 #PRIVATE USE AREA-E750 +0xA78C 0xE751 #PRIVATE USE AREA-E751 +0xA78D 0xE752 #PRIVATE USE AREA-E752 +0xA78E 0xE753 #PRIVATE USE AREA-E753 +0xA78F 0xE754 #PRIVATE USE AREA-E754 +0xA790 0xE755 #PRIVATE USE AREA-E755 +0xA791 0xE756 #PRIVATE USE AREA-E756 +0xA792 0xE757 #PRIVATE USE AREA-E757 +0xA793 0xE758 #PRIVATE USE AREA-E758 +0xA794 0xE759 #PRIVATE USE AREA-E759 +0xA795 0xE75A #PRIVATE USE AREA-E75A +0xA796 0xE75B #PRIVATE USE AREA-E75B +0xA797 0xE75C #PRIVATE USE AREA-E75C +0xA798 0xE75D #PRIVATE USE AREA-E75D +0xA799 0xE75E #PRIVATE USE AREA-E75E +0xA79A 0xE75F #PRIVATE USE AREA-E75F +0xA79B 0xE760 #PRIVATE USE AREA-E760 +0xA79C 0xE761 #PRIVATE USE AREA-E761 +0xA79D 0xE762 #PRIVATE USE AREA-E762 +0xA79E 0xE763 #PRIVATE USE AREA-E763 +0xA79F 0xE764 #PRIVATE USE AREA-E764 +0xA7A0 0xE765 #PRIVATE USE AREA-E765 0xA7A1 0x0410 #CYRILLIC CAPITAL LETTER A 0xA7A2 0x0411 #CYRILLIC CAPITAL LETTER BE 0xA7A3 0x0412 #CYRILLIC CAPITAL LETTER VE diff --git a/jdk/make/tools/Makefile b/jdk/make/tools/Makefile index ad3089477a0..f3af119c851 100644 --- a/jdk/make/tools/Makefile +++ b/jdk/make/tools/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -58,6 +58,11 @@ ifndef DISABLE_NIMBUS SUBDIRS += generate_nimbus endif +ifeq ($(PLATFORM), solaris) + # temporary tools to work around gobjcopy bugs + SUBDIRS += add_gnu_debuglink fix_empty_sec_hdr_flags +endif + include $(BUILDDIR)/common/Subdirs.gmk all build clean clobber:: diff --git a/jdk/makefiles/java/sun_nio/Makefile b/jdk/make/tools/add_gnu_debuglink/Makefile similarity index 60% rename from jdk/makefiles/java/sun_nio/Makefile rename to jdk/make/tools/add_gnu_debuglink/Makefile index 122c58aa812..37b53cf057a 100644 --- a/jdk/makefiles/java/sun_nio/Makefile +++ b/jdk/make/tools/add_gnu_debuglink/Makefile @@ -1,12 +1,10 @@ # -# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. +# 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 @@ -21,33 +19,28 @@ # 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. +# # -# -# Makefile for sun/nio files -# +# Rules to build add_gnu_debuglink, used by various Makefiles on Solaris BUILDDIR = ../.. -PACKAGE = sun.nio -PRODUCT = sun - -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true include $(BUILDDIR)/common/Defs.gmk -# -# Files to compile. -# -include FILES_java.gmk +# Default name +PROGRAM = add_gnu_debuglink +ADD_GNU_DEBUGLINK_PROG = $(ABS_BUILDTOOLBINDIR)/$(PROGRAM) -# -# Install .lib file. -# -INSTALL_DOT_LIB = true +ADD_GNU_DEBUGLINK_SRC = add_gnu_debuglink.c +ADD_GNU_DEBUGLINK_FLAGS = +LIBS_ADD_GNU_DEBUGLINK += -lelf -include $(BUILDDIR)/common/Classes.gmk +all: $(ADD_GNU_DEBUGLINK) + +$(ADD_GNU_DEBUGLINK_PROG): $(ADD_GNU_DEBUGLINK_SRC) + $(MKDIR) -p $(BUILDTOOLBINDIR) + $(CC) -g -o $@ $< $(ADD_GNU_DEBUGLINK_FLAGS) $(LIBS_ADD_GNU_DEBUGLINK) + +clean:: + $(RM) $(ADD_GNU_DEBUGLINK_PROG) -clean:: - $(RM) -r $(CLASSHDRDIR) -clobber:: - $(RM) -r $(CLASSBINDIR)/sun/nio/cs diff --git a/jdk/make/tools/add_gnu_debuglink/add_gnu_debuglink.c b/jdk/make/tools/add_gnu_debuglink/add_gnu_debuglink.c new file mode 100644 index 00000000000..3cb2dc489d4 --- /dev/null +++ b/jdk/make/tools/add_gnu_debuglink/add_gnu_debuglink.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + * + */ + +/* + * Name: add_gnu_debuglink.c + * + * Description: Add a ".gnu_debuglink" section that refers to the specified + * debug_info_path to the specified ELF object. + * + * This program is adapted from the example program shown on the + * elf(3elf) man page and from code from the Solaris compiler + * driver. + */ + +/* + * needed to define SHF_EXCLUDE + */ +#define ELF_TARGET_ALL + +#include +#include +#include +#include +#include +#include + +static void failure(void); +static unsigned int gnu_debuglink_crc32(unsigned int crc, unsigned char *buf, + size_t len); + +void +main(int argc, char ** argv) { + /* new ELF section name */ + static char SEC_NAME[] = ".gnu_debuglink"; + + unsigned char buffer[8 * 1024]; /* I/O buffer */ + int buffer_len; /* buffer length */ + char * debug_info_path; /* debug info path */ + void * ehdr; /* ELF header */ + Elf * elf; /* ELF descriptor */ + char * elf_ident; /* ELF identity string */ + char * elf_obj; /* elf_obj file */ + int fd; /* descriptor for files */ + unsigned int file_crc = 0; /* CRC for debug info file */ + int is_elfclass64; /* is an ELFCLASS64 file? */ + Elf_Data * link_dat; /* ELF data for new debug info link */ + Elf_Data * name_dat; /* ELF data for new section name */ + Elf_Scn * new_scn; /* new ELF section descriptor */ + void * new_shdr; /* new ELF section header */ + Elf_Scn * scn; /* ELF section descriptor */ + void * shdr; /* ELF section header */ + + if (argc != 3) { + (void) fprintf(stderr, "Usage: %s debug_info_path elf_obj\n", argv[0]); + exit(2); + } + + debug_info_path = argv[1]; /* save for later */ + if ((fd = open(debug_info_path, O_RDONLY)) == -1) { + (void) fprintf(stderr, "%s: cannot open file.\n", debug_info_path); + exit(3); + } + + (void) printf("Computing CRC for '%s'\n", debug_info_path); + (void) fflush(stdout); + /* compute CRC for the debug info file */ + for (;;) { + int len = read(fd, buffer, sizeof buffer); + if (len <= 0) { + break; + } + file_crc = gnu_debuglink_crc32(file_crc, buffer, len); + } + (void) close(fd); + + /* open the elf_obj */ + elf_obj = argv[2]; + if ((fd = open(elf_obj, O_RDWR)) == -1) { + (void) fprintf(stderr, "%s: cannot open file.\n", elf_obj); + exit(4); + } + + (void) printf("Opening '%s' for update\n", elf_obj); + (void) fflush(stdout); + (void) elf_version(EV_CURRENT); /* coordinate ELF versions */ + + /* obtain the ELF descriptors from the input file */ + if ((elf = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL) { + failure(); + } + + /* determine if ELFCLASS64 or not? */ + elf_ident = elf_getident(elf, NULL); + is_elfclass64 = (elf_ident[EI_CLASS] == ELFCLASS64); + + /* get the ELF header */ + if (is_elfclass64) { + ehdr = elf64_getehdr(elf); + } else { + ehdr = elf32_getehdr(elf); + } + if (ehdr == NULL) { + failure(); + } + + /* get the ELF section descriptor */ + if (is_elfclass64) { + scn = elf_getscn(elf, ((Elf64_Ehdr *) ehdr)->e_shstrndx); + } else { + scn = elf_getscn(elf, ((Elf32_Ehdr *) ehdr)->e_shstrndx); + } + if (scn == NULL) { + failure(); + } + + /* get the section header */ + if (is_elfclass64) { + shdr = elf64_getshdr(scn); + } else { + shdr = elf32_getshdr(scn); + } + if (shdr == NULL) { + failure(); + } + + (void) printf("Adding ELF data for new section name\n"); + (void) fflush(stdout); + name_dat = elf_newdata(scn); + name_dat->d_buf = (void *) SEC_NAME; + if (is_elfclass64) { + name_dat->d_off = ((Elf64_Shdr *) shdr)->sh_size + 1; + } else { + name_dat->d_off = ((Elf32_Shdr *) shdr)->sh_size + 1; + } + name_dat->d_align = 1; + name_dat->d_size = strlen(SEC_NAME) + 1; + + new_scn = elf_newscn(elf); + + if (is_elfclass64) { + new_shdr = elf64_getshdr(new_scn); + ((Elf64_Shdr *) new_shdr)->sh_flags = SHF_EXCLUDE; + ((Elf64_Shdr *) new_shdr)->sh_type = SHT_PROGBITS; + ((Elf64_Shdr *) new_shdr)->sh_name = ((Elf64_Shdr *) shdr)->sh_size; + ((Elf64_Shdr *) new_shdr)->sh_addralign = 1; + ((Elf64_Shdr *) shdr)->sh_size += (strlen(SEC_NAME) + 1); + } else { + new_shdr = elf32_getshdr(new_scn); + ((Elf32_Shdr *) new_shdr)->sh_flags = SHF_EXCLUDE; + ((Elf32_Shdr *) new_shdr)->sh_type = SHT_PROGBITS; + ((Elf32_Shdr *) new_shdr)->sh_name = ((Elf32_Shdr *) shdr)->sh_size; + ((Elf32_Shdr *) new_shdr)->sh_addralign = 1; + ((Elf32_Shdr *) shdr)->sh_size += (strlen(SEC_NAME) + 1); + } + + (void) printf("Adding ELF data for debug_info_path value\n"); + (void) fflush(stdout); + (void) memset(buffer, 0, sizeof buffer); + buffer_len = strlen(debug_info_path) + 1; /* +1 for NUL */ + (void) strncpy((char *) buffer, debug_info_path, buffer_len); + if (buffer_len % 4 != 0) { + /* not on a 4 byte boundary so pad to the next one */ + buffer_len += (4 - buffer_len % 4); + } + /* save the CRC */ + (void) memcpy(&buffer[buffer_len], &file_crc, sizeof file_crc); + buffer_len += sizeof file_crc; + + link_dat = elf_newdata(new_scn); + link_dat->d_type = ELF_T_BYTE; + link_dat->d_size = buffer_len; + link_dat->d_buf = buffer; + link_dat->d_align = 1; + + (void) printf("Saving updates to '%s'\n", elf_obj); + (void) fflush(stdout); + (void) elf_update(elf, ELF_C_NULL); /* recalc ELF memory structures */ + (void) elf_update(elf, ELF_C_WRITE); /* write out changes to ELF obj */ + (void) elf_end(elf); /* done with ELF obj */ + (void) close(fd); + + (void) printf("Done updating '%s'\n", elf_obj); + (void) fflush(stdout); + exit(0); +} /* end main */ + + +static void +failure() { + (void) fprintf(stderr, "%s\n", elf_errmsg(elf_errno())); + exit(5); +} + + +/* + * The CRC used in gnu_debuglink, retrieved from + * http://sourceware.org/gdb/current/onlinedocs/gdb/Separate-Debug-Files.html#Separate-Debug-Files. + */ + +static unsigned int +gnu_debuglink_crc32(unsigned int crc, unsigned char *buf, size_t len) { + static const unsigned int crc32_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d + }; + + unsigned char *end; + + crc = ~crc & 0xffffffff; + for (end = buf + len; buf < end; ++buf) { + crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); + } + return ~crc & 0xffffffff; +} diff --git a/jdk/makefiles/javax/imageio/Makefile b/jdk/make/tools/fix_empty_sec_hdr_flags/Makefile similarity index 57% rename from jdk/makefiles/javax/imageio/Makefile rename to jdk/make/tools/fix_empty_sec_hdr_flags/Makefile index c73f6f549f0..0ed6b4361c8 100644 --- a/jdk/makefiles/javax/imageio/Makefile +++ b/jdk/make/tools/fix_empty_sec_hdr_flags/Makefile @@ -1,12 +1,10 @@ # -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. +# 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 @@ -21,36 +19,28 @@ # 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. +# # -# -# Makefile for building all of JIIO (Java Image I/O) API -# +# Rules to build fix_empty_sec_hdr_flags, used by various Makefiles on Solaris BUILDDIR = ../.. -PACKAGE = javax.imageio -PRODUCT = jiio include $(BUILDDIR)/common/Defs.gmk -# -# Files to compile -# -AUTO_FILES_JAVA_DIRS = javax/imageio com/sun/imageio +# Default name +PROGRAM = fix_empty_sec_hdr_flags +FIX_EMPTY_SEC_HDR_FLAGS_PROG = $(ABS_BUILDTOOLBINDIR)/$(PROGRAM) -# -# Resources -# -LOCALE_SET_DEFINITION = jre -OTHER_PROPERTIES = com/sun/imageio/plugins/common/iio-plugin.properties +FIX_EMPTY_SEC_HDR_FLAGS_SRC = fix_empty_sec_hdr_flags.c +FIX_EMPTY_SEC_HDR_FLAGS_FLAGS = +LIBS_FIX_EMPTY_SEC_HDR_FLAGS += -lelf -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk +all: $(FIX_EMPTY_SEC_HDR_FLAGS) -build: copy-files +$(FIX_EMPTY_SEC_HDR_FLAGS_PROG): $(FIX_EMPTY_SEC_HDR_FLAGS_SRC) + $(MKDIR) -p $(BUILDTOOLBINDIR) + $(CC) -g -o $@ $< $(FIX_EMPTY_SEC_HDR_FLAGS_FLAGS) $(LIBS_FIX_EMPTY_SEC_HDR_FLAGS) -copy-files: $(FILES_copy) - -.PHONY: copy-files +clean:: + $(RM) $(FIX_EMPTY_SEC_HDR_FLAGS_PROG) diff --git a/jdk/make/tools/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c b/jdk/make/tools/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c new file mode 100644 index 00000000000..6582d950639 --- /dev/null +++ b/jdk/make/tools/fix_empty_sec_hdr_flags/fix_empty_sec_hdr_flags.c @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + * + */ + +/* + * Name: fix_empty_sec_hdr_flags.c + * + * Description: Remove the SHF_ALLOC flag from "empty" section headers. + * An "empty" section header has sh_addr == 0 and sh_size == 0. + * + * This program is adapted from the example program shown on the + * elf(3elf) man page and from code from the Solaris compiler + * driver. + */ + +#include +#include +#include +#include +#include +#include + +static void failure(void); + +void +main(int argc, char ** argv) { + void * ehdr; /* ELF header */ + unsigned int i; /* section counter */ + int fd; /* descriptor for file */ + Elf * elf; /* ELF descriptor */ + char * elf_ident; /* ELF identity string */ + char * elf_obj; /* elf_obj file */ + int fix_count; /* number of flags fixed */ + int is_elfclass64; /* is an ELFCLASS64 file? */ + Elf_Scn * scn; /* ELF section descriptor */ + void * shdr; /* ELF section header */ + Elf_Data * shstrtab; /* ELF section header string table */ + + if (argc != 2) { + (void) fprintf(stderr, "Usage: %s elf_obj\n", argv[0]); + exit(2); + } + + /* open the elf_obj */ + elf_obj = argv[1]; + if ((fd = open(elf_obj, O_RDWR)) == -1) { + (void) fprintf(stderr, "%s: cannot open file.\n", elf_obj); + exit(3); + } + + (void) printf("Opening '%s' for update\n", elf_obj); + (void) fflush(stdout); + (void) elf_version(EV_CURRENT); /* coordinate ELF versions */ + + /* obtain the ELF descriptors from the input file */ + if ((elf = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL) { + failure(); + } + + /* determine if ELFCLASS64 or not? */ + elf_ident = elf_getident(elf, NULL); + is_elfclass64 = (elf_ident[EI_CLASS] == ELFCLASS64); + + /* get the ELF header */ + if (is_elfclass64) { + ehdr = elf64_getehdr(elf); + } else { + ehdr = elf32_getehdr(elf); + } + if (ehdr == NULL) { + failure(); + } + + /* get the ELF section descriptor */ + if (is_elfclass64) { + scn = elf_getscn(elf, ((Elf64_Ehdr *) ehdr)->e_shstrndx); + } else { + scn = elf_getscn(elf, ((Elf32_Ehdr *) ehdr)->e_shstrndx); + } + if (scn == NULL) { + failure(); + } + + /* get the section header string table */ + shstrtab = elf_getdata(scn, NULL); + if (shstrtab == NULL) { + failure(); + } + + fix_count = 0; + + /* traverse the sections of the input file */ + for (i = 1, scn = NULL; scn = elf_nextscn(elf, scn); i++) { + int has_flag_set; /* is SHF_ALLOC flag set? */ + int is_empty; /* is section empty? */ + char * name; /* short hand pointer */ + + /* get the section header */ + if (is_elfclass64) { + shdr = elf64_getshdr(scn); + } else { + shdr = elf32_getshdr(scn); + } + if (shdr == NULL) { + failure(); + } + + if (is_elfclass64) { + name = (char *)shstrtab->d_buf + ((Elf64_Shdr *) shdr)->sh_name; + } else { + name = (char *)shstrtab->d_buf + ((Elf32_Shdr *) shdr)->sh_name; + } + + if (is_elfclass64) { + has_flag_set = ((Elf64_Shdr *) shdr)->sh_flags & SHF_ALLOC; + is_empty = ((Elf64_Shdr *) shdr)->sh_addr == 0 && + ((Elf64_Shdr *) shdr)->sh_size == 0; + } else { + has_flag_set = ((Elf32_Shdr *) shdr)->sh_flags & SHF_ALLOC; + is_empty = ((Elf32_Shdr *) shdr)->sh_addr == 0 && + ((Elf32_Shdr *) shdr)->sh_size == 0; + } + + if (is_empty && has_flag_set) { + (void) printf("section[%u] '%s' is empty, " + "but SHF_ALLOC flag is set.\n", i, name); + (void) printf("Clearing the SHF_ALLOC flag.\n"); + + if (is_elfclass64) { + ((Elf64_Shdr *) shdr)->sh_flags &= ~SHF_ALLOC; + } else { + ((Elf32_Shdr *) shdr)->sh_flags &= ~SHF_ALLOC; + } + fix_count++; + } + } /* end for each ELF section */ + + if (fix_count > 0) { + (void) printf("Saving %d updates to '%s'\n", fix_count, elf_obj); + (void) fflush(stdout); + (void) elf_update(elf, ELF_C_NULL); /* recalc ELF memory structures */ + (void) elf_update(elf, ELF_C_WRITE); /* write out changes to ELF obj */ + } else { + (void) printf("No SHF_ALLOC flags needed to be cleared.\n"); + } + + (void) elf_end(elf); /* done with ELF obj */ + (void) close(fd); + + (void) printf("Done %s '%s'\n", + (fix_count > 0) ? "updating" : "with", elf_obj); + (void) fflush(stdout); + exit(0); +} /* end main */ + + +static void +failure() { + (void) fprintf(stderr, "%s\n", elf_errmsg(elf_errno())); + exit(6); +} diff --git a/jdk/makefiles/CompileDemos.gmk b/jdk/makefiles/CompileDemos.gmk index 814465f01e2..beda0452992 100644 --- a/jdk/makefiles/CompileDemos.gmk +++ b/jdk/makefiles/CompileDemos.gmk @@ -134,9 +134,9 @@ define SetupDemo $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/$6share/demo/$2/$1/,$7))) ifneq ($7,) $(JDK_OUTPUTDIR)/newdemo/$2/$1/% : $(JDK_TOPDIR)/src/$6share/demo/$2/$1/% - mkdir -p $$(@D) - cp $$< $$@ - chmod -f ug+w $$@ + $(MKDIR) -p $$(@D) + $(CP) $$< $$@ + $(CHMOD) -f ug+w $$@ BUILD_DEMOS += $$($1_COPY_TARGETS) endif @@ -155,7 +155,7 @@ $(JDK_OUTPUTDIR)/newdemo/jfc/CodePointIM/_the.services : \ cd META-INF/services && \ $(JAR) uf $(JDK_OUTPUTDIR)/newdemo/jfc/CodePointIM/CodePointIM.jar java.awt.im.spi.InputMethodDescriptor) $(RM) -r $(JDK_OUTPUTDIR)/newdemo/jfc/CodePointIM/_the.tmp - touch $@ + $(TOUCH) $@ BUILD_DEMOS+=$(JDK_OUTPUTDIR)/newdemo/jfc/CodePointIM/_the.services @@ -167,12 +167,12 @@ $(eval $(call SetupDemo,SampleTree,jfc,,SampleTree,,,README*)) $(eval $(call SetupDemo,SwingApplet,jfc,,SwingApplet,,,README* *.html)) $(eval $(call SetupDemo,TableExample,jfc,,TableExample,,,README*)) $(eval $(call SetupDemo,TransparentRuler,jfc,,transparentruler.Ruler,,,README*)) -$(eval $(call SetupDemo,jconsole-plugin,scripting,-cp $(JDK_OUTPUTDIR)/lib/jconsole.jar,,,,*.xml *.txt)) +$(eval $(call SetupDemo,jconsole-plugin,scripting,-cp $(JDK_OUTPUTDIR)/lib/jconsole.jar,,,,*.xml *.txt,,,,Main-Class: \n)) $(eval $(call SetupDemo,FullThreadDump,management,,FullThreadDump,,,README*)) $(eval $(call SetupDemo,JTop,management,-cp $(JDK_OUTPUTDIR)/lib/jconsole.jar,JTop,,,README*)) $(eval $(call SetupDemo,MemoryMonitor,management,,MemoryMonitor,,,README*)) $(eval $(call SetupDemo,VerboseGC,management,,VerboseGC,,,README*)) -$(eval $(call SetupDemo,zipfs,nio,,,,,README* *.java)) +$(eval $(call SetupDemo,zipfs,nio,,,,,README* *.java,,,,Main-Class: \n)) ifndef OPENJDK $(eval $(call SetupDemo,Laffy,jfc,,,,closed/,*)) @@ -188,9 +188,9 @@ ifndef OPENJDK $(JDK_OUTPUTDIR)/newdemo/nbproject/%,\ $(shell $(FIND) $(JDK_TOPDIR)/src/closed/share/demo/nbproject/ -type f)) $(JDK_OUTPUTDIR)/newdemo/nbproject/% : $(JDK_TOPDIR)/src/closed/share/demo/nbproject/% - mkdir -p $(@D) - cp $< $@ - chmod -f ug+w $@ + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(CHMOD) -f ug+w $@ endif ################################################################################################## @@ -215,7 +215,7 @@ define SetupJVMTIDemo # Param 5 = libs for posix # Param 6 = libs for winapi # Param 7 = libs for solaris - BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/demo/jvmti/$1) \ + BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/demo/jvmti/$1) \ $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/,$2)) BUILD_DEMO_JVMTI_$1_EXTRA_INC:=$$(addprefix -I,$$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC)) BUILD_DEMO_JVMTI_$1_LANG:=C @@ -227,17 +227,26 @@ define SetupJVMTIDemo $1_EXTRA_CXX:=$(LIBCXX) BUILD_DEMO_JVMTI_$1_O_FLAG:=$(CXX_O_FLAG_NORM) endif + + $1_CXXFLAGS:=$(CXXFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3 + ifeq ($1-$(OPENJDK_TARGET_CPU_ARCH),waiters-sparc) + $1_FILTER:=-xregs=no%appl + $1_CXXFLAGS:=$$(filter-out $$($1_FILTER),$$($1_CXXFLAGS)) + endif + $$(eval $$(call SetupNativeCompilation,BUILD_DEMO_JVMTI_$1,\ SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\ LANG:=$$(BUILD_DEMO_JVMTI_$1_LANG),\ CFLAGS:=$(CFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3,\ + CXXFLAGS:=$$($1_CXXFLAGS),\ LDFLAGS:=$(LDFLAGS_JDKLIB),\ LDFLAGS_SUFFIX:=$$($1_EXTRA_CXX),\ LDFLAGS_SUFFIX_posix:=$5,\ LDFLAGS_SUFFIX_winapi:=$6,\ LDFLAGS_SUFFIX_solaris:=-lc $7,\ - BIN:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\ - LIB:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib,\ + LIBRARY:=$1)) $$(eval $$(call SetupZipArchive,BUILD_DEMO_JVMTI_SRC_$1,\ SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\ @@ -255,13 +264,13 @@ define SetupJVMTIDemo BIN:=$(JDK_OUTPUTDIR)/newdemoclasses/jvmti/$1,\ COPY:=$(PATTERNS_TO_COPY),\ JAR:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/$1.jar,\ - JARMAIN:=,\ + EXTRA_MANIFEST_ATTR:=Main-Class: \n,\ MANIFEST:=$(JDK_TOPDIR)/make/tools/manifest.mf)) BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/$1.jar endif - BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX) \ + BUILD_DEMOS += $$(BUILD_DEMO_JVMTI_$1) \ $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/src.zip \ $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/README.txt endef @@ -273,7 +282,7 @@ $(eval $(call SetupJVMTIDemo,heapViewer, agent_util)) # hprof contains error messages using __FILE__ macro. These expand to the absolute path # in the new build system and relative in the old, causing the binaries to differ. $(eval $(call SetupJVMTIDemo,hprof, java_crw_demo,\ - -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,C,\ + -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,C,\ -ldl,ws2_32.lib winmm.lib,-lsocket -lnsl)) $(eval $(call SetupJVMTIDemo,minst, agent_util java_crw_demo)) @@ -290,11 +299,11 @@ JPDA_SOURCES:=$(shell $(FIND) $(JDK_TOPDIR)/src/share/classes/com/sun/tools/exam JPDA_FILES:=$(subst $(JDK_TOPDIR)/src/share/classes/,,$(JPDA_SOURCES)) $(JDK_OUTPUTDIR)/newdemo/jpda/src.zip : $(JPDA_SOURCES) - mkdir -p $(@D) + $(MKDIR) -p $(@D) (cd $(JDK_TOPDIR)/src/share/classes && $(ZIP) -qru $@ com -i "com/sun/tools/example/*") $(JDK_OUTPUTDIR)/newdemo/jpda/examples.jar : $(JPDA_SOURCES) - mkdir -p $(@D) + $(MKDIR) -p $(@D) $(RM) $(@D)/_the.sources $(call ListPathsSafely,JPDA_FILES,\n, >> $(@D)/_the.sources) $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ @@ -304,7 +313,7 @@ $(JDK_OUTPUTDIR)/newdemo/jpda/examples.jar : $(JPDA_SOURCES) (cd $(JDK_TOPDIR)/src/share/classes/com/sun/tools/example && $(JAR) uf $@ README) $(JDK_OUTPUTDIR)/newdemo/jpda/com/sun/tools/example/README : $(JDK_TOPDIR)/src/share/classes/com/sun/tools/example/README - mkdir -p $(@D) + $(MKDIR) -p $(@D) $(CP) $< $@ $(CHMOD) -f ug+w $@ @@ -314,12 +323,12 @@ BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jpda/src.zip $(JDK_OUTPUTDIR)/newdemo/jp ################################################################################################## $(JDK_OUTPUTDIR)/newdemo/management/index.html : $(JDK_TOPDIR)/src/share/demo/management/index.html - mkdir -p $(@D) + $(MKDIR) -p $(@D) $(CP) $< $@ $(CHMOD) -f ug+w $@ $(JDK_OUTPUTDIR)/newdemo/jvmti/index.html : $(JDK_TOPDIR)/src/share/demo/jvmti/index.html - mkdir -p $(@D) + $(MKDIR) -p $(@D) $(CP) $< $@ $(CHMOD) -f ug+w $@ @@ -329,24 +338,103 @@ BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/management/index.html \ ################################################################################################## # The netbeans project files are copied into the demo directory. +BUILD_DEMOS += $(patsubst $(JDK_TOPDIR)/src/share/demo/nbproject/%,\ + $(JDK_OUTPUTDIR)/newdemo/nbproject/%,\ + $(shell $(FIND) $(JDK_TOPDIR)/src/share/demo/nbproject/ -type f)) -NETBEANS_DEMO_PROJECTS_FILES=$(shell $(FIND) $(JDK_TOPDIR)/src/share/demo/nbproject -type f) - -$(JDK_OUTPUTDIR)/newdemo/_the.nbproject: $(NETBEANS_DEMO_PROJECTS_FILES) - $(MKDIR) -p $(JDK_OUTPUTDIR)/newdemo - $(RM) -rf $(JDK_OUTPUTDIR)/newdemo/nbproject - echo Copying Netbeans demo projects - (cd $(JDK_TOPDIR)/src/share/demo && cp -r nbproject $(JDK_OUTPUTDIR)/newdemo) - touch $@ +$(JDK_OUTPUTDIR)/newdemo/nbproject/% : $(JDK_TOPDIR)/src/share/demo/nbproject/% + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(CHMOD) -f ug+w $@ ################################################################################################## -$(JDK_OUTPUTDIR)/newdemo/README : $(JDK_TOPDIR)/src/share/demo/README - mkdir -p $(@D) - cp $< $@ +$(JDK_OUTPUTDIR)/newdemo/README: $(JDK_TOPDIR)/src/share/demo/README + $(MKDIR) -p $(@D) + $(CP) $< $@ + +BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/README ################################################################################################## -all: $(BUILD_DEMOS) $(JDK_OUTPUTDIR)/newdemo/_the.nbproject $(JDK_OUTPUTDIR)/newdemo/README +ifeq ($(OPENJDK_TARGET_OS), solaris) + +$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller/% : $(JDK_TOPDIR)/src/solaris/demo/jni/Poller/% + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(CHMOD) -f ug+w $@ + +$(JDK_OUTPUTDIR)/newdemo/jni/Poller/README.txt : $(JDK_TOPDIR)/src/solaris/demo/jni/Poller/README.txt + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(CHMOD) -f ug+w $@ + +$(JDK_OUTPUTDIR)/newdemo/jni/Poller/Poller.jar : \ + $(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller/README.txt $(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller/Poller.c + +$(eval $(call SetupJavaCompilation,BUILD_DEMO_POLLER_JAR,\ + SETUP:=GENERATE_USINGJDKBYTECODE, \ + SRC:=$(JDK_TOPDIR)/src/solaris/demo/jni/Poller, \ + BIN:=$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller, \ + HEADERS:=$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller, \ + JAR:=$(JDK_OUTPUTDIR)/newdemo/jni/Poller/Poller.jar, \ + MANIFEST:=$(JDK_TOPDIR)/make/tools/manifest.mf, \ + SRCZIP:=$(JDK_OUTPUTDIR)/newdemo/jni/Poller/src.zip, \ + COPY := README.txt Poller.c, \ + JARMAIN := Client)) + + + +BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jni/Poller/Poller.jar $(JDK_OUTPUTDIR)/newdemo/jni/Poller/src.zip \ + $(JDK_OUTPUTDIR)/newdemo/jni/Poller/README.txt + +$(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER,\ + SRC:=$(JDK_TOPDIR)/src/solaris/demo/jni/Poller, \ + LANG := C, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + -I$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller, \ + LDFLAGS:=$(LDFLAGS_JDKLIB), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs, \ + LIBRARY:=Poller)) + +# +# We can only compile native code after jar has been build (since we depend on generated .h files) +# +$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller/Poller.o : $(JDK_OUTPUTDIR)/newdemo/jni/Poller/Poller.jar + +$(JDK_OUTPUTDIR)/newdemo/jni/Poller/lib/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX) : \ + $(JDK_OUTPUTDIR)/newdemoobjs/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX) + $(MKDIR) -p $(@D) + $(CP) $< $@ + +BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jni/Poller/lib/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX) + +endif + +################################################################################################## + +ifndef OPENJDK + DB_DEMO_ZIPFILE := $(shell $(FIND) $(JDK_TOPDIR)/src/closed/share/db -name "*demo*.zip") + + $(JDK_OUTPUTDIR)/newdemo/_the.db.unzipped: $(DB_DEMO_ZIPFILE) + $(MKDIR) -p $(@D) + $(RM) -rf $(JDK_OUTPUTDIR)/newdemo/db $(JDK_OUTPUTDIR)/newdemo/demo + $(CD) $(JDK_OUTPUTDIR)/newdemo && $(UNZIP) -o $< + $(MV) $(JDK_OUTPUTDIR)/newdemo/demo $(JDK_OUTPUTDIR)/newdemo/db + $(TOUCH) $@ + +# Copy this after the unzip above to avoid race with directory creation and mv command. + $(JDK_OUTPUTDIR)/newdemo/db/README-JDK-DEMOS.html: \ + $(JDK_TOPDIR)/src/closed/share/db/README-JDK-DEMOS.html \ + | $(JDK_OUTPUTDIR)/newdemo/_the.db.unzipped + $(MKDIR) -p $(@D) + $(CP) '$<' '$@' + BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/_the.db.unzipped $(JDK_OUTPUTDIR)/newdemo/db/README-JDK-DEMOS.html +endif + +################################################################################################## + +all: $(BUILD_DEMOS) .PHONY: all diff --git a/jdk/makefiles/CompileJavaClasses.gmk b/jdk/makefiles/CompileJavaClasses.gmk index 3a0b70a8549..da8f4468fab 100644 --- a/jdk/makefiles/CompileJavaClasses.gmk +++ b/jdk/makefiles/CompileJavaClasses.gmk @@ -32,71 +32,85 @@ include JavaCompilation.gmk # Setup the java compilers for the JDK build. include Setup.gmk -EXCLUDES:= sun/dc \ - sun/security/pkcs11 \ - com/sun/pept \ +JARS := +EXFILES := +EXCLUDES := + +########################################################################################## + +EXCLUDES += com/sun/pept \ com/sun/tools/example/trace\ com/sun/tools/example/debug/bdi\ com/sun/tools/example/debug/event\ com/sun/tools/example/debug/gui \ - javax/crypto \ com/oracle/security +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64) + EXCLUDES += sun/security/pkcs11 +endif + ifdef OPENJDK - EXCLUDES+= com/sun/jmx/snmp \ + EXCLUDES+= sun/dc \ + com/sun/jmx/snmp \ sun/management/snmp \ com/sun/script endif -ifneq ($(PLATFORM),solaris) +ifndef OPENJDK + # There exists two versions of this file... + EXFILES := $(JDK_TOPDIR)/src/share/classes/javax/crypto/JarVerifier.java +endif + +ifneq ($(OPENJDK_TARGET_OS),solaris) # Exclude Solaris nio and two security related files in src/share/classes - EXFILES:=SolarisAclFileAttributeView.java \ + EXFILES += SolarisAclFileAttributeView.java \ SolarisFileStore.java \ SolarisFileSystem.java \ SolarisFileSystemProvider.java \ SolarisNativeDispatcher.java \ SolarisUserDefinedFileAttributeView.java \ SolarisWatchService.java \ - DevPollArrayWrapper.java \ - DevPollSelectorImpl.java \ - DevPollSelectorProvider.java \ - SolarisAsynchronousChannelProvider.java \ - SolarisEventPort.java \ SolarisAclFileAttributeView.java \ - SolarisFileStore.java \ - SolarisFileSystem.java \ - SolarisFileSystemProvider.java \ - SolarisUserDefinedFileAttributeView.java \ - SolarisNativeDispatcher.java \ - SolarisWatchService.java \ SolarisLoginModule.java \ SolarisSystem.java \ + sun/nio/ch/EventPortSelectorImpl.java \ + sun/nio/ch/EventPortSelectorProvider.java \ + sun/nio/ch/EventPortWrapper.java \ sun/tools/attach/SolarisAttachProvider.java \ sun/tools/attach/SolarisVirtualMachine.java endif -# Why? -EXFILES+=WrapperGenerator.java +# In the old build, this isn't excluded on macosx, even though it probably +# should be. +ifneq ($(OPENJDK_TARGET_OS),macosx) + EXFILES+=WrapperGenerator.java +endif -ifneq ($(PLATFORM),windows) +ifneq ($(OPENJDK_TARGET_OS),windows) # Exclude Window security related files in src/share/classes EXFILES+=NTLoginModule.java \ NTSystem.java endif -ifeq ($(PLATFORM),windows) - # Does nio channels exist on Windows? - EXCLUDES+=sun/nio/ch +ifeq ($(OPENJDK_TARGET_OS),windows) + # Don't build GTK L&F on Windows + EXCLUDES+= com/sun/java/swing/plaf/gtk endif -ifneq ($(PLATFORM),linux) - EXCLUDES+=com/sun/java/swing/plaf/gtk +ifneq ($(OPENJDK_TARGET_OS),linux) EXFILES+=sun/tools/attach/LinuxAttachProvider.java \ - sun/tools/attach/LinuxVirtualMachine.java + sun/tools/attach/LinuxVirtualMachine.java \ + sun/nio/fs/LinuxDosFileAttributeView.java \ + sun/nio/fs/LinuxFileStore.java \ + sun/nio/fs/LinuxFileSystem.java \ + sun/nio/fs/LinuxFileSystemProvider.java \ + sun/nio/fs/LinuxNativeDispatcher.java \ + sun/nio/fs/LinuxUserDefinedFileAttributeView.java \ + sun/nio/fs/LinuxWatchService.java endif -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) EXFILES+=sun/nio/fs/BsdFileStore.java \ sun/nio/fs/BsdFileSystem.java \ sun/nio/fs/BsdFileSystemProvider.java \ @@ -105,19 +119,6 @@ ifneq ($(PLATFORM),macosx) sun/tools/attach/BsdVirtualMachine.java endif -# Generated nimbus files that apparently should not be compiled... -EXFILES+=InternalFrameTitlePanePainter.java \ - OptionPaneMessageAreaPainter.java \ - ScrollBarPainter.java \ - SliderPainter.java \ - SpinnerPainter.java \ - SplitPanePainter.java \ - TabbedPanePainter.java - -# New class /java/lang/annotation/ContainerAnnotation.java is not included in old -# build -EXFILES+=java/lang/annotation/ContainerAnnotation.java - # Exclude BreakIterator classes that are just used in compile process to generate # data files and shouldn't go in the product EXFILES+=sun/text/resources/BreakIteratorRules.java \ @@ -130,16 +131,17 @@ endif ifdef OPENJDK EXCLUDES+=sun/java2d/cmm/kcms -else - EXCLUDES+=sun/java2d/cmm/lcms endif -# Not used on windows -ifneq ($(PLATFORM), windows) +# Used on windows and macosx +ifeq (,$(filter $(OPENJDK_TARGET_OS), windows macosx)) EXFILES+=sun/awt/AWTCharset.java endif -# Exclude some generated AWT files that were implicitly not included by the old build. +ifneq ($(OPENJDK_TARGET_OS), macosx) +# +# Not in rt.jar on solaris and linux...(windows not checked) +# in rt.jar on macosx ?? EXFILES+=sun/awt/X11/ScreenFormat.java \ sun/awt/X11/XArc.java \ sun/awt/X11/XChar2b.java \ @@ -182,19 +184,15 @@ EXFILES+=sun/awt/X11/ScreenFormat.java \ sun/awt/X11/XdbeSwapInfo.java \ sun/awt/X11/XmbTextItem.java \ sun/awt/X11/XwcTextItem.java - -# Exclude sun/security files that should go in a separate jar -EXFILES+=sun/security/ec/ECDHKeyAgreement.java \ - sun/security/ec/ECDSASignature.java \ - sun/security/ec/ECKeyPairGenerator.java \ - sun/security/ec/SunEC$1.java \ - sun/security/ec/SunEC.java \ - sun/security/ec/SunECEntries.java +endif # Exclude another implicitly not included file. EXFILES+=sun/util/locale/AsciiUtil.java -ifeq ($(PLATFORM), linux) +ifeq (,$(filter $(OPENJDK_TARGET_OS), solaris macosx)) +# +# only solaris and macosx +# EXFILES+=sun/nio/fs/PollingWatchService.java endif @@ -204,40 +202,204 @@ EXFILES+=-linux-arm.java \ -linux-ppc.java # TODO: Is this necessary? -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) + EXFILES+=sun/nio/ch/AbstractPollSelectorImpl.java \ + sun/nio/ch/DevPollArrayWrapper.java \ + sun/nio/ch/DevPollSelectorImpl.java \ + sun/nio/ch/DevPollSelectorProvider.java \ + sun/nio/ch/InheritedChannel.java \ + sun/nio/ch/PollSelectorProvider.java \ + sun/nio/ch/PollSelectorImpl.java \ + sun/nio/ch/Port.java \ + sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \ + sun/nio/ch/SolarisAsynchronousChannelProvider.java \ + sun/nio/ch/SolarisEventPort.java \ + sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \ + sun/nio/ch/UnixAsynchronousSocketChannelImpl.java EXFILES+=sun/net/sdp/SdpProvider.java else EXFILES+=sun/net/www/protocol/http/ntlm/NTLMAuthSequence.java endif +ifdef DISABLE_NIMBUS + # TODO: need to check when it happens + # Exclude nimus if disabled + EXCLUDES+= javax/swing/plaf/nimbus \ + com/sun/java/swing/plaf/nimbus +else +# +# These are never put into rt.jar +# +EXFILES+= javax/swing/plaf/nimbus/InternalFrameTitlePanePainter.java \ + javax/swing/plaf/nimbus/OptionPaneMessageAreaPainter.java \ + javax/swing/plaf/nimbus/ScrollBarPainter.java \ + javax/swing/plaf/nimbus/SliderPainter.java \ + javax/swing/plaf/nimbus/SpinnerPainter.java \ + javax/swing/plaf/nimbus/SplitPanePainter.java \ + javax/swing/plaf/nimbus/TabbedPanePainter.java +endif + # Acquire a list of files that should be copied straight over to the classes. include CopyIntoClasses.gmk # Now we have COPY_PATTERNS, COPY_FILES and COPY_EXTRA ifndef OPENJDK CLOSED_SRC_DIRS:=$(JDK_TOPDIR)/src/closed/share/classes \ - $(JDK_TOPDIR)/src/closed/$(LEGACY_HOST_OS_API)/classes + $(JDK_TOPDIR)/src/closed/$(LEGACY_OPENJDK_TARGET_OS_API)/classes endif +MACOSX_SRC_DIRS := +ifeq ($(OPENJDK_TARGET_OS),macosx) + MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/classes + + # this files are duplicated in MACOSX_SRC_DIRS + EXFILES+= $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java \ + $(JDK_TOPDIR)/src/solaris/classes/sun/java2d/BackBufferCapsProvider.java \ + $(JDK_TOPDIR)/src/solaris/classes/java/net/DefaultInterface.java \ + $(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java + + # JObjC.jar contains 1.5 byte-code...so skip it here :-( + # MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/native/jobjc/src + # EXCLUDES+= tests/java/com/apple/jobjc + + EXCLUDES+= com/apple/jobjc +endif + +# The exception handling of swing beaninfo +# These resources violates the convention of having code and resources together under +# $(JDK_TOPDIR)/src/.../classes directories +$(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/%.gif: $(JDK_TOPDIR)/make/tools/swing-beans/beaninfo/images/%.gif + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(eval $(call SetupJavaCompilation,BUILD_JDK,\ SETUP:=GENERATE_JDKBYTECODE,\ SRC:=$(JDK_TOPDIR)/src/share/classes \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes \ + $(MACOSX_SRC_DIRS) \ $(JDK_OUTPUTDIR)/gensrc \ + $(JDK_OUTPUTDIR)/gensrc_swing/javax/swing/beaninfo \ $(CLOSED_SRC_DIRS),\ EXCLUDES:=$(EXCLUDES),\ EXCLUDE_FILES:=$(EXFILES),\ - BIN:=$(JDK_OUTPUTDIR)/newclasses,\ + BIN:=$(JDK_OUTPUTDIR)/classes,\ COPY:=$(COPY_PATTERNS),\ COPY_FILES:=$(COPY_FILES),\ - JAR:=$(JDK_OUTPUTDIR)/newrt.jar,\ HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers)) +########################################################################################## +# Special handling of header file generation for classes in the jigsaw base module which +# currently can't add the annotaion GenerateNativeHeaders. For these specific classes the +# java file and the class have the same names which enables shortcutting the dependencies. + +JDK_BASE_HEADER_CLASSES:=java.lang.Integer \ + java.lang.Long \ + java.net.SocketOptions \ + sun.nio.ch.IOStatus + +JDK_BASE_HEADER_JAVA_FILES:=$(patsubst %,$(JDK_TOPDIR)/src/share/classes/%.java,\ + $(subst .,/,$(JDK_BASE_HEADER_CLASSES))) + +ifeq ($(OPENJDK_TARGET_OS),windows) + JDK_BASE_HEADER_CLASSES_WINDOWS:=sun.nio.ch.PollArrayWrapper + JDK_BASE_HEADER_CLASSES+=$(JDK_BASE_HEADER_CLASSES_WINDOWS) + JDK_BASE_HEADER_JAVA_FILES+=$(patsubst %,$(JDK_TOPDIR)/src/windows/classes/%.java,\ + $(subst .,/,$(JDK_BASE_HEADER_CLASSES_WINDOWS))) +endif + +# Set prereqs to the java files since make doesn't know about the class files. Add BUILD_JDK +# as an order only dependency to avoid race with the java compilation. +$(JDK_OUTPUTDIR)/classes/_the.jdk.base.headers: $(JDK_BASE_HEADER_JAVA_FILES) | $(BUILD_JDK) + $(ECHO) Generating headers for jdk base classes + $(JAVAH) -bootclasspath $(JDK_OUTPUTDIR)/classes -d $(JDK_OUTPUTDIR)/gensrc_headers \ + $(JDK_BASE_HEADER_CLASSES) + $(TOUCH) $@ + +########################################################################################## + +# +# This is an empty jar (only contains manifest) and fits poorly into framework... +# create simple rule instead +# +MANAGEMENT_AGENT_JAR_DEPS := $(JDK_TOPDIR)/src/share/classes/sun/management/manifest + +$(JDK_OUTPUTDIR)/lib/management-agent.jar : $(JDK_TOPDIR)/src/share/classes/sun/management/manifest + $(JAR) cfm $@ $(JDK_TOPDIR)/src/share/classes/sun/management/manifest + +JARS += $(JDK_OUTPUTDIR)/lib/management-agent.jar + +########################################################################################## + +ifndef OPENJDK + +$(eval $(call SetupJavaCompilation,BUILD_ALTCLASSES_JAR,\ + SETUP:=GENERATE_JDKBYTECODE,\ + SRC:=$(JDK_TOPDIR)/src/closed/share/altclasses, \ + BIN:=$(JDK_OUTPUTDIR)/altclasses_classes,\ + JAR:=$(JDK_OUTPUTDIR)/lib/alt-rt.jar)) + +$(BUILD_ALTCLASSES_JAR): $(BUILD_JDK) +JARS += $(JDK_OUTPUTDIR)/lib/alt-rt.jar + +endif + +########################################################################################## + +$(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin: + $(MKDIR) -p $(@D) + $(TOUCH) $@ + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS),macosx) +# +# JObjC.jar is compiled with BOOT_JAVAC which (may) not support the "-h" flag. +# so we first compile classes with BOOT_JAVAC and then with JDK_JAVAC :-( +# +$(eval $(call SetupJavaCompiler,GENERATE_15BYTECODE,\ + JAVAC:=$(JAVAC),\ + FLAGS:=-source 1.5 -target 1.5 -g -bootclasspath $(BOOT_RTJAR) -cp $(JDK_OUTPUTDIR)/../langtools/dist/lib/classes.jar $(DISABLE_WARNINGS),\ + SERVER_DIR:=$(JAVAC_SERVERS),\ + SERVER_JVM:=$(SERVER_JAVA),\ + MODE:=$(JAVAC_USE_MODE),\ + USE_DEPS:=$(JAVAC_USE_DEPS))) + +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_JAR,\ + SETUP:=GENERATE_15BYTECODE,\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \ + $(JDK_OUTPUTDIR)/gensrc, \ + INCLUDES := com/apple/jobjc,\ + EXCLUDES := tests/java/com/apple/jobjc,\ + BIN:=$(JDK_OUTPUTDIR)/jobjc_classes,\ + JAR:=$(JDK_OUTPUTDIR)/lib/JObjC.jar, \ + JARINDEX := true)) + +$(BUILD_JOBJC_JAR) : $(BUILD_JDK) + +JARS += $(JDK_OUTPUTDIR)/lib/JObjC.jar + +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_HEADERS_JAR,\ + SETUP:=GENERATE_JDKBYTECODE,\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \ + $(JDK_OUTPUTDIR)/gensrc, \ + INCLUDES := com/apple/jobjc,\ + EXCLUDES := tests/java/com/apple/jobjc,\ + BIN:=$(JDK_OUTPUTDIR)/jobjc_classes_headers,\ + JAR:=$(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar, \ + HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers)) + +$(BUILD_JOBJC_HEADERS_JAR) : $(BUILD_JDK) + +JARS += $(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar + +endif + +########################################################################################## + # copy with -a to preserve timestamps so dependencies down the line aren't messed up -all: $(BUILD_JDK) $(JDK_OUTPUTDIR)/newrt.jar $(COPY_EXTRA) - (cd $(JDK_OUTPUTDIR); \ - $(CP) -rp newclasses/* classes; \ - $(FIND) classes -name "_the.*" $(FIND_DELETE); \ - $(TOUCH) $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin) +all: $(BUILD_JDK) $(JARS) $(COPY_EXTRA) $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin \ + $(JDK_OUTPUTDIR)/classes/_the.jdk.base.headers .PHONY: all diff --git a/jdk/makefiles/CompileLaunchers.gmk b/jdk/makefiles/CompileLaunchers.gmk index 9055747ee8f..2b79e5907d3 100644 --- a/jdk/makefiles/CompileLaunchers.gmk +++ b/jdk/makefiles/CompileLaunchers.gmk @@ -32,65 +32,150 @@ include NativeCompilation.gmk # Setup the java compilers for the JDK build. include Setup.gmk +# Build tools +include Tools.gmk + BUILD_LAUNCHERS= define SetupLauncher # TODO: Fix mapfile on solaris. Won't work with ld as linker. # Parameter 1 is the name of the launcher (java,javac,jar...) - # Parameter 2 are extra CFLAGS - # Parameter 3 are extra LDFLAGS - # Parameter 4 are extra LDFLAGS_SUFFIX_posix - # Parameter 5 are extra LDFLAGS_SUFFIX_winapi + # Parameter 2 is extra CFLAGS + # Parameter 3 is extra LDFLAGS + # Parameter 4 is extra LDFLAGS_SUFFIX_posix + # Parameter 5 is extra LDFLAGS_SUFFIX_winapi + # Parameter 6 is optional Windows JLI library (full path) + # Parameter 7 is optional Windows resource (RC) flags + # Parameter 8 is optional Windows version resource file (.rc) + # Parameter 9 is different output dir + # Parameter 10 is FULL DEBUG SYMBOLS (set value to turn OFF, since most(all) seems to have it) + + $1_WINDOWS_JLI_LIB:=$(JDK_OUTPUTDIR)/objs/libjli/jli.lib + ifneq ($6,) + $1_WINDOWS_JLI_LIB:=$6 + endif + $1_VERSION_INFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc + ifneq ($8,) + $1_VERSION_INFO_RESOURCE:=$8 + endif + + $1_LDFLAGS := $3 + ifeq ($(OPENJDK_TARGET_OS), macosx) + $1_LDFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks + endif + + $1_LDFLAGS_SUFFIX := + ifeq ($(USE_EXTERNAL_LIBZ), true) + $1_LDFLAGS_SUFFIX += -lz + endif + + ifeq ($(OPENJDK_TARGET_OS), macosx) + $1_LDFLAGS_SUFFIX += -Wl,-all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \ + -framework Cocoa -framework Security -framework ApplicationServices \ + -sectcreate __TEXT __info_plist $(JDK_TOPDIR)/src/macosx/lib/Info-cmdline.plist + endif + + + $1_OUTPUT_DIR_ARG:=$9 + ifeq (,$$($1_OUTPUT_DIR_ARG)) + $1_OUTPUT_DIR_ARG:=$(JDK_OUTPUTDIR)/bin + endif + + $1_DEBUG_SYMBOLS:=yes + ifneq (,$(10)) + $1_DEBUG_SYMBOLS:= + endif + + $1_OPTIMIZATION:= LOW + + # TODO: maybe it's better to move this if-statement out of this function + ifeq ($(1),java) + $1_OPTIMIZATION:=HIGH + endif + $(call SetupNativeCompilation,BUILD_LAUNCHER_$1,\ SRC:=$(JDK_TOPDIR)/src/share/bin,\ INCLUDE_FILES:=main.c,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKEXE) $(C_O_FLAG_NORM) \ + OPTIMIZATION :=$$($1_OPTIMIZATION), \ + CFLAGS:=$(CFLAGS_JDKEXE) \ -I$(JDK_TOPDIR)/src/share/bin \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin \ - -I$(JDK_TOPDIR)/src/$(PLATFORM)/bin \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin \ + -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS)/bin \ -DFULL_VERSION='"$(FULL_VERSION)"' \ -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ -DLIBARCHNAME='"$(ARCH)"' \ - -DLAUNCHER_NAME='"openjdk"' \ + -DLAUNCHER_NAME='"java"' \ -DPROGNAME='"$1"' $(DPACKAGEPATH) \ $2,\ CFLAGS_linux:=-fPIC,\ + CFLAGS_solaris:=-KPIC -DHAVE_GETHRTIME,\ LDFLAGS:=$(LDFLAGS_JDKEXE) \ $(call SET_SHARED_LIBRARY_ORIGIN,../lib/$(LIBARCH)/jli) \ $(call SET_SHARED_LIBRARY_ORIGIN,../jre/lib/$(LIBARCH)/jli) \ - $3,\ - LDFLAGS_linux:=$(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/launchers/mapfile-$(ARCH)),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX),\ + $$($1_LDFLAGS),\ + MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/launchers/mapfile-$(ARCH), \ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX),\ LDFLAGS_SUFFIX_posix:=$4 -lc,\ - LDFLAGS_SUFFIX_winapi:=$5,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/$1_objs,\ - EXE:=$(JDK_OUTPUTDIR)/newobjs/$1$(EXE_SUFFIX),\ - VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ + LDFLAGS_SUFFIX_winapi:=$$($1_WINDOWS_JLI_LIB) \ + $(JDK_OUTPUTDIR)/objs/libjava/java.lib advapi32.lib $5,\ + LDFLAGS_SUFFIX_solaris := -lthread $(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/$1_objs,\ + OUTPUT_DIR:=$$($1_OUTPUT_DIR_ARG),\ + PROGRAM:=$1,\ + DEBUG_SYMBOLS:=$$($1_DEBUG_SYMBOLS),\ + VERSIONINFO_RESOURCE:=$$($1_VERSION_INFO_RESOURCE),\ RC_FLAGS:=$(RC_FLAGS)\ /D "JDK_FNAME=$1$(EXE_SUFFIX)" \ /D "JDK_INTERNAL_NAME=$1" \ - /D "JDK_FTYPE=0x1L") + /D "JDK_FTYPE=0x1L" \ + $7,\ + MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/java.manifest) - BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/newobjs/$1$(EXE_SUFFIX) $(JDK_OUTPUTDIR)/bin/$1$(EXE_SUFFIX) + BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1) + + ifeq ($(OPENJDK_TARGET_OS),macosx) + $$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjli_static.a + endif + + ifeq ($(OPENJDK_TARGET_OS),windows) + $$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjava/java.lib \ + $$($1_WINDOWS_JLI_LIB) + endif endef ########################################################################################## -XLIBS:=-lX11 -ifeq ($(PLATFORM),macosx) +XLIBS:=$(X_LIBS) -lX11 +ifeq ($(OPENJDK_TARGET_OS),macosx) DPACKAGEPATH:=-DPACKAGE_PATH='"$(PACKAGE_PATH)"' XLIBS:= endif -$(eval $(call SetupLauncher,java,\ - -DEXPAND_CLASSPATH_WILDCARDS)) +ifdef OPENJDK + JAVA_RC_FLAGS += -i "$(JDK_TOPDIR)/src/windows/resource/icons" +else + JAVA_RC_FLAGS += -i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows" +endif -ifeq ($(PLATFORM),solaris) +$(eval $(call SetupLauncher,java,\ + -DEXPAND_CLASSPATH_WILDCARDS,,,user32.lib comctl32.lib,\ + $(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\ + $(JDK_TOPDIR)/src/windows/resource/java.rc)) + +ifeq ($(OPENJDK_TARGET_OS),windows) + $(eval $(call SetupLauncher,javaw,\ + -DEXPAND_CLASSPATH_WILDCARDS,,,user32.lib comctl32.lib,\ + $(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\ + $(JDK_TOPDIR)/src/windows/resource/java.rc)) +endif + +ifeq ($(OPENJDK_TARGET_OS),solaris) THREAD_LIB:=-lthread endif -ifeq ($(PLATFORM),linux) +ifeq ($(OPENJDK_TARGET_OS),linux) THREAD_LIB:=-lpthread endif @@ -243,7 +328,7 @@ $(eval $(call SetupLauncher,rmiregistry,\ $(eval $(call SetupLauncher,jcmd,\ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jcmd.JCmd"$(COMMA) }')) -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) $(eval $(call SetupLauncher,kinit,\ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.krb5.internal.tools.Kinit"$(COMMA) }')) @@ -257,58 +342,125 @@ endif ########################################################################################## # The order of the object files on the link command line affects the size of the resulting # binary (at least on linux) which causes the size to differ between old and new build. -UNPACKEXE_ZIPOBJS = $(JDK_OUTPUTDIR)/newobjs/libzip/zcrc32$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/deflate$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/trees$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/zadler32$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/compress$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/zutil$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/inflate$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/infback$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/inftrees$(OBJ_SUFFIX) \ - $(JDK_OUTPUTDIR)/newobjs/libzip/inffast$(OBJ_SUFFIX) +ifeq ($(USE_EXTERNAL_LIBZ), true) +UNPACKEXE_CFLAGS := -DSYSTEM_ZLIB +UNPACKEXE_ZIPOBJS := -lz +else +UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 +UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/deflate$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/trees$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/zadler32$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/compress$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/zutil$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/inflate$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/infback$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/inftrees$(OBJ_SUFFIX) \ + $(JDK_OUTPUTDIR)/objs/libzip/inffast$(OBJ_SUFFIX) + +endif + +ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + UNPACKEXE_CFLAGS += -xregs=no%appl +endif $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE,\ SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ EXCLUDE_FILES:=jni.cpp,\ - LANG:=C++,\ - CFLAGS:=$(CXXFLAGS_JDKEXE) $(CXX_O_FLAG_NORM) \ - -DFULL \ - -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ + LANG:=C,\ + OPTIMIZATION := LOW, \ + CFLAGS:=$(UNPACKEXE_CFLAGS) $(CXXFLAGS_JDKEXE)\ + -DFULL, \ CFLAGS_release:=-DPRODUCT,\ CFLAGS_linux:=-fPIC,\ + CFLAGS_solaris := -KPIC, \ + CFLAGS_macosx := -fPIC, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers-unpack200, \ LDFLAGS:=$(LDFLAGS_JDKEXE) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libunpack/mapfile-vers-unpack200) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_SUFFIX:=$(UNPACKEXE_ZIPOBJS) $(LIBCXX),\ LDFLAGS_SUFFIX_solaris:=-lc,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/unpackexe,\ - EXE:=$(JDK_OUTPUTDIR)/newobjs/unpack200$(EXE_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/unpackexe,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/bin,\ + PROGRAM:=unpack200,\ VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ RC_FLAGS:=$(RC_FLAGS)\ /D "JDK_FNAME=unpack200.exe" \ /D "JDK_INTERNAL_NAME=unpack200" \ - /D "JDK_FTYPE=0x1L")) + /D "JDK_FTYPE=0x1L",\ + MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest)) -$(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX): $(UNPACKEXE_ZIPOBJS) +ifneq ($(USE_EXTERNAL_LIBZ), true) -ifeq ($(HOST_OS_API),winapi) - UNPACK_MANIFEST:=$(JDK_OUTPUTDIR)/newobjs/unpackexe/unpack200.exe.manifest - IMVERSIONVALUE=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER) - SED_ALL_MANIFEST=$(SED) -e 's%IMVERSION%$(IMVERSIONVALUE)%g' +$(BUILD_UNPACKEXE) : $(UNPACKEXE_ZIPOBJS) - $(UNPACK_MANIFEST): $(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest - $(CAT) $< | $(SED_ALL_MANIFEST) > $@ - - # Adding a dependency to spec file might be a good idea here, to force rerun on version change. - $(JDK_OUTPUTDIR)/newobjs/unpackexe/unpack200.exe.manifest.mt: $(UNPACK_MANIFEST) - $(MT) /manifest $< /outputresource:$(JDK_OUTPUTDIR)/newobjs/unpack200$(EXE_SUFFIX);#1 - touch $@ - - $(JDK_OUTPUTDIR)/newobjs/unpackexe/unpack200.exe.manifest.mt: $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX) endif -BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX) +BUILD_LAUNCHERS += $(BUILD_UNPACKEXE) + +########################################################################################## + + +BUILD_JEXEC := +BUILD_JEXEC_SRC := +BUILD_JEXEC_INC := +BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH) + +# +# UNHANDLED: +# - COMPILE_APPROACH = normal +# + +# +# jdk/make/java/Makefile +# +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifeq ($(ARCH_DATA_MODEL), 32) + BUILD_JEXEC := 1 + endif +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_JEXEC := 1 +endif # OPENJDK_TARGET_OS + +# +# jdk/make/java/jexec/Makefile +# +ifeq ($(BUILD_JEXEC), 1) + + ifeq ($(OPENJDK_TARGET_OS),windows) + else ifeq ($(OPENJDK_TARGET_OS),macosx) + BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/macosx/bin + else + BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/solaris/bin + endif + + ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib + BUILD_JEXEC_INC += -I$(JDK_TOPDIR)/src/share/bin + endif +endif + +# +# Note that the two Makefile's seems to contradict each other, +# and that src/macosx/bin/jexec.c seems unused +# +ifneq ($(BUILD_JEXEC_SRC),) + $(eval $(call SetupNativeCompilation,BUILD_JEXEC,\ + SRC:=$(BUILD_JEXEC_SRC),\ + INCLUDE_FILES:=jexec.c,\ + LANG:=C,\ + OPTIMIZATION := LOW, \ + CFLAGS:=$(CFLAGS_JDKEXE)\ + $(BUILD_JEXEC_INC), \ + LDFLAGS:=$(LDFLAGS_JDKEXE), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/jexec_obj,\ + OUTPUT_DIR:=$(BUILD_JEXEC_DST_DIR),\ + PROGRAM:=jexec)) + + BUILD_LAUNCHERS += $(BUILD_JEXEC) +endif ########################################################################################## @@ -316,10 +468,10 @@ BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX) # The java-rmi.cgi script in bin/ only gets delivered in certain situations # JAVA_RMI_CGI:=$(JDK_OUTPUTDIR)/bin/java-rmi.cgi -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_LAUNCHERS += $(JAVA_RMI_CGI) endif -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifeq ($(ARCH_DATA_MODEL), 32) BUILD_LAUNCHERS += $(JAVA_RMI_CGI) endif @@ -332,27 +484,26 @@ endif # images bin dir. This weird behavior is mimicked here in the converted makefiles for # now. Should probably just be deleted. # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6512052 -ifeq ($(HOST_OS_API),winapi) +ifeq ($(OPENJDK_TARGET_OS_API),winapi) $(eval $(call SetupLauncher,java-rmi,\ -DEXPAND_CLASSPATH_WILDCARDS,\ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/java/main/java/mapfile-$(ARCH)))) + $(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/makefiles/java/main/java/mapfile-$(ARCH)),\ + ,,,,,$(JDK_OUTPUTDIR)/objs)) - $(JAVA_RMI_CGI): $(JDK_OUTPUTDIR)/newobjs/java-rmi$(EXE_SUFFIX) + $(JAVA_RMI_CGI): $(BUILD_LAUNCHER_java-rmi) + $(MKDIR) -p $(@D) $(CP) $< $@ BUILD_LAUNCHERS += $(JAVA_RMI_CGI) else $(JAVA_RMI_CGI): $(JDK_TOPDIR)/src/solaris/bin/java-rmi.cgi.sh + $(MKDIR) -p $(@D) $(CP) $< $@ $(CHMOD) a+x $@ endif ########################################################################################## -$(JDK_OUTPUTDIR)/bin/% : $(JDK_OUTPUTDIR)/newobjs/% - echo Copying $(@F) - $(CP) $< $@ - $(BUILD_LAUNCHERS) : $(JDK_TOPDIR)/makefiles/CompileLaunchers.gmk all: $(BUILD_LAUNCHERS) diff --git a/jdk/makefiles/CompileNativeLibraries.gmk b/jdk/makefiles/CompileNativeLibraries.gmk index fb97317ee1b..be523544712 100644 --- a/jdk/makefiles/CompileNativeLibraries.gmk +++ b/jdk/makefiles/CompileNativeLibraries.gmk @@ -35,13 +35,16 @@ include Setup.gmk # Copy files (can now depend on $(COPY_FILES)) include CopyFiles.gmk +# Build tools +include Tools.gmk + # Include the javah generated headers. CFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers CXXFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers -# Put the libraries here. Different locations for different host apis. -ifeq ($(HOST_OS_API),posix) - ifneq ($(HOST_OS),macosx) +# Put the libraries here. Different locations for different target apis. +ifeq ($(OPENJDK_TARGET_OS_API),posix) + ifneq ($(OPENJDK_TARGET_OS),macosx) INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib/$(LIBARCH) LIBARCHDIR=$(LIBARCH)/ else @@ -52,298 +55,1098 @@ else INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/bin endif -$(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) : $(JDK_OUTPUTDIR)/newobjs/%$(SHARED_LIBRARY_SUFFIX) - echo Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES= -# TODO: Temporary until awt is converted: -# OBJDIRNAME is the name of the directory where the object code is to -# be placed. It's name depends on whether the data model architecture -# is 32-bit or not. -ifneq ($(ARCH_DATA_MODEL), 32) - OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) +# Absolute paths to lib files on windows for use in LDFLAGS. Should figure out a more +# elegant solution to this. +WIN_VERIFY_LIB := $(JDK_OUTPUTDIR)/objs/libverify/verify.lib +WIN_JAVA_LIB := $(JDK_OUTPUTDIR)/objs/libjava/java.lib +WIN_AWT_LIB := $(JDK_OUTPUTDIR)/objs/libawt/awt.lib + +########################################################################################## + +BUILD_LIBFDLIBM_OPTIMIZATION:=HIGH + +ifneq ($(OPENJDK_TARGET_OS), solaris) + BUILD_LIBFDLIBM_OPTIMIZATION:=NONE +endif + +ifneq ($(OPENJDK_TARGET_OS),macosx) +$(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\ + STATIC_LIBRARY:=fdlibm,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\ + LANG:=C,\ + OPTIMIZATION:=$(BUILD_LIBFDLIBM_OPTIMIZATION), \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\ + CFLAGS_winapi_debug:=-DLOGGING,\ + ARFLAGS:=$(ARFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm)) + +BUILD_LIBRARIES += $(BUILD_LIBFDLIBM) + else - OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) +# +# On macosx they do partial (incremental) linking of fdlibm +# code it here...rather than add support to NativeCompilation +# as this is firt time I see it +$(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\ + LIBRARY:=fdlibm,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\ + SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\ + LANG:=C,\ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\ + LDFLAGS:=-nostdlib -r,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm)) + +$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) : $(BUILD_LIBFDLIBM) + $(CP) -a $< $@ + +BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) endif ########################################################################################## -$(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\ - SRC:=$(JDK_TOPDIR)/src/share/native/java/util/zip,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 \ - -I$(JDK_TOPDIR)/src/share/native/java/io \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/io,\ - CFLAGS_posix:=-DUSE_MMAP,\ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(EXPORT_ZIP_FUNCS) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libzip/mapfile-vers),\ - LDFLAGS_winapi:=-export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \ - -export:ZIP_ReadEntry -export:ZIP_GetNextEntry,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libzip,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX))) +BUILD_LIBVERIFY_SRC:=check_code.c check_format.c -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX) +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBVERIFY_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/reorder-$(ARCH) + endif +endif + + +$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY,\ + LIBRARY:=verify, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/common,\ + INCLUDE_FILES:=$(BUILD_LIBVERIFY_SRC),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_posix:=-ljvm -lc,\ + LDFLAGS_SUFFIX_windows:=jvm.lib,\ + REORDER:=$(BUILD_LIBVERIFY_REORDER),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libverify,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBVERIFY) ########################################################################################## -LIBUNPACK_LIB_FILE := $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) +LIBJAVA_SRC_DIRS:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/lang \ + $(JDK_TOPDIR)/src/share/native/java/lang \ + $(JDK_TOPDIR)/src/share/native/java/lang/ref \ + $(JDK_TOPDIR)/src/share/native/java/lang/reflect \ + $(JDK_TOPDIR)/src/share/native/java/io \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io \ + $(JDK_TOPDIR)/src/share/native/java/nio \ + $(JDK_TOPDIR)/src/share/native/java/security \ + $(JDK_TOPDIR)/src/share/native/common \ + $(JDK_TOPDIR)/src/share/native/sun/misc \ + $(JDK_TOPDIR)/src/share/native/sun/reflect \ + $(JDK_TOPDIR)/src/share/native/java/sql \ + $(JDK_TOPDIR)/src/share/native/java/util \ + $(JDK_TOPDIR)/src/share/native/java/util/concurrent/atomic \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/common \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/util \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/provider \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/io + +# +# TODO +# +ARCHPROPNAME:=$(LIBARCH) +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH), solaris-i586) + ARCHPROPNAME:=x86 +else ifeq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL), windows-32) + ARCHPROPNAME:=x86 +else ifeq ($(OPENJDK_TARGET_OS), macosx) + ARCHPROPNAME:=$(ARCH) +endif + +LIBJAVA_CFLAGS:=$(foreach dir,$(LIBJAVA_SRC_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \ + -DARCHPROPNAME='"$(ARCHPROPNAME)"' + +LIBJAVA_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ + -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ + -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \ + -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"' + +ifneq (,$(JDK_UPDATE_VERSION)) + LIBJAVA_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"' +endif + +LIBJAVA_EXCLUDE_FILES:=check_code.c check_format.c + +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBJAVA_EXCLUDE_FILES += java_props_macosx.c +else + BUILD_LIBJAVA_java_props_md.c_CFLAGS:=-x objective-c +endif + +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBJAVA_EXCLUDE_FILES += \ + UNIXProcess_md.c \ + UnixFileSystem_md.c \ + FileSystemPreferences.c +else + LIBJAVA_EXCLUDE_FILES += \ + ProcessImpl_md.c \ + Win32FileSystem_md.c \ + WinNTFileSystem_md.c \ + dirent_md.c \ + WindowsPreferences.c \ + sun/security/provider/WinCAPISeedGenerator.c \ + sun/io/Win32ErrorMode.c +endif + +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + LIBJAVA_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/reorder-$(ARCH) + endif +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA,\ + LIBRARY:=java,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBJAVA_SRC_DIRS),\ + EXCLUDES:=fdlibm/src zip, \ + EXCLUDE_FILES:=$(LIBJAVA_EXCLUDE_FILES), \ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBJAVA_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_windows:=-export:winFileHandleOpen -export:handleLseek \ + $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) jvm.lib \ + shell32.lib delayimp.lib /DELAYLOAD:shell32.dll \ + advapi32.lib,\ + LDFLAGS_SUFFIX_posix:=-ljvm -lverify, \ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc,\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) $(BUILD_LIBFDLIBM),\ + LDFLAGS_SUFFIX_macosx:=$(BUILD_LIBFDLIBM) \ + -framework CoreFoundation \ + -framework Security -framework SystemConfiguration, \ + REORDER:=$(LIBJAVA_REORDER), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava)) + +BUILD_LIBRARIES += $(BUILD_LIBJAVA) + +$(BUILD_LIBJAVA) : $(LIBJLI_BINARY) + +$(BUILD_LIBJAVA) : $(BUILD_LIBVERIFY) + +$(BUILD_LIBJAVA) : $(BUILD_LIBFDLIBM) + +########################################################################################## + +BUILD_LIBMLIB_SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib +BUILD_LIBMLIB_CFLAGS:=-D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \ + -I$(BUILD_LIBMLIB_SRC) \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt/medialib + +BUILD_LIBMLIB_LDLIBS:= +BUILD_LIBMLIB_IMAGE_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmlib_image/mapfile-vers + +ifneq ($(OPENJDK_TARGET_OS), sparc) +# +# Yes, this will always be true (until someone makes an OS called sparc) +# but this is how it was writtin in old system...keep it like this for now +# + BUILD_LIBMLIB_CFLAGS += -DMLIB_NO_LIBSUNMATH +endif + +ifeq ($(ARCH_DATA_MODEL), 64) + BUILD_LIBMLIB_CFLAGS += -DMLIB_OS64BIT +endif + +ifneq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBMLIB_LDLIBS += $(LIBM) $(LIBDL) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE,\ + LIBRARY:=mlib_image,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBMLIB_SRC),\ + EXCLUDE_FILES:=awt_ImagingLib.c mlib_c_ImageBlendTable.c,\ + LANG:=C,\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBMLIB_CFLAGS),\ + MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(BUILD_LIBMLIB_LDLIBS) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image)) + +$(BUILD_LIBMLIB_IMAGE) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE) + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS),solaris) +ifeq ($(ARCH),sparc) + BUILD_LIBMLIB_IMAGE_V:=1 +else ifeq ($(ARCH), sparcv9) + BUILD_LIBMLIB_IMAGE_V:=1 +endif +endif + +ifeq ($(BUILD_LIBMLIB_IMAGE_V), 1) + +BUILD_LIBMLIB_IMAGE_V_FILES:=\ + mlib_v_ImageLookUp.c \ + mlib_ImageCreate.c \ + mlib_ImageAffine.c \ + mlib_ImageConvMxN.c \ + mlib_ImageConvKernelConvert.c \ + mlib_sys.c \ + mlib_ImageLookUp_64.c \ + mlib_ImageLookUp_Bit.c \ + mlib_ImageColorTrue2Index.c \ + mlib_c_ImageThresh1_U8.c \ + mlib_v_ImageLookUpS16S16Func.c \ + mlib_v_ImageLookUpS16S32Func.c \ + mlib_v_ImageLookUpS16U16Func.c \ + mlib_v_ImageLookUpS16U8Func.c \ + mlib_v_ImageLookUpS32S16Func.c \ + mlib_v_ImageLookUpS32S32Func.c \ + mlib_v_ImageLookUpS32U16Func.c \ + mlib_v_ImageLookUpS32U8Func.c \ + mlib_v_ImageLookUpSIS16S16Func.c \ + mlib_v_ImageLookUpSIS16S32Func.c \ + mlib_v_ImageLookUpSIS16U16Func.c \ + mlib_v_ImageLookUpSIS16U8Func.c \ + mlib_v_ImageLookUpSIS32S16Func.c \ + mlib_v_ImageLookUpSIS32S32Func.c \ + mlib_v_ImageLookUpSIS32U16Func.c \ + mlib_v_ImageLookUpSIS32U8Func.c \ + mlib_v_ImageLookUpSIU16S16Func.c \ + mlib_v_ImageLookUpSIU16S32Func.c \ + mlib_v_ImageLookUpSIU16U16Func.c \ + mlib_v_ImageLookUpSIU16U8Func.c \ + mlib_v_ImageLookUpSIU8S16Func.c \ + mlib_v_ImageLookUpSIU8S32Func.c \ + mlib_v_ImageLookUpSIU8U16Func.c \ + mlib_v_ImageLookUpSIU8U8Func.c \ + mlib_v_ImageLookUpU16S16Func.c \ + mlib_v_ImageLookUpU16S32Func.c \ + mlib_v_ImageLookUpU16U16Func.c \ + mlib_v_ImageLookUpU16U8Func.c \ + mlib_v_ImageLookUpU8S16Func.c \ + mlib_v_ImageLookUpU8S32Func.c \ + mlib_v_ImageLookUpU8U16Func.c \ + mlib_v_ImageLookUpU8U8Func.c \ + mlib_v_ImageAffineIndex_BC.c \ + mlib_v_ImageAffine_BC.c \ + mlib_v_ImageAffine_BC_S16.c \ + mlib_v_ImageAffine_BC_U16.c \ + mlib_v_ImageAffine_BL.c \ + mlib_v_ImageAffine_BL_S16.c \ + mlib_v_ImageAffine_BL_U16.c \ + mlib_v_ImageAffine_NN.c \ + mlib_v_ImageFilters.c \ + mlib_ImageAffineEdge.c \ + mlib_ImageAffine_BC_D64.c \ + mlib_ImageAffine_BC_F32.c \ + mlib_ImageAffine_BC_S32.c \ + mlib_ImageAffine_BL_D64.c \ + mlib_ImageAffine_BL_F32.c \ + mlib_ImageAffine_BL_S32.c \ + mlib_ImageAffine_NN.c \ + mlib_ImageAffine_NN_Bit.c \ + mlib_ImageFilters.c \ + mlib_ImageScanPoly.c \ + mlib_ImageConv_8nw.c \ + mlib_ImageConv_8ext.c \ + mlib_ImageConv_16nw.c \ + mlib_ImageConv_16ext.c \ + mlib_ImageConv_u16nw.c \ + mlib_ImageConv_u16ext.c \ + mlib_ImageConv_32nw.c \ + mlib_ImageConv_F32nw.c \ + mlib_ImageConvMxN_Fp.c \ + mlib_ImageConvMxN_ext.c \ + mlib_ImageConv_D64nw.c \ + mlib_ImageClipping.c \ + mlib_ImageConvCopyEdge_Bit.c \ + mlib_ImageConvClearEdge_Bit.c \ + mlib_ImageConv2x2_f.c \ + mlib_ImageConvClearEdge_Fp.c \ + mlib_v_ImageConvMxN_8.c \ + mlib_v_ImageConvClearEdge.c \ + mlib_v_ImageConvCopyEdge.c \ + mlib_v_ImageConvMxN_8ext.c \ + mlib_v_ImageConvVersion.c \ + mlib_v_ImageConv_8nw.c \ + mlib_ImageConvCopyEdge_Fp.c \ + mlib_v_ImageChannelInsert_1.c \ + mlib_v_ImageChannelExtract_43.c \ + mlib_v_ImageChannelExtract_1.c \ + mlib_ImageCopy_Bit.c \ + mlib_v_ImageCopy_f.c \ + mlib_ImageUtils.c \ + mlib_ImageDivTables.c + +BUILD_LIBMLIB_V_CFLAGS := $(filter-out -DMLIB_NO_LIBSUNMATH,$(BUILD_LIBMLIB_CFLAGS)) + +$(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE_V,\ + LIBRARY:=mlib_image_v, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib,\ + LANG:=C,\ + INCLUDE_FILES:=$(BUILD_LIBMLIB_IMAGE_V_FILES),\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=-xarch=sparcvis \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il\ + $(BUILD_LIBMLIB_V_CFLAGS) \ + $(CFLAGS_JDKLIB), \ + MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(BUILD_LIBMLIB_LDLIBS) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v)) + +BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE_V) + +endif + +########################################################################################## + +LIBAWT_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/sun/awt \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image/gif \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + $(JDK_TOPDIR)/src/share/native/sun/awt/shell \ + $(JDK_TOPDIR)/src/share/native/sun/awt/medialib \ + $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ + $(JDK_TOPDIR)/src/share/native/sun/java2d \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/x11 \ + $(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/windows \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/d3d + + +LIBAWT_CFLAGS:=-D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \ + $(X_CFLAGS) \ + $(foreach dir,$(LIBAWT_DIRS),-I$(dir)) + +LIBAWT_FILES:=\ + gifdecoder.c \ + imageInitIDs.c \ + img_globals.c \ + SurfaceData.c \ + Region.c \ + BufImgSurfaceData.c \ + Disposer.c \ + Trace.c \ + GraphicsPrimitiveMgr.c \ + Blit.c \ + BlitBg.c \ + ScaledBlit.c \ + FillRect.c \ + FillSpans.c \ + FillParallelogram.c \ + DrawParallelogram.c \ + DrawLine.c \ + DrawRect.c \ + DrawPolygons.c \ + DrawPath.c \ + FillPath.c \ + ProcessPath.c \ + MaskBlit.c \ + MaskFill.c \ + TransformHelper.c \ + AlphaMath.c \ + AlphaMacros.c \ + AnyByte.c \ + ByteBinary1Bit.c \ + ByteBinary2Bit.c \ + ByteBinary4Bit.c \ + ByteIndexed.c \ + ByteGray.c \ + Index8Gray.c \ + Index12Gray.c \ + AnyShort.c \ + Ushort555Rgb.c \ + Ushort565Rgb.c \ + Ushort4444Argb.c \ + Ushort555Rgbx.c \ + UshortGray.c \ + UshortIndexed.c \ + Any3Byte.c \ + ThreeByteBgr.c \ + AnyInt.c \ + IntArgb.c \ + IntArgbPre.c \ + IntArgbBm.c \ + IntRgb.c \ + IntBgr.c \ + IntRgbx.c \ + Any4Byte.c \ + FourByteAbgr.c \ + FourByteAbgrPre.c \ + BufferedMaskBlit.c \ + BufferedRenderPipe.c \ + ShapeSpanIterator.c \ + SpanClipRenderer.c \ + awt_ImageRep.c \ + awt_ImagingLib.c \ + awt_Mlib.c \ + awt_parseImage.c \ + DataBufferNative.c \ + dither.c \ + debug_assert.c \ + debug_mem.c \ + debug_trace.c \ + debug_util.c + +ifneq (,$(filter $(OPENJDK_TARGET_OS), solaris linux macosx)) + LIBAWT_FILES += awt_LoadLibrary.c initIDs.c img_colors.c +endif + +ifeq ($(OPENJDK_TARGET_OS),macosx) + LIBAWT_DIRS += $(JDK_TOPDIR)/src/macosx/native/com/apple/resources + LIBAWT_FILES += awt_LoadLibrary.c MacOSXResourceBundle.m + LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks + + LIBAWT_MacOSXResourceBundle.m_CFLAGS:=-O0 +endif + +ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc) + LIBAWT_CFLAGS += -DMLIB_ADD_SUFF + LIBAWT_CFLAGS += -xarch=sparcvis + LIBAWT_CFLAGS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il + LIBAWT_CFLAGS += \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/medialib \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops + + LIBAWT_DIRS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops + + LIBAWT_FILES += \ + vis_FuncArray.c \ + java2d_Mlib.c \ + mlib_ImageCreate.c \ + mlib_ImageZoom_NN.c \ + mlib_ImageCopy_Bit.c \ + mlib_sys.c \ + mlib_v_ImageClear.c \ + mlib_v_ImageClear_f.c \ + mlib_v_ImageConstXor.c \ + mlib_v_ImageCopy.c \ + mlib_v_ImageCopy_f.c \ + mlib_v_ImageXor.c \ + mlib_v_ImageZoom_NN_f.c \ + vis_Interp.c \ + vis_AlphaMacros.c \ + vis_AlphaMaskBlit.c \ + vis_AlphaMaskFill.c \ + vis_ByteGray.c \ + vis_ByteGray_FromRgb.c \ + vis_ByteGray_Mask.c \ + vis_ByteIndexed.c \ + vis_DrawLine.c \ + vis_FourByteAbgr.c \ + vis_IntArgb.c \ + vis_IntArgbPre.c \ + vis_IntArgbPre_Mask.c \ + vis_IntBgr.c \ + vis_IntRgb.c \ + vis_IntRgbx.c \ + vis_SrcMaskFill.c \ + vis_SrcOverMaskBlit.c \ + vis_SrcOverMaskFill.c \ + vis_FourByteAbgrPre.c \ + vis_GlyphList.c \ + vis_GlyphListXor.c \ + vis_IntArgbBm.c \ + vis_ThreeByteBgr.c \ + vis_UshortGray.c \ + vis_UshortGray_FromRgb.c \ + vis_XorBlit.c \ + mlib_v_ImageCopy_blk.s + + ifeq ($(OPENJDK_TARGET_CPU_BITS),64) + LIBAWT_ASFLAGS=-P -xarch=v9a + else + LIBAWT_ASFLAGS=-P -xarch=v8plusa + endif +else + LIBAWT_FILES += MapAccelFunc.c +endif + +ifneq ($(OPENJDK_TARGET_OS),solaris) + LIBAWT_CFLAGS += -DMLIB_NO_LIBSUNMATH +endif + +LIBAWT_LANG:=C + +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBAWT_FILES += AccelGlyphCache.c \ + ShaderList.c \ + CmdIDList.cpp \ + Hashtable.cpp \ + GDIHashtable.cpp \ + Devices.cpp \ + ObjectList.cpp \ + GDIBlitLoops.cpp \ + GDIRenderer.cpp \ + GDIWindowSurfaceData.cpp \ + WindowsFlags.cpp \ + WPrinterJob.cpp \ + awt_%.cpp \ + D3DBlitLoops.cpp \ + D3DBufImgOps.cpp \ + D3DContext.cpp \ + D3DGlyphCache.cpp \ + D3DGraphicsDevice.cpp \ + D3DMaskBlit.cpp \ + D3DMaskCache.cpp \ + D3DMaskFill.cpp \ + D3DPipelineManager.cpp \ + D3DPaints.cpp \ + D3DRenderer.cpp \ + D3DRenderQueue.cpp \ + D3DResourceManager.cpp \ + D3DSurfaceData.cpp \ + D3DTextRenderer.cpp \ + D3DVertexCacher.cpp \ + ShellFolder2.cpp \ + ThemeReader.cpp \ + ComCtl32Util.cpp \ + DllUtil.cpp \ + initIDs.cpp \ + MouseInfo.cpp \ + rect.c + LIBAWT_LANG:=C++ + LIBAWT_CFLAGS += $(GX_OPTION) -DUNICODE -D_UNICODE + ifeq ($(ARCH_DATA_MODEL), 64) + LIBAWT_CFLAGS += -DMLIB_OS64BIT + endif + + ifdef OPENJDK + LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/windows/resource/icons" + else + LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows" + endif + LIBAWT_VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/native/sun/windows/awt.rc +endif + +ifeq ($(MILESTONE), internal) + LIBAWT_CFLAGS += -DINTERNAL_BUILD +endif + +LIBAWT_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt/mapfile-vers +ifeq ($(OPENJDK_TARGET_OS),linux) + LIBAWT_MAPFILE:= +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT,\ + LIBRARY:=awt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_DIRS),\ + INCLUDE_FILES:=$(LIBAWT_FILES),\ + LANG:=$(LIBAWT_LANG),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_CFLAGS),\ + ASFLAGS:=$(LIBAWT_ASFLAGS),\ + MAPFILE:=$(LIBAWT_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=advapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ + imm32.lib ole32.lib uuid.lib shell32.lib \ + comdlg32.lib winmm.lib comctl32.lib \ + shlwapi.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib \ + /DELAYLOAD:user32.dll /DELAYLOAD:gdi32.dll \ + /DELAYLOAD:shell32.dll /DELAYLOAD:winmm.dll \ + /DELAYLOAD:winspool.drv /DELAYLOAD:imm32.dll \ + /DELAYLOAD:ole32.dll /DELAYLOAD:comdlg32.dll \ + /DELAYLOAD:comctl32.dll /DELAYLOAD:shlwapi.dll,\ + LDFLAGS_macosx:=-lmlib_image \ + -framework Cocoa \ + -framework OpenGL \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -framework JavaRuntimeSupport \ + -framework ApplicationServices \ + -framework AudioToolbox,\ + LDFLAGS_solaris:=-R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR),\ + LDFLAGS_SUFFIX_posix:=-ljvm $(LIBM) -ljava $(LIBDL),\ + VERSIONINFO_RESOURCE:=$(LIBAWT_VERSIONINFO_RESOURCE),\ + RC_FLAGS:=$(RC_FLAGS) $(LIBAWT_RC_FLAGS) \ + /D "JDK_FNAME=awt.dll" \ + /D "JDK_INTERNAL_NAME=awt" \ + /D "JDK_FTYPE=0x2L",\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt)) + +$(BUILD_LIBAWT) : $(BUILD_LIBJAVA) + +ifeq ($(OPENJDK_TARGET_OS), macosx) +$(BUILD_LIBAWT) : $(BUILD_LIBMLIB_IMAGE) +endif + +BUILD_LIBRARIES += $(BUILD_LIBAWT) + +########################################################################################## + +# TODO!! +# Even though this variable as a general name, it is +# only used on macos, in fontpath.c, as prefix for where to find fonts. +# +# It's used for libawt_headless _and_ libawt_xawt +# +X11_PATH:=/usr/X11R6 + +ifneq ($(OPENJDK_TARGET_OS), windows) +ifndef BUILD_HEADLESS_ONLY + +LIBAWT_XAWT_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ + $(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/x11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/xawt \ + +LIBAWT_XAWT_CFLAGS:=-DXAWT -DXAWT_HACK \ + -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ + $(CUPS_CFLAGS) \ + $(foreach dir,$(LIBAWT_XAWT_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/jdga + +ifeq ($(OPENJDK_TARGET_OS),solaris) + LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15 +endif + +ifeq ($(MILESTONE),internal) + LIBAWT_XAWT_CFLAGS += -DINTERNAL_BUILD +endif + +LIBAWT_XAWT_FILES:=\ + XlibWrapper.c \ + XWindow.c \ + XToolkit.c \ + X11Color.c \ + X11SurfaceData.c \ + awt_GraphicsEnv.c \ + awt_InputMethod.c \ + robot_common.c \ + awt_Robot.c \ + list.c \ + multiVis.c \ + initIDs.c \ + awt_util.c \ + awt_Desktop.c \ + awt_UNIXToolkit.c \ + X11FontScaler_md.c \ + X11TextRenderer_md.c \ + fontpath.c \ + awt_Insets.c \ + awt_Event.c \ + X11Renderer.c \ + X11PMBlitLoops.c \ + OGLBlitLoops.c \ + OGLBufImgOps.c \ + OGLContext.c \ + OGLFuncs.c \ + OGLMaskBlit.c \ + OGLMaskFill.c \ + OGLPaints.c \ + OGLRenderQueue.c \ + OGLRenderer.c \ + OGLSurfaceData.c \ + OGLTextRenderer.c \ + OGLVertexCache.c \ + GLXGraphicsConfig.c \ + GLXSurfaceData.c \ + AccelGlyphCache.c \ + awt_Font.c \ + multi_font.c \ + awt_AWTEvent.c \ + awt_DrawingSurface.c \ + jawt.c \ + CUPSfuncs.c \ + debug_assert.c \ + debug_mem.c \ + debug_trace.c \ + debug_util.c \ + awt_Plugin.c \ + gtk2_interface.c \ + swing_GTKEngine.c \ + swing_GTKStyle.c \ + rect.c \ + sun_awt_X11_GtkFileDialogPeer.c \ + XRSurfaceData.c \ + XRBackendNative.c + +LIBAWT_XAWT_LDFLAGS_SUFFIX:=$(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm -lc + +ifeq ($(OPENJDK_TARGET_OS), linux) + LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT,\ + LIBRARY:=awt_xawt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_XAWT_DIRS),\ + INCLUDE_FILES:=$(LIBAWT_XAWT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_XAWT_CFLAGS) \ + $(X_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_xawt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN) \ + $(X_LIBS),\ + LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_HOME)/lib$(ISA_DIR) \ + -R$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -R$(OPENWIN_HOME)/lib$(ISA_DIR) \ + -R/usr/dt/lib$(ISA_DIR),\ + LDFLAGS_SUFFIX:=$(LIBAWT_XAWT_LDFLAGS_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_xawt)) + +$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBJAVA) + +$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBAWT) + +BUILD_LIBRARIES += $(BUILD_LIBAWT_XAWT) + +endif +endif + +########################################################################################## + +BUILD_LIBZIP_FILES:=\ + CRC32.c \ + Adler32.c \ + Deflater.c \ + Inflater.c \ + ZipFile.c \ + zip_util.c + +ifeq ($(USE_EXTERNAL_LIBZ),true) + LIBZ:=-lz +else +BUILD_LIBZIP_FILES += \ + compress.c \ + deflate.c \ + gzclose.c \ + gzlib.c \ + gzread.c \ + gzwrite.c \ + infback.c \ + inffast.c \ + inflate.c \ + inftrees.c \ + trees.c \ + uncompr.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +LIBZ_INCLUDE:=-I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 +endif + +BUILD_LIBZIP_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBZIP_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libzip/reorder-$(ARCH) + endif +endif + +ifeq ($(LIBZIP_CAN_USE_MMAP), true) + BUILD_LIBZIP_MMAP:=-DUSE_MMAP +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\ + LIBRARY:=zip,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/java/util/zip \ + $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ + INCLUDE_FILES:=$(BUILD_LIBZIP_FILES), \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBZ_INCLUDE) \ + -I$(JDK_TOPDIR)/src/share/native/java/io \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io,\ + CFLAGS_posix:=$(BUILD_LIBZIP_MMAP) -UDEBUG,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libzip/mapfile-vers, \ + REORDER:=$(BUILD_LIBZIP_REORDER), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(EXPORT_ZIP_FUNCS), \ + LDFLAGS_winapi:=-export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \ + -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \ + $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBZ),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libzip)) + +$(BUILD_LIBZIP) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBZIP) + +########################################################################################## $(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK,\ + LIBRARY:=unpack, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ EXCLUDE_FILES:=main.cpp,\ LANG:=C++,\ - CFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CXXFLAGS_JDKLIB) \ -DNO_ZLIB -DUNPACK_JNI -DFULL,\ CFLAGS_release:=-DPRODUCT,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libunpack/mapfile-vers) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_winapi:=-map:$(JDK_OUTPUTDIR)/newobjs/unpack.map /debug,\ + LDFLAGS_winapi:=-map:$(JDK_OUTPUTDIR)/objs/unpack.map /debug \ + jvm.lib $(WIN_JAVA_LIB),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ LDFLAGS_SUFFIX_posix:=$(LIBCXX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libunpack,\ - LIB:=$(LIBUNPACK_LIB_FILE),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libunpack,\ VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ RC_FLAGS:=$(RC_FLAGS)\ /D "JDK_FNAME=unpack.dll" \ /D "JDK_INTERNAL_NAME=unpack" \ /D "JDK_FTYPE=0x2L")) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBUNPACK) : $(BUILD_LIBJAVA) -ifeq ($(HOST_OS_API),winapi) - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(LIBUNPACK_LIB_FILE) - echo Copying $(@F) +BUILD_LIBRARIES += $(BUILD_LIBUNPACK) + +ifeq ($(OPENJDK_TARGET_OS_API),winapi) + $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(BUILD_LIBUNPACK) + $(ECHO) Copying $(@F) $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.map,$<) $@ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(LIBUNPACK_LIB_FILE) - echo Copying $(@F) + $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(BUILD_LIBUNPACK) + $(ECHO) Copying $(@F) $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.pdb,$<) $@ endif ########################################################################################## -$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY,\ - SRC:=$(JDK_TOPDIR)/src/share/native/common,\ - EXCLUDE_FILES:=check_version.c jdk_util.c jio.c jni_util.c verify_stub.c,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) ${C_O_FLAG_HI} $(SHARED_LIBRARY_FLAGS), \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libverify/mapfile-vers),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libverify,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -$(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\ - SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) ${C_O_FLAG_NONE}\ - -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\ - CFLAGS_winapi_debug:=-DLOGGING,\ - ARFLAGS:=$(ARFLAGS),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libfdlibm,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) - -########################################################################################## - LIBATTACH_EXCLUDE_FILES:= -ifneq ($(PLATFORM),solaris) +ifneq ($(OPENJDK_TARGET_OS),solaris) LIBATTACH_EXCLUDE_FILES+=SolarisVirtualMachine.c endif -ifneq ($(PLATFORM),linux) +ifneq ($(OPENJDK_TARGET_OS),linux) LIBATTACH_EXCLUDE_FILES+=LinuxVirtualMachine.c endif -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) LIBATTACH_EXCLUDE_FILES+=BsdVirtualMachine.c endif $(eval $(call SetupNativeCompilation,BUILD_LIBATTACH,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/tools/attach,\ + LIBRARY:=attach, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/tools/attach,\ EXCLUDE_FILES:=$(LIBATTACH_EXCLUDE_FILES),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libattach/mapfile-$(OPENJDK_TARGET_OS), \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libattach/mapfile-$(PLATFORM)) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_solaris:=-ldoor,\ - LDFLAGS_winapi:=psapi.lib advapi32.lib,\ + LDFLAGS_winapi:=psapi.lib advapi32.lib $(WIN_JAVA_LIB) jvm.lib,\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libattach,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libattach,\ + DEBUG_SYMBOLS:=true)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBATTACH) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBATTACH) ########################################################################################## $(eval $(call SetupNativeCompilation,BUILD_LIBDT_SOCKET,\ + LIBRARY:=dt_socket,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/transport/socket \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/socket,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/socket,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(PLATFORM) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP \ + -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \ -I$(JDK_TOPDIR)/src/share/transport/socket \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/socket \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/socket \ -I$(JDK_TOPDIR)/src/share/back/export \ -I$(JDK_TOPDIR)/src/share/back,\ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libdt_socket/mapfile-vers),\ - LDFLAGS_SUFFIX_linux:=-lpthread,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdt_socket/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB), \ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) -lpthread,\ LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket,\ - LDFLAGS_SUFFIX_winapi:=-export:jdwpTransport_OnLoad ws2_32.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libdt_socket,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_winapi:=$(LDFLAGS_JDKLIB_SUFFIX) -export:jdwpTransport_OnLoad ws2_32.lib,\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_socket,\ + DEBUG_SYMBOLS:=true)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBDT_SOCKET) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBDT_SOCKET) ########################################################################################## -ifeq ($(HOST_OS_API),winapi) +ifeq ($(OPENJDK_TARGET_OS_API),winapi) $(eval $(call SetupNativeCompilation,BUILD_LIBDT_SHMEM,\ - SRC:= $(JDK_TOPDIR)/src/share/native/com/sun/tools/jdi \ + LIBRARY:=dt_shmem,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/tools/jdi \ $(JDK_TOPDIR)/src/share/transport/shmem \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/shmem,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/shmem,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(PLATFORM) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP\ + -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \ -I$(JDK_TOPDIR)/src/share/transport/shmem \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/shmem \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/shmem \ -I$(JDK_TOPDIR)/src/share/back/export, \ LDFLAGS:=$(LDFLAGS_JDKLIB),\ LDFLAGS_winapi:=-export:jdwpTransport_OnLoad,\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libdt_shmem,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)dt_shmem$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_shmem)) - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dt_shmem$(SHARED_LIBRARY_SUFFIX) + BUILD_LIBRARIES += $(BUILD_LIBDT_SHMEM) -endif # PLATFORM +endif # OPENJDK_TARGET_OS ########################################################################################## # JDWP_LOGGING causes log messages to be compiled into the library. These reference the # __FILE__ macro which here expands to the absolute path of the file while the old build # system used a relative path. This causes the binaries to differ in size. $(eval $(call SetupNativeCompilation,BUILD_LIBJDWP,\ - SRC:=$(JDK_TOPDIR)/src/share/back $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/back,\ + LIBRARY:=jdwp, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/back $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/back,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DJDWP_LOGGING $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DJDWP_LOGGING\ -I$(JDK_TOPDIR)/src/share/transport/export \ -I$(JDK_TOPDIR)/src/share/back/export \ -I$(JDK_TOPDIR)/src/share/npt \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt \ -I$(JDK_TOPDIR)/src/share/back \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/back \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/back \ -I$(JDK_OUTPUTDIR)/gensrc_jdwp_headers,\ - LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libjdwp/mapfile-vers),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_linux:=-ldl,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libjdwp,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX))) + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdwp/mapfile-vers, \ + LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)), \ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_solaris:=$(LIBDL),\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjdwp)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJDWP) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJDWP) ########################################################################################## -ifneq ($(PLATFORM),solaris) +LIBJAAS_MAPFILE:= +ifneq ($(OPENJDK_TARGET_OS),solaris) LIBJAAS_EXCLUDE_FILES:=Solaris.c +else + # only on solaris...wonder why + LIBJAAS_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjaas/mapfile-vers +endif + +LIBJAAS_NAME:=jaas_unix +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJAAS_NAME:=jaas_nt endif $(eval $(call SetupNativeCompilation,BUILD_LIBJAAS,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/com/sun/security/auth/module,\ + LIBRARY:=$(LIBJAAS_NAME),\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/security/auth/module,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(LIBJAAS_MAPFILE),\ LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_winapi:=netapi32.lib user32.lib mpr.lib advapi32.lib,\ - LDFLAGS_solaris:=$(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libjaas/mapfile-vers),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX:=,\ EXCLUDE_FILES:=$(LIBJAAS_EXCLUDE_FILES),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libjaas,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjaas)) -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJAAS) : $(BUILD_LIBJAVA) -# Oddly enough, it is called jaas_nt.dll under winapi and libjaas_unix.so under posix. -ifeq ($(PLATFORM),windows) - $(INSTALL_LIBRARIES_HERE)/jaas_nt.dll : $(JDK_OUTPUTDIR)/newobjs/jaas.dll - echo Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/jaas_nt.dll -else - $(INSTALL_LIBRARIES_HERE)/libjaas_unix$(SHARED_LIBRARY_SUFFIX) : $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) - echo Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/libjaas_unix$(SHARED_LIBRARY_SUFFIX) -endif - -########################################################################################## - -ifeq ($(HOST_OS_API),posix) - # TODO make this work on macosx - ifneq ($(HOST_OS),macosx) -# -# NOTE: Change -L flag to point to new lib location after converting libnio. Also -# add dependency on nio from sctp. - $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch/sctp,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch/sctp \ - -I$(JDK_TOPDIR)/src/share/native/java/net \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/net,\ - CFLAGS_linux:=-Werror,\ - LDFLAGS:=$(LDFLAGS_JDKLIB) -L$(JDK_OUTPUTDIR)/lib/$(LIBARCHDIR)\ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libsctp/mapfile-vers) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_linux:=-lpthread,\ - LDFLAGS_SUFFIX_posix:=-ldl -lnio -lnet,\ - LDFLAGS_SUFFIX_solaris:=-lsocket,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - INCLUDE_FILES:=SctpNet.c SctpChannelImpl.c SctpServerChannelImpl.c,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libsctp,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX))) - - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX) - endif -endif +BUILD_LIBRARIES += $(BUILD_LIBJAAS) ########################################################################################## $(eval $(call SetupNativeCompilation,BUILD_LIBJSDT,\ + LIBRARY:=jsdt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace\ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/tracing/dtrace,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/tracing/dtrace,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB)\ -I$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsdt/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libjsdt/mapfile-vers) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) -ldl,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libjsdt,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_winapi:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_macosx:= $(LIBDL),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsdt, \ + DEBUG_SYMBOLS:= yes)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJSDT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJSDT) ########################################################################################## ifdef OPENJDK # TODO: Update awt lib path when awt is converted $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS,\ + LIBRARY:=lcms,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/java2d/cmm/lcms \ $(JDK_TOPDIR)/src/share/native/sun/java2d/,\ INCLUDE_FILES:=cmscam02.c cmscgats.c cmscnvrt.c cmserr.c \ @@ -354,48 +1157,41 @@ ifdef OPENJDK cmstypes.c cmsvirt.c cmswtpnt.c cmsxform.c \ LCMS.c,\ LANG:=C,\ - CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) $(C_O_FLAG_NORM) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) \ $(SHARED_LIBRARY_FLAGS) \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug,\ CFLAGS_solaris:=-xc99=no_lib,\ CFLAGS_winapi:=-DCMS_IS_WINDOWS_,\ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/liblcms/mapfile-vers),\ - LDFLAGS_posix:=-L$(JDK_OUTPUTDIR)/lib/$(LIBARCHDIR)xawt,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/liblcms/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB), \ LDFLAGS_solaris:=/usr/lib$(ISA_DIR)/libm.so.2,\ - LDFLAGS_winapi:=$(JDK_OUTPUTDIR)/tmp/sun/sun.awt/awt/$(OBJDIRNAME)/awt.lib,\ + LDFLAGS_winapi:=$(WIN_AWT_LIB) $(WIN_JAVA_LIB),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ LDFLAGS_SUFFIX_posix:=-lawt,\ LDFLAGS_SUFFIX_linux:=-lm,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/liblcms,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/liblcms)) - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX) + BUILD_LIBRARIES += $(BUILD_LIBLCMS) + + $(BUILD_LIBLCMS) : $(BUILD_LIBAWT) endif ########################################################################################## ifdef OPENJDK - BUILD_LIBJPEG_MAPFILE := makefiles/mapfiles/libjpeg/mapfile-vers + BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers else - BUILD_LIBJPEG_MAPFILE := makefiles/mapfiles/libjpeg/mapfile-vers-closed - BUILD_LIBJPEG_CLOSED_SRC := $(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg - BUILD_LIBJPEG_CLOSED_INCLUDES := -I$(BUILD_LIBJPEG_CLOSED_SRC) + BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers-closed + BUILD_LIBJPEG_CLOSED_SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg + BUILD_LIBJPEG_CLOSED_INCLUDES:=-I$(BUILD_LIBJPEG_CLOSED_SRC) endif -ifeq ($(PLATFORM), solaris) +BUILD_LIBJPEG_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) ifneq ($(ARCH), amd64) - BUILD_LIBJPEG_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/reorder-$(ARCH) - $(JDK_OUTPUTDIR)/newobjs/libjpeg/mapfile-vers : $(JDK_TOPDIR)/$(BUILD_LIBJPEG_MAPFILE) \ - $(BUILD_LIBJPEG_REORDER) - $(MKDIR) -p $(@D) - $(CAT) $(JDK_TOPDIR)/$(BUILD_LIBJPEG_MAPFILE) > $@ - $(SED) -e 's=OUTPUTDIR=$(JDK_OUTPUTDIR)=' $(BUILD_LIBJPEG_REORDER) >> $@ - LIBJPEG_MAPFILE:=$(JDK_OUTPUTDIR)/newobjs/libjpeg/mapfile-vers - - $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX): \ - $(JDK_OUTPUTDIR)/newobjs/libjpeg/mapfile-vers + BUILD_LIBJPEG_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/reorder-$(ARCH) endif endif @@ -406,7 +1202,7 @@ endif # volatile to prevent the optimization. However, this approach does not # work because we have to declare all variables as volatile in result. #ifndef CROSS_COMPILE_ARCH -# CC_43_OR_NEWER := \ +# CC_43_OR_NEWER:=\ # $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \ # \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) ) # ifeq ($(CC_43_OR_NEWER),1) @@ -415,89 +1211,107 @@ endif #endif $(eval $(call SetupNativeCompilation,BUILD_LIBJPEG,\ + LIBRARY:=jpeg, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(BUILD_LIBJPEG_CLOSED_SRC) \ $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(BUILD_LIBJPEG_CLOSED_INCLUDES) \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ - CFLAGS_solaris:=-xF,\ + MAPFILE:=$(BUILD_LIBJPEG_MAPFILE), \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,$(BUILD_LIBJPEG_MAPFILE))\ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_linux:=-ldl,\ + LDFLAGS_linux:=$(LIBDL),\ + LDFLAGS_winapi:=$(WIN_JAVA_LIB) jvm.lib,\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libjpeg,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX))) + REORDER:=$(BUILD_LIBJPEG_REORDER),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjpeg)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJPEG) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJPEG) ########################################################################################## ifndef OPENJDK - FONT_HEADERS := -I$(CLOSED_SRC)/share/native/$(PKGDIR)/t2k - BUILD_LIBFONTMANAGER_MAPFILE := makefiles/mapfiles/libfontmanager/mapfile-vers + FONT_HEADERS:=-I$(CLOSED_SRC)/share/native/$(PKGDIR)/t2k + BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers LIBFONTMANAGER_EXCLUDE_FILES += freetypeScaler.c else - FONT_HEADERS := $(FREETYPE2_CFLAGS) - BUILD_LIBFONTMANAGER_MAPFILE := makefiles/mapfiles/libfontmanager/mapfile-vers.openjdk - BUILD_LIBFONTMANAGER_FONTLIB := $(FREETYPE2_LIBS) + FONT_HEADERS:=$(FREETYPE2_CFLAGS) + BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers.openjdk + BUILD_LIBFONTMANAGER_FONTLIB:=$(FREETYPE2_LIBS) endif -ifeq ($(PLATFORM),windows) +LIBFONTMANAGER_OPTIMIZATION:=HIGH + +ifeq ($(OPENJDK_TARGET_OS),windows) LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \ X11TextRenderer.c + LIBFONTMANAGER_OPTIMIZATION:=LOW else LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \ lcdglyph.c endif -BUILD_LIBFONTMANAGER_CFLAGS_COMMON := $(SHARED_LIBRARY_FLAGS) \ +BUILD_LIBFONTMANAGER_CFLAGS_COMMON:=\ + $(X_CFLAGS) \ -DLE_STANDALONE -DHEADLESS \ $(FONT_HEADERS) \ -I$(JDK_TOPDIR)/src/share/native/sun/font \ -I$(JDK_TOPDIR)/src/share/native/sun/font/layout \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d +# Turn off aliasing with GCC for ExtensionSubtables.cpp +ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_LIBFONTMANAGER_ExtensionSubtables.cpp_CXXFLAGS:=-fno-strict-aliasing +endif + $(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER,\ + LIBRARY:=fontmanager, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/font\ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font,\ EXCLUDE_FILES:=$(LIBFONTMANAGER_EXCLUDE_FILES) \ AccelGlyphCache.c,\ LANG:=C++,\ CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ - CFLAGS_posix:=$(C_O_FLAG_HI),\ - CXXFLAGS_posix:=$(CXX_O_FLAG_HI),\ - CFLAGS_windows=$(C_O_FLAG_NORM)\ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ + OPTIMIZATION:=$(LIBFONTMANAGER_OPTIMIZATION), \ + CFLAGS_windows= -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ -DCC_NOEX, \ + MAPFILE:=$(BUILD_LIBFONTMANAGER_MAPFILE), \ LDFLAGS:=$(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) \ - $(call SET_SHARED_LIBRARY_MAPFILE,$(BUILD_LIBFONTMANAGER_MAPFILE)) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_solaris:=-L$(JDK_OUTPUTDIR)/lib/$(LIBARCHDIR)headless,\ - LDFLAGS_windows:=advapi32.lib user32.lib gdi32.lib $(JDK_OUTPUTDIR)/tmp/sun/sun.awt/awt/$(OBJDIRNAME)/awt.lib,\ + LDFLAGS_windows:=advapi32.lib user32.lib gdi32.lib $(WIN_AWT_LIB) $(WIN_JAVA_LIB),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ $(BUILD_LIBFONTMANAGER_FONTLIB),\ LDFLAGS_SUFFIX_linux:=-lawt $(LIBM) $(LIBCXX),\ LDFLAGS_SUFFIX_solaris:=-lawt -lawt_xawt -lc $(LIBM) $(LIBCXX),\ LDFLAGS_SUFFIX_macosx:=-lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libfontmanager,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfontmanager)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT) + +ifneq (,$(findstring $(OPENJDK_TARGET_OS),solaris macosx)) +$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT_XAWT) +endif + +BUILD_LIBRARIES += $(BUILD_LIBFONTMANAGER) ########################################################################################## ifndef OPENJDK -# ifeq ($(PLATFORM), linux) +# ifeq ($(OPENJDK_TARGET_OS), linux) # ifeq ("$(CC_VER_MAJOR)", "3") # OTHER_LDLIBS += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic # endif @@ -509,97 +1323,1954 @@ ifndef OPENJDK -I$(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ -I$(JDK_TOPDIR)/src/closed/share/native/sun/font \ -I$(JDK_TOPDIR)/src/share/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d $(eval $(call SetupNativeCompilation,BUILD_LIBT2K,\ + LIBRARY:=t2k, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/font \ $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k/ttHints,\ EXCLUDE_FILES:=orion.c,\ LANG:=C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON) $(C_O_FLAG_HI),\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON) $(CXX_O_FLAG_HI),\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\ CFLAGS_windows=-DCC_NOEX, \ CXXFLAGS_windows=-DCC_NOEX, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libt2k/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libt2k/mapfile-vers) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=user32.lib $(JDK_OUTPUTDIR)/newobjs/fontmanager.lib,\ + LDFLAGS_windows:=user32.lib $(JDK_OUTPUTDIR)/objs/libfontmanager/fontmanager.lib,\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_linux:=$(LIBCXX) $(LIBM) -L$(INSTALL_LIBRARIES_HERE) -lfontmanager,\ - LDFLAGS_SUFFIX_solaris:=$(LIBCXX) $(LIBM) -L$(INSTALL_LIBRARIES_HERE) -lfontmanager -lawt \ + LDFLAGS_SUFFIX_macosx:=$(LIBCXX) $(LIBM) -lfontmanager,\ + LDFLAGS_SUFFIX_linux:=$(LIBCXX) $(LIBM) -lfontmanager,\ + LDFLAGS_SUFFIX_solaris:=$(LIBCXX) $(LIBM) -lfontmanager -lawt \ -lawt_xawt,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libt2k,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libt2k)) # t2k is linked against fontmanager - $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX): \ - $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) + $(BUILD_LIBT2K) : $(BUILD_LIBFONTMANAGER) - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX) + BUILD_LIBRARIES += $(BUILD_LIBT2K) endif ########################################################################################## -ifeq ($(PLATFORM), windows) +# +# TODO replace with X_FLAGS / X_LIBS +# and add them to configure +# +OPENWIN_LIB:=$(OPENWIN_HOME)/lib + +ifeq ($(OPENJDK_TARGET_OS), windows) ifeq ($(ARCH_DATA_MODEL), 32) - KERNEL32_LIB := kernel32.lib + KERNEL32_LIB:=kernel32.lib endif $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows,\ + LIBRARY:=jawt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows,\ INCLUDE_FILES:=jawt.cpp,\ LANG:=C++,\ - CFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CXXFLAGS_JDKLIB) \ -EHsc -DUNICODE -D_UNICODE \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/windows, \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/windows, \ LDFLAGS:=$(LDFLAGS_JDKLIB) $(KERNEL32_LIB) \ - advapi32.lib $(JDK_OUTPUTDIR)/tmp/sun/sun.awt/awt/$(OBJDIRNAME)/awt.lib,\ + advapi32.lib $(WIN_AWT_LIB),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libjawt,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt)) -$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): \ - $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) - echo Copying $(@F) - $(CP) $(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) $@ +$(BUILD_LIBJAWT) : $(BUILD_LIBAWT) + +$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): $(BUILD_LIBJAWT) + $(ECHO) Copying $(@F) + $(CP) $< $@ BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) -else # PLATFORM not windows +else # OPENJDK_TARGET_OS not windows + + JAWT_LIBS:= + ifneq ($(OPENJDK_TARGET_OS), solaris) + JAWT_LIBS += -lawt + endif ifndef BUILD_HEADLESS_ONLY - MAWT_AWT_LIB =-lawt_xawt + JAWT_LIBS += -lawt_xawt else - MAWT_AWT_LIB =-lawt_headless + JAWT_LIBS += -lawt_headless HEADLESS_CFLAG += -DHEADLESS endif + JAWT_FILES:=jawt.c + ifeq ($(OPENJDK_TARGET_OS), macosx) + JAWT_FILES:=jawt.m + JAWT_LIBS:=-lawt_lwawt + endif + $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt,\ - INCLUDE_FILES:=jawt.c,\ + LIBRARY:=jawt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/macosx/native/sun/awt,\ + INCLUDE_FILES:=$(JAWT_FILES),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM), \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB), \ CFLAGS_linux:=$(HEADLESS_CFLAG),\ + CFLAGS_macosx:=-I$(JDK_TOPDIR)/src/solaris/native/sun/awt ,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjawt/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_MAPFILE,makefiles/mapfiles/libjawt/mapfile-vers) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_solaris:=-L/usr/openwin/sfw/lib$(ISA_DIR) -L/usr/openwin/lib$(ISA_DIR),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(MAWT_AWT_LIB) -lawt,\ + LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_LIB)$(ISA_DIR),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(JAWT_LIBS),\ LDFLAGS_SUFFIX_solaris:=-lXrender,\ - BIN:=$(JDK_OUTPUTDIR)/newobjs/libjawt,\ - LIB:=$(JDK_OUTPUTDIR)/newobjs/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX))) -endif # PLATFORM + LDFLAGS_SUFFIX_macosx:=-framework Cocoa, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) +ifndef BUILD_HEADLESS_ONLY +$(BUILD_LIBJAWT) : $(BUILD_LIBAWT_XAWT) +else +$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) +endif +ifeq ($(OPENJDK_TARGET_OS),macosx) +$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) +endif + +endif # OPENJDK_TARGET_OS + +BUILD_LIBRARIES += $(BUILD_LIBJAWT) + +########################################################################################## + +ifndef OPENJDK +ifneq ($(OPENJDK_TARGET_OS), macosx) + +LIBJDBCODBC_DIR :=$(JDK_OUTPUTDIR)/objs/libjdbcodbc +LIBJDBCODBC_NAME :=$(LIBRARY_PREFIX)JdbcOdbc$(SHARED_LIBRARY_SUFFIX) +LIBJDBCODBC_CFLAGS:= +LIBJDBCODBC_LIBS := +LIBJDBCODBC_LDFLAGS:= + +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJDBCODBC_LDFLAGS:=$(LDFLAGS_JDKLIB) + LIBJDBCODBC_LIBS += odbc32.lib odbccp32.lib $(WIN_JAVA_LIB) advapi32.lib +else + LIBJDBCODBC_CFLAGS:=-DUNIX + +# +# This mimics "current" build system exactly. Link against fake -lodbcinst -lodbc +# but...those are linked with the -soname, causing the dependency to be dropped on linux (gnu ld) +# but kept with other linker (solaris) +# +# IMO very weird behaviour...very weird +# + LIBJDBCODBC_LDFLAGS:=$(patsubst defs,nodefs,$(LDFLAGS_JDKLIB)) \ + -Xlinker -z -Xlinker nodefs + LIBJDBCODBC_LIBS += -L$(LIBJDBCODBC_DIR) -lodbcinst -lodbc + LIBJDBCODBC_SONAME:=$(call SET_SHARED_LIBRARY_NAME,$(LIBJDBCODBC_NAME)) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJDBCODBC,\ + LIBRARY:=JdbcOdbc,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc,\ + EXCLUDE_FILES:=dummyodbc.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB) \ + $(SHARED_LIBRARY_FLAGS),\ + LDFLAGS:=$(LIBJDBCODBC_LDFLAGS) \ + $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LIBS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(BUILD_LIBJDBCODBC) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJDBCODBC) + +ifneq ($(OPENJDK_TARGET_OS), windows) + +$(eval $(call SetupNativeCompilation,BUILD_FAKEODBCINST,\ + LIBRARY:=odbcinst,\ + OUTPUT_DIR:=$(LIBJDBCODBC_DIR),\ + SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ + INCLUDE_FILES:=dummyodbc1.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(eval $(call SetupNativeCompilation,BUILD_FAKEODBC,\ + LIBRARY:=odbc,\ + OUTPUT_DIR:=$(LIBJDBCODBC_DIR),\ + SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ + INCLUDE_FILES:=dummyodbc2.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB),\ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(BUILD_FAKEODBCINST) $(BUILD_FAKEODBC) : \ + $(BUILD_LIBJAVA) + +$(BUILD_LIBJDBCODBC) : $(BUILD_FAKEODBCINST) $(BUILD_FAKEODBC) + +endif + +endif +endif + +########################################################################################## + +BUILD_LIBINSTRUMENT_SRC :=$(JDK_TOPDIR)/src/share/instrument \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/instrument + +BUILD_LIBINSTRUMENT_FILES :=\ + EncodingSupport.c \ + EncodingSupport_md.c \ + FileSystemSupport_md.c \ + InstrumentationImplNativeMethods.c \ + InvocationAdapter.c \ + JarFacade.c \ + JPLISAgent.c \ + JPLISAssert.c \ + JavaExceptions.c \ + PathCharsValidator.c \ + Reentrancy.c \ + Utilities.c \ + canonicalize_md.c + +BUILD_LIBINSTRUMENT_DIR :=$(JDK_OUTPUTDIR)/objs/libinstrument +BUILD_LIBINSTRUMENT_CFLAGS:=-I$(JDK_TOPDIR)/src/share/instrument \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/instrument \ + -I$(JDK_TOPDIR)/src/share/bin + +BUILD_LIBINSTRUMENT_LDFLAGS:= +BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX:= + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/jli_static.lib $(WIN_JAVA_LIB) \ + -export:Agent_OnAttach + # equivalent of strcasecmp is stricmp on Windows + BUILD_LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp +else ifneq (,$(findstring $(OPENJDK_TARGET_OS), macosx)) + ifneq ($(ARCH), universal) + BUILD_LIBINSTRUMENT_LDFLAGS += -Wl,-all_load + endif + + BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/libjli_static.a + BUILD_LIBINSTRUMENT_LDFLAGS += -liconv + BUILD_LIBINSTRUMENT_LDFLAGS += -framework Cocoa -framework Security -framework ApplicationServices + BUILD_LIBINSTRUMENT_LDFLAGS += $(LIBZ) +else + BUILD_LIBINSTRUMENT_LDFLAGS += -L $(INSTALL_LIBRARIES_HERE)/jli + BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX += -ljli $(LIBDL) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT,\ + LIBRARY:=instrument, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBINSTRUMENT_SRC),\ + INCLUDE_FILES:=$(BUILD_LIBINSTRUMENT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBINSTRUMENT_CFLAGS),\ + CFLAGS_debug:=-DJPLIS_LOGGING,\ + CFLAGS_release:=-DNO_JPLIS_LOGGING,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libinstrument/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN)\ + $(call SET_SHARED_LIBRARY_ORIGIN,jli) \ + $(BUILD_LIBINSTRUMENT_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LIBZ) $(BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX),\ + OBJECT_DIR:=$(BUILD_LIBINSTRUMENT_DIR),\ + DEBUG_SYMBOLS:=true)) + +ifneq (,$(findstring $(OPENJDK_TARGET_OS), macosx windows)) +$(BUILD_LIBINSTRUMENT) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) +else +$(BUILD_LIBINSTRUMENT) : $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) +endif +$(BUILD_LIBINSTRUMENT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBINSTRUMENT) + +########################################################################################## + +BUILD_LIBMANAGEMENT_SRC:=$(JDK_TOPDIR)/src/share/native/sun/management \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/management \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/management + +BUILD_LIBMANAGEMENT_EXCLUDES:= + +BUILD_LIBMANAGEMENT_CFLAGS:=-I$(JDK_TOPDIR)/src/share/native/sun/management + +ifneq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBMANAGEMENT_EXCLUDES += OperatingSystem_md.c +else + BUILD_LIBMANAGEMENT_EXCLUDES += UnixOperatingSystem_md.c +endif + +ifneq ($(OPENJDK_TARGET_OS),solaris) + BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c +endif + +ifneq ($(OPENJDK_TARGET_OS),linux) + BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c +endif + +ifneq ($(OPENJDK_TARGET_OS),macosx) + BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c +endif + + +$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT,\ + LIBRARY:=management,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBMANAGEMENT_SRC),\ + EXCLUDE_FILES:=$(BUILD_LIBMANAGEMENT_EXCLUDES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBMANAGEMENT_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmanagement/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=$(WIN_JAVA_LIB) jvm.lib advapi32.lib psapi.lib,\ + LDFLAGS_solaris:=-lkstat,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmanagement,\ + DEBUG_SYMBOLS:=true)) + +$(BUILD_LIBMANAGEMENT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBMANAGEMENT) + +########################################################################################## + +BUILD_LIBHPROF_SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/hprof $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/demo/jvmti/hprof +BUILD_LIBHPROF_CFLAGS:=-I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt \ + -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo + +BUILD_LIBHPROF_LDFLAGS:= + +ifeq ($(OPENJDK_TARGET_OS),solaris) + BUILD_LIBHPROF_LDFLAGS += -lsocket -lnsl +endif + +ifneq ($(OPENJDK_TARGET_OS),windows) + BUILD_LIBHPROF_LDFLAGS += $(LIBDL) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBHPROF,\ + LIBRARY:=hprof, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBHPROF_SRC),\ + LANG:=C,\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBHPROF_CFLAGS),\ + CFLAGS_debug:=-DHPROF_LOGGING,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libhprof/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=wsock32.lib winmm.lib advapi32.lib,\ + LDFLAGS_SUFFIX:=$(BUILD_LIBHPROF_LDFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libhprof_jvmti,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBHPROF) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA_CRW_DEMO,\ + LIBRARY:=java_crw_demo, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava_crw_demo/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava_crw_demo,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBJAVA_CRW_DEMO) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBNPT,\ + LIBRARY:=npt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnpt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_macosx:=-liconv,\ + LDFLAGS_SUFFIX_windows:=-export:nptInitialize -export:nptTerminate,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnpt,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBNPT) + +########################################################################################## + +LIBNET_SRC_DIRS:=$(JDK_TOPDIR)/src/share/native/java/net \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/dns \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/www/protocol/http/ntlm \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/sdp \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/spi + +LIBNET_CFLAGS:=$(foreach dir,$(LIBNET_SRC_DIRS),-I$(dir)) + +LIBNET_EXCLUDE_FILES:= +ifneq ($(OPENJDK_TARGET_OS),linux) + LIBNET_EXCLUDE_FILES += linux_close.c +endif + +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBNET_EXCLUDE_FILES += bsd_close.c +endif + +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c +else + LIBNET_EXCLUDE_FILES += TwoStacksPlainSocketImpl.c DualStackPlainSocketImpl.c \ + TwoStacksPlainDatagramSocketImpl.c DualStackPlainDatagramSocketImpl.c \ + NTLMAuthSequence.c NetworkInterface_winXP.c +endif + +LIBNET_LDFLAGS_SUFFIX:= + +$(eval $(call SetupNativeCompilation,BUILD_LIBNET,\ + LIBRARY:=net,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBNET_SRC_DIRS),\ + EXCLUDE_FILES:=$(LIBNET_EXCLUDE_FILES), \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBNET_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnet/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBNET_LDFLAGS_SUFFIX),\ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket $(LIBDL) ,\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) -lpthread ,\ + LDFLAGS_SUFFIX_windows:=ws2_32.lib $(JVMLIB) secur32.lib iphlpapi.lib \ + delayimp.lib $(WIN_JAVA_LIB) jvm.lib advapi32.lib \ + /DELAYLOAD:secur32.dll /DELAYLOAD:iphlpapi.dll, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnet)) + +$(BUILD_LIBNET) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBNET) + +$(JDK_OUTPUTDIR)/lib/net.properties: $(JDK_TOPDIR)/src/share/lib/net.properties + $(ECHO) Copying $(@F) + $(MKDIR) -p $(@D) + $(CP) $< $@ + +COPY_FILES += $(JDK_OUTPUTDIR)/lib/net.properties + +ifeq ($(OPENJDK_TARGET_OS), solaris) +$(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template : $(JDK_TOPDIR)/src/${LEGACY_OPENJDK_TARGET_OS_API}/lib/sdp/sdp.conf.template + $(ECHO) Copying $(@F) + $(MKDIR) -p $(@D) + $(CP) $< $@ + +COPY_FILES += $(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template +endif + +########################################################################################## + +BUILD_LIBNIO_SRC:=\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/nio \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs + +BUILD_LIBNIO_CFLAGS:=\ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/share/native/java/io \ + -I$(JDK_TOPDIR)/src/share/native/java/net \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net + +BUILD_LIBNIO_FILES:=\ + DatagramChannelImpl.c \ + DatagramDispatcher.c \ + FileChannelImpl.c \ + FileDispatcherImpl.c \ + FileKey.c \ + IOUtil.c \ + MappedByteBuffer.c \ + Net.c \ + ServerSocketChannelImpl.c \ + SocketChannelImpl.c \ + SocketDispatcher.c + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBNIO_FILES += \ + Iocp.c \ + RegistryFileTypeDetector.c \ + WindowsAsynchronousFileChannelImpl.c \ + WindowsAsynchronousServerSocketChannelImpl.c \ + WindowsAsynchronousSocketChannelImpl.c \ + WindowsNativeDispatcher.c \ + WindowsSelectorImpl.c +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-linux + BUILD_LIBNIO_FILES += \ + EPoll.c \ + EPollArrayWrapper.c \ + EPollPort.c \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + LinuxNativeDispatcher.c \ + LinuxWatchService.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-bsd + BUILD_LIBNIO_SRC += $(JDK_TOPDIR)/src/macosx/native/sun/nio/ch + BUILD_LIBNIO_FILES += \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + BsdNativeDispatcher.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c \ + KQueue.c \ + KQueuePort.c \ + KQueueArrayWrapper.c +endif + +ifeq ($(OPENJDK_TARGET_OS), solaris) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-solaris + BUILD_LIBNIO_FILES += \ + DevPollArrayWrapper.c \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + SolarisEventPort.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + SolarisNativeDispatcher.c \ + SolarisWatchService.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBNIO,\ + LIBRARY:=nio,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBNIO_SRC),\ + INCLUDE_FILES:=$(BUILD_LIBNIO_FILES), \ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBNIO_CFLAGS),\ + MAPFILE:=$(BUILD_LIBNIO_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=-ljava -lnet -lpthread $(LIBDL),\ + LDFLAGS_SUFFIX_solaris:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(JVMLIB) -lsocket -lposix4 $(LIBDL) -lsendfile \ + -ljava -lnet,\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(WIN_JAVA_LIB) $(JDK_OUTPUTDIR)/objs/libnet/net.lib \ + advapi32.lib jvm.lib ws2_32.lib\ + $(JDK_OUTPUTDIR)/objs/libjava/io_util.obj \ + $(JDK_OUTPUTDIR)/objs/libjava/FileDescriptor_md.obj ,\ + LDFLAGS_SUFFIX_macosx:=-ljava -lnet -pthread,\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnio)) + +BUILD_LIBRARIES += $(BUILD_LIBNIO) + +$(BUILD_LIBNIO) : $(BUILD_LIBNET) + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS_API),posix) + # TODO make this work on macosx + ifneq ($(OPENJDK_TARGET_OS),macosx) + + SCTP_WERROR := -Werror + ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc) + SCTP_WERROR := + endif + + $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP,\ + LIBRARY:=sctp,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch/sctp,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB)\ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch/sctp \ + -I$(JDK_TOPDIR)/src/share/native/java/net \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net,\ + CFLAGS_linux:=$(SCTP_WERROR),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsctp/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) -lpthread,\ + LDFLAGS_SUFFIX_posix:=-lnio -lnet,\ + LDFLAGS_SUFFIX_solaris:=-lsocket,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + INCLUDE_FILES:=SctpNet.c SctpChannelImpl.c SctpServerChannelImpl.c,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsctp)) + + BUILD_LIBRARIES += $(BUILD_LIBSCTP) + + $(BUILD_LIBSCTP) : $(BUILD_LIBNIO) + endif +endif + +########################################################################################## + +BUILD_LIBJLI_SRC_DIRS:=$(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin +BUILD_LIBJLI_CFLAGS:=$(foreach dir,$(BUILD_LIBJLI_SRC_DIRS),-I$(dir)) + +BUILD_LIBJLI_FILES:=\ + java.c \ + splashscreen_stubs.c \ + parse_manifest.c \ + version_comp.c \ + wildcard.c \ + jli_util.c + +ifeq ($(JVM_VARIANT_ZERO), true) + ERGO_FAMILY:=zero +else # !ZERO_BUILD + ifneq (,$(findstring $(ARCH), amd64 x86_64)) + ERGO_FAMILY:=i586 + else # !X86 FAMILY + ERGO_FAMILY:=$(ARCH) + endif #ARCH_FAMILY +endif # ZERO_BUILD + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/bin + BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/bin + BUILD_LIBJLI_FILES += java_md_common.c java_md_macosx.c + + BUILD_LIBJLI_java_md_macosx.c_CFLAGS:=-x objective-c + BUILD_LIBJLI_STATIC_java_md_macosx.c_CFLAGS:=-x objective-c +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBJLI_FILES += java_md.c +else ifneq ($(OPENJDK_TARGET_OS), macosx) + + BUILD_LIBJLI_FILES += java_md_common.c + BUILD_LIBJLI_FILES += java_md_solinux.c ergo.c + + ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c + + # if the architecture specific ergo file exists then + # use it, else use the generic definitions from ergo.c + ifneq ($(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/$(ERGO_ARCH_FILE)),) + BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE) + else # !ERGO_ARCH_FILE + BUILD_LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO + endif # ERGO_ARCH_FILE +endif #WINDOWS + +# Names of arch directories +ifneq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(LIBARCH)"' +else + BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(ARCH)"' +endif +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"sparc"' + BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"sparcv9"' + else + BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"i386"' + BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"amd64"' + endif +endif # OPENJDK_TARGET_OS + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" +endif + +ifneq ($(USE_EXTERNAL_LIBZ),true) + BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 + BUILD_LIBJLI_CFLAGS += $(LIBZ_INCLUDE) + BUILD_LIBJLI_FILES += \ + inflate.c \ + inftrees.c \ + inffast.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE) +else + LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE)/jli +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJLI,\ + LIBRARY:=jli,\ + OUTPUT_DIR:=$(LIBJLI_OUTPUT_DIR),\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBJLI_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjli/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LIBZ),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL) -lc,\ + LDFLAGS_SUFFIX_linux:=-lpthread,\ + LDFLAGS_SUFFIX_windows:=\ + -export:JLI_Launch \ + -export:JLI_ManifestIterate \ + -export:JLI_SetTraceLauncher \ + -export:JLI_ReportErrorMessage \ + -export:JLI_ReportErrorMessageSys \ + -export:JLI_ReportMessage \ + -export:JLI_ReportExceptionDescription \ + advapi32.lib \ + comctl32.lib \ + user32.lib,\ + LDFLAGS_SUFFIX_macosx:=-framework Cocoa -framework Security -framework ApplicationServices, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli)) + +BUILD_LIBRARIES += $(BUILD_LIBJLI) + +# On windows, the static library has the same suffix as the import library created by +# with the shared library, so the static library is given a different name. No harm +# in doing it for all platform to reduce complexity. +ifeq ($(OPENJDK_TARGET_OS), windows) + $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ + STATIC_LIBRARY:=jli_static,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(STATIC_LIBRARY_FLAGS) $(BUILD_LIBJLI_CFLAGS),\ + ARFLAGS:=$(ARFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static)) + +BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC) + +else ifeq ($(OPENJDK_TARGET_OS),macosx) + # + # On macosx they do partial (incremental) linking of libjli_static.a + # code it here...rather than add support to NativeCompilation + # as this is first time I see it + $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ + LIBRARY:=jli_static, \ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBJLI_CFLAGS),\ + LDFLAGS:=-nostdlib -r,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static)) + +$(JDK_OUTPUTDIR)/objs/libjli_static.a : $(BUILD_LIBJLI_STATIC) + $(CP) -a $< $@ + +BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a +endif + +########################################################################################## + +ifeq ($(ENABLE_JFR), true) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJFR,\ + LIBRARY:=jfr,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/oracle/jfr,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/closed/share/javavm/export, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjfr/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjfr)) + +BUILD_LIBRARIES += $(BUILD_LIBJFR) + +endif + +########################################################################################## + +ifndef OPENJDK + +BUILD_LIBKCMS_EXCLUDE_FILES:= +ifeq ($(OPENJDK_TARGET_OS),windows) + BUILD_LIBKCMS_EXCLUDE_FILES += ukcpmgr.c unixmem.c +else + BUILD_LIBKCMS_EXCLUDE_FILES += cmmdll.c registry.c spxffile.c sysinfo.c winmem.c wkcpmgr.c +endif + +BUILD_LIBKCMS_FLAGS:=$(CFLAGS_JDKLIB) + +ifeq ($(OPENJDK_TARGET_OS),solaris) + # This particular library uses a feature called PIC_CODE_SMALL (on solaris) + # implement it like this...since it's only used here + BUILD_LIBKCMS_FLAGS:=$(patsubst -KPIC,-Kpic,$(BUILD_LIBKCMS_FLAGS)) +else ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc) + BUILD_LIBKCMS_FLAGS:=$(patsubst -fPIC,-fpic,$(BUILD_LIBKCMS_FLAGS)) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBKCMS,\ + LIBRARY:=kcms,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms,\ + LANG:=C,\ + EXCLUDE_FILES:=$(BUILD_LIBKCMS_EXCLUDE_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(BUILD_LIBKCMS_FLAGS) \ + -DJAVACMM -DFUT_CALC_EX -DNO_FUT_GCONST,\ + CFLAGS_linux:=-Wno-missing-field-initializers,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libkcms/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=-lpthread,\ + LDFLAGS_SUFFIX_windows:=$(WIN_JAVA_LIB) advapi32.lib user32.lib version.lib, \ + LDFLAGS_SUFFIX:=-lm $(LDFLAGS_JDKLIB_SUFFIX),\ + VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms/cmm.rc,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkcms)) + +$(BUILD_LIBKCMS) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBKCMS) + +endif + +########################################################################################## + +ifndef OPENJDK +ifeq ($(OPENJDK_TARGET_OS), solaris) +ifneq ($(ARCH), amd64) + +ifeq ($(shell if test "$(OS_VERSION_MAJOR)" -eq 5 -a "$(OS_VERSION_MINOR)" -le 10; then $(ECHO) ok; fi), ok) + +SUNWJDGA_MAPFILE:= +ifneq (,$(findstring $(ARCH),sparc)) + SUNWJDGA_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdga/mapfile-vers +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBSUNWJDGA, \ + LIBRARY:=sunwjdga,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/solaris/native/sun/jdga, \ + LANG:=C, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/javavm/export \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export \ + -I$(OPENWIN_HOME)/include, \ + MAPFILE:=$(SUNWJDGA_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=-L$(OPENWIN_LIB)$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR) -ldga -lX11 $(LIBDL) -lc, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunwjdga)) + +BUILD_LIBRARIES += $(BUILD_LIBSUNWJDGA) + +endif +endif +endif +endif + +########################################################################################## + +ifeq ($(BUILD_HEADLESS), true) +ifneq ($(OPENJDK_TARGET_OS), windows) + +LIBAWT_HEADLESS_DIRS:=$(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/solaris/native/sun/font \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/x11 + +LIBAWT_HEADLESS_CFLAGS:=-DHEADLESS=true \ + -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ + $(CUPS_CFLAGS) \ + $(X_CFLAGS) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/jdga \ + $(foreach dir,$(LIBAWT_HEADLESS_DIRS),-I$(dir)) + +LIBAWT_HEADLESS_FILES:=\ + awt_Font.c \ + HeadlessToolkit.c \ + fontpath.c \ + VDrawingArea.c \ + X11Color.c \ + X11Renderer.c \ + X11PMBlitLoops.c \ + X11SurfaceData.c \ + X11FontScaler_md.c \ + X11TextRenderer_md.c \ + OGLBlitLoops.c \ + OGLBufImgOps.c \ + OGLContext.c \ + OGLFuncs.c \ + OGLMaskBlit.c \ + OGLMaskFill.c \ + OGLPaints.c \ + OGLRenderQueue.c \ + OGLRenderer.c \ + OGLSurfaceData.c \ + OGLTextRenderer.c \ + OGLVertexCache.c \ + GLXGraphicsConfig.c \ + GLXSurfaceData.c \ + AccelGlyphCache.c \ + CUPSfuncs.c + +LIBAWT_HEADLESS_LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) -lawt -lm + +LIBAWT_HEADLESS_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + LIBAWT_HEADLESS_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/reorder-$(ARCH) + endif +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS,\ + LIBRARY:=awt_headless,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_HEADLESS_DIRS),\ + INCLUDE_FILES:=$(LIBAWT_HEADLESS_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_HEADLESS_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + REORDER:=$(LIBAWT_HEADLESS_REORDER), \ + LDFLAGS_SUFFIX:=$(LIBAWT_HEADLESS_LDFLAGS_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL),\ + LDFLAGS_SUFFIX_macosx:=$(LIBCXX), \ + LDFLAGS_SUFFIX_solaris:=$(LIBCXX), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_headless)) + +$(BUILD_LIBAWT_HEADLESS) : $(BUILD_LIBAWT) + +BUILD_LIBRARIES += $(BUILD_LIBAWT_HEADLESS) + +endif +endif + +########################################################################################## + +ifndef BUILD_HEADLESS_ONLY +LIBSPLASHSCREEN_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/sun/awt/giflib \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \ + $(JDK_TOPDIR)/src/share/native/sun/awt/libpng \ + $(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt/splashscreen + +LIBSPLASHSCREEN_CFLAGS:=-DSPLASHSCREEN -DPNG_NO_MMX_CODE \ + $(foreach dir,$(LIBSPLASHSCREEN_DIRS),-I$(dir)) + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBSPLASHSCREEN_CFLAGS:=-I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \ + $(LIBSPLASHSCREEN_CFLAGS) \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks + LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX + LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp + + LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_gfx_impl.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_gif.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_impl.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_jpeg.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS:=-O0 + +else ifneq ($(OPENJDK_TARGET_OS), windows) + LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions +else + LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32 +endif + +LIBSPLASHSCREEN_FILES:=\ + java_awt_SplashScreen.c \ + splashscreen_gfx_impl.c \ + splashscreen_gif.c \ + splashscreen_impl.c \ + splashscreen_jpeg.c \ + splashscreen_png.c \ + png.c \ + pngerror.c \ + pngget.c \ + pngmem.c \ + pngpread.c \ + pngread.c \ + pngrio.c \ + pngrtran.c \ + pngrutil.c \ + pngset.c \ + pngtrans.c \ + pngwio.c \ + pngwrite.c \ + pngwtran.c \ + pngwutil.c \ + dgif_lib.c \ + gif_err.c \ + gifalloc.c \ + jcomapi.c \ + jdapimin.c \ + jdapistd.c \ + jdcoefct.c \ + jdcolor.c \ + jddctmgr.c \ + jdhuff.c \ + jdinput.c \ + jdmainct.c \ + jdmarker.c \ + jdmaster.c \ + jdmerge.c \ + jdphuff.c \ + jdpostct.c \ + jdsample.c \ + jerror.c \ + jidctflt.c \ + jidctfst.c \ + jidctint.c \ + jidctred.c \ + jmemmgr.c \ + jmemnobs.c \ + jquant1.c \ + jquant2.c \ + jutils.c \ + jcapimin.c \ + jcapistd.c \ + jccoefct.c \ + jccolor.c \ + jcdctmgr.c \ + jchuff.c \ + jcinit.c \ + jcmainct.c \ + jcmarker.c \ + jcmaster.c \ + jcparam.c \ + jcphuff.c \ + jcprepct.c \ + jcsample.c \ + jctrans.c \ + jdtrans.c \ + jfdctflt.c \ + jfdctfst.c \ + jfdctint.c + +ifneq ($(OPENJDK_TARGET_OS), macosx) +LIBSPLASHSCREEN_FILES += splashscreen_sys.c +else +LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen +LIBSPLASHSCREEN_FILES += splashscreen_sys.m +endif + +LIBSPLASHSCREEN_LDFLAGS_SUFFIX:= + +ifneq ($(USE_EXTERNAL_LIBZ),true) + LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 + LIBSPLASHSCREEN_CFLAGS += $(LIBZ_INCLUDE) + LIBSPLASHSCREEN_FILES += \ + compress.c \ + deflate.c \ + gzclose.c \ + gzlib.c \ + gzread.c \ + gzwrite.c \ + infback.c \ + inffast.c \ + inflate.c \ + inftrees.c \ + trees.c \ + uncompr.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += $(LIBM) -lpthread -liconv -losxapp \ + -framework ApplicationServices \ + -framework Foundation \ + -framework Cocoa \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation +else ifneq ($(OPENJDK_TARGET_OS), windows) + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += -L$(OPENWIN_LIB)$(ISA_DIR) -lX11 -lXext $(LIBM) -lpthread +else # OPENJDK_TARGET_OS + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll +endif # OPENJDK_TARGET_OS + +$(eval $(call SetupNativeCompilation,LIBSPLASHSCREEN,\ + LIBRARY:=splashscreen,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBSPLASHSCREEN_DIRS),\ + INCLUDE_FILES:=$(LIBSPLASHSCREEN_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsplashscreen/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LIBDL), \ + LDFLAGS_SUFFIX:=$(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsplashscreen)) + +BUILD_LIBRARIES += $(LIBSPLASHSCREEN) + +ifeq ($(OPENJDK_TARGET_OS),macosx) +$(LIBSPLASHSCREEN) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +endif + +endif + +########################################################################################## + +ifndef OPENJDK + +LIBDCPR_SRC_DIRS:=\ + $(JDK_TOPDIR)/src/closed/share/native/sun/dc/doe \ + $(JDK_TOPDIR)/src/closed/share/native/sun/dc/path \ + $(JDK_TOPDIR)/src/closed/share/native/sun/dc/pr \ + $(JDK_TOPDIR)/src/closed/share/native/sun/dc/util + +LIBDCPR_CFLAGS:=$(foreach dir,$(LIBDCPR_SRC_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe + +$(eval $(call SetupNativeCompilation,BUILD_LIBDCPR,\ + LIBRARY:=dcpr,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBDCPR_SRC_DIRS),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBDCPR_CFLAGS), \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdcpr/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(LIBM)\ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdcpr)) + +$(BUILD_LIBDCPR) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBDCPR) + +endif + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBJ2PCSC,\ + LIBRARY:=j2pcsc,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio,\ + LANG:=C,\ + CFLAGS_posix:=-D__sun_jdk,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio\ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio/MUSCLE,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pcsc/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL), \ + LDFLAGS_SUFFIX_windows:=winscard.lib,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pcsc)) + +BUILD_LIBRARIES += $(BUILD_LIBJ2PCSC) + +########################################################################################## + +ifneq ($(OPENJDK_TARGET_OS), windows) +$(eval $(call SetupNativeCompilation,BUILD_LIBJ2GSS,\ + LIBRARY:=j2gss,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/jgss/wrapper,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/jgss/wrapper,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2gss/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2gss)) + +BUILD_LIBRARIES += $(BUILD_LIBJ2GSS) +endif + +########################################################################################## + +BUILD_LIBKRB5_NAME:= +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBKRB5_NAME:=w2k_lsa_auth + BUILD_LIBKRB5_FILES:=NativeCreds.c WindowsDirectory.c + BUILD_LIBKRB5_SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/krb5 + BUILD_LIBKRB5_LIBS:=Secur32.lib netapi32.lib \ + kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib \ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib \ + odbccp32.lib wsock32.lib +else ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBKRB5_NAME:=osxkrb5 + BUILD_LIBKRB5_FILES:=nativeccache.c + BUILD_LIBKRB5_LIBS:=-framework Kerberos +endif + +ifneq ($(BUILD_LIBKRB5_NAME),) +$(eval $(call SetupNativeCompilation,BUILD_LIBKRB5,\ + LIBRARY:=$(BUILD_LIBKRB5_NAME),\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/krb5 \ + $(BUILD_LIBKRB5_SRC) ,\ + INCLUDE_FILES:=$(BUILD_LIBKRB5_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/krb5 \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/krb5 ,\ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(BUILD_LIBKRB5_LIBS) ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkrb5)) + +BUILD_LIBRARIES += $(BUILD_LIBKRB5) +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), windows) + +$(eval $(call SetupNativeCompilation,BUILD_LIBSUNMSCAPI,\ + LIBRARY:=sunmscapi,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/mscapi \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/mscapi,\ + INCLUDE_FILES:=security.cpp, \ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/mscapi \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/mscapi ,\ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=Crypt32.Lib advapi32.lib,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunmscapi)) + +BUILD_LIBRARIES += $(BUILD_LIBSUNMSCAPI) +endif + +########################################################################################## + +ifneq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL), windows-64) +$(eval $(call SetupNativeCompilation,BUILD_LIBJ2PKCS11,\ + LIBRARY:=j2pkcs11,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11 \ + $(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11/wrapper,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11 \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11/wrapper,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pkcs11/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pkcs11)) + +BUILD_LIBRARIES += $(BUILD_LIBJ2PKCS11) +endif + +########################################################################################## + +ifndef DISABLE_INTREE_EC +# +# TODO Set DISABLE_INTREE_EC in configure if src/share/native/sun/security/ec/impl +# is not present +# +BUILD_LIBSUNEC_FLAGS:= -I$(JDK_TOPDIR)/src/share/native/sun/security/ec \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/ec/impl + +# +# On sol-sparc...all libraries are compiled with -xregs=no%appl +# (set in CFLAGS_REQUIRED_sparc) +# +# except!!! libsunec.so +# +ECC_JNI_SOLSPARC_FILTER:= +ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + ECC_JNI_SOLSPARC_FILTER:=-xregs=no%appl +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBSUNEC,\ + LIBRARY:=sunec,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/ec \ + $(JDK_TOPDIR)/src/share/native/sun/security/ec/impl, \ + LANG:=C++, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CFLAGS_JDKLIB))\ + $(BUILD_LIBSUNEC_FLAGS) \ + -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B,\ + CXXFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CXXFLAGS_JDKLIB)) \ + $(BUILD_LIBSUNEC_FLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsunec/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LIBCXX),\ + LDFLAGS_SUFFIX_solaris:=-lc ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunec)) + +BUILD_LIBRARIES += $(BUILD_LIBSUNEC) +endif + +########################################################################################## + +LIBJSOUND_SRC_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/com/sun/media/sound \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/media/sound + +LIBJSOUND_SRC_FILES:=Utilities.c Platform.c + +LIBJSOUND_LANG:=C +LIBJSOUND_CFLAGS:=$(foreach dir,$(LIBJSOUND_SRC_DIRS),-I$(dir)) + +EXTRA_SOUND_JNI_LIBS:= + +LIBJSOUND_MIDIFILES:=\ + MidiInDevice.c \ + MidiInDeviceProvider.c \ + MidiOutDevice.c \ + MidiOutDeviceProvider.c \ + PlatformMidi.c + +# files needed for ports +LIBJSOUND_PORTFILES:=\ + PortMixerProvider.c \ + PortMixer.c + +# files needed for direct audio +LIBJSOUND_DAUDIOFILES:=\ + DirectAudioDeviceProvider.c \ + DirectAudioDevice.c + +ifeq ($(OPENJDK_TARGET_OS), windows) + EXTRA_SOUND_JNI_LIBS += jsoundds + LIBJSOUND_CFLAGS += -DX_PLATFORM=X_WINDOWS \ + -DUSE_PLATFORM_MIDI_OUT=TRUE \ + -DUSE_PLATFORM_MIDI_IN=TRUE \ + -DUSE_PORTS=TRUE + LIBJSOUND_SRC_FILES += \ + PLATFORM_API_WinOS_MidiIn.cpp \ + PLATFORM_API_WinOS_MidiOut.c \ + PLATFORM_API_WinOS_Util.c \ + PLATFORM_API_WinOS_Ports.c + LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) + LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) +endif # OPENJDK_TARGET_OS windows + +ifeq ($(OPENJDK_TARGET_OS), linux) + EXTRA_SOUND_JNI_LIBS += jsoundalsa + LIBJSOUND_CFLAGS += -DX_PLATFORM=X_LINUX +endif # OPENJDK_TARGET_OS linux + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBJSOUND_LANG:=C++ + LIBJSOUND_CFLAGS += -DX_PLATFORM=X_MACOSX \ + -DUSE_PORTS=TRUE \ + -DUSE_DAUDIO=TRUE \ + -DUSE_PLATFORM_MIDI_OUT=TRUE \ + -DUSE_PLATFORM_MIDI_IN=TRUE + LIBJSOUND_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/native/com/sun/media/sound + LIBJSOUND_SRC_FILES += \ + PLATFORM_API_MacOSX_Utils.cpp \ + PLATFORM_API_MacOSX_PCM.cpp \ + PLATFORM_API_MacOSX_Ports.cpp \ + PLATFORM_API_MacOSX_MidiIn.c \ + PLATFORM_API_MacOSX_MidiOut.c \ + PLATFORM_API_MacOSX_MidiUtils.c + LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) + LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) + LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES) +endif # OPENJDK_TARGET_OS macosx + +ifeq ($(OPENJDK_TARGET_OS), solaris) + LIBJSOUND_CFLAGS += -DX_PLATFORM=X_SOLARIS \ + -DUSE_PORTS=TRUE \ + -DUSE_DAUDIO=TRUE + LIBJSOUND_SRC_FILES += \ + PLATFORM_API_SolarisOS_Utils.c \ + PLATFORM_API_SolarisOS_Ports.c \ + PLATFORM_API_SolarisOS_PCM.c + LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) + LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) + LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES) +endif # OPENJDK_TARGET_OS solaris + + +ifeq ($(JVM_VARIANT_ZERO), true) + LIBJSOUND_CFLAGS += -DX_ARCH=X_ZERO +else + ifeq ($(ARCH), i586) + LIBJSOUND_CFLAGS += -DX_ARCH=X_I586 + endif # ARCH i586 + + ifeq ($(ARCH), sparc) + LIBJSOUND_CFLAGS += -DX_ARCH=X_SPARC + endif # ARCH sparc + + ifeq ($(ARCH), sparcv9) + LIBJSOUND_CFLAGS += -DX_ARCH=X_SPARCV9 + endif # ARCH sparcv9 + + ifeq ($(ARCH), amd64) + LIBJSOUND_CFLAGS += -DX_ARCH=X_AMD64 + endif # ARCH amd64 + + ifeq ($(ARCH), arm) + LIBJSOUND_CFLAGS += -DX_ARCH=X_ARM + endif # ARCH arm + + ifeq ($(ARCH), ppc) + LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC + endif # ARCH ppc +endif + +LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"' + +$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND,\ + LIBRARY:=jsound,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBJSOUND_SRC_DIRS),\ + INCLUDE_FILES:=$(LIBJSOUND_SRC_FILES),\ + LANG:=$(LIBJSOUND_LANG),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsound/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=$(WIN_JAVA_LIB) advapi32.lib winmm.lib,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_solaris:=-lc ,\ + LDFLAGS_SUFFIX_macosx:=-framework CoreAudio -framework CoreFoundation \ + -framework CoreServices -framework AudioUnit $(LIBCXX) \ + -framework CoreMIDI -framework AudioToolbox ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsound)) + +$(BUILD_LIBJSOUND) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJSOUND) + +########################################################################################## + +ifneq ($(filter jsoundalsa, $(EXTRA_SOUND_JNI_LIBS)),) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA,\ + LIBRARY:=jsoundalsa,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBJSOUND_SRC_DIRS),\ + INCLUDE_FILES:=Utilities.c $(LIBJSOUND_MIDIFILES) $(LIBJSOUND_PORTFILES) \ + $(LIBJSOUND_DAUDIOFILES) \ + PLATFORM_API_LinuxOS_ALSA_CommonUtils.c \ + PLATFORM_API_LinuxOS_ALSA_PCM.c \ + PLATFORM_API_LinuxOS_ALSA_PCMUtils.c \ + PLATFORM_API_LinuxOS_ALSA_MidiIn.c \ + PLATFORM_API_LinuxOS_ALSA_MidiOut.c \ + PLATFORM_API_LinuxOS_ALSA_MidiUtils.c \ + PLATFORM_API_LinuxOS_ALSA_Ports.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBJSOUND_CFLAGS) \ + -DUSE_DAUDIO=TRUE \ + -DUSE_PORTS=TRUE \ + -DUSE_PLATFORM_MIDI_OUT=TRUE \ + -DUSE_PLATFORM_MIDI_IN=TRUE, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsoundalsa/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) -lasound,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa)) + +$(BUILD_LIBJSOUNDALSA) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJSOUNDALSA) + +endif + +########################################################################################## + +ifneq ($(filter jsoundds, $(EXTRA_SOUND_JNI_LIBS)),) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDDS,\ + LIBRARY:=jsoundds,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBJSOUND_SRC_DIRS),\ + INCLUDE_FILES:=Utilities.c $(LIBJSOUND_DAUDIOFILES) \ + PLATFORM_API_WinOS_DirectSound.cpp, \ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBJSOUND_CFLAGS) \ + -DUSE_DAUDIO=TRUE, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) dsound.lib winmm.lib user32.lib ole32.lib,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundds)) + +$(BUILD_LIBJSOUNDDS) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJSOUNDDS) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), solaris) +ifndef OPENJDK + +$(eval $(call SetupNativeCompilation,BUILD_LIBJ2UCRYPTO,\ + LIBRARY:=j2ucrypto,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto ,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2ucrypto/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=$(LIBDL),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto)) + +$(BUILD_LIBJ2UCRYPTO) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJ2UCRYPTO) + +endif +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +LIBAPPLESCRIPTENGINE_FILES:=\ + AppleScriptEngine.m \ + AppleScriptExecutionContext.m \ + AS_NS_ConversionUtils.m \ + NS_Java_ConversionUtils.m + +$(eval $(call SetupNativeCompilation,BUILD_LIBAPPLESCRIPTENGINE,\ + LIBRARY:=AppleScriptEngine,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/apple/applescript,\ + LANG:=C,\ + INCLUDE_FILES:=$(LIBAPPLESCRIPTENGINE_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/macosx/native/apple/applescript \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ + -framework Cocoa \ + -framework Carbon \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine)) + +$(BUILD_LIBAPPLESCRIPTENGINE) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBAPPLESCRIPTENGINE) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +LIBOSXAPP_FILES:=\ + NSApplicationAWT.m \ + QueuingApplicationDelegate.m \ + PropertiesUtilities.m \ + ThreadUtilities.m + +$(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP,\ + LIBRARY:=osxapp,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/sun/osxapp,\ + LANG:=C,\ + INCLUDE_FILES:=$(LIBOSXAPP_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_macosx:=\ + -framework Accelerate \ + -framework ApplicationServices \ + -framework AudioToolbox \ + -framework Carbon \ + -framework Cocoa \ + -framework Security \ + -framework ExceptionHandling \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -framework JavaRuntimeSupport \ + -framework OpenGL \ + -framework IOSurface \ + -framework QuartzCore, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxapp)) + +BUILD_LIBRARIES += $(BUILD_LIBOSXAPP) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +LIBOSX_FILES:=\ + Dispatch.m \ + CFileManager.m \ + KeystoreImpl.m \ + JavaAppLauncher.m \ + MacOSXPreferencesFile.m \ + SCDynamicStoreConfig.m + +LIBOSX_DIRS:=\ + $(JDK_TOPDIR)/src/macosx/native/com/apple/concurrent \ + $(JDK_TOPDIR)/src/macosx/native/java/util \ + $(JDK_TOPDIR)/src/macosx/native/com/apple/eio \ + $(JDK_TOPDIR)/src/macosx/native/apple/security \ + $(JDK_TOPDIR)/src/macosx/native/apple/launcher + +$(eval $(call SetupNativeCompilation,BUILD_LIBOSX,\ + LIBRARY:=osx,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBOSX_DIRS),\ + LANG:=C,\ + INCLUDE_FILES:=$(LIBOSX_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(foreach dir,$(LIBOSX_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_macosx:=\ + -losxapp \ + -framework Cocoa \ + -framework ApplicationServices \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -framework JavaRuntimeSupport \ + -framework Security \ + -framework SystemConfiguration \ + $(LDFLAGS_JDKLIB_SUFFIX), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosx)) + +BUILD_LIBRARIES += $(BUILD_LIBOSX) + +$(BUILD_LIBOSX) : $(BUILD_LIBOSXAPP) + +$(BUILD_LIBOSX) : $(BUILD_LIBJAVA) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +LIBAWT_LWAWT_FILES:=\ + awt.m \ + ApplicationDelegate.m \ + CFRetainedResource.m \ + CGLGraphicsConfig.m \ + CGLSurfaceData.m \ + CGLLayer.m \ + CGraphicsConfig.m \ + CGraphicsDevice.m \ + CGraphicsEnv.m \ + CCharToGlyphMapper.m \ + CSystemColors.m \ + AWTFont.m \ + CGGlyphOutlines.m \ + CGGlyphImages.m \ + CoreTextSupport.m \ + AWTStrike.m \ + InitIDs.m \ + AWTEvent.m \ + AWTView.m \ + AWTWindow.m \ + AWTSurfaceLayers.m \ + CCursorManager.m \ + CClipboard.m \ + CDataTransferer.m \ + CDragSource.m \ + CDragSourceContextPeer.m \ + CDropTarget.m \ + CDropTargetContextPeer.m \ + CInputMethod.m \ + CDesktopPeer.m \ + OSVersion.m \ + DnDUtilities.m \ + CFileDialog.m \ + CImage.m \ + CMenu.m \ + CMenuBar.m \ + CMenuComponent.m \ + CMenuItem.m \ + CPopupMenu.m \ + CRobot.m \ + CTrayIcon.m \ + CWrapper.m \ + JavaAccessibilityAction.m \ + JavaAccessibilityUtilities.m \ + JavaComponentAccessibility.m \ + JavaTextAccessibility.m \ + LWCToolkit.m \ + GeomUtilities.m \ + CPrinterJob.m \ + PrintModel.m \ + PrinterSurfaceData.m \ + PrinterView.m \ + QuartzSurfaceData.m \ + QuartzRenderer.m \ + CTextPipe.m \ + ImageSurfaceData.m \ + awt_DrawingSurface.m \ + \ + OGLBlitLoops.c \ + OGLBufImgOps.c \ + OGLContext.c \ + OGLFuncs.c \ + OGLMaskBlit.c \ + OGLMaskFill.c \ + OGLPaints.c \ + OGLRenderQueue.c \ + OGLRenderer.c \ + OGLSurfaceData.c \ + OGLTextRenderer.c \ + OGLVertexCache.c \ + AccelGlyphCache.c \ + CUPSfuncs.c + + +LIBAWT_LWAWT_DIRS:=\ + $(JDK_TOPDIR)/src/macosx/native/sun/awt \ + $(JDK_TOPDIR)/src/macosx/native/sun/font \ + $(JDK_TOPDIR)/src/macosx/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt \ + $(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\ + LIBRARY:=awt_lwawt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_LWAWT_DIRS),\ + LANG:=C,\ + INCLUDE_FILES:=$(LIBAWT_LWAWT_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(foreach dir,$(LIBAWT_LWAWT_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_macosx:=\ + -lawt -lmlib_image -losxapp $(LDFLAGS_JDKLIB_SUFFIX) $(LIBM) \ + -framework Accelerate \ + -framework ApplicationServices \ + -framework AudioToolbox \ + -framework Carbon \ + -framework Cocoa \ + -framework Security \ + -framework ExceptionHandling \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -framework JavaRuntimeSupport \ + -framework OpenGL \ + -framework QuartzCore ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt)) + +BUILD_LIBRARIES += $(BUILD_LIBAWT_LWAWT) + +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBAWT) + +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBMLIB_IMAGE) + +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBOSXAPP) + +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBJAVA) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +LIBOSXUI_FILES:=\ + AquaFileView.m \ + AquaLookAndFeel.m \ + AquaNativeResources.m \ + JRSUIConstantSync.m \ + JRSUIController.m \ + JRSUIFocus.m \ + ScreenPopupFactory.m \ + ScreenMenu.m + +$(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI,\ + LIBRARY:=osxui,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/com/apple/laf,\ + LANG:=C,\ + INCLUDE_FILES:=$(LIBOSXUI_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/macosx/native/com/apple/laf \ + -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ + -I$(JDK_TOPDIR)/src/macosx/native/sun/awt \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_macosx:=\ + $(LDFLAGS_JDKLIB_SUFFIX) \ + -lawt -losxapp -lawt_lwawt \ + -framework Cocoa \ + -framework Carbon \ + -framework ApplicationServices \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -framework JavaRuntimeSupport, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxui)) + +BUILD_LIBRARIES += $(BUILD_LIBOSXUI) + +$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT) + +$(BUILD_LIBOSXUI) : $(BUILD_LIBOSXAPP) + +$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT_LWAWT) + +#$(BUILD_LIBOSXUI) : $(BUILD_LIBJAVA) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC,\ + LIBRARY:=JObjC,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/native \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/native ,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=-fpascal-strings \ + -fobjc-gc \ + -gdwarf-2 \ + $(CFLAGS_JDKLIB) \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + , \ + LDFLAGS:=-fpascal-strings \ + -fobjc-gc \ + -gdwarf-2 \ + $(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=-framework Foundation -framework JavaVM \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -lffi, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc)) + +BUILD_LIBRARIES += $(BUILD_LIBJOBJC) + +endif ########################################################################################## diff --git a/jdk/makefiles/CopyFiles.gmk b/jdk/makefiles/CopyFiles.gmk index 63679cf61e9..63ffaa5a263 100644 --- a/jdk/makefiles/CopyFiles.gmk +++ b/jdk/makefiles/CopyFiles.gmk @@ -24,8 +24,14 @@ # INCLUDEDIR = $(JDK_OUTPUTDIR)/include -# TODO: Platform dir needs to be "win32" on windows /erikj -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM) + +OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/$(OPENJDK_TARGET_OS) + +ifeq ($(OPENJDK_TARGET_OS), windows) + OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/win32 +else ifeq ($(OPENJDK_TARGET_OS), macosx) + OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/darwin +endif # # Copy exported header files to outputdir. @@ -36,17 +42,17 @@ H_TARGET_FILES =$(INCLUDEDIR)/jdwpTransport.h \ $(INCLUDEDIR)/jvmticmlr.h \ $(INCLUDEDIR)/classfile_constants.h \ $(INCLUDEDIR)/jawt.h \ - $(PLATFORM_INCLUDE)/jni_md.h \ - $(PLATFORM_INCLUDE)/jawt_md.h + $(OPENJDK_TARGET_OS_INCLUDE)/jni_md.h \ + $(OPENJDK_TARGET_OS_INCLUDE)/jawt_md.h $(INCLUDEDIR)/%.h: $(JDK_TOPDIR)/src/share/javavm/export/%.h $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ -$(PLATFORM_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/javavm/export/%.h +$(OPENJDK_TARGET_OS_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export/%.h $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES = $(H_TARGET_FILES) @@ -58,7 +64,7 @@ SERVICETAG_LIBDIR = $(LIBDIR)/servicetag $(SERVICETAG_LIBDIR)/jdk_header.png: $(JDK_TOPDIR)/src/share/classes/com/sun/servicetag/resources/jdk_header.png $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ $(CHMOD) 444 $@ @@ -73,13 +79,20 @@ MGMT_TARGET_FILES = $(subst $(MGMT_LIB_SRC),$(MGMT_LIBDIR),$(MGMT_SRC_FILES)) $(MGMT_LIBDIR)/management.properties: $(MGMT_LIB_SRC)/management.properties $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ + $(CP) $< $@ + $(CHMOD) 644 $@ + +# this file has different permissions...don't know why... +$(MGMT_LIBDIR)/jmxremote.access: $(MGMT_LIB_SRC)/jmxremote.access + $(MKDIR) -p $(@D) + $(RM) -f $@ $(CP) $< $@ $(CHMOD) 644 $@ $(MGMT_LIBDIR)/%: $(MGMT_LIB_SRC)/% $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ $(CHMOD) 444 $@ @@ -91,7 +104,7 @@ LOGGING_LIB_SRC = $(JDK_TOPDIR)/src/share/lib $(LIBDIR)/logging.properties: $(LOGGING_LIB_SRC)/logging.properties $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(LIBDIR)/logging.properties @@ -104,9 +117,9 @@ PSFONTPROPFILE_SRC_DIR = $(JDK_TOPDIR)/src/share/classes/sun/print PSFONTPROPFILE_SRCS = $(wildcard $(PSFONTPROPFILE_SRC_DIR)/*.properties*) PSFONTPROPFILE_TARGET_FILES = $(subst $(PSFONTPROPFILE_SRC_DIR),$(LIBDIR),$(PSFONTPROPFILE_SRCS)) -$(PSFONTPROPFILE_TARGET_FILES): $(PSFONTPROPFILE_SRCS) +$(LIBDIR)/%: $(PSFONTPROPFILE_SRC_DIR)/% $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(PSFONTPROPFILE_TARGET_FILES) @@ -115,53 +128,83 @@ COPY_FILES += $(PSFONTPROPFILE_TARGET_FILES) # # Copy flavormap.properties, cursor.properties and cursors gif files to LIBDIR # -PLATFORM_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +ifneq ($(OPENJDK_TARGET_OS), macosx) +OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib +else +OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/macosx/lib +endif -$(LIBDIR)/flavormap.properties: $(PLATFORM_LIB_SRC)/flavormap.properties +$(LIBDIR)/flavormap.properties: $(OPENJDK_TARGET_OS_LIB_SRC)/flavormap.properties $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(LIBDIR)/flavormap.properties CURSORS_DEST_DIR = $(LIBDIR)/images/cursors -CURSORS_PLATFORM_LIB_SRC = $(PLATFORM_LIB_SRC)/images/cursors +CURSORS_OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib/images/cursors -$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_PLATFORM_LIB_SRC)/cursors.properties +$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_OPENJDK_TARGET_OS_LIB_SRC)/cursors.properties $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(CURSORS_DEST_DIR)/cursors.properties CURSORS_LIB_SRC = $(JDK_TOPDIR)/src/share/lib/images/cursors -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/win32_*.gif) -else # PLATFORM +else # OPENJDK_TARGET_OS CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/motif_*.gif) -endif # PLATFORM +endif # OPENJDK_TARGET_OS CURSORS_TARGET_FILES = $(subst $(CURSORS_LIB_SRC),$(CURSORS_DEST_DIR),$(CURSORS_SRC_FILES)) -$(CURSORS_TARGET_FILES): $(CURSORS_SRC_FILES) +$(CURSORS_DEST_DIR)/%: $(CURSORS_LIB_SRC)/% $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(CURSORS_TARGET_FILES) ########################################################################################## -CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib $(LIBDIR)/content-types.properties: $(CONTENT_TYPES_SRC)/content-types.properties $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(LIBDIR)/content-types.properties ########################################################################################## +CALENDARS_SRC := $(JDK_TOPDIR)/src/share/lib + +$(LIBDIR)/calendars.properties: $(CALENDARS_SRC)/calendars.properties + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(LIBDIR)/calendars.properties + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS),windows) + +TZMAPPINGS_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib + +$(LIBDIR)/tzmappings: $(TZMAPPINGS_SRC)/tzmappings + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(LIBDIR)/tzmappings + +endif + +########################################################################################## + ICCPROFILE_DEST_DIR := $(LIBDIR)/cmm ifdef OPENJDK @@ -175,7 +218,7 @@ ICCPROFILE_TARGET_FILES:=$(subst $(ICCPROFILE_SRC_DIR),$(ICCPROFILE_DEST_DIR),$( $(ICCPROFILE_DEST_DIR)%.pf: $(ICCPROFILE_SRC_DIR)%.pf $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ $(CHMOD) 444 $@ @@ -201,7 +244,7 @@ COPY_FILES += $(ICCPROFILE_TARGET_FILES) #TODO: rework this to avoid hardcoding library name in the makefile # ifdef OPENJDK - ifeq ($(PLATFORM), windows) + ifeq ($(OPENJDK_TARGET_OS), windows) FREETYPE_LIB = $(JDK_OUTPUTDIR)/bin/$(call SHARED_LIBRARY,freetype) else ifeq ($(USING_SYSTEM_FT_LIB), false) @@ -209,8 +252,11 @@ ifdef OPENJDK endif endif - $(FREETYPE_LIB): + $(FREETYPE_LIB): $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype) $(CP) $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype) $@ + ifeq ($(OPENJDK_BUILD_OS), windows) + $(CHMOD) +rx $@ + endif COPY_FILES += $(FREETYPE_LIB) endif @@ -219,14 +265,342 @@ endif # Copy msvcr100.dll on windows -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) MSVCRNN_TARGET := $(JDK_OUTPUTDIR)/bin/$(notdir $(MSVCRNN_DLL)) $(MSVCRNN_TARGET): $(MSVCRNN_DLL) $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(MSVCRNN_TARGET) endif ########################################################################################## + +HPROF_SRC=$(JDK_TOPDIR)/src/share/demo/jvmti/hprof/jvm.hprof.txt + +$(LIBDIR)/jvm.hprof.txt : $(HPROF_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(LIBDIR)/jvm.hprof.txt + +########################################################################################## + +# +# How to install jvm.cfg. +# +ifeq ($(JVM_VARIANT_ZERO), true) +JVMCFG_ARCH := zero +else + JVMCFG_ARCH := $(ARCH) +endif + +ifeq ($(OPENJDK_TARGET_OS),macosx) + ifeq ($(JVMCFG_ARCH),amd64) + JVMCFG_ARCH := x86_64 + endif + JVMCFG_SRC := $(JDK_TOPDIR)/src/macosx/bin/$(JVMCFG_ARCH)/jvm.cfg + JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib +else + JVMCFG_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/$(JVMCFG_ARCH)/jvm.cfg + JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH) +endif + +JVMCFG := $(JVMCFG_DIR)/jvm.cfg + + +ifeq ($(ARCH_DATA_MODEL),32) + # On 32 bit machines, we can have client and/or server libjvms installed. + # Since the currently committed jvm.cfg expects clientANDserver, we need + # to patch the jvm.cfg when we have built only a client or only a server. + # This should also support -kernel, -zero and -zeroshark. + ifeq ($(JVM_VARIANTS),$(COMMA)client$(COMMA)) + # Create a patched jvm.cfg to use -client by default and alias -server to -client. + $(JVMCFG): + $(MKDIR) -p $(@D) + $(RM) -f $(JVMCFG) + $(PRINTF) "-client KNOWN\n">$(JVMCFG) + $(PRINTF) "-server IGNORE\n">>$(JVMCFG) + $(PRINTF) "-hotspot ALIASED_TO -client\n">>$(JVMCFG) + $(PRINTF) "-classic WARN\n">>$(JVMCFG) + $(PRINTF) "-native ERROR\n">>$(JVMCFG) + $(PRINTF) "-green ERROR\n">>$(JVMCFG) + + else + ifeq ($(JVM_VARIANTS),$(COMMA)server$(COMMA)) + # Create a patched jvm.cfg to use -server by default and alias -client to -server. + + $(JVMCFG): + $(MKDIR) -p $(@D) + $(RM) -f $(JVMCFG) + $(PRINTF) "-server KNOWN\n">$(JVMCFG) + $(PRINTF) "-client IGNORE\n">>$(JVMCFG) + $(PRINTF) "-hotspot IGNORE\n">>$(JVMCFG) + $(PRINTF) "-classic WARN\n">>$(JVMCFG) + $(PRINTF) "-native ERROR\n">>$(JVMCFG) + $(PRINTF) "-green ERROR\n">>$(JVMCFG) + else + # Use the default jvm.cfg for this 32 bit setup. + $(JVMCFG): $(JVMCFG_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + endif + endif +else + # Use the default jvm.cfg for this 64 bit setup. + $(JVMCFG): $(JVMCFG_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ +endif + +COPY_FILES += $(JVMCFG) + +########################################################################################## + +PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security +PROPS_DST := $(JDK_OUTPUTDIR)/lib/security/java.security + +ifeq ($(OPENJDK_TARGET_OS), solaris) + PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-solaris +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-windows +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-macosx +endif + +$(PROPS_DST): $(PROPS_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(PROPS_DST) + +########################################################################################## + +POLICY_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.policy +POLICY_DST := $(JDK_OUTPUTDIR)/lib/security/java.policy + +$(POLICY_DST): $(POLICY_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(POLICY_DST) + +########################################################################################## + +CACERTS_SRC := $(CACERTS_FILE) +CACERTS_DST := $(JDK_OUTPUTDIR)/lib/security/cacerts + +$(CACERTS_DST): $(CACERTS_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(CACERTS_DST) + +########################################################################################## + +ifndef OPENJDK + +BLACKLIST_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/blacklist +BLACKLIST_DST := $(JDK_OUTPUTDIR)/lib/security/blacklist + +TRUSTEDLIBS_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/trusted.libraries +TRUSTEDLIBS_DST := $(JDK_OUTPUTDIR)/lib/security/trusted.libraries + +$(BLACKLIST_DST): $(BLACKLIST_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(BLACKLIST_DST) + +$(TRUSTEDLIBS_DST): $(TRUSTEDLIBS_SRC) + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + +COPY_FILES += $(TRUSTEDLIBS_DST) + +endif + +########################################################################################## + +ifndef OPENJDK + +SHARED_FONTS_SRC_DIR := $(JDK_TOPDIR)/src/closed/share/lib/fonts +SHARED_FONTS_DST_DIR := $(JDK_OUTPUTDIR)/lib/fonts +SHARED_FONTS_FILES := \ + LucidaTypewriterRegular.ttf \ + LucidaTypewriterBold.ttf \ + LucidaBrightRegular.ttf \ + LucidaBrightDemiBold.ttf \ + LucidaBrightItalic.ttf \ + LucidaBrightDemiItalic.ttf \ + LucidaSansRegular.ttf \ + LucidaSansDemiBold.ttf \ + +SHARED_FONTS_SRC := $(foreach F,$(SHARED_FONTS_FILES),$(SHARED_FONTS_SRC_DIR)/$(F)) +SHARED_FONTS_DST := $(foreach F,$(SHARED_FONTS_FILES),$(SHARED_FONTS_DST_DIR)/$(F)) + +$(SHARED_FONTS_DST_DIR)/%.ttf : $(SHARED_FONTS_SRC_DIR)/%.ttf + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + +$(SHARED_FONTS_DST_DIR)/fonts.dir : $(JDK_TOPDIR)/src/solaris/classes/sun/awt/motif/java.fonts.dir + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + +COPY_FILES += $(SHARED_FONTS_DST) $(SHARED_FONTS_DST_DIR)/fonts.dir + +ifeq ($(OPENJDK_TARGET_OS), linux) + +# The oblique fonts are only needed/wanted on Linux. + +OBL_FONTS_SRC_DIR := $(JDK_TOPDIR)/src/closed/share/lib/fonts/oblique +OBL_FONTS_DST_DIR := $(JDK_OUTPUTDIR)/lib/oblique-fonts +OBL_FONTS_FILES := LucidaTypewriterOblique.ttf LucidaTypewriterBoldOblique.ttf \ + LucidaSansOblique.ttf LucidaSansDemiOblique.ttf + +OBL_FONTS_SRC := $(foreach F,$(OBL_FONTS_FILES),$(OBL_FONTS_SRC_DIR)/$(F)) +OBL_FONTS_DST := $(foreach F,$(OBL_FONTS_FILES),$(OBL_FONTS_DST_DIR)/$(F)) + +$(OBL_FONTS_DST_DIR)/%.ttf : $(OBL_FONTS_SRC_DIR)/%.ttf + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + +$(OBL_FONTS_DST_DIR)/fonts.dir : $(JDK_TOPDIR)/src/solaris/classes/sun/awt/motif/java.oblique-fonts.dir + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + +COPY_FILES += $(OBL_FONTS_DST) $(OBL_FONTS_DST_DIR)/fonts.dir + +endif # linux +endif # OPENJDK + +########################################################################################## + +ifndef OPENJDK + +JS_RESOURCES_FILES := Messages.properties Messages_fr.properties +JS_RESOURCES_SRC_DIR := $(JDK_TOPDIR)/src/closed/share/classes/sun/org/mozilla/javascript/internal/resources +JS_RESOURCES_DST_DIR := $(JDK_OUTPUTDIR)/classes/sun/org/mozilla/javascript/internal/resources + +JS_RESOURCES_SRC := $(foreach F,$(JS_RESOURCES_FILES),$(JS_RESOURCES_SRC_DIR)/$(F)) +JS_RESOURCES_DST := $(foreach F,$(JS_RESOURCES_FILES),$(JS_RESOURCES_DST_DIR)/$(F)) + +$(JS_RESOURCES_DST_DIR)/% : $(JS_RESOURCES_SRC_DIR)/% + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + +COPY_FILES += $(JS_RESOURCES_DST) + +endif + +########################################################################################## + +ifndef OPENJDK + +# +# Solaris X11 Direct Graphics Access library +# + +_DGALIBS_sparc = \ + libxinerama.so \ + libjdgaSUNWcg6.so \ + libjdgaSUNWffb.so \ + libjdgaSUNWm64.so \ + libjdgaSUNWafb.so + +_DGALIBS_sparcv9 = \ + libxinerama.so \ + libjdgaSUNWcg6.so \ + libjdgaSUNWffb.so \ + libjdgaSUNWm64.so \ + libjdgaSUNWafb.so + +_DGALIBS_i586 = # no i586 library yet + +_DGALIBS_amd64 = # no amd64 library yet + +DGALIBS = $(_DGALIBS_$(ARCH):%=$(JDK_OUTPUTDIR)/lib/$(LIBARCH)/%) + +$(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libxinerama.so: $(JDK_TOPDIR)/src/closed/solaris/lib/$(ARCH)/libxinerama.so + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + $(CHMOD) 755 $@ + +$(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNW%.so: $(JDK_TOPDIR)/src/closed/solaris/lib/$(ARCH)/libjdgaSUNW%.so + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + $(CHMOD) 755 $@ + +$(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWafb.so: $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWffb.so + $(MKDIR) -p $(@D) + $(RM) $@ + $(LN) -s $< $@ + +COPY_FILES += $(DGALIBS) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), solaris) + +SUNPKCS11_CFG_SRC := $(JDK_TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg +SUNPKCS11_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/sunpkcs11-solaris.cfg + +$(SUNPKCS11_CFG_DST) : $(SUNPKCS11_CFG_SRC) + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + +COPY_FILES += $(SUNPKCS11_CFG_DST) + +endif + +########################################################################################## + +ifndef OPENJDK +ifeq ($(OPENJDK_TARGET_OS), solaris) + +UCRYPTO_CFG_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/ucrypto-solaris.cfg +UCRYPTO_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/ucrypto-solaris.cfg + +$(UCRYPTO_CFG_DST) : $(UCRYPTO_CFG_SRC) + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $@ + +COPY_FILES += $(UCRYPTO_CFG_DST) + +endif +endif + +########################################################################################## + +$(JDK_OUTPUTDIR)/lib/sound.properties : $(JDK_TOPDIR)/src/share/lib/sound.properties + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $(@) + +COPY_FILES += $(JDK_OUTPUTDIR)/lib/sound.properties + +########################################################################################## diff --git a/jdk/makefiles/CopyIntoClasses.gmk b/jdk/makefiles/CopyIntoClasses.gmk index 9fef4c5fd0b..4e9726e452b 100644 --- a/jdk/makefiles/CopyIntoClasses.gmk +++ b/jdk/makefiles/CopyIntoClasses.gmk @@ -83,6 +83,83 @@ COPY_FILES += \ COPY_FILES += \ $(JDK_TOPDIR)/src/share/classes/sun/net/idn/uidna.spp +# +# Swing plaf resources +# +SWING_PLAF_WINDOWS_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows +COPY_FILES += \ + $(wildcard $(SWING_PLAF_WINDOWS_RESOURCES_DIR)/icons/*.gif) \ + $(wildcard $(SWING_PLAF_WINDOWS_RESOURCES_DIR)/icons/*.png) + +ifndef OPENJDK + SWING_PLAF_WINDOWS_RESOURCES_DIR_CLOSED = $(JDK_TOPDIR)/src/closed/share/classes/com/sun/java/swing/plaf/windows + # Filter out JavaCup32.png from OpenJDK + COPY_FILES := $(filter-out $(SWING_PLAF_WINDOWS_RESOURCES_DIR)/icons/JavaCup32.png, $(COPY_FILES)) + # Alter JavaCup32.png from ClosedJDK + COPY_FILES += \ + $(SWING_PLAF_WINDOWS_RESOURCES_DIR_CLOSED)/icons/JavaCup32.png +endif + +SWING_PLAF_BASIC_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/basic +COPY_FILES += \ + $(wildcard $(SWING_PLAF_BASIC_RESOURCES_DIR)/icons/*.png) + +ifndef OPENJDK + SWING_PLAF_BASIC_RESOURCES_DIR_CLOSED = $(JDK_TOPDIR)/src/closed/share/classes/javax/swing/plaf/basic + # Filter out JavaCup16.png from OpenJDK + COPY_FILES := $(filter-out $(SWING_PLAF_BASIC_RESOURCES_DIR)/icons/JavaCup16.png, $(COPY_FILES)) + # Alter JavaCup16.png from ClosedJDK + COPY_FILES += \ + $(SWING_PLAF_BASIC_RESOURCES_DIR_CLOSED)/icons/JavaCup16.png +endif + +ifdef OPENJDK + SWING_PLAF_MOTIF_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif + COPY_FILES += \ + $(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR)/icons/*.gif) \ + $(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR)/icons/*.png) +else + SWING_PLAF_MOTIF_RESOURCES_DIR_CLOSED = $(JDK_TOPDIR)/src/closed/share/classes/com/sun/java/swing/plaf/motif + COPY_FILES += \ + $(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR_CLOSED)/icons/*.gif) \ + $(wildcard $(SWING_PLAF_MOTIF_RESOURCES_DIR_CLOSED)/icons/*.png) +endif + +SWING_PLAF_METAL_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/metal +COPY_FILES += \ + $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/*.gif) \ + $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/*.png) \ + $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/ocean/*.gif) \ + $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/ocean/*.png) \ + $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/sounds/*.wav) + +ifneq ($(OPENJDK_TARGET_OS), windows) + # Only copy GTK resources on Solaris/Linux + SWING_PLAF_GTK_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk + COPY_FILES += \ + $(wildcard $(SWING_PLAF_GTK_RESOURCES_DIR)/icons/*.gif) \ + $(wildcard $(SWING_PLAF_GTK_RESOURCES_DIR)/icons/*.png) \ + $(wildcard $(SWING_PLAF_GTK_RESOURCES_DIR)/resources/metacity/SwingFallbackTheme/metacity-1/*.xml) +endif +# END: Swing plaf resources + +# The exception handling of swing beaninfo +# These resources violates the convention of having code and resources together under +# $(JDK_TOPDIR)/src/.../classes directories +SWING_BEANINFO_RESOURCES_SRC_DIR = $(JDK_TOPDIR)/make/tools/swing-beans/beaninfo/images +SWING_BEANINFO_RESOURCES_SRC = $(wildcard $(SWING_BEANINFO_RESOURCES_SRC_DIR)/*.gif) +OUT_BEANINFO_RESOURCES = $(addprefix $(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/,\ + $(shell $(PRINTF) "$(SWING_BEANINFO_RESOURCES_SRC)\n" | $(SED) -e 's|/[^ ]*/beaninfo/images/||g')) + +COPY_EXTRA += $(OUT_BEANINFO_RESOURCES) +# END: Swing beaninfo resources + +# Swing text resources +SWING_TEXT_RESOURCEDIR = $(JDK_TOPDIR)/src/share/classes/javax/swing/text +COPY_FILES += \ + $(SWING_TEXT_RESOURCEDIR)/html/default.css \ + $(wildcard $(SWING_TEXT_RESOURCEDIR)/rtf/charsets/*.txt) + ########################################################################################## # # Copy the META-INF/services configuration files that are scattered around the source tree @@ -94,25 +171,35 @@ COPY_FILES += \ # are uncommented and the configuration file is stored in the output META-INF directory. # Make sure the output directory is created. -$(shell $(MKDIR) -p $(JDK_OUTPUTDIR)/newclasses/META-INF/services) +$(shell $(MKDIR) -p $(JDK_OUTPUTDIR)/classes/META-INF/services) # Find all META-INF/services/* files ALL_META-INF_DIRS_share:=$(shell $(FIND) $(JDK_TOPDIR)/src/share/classes -type d -a -name META-INF) -ALL_META-INF_DIRS_hostapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes -type d -a -name META-INF) +ALL_META-INF_DIRS_targetapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes -type d -a -name META-INF) # Platform specific overrides shared -ifneq ($(ALL_META-INF_DIRS_hostapi),) - ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_hostapi) \ - $(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes%,%,$(ALL_META-INF_DIRS_hostapi)),\ +ifneq ($(ALL_META-INF_DIRS_targetapi),) + ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_targetapi) \ + $(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes%,%,$(ALL_META-INF_DIRS_targetapi)),\ $(ALL_META-INF_DIRS_share)) else ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_share) endif # Filter out META-INF dirs that shouldn't be included -ALL_META-INF_DIRS:=$(filter-out %sun/nio/cs/ext/META-INF,$(ALL_META-INF_DIRS)) ifdef OPENJDK ALL_META-INF_DIRS:=$(filter-out %com/sun/script/javascript/META-INF,$(ALL_META-INF_DIRS)) endif +ifndef OPENJDK +ifneq ($(OPENJDK_TARGET_OS), macosx) + ALL_META-INF_DIRS += $(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc/META-INF +endif +endif + +ifndef OPENJDK + ALL_META-INF_DIRS += $(JDK_TOPDIR)/src/closed/share/classes/sun/java2d/cmm/kcms/META-INF +endif + SRC_SERVICES_FILES:=$(wildcard $(addsuffix /services/*,$(ALL_META-INF_DIRS))) + ifdef OPENJDK SRC_SERVICES_FILES:=$(filter-out %sun/dc/META-INF/services/sun.java2d.pipe.RenderingEngine,$(SRC_SERVICES_FILES)) SRC_SERVICES_FILES:=$(filter-out %sun/java2d/cmm/kcms/META-INF/services/sun.java2d.cmm.PCMM,$(SRC_SERVICES_FILES)) @@ -120,17 +207,18 @@ else SRC_SERVICES_FILES:=$(filter-out %sun/java2d/pisces/META-INF/services/sun.java2d.pipe.RenderingEngine,$(SRC_SERVICES_FILES)) SRC_SERVICES_FILES:=$(filter-out %sun/java2d/cmm/lcms/META-INF/services/sun.java2d.cmm.PCMM,$(SRC_SERVICES_FILES)) endif + # The number of services files are relatively few. If the increase in numbers, then # we have to use ListPathsSafelyNow here. -# Change $(JDK_TOPDIR)/src/.../META-INF/services/yyyy into $(JDK_OUTPUTDIR)/newclasses/META-INF/services/yyyy +# Change $(JDK_TOPDIR)/src/.../META-INF/services/yyyy into $(JDK_OUTPUTDIR)/classes/META-INF/services/yyyy # The \n in the printf command is needed to make sed work on Solaris. -OUT_SERVICES_FILES:=$(addprefix $(JDK_OUTPUTDIR)/newclasses/META-INF/services/,\ +OUT_SERVICES_FILES:=$(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\ $(shell $(PRINTF) "$(SRC_SERVICES_FILES)\n" | $(SED) -e 's|/[^ ]*/META-INF/services/||g')) OUT_SERVICES_FILES_COLON:=$(addsuffix :,$(OUT_SERVICES_FILES)) # Exception handling for print services with no META-INF directory -SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/*) -OUT_SERVICES_FILES_PRINT = $(addprefix $(JDK_OUTPUTDIR)/newclasses/META-INF/services/,\ - $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/%,%,\ +SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/*) +OUT_SERVICES_FILES_PRINT = $(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\ + $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/%,%,\ $(SRC_SERVICES_FILES_PRINT))) OUT_SERVICES_FILES_PRINT_COLON = $(addsuffix :,$(OUT_SERVICES_FILES_PRINT)) RULES_SERVICES_PRINT = $(join $(OUT_SERVICES_FILES_PRINT_COLON),$(SRC_SERVICES_FILES_PRINT)) @@ -141,10 +229,52 @@ META-INF_RULES_SERVICES:=$(RULES_SERVICES_PRINT) $(join $(OUT_SERVICES_FILES_COL define addto_meta-inf_services $1 echo Installing META-INF/services/$$(@F) - $(CAT) $$< | $(SED) -e "s/^#\[$(PLATFORM)\]//" > $$@ + $(CAT) $$< | $(SED) -e "s/^#\[$(OPENJDK_TARGET_OS)\]//" > $$@ endef $(foreach i,$(META-INF_RULES_SERVICES),$(eval $(call addto_meta-inf_services,$i))) # Here is the generic rule, whose receipt the above rules will trigger. COPY_EXTRA += $(OUT_SERVICES_FILES) COPY_EXTRA += $(OUT_SERVICES_FILES_PRINT) + +### + +$(JDK_OUTPUTDIR)/classes/sun/nio/cs/ext/sjis0213.dat : $(JDK_OUTPUTDIR)/gensrc/sun/nio/cs/ext/sjis0213.dat + $(MKDIR) -p $(@D) + $(RM) $@ + $(CP) $< $(@) + +COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/sun/nio/cs/ext/sjis0213.dat + +### + +JAVAX_SOUND_SRC := $(JDK_TOPDIR)/src/share/classes/com/sun/media/sound/services + +JAVAX_SOUND_SRC_FILES := \ + javax.sound.midi.spi.MidiDeviceProvider \ + javax.sound.midi.spi.MidiFileReader \ + javax.sound.midi.spi.MidiFileWriter \ + javax.sound.midi.spi.SoundbankReader \ + javax.sound.sampled.spi.AudioFileReader \ + javax.sound.sampled.spi.AudioFileWriter \ + javax.sound.sampled.spi.FormatConversionProvider + +COPY_EXTRA += $(foreach F,$(notdir $(JAVAX_SOUND_SRC_FILES)),$(JDK_OUTPUTDIR)/classes/META-INF/services/${F}) + +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),windows-ia64) + JAVAX_SOUND_SRC_FILES += windows-ia64/javax.sound.sampled.spi.MixerProvider + COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider +else ifeq ($(OPENJDK_TARGET_OS),windows) + JAVAX_SOUND_SRC_FILES += windows-i586/javax.sound.sampled.spi.MixerProvider + COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider +else ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),linux-i586) + JAVAX_SOUND_SRC_FILES += linux-i586/javax.sound.sampled.spi.MixerProvider + COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider +else + JAVAX_SOUND_SRC_FILES += javax.sound.sampled.spi.MixerProvider + COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider +endif + +JAVAX_SOUND_RULES := $(foreach F,$(JAVAX_SOUND_SRC_FILES),$(JDK_OUTPUTDIR)/classes/META-INF/services/$(notdir $F):$(JAVAX_SOUND_SRC)/$F) + +$(foreach R,$(JAVAX_SOUND_RULES),$(eval $(call addto_meta-inf_services,$R))) diff --git a/jdk/makefiles/CopySamples.gmk b/jdk/makefiles/CopySamples.gmk index bbc6f3ccef3..bb18a07491c 100644 --- a/jdk/makefiles/CopySamples.gmk +++ b/jdk/makefiles/CopySamples.gmk @@ -46,7 +46,7 @@ ifndef OPENJDK SAMPLE_TARGET += $(SAMPLE_CLOSED_TARGET) endif -ifeq ($(PLATFORM),solaris) +ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx)) SAMPLE_SOLARIS_SOURCE := $(shell $(FIND) $(SAMPLE_SOLARIS_SOURCE_DIR) -type f -print) SAMPLE_SOLARIS_TARGET := $(subst $(SAMPLE_SOLARIS_SOURCE_DIR),$(SAMPLE_TARGET_DIR),$(SAMPLE_SOLARIS_SOURCE)) SAMPLE_TARGET += $(SAMPLE_SOLARIS_TARGET) @@ -54,17 +54,17 @@ endif $(SAMPLE_TARGET_DIR)/dtrace/%: $(SAMPLE_SOLARIS_SOURCE_DIR)/dtrace/% $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ $(SAMPLE_TARGET_DIR)/webservices/%: $(SAMPLE_CLOSED_SOURCE_DIR)/webservices/% $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ $(SAMPLE_TARGET_DIR)/%: $(SAMPLE_SOURCE_DIR)/% $(MKDIR) -p $(@D) - rm -f $@ + $(RM) -f $@ $(CP) $< $@ COPY_FILES += $(SAMPLE_TARGET) @@ -72,4 +72,3 @@ COPY_FILES += $(SAMPLE_TARGET) all: $(COPY_FILES) .PHONY: all - diff --git a/jdk/makefiles/CreateJars.gmk b/jdk/makefiles/CreateJars.gmk new file mode 100644 index 00000000000..698885df08a --- /dev/null +++ b/jdk/makefiles/CreateJars.gmk @@ -0,0 +1,854 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk +include Setup.gmk + +default: all + +include Tools.gmk + +# +# This makefile...so that altering will trigger rebuilding include/exclude-lists => jars +# +MAKEFILE=$(JDK_TOPDIR)/makefiles/CreateJars.gmk + +MAINMANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf +BEANMANIFEST := $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest + +JARS:= + +########################################################################################## + +JCONSOLE_JAR_DEPS := \ + $(shell $(FIND) $(JDK_OUTPUTDIR)/classes/sun/tools/jconsole/ -name "_the.package") \ + $(shell $(FIND) $(JDK_OUTPUTDIR)/classes/com/sun/tools/jconsole/ -name "_the.package") + +$(eval $(call SetupArchive,BUILD_JCONSOLE_JAR,$(JCONSOLE_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes,\ + SUFFIXES:=.class .gif .png .properties,\ + INCLUDES:=sun/tools/jconsole com/sun/tools/jconsole,\ + JARMAIN:=sun.tools.jconsole.JConsole,\ + JAR:=$(JDK_OUTPUTDIR)/lib/jconsole.jar,\ + SKIP_METAINF:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/jconsole.jar + +########################################################################################## + +DNS_JAR_DEPS := \ + $(shell $(FIND) $(JDK_OUTPUTDIR)/classes/sun/net/spi/nameservice/dns/ -name "_the.package") \ + +$(eval $(call SetupArchive,BUILD_DNS_JAR,$(DNS_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes,\ + INCLUDES:=sun/net/spi/nameservice/dns,\ + EXTRA_FILES:=META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor,\ + JAR:=$(JDK_OUTPUTDIR)/lib/ext/dnsns.jar,\ + SKIP_METAINF:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/ext/dnsns.jar + +########################################################################################## + +LOCALEDATA_INCLUDE_PATTERNS := \ + sun/text/resources/*_ar* \ + sun/text/resources/*_hi* \ + sun/text/resources/*_iw* \ + sun/text/resources/*_iw* \ + sun/text/resources/*_ja* \ + sun/text/resources/*_ko* \ + sun/text/resources/*_th.* \ + sun/text/resources/*_th_* \ + sun/text/resources/*_vi* \ + sun/text/resources/*_zh* \ + sun/text/resources/*Data_th \ + sun/text/resources/thai_dict \ + sun/util/resources/*_ar* \ + sun/util/resources/*_hi* \ + sun/util/resources/*_iw* \ + sun/util/resources/*_iw* \ + sun/util/resources/*_ja* \ + sun/util/resources/*_ko* \ + sun/util/resources/*_th_* \ + sun/util/resources/*_th.* \ + sun/util/resources/*_vi* \ + sun/util/resources/*_zh* + +LOCALEDATA_INCLUDES := $(patsubst $(JDK_OUTPUTDIR)/classes/%,%,\ + $(foreach i,$(LOCALEDATA_INCLUDE_PATTERNS), $(wildcard $(JDK_OUTPUTDIR)/classes/$i))) + +$(eval $(call SetupArchive,BUILD_LOCALEDATA_JAR,,\ + SRCS:=$(JDK_OUTPUTDIR)/classes,\ + SUFFIXES:=.class _dict _th,\ + INCLUDES:=$(LOCALEDATA_INCLUDES),\ + JAR:=$(JDK_OUTPUTDIR)/lib/ext/localedata.jar,\ + SKIP_METAINF:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/ext/localedata.jar + +########################################################################################## +# rt.jar and resources.jar are being built in the same way as in the old build. They require +# the files to be in a certain order and converting that is not easy and will not be needed +# in jigsaw anyway. + +# Exclude list for rt.jar and resources.jar +RT_JAR_EXCLUDES := \ + com/sun/javadoc \ + com/sun/jdi \ + com/sun/jarsigner \ + com/sun/source \ + com/sun/istack/internal/tools \ + META-INF/services/com.sun.jdi.connect.Connector \ + META-INF/services/com.sun.jdi.connect.spi.TransportService \ + META-INF/services/com.sun.tools.xjc.Plugin \ + com/sun/tools \ + sun/jvmstat \ + sun/nio/cs/ext \ + sun/awt/HKSCS.class \ + sun/awt/motif/X11GB2312\$$$$Decoder.class \ + sun/awt/motif/X11GB2312\$$$$Encoder.class \ + sun/awt/motif/X11GB2312.class \ + sun/awt/motif/X11GBK\$$$$Encoder.class \ + sun/awt/motif/X11GBK.class \ + sun/awt/motif/X11KSC5601\$$$$Decoder.class \ + sun/awt/motif/X11KSC5601\$$$$Encoder.class \ + sun/awt/motif/X11KSC5601.class \ + META-INF/services/java.nio.charset.spi.CharsetProvider \ + sun/rmi/rmic \ + sun/tools/asm \ + sun/tools/java \ + sun/tools/javac \ + com/sun/tools/classfile \ + com/sun/tools/javap \ + sun/tools/jcmd \ + sun/tools/jconsole \ + sun/tools/jps \ + sun/tools/jstat \ + sun/tools/jstatd \ + sun/tools/native2ascii \ + sun/tools/serialver \ + sun/tools/tree \ + sun/tools/util \ + sun/security/tools/JarBASE64Encoder.class \ + sun/security/tools/JarSigner.class \ + sun/security/tools/JarSignerParameters.class \ + sun/security/tools/JarSignerResources.class \ + sun/security/tools/JarSignerResources_ja.class \ + sun/security/tools/JarSignerResources_zh_CN.class \ + sun/security/tools/SignatureFile\$$$$Block.class \ + sun/security/tools/SignatureFile.class \ + sun/security/tools/TimestampedSigner.class \ + sun/security/provider/Sun.class \ + sun/security/rsa/SunRsaSign.class \ + sun/security/ssl \ + sun/security/ec/ECDHKeyAgreement.class \ + sun/security/ec/ECDSASignature\$$$$Raw.class \ + sun/security/ec/ECDSASignature\$$$$SHA1.class \ + sun/security/ec/ECDSASignature\$$$$SHA224.class \ + sun/security/ec/ECDSASignature\$$$$SHA256.class \ + sun/security/ec/ECDSASignature\$$$$SHA384.class \ + sun/security/ec/ECDSASignature\$$$$SHA512.class \ + sun/security/ec/ECDSASignature.class \ + sun/security/ec/ECKeyPairGenerator.class \ + sun/security/ec/SunEC\$$$$1.class \ + sun/security/ec/SunEC.class \ + sun/security/ec/SunECEntries.class \ + sun/security/pkcs11 \ + com/sun/net/ssl/internal/ssl \ + javax/crypto \ + sun/security/internal \ + com/sun/crypto/provider \ + META-INF/services/com.sun.tools.attach.spi.AttachProvider \ + com/sun/tools/attach \ + org/relaxng/datatype \ + com/sun/codemodel \ + com/sun/xml/internal/dtdparser \ + com/sun/xml/internal/rngom \ + com/sun/xml/internal/xsom \ + com/sun/tools/script/shell \ + sun/tools/attach \ + sun/tools/jstack \ + sun/tools/jinfo \ + sun/tools/jmap \ + sun/net/spi/nameservice/dns \ + META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor \ + javax/swing/beaninfo \ + javax/swing/AbstractButtonBeanInfo.class \ + javax/swing/BoxBeanInfo.class \ + javax/swing/JAppletBeanInfo.class \ + javax/swing/JButtonBeanInfo.class \ + javax/swing/JCheckBoxBeanInfo.class \ + javax/swing/JCheckBoxMenuItemBeanInfo.class \ + javax/swing/JColorChooserBeanInfo.class \ + javax/swing/JComboBoxBeanInfo.class \ + javax/swing/JComponentBeanInfo.class \ + javax/swing/JDesktopPaneBeanInfo.class \ + javax/swing/JDialogBeanInfo.class \ + javax/swing/JEditorPaneBeanInfo.class \ + javax/swing/JFileChooserBeanInfo.class \ + javax/swing/JFormattedTextFieldBeanInfo.class \ + javax/swing/JFrameBeanInfo.class \ + javax/swing/JInternalFrameBeanInfo.class \ + javax/swing/JLabelBeanInfo.class \ + javax/swing/JLayeredPaneBeanInfo.class \ + javax/swing/JListBeanInfo.class \ + javax/swing/JMenuBarBeanInfo.class \ + javax/swing/JMenuBeanInfo.class \ + javax/swing/JMenuItemBeanInfo.class \ + javax/swing/JOptionPaneBeanInfo.class \ + javax/swing/JPanelBeanInfo.class \ + javax/swing/JPasswordFieldBeanInfo.class \ + javax/swing/JPopupMenuBeanInfo.class \ + javax/swing/JProgressBarBeanInfo.class \ + javax/swing/JRadioButtonBeanInfo.class \ + javax/swing/JRadioButtonMenuItemBeanInfo.class \ + javax/swing/JScrollBarBeanInfo.class \ + javax/swing/JScrollPaneBeanInfo.class \ + javax/swing/JSeparatorBeanInfo.class \ + javax/swing/JSliderBeanInfo.class \ + javax/swing/JSpinnerBeanInfo.class \ + javax/swing/JSplitPaneBeanInfo.class \ + javax/swing/JTabbedPaneBeanInfo.class \ + javax/swing/JTableBeanInfo.class \ + javax/swing/JTextAreaBeanInfo.class \ + javax/swing/JTextFieldBeanInfo.class \ + javax/swing/JTextPaneBeanInfo.class \ + javax/swing/JToggleButtonBeanInfo.class \ + javax/swing/JToolBarBeanInfo.class \ + javax/swing/JTreeBeanInfo.class \ + javax/swing/JWindowBeanInfo.class \ + javax/swing/SwingBeanInfoBase.class \ + javax/swing/text/JTextComponentBeanInfo.class \ + sun/swing/BeanInfoUtils.class \ + $(LOCALEDATA_INCLUDES) + +# These files should never be put into rt.jar +# but due to a misstake...some are put there if embedded +# +ifneq ($(JAVASE_EMBEDDED), true) +# normal (correct) case +RT_JAR_EXCLUDES += \ + com/oracle/jrockit/jfr \ + oracle/jrockit/jfr +else +# embedded (broken) case +RT_JAR_EXCLUDES += \ + oracle/jrockit/jfr/parser \ + oracle/jrockit/jfr/tools \ + oracle/jrockit/jfr/NativeOptions.class \ + oracle/jrockit/jfr/RepositoryChunkHandler.class +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + RT_JAR_EXCLUDES += com/sun/nio/sctp \ + sun/nio/ch/sctp \ + sun/jdbc \ + sun/nio/ch/DevPollArrayWrapper\$$$$Updator.class \ + sun/nio/ch/DevPollArrayWrapper.class \ + sun/nio/ch/DevPollSelectorImpl.class \ + sun/nio/ch/DevPollSelectorProvider.class \ + sun/nio/ch/EPollArrayWrapper\$$$$Updator.class \ + sun/nio/ch/EPollArrayWrapper.class \ + sun/nio/ch/EPollSelectorImpl.class \ + sun/nio/ch/EPollSelectorProvider.class +endif + +# Find all files in the classes dir to use as dependencies. This could be more fine granular. +ALL_FILES_IN_CLASSES := $(shell $(FIND) $(JDK_OUTPUTDIR)/classes -type f \ + | $(GREP) -v -e '/_the\.*' -e '^_the\.*') + +RT_JAR_MANIFEST_FILE := $(JDK_OUTPUTDIR)/lib/_the.rt.jar_manifest +RESOURCE_JAR_MANIFEST_FILE := $(JDK_OUTPUTDIR)/lib/_the.resources.jar_manifest + +$(RT_JAR_MANIFEST_FILE): $(MAINMANIFEST) $(BEANMANIFEST) + $(MKDIR) -p $(@D) + $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ + -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ + $(MAINMANIFEST) >> $@ + $(ECHO) >> $@ + $(CAT) $(BEANMANIFEST) >> $@ + +$(RESOURCE_JAR_MANIFEST_FILE): $(MAINMANIFEST) + $(MKDIR) -p $(@D) + $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ + -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ + $(MAINMANIFEST) >> $@ + +$(JDK_OUTPUTDIR)/lib/_the.jars.exclude: $(MAKEFILE) + $(MKDIR) -p $(@D) + $(call ListPathsSafely,RT_JAR_EXCLUDES,\n, >> $@) + +$(JDK_OUTPUTDIR)/lib/classlist : $(JDK_TOPDIR)/make/tools/sharing/classlist.$(OPENJDK_TARGET_OS) \ + $(MAKEFILE) + $(MKDIR) -p $(@D) + $(RM) -f $@.temp + $(TOOL_ADDJSUM) $< $@.temp + $(MV) $@.temp $@ + +$(JDK_OUTPUTDIR)/lib/_the.jars.contents: $(BUILD_TOOLS) $(JDK_OUTPUTDIR)/lib/_the.jars.exclude \ + $(ALL_FILES_IN_CLASSES) $(JDK_OUTPUTDIR)/lib/classlist + $(MKDIR) -p $(@D) + $(RM) $@.temp + ($(CD) $(JDK_OUTPUTDIR)/classes && \ + $(TOOL_JARREORDER) \ + -o $@.temp $(JDK_OUTPUTDIR)/lib/classlist $(JDK_OUTPUTDIR)/lib/_the.jars.exclude . ) + $(MV) $@.temp $@ + +$(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.contents + $(GREP) -e '\.class$$' $(JDK_OUTPUTDIR)/lib/_the.jars.contents > $@ + +$(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.contents + $(GREP) -v -e '\.class$$' -e '/_the\.*' -e '^_the\.*' $(JDK_OUTPUTDIR)/lib/_the.jars.contents > $@ + +RT_JAR_CREATE_OPTIONS := c0fm +ifeq ($(COMPRESS_JARS), true) + RT_JAR_CREATE_OPTIONS := cfm +endif + +$(JDK_OUTPUTDIR)/lib/rt.jar: $(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents $(RT_JAR_MANIFEST_FILE) + $(ECHO) Creating rt.jar + $(CD) $(JDK_OUTPUTDIR)/classes && \ + $(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RT_JAR_MANIFEST_FILE) \ + @$(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents + +$(JDK_OUTPUTDIR)/lib/resources.jar: $(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents \ + $(RESOURCE_JAR_MANIFEST_FILE) + $(ECHO) Creating resources.jar + $(CD) $(JDK_OUTPUTDIR)/classes && \ + $(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RESOURCE_JAR_MANIFEST_FILE) \ + @$(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents + +JARS+=$(JDK_OUTPUTDIR)/lib/rt.jar $(JDK_OUTPUTDIR)/lib/resources.jar + +########################################################################################## + +CHARSETS_JAR_DEPS := + +ifneq ($(OPENJDK_TARGET_OS), windows) + CHARSETS_EXTRA_FILES:=sun/awt/motif/X11GBK.class \ + sun/awt/motif/X11GB2312\$$$$Decoder.class \ + sun/awt/motif/X11GB2312.class \ + sun/awt/motif/X11KSC5601\$$$$Decoder.class \ + sun/awt/motif/X11KSC5601\$$$$Encoder.class \ + sun/awt/motif/X11GB2312\$$$$Encoder.class \ + sun/awt/motif/X11GBK\$$$$Encoder.class \ + sun/awt/motif/X11KSC5601.class +endif + +$(eval $(call SetupArchive,BUILD_CHARSETS_JAR,$(CHARSETS_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes, \ + SUFFIXES:=.class .dat,\ + INCLUDES:=sun/nio/cs/ext,\ + EXTRA_FILES := sun/awt/HKSCS.class \ + $(CHARSETS_EXTRA_FILES) \ + META-INF/services/java.nio.charset.spi.CharsetProvider, \ + JAR:=$(JDK_OUTPUTDIR)/lib/charsets.jar, \ + SKIP_METAINF := true, \ + CHECK_COMPRESS_JAR:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/charsets.jar + +########################################################################################## + +ifeq ($(ENABLE_JFR), true) + $(eval $(call SetupArchive,BUILD_JFR_JAR,,\ + SRCS:=$(JDK_OUTPUTDIR)/classes,\ + INCLUDES:=com/oracle/jrockit/jfr \ + oracle/jrockit/jfr,\ + JAR:=$(JDK_OUTPUTDIR)/lib/jfr.jar,\ + SKIP_METAINF:=true,\ + MANIFEST:=$(MAINMANIFEST), \ + CHECK_COMPRESS_JAR:=true)) + + JARS+=$(JDK_OUTPUTDIR)/lib/jfr.jar +endif + +########################################################################################## + +$(eval $(call SetupArchive,BUILD_JSSE_JAR,,\ + SRCS:=$(JDK_OUTPUTDIR)/classes,\ + INCLUDES:=sun/security/provider/Sun.class \ + sun/security/rsa/SunRsaSign.class \ + sun/security/ssl \ + com/sun/net/ssl/internal/ssl,\ + JAR:=$(JDK_OUTPUTDIR)/lib/jsse.jar,\ + SKIP_METAINF:=true,\ + MANIFEST:=$(MAINMANIFEST), \ + CHECK_COMPRESS_JAR:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/jsse.jar + +########################################################################################## + +ifneq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64) + SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar + + ifndef OPENJDK + + SUNPKCS11_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/pkcs11/sunpkcs11.jar + + $(SUNPKCS11_JAR_DST) : $(SUNPKCS11_JAR_SRC) + @$(ECHO) "\n>>>Installing prebuilt SunPKCS11 provider..." + $(RM) $@ + $(CP) $< $@ + + else + + $(eval $(call SetupArchive,BUILD_SUNPKCS11_JAR,$(SUNPKCS11_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes, \ + SUFFIXES:=.class,\ + INCLUDES:=sun/security/pkcs11,\ + JAR:=$(SUNPKCS11_JAR_DST), \ + SKIP_METAINF := true)) + + endif + + JARS += $(SUNPKCS11_JAR_DST) +endif + +########################################################################################## + +SUNEC_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunec.jar + +ifndef OPENJDK + +SUNEC_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ec/sunec.jar + +$(SUNEC_JAR_DST) : $(SUNEC_JAR_SRC) + @$(ECHO) "\n>>>Installing prebuilt SunEC provider..." + $(RM) $@ + $(CP) $< $@ + +else + +$(eval $(call SetupArchive,BUILD_SUNEC_JAR,,\ + SRCS:=$(JDK_OUTPUTDIR)/classes, \ + SUFFIXES:=.class,\ + INCLUDES:=sun/security/ec,\ + EXCLUDE_FILES := sun/security/ec/ECKeyFactory.class \ + sun/security/ec/ECParameters.class \ + sun/security/ec/ECPrivateKeyImpl.class \ + sun/security/ec/ECPublicKeyImpl.class \ + sun/security/ec/NamedCurve.class \ + sun/security/ec/ECKeyFactory*,\ + JAR:=$(SUNEC_JAR_DST), \ + SKIP_METAINF := true)) + +endif + +JARS += $(SUNEC_JAR_DST) + +########################################################################################## + +$(eval $(call SetupArchive,BUILD_SWINGBEANS_JAR,,\ + SRCS:=$(JDK_OUTPUTDIR)/classes,\ + SUFFIXES:=BeanInfo.class .gif,\ + INCLUDES:=javax/swing sun/swing,\ + EXCLUDES:=javax/swing/plaf,\ + EXTRA_FILES:=javax/swing/SwingBeanInfoBase.class sun/swing/BeanInfoUtils.class,\ + JAR:=$(JDK_OUTPUTDIR)/lib/dt.jar,\ + SKIP_METAINF:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/dt.jar + +########################################################################################## + +SUNJCE_PROVIDER_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunjce_provider.jar + +ifndef OPENJDK + SUNJCE_PROVIDER_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/sunjce_provider.jar + + $(SUNJCE_PROVIDER_JAR_DST) : $(SUNJCE_PROVIDER_JAR_SRC) + @$(ECHO) "\n>>>Installing prebuilt SunJCE provider..." + $(RM) $@ + $(CP) $< $@ +else + + $(eval $(call SetupArchive,BUILD_SUNJCE_PROVIDER_JAR,$(SUNJCE_PROVIDER_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes, \ + SUFFIXES:=.class,\ + INCLUDES:= com/sun/crypto/provider,\ + JAR:=$(SUNJCE_PROVIDER_JAR_DST), \ + MANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf, \ + EXTRA_MANIFEST_ATTR := Extension-Name: javax.crypto\nImplementation-Vendor-Id: com.sun, \ + SKIP_METAINF := true)) +endif + +JARS += $(SUNJCE_PROVIDER_JAR_DST) + +JCE_JAR_DST := $(JDK_OUTPUTDIR)/lib/jce.jar + +ifndef OPENJDK + +JCE_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar + +$(JCE_JAR_DST) : $(JCE_JAR_SRC) + @$(ECHO) "\n>>>Installing prebuilt jce.jar..." + $(RM) $@ + $(CP) $< $@ + +else + +$(eval $(call SetupArchive,BUILD_JCE_JAR,$(JCE_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes, \ + SUFFIXES:=.class,\ + INCLUDES:= javax/crypto sun/security/internal,\ + JAR:=$(JCE_JAR_DST), \ + MANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf, \ + EXTRA_MANIFEST_ATTR := Extension-Name: javax.crypto\nImplementation-Vendor-Id: com.sun, \ + SKIP_METAINF := true)) +endif + +JARS += $(JCE_JAR_DST) + +########################################################################################## + +ifdef OPENJDK + +# +# TODO fix so that SetupArchive does not write files into SRCS +# then we don't need this extra copying +# +US_EXPORT_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar +US_EXPORT_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/javax/crypto/policy/unlimited +US_EXPORT_POLICY_JAR_TMP := $(JDK_OUTPUTDIR)/US_export_policy_jar.tmp + +$(US_EXPORT_POLICY_JAR_TMP)/% : $(US_EXPORT_POLICY_JAR_SRC_DIR)/% + $(MKDIR) -p $(@D) + $(CP) $< $@ + +US_EXPORT_POLICY_JAR_DEPS := $(US_EXPORT_POLICY_JAR_TMP)/default_US_export.policy + +$(eval $(call SetupArchive,BUILD_US_EXPORT_POLICY_JAR,$(US_EXPORT_POLICY_JAR_DEPS),\ + SRCS:=$(US_EXPORT_POLICY_JAR_TMP), \ + SUFFIXES:= .policy,\ + JAR:=$(US_EXPORT_POLICY_JAR_DST), \ + EXTRA_MANIFEST_ATTR := Crypto-Strength: unlimited, \ + SKIP_METAINF := true)) + +JARS += $(US_EXPORT_POLICY_JAR_DST) + +endif + +########################################################################################## + + +ifdef OPENJDK + +# +# TODO fix so that SetupArchive does not write files into SRCS +# then we don't need this extra copying +# +LOCAL_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/local_policy.jar +LOCAL_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/javax/crypto/policy/limited +LOCAL_POLICY_JAR_TMP := $(JDK_OUTPUTDIR)/local_policy_jar.tmp + +LOCAL_POLICY_JAR_DEPS := $(LOCAL_POLICY_JAR_TMP)/exempt_local.policy $(LOCAL_POLICY_JAR_TMP)/default_local.policy + +$(LOCAL_POLICY_JAR_TMP)/% : $(LOCAL_POLICY_JAR_SRC_DIR)/% + $(MKDIR) -p $(@D) + $(CP) $< $@ + +$(eval $(call SetupArchive,BUILD_LOCAL_POLICY_JAR,$(LOCAL_POLICY_JAR_DEPS),\ + SRCS:=$(LOCAL_POLICY_JAR_TMP),\ + SUFFIXES:= .policy,\ + JAR:=$(LOCAL_POLICY_JAR_DST), \ + EXTRA_MANIFEST_ATTR := Crypto-Strength: limited, \ + SKIP_METAINF := true)) + +JARS += $(LOCAL_POLICY_JAR_DST) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS),windows) + +SUNMSCAPI_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunmscapi.jar + +ifndef OPENJDK +SUNMSCAPI_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/mscapi/sunmscapi.jar + +$(SUNMSCAPI_JAR_DST) : $(SUNMSCAPI_JAR_SRC) + @$(ECHO) "\n>>>Installing prebuilt SunMSCAPI provider..." + $(RM) $@ + $(CP) $< $@ + +else + +$(eval $(call SetupArchive,BUILD_SUNMSCAPI_JAR,$(SUNMSCAPI_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes, \ + SUFFIXES:=.class,\ + INCLUDES:= sun/security/mscapi,\ + JAR:=$(SUNMSCAPI_JAR_DST), \ + MANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf, \ + EXTRA_MANIFEST_ATTR := Extension-Name: javax.crypto\nImplementation-Vendor-Id: com.sun, \ + SKIP_METAINF := true)) +endif + +JARS += $(SUNMSCAPI_JAR_DST) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS),solaris) +ifndef OPENJDK + +UCRYPTO_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/ucrypto.jar +UCRYPTO_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ucrypto/ucrypto.jar + +$(UCRYPTO_JAR_DST) : $(UCRYPTO_JAR_SRC) + @$(ECHO) "\n>>>Installing prebuilt OracleUcrypto provider..." + $(RM) $@ + $(CP) $< $@ + +JARS += $(UCRYPTO_JAR_DST) + +endif +endif + +########################################################################################## + +TOOLS_JAR_INCLUDES := \ + sun/tools/asm \ + sun/tools/jar \ + sun/tools/java \ + sun/tools/javac \ + sun/tools/jcmd \ + sun/tools/jps \ + sun/tools/jstat \ + sun/tools/jstatd \ + sun/tools/native2ascii \ + sun/tools/serialver \ + sun/tools/tree \ + sun/tools/util \ + sun/security/tools/JarBASE64Encoder.class \ + sun/security/tools/JarSigner.class \ + sun/security/tools/JarSignerParameters.class \ + sun/security/tools/JarSignerResources.class \ + sun/security/tools/JarSignerResources_ja.class \ + sun/security/tools/JarSignerResources_zh_CN.class \ + sun/security/tools/SignatureFile* \ + sun/security/tools/TimestampedSigner.class \ + sun/rmi/rmic \ + sun/applet \ + sun/jvmstat \ + com/sun/javadoc \ + com/sun/jdi \ + com/sun/jarsigner \ + com/sun/source \ + com/sun/tools/classfile \ + com/sun/tools/doclets \ + com/sun/tools/example/debug/expr \ + com/sun/tools/example/debug/tty \ + com/sun/tools/extcheck \ + com/sun/tools/hat \ + com/sun/tools/javac \ + com/sun/tools/javadoc \ + com/sun/tools/javah \ + com/sun/tools/javap \ + com/sun/tools/corba \ + com/sun/tools/internal/xjc \ + com/sun/tools/internal/ws \ + com/sun/istack/internal/tools \ + com/sun/tools/internal/jxc/ap \ + com/sun/tools/internal/ws/wscompile/plugin/at_generated \ + com/sun/codemodel \ + com/sun/tools/internal/jxc \ + com/sun/xml/internal/rngom \ + com/sun/xml/internal/xsom \ + org/relaxng/datatype \ + com/sun/xml/internal/dtdparser \ + com/sun/tools/jdi \ + com/sun/tools/script/shell \ + com/sun/tools/attach \ + sun/tools/attach \ + sun/tools/jstack \ + sun/tools/jinfo \ + sun/tools/jmap + +$(eval $(call SetupArchive,BUILD_TOOLS_JAR,$(TOOLS_JAR_DEPS),\ + SRCS:=$(JDK_OUTPUTDIR)/classes,\ + SUFFIXES:=.class .prp .gif .properties .xml .css .xsd .js .html .txt .java \ + Tool aliasmap options,\ + INCLUDES:=$(TOOLS_JAR_INCLUDES),\ + EXTRA_FILES:=META-INF/services/com.sun.jdi.connect.Connector \ + META-INF/services/com.sun.jdi.connect.spi.TransportService \ + META-INF/services/com.sun.tools.attach.spi.AttachProvider \ + META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ + META-INF/services/com.sun.tools.internal.xjc.Plugin,\ + JAR:=$(JDK_OUTPUTDIR)/lib/tools.jar,\ + SKIP_METAINF:=true, \ + CHECK_COMPRESS_JAR:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/tools.jar + +########################################################################################## + +include $(JDK_TOPDIR)/makefiles/docs/CORE_PKGS.gmk +include $(JDK_TOPDIR)/makefiles/docs/NON_CORE_PKGS.gmk + +# The compiler should not issue a "Proprietary" warning when compiling +# classes in the com.sun.java.swing.plaf packages, since we've always +# allowed, and even advocated, extending them (see bug 6476749). +# +# This approach is NOT to be used as a general purpose way to avoid such +# compiler warnings for non-core packages. The correct way is to document +# the packages in NON_CORE_PKGS.gmk, and include them in the NON_CORE_PKGS +# definition. +# +# Swing has taken this approach only as a temporary measure to avoid +# the compiler warnings until we can properly document these packages. +# This is covered under 6491853. +EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \ + com.sun.java.swing.plaf.motif \ + com.sun.java.swing.plaf.gtk + +# +# Include the exported private packages in ct.sym. +# This is an interim solution until the ct.sym is replaced +# with a new module system (being discussed for JDK 8). +# +EXPORTED_PRIVATE_PKGS = com.sun.servicetag \ + com.oracle.net \ + com.oracle.nio + +$(IMAGES_OUTPUTDIR)/symbols/_the.symbols: $(JDK_OUTPUTDIR)/lib/rt.jar + $(RM) -rf $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym + $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym + $(JAVA) \ + -Xbootclasspath/a:$(JDK_OUTPUTDIR)/classes \ + $(JAVAC_JARS) \ + -XDprocess.packages -proc:only \ + -processor com.sun.tools.javac.sym.CreateSymbols \ + -Acom.sun.tools.javac.sym.Jar=$(JDK_OUTPUTDIR)/lib/rt.jar \ + -Acom.sun.tools.javac.sym.Dest=$(IMAGES_OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ + $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) $(EXPORTED_PRIVATE_PKGS) + $(TOUCH) $@ + +MAKE_SURE_DIR_EXISTS_DUMMY := $(shell $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols) +$(eval $(call SetupArchive,BUILD_CT_SYM,$(IMAGES_OUTPUTDIR)/symbols/_the.symbols,\ + SRCS:=$(IMAGES_OUTPUTDIR)/symbols,\ + INCLUDES:=META-INF/sym,\ + JAR:=$(JDK_OUTPUTDIR)/lib/ct.sym, \ + CHECK_COMPRESS_JAR:=true)) + +JARS+=$(JDK_OUTPUTDIR)/lib/ct.sym + +########################################################################################## + +SRC_ZIP_INCLUDES = \ + java/applet \ + java/awt \ + java/beans \ + java/io \ + java/lang \ + java/math \ + java/net \ + java/nio \ + java/rmi \ + java/security \ + java/sql \ + java/text \ + java/util \ + com/sun/corba \ + com/sun/image/codec/jpeg \ + com/sun/imageio \ + com/sun/java/swing \ + com/sun/javadoc \ + com/sun/jmx \ + com/sun/source \ + com/sun/naming \ + com/sun/security/auth \ + com/sun/security/jgss \ + javax/accessibility \ + javax/annotation \ + javax/script \ + javax/imageio \ + javax/lang \ + javax/management \ + javax/naming \ + javax/print \ + javax/rmi \ + javax/security \ + javax/sound \ + javax/sql \ + javax/swing \ + javax/tools \ + javax/xml \ + com/sun/org/apache \ + com/sun/java_cup \ + com/sun/jlex \ + org/ietf \ + org/omg \ + org/w3c/dom \ + org/xml/sax \ + sunw + +SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes +SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc +SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/impsrc +SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gendocsrc_rmic +ifndef OPENJDK + SRC_ZIP_SRCS += $(JDK_TOPDIR)/src/closed/share/classes +endif + +# Need to copy launcher src files into desired directory structure +# before zipping the sources. +LAUNCHER_SRC_FILES := $(wildcard $(JDK_TOPDIR)/src/share/bin/*) \ + $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/java_md*) +LAUNCHER_ZIP_SRC := $(patsubst $(JDK_TOPDIR)/src/share/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ + $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ + $(LAUNCHER_SRC_FILES))) + +$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/share/bin/% + $(MKDIR) -p $(@D) + $(CP) $< $@ + +$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/% + $(MKDIR) -p $(@D) + $(CP) $< $@ + +$(IMAGES_OUTPUTDIR)/src.zip: $(LAUNCHER_ZIP_SRC) + +# This dir needs to exsist before macro is evaluated to avoid warning from find. +MAKE_SURE_DIR_EXISTS_DUMMY := $(shell $(MKDIR) -p $(IMAGES_OUTPUTDIR)/src) +$(eval $(call SetupZipArchive,BUILD_SRC_ZIP,\ + SRC:=$(SRC_ZIP_SRCS) $(IMAGES_OUTPUTDIR)/src,\ + INCLUDES:=$(SRC_ZIP_INCLUDES) launcher,\ + SUFFIXES:=.java .c .h,\ + ZIP:=$(IMAGES_OUTPUTDIR)/src.zip,\ + EXTRA_DEPS:=$(LAUNCHER_ZIP_SRC))) + +JARS+=$(IMAGES_OUTPUTDIR)/src.zip + +########################################################################################## + +all: $(JARS) + +.PHONY: default all diff --git a/jdk/makefiles/GendataBreakIterator.gmk b/jdk/makefiles/GendataBreakIterator.gmk index 64068285aff..9c12334b7d9 100644 --- a/jdk/makefiles/GendataBreakIterator.gmk +++ b/jdk/makefiles/GendataBreakIterator.gmk @@ -35,10 +35,10 @@ # TEXT_SRCDIR = $(JDK_TOPDIR)/src/share/classes TEXT_PKG = sun/text/resources -TEXT_SOURCES = %$(TEXT_PKG)/BreakIteratorRules.java \ - %$(TEXT_PKG)/BreakIteratorInfo.java \ - %$(TEXT_PKG)/BreakIteratorRules_th.java \ - %$(TEXT_PKG)/BreakIteratorInfo_th.java +TEXT_SOURCES = $(TEXT_PKG)/BreakIteratorRules.java \ + $(TEXT_PKG)/BreakIteratorInfo.java \ + $(TEXT_PKG)/BreakIteratorRules_th.java \ + $(TEXT_PKG)/BreakIteratorInfo_th.java # Generate BreakIteratorData BREAK_ITERATOR_DIR = $(JDK_OUTPUTDIR)/break_iterator @@ -62,7 +62,7 @@ $(eval $(call SetupJavaCompilation,BUILD_BREAKITERATOR,\ UNICODEDATA = $(JDK_TOPDIR)/make/tools/UnicodeData/UnicodeData.txt # output -DATA_PKG_DIR = $(JDK_OUTPUTDIR)/newclasses/sun/text/resources +DATA_PKG_DIR = $(JDK_OUTPUTDIR)/classes/sun/text/resources BIFILES = $(DATA_PKG_DIR)/CharacterBreakIteratorData \ $(DATA_PKG_DIR)/WordBreakIteratorData \ $(DATA_PKG_DIR)/LineBreakIteratorData \ @@ -75,23 +75,23 @@ $(BREAK_ITERATOR_DIR)/_the.bifiles: JAVA_FLAGS += -Xbootclasspath/p:$(BREAK_ITER $(BREAK_ITERATOR_DIR)/_the.bifiles: $(BUILD_TOOLS) $(UNICODEDATA) $(BUILD_BREAKITERATOR) $(ECHO) "Generating BreakIteratorData" $(MKDIR) -p $(DATA_PKG_DIR) - rm -f $(BIFILES) + $(RM) -f $(BIFILES) $(TOOL_GENERATEBREAKITERATORDATA) \ -o $(DATA_PKG_DIR) \ -spec $(UNICODEDATA) - touch $@ + $(TOUCH) $@ $(BIFILES_TH): $(BREAK_ITERATOR_DIR)/_the.bifiles_th $(BREAK_ITERATOR_DIR)/_the.bifiles_th: JAVA_FLAGS += -Xbootclasspath/p:$(BREAK_ITERATOR_CLASSES) $(BREAK_ITERATOR_DIR)/_the.bifiles_th: $(BUILD_TOOLS) $(UNICODEDATA) $(BUILD_BREAKITERATOR) $(ECHO) "Generating BreakIteratorData_th" $(MKDIR) -p $(DATA_PKG_DIR) - rm -f $(BIFILES_TH) + $(RM) -f $(BIFILES_TH) $(TOOL_GENERATEBREAKITERATORDATA) \ -o $(DATA_PKG_DIR) \ -spec $(UNICODEDATA) \ -language th - touch $@ + $(TOUCH) $@ BREAK_ITERATOR += $(BIFILES) $(BIFILES_TH) diff --git a/jdk/makefiles/GendataFontConfig.gmk b/jdk/makefiles/GendataFontConfig.gmk new file mode 100644 index 00000000000..860b233857f --- /dev/null +++ b/jdk/makefiles/GendataFontConfig.gmk @@ -0,0 +1,86 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENDATA_FONT_CONFIG_DST := $(JDK_OUTPUTDIR)/lib + +ifeq ($(OPENJDK_TARGET_OS), windows) +GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows +GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties +GENDATA_FONT_CONFIG_SRC_PREFIX := +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) +GENDATA_FONT_CONFIG_SRC_PREFIX := linux. +ifdef OPENJDK +GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs +GENDATA_FONT_CONFIG_SRC_FILES := \ + fontconfig.properties \ + fontconfig.SuSE.properties \ + fontconfig.Ubuntu.properties \ + fontconfig.Fedora.properties +else +GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/closed/solaris/classes/sun/awt/fontconfigs +GENDATA_FONT_CONFIG_SRC_FILES := \ + fontconfig.properties \ + fontconfig.RedHat.5.properties \ + fontconfig.RedHat.6.properties \ + fontconfig.Turbo.properties \ + fontconfig.SuSE.10.properties \ + fontconfig.SuSE.11.properties +endif +endif + +ifeq ($(OPENJDK_TARGET_OS), solaris) +GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs +GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties +GENDATA_FONT_CONFIG_SRC_PREFIX := solaris. +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) +GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/macosx/classes/sun/awt/fontconfigs +GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties +GENDATA_FONT_CONFIG_SRC_PREFIX := macosx. +endif # OPENJDK_TARGET_OS + +### + +$(GENDATA_FONT_CONFIG_DST)/%.src : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)% + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(CHMOD) 644 $@ + +$(GENDATA_FONT_CONFIG_DST)/%.bfc : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)%.properties + $(MKDIR) -p $(@D) + $(TOOL_COMPILEFONTCONFIG) $< $@ + $(CHMOD) 444 $@ + +### + +GENDATA_FONT_CONFIGS := $(GENDATA_FONT_CONFIG_SRC_FILES:%=$(GENDATA_FONT_CONFIG_DST)/%.src) +GENDATA_BFONT_CONFIGS := $(GENDATA_FONT_CONFIG_SRC_FILES:%.properties=$(GENDATA_FONT_CONFIG_DST)/%.bfc) + +GENDATA_FONT_CONFIG := $(GENDATA_FONT_CONFIGS) $(GENDATA_BFONT_CONFIGS) + +### diff --git a/jdk/makefiles/mkdemo/jni/Makefile b/jdk/makefiles/GendataHtml32dtd.gmk similarity index 77% rename from jdk/makefiles/mkdemo/jni/Makefile rename to jdk/makefiles/GendataHtml32dtd.gmk index b24a5f32ac6..f1a2c95d55a 100644 --- a/jdk/makefiles/mkdemo/jni/Makefile +++ b/jdk/makefiles/GendataHtml32dtd.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -23,22 +23,13 @@ # questions. # -# -# Makefile for building the jni demo(s) -# +GENDATA_HTML32DTD := -BUILDDIR = ../.. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = - -ifeq ($(PLATFORM),solaris) - SUBDIRS += Poller -endif - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) +HTML32DTD = $(JDK_OUTPUTDIR)/classes/javax/swing/text/html/parser/html32.bdtd +$(HTML32DTD): $(BUILD_TOOLS) + $(ECHO) "Generating HTML DTD file" + $(MKDIR) -p $(@D) + $(RM) $@ + ($(TOOL_DTDBUILDER) html32 > $@) || exit 1 +GENDATA_HTML32DTD += $(HTML32DTD) \ No newline at end of file diff --git a/jdk/makefiles/sun/javazic/Makefile b/jdk/makefiles/GendataTimeZone.gmk similarity index 54% rename from jdk/makefiles/sun/javazic/Makefile rename to jdk/makefiles/GendataTimeZone.gmk index cbe9b6667ef..af1f34451f4 100644 --- a/jdk/makefiles/sun/javazic/Makefile +++ b/jdk/makefiles/GendataTimeZone.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -23,49 +23,34 @@ # questions. # -# Makefile for building javazic utility & TimeZone resource files +GENDATA_TIMEZONE := +# TODO: read from make/sun/javazic/tzdata/VERSION +GENDATA_TIMEZONE_VERSION := tzdata2012c -BUILDDIR = ../.. -PACKAGE = sun.javazic -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk +GENDATA_TIMEZONE_DST := $(JDK_OUTPUTDIR)/lib/zi +GENDATA_TIMEZONE_TMP := $(JDK_OUTPUTDIR)/gendata_timezone -# Time zone data file creation -TZDATA = $(BUILDDIR)/../make/sun/javazic/tzdata/ -TZDATA_VER = `$(GREP) '^tzdata' $(TZDATA)VERSION` -TZFILE = \ +TZFILE0 := \ africa antarctica asia australasia europe northamerica \ pacificnew southamerica backward \ etcetera solar87 solar88 solar89 systemv -JDKTZDATA = $(BUILDDIR)/../make/sun/javazic/tzdata_jdk/ -JDKTZFILES = gmt jdk11_backward -TZFILES = \ - $(addprefix $(TZDATA),$(TZFILE)) \ - $(addprefix $(JDKTZDATA),$(JDKTZFILES)) -WORKDIR = $(TEMPDIR)/zi -INSTALLDIR = $(LIBDIR)/zi -MAPFILE = ZoneInfoMappings +TZFILE1 := \ + gmt jdk11_backward -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk +TZFILES := \ + $(addprefix $(JDK_TOPDIR)/make/sun/javazic/tzdata/,$(TZFILE0)) \ + $(addprefix $(JDK_TOPDIR)/make/sun/javazic/tzdata_jdk/,$(TZFILE1)) -# Add to the build rule -build: $(INSTALLDIR)/$(MAPFILE) +GENDATA_TIMEZONE_MAPFILE:=ZoneInfoMappings -$(WORKDIR)/$(MAPFILE): $(BUILD_TOOLS) $(TZFILES) - $(RM) -r $(@D) - $(prep-target) - $(TOOL_JAVAZIC) -V "$(TZDATA_VER)" -d $(WORKDIR) $(TZFILES) - @$(java-vm-cleanup) +$(GENDATA_TIMEZONE_DST)/$(GENDATA_TIMEZONE_MAPFILE) : $(TZFILES) + $(RM) -rf $(GENDATA_TIMEZONE_TMP) + $(MKDIR) -p $(GENDATA_TIMEZONE_TMP) + $(RM) -rf $(GENDATA_TIMEZONE_DST) + $(MKDIR) -p $(GENDATA_TIMEZONE_DST) + $(TOOL_JAVAZIC) -V "$(GENDATA_TIMEZONE_VERSION)" -d $(GENDATA_TIMEZONE_TMP) $(TZFILES) + $(CP) -r $(GENDATA_TIMEZONE_TMP)/* $(GENDATA_TIMEZONE_DST)/ -$(INSTALLDIR)/$(MAPFILE): $(WORKDIR)/$(MAPFILE) - $(RM) -r $(@D) - $(prep-target) - $(CP) -r $(WORKDIR)/* $(@D) - -clean clobber:: - $(RM) -r $(TEMPDIR) $(INSTALLDIR) +GENDATA_TIMEZONE += $(GENDATA_TIMEZONE_DST)/$(GENDATA_TIMEZONE_MAPFILE) diff --git a/jdk/makefiles/GenerateClasses.gmk b/jdk/makefiles/GenerateClasses.gmk index 8727e51e6f4..dda0558b0b9 100644 --- a/jdk/makefiles/GenerateClasses.gmk +++ b/jdk/makefiles/GenerateClasses.gmk @@ -27,15 +27,18 @@ default: all include $(SPEC) include MakeBase.gmk -include RMICompile.gmk +include RMICompilation.gmk + +# To ensure the latest stub generator files are picked up from corba repo +# when available, we need to run with latest rmic version available. +ifeq ($(CROSS_COMPILE_ARCH),) + RMIC := $(UNCYGDRIVE) $(JDK_OUTPUTDIR)/bin/rmic +endif CLASSES_DIR := $(JDK_OUTPUTDIR)/classes -# Depend on files in newclasses for now to avoid bad dependency handling caused by -# copy always updating timestamps in classes. -NEWCLASSES_DIR := $(JDK_OUTPUTDIR)/newclasses -# Generate classes into separate dir for now. Can't drop in same dir as JavaCompilation -# macros as that will mess up recompile deps. -STUB_CLASSES_DIR := $(JDK_OUTPUTDIR)/newrmicclasses +# NOTE: If the smart javac dependency management is reintroduced, these classes risk +# interfering with the dependency checking. In that case they will need to be kept separate. +STUB_CLASSES_DIR := $(JDK_OUTPUTDIR)/rmicclasses RMIC_GENSRC_DIR := $(JDK_OUTPUTDIR)/gendocsrc_rmic GENCLASSES := @@ -49,7 +52,7 @@ $(eval $(call SetupRMICompilation,RMI_12,\ CLASSES:=sun.rmi.server.Activation$$$$ActivationSystemImpl\ java.rmi.activation.ActivationGroup\ com.sun.jndi.rmi.registry.ReferenceWrapper,\ - CLASSES_DIR:=$(NEWCLASSES_DIR),\ + CLASSES_DIR:=$(CLASSES_DIR),\ STUB_CLASSES_DIR:=$(STUB_CLASSES_DIR),\ RUN_V12:=true)) GENCLASSES += $(RMI_12) @@ -57,7 +60,7 @@ GENCLASSES += $(RMI_12) $(eval $(call SetupRMICompilation,RMI_11,\ CLASSES:=sun.rmi.registry.RegistryImpl\ sun.rmi.transport.DGCImpl,\ - CLASSES_DIR:=$(NEWCLASSES_DIR),\ + CLASSES_DIR:=$(CLASSES_DIR),\ STUB_CLASSES_DIR:=$(STUB_CLASSES_DIR),\ RUN_V11:=true)) GENCLASSES += $(RMI_11) @@ -69,7 +72,7 @@ JMAN_RMI_CLASSES:=javax.management.remote.rmi.RMIConnectionImpl\ javax.management.remote.rmi.RMIServerImpl $(eval $(call SetupRMICompilation,RMI_IIOP,\ CLASSES:=$(JMAN_RMI_CLASSES),\ - CLASSES_DIR:=$(NEWCLASSES_DIR),\ + CLASSES_DIR:=$(CLASSES_DIR),\ STUB_CLASSES_DIR:=$(STUB_CLASSES_DIR),\ RUN_V12:=true,\ RUN_IIOP:=true,\ @@ -80,7 +83,7 @@ GENCLASSES += $(RMI_IIOP) # so that javadoc can include them in the API (4997471) $(eval $(call SetupRMICompilation,RMI_SRC,\ CLASSES:=$(JMAN_RMI_CLASSES),\ - CLASSES_DIR:=$(NEWCLASSES_DIR),\ + CLASSES_DIR:=$(CLASSES_DIR),\ STUB_CLASSES_DIR:=$(RMIC_GENSRC_DIR),\ RUN_V12:=true,\ KEEP_GENERATED:=true)) diff --git a/jdk/makefiles/GenerateData.gmk b/jdk/makefiles/GenerateData.gmk index 389bf965489..54b367cb343 100644 --- a/jdk/makefiles/GenerateData.gmk +++ b/jdk/makefiles/GenerateData.gmk @@ -35,11 +35,44 @@ include Setup.gmk include Tools.gmk # Now include all the rules that generate data resources. -# These are written directly into newclasses dir. +# These are written directly into classes dir. +GENDATA := include GendataBreakIterator.gmk GENDATA += $(BREAK_ITERATOR) +include GendataFontConfig.gmk +GENDATA += $(GENDATA_FONT_CONFIG) + +include GendataTimeZone.gmk +GENDATA += $(GENDATA_TIMEZONE) + +include GendataHtml32dtd.gmk +GENDATA += $(GENDATA_HTML32DTD) + +########################################################################################## + +GENDATA_UNINAME := $(JDK_OUTPUTDIR)/classes/java/lang/uniName.dat + +$(GENDATA_UNINAME): $(JDK_TOPDIR)/make/tools/UnicodeData/UnicodeData.txt $(BUILD_TOOLS) + $(MKDIR) -p $(@D) + $(TOOL_CHARACTERNAME) $< $@ + +GENDATA += $(GENDATA_UNINAME) + +########################################################################################## + +GENDATA_CURDATA := $(JDK_OUTPUTDIR)/lib/currency.data + +$(GENDATA_CURDATA): $(JDK_TOPDIR)/src/share/classes/java/util/CurrencyData.properties $(BUILD_TOOLS) + $(MKDIR) -p $(@D) + $(RM) $@ + $(TOOL_GENERATECURRENCYDATA) -o $@.temp < $< + $(MV) $@.temp $@ + $(CHMOD) 444 $@ + +GENDATA += $(GENDATA_CURDATA) + ########################################################################################## $(GENDATA) : $(BUILD_TOOLS) diff --git a/jdk/makefiles/GenerateJavaSources.gmk b/jdk/makefiles/GenerateJavaSources.gmk index 35c077af8e5..2474bf6586e 100644 --- a/jdk/makefiles/GenerateJavaSources.gmk +++ b/jdk/makefiles/GenerateJavaSources.gmk @@ -53,16 +53,65 @@ GENSRC += $(GENSRC_JDWP) include GensrcMisc.gmk GENSRC += $(GENSRC_MISC) +include GensrcCharsetMapping.gmk +GENSRC += $(GENSRC_CHARSETMAPPING) + +include GensrcCharsetCoder.gmk +GENSRC += $(GENSRC_CHARSETCODER) + +include GensrcBuffer.gmk +GENSRC += $(GENSRC_BUFFER) + +include GensrcExceptions.gmk +GENSRC += $(GENSRC_EXCEPTIONS) + +ifneq ($(OPENJDK_TARGET_OS),windows) +include GensrcIcons.gmk +GENSRC += $(GENSRC_ICONS) + +include GensrcX11Wrappers.gmk +GENSRC += $(GENSRC_X11WRAPPERS) +endif + +include GensrcSwing.gmk +ifndef DISABLE_NIMBUS + GENSRC += $(GENSRC_SWING_NIMBUS) +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + include GensrcJObjC.gmk + GENSRC += $(GENSRC_JOBJC) +endif + $(GENSRC) : $(BUILD_TOOLS) -all: $(GENSRC) +# The exception handling of swing beaninfo +# gensrc_swing/javax/swing/beaninfo/* have not be in src.zip +all: $(GENSRC) $(GENSRC_SWING_BEANINFO) $(MKDIR) -p $(JDK_OUTPUTDIR)/gensrc (cd $(JDK_OUTPUTDIR) && \ - chmod -R u+rw gensrc && \ - cp -rp gensrc_characterdata/* gensrc && \ - cp -rp gensrc_properties/* gensrc && \ - cp -rp gensrc_localedatametainfo/* gensrc && \ - cp -rp gensrc_jdwp/* gensrc && \ - cp -rp gensrc_misc/* gensrc) + $(CHMOD) -R u+rw gensrc && \ + $(CP) -rp gensrc_characterdata/* gensrc && \ + $(CP) -rp gensrc_properties/* gensrc && \ + $(CP) -rp gensrc_localedatametainfo/* gensrc && \ + $(CP) -rp gensrc_jdwp/* gensrc && \ + $(CP) -rp gensrc_misc/* gensrc && \ + $(CP) -rp gensrc_charsetmapping/* gensrc && \ + $(CP) -rp gensrc_charsetcoder/* gensrc && \ + $(CP) -rp gensrc_exceptions/* gensrc && \ + $(CP) -rp gensrc_buffer/* gensrc) + if [ -d $(JDK_OUTPUTDIR)/gensrc_swing/javax/swing/plaf ] ; then \ + (cd $(JDK_OUTPUTDIR) && \ + $(MKDIR) -p gensrc/javax/swing/plaf && \ + $(CP) -rp gensrc_swing/javax/swing/plaf/* gensrc/javax/swing/plaf) \ + fi + if [ -d $(JDK_OUTPUTDIR)/gensrc_jobjc ] ; then \ + (cd $(JDK_OUTPUTDIR) && cp -rp gensrc_jobjc/src/* gensrc) \ + fi +ifneq ($(OPENJDK_TARGET_OS),windows) + (cd $(JDK_OUTPUTDIR) && \ + $(CP) -rp gensrc_icons/* gensrc && \ + $(CP) -rp gensrc_x11wrappers/classes/* gensrc) +endif .PHONY: all diff --git a/jdk/makefiles/GensrcBuffer.gmk b/jdk/makefiles/GensrcBuffer.gmk new file mode 100644 index 00000000000..4ae466ebef7 --- /dev/null +++ b/jdk/makefiles/GensrcBuffer.gmk @@ -0,0 +1,372 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENSRC_BUFFER := + +GENSRC_BUFFER_TMP := $(JDK_OUTPUTDIR)/gensrc_buffer +GENSRC_BUFFER_DST := $(JDK_OUTPUTDIR)/gensrc_buffer/java/nio + +GENSRC_BUFFER_SRC := $(JDK_TOPDIR)/src/share/classes/java/nio + +### + +$(GENSRC_BUFFER_DST)/_the.dir : + $(ECHO) "Generating buffer classes" + $(MKDIR) -p $(@D) + $(TOUCH) $@ + +define fixRw + $1_RW := $2 + $1_rwkey := rw + ifeq (R,$2) + $1_rwkey := ro + endif +endef + +define typesAndBits + # param 1 target + # param 2 type + # param 3 BO + $1_a := a + $1_A := A + + $1_type := $2 + + ifeq ($2, byte) + $1_x := b + $1_Type := Byte + $1_fulltype := byte + $1_Fulltype := Byte + $1_category := integralType + $1_LBPV := 0 + endif + + ifeq ($2, char) + $1_x := c + $1_Type := Char + $1_fulltype := character + $1_Fulltype := Character + $1_category := integralType + $1_LBPV := 1 + endif + + ifeq ($2, short) + $1_x := s + $1_Type := Short + $1_fulltype := short + $1_Fulltype := Short + $1_category := integralType + $1_LBPV := 1 + endif + + ifeq ($2, int) + $1_a := an + $1_A := An + $1_x := i + $1_Type := Int + $1_fulltype := integer + $1_Fulltype := Integer + $1_category := integralType + $1_LBPV := 2 + endif + + ifeq ($2, long) + $1_x := l + $1_Type := Long + $1_fulltype := long + $1_Fulltype := Long + $1_category := integralType + $1_LBPV := 3 + endif + + ifeq ($2, float) + $1_x := f + $1_Type := Float + $1_fulltype := float + $1_Fulltype := Float + $1_category := floatingPointType + $1_LBPV := 2 + endif + + ifeq ($2, double) + $1_x := d + $1_Type := Double + $1_fulltype := double + $1_Fulltype := Double + $1_category := floatingPointType + $1_LBPV := 3 + endif + + $1_Swaptype := $$($1_Type) + $1_memtype := $2 + $1_Memtype := $$($1_Type) + + ifeq ($2, float) + $1_memtype := int + $1_Memtype := Int + ifneq ($3,U) + $1_Swaptype := Int + $1_fromBits := Float.intBitsToFloat + $1_toBits := Float.floatToRawIntBits + endif + endif + + ifeq ($2, double) + $1_memtype := long + $1_Memtype := Long + ifneq ($3,U) + $1_Swaptype := Long + $1_fromBits := Double.longBitsToDouble + $1_toBits := Double.doubleToRawLongBits + endif + endif + + ifeq ($3, S) + $1_swap := Bits.swap + endif +endef + +define genBinOps + # param 1 target + # param 2 type + # param 3 BO + # param 4 RW + # param 5 nbytes + # param 6 nbytesButOne + $(call typesAndBits,$1,$2,$3) + $(call fixRw,$1,$4) + $1_nbytes := $5 + $1_nbytesButOne := $6 + $1_CMD := $(TOOL_SPP) \ + -Dtype=$$($1_type) \ + -DType=$$($1_Type) \ + -Dfulltype=$$($1_fulltype) \ + -Dmemtype=$$($1_memtype) \ + -DMemtype=$$($1_Memtype) \ + -DfromBits=$$($1_fromBits) \ + -DtoBits=$$($1_toBits) \ + -DLG_BYTES_PER_VALUE=$$($1_LBPV) \ + -DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \ + -Dnbytes=$$($1_nbytes) \ + -DnbytesButOne=$$($1_nbytesButOne) \ + -DRW=$$($1_RW) \ + -K$$($1_rwkey) \ + -Da=$$($1_a) \ + -be +endef + +define SetupGenBuffer + # param 1 is for output file + # param 2 is template dependency + # param 3-9 are named args. + # type := + # BIN := + # RW := Mutability (R)ead-only (W)ritable + # BO := (U)nswapped/(S)wapped/(L)ittle/(B)ig + # + $(if $3,$1_$(strip $3)) + $(if $4,$1_$(strip $4)) + $(if $5,$1_$(strip $5)) + $(if $6,$1_$(strip $6)) + $(if $7,$1_$(strip $7)) + $(if $8,$1_$(strip $8)) + $(if $9,$1_$(strip $9)) + $(if $(10),$1_$(strip $(10))) + $(if $(11),$1_$(strip $(11))) + $(if $(12),$1_$(strip $(12))) + $(if $(13),$1_$(strip $(13))) + $(if $(14),$1_$(strip $(14))) + $(if $(15),$(error Internal makefile error: Too many arguments to SetupGenBuffer, please update GensrcBuffer.gmk)) + + $(call fixRw,$1,$$($1_RW)) + $(call typesAndBits,$1,$$($1_type),$$($1_BO)) + + $1_DST := $(GENSRC_BUFFER_DST)/$1.java + $1_SRC := $(GENSRC_BUFFER_SRC)/$(strip $2).java.template + $1_SRC_BIN := $(GENSRC_BUFFER_SRC)/$(strip $2)-bin.java.template + + $1_DEP := $$($1_SRC) + ifneq ($$($1_BIN),1) + $1_DEP := $$($1_SRC) + $1_OUT := $$($1_DST) + else + $1_DEP += $$($1_SRC) $$($1_SRC_BIN) + $1_OUT := $(GENSRC_BUFFER_DST)/$1.binop.0.java + endif + + ifeq ($$($1_BIN),1) + $(call genBinOps,$1_char,char,$$($1_BO),$$($1_RW),two,one) + $(call genBinOps,$1_short,short,$$($1_BO),$$($1_RW),two,one) + $(call genBinOps,$1_int,int,$$($1_BO),$$($1_RW),four,three) + $(call genBinOps,$1_long,long,$$($1_BO),$$($1_RW),eight,seven) + $(call genBinOps,$1_float,float,$$($1_BO),$$($1_RW),four,three) + $(call genBinOps,$1_double,double,$$($1_BO),$$($1_RW),eight,seven) + endif + +$$($1_DST) : $$($1_DEP) $(GENSRC_BUFFER_DST)/_the.dir + $(TOOL_SPP) < $$($1_SRC) > $$($1_OUT).temp \ + -K$$($1_type) \ + -K$$($1_category) \ + -Dtype=$$($1_type) \ + -DType=$$($1_Type) \ + -Dfulltype=$$($1_fulltype) \ + -DFulltype=$$($1_Fulltype) \ + -Dx=$$($1_x) \ + -Dmemtype=$$($1_memtype) \ + -DMemtype=$$($1_Memtype) \ + -DSwaptype=$$($1_Swaptype) \ + -DfromBits=$$($1_fromBits) \ + -DtoBits=$$($1_toBits) \ + -DLG_BYTES_PER_VALUE=$$($1_LBPV) \ + -DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \ + -DBO=$$($1_BO) \ + -Dswap=$$($1_swap) \ + -DRW=$$($1_RW) \ + -K$$($1_rwkey) \ + -Da=$$($1_a) \ + -DA=$$($1_A) \ + -Kbo$$($1_BO) + $(MV) $$($1_OUT).temp $$($1_OUT) +# Do the extra bin thing +ifeq ($$($1_BIN),1) + $(SED) -e '/#BIN/,$$$$d' < $$($1_OUT) > $$($1_DST).temp + $(RM) $$($1_OUT) + $$($1_char_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp + $$($1_short_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp + $$($1_int_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp + $$($1_long_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp + $$($1_float_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp + $$($1_double_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp + $(PRINTF) "}\n" >> $$($1_DST).temp + mv $$($1_DST).temp $$($1_DST) +endif + +GENSRC_BUFFER += $$($1_DST) + +endef + +### + +X_BUF :=X-Buffer + +$(eval $(call SetupGenBuffer,ByteBuffer, $(X_BUF),type:=byte,BIN:=1)) +$(eval $(call SetupGenBuffer,CharBuffer, $(X_BUF),type:=char)) +$(eval $(call SetupGenBuffer,ShortBuffer, $(X_BUF),type:=short)) +$(eval $(call SetupGenBuffer,IntBuffer, $(X_BUF),type:=int)) +$(eval $(call SetupGenBuffer,LongBuffer, $(X_BUF),type:=long)) +$(eval $(call SetupGenBuffer,FloatBuffer, $(X_BUF),type:=float)) +$(eval $(call SetupGenBuffer,DoubleBuffer,$(X_BUF),type:=double)) + +# Buffers whose contents are heap-allocated +# +HEAP_X_BUF := Heap-X-Buffer + +$(eval $(call SetupGenBuffer,HeapByteBuffer, $(HEAP_X_BUF),type:=byte)) +$(eval $(call SetupGenBuffer,HeapByteBufferR, $(HEAP_X_BUF),type:=byte,RW:=R)) +$(eval $(call SetupGenBuffer,HeapCharBuffer, $(HEAP_X_BUF),type:=char)) +$(eval $(call SetupGenBuffer,HeapCharBufferR, $(HEAP_X_BUF),type:=char,RW:=R)) +$(eval $(call SetupGenBuffer,HeapShortBuffer, $(HEAP_X_BUF),type:=short)) +$(eval $(call SetupGenBuffer,HeapShortBufferR, $(HEAP_X_BUF),type:=short,RW:=R)) +$(eval $(call SetupGenBuffer,HeapIntBuffer, $(HEAP_X_BUF),type:=int)) +$(eval $(call SetupGenBuffer,HeapIntBufferR, $(HEAP_X_BUF),type:=int,RW:=R)) +$(eval $(call SetupGenBuffer,HeapLongBuffer, $(HEAP_X_BUF),type:=long)) +$(eval $(call SetupGenBuffer,HeapLongBufferR, $(HEAP_X_BUF),type:=long,RW:=R)) +$(eval $(call SetupGenBuffer,HeapFloatBuffer, $(HEAP_X_BUF),type:=float)) +$(eval $(call SetupGenBuffer,HeapFloatBufferR, $(HEAP_X_BUF),type:=float,RW:=R)) +$(eval $(call SetupGenBuffer,HeapDoubleBuffer, $(HEAP_X_BUF),type:=double)) +$(eval $(call SetupGenBuffer,HeapDoubleBufferR,$(HEAP_X_BUF),type:=double,RW:=R)) + +# Direct byte buffer +# +DIRECT_X_BUF := Direct-X-Buffer + +$(eval $(call SetupGenBuffer,DirectByteBuffer, $(DIRECT_X_BUF),type:=byte,BIN:=1)) +$(eval $(call SetupGenBuffer,DirectByteBufferR,$(DIRECT_X_BUF),type:=byte,BIN:=1,RW:=R)) + +# Unswapped views of direct byte buffers +# +$(eval $(call SetupGenBuffer,DirectCharBufferU, $(DIRECT_X_BUF),type:=char,BO:=U)) +$(eval $(call SetupGenBuffer,DirectCharBufferRU, $(DIRECT_X_BUF),type:=char,RW:=R,BO:=U)) +$(eval $(call SetupGenBuffer,DirectShortBufferU, $(DIRECT_X_BUF),type:=short,BO:=U)) +$(eval $(call SetupGenBuffer,DirectShortBufferRU, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=U)) +$(eval $(call SetupGenBuffer,DirectIntBufferU, $(DIRECT_X_BUF),type:=int,BO:=U)) +$(eval $(call SetupGenBuffer,DirectIntBufferRU, $(DIRECT_X_BUF),type:=int,RW:=R,BO:=U)) +$(eval $(call SetupGenBuffer,DirectLongBufferU, $(DIRECT_X_BUF),type:=long,BO:=U)) +$(eval $(call SetupGenBuffer,DirectLongBufferRU, $(DIRECT_X_BUF),type:=long,RW:=R,BO:=U)) +$(eval $(call SetupGenBuffer,DirectFloatBufferU, $(DIRECT_X_BUF),type:=float,BO:=U)) +$(eval $(call SetupGenBuffer,DirectFloatBufferRU, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=U)) +$(eval $(call SetupGenBuffer,DirectDoubleBufferU, $(DIRECT_X_BUF),type:=double,BO:=U)) +$(eval $(call SetupGenBuffer,DirectDoubleBufferRU,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=U)) + +# Swapped views of direct byte buffers +# +$(eval $(call SetupGenBuffer,DirectCharBufferS, $(DIRECT_X_BUF),type:=char,BO:=S)) +$(eval $(call SetupGenBuffer,DirectCharBufferRS, $(DIRECT_X_BUF),type:=char,RW:=R,BO:=S)) +$(eval $(call SetupGenBuffer,DirectShortBufferS, $(DIRECT_X_BUF),type:=short,BO:=S)) +$(eval $(call SetupGenBuffer,DirectShortBufferRS, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=S)) +$(eval $(call SetupGenBuffer,DirectIntBufferS, $(DIRECT_X_BUF),type:=int,BO:=S)) +$(eval $(call SetupGenBuffer,DirectIntBufferRS, $(DIRECT_X_BUF),type:=int,RW:=R,BO:=S)) +$(eval $(call SetupGenBuffer,DirectLongBufferS, $(DIRECT_X_BUF),type:=long,BO:=S)) +$(eval $(call SetupGenBuffer,DirectLongBufferRS, $(DIRECT_X_BUF),type:=long,RW:=R,BO:=S)) +$(eval $(call SetupGenBuffer,DirectFloatBufferS, $(DIRECT_X_BUF),type:=float,BO:=S)) +$(eval $(call SetupGenBuffer,DirectFloatBufferRS, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=S)) +$(eval $(call SetupGenBuffer,DirectDoubleBufferS, $(DIRECT_X_BUF),type:=double,BO:=S)) +$(eval $(call SetupGenBuffer,DirectDoubleBufferRS,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=S)) + +# Big-endian views of byte buffers +# +BYTE_X_BUF := ByteBufferAs-X-Buffer + +$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferB, $(BYTE_X_BUF),type:=char,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRB, $(BYTE_X_BUF),type:=char,RW:=R,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferB, $(BYTE_X_BUF),type:=short,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRB, $(BYTE_X_BUF),type:=short,RW:=R,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferB, $(BYTE_X_BUF),type:=int,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRB, $(BYTE_X_BUF),type:=int,RW:=R,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferB, $(BYTE_X_BUF),type:=long,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRB, $(BYTE_X_BUF),type:=long,RW:=R,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferB, $(BYTE_X_BUF),type:=float,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRB, $(BYTE_X_BUF),type:=float,RW:=R,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferB, $(BYTE_X_BUF),type:=double,BO:=B)) +$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRB,$(BYTE_X_BUF),type:=double,RW:=R,BO:=B)) + +# Little-endian views of byte buffers +# +$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferL, $(BYTE_X_BUF),type:=char,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRL, $(BYTE_X_BUF),type:=char,RW:=R,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferL, $(BYTE_X_BUF),type:=short,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRL, $(BYTE_X_BUF),type:=short,RW:=R,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferL, $(BYTE_X_BUF),type:=int,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRL, $(BYTE_X_BUF),type:=int,RW:=R,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferL, $(BYTE_X_BUF),type:=long,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRL, $(BYTE_X_BUF),type:=long,RW:=R,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferL, $(BYTE_X_BUF),type:=float,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRL, $(BYTE_X_BUF),type:=float,RW:=R,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferL, $(BYTE_X_BUF),type:=double,BO:=L)) +$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRL,$(BYTE_X_BUF),type:=double,RW:=R,BO:=L)) + +### + +$(GENSRC_BUFFER) : $(BUILD_TOOLS) diff --git a/jdk/makefiles/GensrcCharacterData.gmk b/jdk/makefiles/GensrcCharacterData.gmk index 5321305f7ea..630b547e2b1 100644 --- a/jdk/makefiles/GensrcCharacterData.gmk +++ b/jdk/makefiles/GensrcCharacterData.gmk @@ -34,8 +34,8 @@ UNICODEDATA = $(JDK_TOPDIR)/make/tools/UnicodeData define SetupCharacterData $(JDK_OUTPUTDIR)/gensrc_characterdata/java/lang/$1.java : $(CHARACTERDATA)/$1.java.template $(BUILD_TOOLS) - mkdir -p $$(@D) - echo Generating $1.java + $(MKDIR) -p $$(@D) + $(ECHO) Generating $1.java $(TOOL_GENERATECHARACTER) $2 \ -template $(CHARACTERDATA)/$1.java.template \ -spec $(UNICODEDATA)/UnicodeData.txt \ @@ -56,7 +56,7 @@ $(eval $(call SetupCharacterData,CharacterData0E,-plane 14,11 4 1)) # Copy two Java files that need no preprocessing. $(JDK_OUTPUTDIR)/gensrc_characterdata/java/lang/%.java : $(CHARACTERDATA)/%.java.template $(MKDIR) -p $(@D) - echo Generating $(@F) + $(ECHO) Generating $(@F) $(CP) -f $< $@ GENSRC_CHARACTERDATA += $(JDK_OUTPUTDIR)/gensrc_characterdata/java/lang/CharacterDataUndefined.java \ diff --git a/jdk/makefiles/GensrcCharsetCoder.gmk b/jdk/makefiles/GensrcCharsetCoder.gmk new file mode 100644 index 00000000000..40b953eed9c --- /dev/null +++ b/jdk/makefiles/GensrcCharsetCoder.gmk @@ -0,0 +1,107 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENSRC_CHARSETCODER := + +GENSRC_CHARSETCODER_TMP := $(JDK_OUTPUTDIR)/gensrc_charsetcoder +GENSRC_CHARSETCODER_DST := $(JDK_OUTPUTDIR)/gensrc_charsetcoder/java/nio/charset + +GENSRC_CHARSETCODER_SRC := $(JDK_TOPDIR)/src/share/classes/java/nio + +GENSRC_CHARSETCODER_TEMPLATE := $(GENSRC_CHARSETCODER_SRC)/charset/Charset-X-Coder.java.template + +### + +$(GENSRC_CHARSETCODER_DST)/CharsetDecoder.java : $(GENSRC_CHARSETCODER_TEMPLATE) + $(MKDIR) -p $(@D) + -$(RM) $@.temp + $(TOOL_SPP) < $< >$@.temp \ + -Kdecoder \ + -DA='A' \ + -Da='a' \ + -DCode='Decode' \ + -Dcode='decode' \ + -DitypesPhrase='bytes in a specific charset' \ + -DotypesPhrase='sixteen-bit Unicode characters' \ + -Ditype='byte' \ + -Dotype='character' \ + -DItype='Byte' \ + -DOtype='Char' \ + -Dcoder='decoder' \ + -DCoder='Decoder' \ + -Dcoding='decoding' \ + -DOtherCoder='Encoder' \ + -DreplTypeName='string' \ + -DdefaultRepl='"\\uFFFD"' \ + -DdefaultReplName='"\\uFFFD"<\/tt>' \ + -DreplType='String' \ + -DreplFQType='java.lang.String' \ + -DreplLength='length()' \ + -DItypesPerOtype='CharsPerByte' \ + -DnotLegal='not legal for this charset' \ + -Dotypes-per-itype='chars-per-byte' \ + -DoutSequence='Unicode character' + $(MV) $@.temp $@ + +GENSRC_CHARSETCODER += $(GENSRC_CHARSETCODER_DST)/CharsetDecoder.java + +### + +$(GENSRC_CHARSETCODER_DST)/CharsetEncoder.java : $(GENSRC_CHARSETCODER_TEMPLATE) + $(MKDIR) -p $(@D) + -$(RM) $@.temp + $(TOOL_SPP) < $< >$@.temp \ + -Kencoder \ + -DA='An' \ + -Da='an' \ + -DCode='Encode' \ + -Dcode='encode' \ + -DitypesPhrase='sixteen-bit Unicode characters' \ + -DotypesPhrase='bytes in a specific charset' \ + -Ditype='character' \ + -Dotype='byte' \ + -DItype='Char' \ + -DOtype='Byte' \ + -Dcoder='encoder' \ + -DCoder='Encoder' \ + -Dcoding='encoding' \ + -DOtherCoder='Decoder' \ + -DreplTypeName='byte array' \ + -DdefaultRepl='new byte[] { (byte)'"'"\\?"'"' }' \ + -DdefaultReplName='{<\/tt>\ (byte)'"'"\\?"'"'<\/tt>\ }<\/tt>' \ + -DreplType='byte[]' \ + -DreplFQType='byte[]' \ + -DreplLength='length' \ + -DItypesPerOtype='BytesPerChar' \ + -DnotLegal='not a legal sixteen-bit Unicode sequence' \ + -Dotypes-per-itype='bytes-per-char' \ + -DoutSequence='byte sequence in the given charset' + $(MV) $@.temp $@ + +GENSRC_CHARSETCODER += $(GENSRC_CHARSETCODER_DST)/CharsetEncoder.java + +### + +$(GENSRC_CHARSETCODER) : $(BUILD_TOOLS) diff --git a/jdk/makefiles/GensrcCharsetMapping.gmk b/jdk/makefiles/GensrcCharsetMapping.gmk new file mode 100644 index 00000000000..6ff21ad624e --- /dev/null +++ b/jdk/makefiles/GensrcCharsetMapping.gmk @@ -0,0 +1,105 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENSRC_CHARSETMAPPING:= + +GENSRC_TMP := $(JDK_OUTPUTDIR)/gensrc_charsetmapping +GENSRC_DST := $(JDK_OUTPUTDIR)/gensrc_charsetmapping/sun/nio/cs + +GENSRC_SRC := $(JDK_TOPDIR)/make/tools/CharsetMapping +GENSRC_JAVA_SRC := $(JDK_TOPDIR)/make/tools/src/build/tools/charsetmapping + +GENSRC_TEMPLATES := $(GENSRC_SRC)/SingleByte-X.java.template $(GENSRC_SRC)/DoubleByte-X.java.template + +### + +$(GENSRC_TMP)/_the.dir : + $(ECHO) Generating charsetmapping classes + $(MKDIR) -p $(GENSRC_DST)/ext + $(TOUCH) $@ + +### + +GENSRC_SB := $(GENSRC_TMP)/gensrc_the.charsetmapping.sbcs + +$(GENSRC_SB) : $(GENSRC_SRC)/sbcs $(GENSRC_TEMPLATES) $(GENSRC_TMP)/_the.dir + $(TOOL_CHARSETMAPPING) $(GENSRC_SRC) $(GENSRC_DST) sbcs + $(TOUCH) $@ + +GENSRC_CHARSETMAPPING += $(GENSRC_SB) + +### + +$(GENSRC_DST)/ext/sjis0213.dat : $(GENSRC_SRC)/sjis0213.map $(GENSRC_SB) + $(TOOL_CHARSETMAPPING) $< $@ sjis0213 + +GENSRC_CHARSETMAPPING += $(GENSRC_DST)/ext/sjis0213.dat + +### + +$(GENSRC_DST)/ext/EUC_TWMapping.java : $(GENSRC_JAVA_SRC)/EUC_TW.java $(GENSRC_SB) + $(TOOL_CHARSETMAPPING) $(GENSRC_SRC) $(GENSRC_DST)/ext euctw $(GENSRC_JAVA_SRC)/EUC_TW.java + +GENSRC_CHARSETMAPPING += $(GENSRC_DST)/ext/EUC_TWMapping.java + +### + +$(GENSRC_DST)/ext/HKSCSMapping.java : $(GENSRC_JAVA_SRC)/HKSCS.java $(GENSRC_SB) + $(TOOL_CHARSETMAPPING) $(GENSRC_SRC) $(GENSRC_DST)/ext hkscs $(GENSRC_JAVA_SRC)/HKSCS.java + +GENSRC_CHARSETMAPPING += $(GENSRC_DST)/ext/HKSCSMapping.java + +### + +$(GENSRC_TMP)/gensrc_the.charsetmapping.extsbcs : $(GENSRC_SRC)/extsbcs $(GENSRC_TEMPLATES) $(GENSRC_SB) + $(TOOL_CHARSETMAPPING) $(GENSRC_SRC) $(GENSRC_DST)/ext extsbcs + $(TOUCH) $@ + +GENSRC_CHARSETMAPPING += $(GENSRC_TMP)/gensrc_the.charsetmapping.extsbcs + +### + +$(GENSRC_TMP)/gensrc_the.charsetmapping.dbcs : $(GENSRC_SRC)/dbcs $(GENSRC_TEMPLATES) $(GENSRC_SB) + $(TOOL_CHARSETMAPPING) $(GENSRC_SRC) $(GENSRC_DST)/ext dbcs + $(TOUCH) $@ + +GENSRC_CHARSETMAPPING += $(GENSRC_TMP)/gensrc_the.charsetmapping.dbcs + +### + +GENSRC_CHARSET_PROVIDER_CMD := $(JDK_TOPDIR)/makefiles/scripts/genCharsetProvider.sh + +$(GENSRC_DST)/StandardCharsets.java : $(JDK_TOPDIR)/src/share/classes/sun/nio/cs/standard-charsets \ + $(GENSRC_CHARSET_PROVIDER_CMD) \ + $(GENSRC_TMP)/_the.dir + + NAWK="$(NAWK)" TEMPDIR="$(GENSRC_TMP)" SH="$(SH)" \ + HASHER="$(TOOL_HASHER)" \ + SCRIPTS="$(JDK_TOPDIR)/makefiles/scripts" \ + $(SH) -e $(GENSRC_CHARSET_PROVIDER_CMD) $< $(@D) + +GENSRC_CHARSETMAPPING += $(GENSRC_DST)/StandardCharsets.java + +$(GENSRC_CHARSETMAPPING) : $(BUILD_TOOLS) diff --git a/jdk/makefiles/LegacyMakefiles.gmk b/jdk/makefiles/GensrcExceptions.gmk similarity index 54% rename from jdk/makefiles/LegacyMakefiles.gmk rename to jdk/makefiles/GensrcExceptions.gmk index 96e4badcd89..1a1f71769da 100644 --- a/jdk/makefiles/LegacyMakefiles.gmk +++ b/jdk/makefiles/GensrcExceptions.gmk @@ -23,35 +23,33 @@ # questions. # -include $(SPEC) -include MakeBase.gmk +GENSRC_EXCEPTIONS := -all: $(JDK_OUTPUTDIR)/_the.legacy_make +GENSRC_EXCEPTIONS_TMP := $(JDK_OUTPUTDIR)/gensrc_exceptions +GENSRC_EXCEPTIONS_DST := $(JDK_OUTPUTDIR)/gensrc_exceptions/java/nio -DEPS:= $(shell $(FIND) $(JDK_TOPDIR)/makefiles/java -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/javax -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/sun -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/com -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/apple -type f) +GENSRC_EXCEPTIONS_SRC := $(JDK_TOPDIR)/src/share/classes/java/nio +GENSRC_EXCEPTIONS_CMD := $(JDK_TOPDIR)/makefiles/scripts/genExceptions.sh -$(JDK_OUTPUTDIR)/_the.legacy_make: $(DEPS) - (echo Building single threaded Java subdir && \ - $(MAKE) -j1 -C java all && \ - (if test "$(PLATFORM)" = macosx; then \ - echo Building single threaded Apple subdir && \ - $(MAKE) -j1 -C apple all; \ - fi) && \ - echo Building single threaded javax subdir && \ - $(MAKE) -j1 -C javax all && \ - echo Building single threaded sun subdir && \ - $(MAKE) -j1 -C sun all && \ - echo Building single threaded com subdir && \ - $(MAKE) -j1 -C com all && \ - if [ -z "$(OPENJDK)" ]; then \ - echo Building single threaded altclasses subdir && \ - $(MAKE) -j1 -C altclasses all; \ - fi && \ - touch $@) +GENSRC_EXCEPTIONS_SRC_DIRS := . charset channels -.PHONY: all +### +$(GENSRC_EXCEPTIONS_DST)/_the.dir : + $(ECHO) "Generating exceptions classes" + $(MKDIR) -p $(@D) + $(TOUCH) $@ + + +### + +$(GENSRC_EXCEPTIONS_DST)/_the.% : $(GENSRC_EXCEPTIONS_SRC)/%/exceptions \ + $(GENSRC_EXCEPTIONS_CMD) \ + $(GENSRC_EXCEPTIONS_DST)/_the.dir + $(MKDIR) -p $(@D)/$* + SCRIPTS="$(JDK_TOPDIR)/makefiles/scripts" NAWK="$(NAWK)" SH="$(SH)" $(SH) $(GENSRC_EXCEPTIONS_CMD) $< $(@D)/$* + $(TOUCH) $@ + +GENSRC_EXCEPTIONS += $(foreach D,$(GENSRC_EXCEPTIONS_SRC_DIRS),$(GENSRC_EXCEPTIONS_DST)/_the.$(D)) + +$(GENSRC_EXCEPTIONS) : $(BUILD_TOOLS) diff --git a/jdk/makefiles/GensrcIcons.gmk b/jdk/makefiles/GensrcIcons.gmk new file mode 100644 index 00000000000..733f25461a9 --- /dev/null +++ b/jdk/makefiles/GensrcIcons.gmk @@ -0,0 +1,112 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENSRC_ICONS := +GENSRC_ICONS_SRC := +GENSRC_ICONS_TMP := $(JDK_OUTPUTDIR)/gensrc_icons +GENSRC_ICONS_DST := $(GENSRC_ICONS_TMP)/sun/awt/X11 + +ifdef OPENJDK + ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API) +else + ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/closed/solaris +endif + +GENSRC_ICONS_SRC += \ + $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon16.png \ + $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon24.png \ + $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon32.png \ + $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png + + +ICONPATH := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/awt/X11 + +GENSRC_ICONS_SRC += \ + $(ICONPATH)/security-icon-bw16.png \ + $(ICONPATH)/security-icon-interim16.png \ + $(ICONPATH)/security-icon-yellow16.png \ + $(ICONPATH)/security-icon-bw24.png \ + $(ICONPATH)/security-icon-interim24.png \ + $(ICONPATH)/security-icon-yellow24.png \ + $(ICONPATH)/security-icon-bw32.png \ + $(ICONPATH)/security-icon-interim32.png \ + $(ICONPATH)/security-icon-yellow32.png \ + $(ICONPATH)/security-icon-bw48.png \ + $(ICONPATH)/security-icon-interim48.png \ + $(ICONPATH)/security-icon-yellow48.png + +GENSRC_ICONS_FILES := $(notdir $(GENSRC_ICONS_SRC)) + +GENSRC_ICONS_SHORT_NAME = $(subst .,_,$(subst -,_,$(1))) +GENSRC_ICONS_DST_NAME = XAWTIcon$(2)_$(subst .,_,$(subst -,_,$(1))) + +### + +$(GENSRC_ICONS_TMP)/_the.dir : + $(ECHO) Generating icon classes + $(MKDIR) -p $(GENSRC_ICONS_DST) + $(TOUCH) $@ + +### + +define SetupGensrcIcon + # param 1 is for src-file + # param 2 is for src-dir + $1_SHORTNAME := $(call GENSRC_ICONS_SHORT_NAME,$1) + $1_NAME32 := $(call GENSRC_ICONS_DST_NAME,$1,32) + $1_TARGET32 := $(GENSRC_ICONS_DST)/$$($1_NAME32).java + $1_NAME64 := $(call GENSRC_ICONS_DST_NAME,$1,64) + $1_TARGET64 := $(GENSRC_ICONS_DST)/$$($1_NAME64).java + +$$($1_TARGET32) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir + $(RM) $$@ $$@.tmp + $(ECHO) "package sun.awt.X11;" > $$@.tmp + $(ECHO) "public class $$($1_NAME32) {" >> $$@.tmp + $(ECHO) "public static int[] $$($1_SHORTNAME) = { " >> $$@.tmp +# TODO FIX FIX FIX +ifneq ($(OPENJDK_TARGET_OS),macosx) + $(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp +endif + $(ECHO) "}; }" >> $$@.tmp + $(MV) $$@.tmp $$@ + +GENSRC_ICONS += $$($1_TARGET32) + +$$($1_TARGET64) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir + $(RM) $$@ $$@.tmp + $(ECHO) "package sun.awt.X11;" > $$@.tmp + $(ECHO) "public class $$($1_NAME64) {" >> $$@.tmp + $(ECHO) "public static long[] $$($1_SHORTNAME) = { " >> $$@.tmp +# TODO FIX FIX FIX +ifneq ($(OPENJDK_TARGET_OS),macosx) + $(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp +endif + $(ECHO) "}; }" >> $$@.tmp + $(MV) $$@.tmp $$@ + +GENSRC_ICONS += $$($1_TARGET64) +endef + +$(foreach I,$(GENSRC_ICONS_SRC), $(eval $(call SetupGensrcIcon,$(notdir $(I)),$(dir $(I))))) diff --git a/jdk/makefiles/GensrcJDWP.gmk b/jdk/makefiles/GensrcJDWP.gmk index 7a0a06716bc..e469ab977cd 100644 --- a/jdk/makefiles/GensrcJDWP.gmk +++ b/jdk/makefiles/GensrcJDWP.gmk @@ -29,8 +29,8 @@ $(JDK_OUTPUTDIR)/gensrc_jdwp_headers/JDWPCommands.h : $(JDK_TOPDIR)/makefiles/jpda/jdwp/jdwp.spec $(JDK_OUTPUTDIR)/gensrc_jdwp/com/sun/tools/jdi/JDWP.java : $(JDK_TOPDIR)/makefiles/jpda/jdwp/jdwp.spec - mkdir -p $(@D) - mkdir -p $(JDK_OUTPUTDIR)/gensrc_jdwp_headers + $(MKDIR) -p $(@D) + $(MKDIR) -p $(JDK_OUTPUTDIR)/gensrc_jdwp_headers $(ECHO) Creating JDWP.java and JDWPCommands.h from jdwp.spec $(TOOL_JDWPGEN) $< -jdi $@ -include $(JDK_OUTPUTDIR)/gensrc_jdwp_headers/JDWPCommands.h diff --git a/jdk/makefiles/GensrcJObjC.gmk b/jdk/makefiles/GensrcJObjC.gmk new file mode 100644 index 00000000000..d44df8193df --- /dev/null +++ b/jdk/makefiles/GensrcJObjC.gmk @@ -0,0 +1,80 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENSRC_JOBJC := + +JOBJC_FRAMEWORKS := Foundation CoreFoundation AppKit +FRAMEWORKS_DIR := /System/Library/Frameworks +GBM := /usr/bin/gen_bridge_metadata + +JOBJC_SRC := $(JDK_TOPDIR)/src/macosx/native/jobjc +JOBJC_TMP := $(JDK_OUTPUTDIR)/gensrc_jobjc +JOBJC_DST := $(JDK_OUTPUTDIR)/gensrc_jobjc/src + +# +# Build generator +# +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_PRIMITIVE_CODER,\ + SETUP:=GENERATE_OLDBYTECODE,\ + INCLUDES:=core/java \ + com/apple,\ + HEADERS :=$(JOBJC_DST)/jni_headers/core ,\ + SRC:=$(JOBJC_SRC)/src \ + $(JOBJC_SRC)/src/generator/java, \ + BIN:=$(JOBJC_TMP)/bin)) + +GENSRC_JOBJC += $(JOBJC_TMP)/bin/_the.batch + +# +# Generate bridge support +# +BRIDGESUPPORT := $(addprefix $(JOBJC_TMP)/bridge/,$(addsuffix Full.bridgesupport,$(JOBJC_FRAMEWORKS))) + +$(JOBJC_TMP)/bridge/%Full.bridgesupport : $(FRAMEWORKS_DIR)/%.framework/Headers/*.h + $(MKDIR) -p $(@D) + if [ -f $(FRAMEWORKS_DIR)/$*.framework/Resources/BridgeSupport/$(@F) ]; then \ + cp $(FRAMEWORKS_DIR)/$*.framework/Resources/BridgeSupport/$(@F) $@ ;\ + else \ + $(GBM) -F complete --framework $* -o $@ ; \ + fi + +# +# Find Xbootclasspath +# +$(JOBJC_TMP)/_the.generator_bootclasspath : $(JOBJC_TMP)/bin/_the.batch + $(JAVA) -cp $(JOBJC_TMP)/bin com.apple.internal.jobjc.generator.BootClassPathMinus JObjC.jar > $@.tmp + $(MV) $@.tmp $@ + + +# +# Run generator +# +TOOL_JOBJC := $(JAVA) -cp $(JOBJC_TMP)/bin -ea com.apple.internal.jobjc.generator.Generator + +$(JOBJC_TMP)/_the.generator : $(JOBJC_TMP)/bin/_the.batch $(JOBJC_TMP)/_the.generator_bootclasspath $(BRIDGESUPPORT) + $(JAVA) -d64 -Xbootclasspath:`$(CAT) $(JOBJC_TMP)/_the.generator_bootclasspath` -cp $(JOBJC_TMP)/bin -ea com.apple.internal.jobjc.generator.Generator dst=$(JOBJC_DST) frameworks=$(JOBJC_TMP)/bridge + $(TOUCH) $@ + +GENSRC_JOBJC += $(JOBJC_TMP)/_the.generator diff --git a/jdk/makefiles/GensrcLocaleDataMetaInfo.gmk b/jdk/makefiles/GensrcLocaleDataMetaInfo.gmk index 1e3c19201fe..7e9229d84f1 100644 --- a/jdk/makefiles/GensrcLocaleDataMetaInfo.gmk +++ b/jdk/makefiles/GensrcLocaleDataMetaInfo.gmk @@ -84,10 +84,26 @@ $(eval SED_ARGS+=-e $(call CAPTURE_LOCALE,CalendarData,Non,filter)) $(JDK_OUTPUTDIR)/gensrc_localedatametainfo/sun/util/LocaleDataMetaInfo.java: \ $(JDK_TOPDIR)/src/share/classes/sun/util/LocaleDataMetaInfo-XLocales.java.template - mkdir -p $(@D) + $(MKDIR) -p $(@D) $(ECHO) Creating sun/util/LocaleDataMetaInfo.java from $(words $(LOCALE_RESOURCES)) found resources. $(PRINTF) "PREV_LOCALE_RESOURCES:=$(LOCALE_RESOURCES)" > $(JDK_OUTPUTDIR)/gensrc_localedatametainfo/_the.locale_resources $(SED) $(SED_ARGS) $(JDK_TOPDIR)/src/share/classes/sun/util/LocaleDataMetaInfo-XLocales.java.template \ > $(JDK_OUTPUTDIR)/gensrc_localedatametainfo/sun/util/LocaleDataMetaInfo.java GENSRC_LOCALEDATAMETAINFO:=$(JDK_OUTPUTDIR)/gensrc_localedatametainfo/sun/util/LocaleDataMetaInfo.java + +### + +GENSRC_CRBC_DST := $(JDK_OUTPUTDIR)/gensrc_localedatametainfo/sun/util/CoreResourceBundleControl.java +GENSRC_CRBC_CMD := $(JDK_TOPDIR)/makefiles/scripts/localelist.sh + +JRE_NONEXIST_LOCALES := en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh + +$(GENSRC_CRBC_DST) : $(JDK_TOPDIR)/src/share/classes/sun/util/CoreResourceBundleControl-XLocales.java.template \ + $(GENSRC_CRBC_CMD) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SED="$(SED)" $(SH) $(GENSRC_CRBC_CMD) "$(JRE_NONEXIST_LOCALES)" $< $@ + +GENSRC_LOCALEDATAMETAINFO += $(GENSRC_CRBC_DST) + +### diff --git a/jdk/makefiles/GensrcMisc.gmk b/jdk/makefiles/GensrcMisc.gmk index e7d1ba657e5..08d64bbe8c0 100644 --- a/jdk/makefiles/GensrcMisc.gmk +++ b/jdk/makefiles/GensrcMisc.gmk @@ -31,7 +31,7 @@ $(JDK_OUTPUTDIR)/gensrc_misc/sun/misc/Version.java: \ $(JDK_TOPDIR)/src/share/classes/sun/misc/Version.java.template $(MKDIR) -p $(@D) - echo Generating sun/misc/Version.java + $(ECHO) Generating sun/misc/Version.java $(SED) -e 's/@@launcher_name@@/$(LAUNCHER_NAME)/g' \ -e 's/@@java_version@@/$(RELEASE)/g' \ -e 's/@@java_runtime_version@@/$(FULL_VERSION)/g' \ @@ -46,16 +46,16 @@ GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/misc/Version.java $(JDK_OUTPUTDIR)/gensrc_misc/sun/tools/jconsole/Version.java: \ $(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/Version.java.template $(MKDIR) -p $(@D) - echo Generating sun/tools/jconsole/Version.java + $(ECHO) Generating sun/tools/jconsole/Version.java $(SED) -e 's/@@jconsole_version@@/$(FULL_VERSION)/g' $< > $@ GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/tools/jconsole/Version.java ########################################################################################## -ifeq ($(HOST_OS_API),posix) - UPSUFFIX:=$(PLATFORM) - ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS_API),posix) + UPSUFFIX:=$(OPENJDK_TARGET_OS) + ifeq ($(OPENJDK_TARGET_OS),macosx) UPSUFFIX:=bsd endif # UNIXProcess.java is different for solaris and linux. We need to copy @@ -64,7 +64,7 @@ ifeq ($(HOST_OS_API),posix) $(JDK_OUTPUTDIR)/gensrc_misc/java/lang/UNIXProcess.java : \ $(JDK_TOPDIR)/src/solaris/classes/java/lang/UNIXProcess.java.$(UPSUFFIX) $(MKDIR) -p $(@D) - echo Copying UNIXProcess.java.$(PLATFORM) to java/lang/UNIXProcess.java + $(ECHO) Copying UNIXProcess.java.$(OPENJDK_TARGET_OS) to java/lang/UNIXProcess.java $(CP) $< $@ $(CHMOD) u+rw $@ @@ -72,3 +72,127 @@ ifeq ($(HOST_OS_API),posix) endif ########################################################################################## + +ifndef OPENJDK +ifneq ($(OPENJDK_TARGET_OS), windows) +ifneq ($(OPENJDK_TARGET_OS), macosx) + # These file(s) are needed for building fake .so libs on !windows for jdbcodbc + + $(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc/dummyodbc1.c : + $(MKDIR) -p $(@D) + $(ECHO) Creating $@ + $(PRINTF) "void dummyOdbc(void){}\n" > $@ + $(ECHO) Created $@ + + $(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc/dummyodbc2.c : + $(MKDIR) -p $(@D) + $(ECHO) Creating $@ + $(PRINTF) "void dummyOdbc(void){}\n" > $@ + $(ECHO) Created $@ + + GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc/dummyodbc1.c $(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc/dummyodbc2.c +endif +endif +endif + +########################################################################################## + +GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java + +GENSRC_SOR_SRC := $(JDK_TOPDIR)/src/share/native/sun/nio/ch +GENSRC_SOR_SRC_FILE := genSocketOptionRegistry.c +GENSRC_SOR_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genSocketOptionRegistry + +SOR_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOR_SRC)/$(GENSRC_SOR_SRC_FILE) | \ + $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') + +$(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOR_EXE,\ + SRC:=$(GENSRC_SOR_SRC),\ + INCLUDE_FILES:=$(GENSRC_SOR_SRC_FILE),\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + OBJECT_DIR:=$(GENSRC_SOR_BIN),\ + OUTPUT_DIR:=$(GENSRC_SOR_BIN),\ + PROGRAM:=genSocketOptionRegistry)) + +ifneq ($(JAVASE_EMBEDDED), true) +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(BUILD_GENSRC_SOR_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_SOR_EXE) >> $@.tmp + $(MV) $@.tmp $@ +else +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(JDK_TOPDIR)/src/closed/solaris/classes/sun/nio/ch/SocketOptionRegistry-$(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH).java + $(MKDIR) -p $(@D) + $(CP) $< $@ +endif + +########################################################################################## + +ifneq ($(OPENJDK_TARGET_OS),windows) + +GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java + +GENSRC_UC_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs +GENSRC_UC_SRC_FILE := genUnixConstants.c +GENSRC_UC_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genUnixConstants + +UC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_UC_SRC)/$(GENSRC_UC_SRC_FILE) | \ + $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') + +$(eval $(call SetupNativeCompilation,BUILD_GENSRC_UC_EXE,\ + SRC:=$(GENSRC_UC_SRC),\ + INCLUDE_FILES:=$(GENSRC_UC_SRC_FILE),\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_CC),\ + OBJECT_DIR:=$(GENSRC_UC_BIN),\ + OUTPUT_DIR:=$(GENSRC_UC_BIN),\ + PROGRAM:=genUnixConstants)) + +ifneq ($(JAVASE_EMBEDDED), true) +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(BUILD_GENSRC_UC_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(UC_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_UC_EXE) >> $@.tmp + $(MV) $@.tmp $@ +else +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(JDK_TOPDIR)/src/closed/solaris/classes/sun/nio/fs/UnixConstants-$(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH).java + $(MKDIR) -p $(@D) + $(CP) $< $@ +endif + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS),solaris) + +GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java + +GENSRC_SOL_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs +GENSRC_SOL_SRC_FILE := genSolarisConstants.c +GENSRC_SOL_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genSolarisConstants + +SOL_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOL_SRC)/$(GENSRC_SOL_SRC_FILE) | \ + $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') + +$(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOL_EXE,\ + SRC:=$(GENSRC_SOL_SRC),\ + INCLUDE_FILES:=$(GENSRC_SOL_SRC_FILE),\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_CC),\ + OBJECT_DIR:=$(GENSRC_SOL_BIN),\ + OUTPUT_DIR:=$(GENSRC_SOL_BIN),\ + PROGRAM:=genSolarisConstants)) + +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java : $(BUILD_GENSRC_SOL_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOL_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_SOL_EXE) >> $@.tmp + $(MV) $@.tmp $@ + + +endif diff --git a/jdk/makefiles/GensrcProperties.gmk b/jdk/makefiles/GensrcProperties.gmk index 3226f33dd01..f4eea941f33 100644 --- a/jdk/makefiles/GensrcProperties.gmk +++ b/jdk/makefiles/GensrcProperties.gmk @@ -46,7 +46,7 @@ define add_properties_to_compile # Strip away prefix and suffix, # leaving for example: sun/util/resources/CurrencyNames_sv - $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/%.properties,%,\ + $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/%.properties,%,\ $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2)) # Apply optional name transformation, example: hz_TW -> hz_HK @@ -75,7 +75,7 @@ define add_properties_to_clean # Strip away prefix and suffix, # leaving for example: sun/util/resources/CurrencyNames_sv - $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/%.properties,%,\ + $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/%.properties,%,\ $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2)) # Apply optional name transformation, example: hz_TW -> hz_HK @@ -85,7 +85,7 @@ define add_properties_to_clean ALL_CLEANED_PROPSOURCES+=$2 # Generate the list of to be created java files. - $1_PROPOUTPUT:=$$(patsubst %,$(JDK_OUTPUTDIR)/newclasses/%.properties,$$($1_PROPPATHS)) + $1_PROPOUTPUT:=$$(patsubst %,$(JDK_OUTPUTDIR)/classes/%.properties,$$($1_PROPPATHS)) # If the properties target file isn't in a "resources" dir, add one. ifneq ($5,) $1_PROPOUTPUT:=$$(foreach p,$$($1_PROPOUTPUT), $$(dir $$p)$5/$$(notdir $$p)) @@ -121,9 +121,32 @@ $(eval $(call add_properties_to_compile,COM_SUN_ACCESSIBILITY_HK,\ $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/accessibility/internal/resources -name "*.properties"),\ ListResourceBundle,%zh_TW,%zh_HK)) #com/sun/imageio/plugins/common +$(eval $(call add_properties_to_clean,COM_SUN_IMAGEIO,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/imageio -name "*.properties"))) #com/sun/java/swing/plaf/gtk/resources +ifneq ($(OPENJDK_TARGET_OS), windows) +# Only compile GTK resource bundles on Solaris/Linux +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources -name "*.properties"),\ + ListResourceBundle)) +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK_HK,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources -name "*.properties"),\ + ListResourceBundle,%zh_TW,%zh_HK)) +endif #com/sun/java/swing/plaf/motif/resources +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_MOTIF,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif/resources -name "*.properties"),\ + ListResourceBundle)) +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_MOTIF_HK,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif/resources -name "*.properties"),\ + ListResourceBundle,%zh_TW,%zh_HK)) #com/sun/java/swing/plaf/windows/resources +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_WINDOWS,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/resources -name "*.properties"),\ + ListResourceBundle)) +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_WINDOWS_HK,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/resources -name "*.properties"),\ + ListResourceBundle,%zh_TW,%zh_HK)) #com/sun/java/util/jar/pack $(eval $(call add_properties_to_clean,JNDI_COSNAMING,\ $(JDK_TOPDIR)/src/share/classes/com/sun/java/util/jar/pack/intrinsic.properties)) @@ -149,8 +172,26 @@ $(eval $(call add_properties_to_clean,COM_SUN_ROWSET_HK,\ #com/sun/servicetag/resources #com/sun/swing/internal/plaf/basic/resources +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_BASIC,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/basic/resources -name "*.properties"),\ + ListResourceBundle)) +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_BASIC_HK,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/basic/resources -name "*.properties"),\ + ListResourceBundle,%zh_TW,%zh_HK)) #com/sun/swing/internal/plaf/metal/resources +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_METAL,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/metal/resources -name "*.properties"),\ + ListResourceBundle)) +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_METAL_HK,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/metal/resources -name "*.properties"),\ + ListResourceBundle,%zh_TW,%zh_HK)) #com/sun/swing/internal/plaf/synth/resources +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_SYNTH,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/synth/resources -name "*.properties"),\ + ListResourceBundle)) +$(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_SYNTH_HK,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/synth/resources -name "*.properties"),\ + ListResourceBundle,%zh_TW,%zh_HK)) #com/sun/tools/jdi/resources $(eval $(call add_properties_to_compile,COM_SUN_TOOLS_JDI,\ @@ -160,6 +201,8 @@ $(eval $(call add_properties_to_compile,COM_SUN_TOOLS_JDI,\ #com/sun/tools/script/shell #java/util #javax/sql/rowset +$(eval $(call add_properties_to_clean,JAVAX_SQL_ROWSET,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/javax/sql/rowset -name "*.properties"))) #sun/awt/resources $(eval $(call add_properties_to_compile,SUN_AWT,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/awt/resources -name "*.properties"),\ @@ -175,6 +218,12 @@ $(eval $(call add_properties_to_compile,SUN_LAUNCHER_HK,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/launcher/resources -name "*.properties"),\ ListResourceBundle,%zh_TW,%zh_HK)) #sun/management/resources +$(eval $(call add_properties_to_compile,SUN_MANAGEMENT,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/sun/management/resources -name "*.properties"),\ + ListResourceBundle)) +$(eval $(call add_properties_to_compile,SUN_MANAGEMENT_KH,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/sun/management/resources -name "*.properties"),\ + ListResourceBundle,%zh_TW,%zh_HK)) #sun/print #sun/print/resources $(eval $(call add_properties_to_compile,SUN_PRINT,\ @@ -215,6 +264,10 @@ $(eval $(call add_properties_to_compile,SUN_TOOLS_JAR_HK,\ $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/javac/resources -name "javac.properties"))) +#sun/tools/jconsole/resources +$(eval $(call add_properties_to_clean,SUN_TOOLS_JCONSOLE,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources -name "*.properties"))) + #sun/tools/serialver $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/serialver -name "*.properties"),,,resources)) @@ -231,31 +284,30 @@ $(eval $(call add_properties_to_compile,SUN_UTIL,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/util/resources -name "*.properties"),\ LocaleNamesBundle)) - # Now setup the rule for the generation of the resource bundles. $(JDK_OUTPUTDIR)/gensrc_properties/_the.compiled_properties : $(ALL_COMPILED_PROPSOURCES) $(BUILD_TOOLS) $(RM) -rf $(JDK_OUTPUTDIR)/gensrc_properties/* # Generate all output directories in advance since the build tool does not do that... $(MKDIR) -p $(sort $(dir $(ALL_COMPILED_PROPJAVAS))) - echo Compiling $(words $(ALL_COMPILED_PROPSOURCES)) properties into resource bundles + $(ECHO) Compiling $(words $(ALL_COMPILED_PROPSOURCES)) properties into resource bundles $(call ListPathsSafely,COMPILE_PROPCMDLINE,\n, >> $(JDK_OUTPUTDIR)/gensrc_properties/_the.cmdline) $(TOOL_COMPILEPROPERTIES) -quiet @$(JDK_OUTPUTDIR)/gensrc_properties/_the.cmdline - touch $@ + $(TOUCH) $@ # Now setup the rule for the generation of the cleaned properties. # FIXME: We currently don't handle removed properties incrementally. -$(JDK_OUTPUTDIR)/newclasses/_the.cleaned_properties : $(ALL_CLEANED_PROPSOURCES) $(BUILD_TOOLS) - $(RM) -f $(JDK_OUTPUTDIR)/newclasses/_the.cleaned_properties.cmdline +$(JDK_OUTPUTDIR)/classes/_the.cleaned_properties : $(ALL_CLEANED_PROPSOURCES) $(BUILD_TOOLS) + $(RM) -f $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline # Generate all output directories in advance since the build tool does not do that... $(MKDIR) -p $(sort $(dir $(ALL_CLEANED_PROPOUTPUT))) - echo Copying and cleaning $(words $(ALL_CLEANED_PROPSOURCES)) properties - $(call ListPathsSafely,CLEAN_PROPCMDLINE,\n, >> $(JDK_OUTPUTDIR)/newclasses/_the.cleaned_properties.cmdline) - $(TOOL_STRIPPROPERTIES) @$(JDK_OUTPUTDIR)/newclasses/_the.cleaned_properties.cmdline - touch $@ + $(ECHO) Copying and cleaning $(words $(ALL_CLEANED_PROPSOURCES)) properties + $(call ListPathsSafely,CLEAN_PROPCMDLINE,\n, >> $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline) + $(TOOL_STRIPPROPERTIES) @$(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline + $(TOUCH) $@ $(ALL_COMPILED_PROPJAVAS) : $(JDK_OUTPUTDIR)/gensrc_properties/_the.compiled_properties -$(ALL_CLEANED_PROPOUTPUT) : $(JDK_OUTPUTDIR)/newclasses/_the.cleaned_properties +$(ALL_CLEANED_PROPOUTPUT) : $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties # Some zh_HK resources are just copied of zh_TW @@ -265,7 +317,9 @@ $(JDK_OUTPUTDIR)/gensrc_properties/%_zh_HK.java: $(JDK_TOPDIR)/src/share/classes ZH_HK_JAVA:= sun/applet/resources/MsgAppletViewer_zh_HK.java \ sun/misc/resources/Messages_zh_HK.java \ - sun/security/util/AuthResources_zh_HK.java + sun/security/util/AuthResources_zh_HK.java \ + sun/security/util/Resources_zh_HK.java + ZH_HK_JAVA_FILES:=$(addprefix $(JDK_OUTPUTDIR)/gensrc_properties/,$(ZH_HK_JAVA)) diff --git a/jdk/makefiles/GensrcSwing.gmk b/jdk/makefiles/GensrcSwing.gmk new file mode 100644 index 00000000000..3c0043e695d --- /dev/null +++ b/jdk/makefiles/GensrcSwing.gmk @@ -0,0 +1,91 @@ +# +# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# +# Generate java files for javax.swing.plaf package +# +NIMBUS_PACKAGE = javax.swing.plaf +NIMBUS_GENSRC_DIR = $(JDK_OUTPUTDIR)/gensrc_swing/javax/swing/plaf/nimbus +NIMBUS_SKIN_FILE = $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/nimbus/skin.laf + +$(JDK_OUTPUTDIR)/gensrc_swing/_the.generated_nimbus: $(NIMBUS_SKIN_FILE) $(BUILD_TOOLS) + $(MKDIR) -p $(@D) + $(ECHO) "Generating Nimbus source files:" + $(TOOL_GENERATENIMBUS) \ + -skinFile $(NIMBUS_SKIN_FILE) -buildDir $(JDK_OUTPUTDIR)/gensrc_swing \ + -packagePrefix $(NIMBUS_PACKAGE).nimbus -lafName Nimbus + $(ECHO) "Finished generating Nimbus source files" + $(TOUCH) $@ + +GENSRC_SWING_NIMBUS := $(JDK_OUTPUTDIR)/gensrc_swing/_the.generated_nimbus + +# +# Generate beaninfo java files +# + +BEAN_GENSRC_DIR = $(JDK_OUTPUTDIR)/gensrc_swing/javax/swing/beaninfo +DOCLETSRC_DIR = $(JDK_TOPDIR)/make/tools/swing-beans + +# javax.swing package +BEANS = AbstractButton Box JComponent JApplet JButton \ + JCheckBox JCheckBoxMenuItem JComboBox JColorChooser \ + JDesktopPane JDialog JEditorPane JFileChooser JFrame \ + JFormattedTextField JInternalFrame JLabel JLayeredPane \ + JList JMenu JMenuBar JMenuItem JOptionPane JPanel \ + JPasswordField JPopupMenu JProgressBar JRadioButton \ + JRadioButtonMenuItem JScrollBar JScrollPane JSeparator \ + JSlider JSplitPane JSpinner JTabbedPane JTable \ + JTextArea JTextField JTextPane JToggleButton JToolBar \ + JTree JWindow + +# javax.swing.text package +BEANS_TEXT = JTextComponent + +BEANS_SRC = $(BEANS:%=$(JDK_TOPDIR)/src/share/classes/javax/swing/%.java) \ + $(BEANS_TEXT:%=$(JDK_TOPDIR)/src/share/classes/javax/swing/text/%.java) + +# Dummy variable so far, in the old build system it was false by default +SWINGBEAN_DEBUG_FLAG = false +# GenDocletBeanInfo is compiled in Tools.gmk and picks up from $(JDK_OUTPUTDIR)/btclasses +$(JDK_OUTPUTDIR)/gensrc_swing/_the.generated_beaninfo: $(BEANS_SRC) $(BEAN_GENSRC_DIR)/SwingBeanInfoBase.java $(BEAN_GENSRC_DIR)/BeanInfoUtils.java $(BUILD_TOOLS) + $(JAVA) -Djava.awt.headless=true -jar $(JAVADOC_JARS) -doclet GenDocletBeanInfo -x $(SWINGBEAN_DEBUG_FLAG) -d $(BEAN_GENSRC_DIR) -t $(DOCLETSRC_DIR)/SwingBeanInfo.template -docletpath $(JDK_OUTPUTDIR)/btclasses \ + -classpath $(JDK_OUTPUTDIR)/btclasses $(BEANS_SRC) + $(TOUCH) $@ + +# This file is the part of dt.jar +# For some reason it is under $(JDK_TOPDIR)/make/tools/swing-beans/beaninfo +# Should it be moved under $(JDK_TOPDIR)/src/share/classes/javax/swing instead? +$(BEAN_GENSRC_DIR)/SwingBeanInfoBase.java: $(DOCLETSRC_DIR)/beaninfo/SwingBeanInfoBase.java + $(MKDIR) -p $(@D) + $(CP) $< $@ + +# This file is the part of dt.jar +# For some reason it is under $(JDK_TOPDIR)/make/tools/swing-beans/beaninfo +# Should it be moved under $(JDK_TOPDIR)/src/share/classes/sun/swing instead? +$(BEAN_GENSRC_DIR)/BeanInfoUtils.java: $(DOCLETSRC_DIR)/beaninfo/BeanInfoUtils.java + $(MKDIR) -p $(@D) + $(CP) $< $@ + +GENSRC_SWING_BEANINFO = $(JDK_OUTPUTDIR)/gensrc_swing/_the.generated_beaninfo diff --git a/jdk/makefiles/GensrcX11Wrappers.gmk b/jdk/makefiles/GensrcX11Wrappers.gmk new file mode 100644 index 00000000000..9dca546d1f8 --- /dev/null +++ b/jdk/makefiles/GensrcX11Wrappers.gmk @@ -0,0 +1,102 @@ +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENSRC_X11WRAPPERS := +GENSRC_X11WRAPPERS_TMP := $(JDK_OUTPUTDIR)/gensrc_x11wrappers + +GENSRC_SIZER_SRC := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/X11/generator + +GENSRC_SIZES := + +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-i386) +GENSRC_SIZES := sizes.32 sizes.64 +else ifeq ($(OPENJDK_TARGET_OS), solaris) +isalist:=$(shell isainfo) +ifneq (,$(findstring sparcv9, $(isalist))) +# On sparcv9 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL. +GENSRC_SIZES := sizes.32 sizes.64 +else +ifneq (,$(findstring amd64, $(isalist))) +# On amd64 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL. +GENSRC_SIZES := sizes.32 sizes.64 +else # !sparcv9 : includes (32-bit) sparc, i586 +GENSRC_SIZES := sizes.32 +endif # amd64 +endif # sparcv9 +else # !solaris +ifeq ($(OPENJDK_TARGET_OS), macosx) +GENSRC_SIZES := sizes.32 sizes.64 +else # !macosx +GENSRC_SIZES := sizes.$(ARCH_DATA_MODEL) +endif # !macosx +endif # solaris + + +########################################################################################## + +$(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.c : $(GENSRC_SIZER_SRC)/xlibtypes.txt + $(MKDIR) -p $(@D) + $(RM) $@ + $(TOOL_WRAPPERGENERATOR) $(@D) $< "sizer" $* + +$(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.exe : $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.c + (cd $(@D) && $(HOST_CC) -m$* -o $@ $< \ + -I$(JDK_OUTPUTDIR)/include \ + -I$(JDK_TOPDIR)/src/share/javavm/export \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export \ + -I$(JDK_TOPDIR)//src/share/native/common \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/common \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/awt \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils -lc) + +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-i386) + +$(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.32 : $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.32.exe + $< > $@.tmp + $(MV) $@.tmp $@ + +$(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 : $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/awt/X11/generator/sizes.64-$(OPENJDK_TARGET_OS)-$(LIBARCH) + $(MKDIR) -p $(@D) + $(CP) $< $@ +else + +$(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.% : $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.exe + $< > $@.tmp + $(MV) $@.tmp $@ + +endif + +$(GENSRC_X11WRAPPERS_TMP)/classes/_the.classes : $(foreach S,$(GENSRC_SIZES),$(GENSRC_X11WRAPPERS_TMP)/sizer/$(S)) + $(MKDIR) -p $(@D)/sun/awt/X11 + $(RM) $(@D)/sun/awt/X11/* + $(TOOL_WRAPPERGENERATOR) $(@D)/sun/awt/X11 $(GENSRC_SIZER_SRC)/xlibtypes.txt "gen" $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-amd64) + $(ECHO) COMPARING $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 and $(GENSRC_SIZER_SRC)/sizes.64-$(OPENJDK_TARGET_OS)-i386 + $(DIFF) $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 $(GENSRC_SIZER_SRC)/sizes.64-$(OPENJDK_TARGET_OS)-i386 +endif + $(TOUCH) $@ + +GENSRC_X11WRAPPERS += $(GENSRC_X11WRAPPERS_TMP)/classes/_the.classes diff --git a/jdk/makefiles/Images.gmk b/jdk/makefiles/Images.gmk index 4d5c3be71ef..bda32366082 100644 --- a/jdk/makefiles/Images.gmk +++ b/jdk/makefiles/Images.gmk @@ -28,47 +28,590 @@ include MakeBase.gmk include JavaCompilation.gmk include Setup.gmk -default: $(IMAGES_OUTPUTDIR)/_the.images +default: images include Tools.gmk -JARS:= +images: jre-image jdk-image -########################################################################################## - -JCONSOLE_JAR_DEPS := \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses/sun/tools/jconsole/ -name "_the.package") \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses/com/sun/tools/jconsole/ -name "_the.package") - -$(eval $(call SetupArchive,BUILD_JCONSOLE_JAR,$(JCONSOLE_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses,\ - SUFFIXES:=.class .gif .png,\ - INCLUDES:=sun/tools/jconsole com/sun/tools/jconsole,\ - JARMAIN:=sun.tools.jconsole.JConsole,\ - JAR:=$(JDK_OUTPUTDIR)/lib/jconsole.jar,\ - SKIP_METAINF:=true)) - -JARS+=$(JDK_OUTPUTDIR)/lib/jconsole.jar - -########################################################################################## - -# Need to define BUILDDIR for Release.gmk to work -BUILDDIR=$(JDK_TOPDIR)/makefiles -include common/Defs.gmk -include common/Release.gmk - -# A rudimentary attempt at band-aiding the dependency tracking. -DEPS:= $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses -name "*.class" -type f) \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f) \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/lib -type f) - -$(IMAGES_OUTPUTDIR)/_the.images : $(DEPS) $(JARS) +ifeq ($(OPENJDK_TARGET_OS),solaris) +define install-file + $(MKDIR) -p $(@D) + $(CP) -f -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -fpRP '$<' '$@' +endef +else +define install-file + $(MKDIR) -p $(@D) + $(CP) -fP '$<' '$@' +endef +endif + +################################################################################ +# +# JRE and JDK build rules +# +################################################################################ + +################################################################################ +# /bin dir + +$(JRE_IMAGE_DIR)/bin/%: $(JDK_OUTPUTDIR)/bin/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +$(JDK_IMAGE_DIR)/bin/%: $(JDK_OUTPUTDIR)/bin/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +$(JDK_IMAGE_DIR)/jre/bin/%: $(JDK_OUTPUTDIR)/bin/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +NOT_JRE_BIN_FILES := \ + appletviewer$(EXE_SUFFIX) \ + extcheck$(EXE_SUFFIX) \ + idlj$(EXE_SUFFIX) \ + jar$(EXE_SUFFIX) \ + jarsigner$(EXE_SUFFIX) \ + java-rmi.cgi \ + javac$(EXE_SUFFIX) \ + javadoc$(EXE_SUFFIX) \ + javah$(EXE_SUFFIX) \ + javap$(EXE_SUFFIX) \ + jcmd$(EXE_SUFFIX) \ + jdb$(EXE_SUFFIX) \ + jps$(EXE_SUFFIX) \ + jrunscript$(EXE_SUFFIX) \ + jstat$(EXE_SUFFIX) \ + jstatd$(EXE_SUFFIX) \ + jstack$(EXE_SUFFIX) \ + packagebean$(SCRIPT_SUFFIX) \ + rmic$(EXE_SUFFIX) \ + serialver$(EXE_SUFFIX) \ + unregbean$(EXE_SUFFIX) \ + jconsole$(EXE_SUFFIX) \ + jinfo$(EXE_SUFFIX) \ + jmap$(EXE_SUFFIX) \ + native2ascii$(EXE_SUFFIX) \ + xjc$(EXE_SUFFIX) \ + wsgen$(EXE_SUFFIX) \ + wsimport$(EXE_SUFFIX) \ + schemagen$(EXE_SUFFIX) \ + jsadebugd$(EXE_SUFFIX) \ + jhat$(EXE_SUFFIX) + +WINDOWS_JDK_BIN_FILES = \ + $(EXE_SUFFIX) \ + $(LIB_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) \ + $(MSVCRNN_DLL) + +# Find all files in bin dir +ALL_BIN_LIST := $(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f) + +# For unknown reason the debuginfo files for binaries are not put into images +# e.g filter them out +ALL_BIN_LIST := $(filter-out %.debuginfo %.diz, $(ALL_BIN_LIST)) + +ifeq ($(OPENJDK_TARGET_OS),windows) + JDK_BIN_LIST := $(filter $(addprefix %,$(WINDOWS_JDK_BIN_FILES)), $(ALL_BIN_LIST)) +else + JDK_BIN_LIST := $(ALL_BIN_LIST) +endif +JRE_BIN_LIST := $(filter-out $(addprefix %,$(NOT_JRE_BIN_FILES)), $(ALL_BIN_LIST)) + +JRE_BIN_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/%,$(JRE_IMAGE_DIR)/%, $(JRE_BIN_LIST)) +JDK_BIN_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/%,$(JDK_IMAGE_DIR)/%, $(JDK_BIN_LIST)) +JDKJRE_BIN_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/%,$(JDK_IMAGE_DIR)/jre/%, $(JRE_BIN_LIST)) + +################################################################################ +# /lib dir + +$(JRE_IMAGE_DIR)/lib/%: $(JDK_OUTPUTDIR)/lib/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +$(JDK_IMAGE_DIR)/lib/%: $(JDK_OUTPUTDIR)/lib/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +$(JDK_IMAGE_DIR)/jre/lib/%: $(JDK_OUTPUTDIR)/lib/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +JDKJRE_LIB_FILES := \ + $(LIB_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) \ + $(SALIB_NAME) + +NOT_JRE_LIB_FILES := \ + tools.jar \ + jconsole.jar \ + sa-jdi.jar \ + dt.jar \ + orb.idl \ + ir.idl \ + ct.sym + +JDK_LIB_FILES := $(NOT_JRE_LIB_FILES) +ifeq ($(OPENJDK_TARGET_OS), linux) + JDK_LIB_FILES += jexec +endif + +ALL_LIB_LIST := $(shell $(FIND) $(JDK_OUTPUTDIR)/lib \( -type f -o -type l \) ! -name "_the*") +JRE_LIB_LIST := $(filter-out $(addprefix %,$(NOT_JRE_LIB_FILES) $(JDKJRE_LIB_FILES)),$(ALL_LIB_LIST)) +JDKJRE_LIB_LIST := $(filter-out $(addprefix %,$(NOT_JRE_LIB_FILES)),$(ALL_LIB_LIST)) +JDK_LIB_LIST := $(filter $(addprefix %,$(JDK_LIB_FILES)),$(ALL_LIB_LIST)) + +JRE_LIB_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/%,$(JRE_IMAGE_DIR)/%,$(JRE_LIB_LIST)) +JDK_LIB_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/%,$(JDK_IMAGE_DIR)/%,$(JDK_LIB_LIST)) +JDKJRE_LIB_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/%,$(JDK_IMAGE_DIR)/jre/%,$(JDKJRE_LIB_LIST)) + +# CTE plugin security change require new empty directory lib/applet +$(JRE_IMAGE_DIR)/lib/applet: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(MKDIR) -p $@ + +$(JDK_IMAGE_DIR)/jre/lib/applet: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(MKDIR) -p $@ + +$(JRE_IMAGE_DIR)/lib/meta-index: $(JRE_LIB_TARGETS) + $(ECHO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar + +$(JDK_IMAGE_DIR)/jre/lib/meta-index: $(JDKJRE_LIB_TARGETS) + $(ECHO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar + +$(JRE_IMAGE_DIR)/lib/ext/meta-index: $(JRE_LIB_TARGETS) + $(ECHO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar + +$(JDK_IMAGE_DIR)/jre/lib/ext/meta-index: $(JRE_LIB_TARGETS) + $(ECHO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar + +################################################################################ +# /man dir + +JRE_MAN_PAGES := \ + java.1 \ + keytool.1 \ + orbd.1 \ + pack200.1 \ + policytool.1 \ + rmid.1 \ + rmiregistry.1 \ + servertool.1 \ + tnameserv.1 \ + unpack200.1 + +ifndef OPENJDK + JRE_MAN_PAGES += javaws.1 +endif + +JDK_MAN_PAGES = \ + $(JRE_MAN_PAGES) \ + appletviewer.1 \ + extcheck.1 \ + idlj.1 \ + jar.1 \ + jarsigner.1 \ + javac.1 \ + javadoc.1 \ + javah.1 \ + javap.1 \ + jconsole.1 \ + jcmd.1 \ + jdb.1 \ + jhat.1 \ + jinfo.1 \ + jmap.1 \ + jps.1 \ + jrunscript.1 \ + jsadebugd.1 \ + jstack.1 \ + jstat.1 \ + jstatd.1 \ + jvisualvm.1 \ + native2ascii.1 \ + rmic.1 \ + schemagen.1 \ + serialver.1 \ + wsgen.1 \ + wsimport.1 \ + xjc.1 + +ifeq ($(OPENJDK_TARGET_OS), linux) + MAN_SRC_DIR:=$(JDK_TOPDIR)/src/linux/doc + MAN1_SUBDIR:=man +endif +ifeq ($(OPENJDK_TARGET_OS), solaris) + MAN_SRC_DIR:=$(JDK_TOPDIR)/src/solaris/doc + MAN1_SUBDIR:=sun/man/man1 +endif +ifeq ($(OPENJDK_TARGET_OS), macosx) + MAN_SRC_DIR:=$(JDK_TOPDIR)/src/bsd/doc + MAN1_SUBDIR:=man + JDK_MAN_PAGES := $(filter-out jcmd.1, $(JDK_MAN_PAGES)) + JDK_MAN_PAGES := $(filter-out jvisualvm.1, $(JDK_MAN_PAGES)) +endif + + +$(JRE_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +$(JDK_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +$(JRE_IMAGE_DIR)/man/man1/%: $(JDK_OUTPUTDIR)/impdoc/$(MAN1_SUBDIR)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +$(JDK_IMAGE_DIR)/man/man1/%: $(JDK_OUTPUTDIR)/impdoc/$(MAN1_SUBDIR)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +define install-ja-manpage + $(MKDIR) -p $(@D) + $(CAT) $< \ + | $(NATIVE2ASCII) -encoding eucJP \ + | $(SED) 's/@@VERSION@@/$(THIS_JDK_VERSION)/g' \ + | $(NATIVE2ASCII) -reverse -encoding $1 \ + > $@ +endef + +$(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% + $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(call install-ja-manpage,UTF-8) + +$(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% + $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(call install-ja-manpage,UTF-8) + +$(JRE_IMAGE_DIR)/man/ja_JP.PCK/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% + $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(call install-ja-manpage,PCK) + +$(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% + $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(call install-ja-manpage,PCK) + +ifeq ($(OPENJDK_TARGET_OS), solaris) + $(JRE_IMAGE_DIR)/man/ja/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% + $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + + $(JDK_IMAGE_DIR)/man/ja/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% + $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) +endif + +# Old build creates empty man page for this, mimicing behaviour. +$(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/jcmd.1 $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/jcmd.1 $(JDK_IMAGE_DIR)/man/ja/man1/jcmd.1: + $(ECHO) Creating dummy $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(MKDIR) -p $(@D) -# Restart this makefile, ugly, but since double colon (::) rules -# have been used in Release.gmk, it is impossible to craft on -# dependencies on these. I.e. -do-not-use- :: rules!!!!! -# Repeat after me: -do-not-use- :: rules!!!!! - $(MAKE) -j1 -f Images.gmk $(IMAGES_MAKE_ARGS) images $(TOUCH) $@ -.PHONY: default +ifeq ($(OPENJDK_TARGET_OS), linux) + $(JRE_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja + + $(JDK_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + $(JRE_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja + + $(JDK_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) + JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ + $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ + $(JRE_IMAGE_DIR)/man/ja + + JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/,$(JDK_MAN_PAGES)) \ + $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JDK_MAN_PAGES)) \ + $(JDK_IMAGE_DIR)/man/ja +endif + +ifeq ($(OPENJDK_TARGET_OS), solaris) + JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ + $(addprefix $(JRE_IMAGE_DIR)/man/ja/man1/,$(JRE_MAN_PAGES)) \ + $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ + $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.PCK/man1/,$(JRE_MAN_PAGES)) + + JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/,$(JDK_MAN_PAGES)) \ + $(addprefix $(JDK_IMAGE_DIR)/man/ja/man1/,$(JDK_MAN_PAGES)) \ + $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JDK_MAN_PAGES)) \ + $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/,$(JDK_MAN_PAGES)) +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ + $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ + $(JRE_IMAGE_DIR)/man/ja + + JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/,$(JDK_MAN_PAGES)) \ + $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JDK_MAN_PAGES)) \ + $(JDK_IMAGE_DIR)/man/ja +endif + +################################################################################ +# /demo dir + +ifndef NO_DEMOS +# FIXME: newdemo/applets/GraphLayout/GraphPanel$2.class is sometimes not copied. + +# The db demo contains an empty dir that needs to be copied. The other +# directories will always trigger the rule for recompile since +# _the.list_of_packages files are touched. + $(JDK_IMAGE_DIR)/demo/%: $(JDK_OUTPUTDIR)/newdemo/% + if [ ! -d "$@" ]; then \ + $(ECHO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)'; \ + $(MKDIR) -p $(@D); \ + if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) '$<' '$@'; fi \ + fi + +# Find all files including directories + JDK_DEMO_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/newdemo/%,$(JDK_IMAGE_DIR)/demo/%,\ + $(shell $(FIND) $(JDK_OUTPUTDIR)/newdemo ! -name "_the.*")) + +endif + +################################################################################ +# /sample dir + +ifndef NO_SAMPLES + $(JDK_IMAGE_DIR)/sample/%: $(JDK_OUTPUTDIR)/sample/% + $(ECHO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)' + $(install-file) + + JDK_SAMPLE_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/sample/%,$(JDK_IMAGE_DIR)/sample/%,\ + $(shell $(FIND) $(JDK_OUTPUTDIR)/sample -type f)) + +endif + +################################################################################ +# /db dir + +ifndef OPENJDK + $(IMAGES_OUTPUTDIR)/_unzip/%.unzipped: $(JDK_TOPDIR)/src/closed/share/db/% + $(ECHO) Unzipping $(patsubst $(SRC_ROOT)/%,%,$<) + $(MKDIR) -p $(JDK_IMAGE_DIR)/db + cd $(JDK_IMAGE_DIR)/db && $(UNZIP) -o $< -x index.html 2> /dev/null + $(MKDIR) -p $(@D) + $(TOUCH) $@ + + $(JDK_IMAGE_DIR)/db/README-JDK.html: $(JDK_TOPDIR)/src/closed/share/db/README-JDK.html + $(ECHO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)' + $(install-file) + $(CHMOD) 644 $(@) + + JDK_DB_TARGETS := $(patsubst $(JDK_TOPDIR)/src/closed/share/db/%,$(IMAGES_OUTPUTDIR)/_unzip/%.unzipped,\ + $(shell $(FIND) $(JDK_TOPDIR)/src/closed/share/db -name "*.zip" ! -name "*demo*")) \ + $(JDK_IMAGE_DIR)/db/README-JDK.html + +endif + +################################################################################ +# /include dir + +$(JDK_IMAGE_DIR)/include/%: $(JDK_OUTPUTDIR)/include/% + $(ECHO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)' + $(install-file) + + JDK_INCLUDE_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/include/%,$(JDK_IMAGE_DIR)/include/%,\ + $(shell $(FIND) $(JDK_OUTPUTDIR)/include -type f)) + +################################################################################ +# doc files + +ifdef OPENJDK + JRE_DOC_FILES := LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README + JDK_DOC_FILES := LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README + JRE_DOC_LOCATION := $(JDK_TOPDIR) + JDK_DOC_LOCATION := $(JDK_TOPDIR) +else + JRE_DOC_FILES := COPYRIGHT Welcome.html LICENSE THIRDPARTYLICENSEREADME.txt + JDK_DOC_FILES := COPYRIGHT README.html LICENSE THIRDPARTYLICENSEREADME.txt + ifeq ($(OPENJDK_TARGET_OS), windows) + JRE_DOC_FILES += README.txt + else + JRE_DOC_FILES += README + endif + ifndef NO_DEMOS + JDK_DOC_FILES += demo/DEMOS_LICENSE + endif + ifndef NO_SAMPLES + JDK_DOC_FILES += sample/SAMPLES_LICENSE + endif + JRE_DOC_LOCATION := $(JDK_TOPDIR)/src/closed/share/doc/jre + JDK_DOC_LOCATION := $(JDK_TOPDIR)/src/closed/share/doc/jdk +endif +JRE_DOC_TARGETS := $(addprefix $(JRE_IMAGE_DIR)/,$(JRE_DOC_FILES)) +JDKJRE_DOC_TARGETS := $(addprefix $(JDK_IMAGE_DIR)/jre/,$(JRE_DOC_FILES)) +JDK_DOC_TARGETS := $(addprefix $(JDK_IMAGE_DIR)/,$(JDK_DOC_FILES)) + +$(JRE_IMAGE_DIR)/%: $(JRE_DOC_LOCATION)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + $(CHMOD) 444 $(@) + +$(JDK_IMAGE_DIR)/jre/%: $(JRE_DOC_LOCATION)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + $(CHMOD) 444 $(@) + +$(JRE_IMAGE_DIR)/README.txt: $(JRE_DOC_LOCATION)/README + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(CHMOD) 444 $(@) + +$(JDK_IMAGE_DIR)/jre/README.txt: $(JRE_DOC_LOCATION)/README + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(MKDIR) -p $(@D) + $(CP) $< $@ + $(CHMOD) 444 $(@) + +$(JDK_IMAGE_DIR)/%: $(JDK_DOC_LOCATION)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + $(CHMOD) 444 $(@) + +$(JDK_IMAGE_DIR)/demo/%: $(JDK_DOC_LOCATION)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + $(CHMOD) 444 $(@) + +$(JDK_IMAGE_DIR)/sample/%: $(JDK_DOC_LOCATION)/% + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + $(CHMOD) 444 $(@) + +JRE_INFO_FILE := $(JRE_IMAGE_DIR)/release +JDK_INFO_FILE := $(JDK_IMAGE_DIR)/release + +# Common way to emit a line into the release or info file +define info-file-item # name value +$(PRINTF) '%s="%s"\n' $1 $2 >> $@ +endef + +ALL_SOURCE_TIPS = $(shell \ + if [ -f $(OUTPUT_ROOT)/source_tips ] ; then \ + $(CAT) $(OUTPUT_ROOT)/source_tips ; \ + fi) + +$(JRE_INFO_FILE): $(OUTPUT_ROOT)/spec.gmk $(OUTPUT_ROOT)/source_tips + $(ECHO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(MKDIR) -p $(@D) + $(RM) $@ + $(call info-file-item, "JAVA_VERSION", "$(JDK_VERSION)") + $(call info-file-item, "OS_NAME", "$(REQUIRED_OS_NAME)") + $(call info-file-item, "OS_VERSION", "$(REQUIRED_OS_VERSION)") + $(call info-file-item, "OS_ARCH", "$(ARCH)") + $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") + +$(JDK_INFO_FILE): $(OUTPUT_ROOT)/spec.gmk $(OUTPUT_ROOT)/source_tips + $(ECHO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(MKDIR) -p $(@D) + $(RM) $@ + $(call info-file-item, "JAVA_VERSION", "$(JDK_VERSION)") + $(call info-file-item, "OS_NAME", "$(REQUIRED_OS_NAME)") + $(call info-file-item, "OS_VERSION", "$(REQUIRED_OS_VERSION)") + $(call info-file-item, "OS_ARCH", "$(ARCH)") + $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") + +$(JDK_IMAGE_DIR)/src.zip: $(IMAGES_OUTPUTDIR)/src.zip + $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(install-file) + +################################################################################ +# Post processing (strip etc) + +ifneq ($(POST_STRIP_CMD),) + ifeq ($(OPENJDK_TARGET_OS), windows) + EXEC_LIST:=$(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f -name \*.exe \ + -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)") + else + # Find all executables in JDK_OUTPUTDIR since they exist when this makefile is parsed + EXEC_LIST:=$(shell $(FIND) $(JDK_OUTPUTDIR)/lib -type f -name \*$(SHARED_LIBRARY_SUFFIX) && \ + $(FILE) `$(FIND) $(JDK_OUTPUTDIR)/bin -type f -name \*$(EXE_SUFFIX)` \ + | $(EGREP) 'ELF' | $(CUT) -d':' -f1) + endif + # Filter out non JRE files and convert to unique touch files to depend on + JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%,$(IMAGES_OUTPUTDIR)/_strip_jre/%.stripped,\ + $(filter-out $(addprefix %,$(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST))) + + JDK_JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%, \ + $(IMAGES_OUTPUTDIR)/_strip_jdk/jre/%.stripped, \ + $(filter-out $(addprefix %,$(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST))) + + JDK_BIN_EXEC_TOUCH_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, \ + $(IMAGES_OUTPUTDIR)/_strip_jdk/%.stripped, \ + $(filter-out $(JDK_OUTPUTDIR)/lib/%, $(EXEC_LIST))) + + # Setup a rule for stripping files based on touch files + $(IMAGES_OUTPUTDIR)/_strip_jre/%.stripped: $(JRE_IMAGE_DIR)/% + $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) + $(CHMOD) u+w $< + $(POST_STRIP_CMD) $< + $(CHMOD) go-w $< + $(MKDIR) -p $(@D) + $(TOUCH) $@ + + $(IMAGES_OUTPUTDIR)/_strip_jdk/bin/%.stripped: $(JDK_IMAGE_DIR)/bin/% + $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) + $(CHMOD) u+w $< + $(POST_STRIP_CMD) $< + $(CHMOD) go-w $< + $(MKDIR) -p $(@D) + $(TOUCH) $@ + + # Setup a rule for stripping files based on touch files + $(IMAGES_OUTPUTDIR)/_strip_jdk/jre/%.stripped: $(JDK_IMAGE_DIR)/jre/% + $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) + $(CHMOD) u+w $< + $(POST_STRIP_CMD) $< + $(CHMOD) go-w $< + $(MKDIR) -p $(@D) + $(TOUCH) $@ + +endif + +################################################################################ +# Main targets + +jre-image: $(JRE_BIN_TARGETS) $(JRE_LIB_TARGETS) $(JRE_IMAGE_DIR)/lib/applet \ + $(JRE_IMAGE_DIR)/lib/meta-index $(JRE_IMAGE_DIR)/lib/ext/meta-index \ + $(JRE_MAN_PAGE_LIST) $(JRE_DOC_TARGETS) $(JRE_INFO_FILE) $(JRE_EXEC_TOUCH_LIST) + +jdk-image: $(JDK_BIN_TARGETS) $(JDKJRE_BIN_TARGETS) \ + $(JDK_LIB_TARGETS) $(JDKJRE_LIB_TARGETS) \ + $(JDK_IMAGE_DIR)/jre/lib/applet \ + $(JDK_DEMO_TARGETS) \ + $(JDK_IMAGE_DIR)/jre/lib/meta-index $(JDK_IMAGE_DIR)/jre/lib/ext/meta-index \ + $(JDK_MAN_PAGE_LIST) $(JDK_SAMPLE_TARGETS) \ + $(JDK_DB_TARGETS) $(JDK_INCLUDE_TARGETS) \ + $(JDKJRE_DOC_TARGETS) $(JDK_DOC_TARGETS) \ + $(JDK_INFO_FILE) $(JDK_JRE_EXEC_TOUCH_LIST) $(JDK_BIN_EXEC_TOUCH_LIST) \ + $(JDK_IMAGE_DIR)/src.zip + +################################################################################ + +.PHONY: default images jre-image jdk-image diff --git a/jdk/makefiles/Import.gmk b/jdk/makefiles/Import.gmk new file mode 100644 index 00000000000..eee94e221d6 --- /dev/null +++ b/jdk/makefiles/Import.gmk @@ -0,0 +1,243 @@ +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +default: all + +include $(SPEC) +include MakeBase.gmk + +####### + +IMPORT_TARGET_FILES := + +IMPORT_CLASSES := CORBA JAXP JAXWS LANGTOOLS +IMPORT_SOURCES := CORBA JAXP JAXWS LANGTOOLS +# Only Corba has binaries +IMPORT_BINARIES := CORBA + +####### + +# Put the libraries here. Different locations for different target apis. +ifeq ($(OPENJDK_TARGET_OS_API),posix) + ifneq ($(OPENJDK_TARGET_OS),macosx) + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib/$(LIBARCH) + else + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib + endif + HOTSPOT_LIB_DIR:=$(HOTSPOT_DIST)/jre/lib/$(LIBARCH) +else + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/bin + HOTSPOT_LIB_DIR:=$(HOTSPOT_DIST)/jre/bin +endif + +####### + +# +# jar xf/unzip fails when executing them all in parallel +# introduce artificial dependency (_DEP) buuhhh + +define ImportClasses +$1_CLASSES_DEP := $$(IMPORT_TARGET_CLASSES) +IMPORT_TARGET_CLASSES += $(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported + +$(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported : $$($1_DIST)/lib/classes.jar $$($1_CLASSES_DEP) + $(ECHO) Importing $1 classes.jar + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +define ImportSources +$1_SOURCES_DEP := $$(IMPORT_TARGET_SOURCES) +IMPORT_TARGET_SOURCES += $(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported + +$(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported : $$($1_DIST)/lib/src.zip $$($1_SOURCES_DEP) + $(ECHO) Importing $1 src.zip + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +define ImportBinaries +$1_BINARIES_DEP := $$(IMPORT_TARGET_BINARIES) +IMPORT_TARGET_BINARIES += $(JDK_OUTPUTDIR)/_the.$1.binaries.imported + +$(JDK_OUTPUTDIR)/_the.$1.binaries.imported : $$($1_DIST)/lib/bin.zip $$($1_BINARIES_DEP) + $(ECHO) Importing $1 bin.zip + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +####### + +$(foreach I,$(IMPORT_CLASSES), $(eval $(call ImportClasses,$I))) +$(foreach I,$(IMPORT_SOURCES), $(eval $(call ImportSources,$I))) +$(foreach I,$(IMPORT_BINARIES), $(eval $(call ImportBinaries,$I))) + +IMPORT_TARGET_FILES += $(IMPORT_TARGET_CLASSES) $(IMPORT_TARGET_SOURCES) $(IMPORT_TARGET_BINARIES) + +####### + +ifeq ($(OPENJDK_TARGET_OS),solaris) +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -r -P '$$<' '$$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -pRP '$$<' '$$@' +endef +else +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -P '$$<' '$$@' +endef +endif + +define CopyDir + $1_SRC_FILES := $(shell $(FIND) $2 -type f) + $1_DST_FILES := $$(patsubst $2/%,$3/%,$$($1_SRC_FILES)) + IMPORT_TARGET_FILES += $$($1_DST_FILES) +$3/% : $2/% + $(ECHO) Copying $$(@F) + $(do-install-file) +endef + +####### + +# +# Import hotspot +# + +$(eval $(call CopyDir,HOTSPOT0, $(HOTSPOT_LIB_DIR), $(INSTALL_LIBRARIES_HERE))) +$(eval $(call CopyDir,HOTSPOT1, $(HOTSPOT_DIST)/lib, $(JDK_OUTPUTDIR)/lib)) + +JSIG_DEBUGINFO := $(wildcard $(HOTSPOT_DIST)/jre/lib/$(LIBARCH)/libjsig.debuginfo) \ + $(wildcard $(HOTSPOT_DIST)/jre/lib/$(LIBARCH)/libjsig.diz) + +ifneq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(JVM_VARIANT_SERVER), true) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (,$(JSIG_DEBUGINFO)) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif + endif + ifeq ($(JVM_VARIANT_CLIENT), true) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (,$(JSIG_DEBUGINFO)) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif + endif +endif + +$(INSTALL_LIBRARIES_HERE)/server/%$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/server/%.debuginfo : $(INSTALL_LIBRARIES_HERE)/%.debuginfo + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/server/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz + $(RM) -f $@ +ifeq (REALLY_WEIRD,1) + $(LN) -s ../$(@F) $@ +else +# +# TODO: Check if this is what they really want...a zip containing a symlink +# + $(RM) -f $(basename $@).debuginfo + $(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo + $(ZIP) -q -y $@ $(basename $@).debuginfo + $(RM) -f $(basename $@).debuginfo +endif + +$(INSTALL_LIBRARIES_HERE)/client/%$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/client/%.debuginfo : $(INSTALL_LIBRARIES_HERE)/%.debuginfo + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/client/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz + $(RM) -f $@ +ifeq (REALLY_WEIRD,1) + $(LN) -s ../$(@F) $@ +else +# +# TODO: Check if this is what they really want...a zip containing a symlink +# + $(RM) -f $(basename $@).debuginfo + $(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo + $(ZIP) -q -y $@ $(basename $@).debuginfo + $(RM) -f $(basename $@).debuginfo +endif + +####### + +ifeq ($(OPENJDK_TARGET_OS),solaris) +define install-file + $(MKDIR) -p $(@D) + $(CP) -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -pRP '$<' '$@' +endef +else +define install-file + $(MKDIR) -p $(@D) + $(CP) -P '$<' '$@' +endef +endif + +ifndef OPENJDK + +IMPORT_TARGET_FILES += \ + $(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar \ + $(JDK_OUTPUTDIR)/lib/security/local_policy.jar \ + $(JDK_OUTPUTDIR)/lib/jce.jar + +$(JDK_OUTPUTDIR)/lib/jce.jar : $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar + $(ECHO) Copying $(@F) + $(install-file) + +$(JDK_OUTPUTDIR)/lib/security/local_policy.jar: $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar + $(ECHO) Copying $(@F) + $(install-file) + +$(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar: $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar + $(ECHO) Copying $(@F) + $(install-file) + +endif # OPENJDK + +####### + +all: $(IMPORT_TARGET_FILES) diff --git a/jdk/makefiles/Makefile b/jdk/makefiles/Makefile index 67b8d276349..d7381dc9317 100644 --- a/jdk/makefiles/Makefile +++ b/jdk/makefiles/Makefile @@ -23,6 +23,7 @@ # questions. # +# This must be the first rule default: all include $(SPEC) @@ -36,38 +37,38 @@ include Setup.gmk # Setup the build tools. include Tools.gmk - all: $(BUILD_TOOLS) - +make -f GenerateJavaSources.gmk -# Drop back to the old makefiles for -# packages/libs that have not yet been converted. - +make -f LegacyMakefiles.gmk +# Import (corba jaxp jaxws langtools hotspot) + +$(MAKE) -f Import.gmk +# + +$(MAKE) -f GenerateJavaSources.gmk # Ok, now gensrc is fully populated. - +make -f GenerateData.gmk - +make -f CompileJavaClasses.gmk -# The classes have been built, now generate -# classes that have other sources. - +make -f GenerateClasses.gmk + +$(MAKE) -f GenerateData.gmk + +$(MAKE) -f CompileJavaClasses.gmk # The classes are now built and # any javah files have now been generated. - +make -f CompileNativeLibraries.gmk + +$(MAKE) -f CompileNativeLibraries.gmk # Finally compile the launchers. - +make -f CompileLaunchers.gmk + +$(MAKE) -f CompileLaunchers.gmk +# Generate classes that have other sources. Needs +# to execute launchers. + +$(MAKE) -f GenerateClasses.gmk # Now we have a complete jdk, which you can run. # It is not yet wrapped up as an installed image. # The demos are compiled against this jdk. ifndef NO_DEMOS - +make -f CompileDemos.gmk + +$(MAKE) -f CompileDemos.gmk endif # Now copy the sample sources into the jdk. ifndef NO_SAMPLES - +make -f CopySamples.gmk + +$(MAKE) -f CopySamples.gmk endif # Create the final jdk and jre images, to be wrapped up -# into packages, or instealled. -images: all - +make $(IMAGES_MAKE_ARGS) -f Images.gmk +# into packages, or installed. +images: + +$(MAKE) -f CreateJars.gmk + +$(MAKE) -f Images.gmk BINARIES:=$(shell if test -d $(IMAGES_OUTPUTDIR)/j2sdk-image/bin; then cd $(IMAGES_OUTPUTDIR)/j2sdk-image/bin && $(LS) ; fi) @@ -84,9 +85,4 @@ install: images $(RM) $(addprefix $(INSTALL_PREFIX)/bin/,$(BINARIES)) $(foreach b,$(BINARIES),$(LN) -s $(INSTALL_PREFIX)/jvm/$(INSTALLDIR)/bin/$b $(INSTALL_PREFIX)/bin/$b &&) true -# Create the deb,rpm,tgz,zip, packages. -packages: images - echo Creating packages...well, in the future. - $(MKDIR) -p $(OUTPUT_ROOT)/packages - -.PHONY: all install +.PHONY: all install images diff --git a/jdk/makefiles/Setup.gmk b/jdk/makefiles/Setup.gmk index ac9cee98f24..1936bc607c6 100644 --- a/jdk/makefiles/Setup.gmk +++ b/jdk/makefiles/Setup.gmk @@ -25,12 +25,13 @@ JAVAC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar JAVAH_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javah.jar" -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javah.jar +JAVADOC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javadoc.jar" -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javadoc.jar DISABLE_WARNINGS:=-Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough,-try,-varargs,-empty,-finally # The generate old bytecode javac setup uses the new compiler to compile for the # boot jdk to generate tools that need to be run with the boot jdk. -# Thus we force the target bytecode to 6. +# Thus we force the target bytecode to 7. $(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE,\ JVM:=$(JAVA),\ JAVAC:=$(JAVAC_JARS),\ @@ -46,7 +47,7 @@ $(eval $(call SetupJavaCompiler,GENERATE_JDKBYTECODE,\ JVM:=$(JAVA),\ JAVAC:=$(JAVAC_JARS),\ JAVAH:=$(JAVAH_JARS),\ - FLAGS:=-bootclasspath "$(JDK_OUTPUTDIR)/newclasses$(PATH_SEP)$(JDK_OUTPUTDIR)/classes" -Xprefer:source -XDignore.symbol.file=true $(DISABLE_WARNINGS),\ + FLAGS:=-bootclasspath "$(JDK_OUTPUTDIR)/classes" -Xprefer:source -XDignore.symbol.file=true $(DISABLE_WARNINGS),\ SERVER_DIR:=$(JAVAC_SERVERS),\ SERVER_JVM:=$(SERVER_JAVA),\ MODE:=$(JAVAC_USE_MODE),\ diff --git a/jdk/makefiles/Tools.gmk b/jdk/makefiles/Tools.gmk index 2663ffbcd8a..3f0a8dd02ab 100644 --- a/jdk/makefiles/Tools.gmk +++ b/jdk/makefiles/Tools.gmk @@ -23,19 +23,24 @@ # questions. # +# The exception handling of swing beaninfo which have the own tool directory ifeq (,$(BUILD_TOOLS)) $(eval $(call SetupJavaCompilation,BUILD_TOOLS,\ SETUP:=GENERATE_OLDBYTECODE,\ - SRC:=$(JDK_TOPDIR)/make/tools/src,\ + SRC:=$(JDK_TOPDIR)/make/tools/src \ + $(JDK_TOPDIR)/src/solaris/classes/sun/awt/X11/generator \ + $(JDK_TOPDIR)/makefiles/sun/xawt \ + $(JDK_TOPDIR)/make/tools/swing-beans,\ BIN:=$(JDK_OUTPUTDIR)/btclasses)) + endif ifndef DISABLE_NIMBUS $(JDK_OUTPUTDIR)/btclasses/build/tools/generatenimbus/resources/%.template : \ $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/nimbus/%.template - mkdir -p $(@D) - cp $< $@ + $(MKDIR) -p $(@D) + $(CP) $< $@ BUILD_TOOLS += $(foreach i,$(wildcard $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/nimbus/*.template),$(JDK_OUTPUTDIR)/btclasses/build/tools/generatenimbus/resources/$(notdir $i)) @@ -112,3 +117,33 @@ TOOL_MAKECLASSLIST=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ # Nimbus is used somewhere in the swing build. TOOL_GENERATENIMBUS=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ build.tools.generatenimbus.Generator + +TOOL_WRAPPERGENERATOR=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ + WrapperGenerator + +TOOL_TOBIN=$(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \ + sun.awt.X11.ToBin + +########################################################################################## + +# Tools needed on solaris because OBJCOPY is broken. + +$(eval $(call SetupNativeCompilation,ADD_GNU_DEBUGLINK,\ + SRC:=$(JDK_TOPDIR)/make/tools/add_gnu_debuglink,\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + LDFLAGS:=-lelf,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/add_gnu_debuglink,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/btbin,\ + PROGRAM:=add_gnu_debuglink)) + +$(eval $(call SetupNativeCompilation,FIX_EMPTY_SEC_HDR_FLAGS,\ + SRC:=$(JDK_TOPDIR)/make/tools/fix_empty_sec_hdr_flags,\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + LDFLAGS:=-lelf,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/fix_empty_sec_hdr_flags,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/btbin,\ + PROGRAM:=fix_empty_sec_hdr_flags)) diff --git a/jdk/makefiles/altclasses/Makefile b/jdk/makefiles/altclasses/Makefile deleted file mode 100644 index 201752071d4..00000000000 --- a/jdk/makefiles/altclasses/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -# -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building alternate runtime classes (not used by default) -# - -BUILDDIR = .. - -PRODUCT = altclasses - -include $(BUILDDIR)/common/Defs.gmk - -# Root of alternate class sources - -ALTCLASSES_SRCDIR = $(CLOSED_SRC)/share/altclasses - -# Alternate runtime classes - -ALTRT_JAR_FILE = $(LIBDIR)/alt-rt.jar -ALTRT_JAR_SOURCE_FILE = $(TEMPDIR)/alt-rt.jarsrclist -ALTRT_JAR_SOURCES = $(wildcard $(ALTCLASSES_SRCDIR)/java/*/*.java) - -# Use a special file suffix for the file that holds the source list - -.SUFFIXES: .jarsrclist - -# Build rules - -all build: - @if [ -d $(ALTCLASSES_SRCDIR) ] ; then \ - $(MAKE) $(ALTRT_JAR_FILE); \ - fi - -# Source list file creation - -$(ALTRT_JAR_SOURCE_FILE): $(ALTRT_JAR_SOURCES) FRC - $(prep-target) - $(ECHO) $(ALTRT_JAR_SOURCES) > $@ - -clean clobber:: - $(RM) $(ALTRT_JAR_FILE) $(ALTRT_JAR_SOURCE_FILE) - $(RM) -r $(ALTRT_JAR_SOURCE_FILE).classes - -include $(BUILDDIR)/common/Classes.gmk - -# Pattern rule to turn a source list file into a jar file -$(LIBDIR)/%.jar : $(TEMPDIR)/%.jarsrclist - $(prep-target) - $(RM) -r $(<).classes - $(MKDIR) -p $(<).classes - $(JAVAC_CMD) -implicit:none -d $(<).classes @$< - $(BOOT_JAR_CMD) cf $@ -C $(<).classes . $(BOOT_JAR_JFLAGS) - -# Force target - -FRC: - -# Non file targets - -.PHONY: all build clean clobber - diff --git a/jdk/makefiles/apple/Makefile b/jdk/makefiles/apple/Makefile deleted file mode 100644 index 4dd03dd50eb..00000000000 --- a/jdk/makefiles/apple/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building com/apple -# - -BUILDDIR = .. -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = applescript - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) diff --git a/jdk/makefiles/apple/applescript/Makefile b/jdk/makefiles/apple/applescript/Makefile deleted file mode 100644 index 6d0bc798c38..00000000000 --- a/jdk/makefiles/apple/applescript/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = apple.applescript -LIBRARY = AppleScriptEngine -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - - -# -# Files -# -AUTO_FILES_JAVA_DIRS = apple/applescript - -FILES_objc = \ - $(TARGDIR)AppleScriptEngine.m \ - $(TARGDIR)AppleScriptExecutionContext.m \ - $(TARGDIR)AS_NS_ConversionUtils.m \ - $(TARGDIR)NS_Java_ConversionUtils.m - - -FILES_export = \ - apple/applescript/AppleScriptEngine.java \ - apple/applescript/AppleScriptEngineFactory.java - -# -# Rules -# -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - - -# -# Extra rules -# - -# -# Add to ambient vpath to get files in a subdirectory -# -vpath %.m $(call NativeSrcDirList,,native/apple/applescript) - -CPPFLAGS += \ - -I$(TEMPDIR)/../../sun.awt/awt/CClassHeaders - -OTHER_LDLIBS = \ - -framework Cocoa \ - -framework Carbon \ - -framework JavaNativeFoundation diff --git a/jdk/makefiles/com/Makefile b/jdk/makefiles/com/Makefile deleted file mode 100644 index 6f45213d2c7..00000000000 --- a/jdk/makefiles/com/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all of java -# - -BUILDDIR = .. -PRODUCT = com -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = sun oracle - -ifeq ($(PLATFORM), macosx) - SUBDIRS += apple -endif - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/com/apple/Makefile b/jdk/makefiles/com/apple/Makefile deleted file mode 100644 index c336c610990..00000000000 --- a/jdk/makefiles/com/apple/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building com/apple -# - -BUILDDIR = ../.. -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = osx osxui - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) diff --git a/jdk/makefiles/com/apple/osx/Makefile b/jdk/makefiles/com/apple/osx/Makefile deleted file mode 100644 index bf0ef9c99dc..00000000000 --- a/jdk/makefiles/com/apple/osx/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = com.apple.osx -LIBRARY = osx -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - - -# -# Files -# -AUTO_FILES_JAVA_DIRS = apple/launcher apple/security com/apple/concurrent com/apple/eio java/util/prefs - -FILES_objc += \ - $(TARGDIR)Dispatch.m \ - $(TARGDIR)CFileManager.m \ - $(TARGDIR)KeystoreImpl.m \ - $(TARGDIR)JavaAppLauncher.m \ - $(TARGDIR)MacOSXPreferencesFile.m \ - $(TARGDIR)SCDynamicStoreConfig.m - -FILES_export += \ - com/apple/concurrent/LibDispatchNative.java \ - com/apple/eio/FileManager.java \ - apple/security/KeychainStore.java \ - apple/launcher/JavaAppLauncher.java \ - java/util/prefs/MacOSXPreferencesFile.java - -# TODO: couldn't figure out how to get resources working -#LOCALE_SET_DEFINITION = jre -#RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES = apple/launcher/appLauncherErrors.properties - - -# -# Rules -# -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - - -# -# Extra rules -# - -# -# Add to ambient vpath to get files in a subdirectory -# -vpath %.m $(call NativeSrcDirList,,native/com/apple/concurrent) -vpath %.m $(call NativeSrcDirList,,native/com/apple/eio) -vpath %.m $(call NativeSrcDirList,,native/apple/launcher) -vpath %.m $(call NativeSrcDirList,,native/apple/security) -vpath %.m $(call NativeSrcDirList,,native/java/util) - -CPPFLAGS += \ - $(call NativeSrcDirList,-I,native/com/apple/laf) \ - $(call NativeSrcDirList,-I,native/apple/awt) \ - $(call NativeSrcDirList,-I,native/sun/awt) \ - $(call NativeSrcDirList,-I,native/sun/osxapp) - -OTHER_LDLIBS = \ - -losxapp \ - -framework Cocoa \ - -framework ApplicationServices \ - -framework JavaNativeFoundation \ - -framework JavaRuntimeSupport \ - -framework Security \ - -framework SystemConfiguration diff --git a/jdk/makefiles/com/apple/osxui/Makefile b/jdk/makefiles/com/apple/osxui/Makefile deleted file mode 100644 index 63d78d2872e..00000000000 --- a/jdk/makefiles/com/apple/osxui/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = com.apple.osxui -LIBRARY = osxui -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - - -# -# Files -# -AUTO_FILES_JAVA_DIRS = apple/laf com/apple/laf com/apple/eawt - -FILES_objc = \ - $(TARGDIR)AquaFileView.m \ - $(TARGDIR)AquaLookAndFeel.m \ - $(TARGDIR)AquaNativeResources.m \ - $(TARGDIR)JRSUIConstantSync.m \ - $(TARGDIR)JRSUIController.m \ - $(TARGDIR)JRSUIFocus.m \ - $(TARGDIR)ScreenPopupFactory.m \ - $(TARGDIR)ScreenMenu.m - -FILES_export = \ - apple/laf/AquaLookAndFeel.java \ - apple/laf/JRSUIConstants.java \ - apple/laf/JRSUIControl.java \ - apple/laf/JRSUIFocus.java \ - apple/laf/JRSUIState.java \ - apple/laf/JRSUIStateFactory.java \ - apple/laf/JRSUIUtils.java \ - com/apple/laf/AquaFileView.java \ - com/apple/laf/AquaNativeResources.java \ - com/apple/laf/ScreenPopupFactory.java \ - com/apple/laf/ScreenMenu.java \ - com/apple/laf/ScreenMenuBar.java \ - com/apple/laf/ScreenMenuBarProvider.java \ - com/apple/laf/ScreenMenuItem.java \ - com/apple/laf/ScreenMenuItemCheckbox.java \ - com/apple/laf/ScreenMenuItemUI.java \ - com/apple/laf/ScreenMenuPropertyHandler.java \ - com/apple/laf/ScreenMenuPropertyListener.java - -#RESOURCE_BUNDLES_COMPILED_PROPERTIES += \ -# com/apple/laf/resources/aqua.properties \ -# com/apple/laf/resources/aqua_de.properties \ -# com/apple/laf/resources/aqua_fr.properties \ -# com/apple/laf/resources/aqua_ja.properties - - -# -# Rules -# -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - - -# -# Extra rules -# - -# -# Add to ambient vpath to get files in a subdirectory -# -vpath %.m $(call NativeSrcDirList,,native/com/apple/laf) -vpath %.m $(call NativeSrcDirList,,native/com/apple/eawt) - -CPPFLAGS += \ - $(call NativeSrcDirList,-I,native/com/apple/laf) \ - $(call NativeSrcDirList,-I,native/apple/awt) \ - $(call NativeSrcDirList,-I,native/sun/awt) \ - $(call NativeSrcDirList,-I,native/sun/osxapp) \ - -I$(TEMPDIR)/../../sun.awt/awt/CClassHeaders - -OTHER_LDLIBS = \ - -lawt -losxapp \ - -lawt_lwawt -L$(LIBDIR) -Xlinker -rpath -Xlinker @loader_path \ - -framework Cocoa \ - -framework Carbon \ - -framework ApplicationServices \ - -framework JavaNativeFoundation \ - -framework JavaRuntimeSupport diff --git a/jdk/makefiles/com/oracle/jfr/Makefile b/jdk/makefiles/com/oracle/jfr/Makefile deleted file mode 100644 index 5fd5e53039f..00000000000 --- a/jdk/makefiles/com/oracle/jfr/Makefile +++ /dev/null @@ -1,73 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = oracle.jrockit.jfr -LIBRARY = jfr -PRODUCT = oracle -include $(BUILDDIR)/common/Defs.gmk - -# -# Use mapfile -# -FILES_m = $(CLOSED_SHARE_SRC)/native/oracle/jfr/mapfile-vers -include $(BUILDDIR)/common/Mapfile-vers.gmk - -# -# Files to compile -# -FILES_c = VMJFR.c - -AUTO_FILES_JAVA_DIRS = com/oracle/jrockit/jfr oracle/jrockit/jfr - -# Find C source files -# -vpath %.c $(CLOSED_SHARE_SRC)/native/oracle/jfr - -# -# Library to compile. -# -include $(BUILDDIR)/common/Library.gmk - -JVMLIB = -JAVALIB = -OTHER_LDLIBS = - -clean clobber:: - $(RM) -r $(CLASSDESTDIR)/com/oracle/jrockit/jfr - $(RM) -r $(CLASSDESTDIR)/oracle/jrockit/jfr - - -# Copy pre-shipped .jfs files -JFR_LIBDIR = $(LIBDIR)/jfr -JFR_SRCDIR = $(CLOSED_SHARE_SRC)/lib/jfr - -$(JFR_LIBDIR)/%.jfs: $(JFR_SRCDIR)/%.jfs - $(install-file) - -JFS_FILES := $(subst $(JFR_SRCDIR),$(JFR_LIBDIR),$(wildcard $(JFR_SRCDIR)/*.jfs)) - -all build : $(JFS_FILES) - diff --git a/jdk/makefiles/com/oracle/security/ucrypto/Makefile b/jdk/makefiles/com/oracle/security/ucrypto/Makefile deleted file mode 100644 index 8ea7a749a7b..00000000000 --- a/jdk/makefiles/com/oracle/security/ucrypto/Makefile +++ /dev/null @@ -1,270 +0,0 @@ -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building ucrypto.jar and its native libraries. -# -# This file was modified from make/sun/security/pkcs11/Makefile. -# -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Oracle -# JDK builds respectively.) -# -# This Makefile does the "real" build of the Ucrypto provider files. -# Since the sources are unavailable for OpenJDK, this Makefile is only -# useful for JDK. -# -# -# Main Targets (JDK on Solaris): -# -# all The usual, ucrypto.jar plus the native libraries. -# builds and installs the prebuilt/signed jar. -# -# clobber/clean Cleans up the temp directory, ucrypto.jar, the -# native libraries, and the config file from the -# build area -# -# jar Builds, signs and installs ucrypto.jar -# (Can only be done on machines with access to -# the signing keystore) -# -# Other lesser-used Targets (JDK on Solaris): -# -# build-jar Builds ucrypto.jar (no sign/install) -# -# sign Builds/signs ucrypto.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# (Can only be done on machines with access to -# the signing keystore) -# -# install-prebuilt Installs the pre-built jar files -# -# NOTE: None of the above target will update the prebuilt provider binary -# under the closed workspace. To update it, you must explicitly copy the -# binary from either the tmp/signed or lib/ext directory. -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../../.. - -include $(BUILDDIR)/common/Defs.gmk - -ifndef OPENJDK - ifneq ($(PLATFORM), solaris) - all: - else - PACKAGE = com.oracle.security.ucrypto - LIBRARY = j2ucrypto - PRODUCT = oracle - - # - # The following is for when we need to do postprocessing - # (signing/obfuscation) against a read-only build. If the OUTPUTDIR - # isn't writable, the build currently crashes out. - # - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif - - JAVAC_MAX_WARNINGS=false - JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation - JAVAC_WARNINGS_FATAL=true - - # - # C and Java Files - # - include FILES_c.gmk - - # - # Subdirectories of these are automatically included. - # - AUTO_FILES_JAVA_DIRS = com/oracle/security/ucrypto - - # - # Java files that define native methods - # - FILES_export = \ - com/oracle/security/ucrypto/UcryptoProvider.java \ - com/oracle/security/ucrypto/NativeCipher.java \ - com/oracle/security/ucrypto/NativeDigest.java \ - com/oracle/security/ucrypto/NativeKey.java \ - com/oracle/security/ucrypto/NativeRSASignature.java \ - com/oracle/security/ucrypto/NativeRSACipher.java - - # - # Find native code - # - vpath %.c \ - $(CLOSED_PLATFORM_SRC)/native/com/oracle/security/ucrypto - - # - # Find include files - # - OTHER_INCLUDES += \ - -I$(CLOSED_PLATFORM_SRC)/native/com/oracle/security/ucrypto - - # - # Rules - # - CLASSDESTDIR = $(TEMPDIR)/classes - JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)" - - include $(BUILDDIR)/common/Mapfile-vers.gmk - include $(BUILDDIR)/common/Library.gmk - - # - # Libraries to link - # - OTHER_LDLIBS = -ldl - - # Default config file - UCRYPTO_CFG_SRC = $(CLOSED_SRC)/share/lib/security/ucrypto-solaris.cfg - UCRYPTO_CFG_BUILD = $(LIBDIR)/security/ucrypto-solaris.cfg - - # - # We use a variety of subdirectories in the $(TEMPDIR) depending on what - # part of the build we're doing. Build is initially done in the unsigned - # area and when files are signed, they will be placed in the appropriate area. - # - UNSIGNED_DIR = $(TEMPDIR)/unsigned - - # - # Rules - # - all: ucrypto-cfg build-jar install-prebuilt - $(build-warning) - - ucrypto-cfg: $(UCRYPTO_CFG_BUILD) - - $(UCRYPTO_CFG_BUILD): $(UCRYPTO_CFG_SRC) - $(install-file) - - include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - - # ===================================================== - # Build the unsigned ucrypto.jar file. - # - - JAR_DESTFILE = $(EXTDIR)/ucrypto.jar - - # - # The ucrypto.jar needs to be in the extension class directory, - # therefore none of its classes can appear in $(CLASSBINDIR). - # Currently no one is using any of the internals, so these files - # should not have been built. - # - - # - # Since the -C option to jar is used below, each directory entry must be - # preceded with the appropriate directory to "cd" into. - # - JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - - build-jar: $(UNSIGNED_DIR)/ucrypto.jar - - # - # Build ucrypto.jar. - # - $(UNSIGNED_DIR)/ucrypto.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - # - # Sign ucrypto.jar - # - SIGNED_DIR = $(JCE_BUILD_DIR)/signed - - sign: $(SIGNED_DIR)/ucrypto.jar - - ifndef ALT_JCE_BUILD_DIR - $(SIGNED_DIR)/ucrypto.jar: $(UNSIGNED_DIR)/ucrypto.jar - else - # - # We have to remove the build dependency, otherwise, we'll try to rebuild it - # which we can't do on a read-only filesystem. - # - $(SIGNED_DIR)/ucrypto.jar: - @if [ ! -r $(UNSIGNED_DIR)/ucrypto.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/ucrypto.jar"; \ - exit 1; \ - fi - endif - $(call sign-file, $(UNSIGNED_DIR)/ucrypto.jar) - - - # ===================================================== - # Create the Release Engineering files. Signed builds, etc. - # - - release: $(SIGNED_DIR)/ucrypto.jar - $(RM) $(JCE_BUILD_DIR)/release/ucrypto.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/ucrypto.jar $(JCE_BUILD_DIR)/release - $(release-warning) - - - # ===================================================== - # Install routines. - # - - # - # Install ucrypto.jar, depending on which type is requested. - # - jar: $(JAR_DESTFILE) - $(release-warning) - - $(JAR_DESTFILE): $(SIGNED_DIR)/ucrypto.jar - $(install-file) - - install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt OracleUcrypto provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/ucrypto/ucrypto.jar $(JAR_DESTFILE) - - - # ===================================================== - # Support routines. - # - clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - $(RM) -r $(UCRYPTO_CFG_BUILD) - - .PHONY: build-jar jar sign release install-prebuilt - - endif #ifneq ($(PLATFORM), solaris) -endif #ifndef OPENJDK diff --git a/jdk/makefiles/com/sun/Makefile b/jdk/makefiles/com/sun/Makefile deleted file mode 100644 index 9049d0033c6..00000000000 --- a/jdk/makefiles/com/sun/Makefile +++ /dev/null @@ -1,54 +0,0 @@ - -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building com/sun -# - -BUILDDIR = ../.. -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -ifndef OPENJDK - ORG_EXISTS := $(call DirExists,$(CLOSED_SRC)/share/classes/sun/org,,) - ifneq ("$(ORG_EXISTS)", "") - SCRIPT_SUBDIR = script - endif -endif - -# jarsigner is part of JRE -SUBDIRS = - -SUBDIRS_management = -SUBDIRS_enterprise = crypto/provider -SUBDIRS_misc = - -# Omit mirror since it's built with the apt tool. - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) diff --git a/jdk/makefiles/com/sun/crypto/provider/Makefile b/jdk/makefiles/com/sun/crypto/provider/Makefile deleted file mode 100644 index 93a0b1308c7..00000000000 --- a/jdk/makefiles/com/sun/crypto/provider/Makefile +++ /dev/null @@ -1,275 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building sunjce_provider.jar. -# -# This file was derived from make/javax/crypto/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. There are some -# javac options currently specific to JCE, so we recompile now to make -# sure any implicit compilations didn't use any incorrect flags. -# -# For OpenJDK, the jar files built here are installed directly into the -# OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built and signed, and the resulting jar files MUST BE CHECKED INTO -# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE -# FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual. -# If OpenJDK, installs sunjce_provider.jar. -# If JDK, installs prebuilt -# sunjce_provider.jar. -# -# jar Builds/installs sunjce_provider.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunjce_provider.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunjce_provider.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../../.. -PACKAGE = com.sun.crypto.provider -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS = false -JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = \ - com/sun/crypto/provider - -include $(BUILDDIR)/common/Classes.gmk - -# -# Rules -# - -# -# Some licensees do not get the security sources, but we still need to -# be able to build "all" for them. Check here to see if the sources were -# available. If not, then we don't need to continue this rule. -# - -ifdef OPENJDK -all: build-jar install-jar -else # OPENJDK -ifeq ($(strip $(FILES_java)),) -all: install-prebuilt - $(no-source-warning) -else # FILES_java available -all: build-jar install-prebuilt - $(build-warning) -endif # $(FILES_java) available -endif # OPENJDK - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, they will be -# placed in the appropriate areas. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - -# ===================================================== -# Build the unsigned sunjce_provider.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunjce_provider.jar - -# -# The sunjce_provider.jar needs to be in the extension class directory, -# therefore none of its classes should appear in $(CLASSBINDIR). -# Currently no one is using any of the SunJCE internals, so these files -# should not have been built. -# - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunjce_provider.jar - -# -# Build sunjce_provider.jar. -# -$(UNSIGNED_DIR)/sunjce_provider.jar: build $(JCE_MANIFEST_FILE) - $(prep-target) - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunjce_provider.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunjce_provider.jar: $(UNSIGNED_DIR)/sunjce_provider.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunjce_provider.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunjce_provider.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunjce_provider.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunjce_provider.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunjce_provider.jar - $(RM) $(JCE_BUILD_DIR)/release/sunjce_provider.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunjce_provider.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunjce_provider.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunjce_provider.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunJCE provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/jce/sunjce_provider.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/common/Classes.gmk b/jdk/makefiles/common/Classes.gmk deleted file mode 100644 index 07acf6c0106..00000000000 --- a/jdk/makefiles/common/Classes.gmk +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright (c) 1995, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -include $(JDK_TOPDIR)/makefiles/common/Rules.gmk - -# -# Say you built classes into $(ALT_CLASSBINDIR) and then at the end of -# the build you might want to copy them over to $(ALT_CLASSDESTDIR); -# this rule takes care of that. No one should really set these -# variables except the bootstrap/recompile stage of the java compiler. -# -ifdef ALT_CLASSBINDIR - -# By default post-processing is copying. Suppose you want to build -# a jar file then set ALT_CLASSES_DISPOSITION to '../../dest/nameof.jar' -# before including this file. -ifndef ALT_CLASSES_DISPOSITION -ALT_CLASSES_DISPOSITION = copy-classes -endif - -build : $(ALT_CLASSES_DISPOSITION) - -copy-classes: -ifneq ($(ALT_CLASSBINDIR), $(ALT_CLASSDESTDIR)) - @if [ -s $(TEMPDIR)/.classes.list ]; then \ - mkdir -p $(ALT_CLASSDESTDIR); \ - echo "Copying $(ALT_CLASSBINDIR)..."; \ - echo "(cd $(ALT_CLASSBINDIR); tar cf - .) | \ - (cd $(ALT_CLASSDESTDIR); tar xf -)"; \ - (cd $(ALT_CLASSBINDIR); tar cf - .) | \ - (cd $(ALT_CLASSDESTDIR); tar xf -); \ - fi -else # ALT_CLASSBINDIR - @if [ -s $(TEMPDIR)/.classes.list ]; then \ - echo "Copy source and destination are the same: $(ALT_CLASSBINDIR) -- Copy skipped..."; \ - fi -endif # ALT_CLASSBINDIR - -.PHONY: copy-classes -endif # ALT_CLASSBINDIR - diff --git a/jdk/makefiles/common/Cscope.gmk b/jdk/makefiles/common/Cscope.gmk deleted file mode 100644 index 812fd5f0d12..00000000000 --- a/jdk/makefiles/common/Cscope.gmk +++ /dev/null @@ -1,100 +0,0 @@ -# -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# The cscope.out file is made in the current directory and spans the entire -# source tree. -# -# Things to note: -# 1. We use relative names for cscope. -# 2. We *don't* remove the old cscope.out file, because cscope is smart -# enough to only build what has changed. It can be confused, however, -# if files are renamed or removed, so it may be necessary to manually -# remove cscope.out if a lot of reorganization has occurred. -# -CSDIRS = $(JDK_TOPDIR)/src $(JDK_TOPDIR)/build -CSINCS = $(CSDIRS:%=-I%) - -# -# Set CSFLAGS env variable to -b when using fast cscope to build the fast -# (but large) cscope data bases. -# -CSCOPE = cscope-fast -ifeq ($(CSCOPE), cscope-fast) -CSFLAGS = -b -endif - -# -# Adding .java files pushes the file count of a full workspace up about 2500 -# files, which slows database lookup. Thus allow these files to be added from -# the environment (CSCLASSES=yes). -# -ifdef CSCLASSES -ADDCLASSES= -o -name '*.java' -endif - -# -# Adding CClassHeaders also pushes the file count of a full workspace up about -# 200 files (these files also don't exist in a new workspace, and thus will -# cause the recreation of the database as they get created, which might seem -# A little confusing). Thus allow these files to be added from the environment -# (CSHEADERS=yes). -# -ifndef CSHEADERS -RMCCHEADERS= -o -name CClassHeaders -endif - - -.PRECIOUS: cscope.out - -cscope.out: cscope.files FRC - $(CSCOPE) $(CSFLAGS) - -# -# What files should we include? A simple rule might be just those files under -# SCM control, however this would miss files we create like the opcodes and -# CClassHeaders. The following attempts to find everything that is *useful*. -# (demo directories contain many .java files -# that probably aren't useful for development, and the pkgarchive may contain -# duplicates of files within the source hierarchy). The ordering of the .raw -# file is an attempt to make cscope display the most relevant files first. -# -cscope.files: FRC - @-$(RM) cscope.files cscope.files.raw - echo "$(CSINCS)" > cscope.files - -find $(CSDIRS) $(SCM_DIRS_prune) -o -type d \( -name '.del-*' -o \ - -name '*demo' -o -name pkgarchive $(RMCCHEADERS) \) -prune -o \ - -type f \( -name '*.[Ccshlxy]' -o -name '*.il' -o -name '*.cc' -o \ - -name 'Makefile*' -o -name GNUmakefile -o -name '*.gmk' -o \ - -name '*.cpp' $(ADDCLASSES) \) -print > cscope.files.raw - -egrep -v "\.java|\/build\/" cscope.files.raw >> cscope.files - -fgrep ".java" cscope.files.raw >> cscope.files - -fgrep "/build/" cscope.files.raw >> cscope.files - @-$(RM) cscope.files.raw - -cscope.clean: - -$(RM) cscope.files cscope.files.raw cscope.out - -FRC: diff --git a/jdk/makefiles/common/Defs-embedded.gmk b/jdk/makefiles/common/Defs-embedded.gmk deleted file mode 100644 index 089fae9d586..00000000000 --- a/jdk/makefiles/common/Defs-embedded.gmk +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Variable definitions for SE Embedded builds. This file should -# not contain rules. -# -ifdef JAVASE_EMBEDDED - -# Compress jar files -COMPRESS_JARS = true - -# Don't mmap zip files -LIBZIP_CAN_USE_MMAP = false - -# Disable ALSA version check -REQUIRED_ALSA_VERSION = - -# Compilation settings -OTHER_CPPFLAGS += -DJAVASE_EMBEDDED - -# Product naming -PRODUCT_SUFFIX = SE Runtime Environment for Embedded -RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) - -# Reduced JRE locations -JRE_REDUCED_HEADLESS_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-headless-image -JRE_REDUCED_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-image - -# Override on linux to further reduce binary/lib sizes in product build -ifeq ($(PLATFORM), linux) - ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - POST_STRIP_PROCESS = $(STRIP) --strip-unneeded - endif - endif - endif -endif - -# NIO Platform specific source file location -ifdef CROSS_COMPILE_ARCH - NIO_PLATFORM_CLASSES_ROOT_DIR = $(CLOSED_PLATFORM_SRC)/classes/ -endif - -# For ARM sflt we need to link to a library with improved FP accuracy -# and it must be linked after fdlibm - this places it at the end after libc -# -z muldefs avoids linker errors for duplicate symbols. -ifeq ($(CROSS_COMPILE_ARCH), arm) - EXTRA_LIBS += $(EXT_LIBS_PATH)/sflt_glibc_jdk.a -Xlinker -z -Xlinker muldefs -endif - -endif # JAVASE_EMBEDDED - diff --git a/jdk/makefiles/common/Defs-linux.gmk b/jdk/makefiles/common/Defs-linux.gmk deleted file mode 100644 index 03ff72a27b2..00000000000 --- a/jdk/makefiles/common/Defs-linux.gmk +++ /dev/null @@ -1,430 +0,0 @@ -# -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Linux. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overriden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -CC_DEPEND = -MM -CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files. -DEPEND_SUFFIX = d -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! - -# Default OBJCOPY comes from GNU Binutils on Linux: -DEF_OBJCOPY=/usr/bin/objcopy -ifdef CROSS_COMPILE_ARCH - # don't try to generate .debuginfo files when cross compiling - _JUNK_ := $(shell \ - echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \ - "skipping .debuginfo generation.") - OBJCOPY= -else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif -endif - -ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS -# The setting of OBJCOPY above enables the JDK build to import -# .debuginfo files from the HotSpot build. However, adding FDS -# support to the JDK build will occur in phases so a different -# make variable is used to indicate that a particular library -# supports FDS. - -ifeq ($(OBJCOPY),) - _JUNK_ := $(shell \ - echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.") -else - _JUNK_ := $(shell \ - echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.") - - # Library stripping policies for .debuginfo configs: - # all_strip - strips everything from the library - # min_strip - strips most stuff from the library; leaves minimum symbols - # no_strip - does not strip the library at all - # - # Oracle security policy requires "all_strip". A waiver was granted on - # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE. - # - DEF_STRIP_POLICY="min_strip" - ifeq ($(ALT_STRIP_POLICY),) - STRIP_POLICY=$(DEF_STRIP_POLICY) - else - STRIP_POLICY=$(ALT_STRIP_POLICY) - endif - - _JUNK_ := $(shell \ - echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") -endif -endif - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -CC_OPT/NONE = -CC_OPT/LOWER = -O2 -CC_OPT/HIGHER = -O3 -CC_OPT/HIGHEST = -O3 - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# For all platforms, do not omit the frame pointer register usage. -# We need this frame pointer to make it easy to walk the stacks. -# This should be the default on X86, but ia64 and amd64 may not have this -# as the default. -CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 -CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 -CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN -ifeq ($(ZERO_BUILD), true) - CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) - ifeq ($(ZERO_ENDIANNESS), little) - CFLAGS_REQUIRED += -D_LITTLE_ENDIAN - endif - LDFLAGS_COMMON += $(ZERO_ARCHFLAG) -else - CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) -endif - -# If this is a --hash-style=gnu system, use --hash-style=both -# The gnu .hash section won't work on some Linux systems like SuSE 10. -_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu') -ifneq ($(_HAS_HASH_STYLE_GNU),) - LDFLAGS_HASH_STYLE = -Wl,--hash-style=both -endif -LDFLAGS_COMMON += $(LDFLAGS_HASH_STYLE) - -# -# Selection of warning messages -# -GCC_INHIBIT = -Wno-unused -Wno-parentheses -GCC_STYLE = -GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) - -# -# Treat compiler warnings as errors, if warnings not allowed -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - GCC_WARNINGS += -Werror -endif - -# -# Misc compiler options -# -ifneq ($(ARCH),ppc) - CFLAGS_COMMON = -fno-strict-aliasing -endif -PIC_CODE_LARGE = -fPIC -PIC_CODE_SMALL = -fpic -GLOBAL_KPIC = $(PIC_CODE_LARGE) -CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -ifeq ($(ARCH), amd64) - CFLAGS_COMMON += -pipe -endif - -# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 -DEBUG_FLAG = -g -ifeq ($(FASTDEBUG), true) - ifeq ($(ARCH_DATA_MODEL), 64) - DEBUG_FLAG = -g1 - endif -endif - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - DEBUG_FLAG = -g - CFLAGS_REQUIRED += $(DEBUG_FLAG) -endif - -CFLAGS_OPT = $(CC_OPT) -CFLAGS_DBG = $(DEBUG_FLAG) -CFLAGS_COMMON += $(CFLAGS_REQUIRED) - -CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) -CXXFLAGS_OPT = $(CC_OPT) -CXXFLAGS_DBG = $(DEBUG_FLAG) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java -ifeq ($(FASTDEBUG), true) - CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' - -# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) -ifneq ($(ARCH),alpha) - CPP_ARCH_FLAGS += -D$(ARCH) -else - CPP_ARCH_FLAGS += -D_$(ARCH)_ -endif - -CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \ - -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT - -ifeq ($(ARCH_DATA_MODEL), 64) -CPPFLAGS_COMMON += -D_LP64=1 -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -endif - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # On Linux we add a flag -z origin, not sure if this is necessary, but - # doesn't seem to hurt. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'readelf -d lib*.so' to see these settings in a library. - # - Z_ORIGIN_FLAG/sparc = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/i586 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/amd64 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/ia64 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/arm = - Z_ORIGIN_FLAG/ppc = - Z_ORIGIN_FLAG/zero = -Xlinker -z -Xlinker origin - - LDFLAG_Z_ORIGIN = $(Z_ORIGIN_FLAG/$(ARCH_FAMILY)) - - LDFLAGS_COMMON += $(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=$(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN/%) - -endif - -EXTRA_LIBS += -lc - -LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -#LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_OPT = -Xlinker -O1 -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) - -# -# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always -# statically link libgcc but will print a warning with the flag. We don't -# want the warning, so check gcc version first. -# -ifeq ($(CC_MAJORVER),3) - OTHER_LDFLAGS += -static-libgcc -endif - -# Automatic precompiled header option to use (if COMPILE_APPROACH=batch) -# (See Rules.gmk) The gcc 5 compiler might have an option for this? -AUTOMATIC_PCH_OPTION = - -# -# Post Processing of libraries/executables -# -ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - # Debug 'strip -g' leaves local function Elf symbols (better stack - # traces) - POST_STRIP_PROCESS = $(STRIP) -g - endif - endif -endif - -# -# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker - -# -# Support for Quantify. -# -ifdef QUANTIFY -QUANTIFY_CMD = quantify -QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes -LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) -endif - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -# First try to link against server, if that does not exist link against client. -JVMLIB = -L$(LIBDIR)/$(LIBARCH)/server -L$(LIBDIR)/$(LIBARCH)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# -# We want to privatize JVM symbols on Solaris. This is so the user can -# write a function called FindClass and this should not override the -# FindClass that is inside the JVM. At this point in time we are not -# concerned with other JNI libraries because we hope that there will -# not be as many clashes there. -# -PRIVATIZE_JVM_SYMBOLS = false - -USE_PTHREADS = true -override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME -override AWT_RUNPATH = -override HAVE_ALTZONE = false -override HAVE_FILIOH = false -override HAVE_GETHRTIME = false -override HAVE_GETHRVTIME = false -override HAVE_SIGIGNORE = true -override LEX_LIBRARY = -lfl -ifeq ($(STATIC_CXX),true) -override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic -else -override LIBCXX = -lstdc++ -endif -override LIBPOSIX4 = -override LIBSOCKET = -override LIBNSL = -override LIBSCF = -override LIBTHREAD = -override LIBDL = -ldl -override MOOT_PRIORITIES = true -override NO_INTERRUPTIBLE_IO = true -ifeq ($(ARCH), amd64) -override OPENWIN_LIB = $(OPENWIN_HOME)/lib64 -else -override OPENWIN_LIB = $(OPENWIN_HOME)/lib -endif -override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER -override SUN_CMM_SUBDIR = -override THREADS_FLAG = native -override USE_GNU_M4 = true -override USING_GNU_TAR = true -override WRITE_LIBVERSION = false - -# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the -# resulting resolved absolute name of the executable in the environment -# variable EXECNAME. That executable name is then used that to locate the -# installation area. -override USE_EXECNAME = true - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines -HAVE_DPS = no - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = UTF-8 - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) -SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo - -# The JDI - Serviceability Agent binding is not currently supported -# on Linux-ia64. -ifeq ($(ARCH), ia64) - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -ifdef CROSS_COMPILE_ARCH - # X11 headers are not under /usr/include - OTHER_CFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include -endif diff --git a/jdk/makefiles/common/Defs-macosx.gmk b/jdk/makefiles/common/Defs-macosx.gmk deleted file mode 100644 index 1d3753ed353..00000000000 --- a/jdk/makefiles/common/Defs-macosx.gmk +++ /dev/null @@ -1,402 +0,0 @@ -# -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to MACOSX. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overriden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -CC_DEPEND = -MM -CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -PLATFORM_SRC_MACOS = $(BUILDDIR)/../src/macosx - -# BSD build pulls its platform sources from the solaris tree. -JAVA_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share -NATIVE_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(OS_NAME) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files. -DEPEND_SUFFIX = d -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! -CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required! - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -# For macosx use -Os by default, unless -O3 can be proved to be worth the cost, as per policy -# -CC_OPT/NONE = -CC_OPT/LOWER = -Os -CC_OPT/HIGHER = -Os -CC_OPT/HIGHEST = -Os - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# For all platforms, do not omit the frame pointer register usage. -# We need this frame pointer to make it easy to walk the stacks. -# This should be the default on X86, but ia64 and amd64 may not have this -# as the default. -CFLAGS_REQUIRED_amd64 += -m64 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -LDFLAGS_COMMON_amd64 += -m64 -CFLAGS_REQUIRED_i586 += -m32 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -LDFLAGS_COMMON_i586 += -m32 -CFLAGS_REQUIRED_ia64 += -m64 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 -CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 -CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN -ifeq ($(ZERO_BUILD), true) - CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) - ifeq ($(ZERO_ENDIANNESS), little) - CFLAGS_REQUIRED += -D_LITTLE_ENDIAN - endif - LDFLAGS_COMMON += $(ZERO_ARCHFLAG) -else ifeq ($(ARCH), universal) - CFLAGS_REQUIRED += -arch i386 -arch x86_64 -D_LITTLE_ENDIAN - LDFLAGS_COMMON += -arch i386 -arch x86_64 -else - CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) -endif -# 16-byte stack re-alignment on 32-bit Darwin -CFLAGS_REQUIRED_i586 += -mstackrealign - -OTHER_CFLAGS = \ - -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ - -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks - -# -# Selection of warning messages -# -GCC_INHIBIT = -Wno-unused -Wno-parentheses -GCC_STYLE = -GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) - -# -# Treat compiler warnings as errors, if warnings not allowed -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - GCC_WARNINGS += -Werror -endif - -# -# Misc compiler options -# -ifneq ($(ARCH),ppc) - CFLAGS_COMMON = -fno-strict-aliasing -endif -PIC_CODE_LARGE = -fPIC -PIC_CODE_SMALL = -fpic -GLOBAL_KPIC = $(PIC_CODE_LARGE) -CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -ifeq ($(ARCH), amd64) - CFLAGS_COMMON += -pipe -endif - -# BSD 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 -DEBUG_FLAG = -g -ifeq ($(FASTDEBUG), true) - ifeq ($(ARCH_DATA_MODEL), 64) - DEBUG_FLAG = -g1 - endif -endif - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - DEBUG_FLAG = -g - CFLAGS_REQUIRED += $(DEBUG_FLAG) -endif - -CFLAGS_OPT = $(CC_OPT) -CFLAGS_DBG = $(DEBUG_FLAG) -CFLAGS_COMMON += $(CFLAGS_REQUIRED) - -CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) -CXXFLAGS_OPT = $(CC_OPT) -CXXFLAGS_DBG = $(DEBUG_FLAG) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java -ifeq ($(FASTDEBUG), true) - CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' - -# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) -ifneq ($(ARCH),alpha) - CPP_ARCH_FLAGS += -D$(ARCH) -else - CPP_ARCH_FLAGS += -D_$(ARCH)_ -endif -CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -D_ALLBSD_SOURCE $(VERSION_DEFINES) \ - -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT - -CPPFLAGS_COMMON += -DMACOSX - -ifeq ($(ARCH_DATA_MODEL), 64) -CPPFLAGS_COMMON += -D_LP64=1 -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -endif - -# Libraries need to locate other libraries at runtime, and you can tell -# a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) -# buried inside the .{so,dylib}. The {$ORIGIN,@loader_path/} says to look -# relative to where the library itself is and it can be followed -# with relative paths from that. By default we always look in -# {$ORIGIN,@loader_path/}, optionally we add relative paths if the Makefile -# sets LD_RUNPATH_EXTRAS to those relative paths. -# Except on MacOS X we add a flag -z origin, not sure if this is necessary, -# but doesn't seem to hurt. -# The environment variable LD_LIBRARY_PATH will over-ride these runpaths. -# See 'man {dyld,rtld}' for more information. -# Try: 'readelf -d lib*.so' to see these settings in a library. -# -LDFLAGS_COMMON += -Xlinker -rpath -Xlinker @loader_path/. -LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -rpath -Xlinker @loader_path/%) -LDFLAGS_COMMON += -Xlinker -install_name -Xlinker @rpath/$(@F) - -# -# -L paths for finding and -ljava -# -LDFLAGS_COMMON += -L$(LIBDIR) - -# -# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always -# statically link libgcc but will print a warning with the flag. We don't -# want the warning, so check gcc version first. -# -ifeq ($(CC_MAJORVER),3) - OTHER_LDFLAGS += -static-libgcc -endif - -# Automatic precompiled header option to use (if COMPILE_APPROACH=batch) -# (See Rules.gmk) The gcc 5 compiler might have an option for this? -AUTOMATIC_PCH_OPTION = - -# -# Post Processing of libraries/executables -# -ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - # Debug 'strip -S' leaves local function Elf symbols (better stack - # traces) - POST_STRIP_PROCESS = $(STRIP) -S - endif - endif -endif - -# -# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker - -# -# Support for Quantify. -# -ifdef QUANTIFY -QUANTIFY_CMD = quantify -QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes -LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) -endif - -# Darwin does not support linker map files. -LDNOMAP=true - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(LIBDIR)/server -L$(LIBDIR)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# -# We want to privatize JVM symbols on Solaris. This is so the user can -# write a function called FindClass and this should not override the -# FindClass that is inside the JVM. At this point in time we are not -# concerned with other JNI libraries because we hope that there will -# not be as many clashes there. -# -PRIVATIZE_JVM_SYMBOLS = false - -USE_PTHREADS = true -override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME -override AWT_RUNPATH = -override HAVE_ALTZONE = false -override HAVE_FILIOH = false -override HAVE_GETHRTIME = false -override HAVE_GETHRVTIME = false -override HAVE_SIGIGNORE = true -override LEX_LIBRARY = -lfl -ifeq ($(STATIC_CXX),true) -override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic -else -override LIBCXX = -lstdc++ -endif -override LIBPOSIX4 = -override LIBSOCKET = -override LIBNSL = -override LIBTHREAD = -override LIBDL = -override MOOT_PRIORITIES = true -override NO_INTERRUPTIBLE_IO = true -override OPENWIN_HOME = $(X11_PATH) -override OPENWIN_LIB = $(OPENWIN_HOME)/lib -override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER -override SUN_CMM_SUBDIR = -override THREADS_FLAG = native -override USE_GNU_M4 = true -override USING_GNU_TAR = true -override WRITE_LIBVERSION = false - -ifdef ALT_X11_PATH - X11_PATH = $(ALT_X11_PATH) -else - X11_PATH = /usr/X11R6 -endif - -ifdef ALT_PACKAGE_PATH - PACKAGE_PATH = $(ALT_PACKAGE_PATH) -else - PACKAGE_PATH = /opt/local -endif - -# ALSA -ifdef ALT_ALSA_LIB_PATH - ALSA_LIB_PATH = $(ALT_ALSA_LIB_PATH) -else - ALSA_LIB_PATH = $(PACKAGE_PATH)/lib -endif - -ifdef ALT_ALSA_HEADERS_PATH - ALSA_HEADERS_PATH = $(ALT_ALSA_HEADERS_PATH) -else - ALSA_HEADERS_PATH = $(PACKAGE_PATH)/include -endif - -# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the -# resulting resolved absolute name of the executable in the environment -# variable EXECNAME. That executable name is then used that to locate the -# installation area. -override USE_EXECNAME = true - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines -HAVE_DPS = no - -SYSTEM_ZLIB = true - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = UTF-8 - -# Settings for the JDI - Serviceability Agent binding. - -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) - -# The JDI - Serviceability Agent binding is not currently supported -# on ia64. -ifeq ($(ARCH), ia64) - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -ifdef CROSS_COMPILE_ARCH - # X11 headers are not under /usr/include - OTHER_CFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include -endif - -LIB_LOCATION ?= $(LIBDIR) diff --git a/jdk/makefiles/common/Defs-solaris.gmk b/jdk/makefiles/common/Defs-solaris.gmk deleted file mode 100644 index 7632e6767f1..00000000000 --- a/jdk/makefiles/common/Defs-solaris.gmk +++ /dev/null @@ -1,757 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Solaris. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overridden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) -# LINTFLAGS (set $(OTHER_LINTFLAGS) instead) -# -# Note: CPPFLAGS are used in C and C++ compiles. -# - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -ifndef PLATFORM_SRC -PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files -DEPEND_SUFFIX = d -# suffix used for lint files -LINT_SUFFIX = ln -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! - -ifdef ENABLE_FULL_DEBUG_SYMBOLS -# Only check for Full Debug Symbols support on Solaris if it is -# specifically enabled. Hopefully, it can be enabled by default -# once the .debuginfo size issues are worked out. - -# Default OBJCOPY comes from the SUNWbinutils package: -DEF_OBJCOPY=/usr/sfw/bin/gobjcopy -ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) - # On Solaris AMD64/X64, gobjcopy is not happy and fails: - # - # usr/sfw/bin/gobjcopy --add-gnu-debuglink=.debuginfo .so - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - _JUNK_ := $(shell \ - echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64") - OBJCOPY= -else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif -endif - -ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS -# The setting of OBJCOPY above enables the JDK build to import -# .debuginfo files from the HotSpot build. However, adding FDS -# support to the JDK build will occur in phases so a different -# make variable is used to indicate that a particular library -# supports FDS. - -ifeq ($(OBJCOPY),) - _JUNK_ := $(shell \ - echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.") -else - _JUNK_ := $(shell \ - echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.") - - # Library stripping policies for .debuginfo configs: - # all_strip - strips everything from the library - # min_strip - strips most stuff from the library; leaves minimum symbols - # no_strip - does not strip the library at all - # - # Oracle security policy requires "all_strip". A waiver was granted on - # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE. - # - DEF_STRIP_POLICY="min_strip" - ifeq ($(ALT_STRIP_POLICY),) - STRIP_POLICY=$(DEF_STRIP_POLICY) - else - STRIP_POLICY=$(ALT_STRIP_POLICY) - endif - _JUNK_ := $(shell \ - echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") -endif -endif -endif - -# -# Java default optimization (-x04/-O2) etc. Applies to the VM. -# -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -# -# If -Xa is in CFLAGS_COMMON it will end up ahead of $(CC_OPT) for the -# optimized build, and that ordering of the flags completely freaks -# out cc. Hence, -Xa is instead in each CFLAGS variant. -# -# The more unusual options to the Sun C compiler: -# -v Stricter type checking, more error checking -# (To turn ALL warnings into fatals, use -errwarn=%all) -# -xstrconst Place string literals and constants in read-only area -# (means you can't write on your string literals) -# -xs Force debug information (stabs) into the .so or a.out -# (makes the library/executable debuggable without the -# .o files needing to be around, but at a space cost) -# -g & -O If you add the -g option to the optimized compiles -# you will get better stack retraces, the code is -# still optimized. This includes a space cost too. -# -xc99=%none Do NOT allow for c99 extensions to be used. -# e.g. declarations must precede statements -# -xCC Allow the C++ style of comments in C: // -# Required with many of the source files. -# -mt Assume multi-threaded (important) -# -# The more unusual options to the Sun C compiler: -# +w Print more warnings -# +w2 Maximum warnings -# - -# -# Debug flag for C and C++ compiler -# -CFLAGS_DEBUG_OPTION = -g $(CC_OPT/NONE) -CXXFLAGS_DEBUG_OPTION = -g $(CXX_OPT/NONE) - -# Turn off -g if we are doing tcov build -ifdef TCOV_BUILD - CFLAGS_DEBUG_OPTION= - CXXFLAGS_DEBUG_OPTION= -endif - -# FASTDEBUG: Optimize the -g builds, gives us a faster debug java -# If true adds -O to the debug compiles. This allows for any assert -# tests to remain and debug checking. The resulting code is faster -# but less debuggable. Stack traces are still valid, although only -# approximate line numbers are given. Printing of local variables -# during a debugging session is not possible, but stepping and -# printing of global or static variables should be possible. -# Performance/size of files should be about the same, maybe smaller. -# -ifeq ($(FASTDEBUG), true) - CFLAGS_DEBUG_OPTION = -g $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DEBUG_OPTION = -g0 $(CXX_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CFLAGS_COMMON = -L$(OBJDIR) - -# Do not allow C99 language features like declarations in code etc. -CFLAGS_COMMON += -xc99=%none - -# Allow C++ comments in C code -CFLAGS_COMMON += -xCC - -# Show error message tags on errors -CFLAGS_COMMON += -errshort=tags -CXXFLAGS_COMMON += -errtags=yes - -# Optimization flags -CFLAGS_OPT = $(CC_OPT) - -# Debug version flags -CFLAGS_DBG = $(CFLAGS_DEBUG_OPTION) - -# Required C compiler flags -CFLAGS_COMMON += -Xa $(CFLAGS_REQUIRED) - -# Maximum warnings all the time -CXXFLAGS_COMMON += +w -CFLAGS_COMMON += -v - -# Assume MT behavior all the time (important) -CXXFLAGS_COMMON += -mt -CFLAGS_COMMON += -mt - -# Assume no C++ exceptions are used -CXXFLAGS_COMMON += -features=no%except -DCC_NOEX - -# For C++, these options tell it to assume nothing about locating libraries -# either at compile time, or at runtime. Use of these options will likely -# require the use of -L and -R options to indicate where libraries will -# be found at compile time (-L) and at runtime (-R). -# The /usr/lib location comes for free, so no need to specify that one. -# Note: C is much simplier and there is no need for these options. This -# is mostly needed to avoid dependencies on libraries in the -# Compiler install area, also see LIBCXX and LIBM. -CXXFLAGS_COMMON += -norunpath -xnolib - -# -# Treat compiler warnings as errors, if requested -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -errwarn=%all - CXXFLAGS_COMMON += -errwarn=%all -endif - -CXXFLAGS_OPT = $(CXX_OPT) -CXXFLAGS_DBG = $(CXXFLAGS_DEBUG_OPTION) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# Add -xstrconst to the library compiles. This forces all string -# literals into the read-only data section, which prevents them from -# being written to and increases the runtime pages shared on the system. -# -ifdef LIBRARY - CFLAGS_COMMON +=-xstrconst -endif - -# Source browser database -# -# COMPILE_WITH_SB -# If defined adds -xsb to compiles and creates a -# source browsing database during compilation. -# -ifdef COMPILE_WITH_SB - ifeq ($(LIBRARY), java) - CFLAGS_DBG += -xsb - endif -endif - -# Lint Flags: -# -Xa ANSI C plus K&R, favor ANSI rules -# -fd report on old style func defs -# -errchk=structarg report on 64bit struct args by value -# -errchk=longptr64 report on 64bit to 32bit issues (ignores casts) -# -errchk=parentheses report on suggested use of extra parens -# -v suppress unused args -# -x suppress unused externs -# -u suppress extern func/vars used/defined -# -errfmt=simple use one line errors with position info -# $(LINT_XARCH_OPTION) See Compiler-sun.gwk - -LINTFLAGS_COMMON = -Xa -LINTFLAGS_COMMON += -fd -LINTFLAGS_COMMON += -errchk=structarg,longptr64,parentheses -LINTFLAGS_COMMON += -v -LINTFLAGS_COMMON += -x -LINTFLAGS_COMMON += -u -LINTFLAGS_COMMON += -errfmt=simple -LINTFLAGS_OPT = -LINTFLAGS_DBG = - -# The -W0,-noglobal tells the compiler to NOT generate mangled global -# ELF data symbols for file local static data. -# This can break fix&continue, but we'd rather do the same compilations -# for deliverable bits as we do for non-deliverable bits -# Tell the compilers to never generate globalized names, all the time. -CFLAGS_COMMON += -W0,-noglobal - -# If we have a specific arch value to use, add it -CFLAGS_COMMON += $(XARCH_OPTION) -CXXFLAGS_COMMON += $(XARCH_OPTION) -ASFLAGS_COMMON += $(AS_XARCH_OPTION) -EXTRA_LIBS += $(XARCH_OPTION) -LINTFLAGS_COMMON += $(LINT_XARCH_OPTION) - -# -# uncomment the following to build with PERTURBALOT set -# -# OTHER_CFLAGS += -DPERTURBALOT -# - -CPPFLAGS_COMMON = -D__solaris__ -D$(ARCH_FAMILY) -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG - -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -DDBINFO -endif - -ifeq ($(ARCH_FAMILY), i586) - # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the - # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN - # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). - # Note: -Dmacro is the same as #define macro 1 - # -Dmacro= is the same as #define macro - # - CPPFLAGS_COMMON += -DcpuIntel -D_LITTLE_ENDIAN= -D$(LIBARCH) - # Turn off a superfluous compiler error message on Intel - CFLAGS_COMMON += -erroff=E_BAD_PRAGMA_PACK_VALUE -endif - -# Java memory management is based on memory mapping by default, but a -# system only assuming malloc/free can be built by adding -DUSE_MALLOC - -CPPFLAGS_COMMON += -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS -CPPFLAGS_OPT += -DTRIMMED - -LDFLAGS_DEFS_OPTION = -z defs -LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_OPT = -LDFLAGS_DBG = - -# -# We never really want the incremental linker, ever -# The -xildoff option tells Sun's compilers to NOT use incremental linker -# -LDFLAGS_COMMON += -xildoff - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'dump -Lv lib*.so' to see these settings in a library. - # - LDFLAGS_COMMON += -R\$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-R\$$ORIGIN/%) -endif - -EXTRA_LIBS += -lc - -# Postprocessing is done on the images directories only -# -ifeq ($(VARIANT), OPT) - ifeq ($(PARTIAL_GPROF), true) - NO_STRIP = true - endif - ifeq ($(GPROF), true) - NO_STRIP = true - endif - ifneq ($(NO_STRIP), true) - # Debug 'strip -x' leaves local function Elf symbols (better stack traces) - POST_STRIP_PROCESS = $(STRIP) -x - endif -endif -POST_MCS_PROCESS=$(MCS) -d -a "JDK $(FULL_VERSION)" - -# -# Sun C compiler will take -M and pass it on to ld. -# Usage: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -ifeq ($(CC_VERSION),gcc) -LD_MAPFILE_FLAG = -Xlinker -M -Xlinker -else -LD_MAPFILE_FLAG = -M -endif - -# -# Variables globally settable from the make command line (default -# values in brackets): -# GPROF (false) -# Eg: % gnumake GPROF=true -GPROF = false -ifeq ($(GPROF), true) - CFLAGS_COMMON += -DGPROF -xpg - EXTRA_LIBS += -xpg -endif - -# PARTIAL_GPROF is to be used ONLY during compilation - it should not -# appear during linking of libraries or programs. It also should -# prevent linking with -z defs to allow a symbol to remain undefined. -# -PARTIAL_GPROF = false -ifeq ($(PARTIAL_GPROF), true) - CFLAGS_GPROF += -xpg - LDFLAGS_DEFS_OPTION = -z nodefs -endif - -# -# For a TCOV build we add in the TCOV_OPTION -# -ifdef TCOV_BUILD - TCOV_OPTION = -xprofile=tcov - LDFLAGS_COMMON += $(TCOV_OPTION) -Kpic - CFLAGS_COMMON += $(TCOV_OPTION) - CXXFLAGS_COMMON += $(TCOV_OPTION) - EXTRA_LIBS += $(TCOV_OPTION) - LDNOMAP=true -endif - -# -# Solaris only uses native threads. -# -THREADS_FLAG= native -THREADS_DIR= threads - -# -# Support for Quantify. -# -ifdef QUANTIFY - QUANTIFY_CMD = quantify - QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Support for Purify. -# -ifdef PURIFY - PURIFY_CMD = /net/suntools.eng/export/tools/sparc/bin/purify - PURIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(PURIFY_CMD) $(PURIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Different "levels" of optimization. -# -ifeq ($(CC_VERSION),gcc) - - CC_OPT/NONE = - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O3 - CC_OPT/HIGHEST = -O3 - - CXX_OPT/NONE = - CXX_OPT/LOWER = -O2 - CXX_OPT/HIGHER = -O3 - CXX_OPT/HIGHEST = -O3 - - CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer - CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer - - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) May need to wait for gcc 5? - AUTOMATIC_PCH_OPTION = - -else - - # Highest could be -xO5, but indications are that -xO5 should be reserved - # for a per-file use, on sources with known performance impacts. - OPT_LEVEL/LOWER = 2 - OPT_LEVEL/HIGHER = 4 - OPT_LEVEL/HIGHEST = 4 - - CC_OPT/NONE = - CC_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%) - CC_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%) - CC_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%) - - CXX_OPT/NONE = - CXX_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%) - CXX_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%) - CXX_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%) - - # We need stack frames at all times - USE_XKEEPFRAME_OPTION = false - ifeq ($(USE_XKEEPFRAME_OPTION),true) - - # Unknown spelling on this option at this time (Maybe in SS13?) - CC_XKEEPFRAME_OPTIONS = -xkeepframe - CXX_XKEEPFRAME_OPTIONS = -xkeepframe - - else - - # On X86, make sure tail call optimization is off - # The z and y are the tail call optimizations. - ifeq ($(ARCH_FAMILY), i586) - CC_NEWER_THAN_58 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 8 \) ) - ifeq ($(CC_NEWER_THAN_58),1) - # Somehow, tail call optimization is creeping in. - # Make sure it is off. - # WARNING: These may cause compiler warnings about duplicate -O options - CC_XKEEPFRAME_OPTIONS += -Wu,-O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz - CXX_XKEEPFRAME_OPTIONS += -Qoption ube -O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz - endif - endif - - # On i586 we need to tell the code generator to ALWAYS use a - # frame pointer. - ifeq ($(ARCH_FAMILY), i586) - # Note that in 5.7, this is done with -xregs=no%frameptr - ifeq ($(CC_VER), 5.5) - # It's not exactly clear when this optimization kicks in, the - # current assumption is -xO4 or greater and for C++ with - # the -features=no%except option and -xO4 and greater. - # Bottom line is, we ALWAYS want a frame pointer! - CC_XKEEPFRAME_OPTIONS += -Wu,-Z~B - CXX_XKEEPFRAME_OPTIONS += -Qoption ube -Z~B - endif - - CC_NEWER_THAN_56 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) ) - ifeq ($(CC_NEWER_THAN_56),1) - # Do NOT use frame pointer register as a general purpose opt register - CC_OPT/NONE += -xregs=no%frameptr - CXX_OPT/NONE += -xregs=no%frameptr - CC_XKEEPFRAME_OPTIONS += -xregs=no%frameptr - CXX_XKEEPFRAME_OPTIONS += -xregs=no%frameptr - endif - endif - - # Optimizer for sparc needs to be told not to do certain things - # related to frames or save instructions. - ifeq ($(ARCH_FAMILY), sparc) - # Do not use save instructions instead of add instructions - # This was an optimization starting in SC5.0 that made it hard for us to - # find the "save" instruction (which got turned into an "add") - CC_XKEEPFRAME_OPTIONS += -Wc,-Qrm-s - CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qrm-s - # Don't allow tail call code optimization. Started in SC5.0. - # We don't like code of this form: - # save - # - # call foo - # restore - # because we can't tell if the method will have a stack frame - # and register windows or not. - CC_XKEEPFRAME_OPTIONS += -Wc,-Qiselect-T0 - CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qiselect-T0 - endif - - endif - - # Extra options used with HIGHEST - # - # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be - # done with care, there are some assumptions below that need to - # be understood about the use of pointers, and IEEE behavior. - # - # Use non-standard floating point mode (not IEEE 754) - CC_HIGHEST_EXTRAS += -fns - # Do some simplification of floating point arithmetic (not IEEE 754) - CC_HIGHEST_EXTRAS += -fsimple - # Use single precision floating point with 'float' - CC_HIGHEST_EXTRAS += -fsingle - # Assume memory references via basic pointer types do not alias - # (Source with excessing pointer casting and data access with mixed - # pointer types are not recommended) - CC_HIGHEST_EXTRAS += -xalias_level=basic - # Use intrinsic or inline versions for math/std functions - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_EXTRAS += -xbuiltin=%all - # Loop data dependency optimizations (need -xO3 or higher) - CC_HIGHEST_EXTRAS += -xdepend - # Pointer parameters to functions do not overlap - # (Similar to -xalias_level=basic usage, but less obvious sometimes. - # If you pass in multiple pointers to the same data, do not use this) - CC_HIGHEST_EXTRAS += -xrestrict - # Inline some library routines - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_EXTRAS += -xlibmil - # Use optimized math routines - # (If you expect perfect errno behavior, do not use this) - # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now - # CC_HIGHEST_EXTRAS += -xlibmopt - ifeq ($(ARCH_FAMILY), sparc) - # Assume at most 8byte alignment, raise SIGBUS on error - ### Presents an ABI issue with customer JNI libs? - ####CC_HIGHEST_EXTRAS += -xmemalign=8s - # Automatic prefetch instructions, explicit prefetch macros - CC_HIGHEST_EXTRAS += -xprefetch=auto,explicit - # Pick ultra as the chip to optimize to - CC_HIGHEST_EXTRAS += -xchip=ultra - endif - ifeq ($(ARCH), i586) - # Pick pentium as the chip to optimize to - CC_HIGHEST_EXTRAS += -xchip=pentium - endif - ifdef LIBRARY - # The Solaris CBE (Common Build Environment) requires that the use - # of appl registers be disabled when compiling a public library (or - # a library that's loaded by a public library) on sparc. - CFLAGS_REQUIRED_sparc += -xregs=no%appl - CFLAGS_REQUIRED_sparcv9 += -xregs=no%appl - endif - CC_NEWER_THAN_56 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) ) - ifeq ($(CC_NEWER_THAN_56),1) - # Presents an ABI issue with customer JNI libs? We must be able to - # to handle 4byte aligned objects? (rare occurance, but possible?) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Just incase someone trys to use the SOS9 compilers - ifeq ($(CC_VER), 5.6) - # We MUST allow data alignment of 4 for sparc (sparcv9 is ok at 8s) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) The SS11 -xpch=auto* options appear to be broken. - AUTOMATIC_PCH_OPTION = - - # Add in keep frame options - CC_OPT/LOWER += $(CC_XKEEPFRAME_OPTIONS) - CC_OPT/HIGHER += $(CC_XKEEPFRAME_OPTIONS) - CC_OPT/HIGHEST += $(CC_XKEEPFRAME_OPTIONS) - CXX_OPT/LOWER += $(CXX_XKEEPFRAME_OPTIONS) - CXX_OPT/HIGHER += $(CXX_XKEEPFRAME_OPTIONS) - CXX_OPT/HIGHEST += $(CXX_XKEEPFRAME_OPTIONS) - - # Add in highest optimization settings - CC_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS) - CXX_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS) - -endif - -# Default optimization settings based on level. -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) -CXX_OPT = $(CXX_OPT/$(OPTIMIZATION_LEVEL)) - -# Flags required all the time -CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(LIBDIR)/$(LIBARCH)/server -L$(LIBDIR)/$(LIBARCH)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -# In addition on Solaris, any include file starting with / is deleted, -# this gets rid of things like /usr/include files, which never change. -CC_DEPEND = -xM1 -CC_DEPEND_FILTER = $(SED) -e '/:[ ]*[/]/d' -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' | $(SORT) -u - -# Location of openwin libraries (do we really need this anymore?) -OPENWIN_HOME = /usr/openwin -OPENWIN_LIB = $(OPENWIN_HOME)/lib$(ISA_DIR) - -# Runtime graphics library search paths... -OPENWIN_RUNTIME_LIB = /usr/openwin/lib$(ISA_DIR) -AWT_RUNPATH = -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_RUNTIME_LIB) - -# C++ Runtime library (libCrun.so), use instead of -lCrun. -# Originally used instead of -lCrun to guarantee use of the system -# .so version and not the .a or .so that came with the compilers. -# With the newer compilers this could probably change back to -lCrun but -# in general this is ok to continue to do. -LIBCXX = /usr/lib$(ISA_DIR)/libCrun.so.1 - -# JDK now requires Solaris 10, so pick up libm.so.2 -LIBM = /usr/lib$(ISA_DIR)/libm.so.2 - -# Socket library -LIBSOCKET = -lsocket - -# Network Services library -LIBNSL = -lnsl - -# service configuration facility library -LIBSCF = -lscf - -# Dynamic Loading library -LIBDL = -ldl - -# GLOBAL_KPIC: If set means all libraries are PIC, position independent code -# EXCEPT for select compiles -# If a .o file is compiled non-PIC then it should be forced -# into the RW data segment with a mapfile option. This is done -# with object files which generated from .s files. -# The -ztext enforces that no relocations remain in the text segment -# so that it remains purely read-only for optimum system performance. -# Some libraries may use a smaller size (13bit -Kpic) on sparc instead of -# (32 bit -KPIC) and will override GLOBAL_KPIC appropriately. -# -PIC_CODE_LARGE = -KPIC -PIC_CODE_SMALL = -Kpic -ifndef TCOV_BUILD - GLOBAL_KPIC = $(PIC_CODE_LARGE) - CXXFLAGS_COMMON += $(GLOBAL_KPIC) - CFLAGS_COMMON += $(GLOBAL_KPIC) - LDFLAGS_COMMON += -ztext -endif # TCOV_BUILD - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines - -HAVE_DPS = yes - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = eucJP UTF-8 PCK - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) -SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo -INCLUDE_SA=true - diff --git a/jdk/makefiles/common/Defs-windows.gmk b/jdk/makefiles/common/Defs-windows.gmk deleted file mode 100644 index 54c9879adf5..00000000000 --- a/jdk/makefiles/common/Defs-windows.gmk +++ /dev/null @@ -1,418 +0,0 @@ -# -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Windows builds. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -Fo - -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = lib -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = .bat - -# LIB_LOCATION, which for windows identifies where .exe files go, may be -# set by each GNUmakefile. The default is BINDIR. -ifndef LIB_LOCATION - LIB_LOCATION = $(BINDIR) -endif # LIB_LOCATION - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/windows -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/windows - endif -endif - -# for backwards compatability, the old "win32" is used here instead of -# the more proper "windows" -PLATFORM_INCLUDE_NAME = win32 -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# The following DLL's are considered MS runtime libraries and should -# not to be REBASEd, see deploy/make/common/Release.gmk. -# msvcr*.dll: Microsoft runtimes -ifeq ($(COMPILER_VERSION), VS2010) - MSVCRNN_DLL = msvcr100.dll - MSVCPNN_DLL = msvcp100.dll -endif - -EXTRA_LFLAGS += /LIBPATH:$(DXSDK_LIB_PATH) - -# C Compiler flag definitions - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -ifeq ($(CC_VERSION),msvc) - # Visual Studio compiler option definitions: - # -O1 Favors reduced size over speed (-Og -Os -Oy -Ob2 -Gs -GF -Gy) - # -O2 Favors speed over reduced size (-Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy) - # -Ob2 More aggressive inlining - # -Og Global optimizations - # -Oi Replace some functions with intrinsic or special forms - # -fp:precise (should be the default) - # Improve floating point calculations (disables some optimizations) - # -Os Favor small code - # -Ot Favor faster code - # -Oy Frame pointer omission - # -G6 Used to be -GB? - # -GF Pool strings in read-only memory - # -Gf Pool strings in read-write memory (the default) - # -Gs Controls stack probess - # -GS Adds buffer overflow checks on stacks (the default) - # -EHsc Enables exception handling - # -Gy Function level linking only - # - - CC_OPT/NONE = -Od - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O3 - CC_OPT/HIGHEST = -O3 - - ifeq ($(COMPILER_VERSION), VS2010) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = - GX_OPTION = -EHsc - GZ_OPTION = -RTC1 - ifeq ($(ARCH_DATA_MODEL), 32) - CC_OPT/HIGHEST = -O2 - CC_OPT/HIGHER = -O1 - CC_OPT/LOWER = -O1 - else - CC_OPT/HIGHEST = -O2 - CC_OPT/HIGHER = -O1 - CC_OPT/LOWER = -O1 - endif - endif - -else # CC_VERSION - # GCC not supported, but left for historical reference... - CC_OPT/NONE = - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O2 - CC_OPT/HIGHEST = -O3 - -endif - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# Select the runtime support library carefully, need to be consistent -# -# Visual Studio Runtime compiler option definitions: -# -MD Use dynamic multi-threaded runtime library -# -MDd Use debug version (don't use, doesn't mix with -MD DLL's) -# -MT Use static multi-threaded runtime library (-ML is going away) -# -MTd Use static debug version (better than -MDd, no runtime issues) -# -D_DEBUG Change use of malloc/free/etc to use special debug ones (-MTd) -# -# NOTE: We also will use /D _STATIC_CPPLIB so we don't need msvcpnn.dll -# -# If MS_RUNTIME_STATIC is requested we may have a problem, it is no longer -# supported by VS2010 -ifneq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MD -endif -# The _DEBUG macro option (changes things like malloc to use debug version) -MS_RUNTIME_DEBUG_OPTION= -MS_RC_DEBUG_OPTION= -# Externally set environment variable can force any build to use the debug vers -ifeq ($(MFC_DEBUG), true) - ifeq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MTd - else - # This MS debugging flag forces a dependence on the debug - # version of the runtime library (MSVCR*D.DLL), as does -MDd. - # We cannot re-distribute this debug runtime. - MS_RUNTIME_OPTION=-MDd - endif - MS_RUNTIME_DEBUG_OPTION= -D_DEBUG - MS_RC_DEBUG_OPTION= -d _DEBUG -endif - -# Always add _STATIC_CPPLIB definition -STATIC_CPPLIB_OPTION = /D _STATIC_CPPLIB - -# Silence the warning about using _STATIC_CPPLIB -ifneq ($(SHOW_ALL_WARNINGS),true) - # Needed with VS2010 to turn off the deprecated warning. - STATIC_CPPLIB_OPTION += /D _DISABLE_DEPRECATE_STATIC_CPPLIB -endif - -MS_RUNTIME_OPTION += $(STATIC_CPPLIB_OPTION) - -ifeq ($(CC_VERSION),msvc) - # Visual Studio compiler option definitions: - # -Zi Cause *.pdb file to be created, full debug information - # -Z7 Full debug inside the .obj, no .pdb - # -Zd Basic debug, no local variables? In the .obj - # -Zl Don't add runtime library name to obj file? - # -Od Turns off optimization and speeds compilation - # -YX -Fp/.../foobar.pch Use precompiled headers (try someday?) - # -nologo Don't print out startup message - # /D _STATIC_CPPLIB - # Use static link for the C++ runtime (so msvcpnn.dll not needed) - # - CFLAGS_COMMON += -Zi -nologo - CFLAGS_OPT = $(CC_OPT) - CFLAGS_DBG = -Od $(MS_RUNTIME_DEBUG_OPTION) - - CFLAGS_VS2010 += -Zc:wchar_t- - - # All builds get the same runtime setting - CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION)) - - LDEBUG = /debug - - ifeq ($(VTUNE_SUPPORT), true) - OTHER_CFLAGS = -Z7 -Ox - LDEBUG += /pdb:NONE - endif - - # VS2010, always need safe exception handlers, not needed on 64bit - ifeq ($(ARCH_DATA_MODEL), 32) - LFLAGS_VS2010 += -SAFESEH - endif - - # LFLAGS are the flags given to $(LINK) and used to build the actual DLL file - BASELFLAGS = -nologo /opt:REF /incremental:no - - LFLAGS = $(BASELFLAGS) $(LDEBUG) $(EXTRA_LFLAGS) $(LFLAGS_$(COMPILER_VERSION)) - LDDFLAGS += $(LFLAGS_$(COMPILER_VERSION)) - -endif - -# -# Preprocessor macro definitions -# -CPPFLAGS_COMMON = -DWIN32 -DIAL -D_LITTLE_ENDIAN -ifeq ($(ARCH), amd64) - CPPFLAGS_COMMON += -D_AMD64_ -Damd64 -else - CPPFLAGS_COMMON += -D_X86_ -Dx86 -endif -CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN - -# -# Output options (use specific filenames to avoid parallel compile errors) -# -CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map - -# -# Use -wdNNNN to disable warning NNNN. -# C4800 is a warning about bool performance casts (can't make go away) -# -COMPILER_WARNINGS_TO_IGNORE = 4800 -CFLAGS_COMMON += $(COMPILER_WARNINGS_TO_IGNORE:%=-wd%) - -# -# Treat compiler warnings as errors, if requested -# -CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL) -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -WX -endif - -# Turn off some warnings by default, enable them all if asked. -ifneq ($(SHOW_ALL_WARNINGS),true) - # The -D _CRT_SECURE_NO_DEPRECATE turns off security/deprecated warnings on - # the standard C library functions like strcpy. - CFLAGS_COMMON += -D _CRT_SECURE_NO_DEPRECATE - # The -D _CRT_NONSTDC_NO_DEPRECATE turns off deprecation warnings about using - # non-standard C POSIX functions. - CFLAGS_COMMON += -D _CRT_NONSTDC_NO_DEPRECATE -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -DLOGGING - -CXXFLAGS_COMMON = $(CFLAGS_COMMON) -CXXFLAGS_OPT = $(CFLAGS_OPT) -CXXFLAGS_DBG = $(CFLAGS_DBG) - -ifneq ($(LIBRARY),fdlibm) - EXTRA_LIBS += advapi32.lib -endif - -# -# Path and option to link against the VM, if you have to. -# -JVMLIB = $(LIBDIR)/jvm.lib -JAVALIB = $(LIBDIR)/java.lib - -ifeq ($(CC_VERSION), msvc) - CC_DEPEND = -FD - CC_DEPEND_FILTER = -else # CC_VERSION -# not supported, but left for historical reference... - CC_DEPEND = -MM - CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)&!g' -endif # CC_VERSION - -LIBRARY_SUFFIX = dll -LIB_SUFFIX = lib - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/bin -SALIB_NAME = $(LIB_PREFIX)sawindbg.$(LIBRARY_SUFFIX) -SAMAP_NAME = $(LIB_PREFIX)sawindbg.map -SAPDB_NAME = $(LIB_PREFIX)sawindbg.pdb - -ifeq ($(ARCH), ia64) - # SA will never be supported here. - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -# Settings for the VERSIONINFO tap on windows. -VERSIONINFO_RESOURCE = $(BUILDDIR)/../src/windows/resource/version.rc - -ifneq ($(JDK_BUILD_NUMBER),) - COOKED_BUILD_NUMBER = $(shell $(ECHO) $(JDK_BUILD_NUMBER) | $(SED) -e 's/^b//' -e 's/^0//') -else - COOKED_BUILD_NUMBER = 0 -endif - -# If the update version contains non-numeric characters, we need -# to massage it into a numeric format. -# We use the following formula: -# JDK_UPDATE_VER = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION -# -# Here are some examples: -# 1.5.0 b01 -> 5,0,0,1 -# 1.5.0_10 b01 -> 5,0,100,1 -# 1.4.2 b01 -> 4,2,0,1 -# 1.4.2_02 b01 -> 4,2,20,1 -# 1.4.2_02a b01 -> 4,2,21,1 -# 1.4.2_02b b01 -> 4,2,22,1 -ifdef JDK_UPDATE_VERSION - VTMP := $(shell $(ECHO) $(JDK_UPDATE_VERSION) | $(TR) "abcde" "12345") - CAB_CHAR1 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 1, 1);}') - CAB_CHAR2 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 2, 1);}') - CAB_CHAR3 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 3, 1);}') - JDK_UPDATE_META_TAG := U$(MARKETING_NUMBER) - ifeq ($(CAB_CHAR3),) - CAB_CHAR3 := 0 - endif - ifeq ($(CAB_CHAR1), 0) - JDK_UPDATE_VER := $(CAB_CHAR2)$(CAB_CHAR3) - else - JDK_UPDATE_VER := $(CAB_CHAR1)$(CAB_CHAR2)$(CAB_CHAR3) - endif -else - JDK_UPDATE_VER := 0 -endif - -#RC_FLAGS = /l 0x409 /r - -#ifeq ($(VARIANT), OPT) -# RC_FLAGS += -d NDEBUG -#else -# RC_FLAGS += $(MS_RC_DEBUG_OPTION) -#endif - -# Values for the RC variables defined in RC_FLAGS -#JDK_RC_BUILD_ID = $(FULL_VERSION) -#JDK_RC_COMPANY = $(COMPANY_NAME) -#JDK_RC_COMPONENT = $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) binary -#JDK_RC_VER = \ -# $(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER) -#JDK_RC_COPYRIGHT = Copyright \xA9 $(COPYRIGHT_YEAR) -#JDK_RC_NAME = \ -# $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG) -#JDK_RC_FVER = \ -# $(JDK_MINOR_VERSION),$(JDK_MICRO_VERSION),$(JDK_UPDATE_VER),$(COOKED_BUILD_NUMBER) - -# JDK name required here -#RC_FLAGS += -d "JDK_BUILD_ID=$(JDK_RC_BUILD_ID)" \ -# -d "JDK_COMPANY=$(JDK_RC_COMPANY)" \ -# -d "JDK_COMPONENT=$(JDK_RC_COMPONENT)" \ -# -d "JDK_VER=$(JDK_RC_VER)" \ -# -d "JDK_COPYRIGHT=$(JDK_RC_COPYRIGHT)" \ -# -d "JDK_NAME=$(JDK_RC_NAME)" \ -# -d "JDK_FVER=$(JDK_RC_FVER)" - -# Enable 7-Zip LZMA file (de)compression for Java Kernel if it is available -ifeq ($(ARCH_DATA_MODEL), 32) - ifneq ($(KERNEL), off) - # This is a hack to use until 7-Zip (and UPX) bundles can be put - # under /java/devtools. - ifndef DEPLOY_TOPDIR - DEPLOY_TOPDIR=$(JDK_TOPDIR)/../deploy - endif - # Uncomment this block to cause build failure if above assumption false - #DCHK = $(shell if [ ! -d $(DEPLOY_TOPDIR) ] ; then \ - # $(ECHO) deploy_not_a_peer_of_j2se ; \ - #fi ) - #ifeq ($(DCHK), deploy_not_a_peer_of_j2se) - # If a build failure points to control coming here it means - # it means deploy is not in the same directory - # as j2se. Java Kernel can't tolerate that for the time being. - #endif - EC_TMP = $(shell if [ -d $(DEPLOY_TOPDIR)/make/lzma ] ; then \ - $(ECHO) true ; \ - else \ - $(ECHO) false ; \ - fi ) - ifeq ($(EC_TMP), true) - EXTRA_COMP_INSTALL_PATH = lib\\\\deploy\\\\lzma.dll - # Crazy but true: deploy/make/plugin/jinstall/Makefile.jkernel does - # not include deploy/make/common/Defs-windows.gmk, either directly - # or indirectly. But it does include this file, so redundantly declare - # these variables that are in deploy/make/common/Defs-windows.gmk for - # the sake of the Java Kernel part of the deploy build. Whew! - EXTRA_COMP_LIB_NAME = lzma.dll - EXTRA_COMP_PATH = $(OUTPUTDIR)/tmp/deploy/lzma/win32/obj - EXTRA_COMP_CMD_PATH = $(EXTRA_COMP_PATH)/lzma.exe - EXTRA_COMP_LIB_PATH = $(EXTRA_COMP_PATH)/$(EXTRA_COMP_LIB_NAME) - endif - endif -endif diff --git a/jdk/makefiles/common/Defs.gmk b/jdk/makefiles/common/Defs.gmk deleted file mode 100644 index be43455b5fd..00000000000 --- a/jdk/makefiles/common/Defs.gmk +++ /dev/null @@ -1,577 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Common variables used by all the Java makefiles. This file should -# not contain rules. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Check for strange explicit settings (change to empty or true) -ifdef OPENJDK - ifneq ($(OPENJDK),true) - x:=$(error "OPENJDK (if defined) can only be set to true") - endif -endif - -# -# On Solaris, the 'make' utility from Sun will not work with these makefiles. -# This little rule is only understood by Sun's make, and is harmless -# when seen by the GNU make tool. If using Sun's make, this causes the -# make command to fail. -# -SUN_MAKE_TEST:sh = echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 - -include $(SPEC) -include $(JDK_MAKE_SHARED_DIR)/Platform.gmk - -# Historically PLATFORM_SRC used to be src/$(PLATFORM), but we switched it to -# src/solaris so if you want to build on Linux you didn't need a src/linux -# directory. In an ideal world it would be called src/genunix but we are not -# there yet. -# -ifndef SHARE_SRC - SHARE_SRC = $(BUILDDIR)/../src/share -endif - -# Files that cannot be included in the OpenJDK distribution are -# collected under a parent directory which contains just those files. -ifndef CLOSED_SRC - CLOSED_SRC = $(BUILDDIR)/../src/closed -endif - -# If CLOSE_SRC_INCLUDED isn't set to true, check if there's any -# closed directory. -ifneq ($(CLOSED_SRC_INCLUDED), true) - CLOSED_SRC_INCLUDED := $(shell \ - if [ -d $(CLOSED_SRC) ] ; then \ - echo true; \ - else \ - echo false; \ - fi) -endif - -# Set OPENJDK based on CLOSED_SRC_INCLUDED -ifeq ($(CLOSED_SRC_INCLUDED), false) - OPENJDK = true -endif - -# Define where closed directories are -ifdef OPENJDK - CLOSED_SRC = - CLOSED_SHARE_SRC = -else - ifndef CLOSED_SHARE_SRC - CLOSED_SHARE_SRC = $(CLOSED_SRC)/share - endif -endif - -# -# Get platform definitions -# - -include $(JDK_TOPDIR)/makefiles/common/Defs-$(PLATFORM).gmk - -# -# SE-Embedded support, if enabled -# - -include $(JDK_TOPDIR)/makefiles/common/Defs-embedded.gmk - -# -# Cross-compilation Settings -# -ifdef CROSS_COMPILE_ARCH - # Can't run the tools we just built - USE_ONLY_BOOTDIR_TOOLS = true - - # When cross-compiling CC generates code for the target, but - # some parts of the build generate C code that has to be compiled - # and executed on the build host - HOST_CC is the 'local' compiler. - # For linux the default is /usr/bin/gcc; other platforms need to - # set it explicitly - ifeq ($(PLATFORM), linux) - ifndef HOST_CC - HOST_CC = $(USRBIN_PATH)gcc - endif - endif -else - # Must set HOST_CC if not already set - ifndef HOST_CC - HOST_CC = $(CC) - endif -endif - -# Reset the VM name for client-only builds -ifeq ($(JVM_VARIANT),client) - VM_NAME = client -endif - -# -# Freetype logic is applicable to OpenJDK only -# -ifdef OPENJDK - -ifeq ($(PLATFORM), windows) - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/win32/freetype-$(ARCH) -endif -ifeq ($(PLATFORM), linux) - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(PLATFORM)/freetype-$(ARCH) -endif -ifeq ($(PLATFORM), solaris) - # historically for Solaris we have slightly different devtools - # naming conventions - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/freetype-$(ARCH) -endif - -DEVTOOLS_FT_DIR_EXISTS = $(shell \ - if [ -f $(DEVTOOLS_FT_DIR)/include/ft2build.h ] ; then \ - echo true; \ - else \ - echo false; \ - fi) - - ifdef ALT_FREETYPE_LIB_PATH - FREETYPE_LIB_PATH = $(ALT_FREETYPE_LIB_PATH) - ifeq ($(PLATFORM), macosx) - USING_SYSTEM_FT_LIB=true - endif - else - ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) - FREETYPE_LIB_PATH = $(DEVTOOLS_FT_DIR)/lib - else - ifeq ($(PLATFORM), macosx) - FREETYPE_LIB_PATH = /usr/X11R6/lib - else - FREETYPE_LIB_PATH = /usr/lib - endif - USING_SYSTEM_FT_LIB=true - endif - endif - - ifdef ALT_FREETYPE_HEADERS_PATH - FREETYPE_HEADERS_PATH = $(ALT_FREETYPE_HEADERS_PATH) - else - ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) - FREETYPE_HEADERS_PATH = $(DEVTOOLS_FT_DIR)/include - else - ifeq ($(PLATFORM), macosx) - FREETYPE_HEADERS_PATH = /usr/X11R6/include - else - FREETYPE_HEADERS_PATH = /usr/include - endif - endif - endif -endif - -# -# zlib version -# -ZLIB_VERSION = 1.2.5 - - -# -# Localizations for the different parts of the product beyond English -# - -JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK -PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK -JDK_LOCALES = ja zh_CN - -# -# A list of locales we support but don't have resource files. -# This is defined to optimize the search of resource bundles. -# -JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh - -# -# For now, most libraries except libjava and libjvm itself link against libjvm -# and libjava, the latter for its exported common utilities. libjava only -# links against libjvm. Programs' makefiles take their own responsibility for -# adding other libs. -# -# The makefiles for these packages do not link against libjvm and libjava. -# This list will eventually go away and each Programs' makefiles -# will have to explicitly declare that they want to link to libjava/libjvm -# -NO_JAVALIB_PKGS = \ - sun.security.mscapi \ - sun.security.krb5 \ - sun.security.pkcs11 \ - sun.security.jgss \ - sun.security.jgss.wrapper \ - sun.security.ec \ - sun.security.smartcardio \ - com.sun.security.auth.module - -ifdef PACKAGE -# put JAVALIB first, but do not lose any platform specific values.... - ifeq (,$(findstring $(PACKAGE),$(NO_JAVALIB_PKGS))) - LDLIBS_COMMON = $(JAVALIB) - endif -endif # PACKAGE - -# -# Libraries that must appear ahead of libc.so on the link command line -# -ifdef PROGRAM - - ifeq ($(PLATFORM), solaris) - LDLIBS_COMMON = -lthread -ldl - endif - - ifeq ($(PLATFORM), linux) - LDLIBS_COMMON = -ldl - endif - - ifeq ($(PLATFORM), macosx) - LDLIBS_COMMON = -pthread - endif - -endif # PROGRAM - -LDLIBS_COMMON += $(EXTRA_LIBS) - -# for generated binaries -BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR) -# for generated libraries -LIBDIR = $(OUTPUTDIR)/lib -ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib -# Optional place to save the windows .lib files -LIBFILES_DIR = $(OUTPUTDIR)/libfiles -# for ext jre files -EXTDIR = $(LIBDIR)/ext -# for generated include files -INCLUDEDIR = $(OUTPUTDIR)/include -# for generated class files -CLASSBINDIR = $(OUTPUTDIR)/classes -DEMOCLASSDIR = $(OUTPUTDIR)/democlasses -# for generated tool class files -BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses -# for build tool jar files -BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars -ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars -# for generated tool class files -BUILDTOOLBINDIR = $(OUTPUTDIR)/btbins -# for generated java source files -GENSRCDIR = $(OUTPUTDIR)/gensrc -# for generated C source files (not javah) -GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc -# for imported source files -IMPORTSRCDIR = $(OUTPUTDIR)/impsrc -# for imported documents -IMPORTDOCDIR = $(OUTPUTDIR)/impdoc -# for generated demo -DEMODIR = $(OUTPUTDIR)/demo -NEWDEMODIR = $(OUTPUTDIR)/newdemo -# for sample code -SAMPLEDIR = $(OUTPUTDIR)/sample -# for generated documentation -DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) -DOCSDIRSUFFIX = - -# The MESSAGE, WARNING and ERROR files are used to store sanityck and -# warnings and errors. -ifndef ERROR_FILE - ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt -endif -ifndef WARNING_FILE - WARNING_FILE = $(OUTPUTDIR)/sanityCheckWarnings.txt -endif -ifndef MESSAGE_FILE - MESSAGE_FILE = $(OUTPUTDIR)/sanityCheckMessages.txt -endif - -#where the demo source can be found -DEMOSRCDIR = $(SHARE_SRC)/demo - -#where the sample source can be found -SAMPLESRCDIR = $(SHARE_SRC)/sample - -# An attempt is made to generate unique enough directories for the -# generated files to not have name collisisons. Most build units -# defines PRODUCT (except Release.gmk), but then they may or may -# not define PACKAGE, PROGRAM, and LIBRARY. This code attempts to -# generate a unique OBJDIR/CLASSHDRDIR for each build unit based -# on which of those values are set within each build unit. - -UNIQUE_LOCATION_STRING = tmp - -ifneq ($(PRODUCT),) - UNIQUE_LOCATION_STRING += /$(PRODUCT) -endif - -ifneq ($(PACKAGE),) - UNIQUE_LOCATION_STRING += /$(PACKAGE) -endif - -ifneq ($(PROGRAM),) - UNIQUE_LOCATION_STRING += /$(PROGRAM) -endif - -ifneq ($(LIBRARY),) - ifneq ($(LIBRARY_OUTPUT),) - UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) - else - UNIQUE_LOCATION_STRING += /$(LIBRARY) - endif -endif - -# the use of += above makes a space separated list which we need to -# remove for filespecs. -# -NULLSTRING := -ONESPACE := $(NULLSTRING) # space before this comment is required. -UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) - -# TEMPDIR is a unique general purpose directory -# need to use 'override' because GNU Make on Linux exports the wrong -# value. -TEMPDIR ?= $(OUTPUTDIR)/$(UNIQUE_PATH) -ABS_TEMPDIR ?= $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) - -# This must be created right away for pattern rules in Sanity.gmk to work. -dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) -dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) - -# OBJDIRNAME is the name of the directory where the object code is to -# be placed. It's name depends on whether the data model architecture -# is 32-bit or not. -ifneq ($(ARCH_DATA_MODEL), 32) - OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) -else - OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) -endif -OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) - -# CLASSHDRDIR is where the generated C Class Header files go. -CLASSHDRDIR = $(TEMPDIR)/CClassHeaders - -# -# CLASSDESTDIR can be used to specify the directory where generated classes -# are to be placed. The default is CLASSBINDIR. -# -ifndef CLASSDESTDIR -CLASSDESTDIR = $(CLASSBINDIR) -endif - -INCLUDES = -I. -I$(CLASSHDRDIR) \ - $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) -OTHER_CPPFLAGS += $(INCLUDES) - -# -# vpaths. These are the default locations searched for source files. -# GNUmakefiles of individual areas often override the default settings. -# There are no longer default vpath entries for C and assembler files -# so we can ensure that libraries don't get their hands on JVM files. -# -# We define an intermediate variable for Java files because -# we use its value later to help define $SOURCEPATH - -ifeq ($(PLATFORM), macosx) - VPATH0.java = $(subst $(ONESPACE),:,$(GENSRCDIR) $(call JavaSrcDirList,,classes)) -else - VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes -endif - -ifdef OPENJDK - VPATH.java = $(VPATH0.java) -else - # - # If filenames are duplicated between open/closed workspaces, prefer - # the closed files. - # - # Source ordering is important: some targets depend on closed files - # replacing open ones, and thus the closed file sources must be found - # before the open ones. - # - # Don't reorder without consulting the teams that depend on this behavior. - # - VPATH.java = $(CLOSED_PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(CLOSED_SHARE_SRC)/classes$(CLASSPATH_SEPARATOR)$(VPATH0.java) -endif -vpath %.java $(VPATH.java) -vpath %.class $(CLASSBINDIR) -vpath %.$(OBJECT_SUFFIX) $(OBJDIR) - -# -# VPATH.h is used elsewhere to generate include flags. By default, -# anyone has access to the include files that the JVM area exports, -# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific -# relatives. -# -VPATH0.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export -ifdef OPENJDK - VPATH.h = $(VPATH0.h) -else - VPATH.h = $(CLOSED_SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(VPATH0.h) -endif -vpath %.h $(VPATH.h) - -# -# Used in two ways: helps link against libjava.so. Also if overridden -# determines where your shared library is installed. -# -ifndef LIB_LOCATION - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -# -# Java header and stub variables -# -CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) -CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) -STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h - -# -# Classpath seen by javac (different from the one seen by the VM -# running javac), and useful variables. -# -SOURCEPATH = $(VPATH.java) -PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') -PKGDIR = $(subst .,/,$(PACKAGE)) - -# -# The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) -# -include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk - -UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH)) - -# Run MAKE $@ for a launcher: -# $(call make-launcher, name, mainclass, java-args, main-args) -define make-launcher -$(CD) $(BUILDDIR)/launchers && \ -$(MAKE) -f Makefile.launcher \ - PROGRAM=$(strip $1) \ - MAIN_CLASS=$(strip $2) \ - MAIN_JAVA_ARGS="$(strip $3)" \ - MAIN_ARGS="$(strip $4)" -endef - -# -# Convenient macros -# - -# Prepare $@ target, remove old one and making sure directory exists -define prep-target -mkdir -p $(@D) -rm -f $@ -endef - -# Simple install of $< file to $@ -define install-file -$(prep-target) -$(CP) $< $@ -endef - -define chmod-file -$(CHMOD) $1 $@ -endef - -define install-sym-link -$(LN) -s $1 $@ -endef - -define install-manifest-file -$(install-file) -endef - -# Cleanup rule for after debug java run (hotspot.log file is left around) -# (This could be an old leftover file in a read-only area, use the @- prefix) -HOTSPOT_LOG_NAME = hotspot.log -define java-vm-cleanup -if [ -w $(HOTSPOT_LOG_NAME) ] ; then rm -f $(HOTSPOT_LOG_NAME); fi -endef - -# Current directory -CURRENT_DIRECTORY := $(shell $(PWD)) - -# -# Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is -# used for this file, otherwise the default settings are used. -# -CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ - $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) -CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ - $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) - -# -# Tool flags -# -# EXTRA_CFLAGS are used to define cross-compilation options -# -ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) -CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) $(EXTRA_CFLAGS) -CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) $(EXTRA_CFLAGS) -CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ - $(DEFINES) $(OPTIONS:%=-D%) -LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) -LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) -LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ - $(OTHER_LINTFLAGS) - -VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' - -ifdef INSANE - export INSANE -endif - -ifdef ALT_COPYRIGHT_YEAR - COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) -else - COPYRIGHT_YEAR := $(shell $(DATE) '+%Y') -endif - -ifndef OPENJDK -include $(JDK_TOPDIR)/make/closed/common/Defs.gmk -endif - -# Install of imported file (JDK_IMPORT_PATH, or some other external location) -define install-importonly-file -@$(ECHO) "ASSEMBLY_IMPORT: $@" -$(prep-target) -$(CP) $< $@ -@if [ "$(PLATFORM)" = "linux" -a "$(@F)" = "libjvm.so" ] ; then \ - if [ -x /usr/sbin/selinuxenabled ] ; then \ - /usr/sbin/selinuxenabled; \ - if [ $$? = 0 ] ; then \ - $(ECHO) "/usr/bin/chcon -t textrel_shlib_t $@"; \ - /usr/bin/chcon -t textrel_shlib_t $@; \ - if [ $$? != 0 ]; then \ - echo "ERROR: Cannot chcon $@"; \ - fi; \ - fi; \ - fi; \ -fi -endef - -define install-import-file -$(install-importonly-file) -endef - -.PHONY: all build clean clobber diff --git a/jdk/makefiles/common/Demo.gmk b/jdk/makefiles/common/Demo.gmk deleted file mode 100644 index 25e1bd0905c..00000000000 --- a/jdk/makefiles/common/Demo.gmk +++ /dev/null @@ -1,415 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c -COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) - -# JDK Demo building jar file. - -# Some names are defined with LIBRARY inside the Defs.gmk file -LIBRARY=$(DEMONAME) -OBJDIR=$(TEMPDIR)/$(DEMONAME) - -# Input: -# DEMONAME - name of the demo -# DEMO_ROOT - path to root of all demo files -# DEMO_DESTDIR - path to final demo destination directory -# -# Optional Input: -# DEMO_SRCDIR - path to source if different from DEMO_ROOT -# DEMO_PSRCDIR - path to additional platform specific source -# DEMO_PKGDIR - sub directory of sources we want -# DEMO_TOPFILES - names of top-level files relative to DEMO_ROOT -# DEMO_MAINCLASS - name of the main class for the jar manifest -# DEMO_NATIVECLASS - name of the class with native methods -# DEMO_DESCRIPTOR - name of service file for jar (relative to DEMO_SRCDIR) -# DEMO_EXTRA_SRCDIR - path to directory that holds extra sources to add -# DEMO_EXTRA_FILES - extra sources relative to DEMO_EXTRA_SRCDIR -# DEMO_OBJECTS - extra native object files needed -# DEMO_MANIFEST_ATTR - extra line to add to the jar manifest file - -# Assume the source directory is the root directory if not set -ifndef DEMO_SRCDIR - DEMO_SRCDIR = $(DEMO_ROOT) -endif -ifndef DEMO_PKGDIR - DEMO_PKGDIR = . -endif - -# Some demos have special needs -ifneq ($(DEMONAME),agent_util) - DEMO_NEEDS_AGENT_UTIL = $(findstring agent_util,$(DEMO_OBJECTS)) -endif -ifneq ($(DEMONAME),java_crw_demo) - DEMO_NEEDS_JAVA_CRW_DEMO = $(findstring java_crw_demo,$(DEMO_OBJECTS)) -endif -ifeq ($(DEMONAME),hprof) - DEMO_NEEDS_NPT = true -endif - -# Place to hold the build area (kind of a temp area) -DEMO_BUILD_AREA = $(DEMOCLASSDIR)/$(PRODUCT)/$(DEMONAME) - -# Destination "src" directory -DEMO_BUILD_SRCDIR = $(DEMO_BUILD_AREA)/src - -ifndef DEMO_SKIP_SRCZIP - DEMO_BUILD_SRCZIP = $(DEMO_BUILD_AREA)/src.zip - DEMO_SOURCE_ZIP = $(DEMO_DESTDIR)/src.zip -endif - -# Place to hold the jar image we are creating -DEMO_JAR_IMAGE = $(DEMO_BUILD_AREA)/jar_image - -# The jar manifest file we will create and use -DEMO_MANIFEST = $(DEMO_BUILD_AREA)/manifest.mf - -# The list of source files or options we will supply to javac -DEMO_JAVAC_INPUT = $(DEMO_BUILD_AREA)/javac_input.txt - -# Any name of javah file -DEMO_JAVAH_FILE = $(DEMO_NATIVECLASS:%=$(DEMO_BUILD_SRCDIR)/%.h) - -# Get complete list of files for this demo -ifdef DEMO_PSRCDIR - DEMO_ALL_FILES2 := $(shell ( $(CD) $(DEMO_PSRCDIR) \ - && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \ - | $(SED) 's@^\./@@' ) - DEMO_ALL_FILES += $(DEMO_ALL_FILES2) -endif -ifdef DEMO_EXTRA_SRCDIR - DEMO_ALL_FILES += $(DEMO_EXTRA_FILES) -endif -DEMO_ALL_FILES1 := $(shell ( $(CD) $(DEMO_SRCDIR) \ - && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \ - | $(SED) 's@^\./@@' ) -DEMO_ALL_FILES += $(DEMO_ALL_FILES1) - -# Just the java sources -DEMO_JAVA_SOURCES = $(filter %.java,$(DEMO_ALL_FILES)) - -# Just the C and C++ sources -DEMO_C_SRC_FILES = $(filter %.c,$(DEMO_ALL_FILES)) -DEMO_CPP_SRC_FILES = $(filter %.cpp,$(DEMO_ALL_FILES)) - -# All the native source files -DEMO_ALL_NATIVE_SOURCES = $(DEMO_C_SRC_FILES) -DEMO_ALL_NATIVE_SOURCES += $(DEMO_CPP_SRC_FILES) -DEMO_ALL_NATIVE_SOURCES += $(filter %.h,$(DEMO_ALL_FILES)) -DEMO_ALL_NATIVE_SOURCES += $(filter %.hpp,$(DEMO_ALL_FILES)) - -# If we have java sources, then define the jar file we will create -ifndef DEMO_JAR_NAME - DEMO_JAR_NAME = $(DEMONAME).jar -endif -ifneq ($(strip $(DEMO_JAVA_SOURCES)),) - DEMO_JAR = $(DEMO_DESTDIR)/$(DEMO_JAR_NAME) -endif - -# If we have native sources, define the native library we will create -ifneq ($(strip $(DEMO_ALL_NATIVE_SOURCES)),) - # Path to native library we will create - DEMO_LIBRARY = \ - $(DEMO_DESTDIR)/lib$(ISA_DIR)/$(LIB_PREFIX)$(DEMONAME).$(LIBRARY_SUFFIX) - # C and C++ compiler flags we need to add to standard flags - DEMO_CPPFLAGS += -I$(DEMO_BUILD_SRCDIR) - # If the npt library is used we need to find the npt.h file - ifneq ($(DEMO_NEEDS_NPT),) - # The npt library is delivered as part of the JRE - DEMO_CPPFLAGS += -I$(SHARE_SRC)/npt -I$(PLATFORM_SRC)/npt - endif - # Is the shared agent_util code needed - ifneq ($(DEMO_NEEDS_AGENT_UTIL),) - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.c - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.h - endif - # Is the shared java_crw_demo code needed - ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),) - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.c - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.h - endif - # All the native object files we need to build the library - DEMO_OBJECTS += $(DEMO_C_SRC_FILES:%.c=%.$(OBJECT_SUFFIX)) \ - $(DEMO_CPP_SRC_FILES:%.cpp=%.$(OBJECT_SUFFIX)) - # Linking is special depending on whether we had C++ code or on windows - DEMO_NEEDS_CPP = $(strip $(DEMO_CPP_SRC_FILES)) - CPPFLAGS += $(DEMO_CPPFLAGS) - ifeq ($(PLATFORM),windows) - # Note: This is a link with cl.exe, not link.exe, options differ quite - # bit between them. - LINK.demo = $(LINK.c) - LDLIBS.demo = $(EXTRA_LIBS) $(LFLAGS_$(COMPILER_VERSION)) - DEMO_VERSION_INFO = $(OBJDIR)/$(LIBRARY).res - LDLIBS.demo += $(DEMO_VERSION_INFO) - else - ifneq ($(DEMO_NEEDS_CPP),) - LINK.demo = $(LINK.cpp) - LDLIBS.demo = $(LIBCXX) - ifeq ($(PLATFORM),solaris) - LDLIBS.demo += -lc - endif - else - LINK.demo = $(LINK.c) - LDLIBS.demo = $(LDLIBS) - endif - endif -endif - -# Files that are considered resources (need to be in the jar file) -DEMO_RESOURCES += $(filter-out %.java,$(DEMO_ALL_FILES)) - -# All destination files (top level readme files and all sources) -# Note: We exclude the topfiles from the src tree. -DEMO_DEST_TOPFILES = $(DEMO_TOPFILES:%=$(DEMO_DESTDIR)/%) -DEMO_FILTERED_SOURCES = $(filter-out $(DEMO_TOPFILES),$(DEMO_ALL_FILES)) -DEMO_FULL_SOURCES += $(DEMO_FILTERED_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) - -# Default rule -all: build demo_info - -# Used to populate the destination directories -$(DEMO_DESTDIR)/%: $(DEMO_ROOT)/% - $(install-file) -ifneq ($(DEMO_SRCDIR),$(DEMO_ROOT)) -$(DEMO_DESTDIR)/%: $(DEMO_SRCDIR)/% - $(install-file) -endif -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/% - $(install-file) -ifdef DEMO_PSRCDIR -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_PSRCDIR)/% - $(install-file) -endif -ifdef DEMO_EXTRA_SRCDIR -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_EXTRA_SRCDIR)/% - $(install-file) -endif -ifneq ($(DEMO_NEEDS_AGENT_UTIL),) -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../agent_util/% - $(install-file) -endif -ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),) -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../java_crw_demo/% - $(install-file) -endif - -# Jar manifest file -MAINMANIFEST = $(JDK_TOPDIR)/make/tools/manifest.mf -$(DEMO_MANIFEST): $(MAINMANIFEST) - @$(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) "Main-Class: $(DEMO_MAINCLASS)" >> $@ -ifdef DEMO_MANIFEST_ATTR - $(ECHO) "$(DEMO_MANIFEST_ATTR)" >> $@ -endif - -# Populating the jar image directory -$(DEMO_JAR_IMAGE)/%: $(DEMO_SRCDIR)/% - $(install-file) -ifdef DEMO_PSRCDIR -$(DEMO_JAR_IMAGE)/%: $(DEMO_PSRCDIR)/% - $(install-file) -endif -ifdef DEMO_EXTRA_SRCDIR -$(DEMO_JAR_IMAGE)/%: $(DEMO_EXTRA_SRCDIR)/% - $(install-file) -endif -ifdef DEMO_DESCRIPTOR -$(DEMO_JAR_IMAGE)/META-INF/services/$(DEMO_DESCRIPTOR): \ - $(DEMO_SRCDIR)/$(DEMO_DESCRIPTOR) - $(install-file) -endif - -# If we are creating a jar file (we have java code) -ifdef DEMO_JAR - -# Input file for javac -$(DEMO_JAVAC_INPUT): $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) - @$(prep-target) - @for i in $(DEMO_JAVA_SOURCES) ; do \ - $(ECHO) "$(DEMO_BUILD_SRCDIR)/$$i" >> $@ ; \ - done - -# Jar file creation -$(DEMO_JAR): \ - $(DEMO_JAVAC_INPUT) \ - $(DEMO_MANIFEST) \ - $(DEMO_DESCRIPTOR:%=$(DEMO_JAR_IMAGE)/META-INF/services/%) \ - $(DEMO_RESOURCES:%=$(DEMO_JAR_IMAGE)/%) - @$(prep-target) - $(MKDIR) -p $(DEMO_JAR_IMAGE) - $(JAVAC_CMD) -d $(DEMO_JAR_IMAGE) -sourcepath $(DEMO_BUILD_SRCDIR) \ - @$(DEMO_JAVAC_INPUT) - ifeq ($(DEMO_INCL_SRC),true) - $(CP) $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) $(DEMO_JAR_IMAGE) - endif - ifeq ($(DEMO_ONLY_SRC),true) - $(RM) -r $(DEMO_JAR_IMAGE) - $(MKDIR) -p $(DEMO_JAR_IMAGE) - $(CP) -r $(DEMO_BUILD_SRCDIR)/* $(DEMO_JAR_IMAGE) - ifneq ($(DEMO_TOPFILES),) - $(CP) $(DEMO_ROOT)/$(DEMO_TOPFILES) $(DEMO_JAR_IMAGE) - endif - endif - $(BOOT_JAR_CMD) -cfm $@ $(DEMO_MANIFEST) \ - -C $(DEMO_JAR_IMAGE) . \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -endif - -ifndef DEMO_SKIP_SRCZIP - # Create a src.zip file - $(DEMO_BUILD_SRCZIP): $(DEMO_FULL_SOURCES) - @$(prep-target) - $(CD) $(DEMO_BUILD_AREA)/src && $(ZIPEXE) -q -r ../$(@F) . - - # Install the destination src.zip file and create the src tree - $(DEMO_SOURCE_ZIP): $(DEMO_BUILD_SRCZIP) - $(install-file) -endif - -ifeq ($(PLATFORM),windows) -# JDK name required here -RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \ - /D "JDK_INTERNAL_NAME=$(LIBRARY)" \ - /D "JDK_FTYPE=0x2L" -endif - -# Native library building -ifdef DEMO_LIBRARY - - # Full paths to object files - DEMO_FULL_OBJECTS = $(DEMO_OBJECTS:%=$(OBJDIR)/%) - VPATH= - -# Native compile rules -$(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - ifneq ($(DEMO_NEEDS_CPP),) -$(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.cpp - @$(prep-target) - $(COMPILE.cpp) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - endif - - # Actual creation of the native shared library (C++ and C are different) -$(DEMO_LIBRARY): $(DEMO_FULL_OBJECTS) - @$(prep-target) - ifeq ($(PLATFORM),windows) - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(DEMO_VERSION_INFO) $(VERSIONINFO_RESOURCE) - $(LINK.demo) $(SHARED_LIBRARY_FLAG) -Fe$@ \ - $(DEMO_FULL_OBJECTS) $(LDLIBS.demo) - else - $(LINK.demo) $(SHARED_LIBRARY_FLAG) -o $@ \ - $(DEMO_FULL_OBJECTS) $(LDLIBS.demo) - endif - @$(call binary_file_verification,$@) - - # Generation of any javah include file, make sure objects are dependent on it - ifdef DEMO_NATIVECLASS -$(DEMO_JAVAH_FILE): $(DEMO_JAR) - @$(prep-target) - $(JAVAH_CMD) -d $(DEMO_BUILD_SRCDIR) -classpath $(DEMO_JAR) \ - $(DEMO_NATIVECLASS) - @$(java-vm-cleanup) -$(DEMO_FULL_OBJECTS): $(DEMO_JAVAH_FILE) - endif - -endif - -# Build involves populating the destination "src" tree, building the jar and -# native library, and creating a source bundle - -sources: $(DEMO_FULL_SOURCES) - @$(ECHO) "Created $@" - -objects: - @$(ECHO) "Created $@" - -# Why the nested make here? It only works this way, don't know why. -bundles: $(DEMO_BUILD_SRCZIP) - $(RM) -r $(DEMO_DESTDIR) - $(MKDIR) -p $(DEMO_DESTDIR) - $(MAKE) $(DEMO_LIBRARY) $(DEMO_JAR) $(DEMO_SOURCE_ZIP) $(DEMO_DEST_TOPFILES) -# Applets are special, no jar file, no src.zip, everything expanded. -ifdef DEMO_IS_APPLET - @$(ECHO) "Expanding jar file into demos area at $(DEMO_DESTDIR)" - ( $(CD) $(DEMO_DESTDIR) && \ - $(BOOT_JAR_CMD) -xfv $(DEMO_JAR_NAME) \ - $(BOOT_JAR_JFLAGS) && \ - $(RM) -r META-INF $(DEMO_JAR_NAME) && \ - $(java-vm-cleanup) ) - @( $(CD) $(DEMO_DESTDIR) && $(java-vm-cleanup) ) - @$(ECHO) "Expanding source into demos area at $(DEMO_DESTDIR)" - ( $(CD) $(DEMO_DESTDIR) && $(UNZIP) -o src.zip && $(RM) src.zip ) -endif - -build: sources bundles - -# Printing out a demo information line -define printDemoSetting -if [ "$2" != "" ] ; then $(PRINTF) "%-20s %s\n" "$1:" "$2"; fi -endef - -# Print out the demo information -demo_info: - @$(ECHO) "=========================================================" - @$(call printDemoSetting,DEMONAME,$(DEMONAME)) - @$(call printDemoSetting,DEMO_ROOT,$(DEMO_ROOT)) - @$(call printDemoSetting,DEMO_SRCDIR,$(DEMO_SRCDIR)) - @$(call printDemoSetting,DEMO_DESTDIR,$(DEMO_DESTDIR)) - @$(call printDemoSetting,DEMO_JAR,$(DEMO_JAR)) - @$(call printDemoSetting,DEMO_MANIFEST_ATTR,$(DEMO_MANIFEST_ATTR)) - @$(call printDemoSetting,DEMO_PSRCDIR,$(DEMO_PSRCDIR)) - @$(call printDemoSetting,DEMO_EXTRA_SRCDIR,$(DEMO_EXTRA_SRCDIR)) - @$(call printDemoSetting,DEMO_EXTRA_FILES,$(DEMO_EXTRA_FILES)) - @$(call printDemoSetting,DEMO_TOPFILES,$(DEMO_TOPFILES)) - @$(call printDemoSetting,DEMO_MAINCLASS,$(DEMO_MAINCLASS)) - @$(call printDemoSetting,DEMO_DESCRIPTOR,$(DEMO_DESCRIPTOR)) - @$(call printDemoSetting,DEMO_NATIVECLASS,$(DEMO_NATIVECLASS)) - @$(call printDemoSetting,DEMO_LIBRARY,$(DEMO_LIBRARY)) - @$(call printDemoSetting,DEMO_OBJECTS,$(DEMO_OBJECTS)) - @$(call printDemoSetting,DEMO_SOURCE_ZIP,$(DEMO_SOURCE_ZIP)) - @$(ECHO) "=========================================================" - -# Clean rule -clean clobber: - $(RM) -r $(DEMO_BUILD_AREA) - $(RM) -r $(DEMO_DESTDIR) - -# This should not be needed, but some versions of GNU make have a bug that -# sometimes deleted these files for some strange and unknown reason -# (GNU make version 3.78.1 has the problem, GNU make version 3.80 doesn't?) -.PRECIOUS: $(DEMO_FULL_SOURCES) $(DEMO_BUILD_SRCZIP) $(DEMO_SOURCE_ZIP) - -# List phony targets -.PHONY: all build clean clobber demo_info \ - sources bundles - diff --git a/jdk/makefiles/common/Library.gmk b/jdk/makefiles/common/Library.gmk deleted file mode 100644 index 03b76ae22b0..00000000000 --- a/jdk/makefiles/common/Library.gmk +++ /dev/null @@ -1,326 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic makefile for building shared libraries. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -include $(JDK_TOPDIR)/makefiles/common/Classes.gmk - -# -# It is important to define these *after* including Classes.gmk -# in order to override the values defined inthat makefile. -# - -ifeq ($(LIBRARY), fdlibm) -ifeq ($(PLATFORM),windows) -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(FDDLIBM_SUFFIX) -ACTUAL_LIBRARY_DIR = $(OBJDIR) -else # PLATFORM -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(ARCH).$(FDDLIBM_SUFFIX) -ACTUAL_LIBRARY_DIR = $(OBJDIR) -endif #PLATFORM -else # LIBRARY -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) -ACTUAL_LIBRARY_DIR = $(LIB_LOCATION) -endif -ACTUAL_LIBRARY = $(ACTUAL_LIBRARY_DIR)/$(ACTUAL_LIBRARY_NAME) - -library:: $(ACTUAL_LIBRARY) - -FILES_o = $(patsubst %.c, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_o += $(patsubst %.s, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_s)))) -FILES_o += $(patsubst %.cpp, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) - -ifeq ($(PLATFORM), macosx) -FILES_o += $(patsubst %.m, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objc)))) -FILES_o += $(patsubst %.mm, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objcpp)))) - -INCREMENTAL_BUILD=false - -endif # PLATFORM - -ifeq ($(INCREMENTAL_BUILD),true) -FILES_d = $(patsubst %.c, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_d += $(patsubst %.cpp, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) -endif # INCREMENTAL_BUILD - -ifeq ($(PLATFORM),solaris) -# List of all lint files, one for each .c file (only for C) -FILES_ln = $(patsubst %.c, %.$(LINT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -endif - -LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) - -# -# C++ libraries must be linked with CC. -# -ifdef CPLUSPLUSLIBRARY -LINKER=$(LINK.cc) -else -LINKER=$(LINK.c) -endif - -$(ACTUAL_LIBRARY):: $(INIT) $(TEMPDIR) $(LIBDIR) $(BINDIR) $(EXTDIR) classheaders - @$(ECHO) Building lib:$(ACTUAL_LIBRARY) -# -# COMPILE_APPROACH: Different approaches to compile up the native object -# files as quickly as possible. -# The setting of parallel works best on Unix, batch on Windows. -# - -COMPILE_FILES_o = $(OBJDIR)/.files_compiled -$(COMPILE_FILES_o): $(FILES_d) $(FILES_o) - @$(ECHO) "$<" >> $@ -clean:: - $(RM) $(COMPILE_FILES_o) - -# -# COMPILE_APPROACH=parallel: Will trigger compilations (just compilations) to -# happen in parallel. Greatly decreases Unix build time, even on single CPU -# machines, more so on multiple CPU machines. Default is 2 compiles -# at a time, but can be adjusted with ALT_PARALLEL_COMPILE_JOBS. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# Note this does not depend on Rules.gmk to work like batch (below) -# and this technique doesn't seem to help Windows build time nor does -# it work very well, it's possible the Windows Visual Studio compilers -# don't work well in a parallel situation, this needs investigation. -# - -ifeq ($(COMPILE_APPROACH),parallel) - -.PHONY: library_parallel_compile - -library_parallel_compile: - @$(ECHO) "Begin parallel compiles: $(shell $(PWD))" - $(MAKE) -j $(PARALLEL_COMPILE_JOBS) $(COMPILE_FILES_o) - @$(ECHO) "Done with parallel compiles: $(shell $(PWD))" - -$(ACTUAL_LIBRARY):: library_parallel_compile - -endif - -# -# COMPILE_APPROACH=batch: Will trigger compilations (just compilations) to -# happen in batch mode. Greatly decreases Windows build time. -# See logic in Rules.gmk for how compiles happen, the $(MAKE) in -# library_batch_compile below triggers the actions in Rules.gmk. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# -ifeq ($(COMPILE_APPROACH),batch) - -.PHONY: library_batch_compile - -library_batch_compile: - @$(ECHO) "Begin BATCH compiles: $(shell $(PWD))" - $(MAKE) $(COMPILE_FILES_o) - $(MAKE) batch_compile - @$(ECHO) "Done with BATCH compiles: $(shell $(PWD))" - $(MAKE) COMPILE_APPROACH=normal $(COMPILE_FILES_o) - -$(ACTUAL_LIBRARY):: library_batch_compile - -endif - -ifeq ($(PLATFORM), windows) - -# -# Library building rules. -# - -$(LIBRARY).lib:: $(OBJDIR) - -ifeq ($(LIBRARY), fdlibm) -$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lib - -$(OBJDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lcf - @$(prep-target) - $(AR) -NODEFAULTLIB:MSVCRT -out:$@ -nologo \ - @$(OBJDIR)/$(LIBRARY).lcf $(OTHER_LCF) $(LDLIBS_COMMON) -else # LIBRARY -# build it into $(OBJDIR) so that the other generated files get put -# there, then copy just the DLL (and MAP file) to the requested directory. -# -$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lcf - @$(prep-target) - @$(MKDIR) -p $(OBJDIR) - $(LD) -dll -out:$(OBJDIR)/$(@F) \ - -map:$(OBJDIR)/$(LIBRARY).map \ - $(LFLAGS) @$(OBJDIR)/$(LIBRARY).lcf \ - $(OTHER_LCF) $(LDLIBS) - $(CP) $(OBJDIR)/$(@F) $@ - @$(call binary_file_verification,$@) - $(CP) $(OBJDIR)/$(LIBRARY).map $(@D) - $(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D) - -endif # LIBRARY - -$(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m) - @$(prep-target) - @$(MKDIR) -p $(TEMPDIR) - @$(ECHO) $(FILES_o) > $@ -ifndef LOCAL_RESOURCE_FILE - @$(ECHO) $(OBJDIR)/$(LIBRARY).res >> $@ -endif - @$(ECHO) Created $@ - -# JDK name required here -RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \ - /D "JDK_INTERNAL_NAME=$(LIBRARY)" \ - /D "JDK_FTYPE=0x2L" - -$(OBJDIR)/$(LIBRARY).res: $(VERSIONINFO_RESOURCE) -ifndef LOCAL_RESOURCE_FILE - @$(prep-target) - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) -endif - -# -# Install a .lib file if required. -# -ifeq ($(INSTALL_DOT_LIB), true) -$(ACTUAL_LIBRARY):: $(LIBDIR)/$(LIBRARY).lib - -clean:: - -$(RM) $(LIBDIR)/$(LIBRARY).lib - -$(LIBDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lib - $(install-file) - -$(LIBDIR)/$(LIBRARY).dll:: $(OBJDIR)/$(LIBRARY).dll - $(install-file) - -endif # INSTALL_DOT_LIB - -else # PLATFORM - -# -# On Solaris, use mcs to write the version into the comment section of -# the shared library. On other platforms set this to false at the -# make command line. -# - -ifneq ($(PLATFORM), macosx) - ARFLAGS = -r -endif - -$(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder) - @$(prep-target) - @$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), OPTIMIZATION_LEVEL=$(OPTIMIZATION_LEVEL)" - @$(ECHO) "Rebuilding $@ because of $?" -ifeq ($(LIBRARY), fdlibm) - $(AR) $(ARFLAGS) $@ $(FILES_o) -else # LIBRARY - $(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(FILES_o) $(LDLIBS) - @$(call binary_file_verification,$@) -ifeq ($(WRITE_LIBVERSION),true) - $(MCS) -d -a "$(FULL_VERSION)" $@ -endif # WRITE_LIBVERSION -endif # LIBRARY - -endif # PLATFORM - -# -# Cross check all linted files against each other -# -ifeq ($(PLATFORM),solaris) -lint.errors : $(FILES_ln) - $(LINT.c) $(FILES_ln) $(LDLIBS) -endif - -# -# Class libraries with JNI native methods get a include to the package. -# -ifdef PACKAGE -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR) -vpath %.c $(SHARE_SRC)/native/$(PKGDIR) -OTHER_INCLUDES += -I$(SHARE_SRC)/native/common -I$(PLATFORM_SRC)/native/common -OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR) \ - -I$(PLATFORM_SRC)/native/$(PKGDIR) -endif - -# -# Clean/clobber rules -# -clean:: - $(RM) -r $(ACTUAL_LIBRARY) - -clobber:: clean - -# -# INCREMENTAL_BUILD means that this workspace will be built over and over -# possibly incrementally. This means tracking the object file dependencies -# on include files so that sources get re-compiled when the include files -# change. When building from scratch and doing a one time build (like -# release engineering or nightly builds) set INCREMENTAL_BUILD=false. -# - -ifeq ($(INCREMENTAL_BUILD),true) - -# -# Workaround: gnumake sometimes says files is empty when it shouldn't -# was: files := $(foreach file, $(wildcard $(OBJDIR)/*.$(DEPEND_SUFFIX)), $(file)) -# -files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) - -# -# Only include these files if we have any. -# -ifneq ($(strip $(files)),) - -include $(files) - -endif # files - -endif # INCREMENTAL_BUILD - -# -# Default dependencies -# - -all: build - -build: library - -debug: - $(MAKE) VARIANT=DBG build - -fastdebug: - $(MAKE) VARIANT=DBG FASTDEBUG=true build - -openjdk: - $(MAKE) OPENJDK=true build - -FORCE: - -.PHONY: all build debug fastdebug - diff --git a/jdk/makefiles/common/Mapfile-vers.gmk b/jdk/makefiles/common/Mapfile-vers.gmk deleted file mode 100644 index 15c8ccd519a..00000000000 --- a/jdk/makefiles/common/Mapfile-vers.gmk +++ /dev/null @@ -1,97 +0,0 @@ -# -# Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for linking with mapfiles. -# -# NOTE: Not using a mapfile will expose all your extern functions and -# extern data symbols as part of your interface, so unless your -# extern names are safe from being mistaken as names from other -# libraries, you better use a mapfile, or use a unique naming -# convention on all your extern symbols. -# -# The mapfile will establish versioning by defining the exported interface. -# -# The mapfile can also force certain .o files or elf sections into the -# the different segments of the resulting library/program image. -# -# The macro FILES_m can contain any number of mapfiles. -# - -# Always make sure 'all' is the default rule -mapfile_default_rule: all - -ifeq ($(PLATFORM), solaris) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif - - # If we are re-ordering functions in this solaris library, we need to make - # sure that -xF is added to the compile lines. This option is critical and - # enables the functions to be reordered. - ifdef FILES_reorder - CFLAGS_OPT += -xF - CXXFLAGS_OPT += -xF - endif - -INIT += $(TEMPDIR)/mapfile-vers - -$(TEMPDIR)/mapfile-vers : $(FILES_m) $(FILES_reorder) - $(prep-target) - $(CAT) $(FILES_m) > $@ - ifdef FILES_reorder - $(SED) -e 's=OUTPUTDIR=$(OUTPUTDIR)=' $(FILES_reorder) >> $@ - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = -M$(TEMPDIR)/mapfile-vers - LDMAPFLAGS_DBG = $(FILES_m:%=-M%) -endif - -endif # PLATFORM - -ifeq ($(PLATFORM), linux) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = $(FILES_m:%=-Xlinker -version-script=%) - LDMAPFLAGS_DBG = $(FILES_m:%=-Xlinker -version-script=%) -endif - -endif # PLATFORM - -LDFLAGS_OPT += $(LDMAPFLAGS_OPT) -LDFLAGS_DBG += $(LDMAPFLAGS_DBG) - diff --git a/jdk/makefiles/common/Modules.gmk b/jdk/makefiles/common/Modules.gmk deleted file mode 100644 index 7c6ccfda5f8..00000000000 --- a/jdk/makefiles/common/Modules.gmk +++ /dev/null @@ -1,479 +0,0 @@ -# -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -JDK_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jdk-module-image -JRE_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jre-module-image - -# -# modules Target to build jdk and jre module image -# -# There is one jar file per module containing classes only. -# All module jars are currently placed under jre/lib directory. -# -# Open issues that need further investigation: -# 1. Classes in jre/lib/ext/dnsns.jar are currently put in jre/lib/jndi-dns -# module. META-INF/services file is not installed. -# 2. Signed jars -# For JDK build, signed jars are copied to the build. -# All jars in the module image are unsigned. - -MODULE_IMAGEBINDIR = bin - -# -# Targets. -# -INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre -INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre-sol64 - INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk-sol64 - endif -endif - -modules modules-clobber \ -initial-module-image-jre initial-module-image-jdk \ -initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \ -trim-module-image-jre trim-module-image-jdk \ -process-module-image-jre process-module-image-jdk :: - @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -# Order is important here, trim jre after jdk image is created -modules:: gen-modules \ - $(INITIAL_MODULE_IMAGE_JRE) $(INITIAL_MODULE_IMAGE_JDK) \ - trim-module-image-jre trim-module-image-jdk \ - process-module-image-jre process-module-image-jdk - -# Don't use these -module-image-jre:: initial-module-image-jre trim-module-image-jre process-module-image-jre -module-image-jdk:: initial-module-image-jdk trim-module-image-jdk process-module-image-jdk - -# -# Paths to these files we need -JDK_MODULE_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) -JDK_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%64) -JDK_MODULE_DOCFILES = $(OTHER_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) - -JRE_MODULE_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) -JRE_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%64) -JRE_MODULE_DOCFILES = $(OTHER_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) -JRE_MODULE_DOCFILES += $(JRE_NAMECHANGE_DOCLIST:%=$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX)) - -###### RULES - -# JDK files -$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) -# Removes LICENSE_VERSION or not -ifdef LICENSE_VERSION -$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -else -$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) -endif - -# JRE files -$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -# Add $(TEXT_SUFFIX) suffix -ifdef TEXT_SUFFIX -$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX): $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -endif -# Removes LICENSE_VERSION or not -ifdef LICENSE_VERSION -$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -else -$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -endif - -###################################################### -# JRE Image -###################################################### - -MODULES_LIST = $(MODULES_TEMPDIR)/classlist/modules.list - -# Modules in the jre/lib/security directory -POLICY_MODULES = US_export_policy local_policy - -# Modules in the modules/ext directory -EXT_MODULES = localedata security-sunec security-sunjce - -# Build PKCS#11 on all platforms except 64-bit Windows. -PKCS11 = security-sunpkcs11 -ifeq ($(ARCH_DATA_MODEL), 64) - ifeq ($(PLATFORM), windows) - PKCS11 = - endif -endif - -EXT_MODULES += $(PKCS11) - -# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform. -ifeq ($(PLATFORM), windows) - ifneq ($(ARCH_DATA_MODEL), 64) - EXT_MODULES += security-sunmscapi - endif -endif - -# Modules for JDK only -JDK_MODULES = tools - -gen-modules: - $(CD) modules; $(MAKE) all - -initial-module-image-jre-setup: - $(RM) -r $(JRE_MODULE_IMAGE_DIR) - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR) - -# 64-bit solaris jre image contains only the 64-bit add-on files. -initial-module-image-jre-sol64:: initial-module-image-jre-setup \ - $(JRE_MODULE_LICENSES) $(JRE_MODULE_64_LICENSES) - @# Use tar instead of cp to preserve the symbolic links - for dir in bin lib ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \ - ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl'` - $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl'` - -# Construct an initial jre image (initial jdk jre) no trimming or stripping -initial-module-image-jre:: initial-module-image-jre-setup \ - $(JRE_LICENSES) $(JRE_MODULE_DOCFILES) \ - $(BUILDMETAINDEX_JARFILE) - @# Copy in bin directory - $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) - @# CTE plugin security change require new empty directory lib/applet - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/applet - @# Copy files but not .jar in lib directory - $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(EGREP) -v ".jar$$" | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) - @# - @# copy modules to jre/lib - @# - for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \ - $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib ; \ - done - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/ext - for m in $(EXT_MODULES) ; do \ - $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/ext ; \ - done - for m in $(POLICY_MODULES) ; do \ - $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/security; \ - done - @# Remove jdk modules - for m in $(JDK_MODULES) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar ; \ - done - - @# Make sure all directories are read/execute for everyone - $(CHMOD) a+rx `$(FIND) $(JRE_MODULE_IMAGE_DIR) -type d` - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - @# Remove orb.idl and ir.idl from jre - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \; - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \; - @# Generate meta-index to make boot and extension class loaders lazier - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ - $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ - -o meta-index *.jar - @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib && $(java-vm-cleanup) - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && \ - $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ - -o meta-index *.jar - @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup) -ifeq ($(PLATFORM), windows) - @# Remove certain *.lib files - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ - $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \ - hpi.$(LIB_SUFFIX) awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX) - ifeq ($(ARCH_DATA_MODEL), 32) - @# The Java Kernel JRE image ships with a special VM. It is not included - @# in the full JRE image, so remove it. Also, is it only for 32-bit windows. - $(CD) $(JRE_MODULE_IMAGE_DIR)/bin && $(RM) -r kernel - endif -endif # Windows -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JRE_MODULE_IMAGE_DIR),$(JRE_MAN_PAGES)) -endif # !windows - -# Trim out any extra files not for the jre shipment but wanted in the jdk jre. -# (Note the jdk WILL want the jre image before this trimming) -# Removes server VM on Windows 32bit. -# Remove certain shared libraries that should not be in the jre image -# but should be in the jdk jre image. -trim-module-image-jre:: -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) -r $(JRE_MODULE_IMAGE_DIR)/bin/server - endif - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin/$$l ; \ - done ; - endif -else # PLATFORM - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \ - done ; - endif -endif # PLATFORM - -# Get list of all Elf files in the jre -JRE_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jre-elf-files.list -$(JRE_MODULE_ELF_LIST): - @$(prep-target) -ifneq ($(PLATFORM), windows) - $(RM) $@ - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on Elf files we are shipping) -# (Note the jdk WILL want the jre image before this processing) -process-module-image-jre:: $(JRE_MODULE_ELF_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - $(RM) $(JRE_MODULE_ELF_LIST) - -###################################################### -# JDK Image -###################################################### -# Note: cpio ($(CPIO)) sometimes leaves directories without rx access. - -initial-module-image-jdk-setup: - $(RM) -r $(JDK_MODULE_IMAGE_DIR) - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/jre - ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(FIND) . -depth -print \ - | $(CPIO) -pdum $(JDK_MODULE_IMAGE_DIR)/jre ) - $(RM) -rf $(JDK_MODULE_IMAGE_DIR)/jre/man - $(CHMOD) a+rx `$(FIND) $(JDK_MODULE_IMAGE_DIR) -type d` - -initial-module-image-jdk64-bindemos: - for dir in bin demo ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \ - ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - -# Solaris 64 bit image is special -initial-module-image-jdk-sol64:: initial-module-image-jdk-setup \ - initial-module-image-jdk64-bindemos \ - $(JDK_MODULE_LICENSES) $(JDK_MODULARLIZED_64_LICENSES) - -# DB files to add -ifeq ($(OPENJDK),true) - -initial-module-image-jdk-db: - -else - -# Create the list of db *.zip files to bundle with jdk -ABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db) -DB_ZIP_LIST = $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null) - -initial-module-image-jdk-db: $(DB_ZIP_LIST) - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/db - for d in $(DB_ZIP_LIST); do \ - ($(CD) $(JDK_MODULE_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ - done - -endif - -# Standard jdk image -initial-module-image-jdk:: initial-module-image-jdk-setup \ - initial-module-image-jdk-db \ - $(JDK_MODULE_LICENSES) $(JDK_MODULE_DOCFILES) - $(MKDIR) $(JDK_MODULE_IMAGE_DIR)/lib - @# - @# copy jdk modules to jdk/lib - @# - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/lib - for m in $(JDK_MODULES) ; do \ - $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JDK_MODULE_IMAGE_DIR)/lib ; \ - done - ifeq ($(PLATFORM), windows) - @# - @# lib/ - @# - $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib - $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib - @# - @# bin/ - @# - @# copy all EXE files and only certain DLL files from BINDIR - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/bin - $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - ifeq ($(COMPILER_VERSION), VS2010) - $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - endif - ifeq ($(ARCH_DATA_MODEL), 32) - ifeq ($(COMPILER_VERSION), VS2003) - $(CP) $(BINDIR)/msvc*71.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - endif - endif - else # PLATFORM - @# - @# bin/ - @# - ($(CD) $(BINDIR)/.. && $(TAR) cf - \ - `$(FIND) bin \( -type f -o -type l \) -print `) | \ - ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) - endif # PLATFORM - @# - @# lib/ct.sym - @# - $(MKDIR) -p $(OUTPUTDIR)/symbols/META-INF/sym - $(JAVAC_CMD) -XDprocess.packages -proc:only \ - -processor com.sun.tools.javac.sym.CreateSymbols \ - -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \ - -Acom.sun.tools.javac.sym.Dest=$(OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ - $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) - $(BOOT_JAR_CMD) c0f $(LIBDIR)/ct.sym \ - -C $(OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - $(CP) $(LIBDIR)/ct.sym $(JDK_MODULE_IMAGE_DIR)/lib/ct.sym - @# - @# CORBA supported orb.idl and ir.idl should be copied to lib - @# - $(CP) $(LIBDIR)/orb.idl $(JDK_MODULE_IMAGE_DIR)/lib/orb.idl - $(CP) $(LIBDIR)/ir.idl $(JDK_MODULE_IMAGE_DIR)/lib/ir.idl - ifeq ($(PLATFORM), linux) - @# - @# on Linux copy jexec from jre/lib to /lib - @# - $(CP) $(LIBDIR)/jexec $(JDK_MODULE_IMAGE_DIR)/lib/jexec - endif # PLATFORM - @# - @# demo, include - @# - $(CP) -r -f $(DEMODIR) $(JDK_MODULE_IMAGE_DIR) - $(CP) -r -f $(SAMPLEDIR) $(JDK_MODULE_IMAGE_DIR) - $(CP) -r $(INCLUDEDIR) $(JDK_MODULE_IMAGE_DIR) - @# - @# Swing BeanInfo generation - @# - $(CD) javax/swing/beaninfo && $(MAKE) JDK_IMAGE_DIR=$(JDK_MODULE_IMAGE_DIR) swing-1.2-beans -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JDK_MODULE_IMAGE_DIR),$(JDK_MAN_PAGES)) -endif # !windows - -# Trim out files we don't want to ship -trim-module-image-jdk:: - @# Remove tools that should not be part of SDK. - for t in $(NOTJDKTOOLS); do \ - $(RM) $(JDK_MODULE_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX) \ - $(JDK_MODULE_IMAGE_DIR)/bin/*/native_threads/$${t}$(EXE_SUFFIX); \ - done - -# Get list of Elf files in the jdk -JDK_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jdk-elf-files.list -$(JDK_MODULE_ELF_LIST): - @$(prep-target) -ifneq ($(PLATFORM), windows) - $(RM) $@ - $(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ - file `$(FIND) $(JDK_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on files we are shipping) -process-module-image-jdk:: $(JDK_MODULE_ELF_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - $(RM) $(JDK_MODULE_ELF_LIST) - -###################################################### -# clobber -###################################################### -modules-clobber:: - $(RM) -r $(JDK_MODULE_IMAGE_DIR) - $(RM) -r $(JRE_MODULE_IMAGE_DIR) - -modules modules-clobber:: - @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." - @$(java-vm-cleanup) - -.PHONY: modules module-image-jre module-image-jdk \ - initial-module-image-jre initial-module-image-jdk \ - initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \ - initial-module-image-jdk-setup \ - initial-module-image-jdk-db \ - initial-module-image-jdk64-bindemos \ - initial-module-image-jre-setup \ - trim-module-image-jre trim-module-image-jdk \ - process-module-image-jre process-module-image-jdk \ - install-previous-jre install-previous-jdk \ - modules-clobber - -# Force rule -FRC: - diff --git a/jdk/makefiles/common/Program.gmk b/jdk/makefiles/common/Program.gmk deleted file mode 100644 index 5ace9dc8eda..00000000000 --- a/jdk/makefiles/common/Program.gmk +++ /dev/null @@ -1,319 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic makefile for building executables. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# -# If building programs, use a normal compile approach -# -ifeq ($(COMPILE_APPROACH),batch) - override COMPILE_APPROACH = normal -endif - -# set the platform specific directory for macosx, also this platform shares -# substantial family ties with its siblings (solaris and linux), thus we add -# solaris src path to its compilation dependencies. -ifeq ($(PLATFORM), macosx) - LAUNCHER_PLATFORM_SRC = $(BUILDDIR)/../src/macosx - LAUNCHER_SOLARIS_PLATFORM_SRC = $(BUILDDIR)/../src/solaris -else - LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC) -endif - -ifndef LAUNCHER_SHARE_SRC - LAUNCHER_SHARE_SRC = $(SHARE_SRC) -endif - -ACTUAL_PROGRAM_NAME = $(PROGRAM)$(EXE_SUFFIX) -ACTUAL_PROGRAM_DIR = $(BINDIR) -ACTUAL_PROGRAM = $(ACTUAL_PROGRAM_DIR)/$(ACTUAL_PROGRAM_NAME) - -# Make sure the default rule is all -program_default_rule: all - -program: $(ACTUAL_PROGRAM) - -# Work-around for missing processor specific mapfiles -ifndef CROSS_COMPILE_ARCH - # reuse the mapfiles in the launcher's directory, the same should - # be applicable to the tool launchers as well. - FILES_m = $(BUILDDIR)/java/main/java/mapfile-$(ARCH) - include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -include $(JDK_TOPDIR)/makefiles/common/Rules.gmk - -ifdef NEVER_ACT_AS_SERVER_CLASS_MACHINE - OTHER_CPPFLAGS += -DNEVER_ACT_AS_SERVER_CLASS_MACHINE -endif - -# -# Create a dependency on libjli (Java Launcher Infrastructure) -# -# On UNIX, this is a relative dependency using $ORIGIN. Unfortunately, to -# do this reliably on Linux takes a different syntax than Solaris. -# -# On Windows, this is done by using the same directory as the executable -# itself, as with all the Windows libraries. -# -ifeq ($(PLATFORM), macosx) - ifneq ($(ARCH), universal) - LDFLAGS += -Wl,-all_load - endif - LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a - - ifeq ($(SYSTEM_ZLIB),true) - OTHER_LDLIBS += -lz - endif -endif - -ifneq (,$(findstring $(PLATFORM), linux solaris)) # UNIX systems - LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli - OTHER_LDLIBS += -ljli - ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 32) - LDFLAGS += -R \$$ORIGIN/../lib/$(LIBARCH)/jli - LDFLAGS += -R \$$ORIGIN/../jre/lib/$(LIBARCH)/jli - else - LDFLAGS += -R \$$ORIGIN/../../lib/$(LIBARCH)/jli - LDFLAGS += -R \$$ORIGIN/../../jre/lib/$(LIBARCH)/jli - endif - endif - ifeq ($(PLATFORM), linux) - LDFLAGS += $(LDFLAG_Z_ORIGIN) - LDFLAGS += -Wl,--allow-shlib-undefined - LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../lib/$(LIBARCH)/jli - LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../jre/lib/$(LIBARCH)/jli - endif -endif - -ifeq ($(PLATFORM), windows) - JLI_LCF = $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/jli.lcf - ifdef STATIC_JLI - LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static - else - LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME) - endif - OTHER_LDLIBS += jli.lib -endif - -# -# Launcher specific files. -# -FILES_o = $(OBJDIR)/main.$(OBJECT_SUFFIX) - -$(ACTUAL_PROGRAM):: classes $(INIT) - -# -# Windows only -# -ifeq ($(PLATFORM), windows) - # JDK name required here - RC_FLAGS += /D "JDK_FNAME=$(PROGRAM)$(EXE_SUFFIX)" \ - /D "JDK_INTERNAL_NAME=$(PROGRAM)" \ - /D "JDK_FTYPE=0x1L" - - $(OBJDIR)/$(PROGRAM).res: $(VERSIONINFO_RESOURCE) - @$(prep-target) - ifndef LOCAL_RESOURCE_FILE - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) - endif - - $(OBJDIR)/$(PROGRAM).lcf: $(OBJDIR)/$(PROGRAM).res $(FILES_o) - @$(prep-target) - @$(ECHO) $(FILES_o) > $@ - ifndef LOCAL_RESOURCE_FILE - @$(ECHO) $(OBJDIR)/$(PROGRAM).res >> $@ - endif - @$(ECHO) setargv.obj >> $@ - @$(ECHO) Created $@ - - $(ACTUAL_PROGRAM):: $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX) - @$(install-file) - - ifeq ($(ARCH_DATA_MODEL), 32) - STACK_SIZE=327680 - else - # We need more Stack for Windows 64bit - STACK_SIZE=1048576 - endif - - IMVERSION=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER) - $(OBJDIR)/$(PROGRAM).exe.manifest: $(JDK_TOPDIR)/src/windows/resource/java.manifest - @$(prep-target) - $(SED) 's%IMVERSION%$(IMVERSION)%g;s%PROGRAM%$(PROGRAM)%g' $< > $@ - - # We used a hand-crafted manifest file for all executables. - # It is tweaked to embed the build number and executable name. - # Use ";#2" for .dll and ";#1" for .exe in the MT command below: - $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX):: $(OBJDIR)/$(PROGRAM).lcf $(FILES_o) $(JLI_LCF) $(OBJDIR)/$(PROGRAM).exe.manifest - @$(prep-target) - @set -- $?; \ - $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; - $(LD) -out:$@ /STACK:$(STACK_SIZE) \ - -map:$(OBJDIR)/$(PROGRAM).map $(LFLAGS) $(LDFLAGS) \ - @$(OBJDIR)/$(PROGRAM).lcf $(LDLIBS) - ifdef MT - $(MT) /manifest $(OBJDIR)/$(PROGRAM).exe.manifest /outputresource:$@;#1 - endif - @$(call binary_file_verification,$@) -else - # - # Note that we have to link -lthread even when USE_PTHREADS is true. - # This is becuase checkForCorrectLibthread() croaks otherwise. - # - LIBTHREAD = -lthread - ifeq ($(USE_PTHREADS),true) - THREADLIBS = -lpthread $(LIBTHREAD) - else - THREADLIBS = $(LIBTHREAD) - endif - - ifeq ($(PLATFORM), macosx) - THREADLIBS = -pthread - # Needed for linking the various launchers - LDFLAGS += -framework Cocoa -framework Security \ - -framework ApplicationServices - OTHER_CPPFLAGS += -DPACKAGE_PATH='"$(PACKAGE_PATH)"' - - # Default Info.plist file for the command line tools. This gets overridden by - # some of the jvmstat tools so that they have task_for_pid() privileges - ifndef INFO_PLIST_FILE - INFO_PLIST_FILE = Info-cmdline.plist - endif - LDFLAGS += -sectcreate __TEXT __info_plist $(LAUNCHER_PLATFORM_SRC)/lib/$(INFO_PLIST_FILE) - else - INFO_PLIST_FILE= - endif - - # - # This rule only applies on unix. It supports quantify and its ilk. - # - $(ACTUAL_PROGRAM):: $(FILES_o) - @$(prep-target) - @set -- $?; \ - $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; - @$(MKDIR) -p $(TEMPDIR) - $(LINK_PRE_CMD) $(CC) $(CC_OBJECT_OUTPUT_FLAG)$@ $(LDFLAGS) \ - $(FILES_o) $(THREADLIBS) $(LDLIBS) - ifeq ($(findstring privileged, $(INFO_PLIST_FILE)), privileged) - -codesign -s openjdk_codesign $@ - endif - @$(call binary_file_verification,$@) -endif # PLATFORM - -clean:: -ifeq ($(PLATFORM), windows) - $(RM) $(OBJDIR)/$(PROGRAM).rc - $(RM) $(OBJDIR)/$(PROGRAM).ico - $(RM) $(OBJDIR)/$(PROGRAM).lcf - $(RM) $(OBJDIR)/$(PROGRAM).map - $(RM) $(OBJDIR)/$(PROGRAM).exp - $(RM) $(OBJDIR)/$(PROGRAM).lib - $(RM) $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX) - $(RM) $(OBJDIR)/$(PROGRAM).ilk - $(RM) *.pdb -endif - - -clobber:: - $(RM) $(ACTUAL_PROGRAM) - -# -# Now include make dependencies (created during compilation, see Rules.gmk) -# -ifeq ($(INCREMENTAL_BUILD),true) - # Workaround: gnumake sometimes says files is empty when it shouldn't - # was: files := $(foreach file, $(wildcard */$(ARCH)/*.$(DEPEND_SUFFIX)), $(file)) - files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) - ifneq ($(strip $(files)),) - include $(files) - endif -endif - -ifdef JAVA_ARGS - OTHER_CPPFLAGS += -DJAVA_ARGS='$(JAVA_ARGS)' - OTHER_CPPFLAGS += -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' -endif - -ifeq ($(PLATFORM), windows) - ifdef RELEASE - OTHER_CPPFLAGS += -DVERSION='"$(RELEASE)"' - endif -endif - - -ifneq ($(PLATFORM), windows) - HAVE_GETHRTIME=true -endif - -ifeq ($(HAVE_GETHRTIME),true) - OTHER_CPPFLAGS += -DHAVE_GETHRTIME -endif - -OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC)/bin -I$(LAUNCHER_PLATFORM_SRC)/bin -ifeq ($(PLATFORM), macosx) - OTHER_INCLUDES += -I$(LAUNCHER_SOLARIS_PLATFORM_SRC)/bin - ifneq ($(SYSTEM_ZLIB), true) - OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3 - endif -else - OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3 -endif - -OTHER_CPPFLAGS += -DPROGNAME='"$(PROGRAM)"' -VERSION_DEFINES += -DFULL_VERSION='"$(FULL_VERSION)"' - -VERSION_DEFINES += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ - -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' - - - -$(OBJDIR)/main.$(OBJECT_SUFFIX): $(LAUNCHER_SHARE_SRC)/bin/main.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$(OBJDIR)/main.$(OBJECT_SUFFIX) \ - $(VERSION_DEFINES) $< - -# -# Default dependencies -# - -all: build - -build: program - -debug: - $(MAKE) VARIANT=DBG build - -fastdebug: - $(MAKE) VARIANT=DBG FASTDEBUG=true build - -.PHONY: all build program clean clobber debug fastdebug diff --git a/jdk/makefiles/common/Release-embedded.gmk b/jdk/makefiles/common/Release-embedded.gmk deleted file mode 100644 index d5d709fd3b4..00000000000 --- a/jdk/makefiles/common/Release-embedded.gmk +++ /dev/null @@ -1,230 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# SE-Embedded Reduced JRE targets -# -ifdef JAVASE_EMBEDDED - -reduced-image-jre reduced-headless-image-jre :: - @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -# Add the reduced-jre images as pre-reqs. These will be processed last -images:: reduced-image-jre reduced-headless-image-jre - - -###################################################### -# Create the headless rt.jar -###################################################### - -NOT_HEADLESS_RT_JAR_LIST = $(ABS_TEMPDIR)/not_hl_rt_jar.list -HEADLESS_RT_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/hl_rt_jar_list -TOTAL_HEADLESS_JAR_FILELIST=$(REORDER_TEMPDIR)/hl_file_list -HEADLESS_CLASSLIST=$(ABS_TEMPDIR)/headless_classlist - -# Add the jar file directories that we don't want in the -# headless JRE. If you want to remove most classes in a -# directory, put the directory in the NOT_HEADLESS_RT_JAR_LIST -# and put the individual classes you want to keep in the -# HEADLESS_CLASSLIST file. -$(NOT_HEADLESS_RT_JAR_LIST): $(NOT_RT_JAR_LIST) - $(RM) $(HEADLESS_CLASSLIST) - $(RM) $(NOT_HEADLESS_RT_JAR_LIST) - $(CP) $(NOT_RT_JAR_LIST) $(NOT_HEADLESS_RT_JAR_LIST) -# List all the packages to be excluded - $(ECHO) "sun/awt/motif/" >> $@ - $(ECHO) "sun/awt/X11/" >> $@ - $(ECHO) "sun/applet/" >> $@ - $(ECHO) "sun/java2d/opengl/" >> $@ - $(ECHO) "com/sun/java/swing/plaf/" >> $@ -# List all the individual classes to be included - $(ECHO) "sun/awt/motif/MFontConfiguration.class" >$(HEADLESS_CLASSLIST) - $(ECHO) "sun/applet/AppContextCreator.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/applet/AppletAudioClip.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXSurfaceData.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXSurfaceData"\$$"GLXOffScreenSurfaceData.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXVolatileSurfaceManager.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/OGLSurfaceData.class" >>$(HEADLESS_CLASSLIST) - - -$(TOTAL_HEADLESS_JAR_FILELIST): $(JARREORDER_JARFILE) $(NOT_HEADLESS_RT_JAR_LIST) - $(prep-target) - $(RM) $@.temp - $(CD) $(CLASSBINDIR) ; \ - $(BOOT_JAVA_CMD) -jar $(JARREORDER_JARFILE) \ - -o $@.temp - $(NOT_HEADLESS_RT_JAR_LIST) . -# Add on the explicitly included class files from the otherwise excluded packages - $(CAT) $(HEADLESS_CLASSLIST) >> $@.temp - $(MV) $@.temp $@ - @$(CD) $(CLASSBINDIR); $(java-vm-cleanup) - -# Create the headless rt.jar file list & non-class files list -MakeHeadlessJarFileList: $(TOTAL_HEADLESS_JAR_FILELIST) $(JARSPLIT_JARFILE) - @$(RM) $(HEADLESS_RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(BOOT_JAVA_CMD) -jar $(JARSPLIT_JARFILE) $(TOTAL_HEADLESS_JAR_FILELIST) \ - -o $(HEADLESS_RT_JAR_FILELIST) $(RES_JAR_FILELIST) - @$(java-vm-cleanup) - -# Create headless rt.jar -HL_RT_JAR=$(ABS_TEMPDIR)/rt-hl-orig.jar -$(HL_RT_JAR): MakeHeadlessJarFileList $(RT_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) ; \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ @$(HEADLESS_RT_JAR_FILELIST) \ - $(JAR_JFLAGS) - @$(CD) $(CLASSBINDIR); $(java-vm-cleanup) - - -# -# Produce a reduced Headful JRE for Embedded Devices -# -# The deployment binaries are added during the deployment build process -# - -# Binaries that don't get included in reduced jre image bin directory -NOT_REDUCEDJRE_BIN = \ - java_vm \ - kinit \ - klist \ - ktab \ - orbd \ - policytool \ - rmid \ - rmiregistry \ - servertool \ - tnameserv \ - pack200 \ - unpack200 - -# jars/resources/libs that don't get included in reduced jre image lib directory -NOT_REDUCEDJRE_LIB = \ - charsets.jar \ - ext/dnsns.jar \ - ext/localedata.jar \ - $(LIBARCH)/client/classes.jsa \ - $(LIBARCH)/libjavaplugin_jni.so \ - $(LIBARCH)/libjavaplugin_nscp_gcc29.so \ - $(LIBARCH)/libjavaplugin_nscp.so \ - $(LIBARCH)/libjavaplugin_oji.so - -# JRE docs that don't get included in reduced jre image top directory -NOT_REDUCEDJRE_DOC = \ - Welcome.html - -reduced-image-jre:: - @$(ECHO) Starting to Produce Reduced JRE - @# - @# First make a copy of the full JRE - @# - $(RM) -r $(JRE_REDUCED_IMAGE_DIR) - $(MKDIR) -p $(JRE_REDUCED_IMAGE_DIR) - $(CD) $(JRE_IMAGE_DIR); \ - $(TAR) cf - . | ($(CD) $(JRE_REDUCED_IMAGE_DIR); $(TAR) xf - ); - - @# - @# Remove all of the files that are not needed for the - @# reduced JRE - @# - for l in $(NOT_REDUCEDJRE_BIN) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/bin/$$l ; \ - done - for l in $(NOT_REDUCEDJRE_LIB) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/lib/$$l ; \ - done - for l in $(NOT_REDUCEDJRE_DOC) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/$$l ; \ - done - - @# Remove misc. other files - $(RM) -r $(JRE_REDUCED_IMAGE_DIR)/man - $(RM) -f $(JRE_REDUCED_IMAGE_DIR)/CHANGES - - @$(ECHO) Done Creating Reduced JRE - -# -# Produce a reduced Headless JRE -# -reduced-headless-image-jre:: $(RT_JAR) $(RESOURCES_JAR) $(BUILD_META_INDEX) $(HL_RT_JAR) - @$(ECHO) Starting to Produce Reduced Headless JRE - @# - @# First make a copy of the reduced JRE we just built - @# - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - $(MKDIR) -p $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - $(CD) $(JRE_REDUCED_IMAGE_DIR); \ - $(TAR) cf - . | ($(CD) $(JRE_REDUCED_HEADLESS_IMAGE_DIR); $(TAR) xf - ); - - @# Replace the full rt.jar with the headless rt.jar - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/rt.jar - $(CP) $(HL_RT_JAR) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/rt.jar - - @# - @# Remove all of the files that are not needed for the - @# reduced Headless JRE - @# - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/gtkhelper - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libjsoundalsa.so - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/audio - $(RM) -fr $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/applet - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/awt_robot - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libawt_xawt.so - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libsplashscreen.so - @# Remove oblique fonts and reduce font support to LucidaSansRegular only - $(RM) -fr $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/oblique-fonts - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightDemiBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightDemiItalic.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightItalic.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightRegular.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaSansDemiBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaTypewriterBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaTypewriterRegular.ttf - -ifeq ($(PLATFORM), linux) -# put out minimal fonts.dir file for the remaining font - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) 6>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-1">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-2">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-4">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-5">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-7">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-9">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - -endif # Linux - - @# - @# all done with JRE reduced headless image - @# - - @$(ECHO) Done Creating Reduced Headless JRE - -images-clobber:: - $(RM) -r $(JRE_REDUCED_IMAGE_DIR) - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - -.PHONY: reduced-image-jre reduced-headless-image-jre - -endif # JAVASE_EMBEDDED - diff --git a/jdk/makefiles/common/Release-macosx.gmk b/jdk/makefiles/common/Release-macosx.gmk deleted file mode 100644 index 9235afa0eb8..00000000000 --- a/jdk/makefiles/common/Release-macosx.gmk +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -MANBASEDIRS=$(JDK_TOPDIR)/src/bsd/doc $(IMPORTDOCDIR) -MAN1SUBDIR = man -JA_DIRNAME=ja_JP.UTF-8 - -# Defines the release targets for Mac OS X build products - -JDK_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2sdk-bundle/$(THIS_JDK_VERSION).jdk/Contents -JRE_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2re-bundle/$(THIS_JDK_VERSION).jre/Contents - -MACOSX_SRC = $(JDK_TOPDIR)/src/macosx - -BUNDLE_ID ?= net.java.openjdk -BUNLDE_ID_JRE ?= $(BUNDLE_ID).jre -BUNLDE_ID_JDK ?= $(BUNDLE_ID).jdk - -BUNDLE_NAME ?= OpenJDK $(JDK_MINOR_VERSION) -BUNDLE_NAME_JRE ?= $(BUNDLE_NAME) -BUNDLE_NAME_JDK ?= $(BUNDLE_NAME) - -BUNDLE_INFO ?= OpenJDK ($(JDK_VERSION)) -BUNDLE_INFO_JRE ?= $(BUNDLE_INFO) -BUNDLE_INFO_JDK ?= $(BUNDLE_INFO) - -BUNDLE_PLATFORM_VERSION ?= $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION) -BUNDLE_VERSION ?= $(JDK_VERSION) -BUNDLE_VENDOR ?= UNDEFINED - -jre-bundle-setup: - $(RM) -r $(JRE_BUNDLE_DIR) - -jdk-bundle-setup: - $(RM) -r $(JDK_BUNDLE_DIR) - -jre-bundle-files: - $(MKDIR) -p $(JRE_BUNDLE_DIR)/MacOS - ln -s ../Home/lib/jli/libjli.dylib $(JRE_BUNDLE_DIR)/MacOS/ - $(CP) -r $(JRE_IMAGE_DIR) $(JRE_BUNDLE_DIR)/Home - $(SED) -e "s/@@ID@@/$(BUNDLE_ID_JRE)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JRE)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JRE)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JRE-Info.plist > $(JRE_BUNDLE_DIR)/Info.plist - /usr/bin/SetFile -a B $(JRE_BUNDLE_DIR)/../ - -jdk-bundle-files: - $(MKDIR) -p $(JDK_BUNDLE_DIR)/MacOS - ln -s ../Home/jre/lib/jli/libjli.dylib $(JDK_BUNDLE_DIR)/MacOS/ - $(CP) -r $(JDK_IMAGE_DIR) $(JDK_BUNDLE_DIR)/Home - $(SED) -e "s/@@ID@@/$(BUNDLE_ID_JDK)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JDK)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JDK)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JDK-Info.plist > $(JDK_BUNDLE_DIR)/Info.plist - /usr/bin/SetFile -a B $(JDK_BUNDLE_DIR)/../ - -EXTRA_IMAGE_TARGETS += jre-bundle-setup jdk-bundle-setup jre-bundle-files jdk-bundle-files - -.PHONY: $(EXTRA_JRE_TARGETS) $(EXTRA_IMAGE_TARGETS) diff --git a/jdk/makefiles/common/Release.gmk b/jdk/makefiles/common/Release.gmk deleted file mode 100644 index 381a1ddb9aa..00000000000 --- a/jdk/makefiles/common/Release.gmk +++ /dev/null @@ -1,1301 +0,0 @@ -# -# Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -include $(JDK_TOPDIR)/makefiles/docs/CORE_PKGS.gmk -include $(JDK_TOPDIR)/makefiles/docs/NON_CORE_PKGS.gmk -include $(JDK_TOPDIR)/makefiles/Tools.gmk - -# What jdk version are we building -THIS_JDK_VERSION := $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) - -# -# Perform release engineering tasks. -# -# images An image is what the product looks like when it is -# installed. -# - -IMAGE_BINDIR = bin - -# The compiler should not issue a "Proprietary" warning when compiling -# classes in the com.sun.java.swing.plaf packages, since we've always -# allowed, and even advocated, extending them (see bug 6476749). -# -# This approach is NOT to be used as a general purpose way to avoid such -# compiler warnings for non-core packages. The correct way is to document -# the packages in NON_CORE_PKGS.gmk, and include them in the NON_CORE_PKGS -# definition. -# -# Swing has taken this approach only as a temporary measure to avoid -# the compiler warnings until we can properly document these packages. -# This is covered under 6491853. -EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \ - com.sun.java.swing.plaf.motif \ - com.sun.java.swing.plaf.gtk - -# -# Include the exported private packages in ct.sym. -# This is an interim solution until the ct.sym is replaced -# with a new module system (being discussed for JDK 8). -# -EXPORTED_PRIVATE_PKGS = com.sun.servicetag \ - com.oracle.net \ - com.oracle.nio - -# 64-bit solaris has a few special cases. We define the variable -# SOLARIS64 for use in this Makefile to easily test those cases -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - SOLARIS64 = true - IMAGE_BINDIR = bin/$(ARCH) - endif -endif - -JTG_DOCS = $(JDK_TOPDIR)/src/solaris/doc - -ifeq ($(PLATFORM), macosx) - include $(JDK_TOPDIR)/make/common/Release-$(PLATFORM).gmk -endif - -# The base names of all the license and document files for the jdk and jre -# (These files get placed in the jdk and jre install images) -ifdef OPENJDK - # Where to find these files - SHARE_JDK_DOC_SRC = $(JDK_TOPDIR) - SHARE_JRE_DOC_SRC = $(JDK_TOPDIR) - # Same files for jdk and jre, no name changes - IMAGE_DOCLIST_JDK = LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README - IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES = - IMAGE_DOCLIST_JRE = LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README -else - # make/closed/common/Defs.gmk for closed location of SHARE_JDK_DOC_SRC - - IMAGE_DOCLIST_JDK = COPYRIGHT README.html LICENSE THIRDPARTYLICENSEREADME.txt - IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES = demo/DEMOS_LICENSE sample/SAMPLES_LICENSE - IMAGE_DOCLIST_JRE = COPYRIGHT Welcome.html LICENSE THIRDPARTYLICENSEREADME.txt - ifeq ($(PLATFORM), windows) - IMAGE_DOCLIST_JRE += README.txt - else - IMAGE_DOCLIST_JRE += README - endif -endif - -# Paths to these files we need -JDK_DOCFILES = $(IMAGE_DOCLIST_JDK:%=$(JDK_IMAGE_DIR)/%) -JRE_DOCFILES = $(IMAGE_DOCLIST_JRE:%=$(JRE_IMAGE_DIR)/%) -JDK_DEMOS_AND_SAMPLES_DOCFILES = $(IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES:%=$(JDK_IMAGE_DIR)/%) - -# absolute directory names: note, these must exist prior to build -# time - they are created in the main Makefile. -JRE_IMAGE_BINDIR = $(JRE_IMAGE_DIR)/bin - -MAINMANIFEST = $(JDK_TOPDIR)/make/tools/manifest.mf -BEANMANIFEST = $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest - -# -# Man pages -# - -JRE_MAN_PAGES = \ - java.1 \ - keytool.1 \ - orbd.1 \ - pack200.1 \ - policytool.1 \ - rmid.1 \ - rmiregistry.1 \ - servertool.1 \ - tnameserv.1 \ - unpack200.1 - -ifndef OPENJDK - JRE_MAN_PAGES += javaws.1 -endif - -JDK_MAN_PAGES = \ - $(JRE_MAN_PAGES) \ - appletviewer.1 \ - extcheck.1 \ - idlj.1 \ - jar.1 \ - jarsigner.1 \ - javac.1 \ - javadoc.1 \ - javah.1 \ - javap.1 \ - jconsole.1 \ - jdb.1 \ - jhat.1 \ - jinfo.1 \ - jmap.1 \ - jps.1 \ - jrunscript.1 \ - jsadebugd.1 \ - jstack.1 \ - jstat.1 \ - jstatd.1 \ - native2ascii.1 \ - rmic.1 \ - schemagen.1 \ - serialver.1 \ - wsgen.1 \ - wsimport.1 \ - xjc.1 - -ifeq ($(PLATFORM), solaris) - MANBASEDIRS=$(JDK_TOPDIR)/src/solaris/doc $(IMPORTDOCDIR) - MAN1SUBDIR=sun/man/man1 -endif # solaris - -ifeq ($(PLATFORM), linux) - MANBASEDIRS=$(JDK_TOPDIR)/src/linux/doc $(IMPORTDOCDIR) - MAN1SUBDIR=man - JA_DIRNAME=ja_JP.UTF-8 -endif # linux - -define copy-man-pages -$(MKDIR) -p $1/man/man1 -for manbase in $(MANBASEDIRS:%=%/$(MAN1SUBDIR)) ; do \ - for manpage in $2; do \ - if [ -f $${manbase}/$${manpage} ] ; then \ - $(CP) $${manbase}/$${manpage} $1/man/man1 ; \ - for ja_encoding in $(JA_TARGET_ENCODINGS); do \ - ja_dir="ja"; \ - if [ "$${ja_encoding}" != "$(JA_SOURCE_ENCODING)" ]; then \ - ja_dir="ja_JP.$${ja_encoding}"; \ - fi; \ - $(MKDIR) -p $1/man/$${ja_dir}/man1; \ - $(CAT) $${manbase}/ja/$${manpage} \ - | $(NATIVE2ASCII) -encoding $(JA_SOURCE_ENCODING) \ - | $(SED) 's/@@VERSION@@/$(THIS_JDK_VERSION)/g' \ - | $(NATIVE2ASCII) -reverse -encoding $${ja_encoding} \ - > $1/man/$${ja_dir}/man1/$${manpage}; \ - done; \ - fi; \ - done; \ -done -$(java-vm-cleanup) -if [ "$(JA_DIRNAME)" != "" ] ; then \ - $(CD) $1/man && $(RM) ja && $(LN) -s $(JA_DIRNAME) ja; \ -fi -endef - - -# no compression unless requested -ifndef COMPRESS_JARS - CREATE_JAR_OPTS = c0mf - CREATE_JAR_OPTS_NOMANIFEST = c0f -else - CREATE_JAR_OPTS = cmf - CREATE_JAR_OPTS_NOMANIFEST = cf -endif - -# -# Targets. -# -INITIAL_IMAGE_JRE=initial-image-jre -INITIAL_IMAGE_JDK=initial-image-jdk -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - INITIAL_IMAGE_JRE=initial-image-jre-sol64 - INITIAL_IMAGE_JDK=initial-image-jdk-sol64 - endif -endif - -images images-clobber \ -initial-image-jre initial-image-jdk \ -initial-image-jre-sol64 initial-image-jdk-sol64 \ -trim-image-jre trim-image-jdk \ -identify-image-jre identify-image-jdk \ -process-image-jre process-image-jdk \ -sec-files sec-files-win jgss-files :: - $(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -install: images - -# Order is important here, trim jre after jdk image is created -ifeq ($(PLATFORM), macosx) - -images:: $(INITIAL_IMAGE_JRE) $(EXTRA_JRE_TARGETS) $(INITIAL_IMAGE_JDK) \ - trim-image-jre trim-image-jdk \ - identify-image-jre identify-image-jdk \ - process-image-jre process-image-jdk sec-files sec-files-win jgss-files \ - $(EXTRA_IMAGE_TARGETS) -else - -images:: $(INITIAL_IMAGE_JRE) $(INITIAL_IMAGE_JDK) \ - trim-image-jre trim-image-jdk \ - identify-image-jre identify-image-jdk \ - process-image-jre process-image-jdk sec-files sec-files-win jgss-files -endif - -# Don't use these -image-jre:: initial-image-jre trim-image-jre identify-image-jre process-image-jre -image-jdk:: initial-image-jdk trim-image-jdk identify-image-jdk process-image-jdk - -# -# Sources we ship in the SDK. -# -SOURCES = \ - java/applet \ - java/awt \ - java/beans \ - java/io \ - java/lang \ - java/math \ - java/net \ - java/nio \ - java/rmi \ - java/security \ - java/sql \ - java/text \ - java/util \ - com/sun/corba \ - com/sun/image/codec/jpeg \ - com/sun/imageio \ - com/sun/java/swing \ - com/sun/javadoc \ - com/sun/jmx \ - com/sun/source \ - com/sun/naming \ - com/sun/security/auth \ - com/sun/security/jgss \ - javax/accessibility \ - javax/annotation \ - javax/script \ - javax/imageio \ - javax/lang \ - javax/management \ - javax/naming \ - javax/print \ - javax/rmi \ - javax/security \ - javax/sound \ - javax/sql \ - javax/swing \ - javax/tools \ - javax/xml \ - com/sun/org/apache \ - com/sun/java_cup \ - com/sun/jlex \ - org/ietf \ - org/omg \ - org/w3c/dom \ - org/xml/sax \ - sunw -# -# Directories where sources may be found. If a file with the same path -# name exists in more than one of these places, the one found last on this -# list wins. -# -SOURCE_DIRS = $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes -SOURCE_DIRS += $(GENSRCDIR) -SOURCE_DIRS += $(IMPORTSRCDIR) -SOURCE_DIRS += $(JDK_OUTPUTDIR)/gendocsrc_rmic -ifndef OPENJDK - SOURCE_DIRS += $(CLOSED_SRC)/share/classes -endif - - -# -# Specific files and directories that will be filtered out from above areas. -# -SOURCE_FILTERs = $(SCM_DIRs) ',*' -SOURCE_FILES_filter = $(SOURCE_FILTERs:%=-name % -prune -o) - -# -# Bug 4249883 - excluding some unnecessary packages from com.sun.tools -# -# Bug 5008685 - exclude jconsole from sun/tools -# -TOOLS = \ - META-INF/services/com.sun.jdi.connect.Connector \ - META-INF/services/com.sun.jdi.connect.spi.TransportService \ - sun/tools/asm \ - sun/tools/jar \ - sun/tools/java \ - sun/tools/javac \ - sun/tools/jcmd \ - sun/tools/jps \ - sun/tools/jstat \ - sun/tools/jstatd \ - sun/tools/native2ascii \ - sun/tools/serialver \ - sun/tools/tree \ - sun/tools/util \ - sun/security/tools/JarBASE64Encoder.class \ - sun/security/tools/JarSigner.class \ - sun/security/tools/JarSignerParameters.class \ - sun/security/tools/JarSignerResources.class \ - sun/security/tools/JarSignerResources_ja.class \ - sun/security/tools/JarSignerResources_zh_CN.class \ - sun/security/tools/SignatureFile\$$Block.class \ - sun/security/tools/SignatureFile.class \ - sun/security/tools/TimestampedSigner.class \ - sun/rmi/rmic \ - sun/applet \ - sun/jvmstat \ - com/sun/javadoc \ - com/sun/jdi \ - com/sun/jarsigner \ - com/sun/source \ - com/sun/tools/classfile \ - com/sun/tools/doclets \ - com/sun/tools/example/debug/expr \ - com/sun/tools/example/debug/tty \ - com/sun/tools/extcheck \ - com/sun/tools/hat \ - com/sun/tools/javac \ - com/sun/tools/javadoc \ - com/sun/tools/javah \ - com/sun/tools/javap \ - com/sun/tools/corba \ - com/sun/tools/internal/xjc \ - com/sun/tools/internal/ws \ - META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ - META-INF/services/com.sun.tools.internal.xjc.Plugin \ - com/sun/istack/internal/tools \ - com/sun/tools/internal/jxc/ap \ - com/sun/tools/internal/ws/wscompile/plugin/at_generated \ - com/sun/codemodel \ - com/sun/tools/internal/jxc \ - com/sun/xml/internal/rngom \ - com/sun/xml/internal/xsom \ - org/relaxng/datatype \ - com/sun/xml/internal/dtdparser \ - com/sun/tools/jdi \ - com/sun/tools/script/shell \ - META-INF/services/com.sun.tools.attach.spi.AttachProvider \ - com/sun/tools/attach \ - sun/tools/attach \ - sun/tools/jstack \ - sun/tools/jinfo \ - sun/tools/jmap - -# classes that go into jfr.jar -JFR_CLASSES_DIRS= \ - com/oracle/jrockit/jfr \ - oracle/jrockit/jfr - -# classes that go into jsse.jar -JSSE_CLASSES_DIRS = \ - sun/security/provider/Sun.class \ - sun/security/rsa/SunRsaSign.class \ - sun/security/ssl \ - com/sun/net/ssl/internal/ssl - -# classes that go into dnsns.jar -DNS_CLASSES_DIRS = \ - sun/net/spi/nameservice/dns \ - META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor - -# classes and files that go into localedata.jar -LOCALEDATA_JAR_DIRS = \ - sun/text/resources/*_ar* \ - sun/text/resources/*_hi* \ - sun/text/resources/*_iw* \ - sun/text/resources/*_iw* \ - sun/text/resources/*_ja* \ - sun/text/resources/*_ko* \ - sun/text/resources/*_th.* \ - sun/text/resources/*_th_* \ - sun/text/resources/*_vi* \ - sun/text/resources/*_zh* \ - sun/text/resources/*Data_th \ - sun/text/resources/thai_dict \ - sun/util/resources/*_ar* \ - sun/util/resources/*_hi* \ - sun/util/resources/*_iw* \ - sun/util/resources/*_iw* \ - sun/util/resources/*_ja* \ - sun/util/resources/*_ko* \ - sun/util/resources/*_th_* \ - sun/util/resources/*_th.* \ - sun/util/resources/*_vi* \ - sun/util/resources/*_zh* - -LOCALEDATA_JAR_FILES = $(foreach i,$(LOCALEDATA_JAR_DIRS), $(wildcard $(CLASSBINDIR)/$i)) - -# files under $(OUTPUTDIR) that need to go into sec-bin.zip for builds -# where the corresponding sources are not available -SEC_FILES_DIRS = \ - classes/javax/net \ - classes/javax/security/cert \ - classes/com/sun/net/ssl \ - classes/com/sun/security/cert \ - classes/sun/net/www/protocol/https \ - classes/sun/security/pkcs12 \ - classes/sun/security/ssl \ - classes/sun/security/krb5/*.class \ - classes/sun/security/krb5/internal/*.class \ - classes/sun/security/krb5/internal/ccache \ - classes/sun/security/krb5/internal/crypto \ - classes/sun/security/krb5/internal/ktab \ - classes/sun/security/krb5/internal/rcache \ - classes/sun/security/krb5/internal/util \ - classes/sun/security/jgss/spi/GSSContextSpi.class - -# files under $(OUTPUTDIR) that need to go into sec-windows-win.zip for builds -# where the corresponding sources are not available -SEC_FILES_WIN_DIRS = \ - classes/sun/security/krb5/internal/tools - -# files under $(BINDIR) that need to go into jgss_files.zip for builds -# where the corresponding sources are not available -JGSS_FILES_DIRS = \ - bin/w2k_lsa_auth.dll \ - bin/w2k_lsa_auth.map \ - bin/w2k_lsa_auth.pdb - -# The following get removed from the SDK image. -NOTJDKTOOLS = \ - java_vm - -# The following get removed from the JRE after the bulk-copy of BINDIR... -NOTJRETOOLS = \ - appletviewer$(EXE_SUFFIX) \ - extcheck$(EXE_SUFFIX) \ - idlj$(EXE_SUFFIX) \ - jar$(EXE_SUFFIX) \ - jarsigner$(EXE_SUFFIX) \ - java-rmi.cgi \ - javac$(EXE_SUFFIX) \ - javadoc$(EXE_SUFFIX) \ - javah$(EXE_SUFFIX) \ - javap$(EXE_SUFFIX) \ - jcmd$(EXE_SUFFIX) \ - jdb$(EXE_SUFFIX) \ - jps$(EXE_SUFFIX) \ - jrunscript$(EXE_SUFFIX) \ - jstat$(EXE_SUFFIX) \ - jstatd$(EXE_SUFFIX) \ - jstack$(EXE_SUFFIX) \ - packagebean$(SCRIPT_SUFFIX) \ - rmic$(EXE_SUFFIX) \ - serialver$(EXE_SUFFIX) \ - unregbean$(EXE_SUFFIX) \ - jconsole$(EXE_SUFFIX) \ - jinfo$(EXE_SUFFIX) \ - jmap$(EXE_SUFFIX) \ - native2ascii$(EXE_SUFFIX) \ - xjc$(EXE_SUFFIX) \ - wsgen$(EXE_SUFFIX) \ - wsimport$(EXE_SUFFIX) \ - schemagen$(EXE_SUFFIX) \ - jsadebugd$(EXE_SUFFIX) \ - jhat$(EXE_SUFFIX) - -# The following get removed from the JRE after the bulk-copy of LIBDIR... -NOTJRELIBS = tools.jar \ - jconsole.jar - -ifeq ($(INCLUDE_SA), true) - NOTJRELIBS += sa-jdi.jar - - # The following get removed from the JRE after the bulk-copy of LIBDIR... - NOTJRE_SHARED_LIBS = $(SALIB_NAME) -else - NOTJRE_SHARED_LIBS = -endif - -# Attach library is JDK only -NOTJRE_SHARED_LIBS += $(LIB_PREFIX)attach.$(LIBRARY_SUFFIX) - -# -###### RULES - -# Processing license files from source area to image area -# These will be modified to have the platform specific EOL chars. -define process-doc-file -$(prep-target) -$(SED) 's/$$//g' $< > $@ -$(CHMOD) 444 $@ -endef - -# JDK files -$(JDK_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) - -$(JDK_IMAGE_DIR)/demo/DEMOS_LICENSE: $(SHARE_JDK_DOC_SRC)/DEMOS_LICENSE - $(process-doc-file) - -$(JDK_IMAGE_DIR)/sample/SAMPLES_LICENSE: $(SHARE_JDK_DOC_SRC)/SAMPLES_LICENSE - $(process-doc-file) - -# JRE files -$(JRE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -ifeq ($(PLATFORM), windows) -$(JRE_IMAGE_DIR)/README.txt: $(SHARE_JRE_DOC_SRC)/README - $(process-doc-file) -endif - - -###################################################### -# List of directories in classes directory that should NOT be in rt.jar -###################################################### - -NOT_RT_JAR_LIST = $(IMAGES_OUTPUTDIR)/tmp/not_rt_jar.list - -$(NOT_RT_JAR_LIST): FRC - $(prep-target) - $(ECHO) "#\n" >> $@ - $(ECHO) "# List of subdirectories not in include in rt.jar" >> $@ - $(ECHO) "# Directories must contain trailing '/'." >> $@ - $(ECHO) "com/sun/javadoc/" >> $@ - $(ECHO) "com/sun/jdi/" >> $@ - $(ECHO) "com/sun/jarsigner/" >> $@ - $(ECHO) "com/sun/source/" >> $@ - $(ECHO) "com/sun/istack/internal/tools/" >> $@ - $(ECHO) "META-INF/services/com.sun.jdi.connect.Connector" >> $@ - $(ECHO) "META-INF/services/com.sun.jdi.connect.spi.TransportService" >> $@ - $(ECHO) "META-INF/services/com.sun.tools.xjc.Plugin" >> $@ - $(ECHO) "com/sun/tools/" >> $@ - $(ECHO) "sun/jvmstat/" >> $@ - $(ECHO) "sun/nio/cs/ext/" >> $@ - $(ECHO) "sun/awt/HKSCS.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312\$$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312.class" >> $@ - $(ECHO) "sun/awt/motif/X11GBK\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GBK.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601\$$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601.class" >> $@ - $(ECHO) "sun/rmi/rmic/" >> $@ - $(ECHO) "sun/tools/asm/" >> $@ - $(ECHO) "sun/tools/java/" >> $@ - $(ECHO) "sun/tools/javac/" >> $@ - $(ECHO) "com/sun/tools/classfile/" >> $@ - $(ECHO) "com/sun/tools/javap/" >> $@ - $(ECHO) "sun/tools/jcmd/" >> $@ - $(ECHO) "sun/tools/jconsole/" >> $@ - $(ECHO) "sun/tools/jps/" >> $@ - $(ECHO) "sun/tools/jstat/" >> $@ - $(ECHO) "sun/tools/jstatd/" >> $@ - $(ECHO) "sun/tools/native2ascii/" >> $@ - $(ECHO) "sun/tools/serialver/" >> $@ - $(ECHO) "sun/tools/tree/" >> $@ - $(ECHO) "sun/tools/util/" >> $@ - $(ECHO) "sun/security/tools/JarBASE64Encoder.class" >> $@ - $(ECHO) "sun/security/tools/JarSigner.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerParameters.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_ja.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_zh_CN.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile\$$Block.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile.class" >> $@ - $(ECHO) "sun/security/tools/TimestampedSigner.class" >> $@ - $(ECHO) "sun/security/provider/Sun.class" >> $@ - $(ECHO) "sun/security/rsa/SunRsaSign.class" >> $@ - $(ECHO) "sun/security/ssl/" >> $@ - $(ECHO) "com/sun/net/ssl/internal/ssl/" >> $@ - $(ECHO) "javax/crypto/" >> $@ - $(ECHO) "sun/security/internal/" >> $@ - $(ECHO) "com/sun/crypto/provider/" >> $@ - $(ECHO) "META-INF/services/com.sun.tools.attach.spi.AttachProvider" >> $@ - $(ECHO) "com/sun/tools/attach/" >> $@ - $(ECHO) "org/relaxng/datatype/" >> $@ - $(ECHO) "com/sun/codemodel/" >> $@ - $(ECHO) "com/sun/xml/internal/dtdparser/" >> $@ - $(ECHO) "com/sun/xml/internal/rngom/" >> $@ - $(ECHO) "com/sun/xml/internal/xsom/" >> $@ - $(ECHO) "com/sun/tools/script/shell/" >> $@ - $(ECHO) "sun/tools/attach/" >> $@ - $(ECHO) "sun/tools/jstack/" >> $@ - $(ECHO) "sun/tools/jinfo/" >> $@ - $(ECHO) "sun/tools/jmap/" >> $@ - $(ECHO) "sun/net/spi/nameservice/dns/" >> $@ - $(ECHO) "META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor" >> $@ - $(ECHO) $(patsubst $(CLASSBINDIR)/%,%,$(LOCALEDATA_JAR_FILES)) | sed 's/ /\n/g' >> $@ -ifndef OPENJDK -ifndef JAVASE_EMBEDDED - $(ECHO) "com/oracle/jrockit/jfr/" >> $@ - $(ECHO) "com/oracle/jrockit/jfr/client/" >> $@ - $(ECHO) "com/oracle/jrockit/jfr/management/" >> $@ - $(ECHO) "oracle/jrockit/jfr/" >> $@ - $(ECHO) "oracle/jrockit/jfr/events/" >> $@ - $(ECHO) "oracle/jrockit/jfr/openmbean/" >> $@ - $(ECHO) "oracle/jrockit/jfr/parser/" >> $@ - $(ECHO) "oracle/jrockit/jfr/settings/" >> $@ - $(ECHO) "oracle/jrockit/jfr/tools/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/log/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/os/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/text/" >> $@ -endif -endif - - -# File order list for rt.jar -# - sun.applet is included, till hotjava stops relying on it. -# - sun.tools.jar is included, needs cleanup. -# -REORDER_TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp/reorder -TOTAL_JAR_FILELIST=$(REORDER_TEMPDIR)/file_list - -JARFILELISTS_TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp/jarfilelists -RT_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/rt_jar_list -RES_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/resources_jar_list - -$(TOTAL_JAR_FILELIST): $(BUILD_TOOLS) $(NOT_RT_JAR_LIST) - $(prep-target) - $(RM) $@.temp - ($(CD) $(CLASSBINDIR) && \ - $(TOOL_JARREORDER) \ - -o $@.temp $(ABS_LIBDIR)/classlist $(NOT_RT_JAR_LIST) . ) - $(MV) $@.temp $@ - ($(CD) $(CLASSBINDIR) && $(java-vm-cleanup)) - -# Create the jfr.jar containing Java Flight Recorder implementation -JFR_JAR= -ifndef OPENJDK -ifndef JAVASE_EMBEDDED -JFR_JAR=$(ABS_TEMPDIR)/jfr-orig.jar -$(JFR_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - $(JFR_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) -endif -endif - -# Create the rt.jar file list & non-class files list - -$(RT_JAR_FILELIST) + $(RES_JAR_FILELIST): \ - $(TOTAL_JAR_FILELIST) $(BUILD_TOOLS) - $(RM) $(RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(MKDIR) -p $(JARFILELISTS_TEMPDIR) - $(TOOL_JARSPLIT) \ - $(TOTAL_JAR_FILELIST) \ - -o $(RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(java-vm-cleanup) - -# Create the manifest file. -RT_JAR_MANIFEST_FILE=$(IMAGES_OUTPUTDIR)/tmp/rt_manifest.tmp -$(RT_JAR_MANIFEST_FILE): $(MAINMANIFEST) $(BEANMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) >> $@ - $(CAT) $(BEANMANIFEST) >> $@ - -OTHER_JAR_MANIFEST_FILE=$(IMAGES_OUTPUTDIR)/tmp/other_manifest.tmp -$(OTHER_JAR_MANIFEST_FILE): $(MAINMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - -# Create resources.jar containing non-class files -RESOURCES_JAR=$(IMAGES_OUTPUTDIR)/tmp/resources-orig.jar -$(RESOURCES_JAR): $(RES_JAR_FILELIST) $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - @$(RES_JAR_FILELIST) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create jsse.jar containing SunJSSE implementation classes -JSSE_JAR=$(IMAGES_OUTPUTDIR)/tmp/jsse-orig.jar -$(JSSE_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - $(JSSE_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create dnsns.jar -# Create without manifest for now to not differ with old buildsystem. -DNS_JAR=$(IMAGES_OUTPUTDIR)/tmp/dns-orig.jar -$(DNS_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $@ \ - $(DNS_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create localedata.jar containing localedata for non european languages -LOCALEDATA_JAR=$(IMAGES_OUTPUTDIR)/localedata-orig.jar -$(LOCALEDATA_JAR): $(LOCALEDATA_JAR_FILES) - $(prep-target) -# Create without manifest for now to not differ with old buildsystem. -# $(CD) $(CLASSBINDIR) && \ -# $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ -# $(LOCALEDATA_JAR_DIRS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $@ \ - $(LOCALEDATA_JAR_DIRS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create sec-bin.zip -SEC_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/sec-bin.zip -sec-files:: - $(prep-target) - $(RM) $(SEC_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(SEC_FILES_ZIP) $(SEC_FILES_DIRS) - $(java-vm-cleanup) - -# Create sec-windows-bin.zip -SEC_FILES_WIN_ZIP=$(IMAGES_OUTPUTDIR)/tmp/sec-windows-bin.zip -sec-files-win:: -ifeq ($(PLATFORM), windows) - $(prep-target) - $(RM) $(SEC_FILES_WIN_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(SEC_FILES_WIN_ZIP) $(SEC_FILES_WIN_DIRS) - $(java-vm-cleanup) -endif - -# Create JGSS files that contains the native Kerberos library -JGSS_WIN32_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/jgss-windows-i586-bin.zip -JGSS_WIN64_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/jgss-windows-x64-bin.zip -jgss-files:: -ifeq ($(PLATFORM), windows) - $(prep-target) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) $(JGSS_WIN32_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(JGSS_WIN32_FILES_ZIP) $(JGSS_FILES_DIRS) - else - $(RM) $(JGSS_WIN64_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(JGSS_WIN64_FILES_ZIP) $(JGSS_FILES_DIRS) - endif - $(java-vm-cleanup) -endif - -# Create rt.jar -RT_JAR=$(IMAGES_OUTPUTDIR)/tmp/rt-orig.jar -$(RT_JAR): $(RT_JAR_FILELIST) $(RT_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ \ - @$(RT_JAR_FILELIST) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# SE-Embedded targets if enabled -include $(JDK_TOPDIR)/makefiles/common/Release-embedded.gmk - - -###################################################### -# JRE Image -###################################################### - -initial-image-jre-setup: - $(RM) -r $(JRE_IMAGE_DIR) - $(MKDIR) -p $(JRE_IMAGE_DIR) - -# 64-bit solaris jre image contains only the 64-bit add-on files. -initial-image-jre-sol64:: initial-image-jre-setup - @# Use tar instead of cp to preserve the symbolic links - for dir in bin lib ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \ - ($(CD) $(JRE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - for l in $(NOTJRELIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$$l ; \ - done - $(RM) `$(FIND) $(JRE_IMAGE_DIR)/lib -name 'orb.idl'` - $(RM) `$(FIND) $(JRE_IMAGE_DIR)/lib -name 'ir.idl'` - -# Construct an initial jre image (initial jdk jre) no trimming or stripping -# See "initial-image-jdk-setup" for an explanation of the rm of -# drive names like C: -initial-image-jre:: initial-image-jre-setup \ - $(JRE_DOCFILES) \ - $(RT_JAR) $(RESOURCES_JAR) $(JSSE_JAR) $(JFR_JAR) $(DNS_JAR) $(LOCALEDATA_JAR) \ - $(BUILD_TOOLS) - @# Copy in bin directory - $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_IMAGE_DIR) - @# CTE plugin security change require new empty directory lib/applet - $(MKDIR) -p $(JRE_IMAGE_DIR)/lib/applet - @# Copy in lib directory - $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(CPIO) -pdum $(JRE_IMAGE_DIR) - ifeq ($(USING_CYGWIN),true) - $(RM) -rf $(JRE_IMAGE_DIR)/[A-Za-z]: - $(RM) -rf $(OUTPUTDIR)/[A-Za-z]: - endif - @# Make sure all directories are read/execute for everyone - $(CHMOD) a+rx `$(FIND) $(JRE_IMAGE_DIR) -type d` - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - for l in $(NOTJRELIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$$l ; \ - done - @# Remove orb.idl and ir.idl from jre - $(FIND) $(JRE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \; - $(FIND) $(JRE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \; - @# Copy in rt.jar & resources.jar file - $(CP) $(RT_JAR) $(JRE_IMAGE_DIR)/lib/rt.jar - $(CP) $(RESOURCES_JAR) $(JRE_IMAGE_DIR)/lib/resources.jar - $(CP) $(JSSE_JAR) $(JRE_IMAGE_DIR)/lib/jsse.jar -ifneq ($(JFR_JAR),) - $(CP) $(JFR_JAR) $(JRE_IMAGE_DIR)/lib/jfr.jar -endif - $(CP) $(DNS_JAR) $(JRE_IMAGE_DIR)/lib/ext/dnsns.jar - $(CP) $(LOCALEDATA_JAR) $(JRE_IMAGE_DIR)/lib/ext/localedata.jar - @# Generate meta-index to make boot and extension class loaders lazier - $(CD) $(JRE_IMAGE_DIR)/lib && \ - $(TOOL_BUILDMETAINDEX) \ - -o meta-index *.jar - $(CD) $(JRE_IMAGE_DIR)/lib && $(java-vm-cleanup) - $(CD) $(JRE_IMAGE_DIR)/lib/ext && \ - $(TOOL_BUILDMETAINDEX) \ - -o meta-index *.jar - $(CD) $(JRE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup) -ifeq ($(PLATFORM), macosx) - @#install jobjc, apple mac only - $(CP) $(OUTPUTDIR)/JObjC.build/JObjC.jar $(JRE_IMAGE_DIR)/lib/JObjC.jar -endif -ifeq ($(PLATFORM), windows) - @# Remove certain *.lib files - $(CD) $(JRE_IMAGE_DIR)/lib && \ - $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \ - awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX) - ifeq ($(ARCH_DATA_MODEL), 32) - @# The Java Kernel JRE image ships with a special VM. It is not included - @# in the full JRE image, so remove it. Also, is it only for 32-bit windows. - $(CD) $(JRE_IMAGE_DIR)/bin && $(RM) -r kernel - endif -endif # Windows -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JRE_IMAGE_DIR),$(JRE_MAN_PAGES)) -endif # !windows - -# Trim out any extra files not for the jre shipment but wanted in the jdk jre. -# (Note the jdk WILL want the jre image before this trimming) -# Removes server VM on Windows 32bit. -# Remove certain shared libraries that should not be in the jre image -# but should be in the jdk jre image. -trim-image-jre:: - @# Clean out all _the. files. - $(FIND) $(JRE_IMAGE_DIR) -name "_the.*" $(FIND_DELETE) -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) -r $(JRE_IMAGE_DIR)/bin/server - endif - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin/$$l ; \ - done ; - endif -else # PLATFORM - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \ - done ; - endif -endif # PLATFORM - -# Get list of all binary (COFF or Elf) files in the jre -JRE_BIN_LIST=$(TEMPDIR)/jre-bin-files.list -$(JRE_BIN_LIST): - $(RM) $@ -ifeq ($(PLATFORM), windows) - $(FIND) $(JRE_IMAGE_DIR)/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" > $@ -else - $(FIND) $(JRE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JRE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on Elf files we are shipping) -# (Note the jdk WILL want the jre image before this processing) -process-image-jre:: $(JRE_BIN_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(call binary_file_verification,$${f}); \ - done - $(RM) $(JRE_BIN_LIST) - -###################################################### -# JDK Image -###################################################### -# Note: cpio ($(CPIO)) sometimes leaves directories without rx access. - -# REMIND: the $(RM) calls for patterns like c:, d: following $(CPIO) -# are because the 1.7.x versions of cygwin's cpio command drops these -# in the working directory if the output path begins with that pattern -# The one for the output jre subdirectory gets there because cpio sees its -# own dropping in the input jre subdirectory. Need to remove both of these. -# We can remove these RM's if someone figures out how to stop cpio from -# leaving these there. -# Note that its a real problem not because this directory can end up in the -# bundle (I think it won't since it not in bin or lib and those are the -# only places from which we copy everything), but because the presence -# of this file causes cygwin's find to bomb out, thus breaking the build -# in "install". -initial-image-jdk-setup: - $(RM) -r $(JDK_IMAGE_DIR) - $(MKDIR) -p $(JDK_IMAGE_DIR)/jre - ($(CD) $(JRE_IMAGE_DIR) && $(FIND) . -depth -print \ - | $(CPIO) -pdum $(JDK_IMAGE_DIR)/jre ) - ifeq ($(USING_CYGWIN),true) - $(RM) -rf $(JRE_IMAGE_DIR)/[A-Za-z]: - $(RM) -rf $(JDK_IMAGE_DIR)/jre/[A-Za-z]: - endif - $(RM) -rf $(JDK_IMAGE_DIR)/jre/man - $(CHMOD) a+rx `$(FIND) $(JDK_IMAGE_DIR) -type d` - -initial-image-jdk64-bindemos: - for dir in bin demo ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \ - ($(CD) $(JDK_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - -# Solaris 64 bit image is special -initial-image-jdk-sol64:: initial-image-jdk-setup \ - initial-image-jdk64-bindemos - -# DB files to add -ifdef OPENJDK - -initial-image-jdk-db: - -else - -# Create the list of db *.zip files to bundle with jdk -ABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db) -DB_ZIP_LIST := $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null) -# Can't have : in these file names as they are used in a rule -# below. -ifdef USING_CYGWIN - DB_ZIP_LIST:=$(shell $(CYGPATH) -a -u $(DB_ZIP_LIST)) -endif - -# Java DB image. Move the Java DB demo directory into the JDK's demo -# dir and in the process, rename it to db. Also remove index.html, -# since it presumes docs are co-located. Also remove register.html (no -# longer relevant). -initial-image-jdk-db: $(DB_ZIP_LIST) - $(MKDIR) -p $(JDK_IMAGE_DIR)/db - for d in $(DB_ZIP_LIST); do \ - ($(CD) $(JDK_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ - done - $(CP) $(ABS_DB_PATH)/README-JDK.html $(JDK_IMAGE_DIR)/db -ifndef NO_DEMOS - $(RM) -rf $(NEWDEMODIR)/db - $(MV) $(JDK_IMAGE_DIR)/db/demo $(NEWDEMODIR)/db - $(CP) $(ABS_DB_PATH)/README-JDK-DEMOS.html $(NEWDEMODIR)/db/ -else - $(RM) -rf $(JDK_IMAGE_DIR)/db/demo -endif - $(RM) $(JDK_IMAGE_DIR)/db/index.html $(JDK_IMAGE_DIR)/db/register.html -endif - -# The launcher source files we need for src.zip -FILES_launcher = $(wildcard $(SHARE_SRC)/bin/*) \ - $(wildcard $(PLATFORM_SRC)/bin/java_md*) - -# Standard jdk image -initial-image-jdk:: initial-image-jdk-setup \ - initial-image-jdk-db \ - $(JDK_DOCFILES) \ - $(JDK_DEMOS_AND_SAMPLES_DOCFILES) - $(MKDIR) $(JDK_IMAGE_DIR)/lib - @# - @# Copy in the jars in lib that only belong in the JDK - @# - for l in $(NOTJRELIBS); do \ - if [ -r $(LIBDIR)/$$l ]; then \ - $(CP) $(LIBDIR)/$$l $(JDK_IMAGE_DIR)/lib; \ - fi; \ - done - ifeq ($(PLATFORM), windows) - @# - @# lib/ - @# - $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_IMAGE_DIR)/lib - $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_IMAGE_DIR)/lib - @# - @# bin/ - @# - @# copy all EXE files and only certain DLL files from BINDIR - $(MKDIR) -p $(JDK_IMAGE_DIR)/bin - $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_IMAGE_DIR)/bin - $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_IMAGE_DIR)/bin - ifeq ($(COMPILER_VERSION), VS2010) - $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_IMAGE_DIR)/bin - endif - else # PLATFORM - @# - @# bin/ - @# - ($(CD) $(BINDIR)/.. && $(TAR) cf - \ - `$(FIND) bin \( -type f -o -type l \) -print `) | \ - ($(CD) $(JDK_IMAGE_DIR) && $(TAR) xf -) - endif # PLATFORM - @# - @# lib/tools.jar - @# - $(MKDIR) -p $(IMAGES_OUTPUTDIR)/lib - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(IMAGES_OUTPUTDIR)/lib/tools.jar \ - $(TOOLS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - $(CP) $(IMAGES_OUTPUTDIR)/lib/tools.jar $(JDK_IMAGE_DIR)/lib/tools.jar - @# - @# lib/ct.sym - @# - $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym - $(BOOT_JAVA_CMD) \ - -Xbootclasspath/p:$(JAVAC_JAR) \ - -Xbootclasspath/a:$(JDK_OUTPUTDIR)/classes \ - -jar $(JAVAC_JAR) $(JAVACFLAGS) \ - -XDprocess.packages -proc:only \ - -processor com.sun.tools.javac.sym.CreateSymbols \ - -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \ - -Acom.sun.tools.javac.sym.Dest=$(IMAGES_OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ - $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) $(EXPORTED_PRIVATE_PKGS) - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(IMAGES_OUTPUTDIR)/lib/ct.sym \ - -C $(IMAGES_OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS) - $(java-vm-cleanup) - $(CP) $(IMAGES_OUTPUTDIR)/lib/ct.sym $(JDK_IMAGE_DIR)/lib/ct.sym - @# - @# CORBA supported orb.idl and ir.idl should be copied to lib - @# - $(CP) $(LIBDIR)/orb.idl $(JDK_IMAGE_DIR)/lib/orb.idl - $(CP) $(LIBDIR)/ir.idl $(JDK_IMAGE_DIR)/lib/ir.idl - ifeq ($(PLATFORM), linux) - @# - @# on Linux copy jexec from jre/lib to /lib - @# - $(CP) $(LIBDIR)/jexec $(JDK_IMAGE_DIR)/lib/jexec - endif # PLATFORM - @# - @# src.zip - @# - $(MKDIR) -p $(JDK_IMAGE_DIR)/src - @# - @# The '*-*' pattern in the find command excludes files named with dashes, - @# such as the java.nio templates for generated classes - @# - @# The Linux 'tar' command cannot handle the huge command line argument - @# generated by the more efficient solaris/windows method of copying files. - @# So for Linux, make use of the -T option (like Solaris' -I option) of - @# obtaining the list of files from a file. MKS tar has no such option. - - ifneq (,$(findstring $(PLATFORM), linux macosx)) - for d in $(SOURCE_DIRS); do \ - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list; \ - ($(CD) $$d && \ - for sd in $(SOURCES) ; do \ - if [ -d $$sd ] ; then \ - $(FIND) $$sd $(SOURCE_FILES_filter) \ - -name '*.java' -print \ - >> $(IMAGES_OUTPUTDIR)/tmp/src-files.list ; \ - fi; \ - done ; \ - ) ; \ - if [ -f $(IMAGES_OUTPUTDIR)/tmp/src-files.list ] ; then \ - ($(CD) $$d && $(TAR) cf - -T $(IMAGES_OUTPUTDIR)/tmp/src-files.list ) \ - | ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \ - fi; \ - done - else - for d in $(SOURCE_DIRS); do \ - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list; \ - ($(CD) $$d && \ - for sd in $(SOURCES) ; do \ - if [ -d $$sd ] ; then \ - $(FIND) $$sd $(SOURCE_FILES_filter) \ - -name '*.java' -print \ - >> $(IMAGES_OUTPUTDIR)/tmp/src-files.list ; \ - fi; \ - done ; \ - ) ; \ - if [ -f $(IMAGES_OUTPUTDIR)/tmp/src-files.list ] ; then \ - ($(CD) $$d && $(TAR) cf - `$(CAT) $(IMAGES_OUTPUTDIR)/tmp/src-files.list`) \ - | ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \ - fi; \ - done - endif - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list - $(CHMOD) -R +w $(JDK_IMAGE_DIR)/src - $(MKDIR) -p $(JDK_IMAGE_DIR)/src/launcher - $(CP) $(FILES_launcher) $(JDK_IMAGE_DIR)/src/launcher - $(CD) $(JDK_IMAGE_DIR)/src && $(ZIPEXE) -qr ../src.zip * - $(RM) -r $(JDK_IMAGE_DIR)/src - @# - @# demo, include - @# -ifndef NO_DEMOS - mkdir -p $(JDK_IMAGE_DIR)/demo - $(CP) -r -f $(NEWDEMODIR)/* $(JDK_IMAGE_DIR)/demo - $(FIND) $(JDK_IMAGE_DIR)/demo -name "_the.*" $(FIND_DELETE) -endif -ifndef NO_SAMPLES - $(CP) -r -f $(SAMPLEDIR) $(JDK_IMAGE_DIR) -endif - $(CP) -r $(INCLUDEDIR) $(JDK_IMAGE_DIR) - @# - @# Swing BeanInfo generation - @# - $(CD) javax/swing/beaninfo && $(MAKE) TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp ABS_TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp swing-1.2-beans -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JDK_IMAGE_DIR),$(JDK_MAN_PAGES)) -endif # !windows - -# Trim out files we don't want to ship -trim-image-jdk:: - @# Clean out all _the. files. - $(FIND) $(JDK_IMAGE_DIR) -name "_the.*" $(FIND_DELETE) - @# Remove tools that should not be part of SDK. - for t in $(NOTJDKTOOLS); do \ - $(RM) $(JDK_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX); \ - done - -# Get list of binary (COFF or Elf) files in the jdk -JDK_BIN_LIST=$(TEMPDIR)/jdk-bin-files.list -$(JDK_BIN_LIST): -ifeq ($(PLATFORM), windows) - $(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" > $@ - $(FIND) $(JDK_IMAGE_DIR)/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" >> $@ -else - $(RM) $@ - $(FIND) $(JDK_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ - $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on files we are shipping) -process-image-jdk:: $(JDK_BIN_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(call binary_file_verification,$${f}); \ - done - $(RM) $(JDK_BIN_LIST) - -################################################################### -# What did we build -################################################################### - -# The jdk text info file that lives at the root of the install image. - -JDK_INFO_FILE = $(JDK_IMAGE_DIR)/release -JRE_INFO_FILE = $(JRE_IMAGE_DIR)/release - -# Common way to emit a line into the release or info file -define info-file-item # name value -$(PRINTF) '%s="%s"\n' $1 $2 >> $@ -endef - -# Values to emit -MINIMUM_OS_NAME := $(REQUIRED_OS_NAME) -MINIMUM_OS_VERSION := $(REQUIRED_OS_VERSION) -MINIMUM_OS_ARCH := $(ARCH) -ALL_SOURCE_TIPS = $(shell \ - if [ -f $(SOURCE_TIPS) ] ; then \ - $(CAT) $(SOURCE_TIPS) ; \ - fi) - -$(JDK_INFO_FILE): FRC - $(prep-target) - $(call info-file-item, "JAVA_VERSION", "$(THIS_JDK_VERSION)") - $(call info-file-item, "OS_NAME", "$(MINIMUM_OS_NAME)") - $(call info-file-item, "OS_VERSION", "$(MINIMUM_OS_VERSION)") - $(call info-file-item, "OS_ARCH", "$(MINIMUM_OS_ARCH)") - $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") - -# Create release file to identify this image -identify-image-jdk:: $(JDK_INFO_FILE) - -$(JRE_INFO_FILE): FRC - $(prep-target) - $(call info-file-item, "JAVA_VERSION", "$(THIS_JDK_VERSION)") - $(call info-file-item, "OS_NAME", "$(MINIMUM_OS_NAME)") - $(call info-file-item, "OS_VERSION", "$(MINIMUM_OS_VERSION)") - $(call info-file-item, "OS_ARCH", "$(MINIMUM_OS_ARCH)") - $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") - -# Create release file to identify this image -identify-image-jre:: $(JRE_INFO_FILE) - -images images-clobber:: - $(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." - $(java-vm-cleanup) - -.PHONY: images image-jre image-jdk \ - initial-image-jre initial-image-jdk \ - initial-image-jre-sol64 initial-image-jdk-sol64 \ - initial-image-jdk-setup \ - initial-image-jdk-db \ - initial-image-jdk64-bindemos \ - initial-image-jre-setup \ - trim-image-jre trim-image-jdk \ - process-image-jre process-image-jdk \ - identify-image-jre identify-image-jdk \ - images-clobber - -# Force rule -FRC: - diff --git a/jdk/makefiles/common/Rules.gmk b/jdk/makefiles/common/Rules.gmk deleted file mode 100644 index 9e9163a887b..00000000000 --- a/jdk/makefiles/common/Rules.gmk +++ /dev/null @@ -1,357 +0,0 @@ -# -# Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# -# Rules shared by all Java makefiles. -# -# Used to apply to source file $<, checks code conventions, issues warnings. -define check-conventions - if [ "$(CONVENTION_WATCH)" = "true" ] ; then \ - if [ "`$(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]'`" != "" ] ; then \ - $(ECHO) "WARNING: File contains tabs, ^M, or ^L characters: $<"; \ - if [ "$(CONVENTION_DETAILS)" = "true" ] ; then \ - $(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]' ; \ - fi; \ - fi; \ - fi -endef - -# Make sure the default rule is all -rules_default_rule: all - -# -# Directory set up. (Needed by deploy workspace) -# -$(CLASSDESTDIR) $(CLASSHDRDIR) $(OBJDIR) $(OUTPUTDIR) $(BINDIR) $(LIBDIR) $(LIBDIR)/$(LIBARCH) $(TEMPDIR) $(EXTDIR): - $(MKDIR) -p $@ - -# -# All source tree areas for java/properties files (a few may be closed) -# -ifeq ($(PLATFORM), macosx) - ifdef OPENJDK - ALL_CLASSES_SRC = $(call JavaSrcDirList,,classes) - else - ALL_CLASSES_SRC = \ - $(CLOSED_SHARE_SRC)/classes $(CLOSED_PLATFORM_SRC)/classes \ - $(call JavaSrcDirList,,classes) - endif -else - ifdef OPENJDK - ALL_CLASSES_SRC = $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes - else - ALL_CLASSES_SRC = \ - $(CLOSED_SHARE_SRC)/classes $(CLOSED_PLATFORM_SRC)/classes \ - $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes - endif -endif - -# -# If AUTO_FILES_PROPERTIES_DIRS used, automatically find properties files -# -ifdef AUTO_FILES_PROPERTIES_DIRS - AUTO_FILES_PROPERTIES_FILTERS1 = $(SCM_DIRs) ',*' - AUTO_FILES_PROPERTIES_FILTERS1 += $(AUTO_PROPERTIES_PRUNE) - FILES_properties_find_filters1 = $(AUTO_FILES_PROPERTIES_FILTERS1:%=-name % -prune -o) - FILES_properties_auto1 := \ - $(shell \ - for dir in $(ALL_CLASSES_SRC) ; do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_PROPERTIES_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_properties_find_filters1) \ - -name '*.properties' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) -else - FILES_properties_auto1 = -endif # AUTO_FILES_PROPERTIES_DIRS - -# Add any automatically found properties files to the properties file list -FILES_properties += $(FILES_properties_auto1) - -# -# Get Resources help -# -include $(JDK_TOPDIR)/makefiles/common/internal/Resources.gmk - -# -# Compiling .java files. -# - -# -# Automatically add to FILES_java if AUTO_FILES_JAVA_DIRS is defined -# -# There are two basic types of sources, normal source files and the -# generated ones. The Normal sources will be located in: -# $(ALL_CLASSES_SRC) -# The generated sources, which might show up late to dinner, are at: -# $(GENSRCDIR) -# and since they could be generated late, we need to be careful that -# we look for these sources late and not use the ':=' assignment which -# might miss their generation. - -ifdef AUTO_FILES_JAVA_DIRS - # Filter out these files or directories - AUTO_FILES_JAVA_SOURCE_FILTERS1 = $(SCM_DIRs) ',*' - AUTO_FILES_JAVA_SOURCE_FILTERS2 = - AUTO_FILES_JAVA_SOURCE_FILTERS1 += $(AUTO_JAVA_PRUNE) - AUTO_FILES_JAVA_SOURCE_FILTERS2 += $(AUTO_JAVA_PRUNE) - - # First list is the normal sources that should always be there, - # by using the ':=', which means we do this processing once. - FILES_java_find_filters1 = $(AUTO_FILES_JAVA_SOURCE_FILTERS1:%=-name % -prune -o) - FILES_java_auto1 := \ - $(shell \ - for dir in $(ALL_CLASSES_SRC) ; do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_java_find_filters1) \ - -name '*.java' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) - # Second list is the generated sources that should be rare, but will likely - # show up late and we need to look for them at the last minute, so we - # cannot use the ':=' assigment here. But if this gets expanded multiple - # times, the if tests should make them relatively cheap. - FILES_java_find_filters2 = $(AUTO_FILES_JAVA_SOURCE_FILTERS2:%=-name % -prune -o) - FILES_java_auto2 = \ - $(shell \ - for dir in $(GENSRCDIR); do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_java_find_filters2) \ - -name '*.java' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) -else - FILES_java_auto1 = - FILES_java_auto2 = -endif - -# Add all found java sources to FILES_java macro (if AUTO_FILES_JAVA_DIRS used) -FILES_java += $(FILES_java_auto1) $(FILES_java_auto2) - -# File that will hold java source names that need compiling -JAVA_SOURCE_LIST=$(TEMPDIR)/.classes.list - -# Add a java source to the list -define add-java-file -$(ECHO) "$?" >> $(JAVA_SOURCE_LIST) -$(check-conventions) -endef - -ifdef DEMOS -$(CLASSDESTDIR)/%.class: $(SOURCEPATH)/%.java - $(add-java-file) -#Redirect zh_HK java files to tmp directory which created from zh_TW -#$(CLASSDESTDIR)/%_zh_HK.class: $(JDK_L10N_TMP_OUTPUTDIR)/%_zh_HK.java -# $(add-java-file) -else - -# -# Rules for closed files -# -# If filenames are duplicated between open/closed workspaces, prefer -# the closed files. -# -# Rule ordering in this Makefile is important: some targets depend -# on closed files replacing open ones, and thus the closed file rules -# must be found before the open ones. -# -# Don't reorder without consulting teams that depend on this behavior. -# -ifndef OPENJDK -$(CLASSDESTDIR)/%.class: $(CLOSED_PLATFORM_SRC)/classes/%.java - $(add-java-file) -$(CLASSDESTDIR)/%.class: $(CLOSED_SHARE_SRC)/classes/%.java - $(add-java-file) -endif - -$(CLASSDESTDIR)/%.class: $(GENSRCDIR)/%.java - $(add-java-file) - -ifeq ($(PLATFORM), macosx) -$(CLASSDESTDIR)/%.class: $(JDK_TOPDIR)/src/macosx/classes/%.java - $(add-java-file) -endif -$(CLASSDESTDIR)/%.class: $(PLATFORM_SRC)/classes/%.java - $(add-java-file) - -$(CLASSDESTDIR)/%.class: $(SHARE_SRC)/classes/%.java - $(add-java-file) - -#Redirect zh_HK java files to tmp directory which created from zh_TW -$(CLASSDESTDIR)/%_zh_HK.class: $(JDK_L10N_TMP_OUTPUTDIR)/%_zh_HK.java - $(add-java-file) -endif - -# List of class files needed -FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class) - -# Got to include exported files. -FILES_class += $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) - -# Construct list of java sources we need to compile -source_list_prime: - mkdir -p $(TEMPDIR) -# Note that we slip resources in so that compiled properties files get created: -$(JAVA_SOURCE_LIST) : source_list_prime resources $(FILES_class) - touch $@ - -.delete.classlist: - rm -f $(JAVA_SOURCE_LIST) - -# Make sure all newer sources are compiled (in a batch) -classes : $(CLASSES_INIT) .delete.classlist .compile.classlist - -.compile.classlist : $(JAVA_SOURCE_LIST) - $(MKDIR) -p $(CLASSDESTDIR) - $(RM) $<.filtered - $(CAT) $< | $(NAWK) 'length>0' | $(SORT) -u > $<.filtered - numfiles=`$(WC) -l < $<.filtered` ; \ - if [ $$numfiles -ge 1 ] ; then \ - $(ECHO) "# Java sources to be compiled: (listed in file $<)"; \ - $(CAT) $<.filtered; \ - $(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \ - $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \ - $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered && \ - $(ECHO) "# javac finished"; \ - fi - $(java-vm-cleanup) - -clobber clean:: - rm -f $(JAVA_SOURCE_LIST) - -ifndef DONT_CLOBBER_CLASSES - ifndef PACKAGE - DONT_CLOBBER_CLASSES = true - else - DONT_CLOBBER_CLASSES = false - endif -endif - -packages.clean: -ifeq ($(DONT_CLOBBER_CLASSES),false) - ifdef AUTO_FILES_JAVA_DIRS - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - echo "rm -f -r $(CLASSDESTDIR)/$$sdir"; \ - rm -f -r $(CLASSDESTDIR)/$$sdir; \ - done - else - rm -f -r $(CLASSDESTDIR)/$(PKGDIR) - endif -endif - -ifdef DEMOS -classes.clean: - rm -f -r $(DEMODST) $(CLASSDESTDIR) -else -classes.clean: packages.clean - rm -f $(JAVA_SOURCE_LIST) -endif - -# -# C and C++ make dependencies -# -include $(JDK_TOPDIR)/makefiles/common/internal/NativeCompileRules.gmk - -# -# Running Javah to generate stuff into CClassHeaders. -# - -ifdef FILES_export - -CLASSES.export = $(subst /,.,$(FILES_export:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export2:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export3:%.java=%)) -CLASSES_export = $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export2:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export3:%.java=$(CLASSDESTDIR)/%.class) - -# Fix when deploy workspace makefiles don't depend on this name -#CLASSHDR_DOTFILE=$(CLASSHDRDIR)/.classheaders - -CLASSHDR_DOTFILE=$(OBJDIR)/.class.headers.$(ARCH) - -classheaders: classes $(CLASSHDR_DOTFILE) - -$(CLASSHDR_DOTFILE): $(CLASSES_export) - $(prep-target) - echo "# Running javah:" - echo $(UNCYGDRIVE) $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \ - $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner)) - $(UNCYGDRIVE) $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \ - $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner)) - $(java-vm-cleanup) - touch $@ - -classheaders.clean: - rm -f $(CLASSHDR_DOTFILE) - rm -f -r $(CLASSHDRDIR) - -else # FILES_export - -classheaders: classes - -classheaders.clean: - -endif # FILES_export - -clean clobber:: classheaders.clean classes.clean .delete.classlist - -# -# Default dependencies -# - -all: build - -build: classheaders - -default: all - -.PHONY: all build clean clobber \ - .delete.classlist classes .compile.classlist classes.clean \ - classheaders classheaders.clean \ - batch_compile - diff --git a/jdk/makefiles/common/Subdirs.gmk b/jdk/makefiles/common/Subdirs.gmk deleted file mode 100644 index b8c5405d160..00000000000 --- a/jdk/makefiles/common/Subdirs.gmk +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic makefile for building subdirectories. -# -# SUBDIRS variables to specify the subdirectories to build recursively. -# Makefile has to include Subdirs.gmk AFTER all SUBDIRS variables are -# defined. -# -# This file does not contain any rule. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. - -# -# SUBDIRS subdirs for the base module always get built -# SUBDIRS_ subdirs for the named group -# -# By default, subdirs specified in the SUBDIRS and all SUBDIRS_* -# variables will be built. -# -# Variables of the currently supported groups are: -# SUBDIRS_desktop -# SUBDIRS_management -# SUBDIRS_enterprise -# SUBDIRS_misc -# SUBDIRS_tools -# -# Change to the above list also need to update -# make/common/shared/Sanity.gmk. NOTE: this list is subject -# to change. -# -# Eventually we want to restructure the make directory -# according to these grouping (e.g. make/desktop/...) and -# the SUBDIRS_ variables would not be needed. -# - -# Iterate the subdirectories specified in $1. -# - cd into each subdir and make them - -# Given a SUBDIRS* list (first argument), cd into them and make them -# SUBDIRS_MAKEFLAGS Make settings for a subdir make -# SUBDIRS_MAKEFLAGS-$@ Make settings specific to this target -# -define subdirs-group-loop -$(ECHO) "Begin Processing SUBDIRS: $($1)" -for i in DUMMY $($1) ; do \ - if [ "$$i" != "DUMMY" ] ; then \ - $(MAKE) -C $$i $@ $(SUBDIRS_MAKEFLAGS) $(SUBDIRS_MAKEFLAGS-$@) \ - FULL_VERSION=$(FULL_VERSION) RELEASE=$(RELEASE) || exit 1; \ - fi ; \ -done -$(ECHO) "Done Processing SUBDIRS: $($1)" -endef - -# Given a OTHERSUBDIRS list, cd into them and make them (extra loop define) -# OTHERSUBDIRS_MAKEFLAGS Make settings for a subdir make -define OTHERSUBDIRS-loop -$(ECHO) "Begin Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" -for i in DUMMY $(OTHERSUBDIRS) ; do \ - if [ "$$i" != "DUMMY" ] ; then \ - $(MAKE) -C $$i $@ $(OTHERSUBDIRS_MAKEFLAGS) \ - FULL_VERSION=$(FULL_VERSION) RELEASE=$(RELEASE) || exit 1; \ - fi ; \ -done -$(ECHO) "Done Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" -endef - -# -# Iterate the list specified in SUBDIRS_ only if -# SUBDIRS_ is set. -# -ifdef SUBDIRS_desktop - define subdirs-desktop-loop - $(call subdirs-group-loop,SUBDIRS_desktop) - endef -else - define subdirs-desktop-loop - endef -endif # SUBDIRS_desktop - -ifdef SUBDIRS_enterprise - define subdirs-enterprise-loop - $(call subdirs-group-loop,SUBDIRS_enterprise) - endef -else -define subdirs-enterprise-loop -endef -endif # SUBDIRS_enterprise - -ifdef SUBDIRS_management - define subdirs-management-loop - $(call subdirs-group-loop,SUBDIRS_management) - endef -else - define subdirs-management-loop - endef -endif # SUBDIRS_management - -ifdef SUBDIRS_misc - define subdirs-misc-loop - $(call subdirs-group-loop,SUBDIRS_misc) - endef -else - define subdirs-misc-loop - endef -endif # SUBDIRS_misc - -ifdef SUBDIRS_tools - define subdirs-tools-loop - $(call subdirs-group-loop,SUBDIRS_tools) - endef -else - define subdirs-tools-loop - endef -endif # SUBDIRS_tools - -# -# If BUILD_MODULES is not set or it's set to "all", -# iterate all groups. -SUBDIRS_all = $(SUBDIRS) $(SUBDIRS_desktop) $(SUBDIRS_enterprise) \ - $(SUBDIRS_management) $(SUBDIRS_misc) $(SUBDIRS_tools) - -define SUBDIRS-loop - $(call subdirs-group-loop,SUBDIRS_all) -endef diff --git a/jdk/makefiles/common/internal/Defs-corba.gmk b/jdk/makefiles/common/internal/Defs-corba.gmk deleted file mode 100644 index 20468696196..00000000000 --- a/jdk/makefiles/common/internal/Defs-corba.gmk +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - org/omg/CORBA \ - org/omg/CORBA_2_3 \ - org/omg/CosNaming \ - org/omg/Dynamic \ - org/omg/DynamicAny \ - org/omg/IOP \ - org/omg/Messaging \ - org/omg/PortableInterceptor \ - org/omg/PortableServer \ - org/omg/SendingContext \ - org/omg/stub/java/rmi \ - javax/rmi \ - javax/rmi/CORBA \ - javax/activity \ - javax/transaction \ - com/sun/corba/se/GiopIDL \ - com/sun/corba/se/PortableActivationIDL \ - com/sun/corba/se/impl \ - com/sun/corba/se/internal \ - com/sun/corba/se/org/omg/CORBA \ - com/sun/corba/se/pept \ - com/sun/corba/se/spi \ - com/sun/org/omg/CORBA \ - com/sun/org/omg/SendingContext \ - com/sun/tools/corba/se/logutil \ - sun/corba \ - sun/rmi/rmic/iiop - -IMPORT_TOOLS_PACKAGES += \ - com/sun/tools/corba/se/idl \ - sun/rmi/rmic/iiop - -IMPORT_CORBA_BINARIES += \ - lib/orb.idl \ - lib/ir.idl - diff --git a/jdk/makefiles/common/internal/Defs-jaxp.gmk b/jdk/makefiles/common/internal/Defs-jaxp.gmk deleted file mode 100644 index eb5813c970e..00000000000 --- a/jdk/makefiles/common/internal/Defs-jaxp.gmk +++ /dev/null @@ -1,53 +0,0 @@ -# -# Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - org/w3c/dom \ - org/xml/sax \ - javax/xml/XMLConstants.class \ - javax/xml/datatype \ - javax/xml/namespace \ - javax/xml/parsers \ - javax/xml/stream \ - javax/xml/transform \ - javax/xml/validation \ - javax/xml/xpath \ - com/sun/java_cup \ - com/sun/org/apache/bcel \ - com/sun/org/apache/regexp \ - com/sun/org/apache/xalan \ - com/sun/org/apache/xerces \ - com/sun/org/apache/xml/internal/dtm \ - com/sun/org/apache/xml/internal/res \ - com/sun/org/apache/xml/internal/resolver \ - com/sun/org/apache/xml/internal/serialize \ - com/sun/org/apache/xml/internal/serializer \ - com/sun/org/apache/xml/internal/utils \ - com/sun/org/apache/xpath \ - com/sun/xml/internal/stream - -IMPORT_TOOLS_PACKAGES += - diff --git a/jdk/makefiles/common/internal/Defs-jaxws.gmk b/jdk/makefiles/common/internal/Defs-jaxws.gmk deleted file mode 100644 index f0ba12b292a..00000000000 --- a/jdk/makefiles/common/internal/Defs-jaxws.gmk +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - META-INF/mailcap.default \ - META-INF/mimetypes.default \ - javax/activation \ - com/sun/activation \ - javax/xml/bind \ - javax/xml/soap \ - javax/xml/ws \ - javax/jws \ - javax/annotation \ - com/sun/xml/internal/bind \ - com/sun/xml/internal/fastinfoset \ - com/sun/xml/internal/messaging \ - com/sun/xml/internal/org/jvnet \ - com/sun/xml/internal/txw2 \ - com/sun/xml/internal/ws \ - com/sun/xml/internal/stream/buffer - -NOT_USED_PACKAGES += \ - com/sun/tools/internal/txw2 - -IMPORT_TOOLS_PACKAGES += \ - com/sun/codemodel \ - com/sun/istack/internal/tools \ - com/sun/xml/internal/rngom \ - com/sun/xml/internal/xsom \ - com/sun/xml/internal/dtdparser \ - com/sun/tools/internal/xjc \ - com/sun/tools/internal/ws \ - com/sun/tools/internal/jxc \ - org/relaxng \ - META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ - META-INF/services/com.sun.tools.internal.xjc.Plugin \ - com/sun/tools/internal/jxc/ap \ - com/sun/tools/internal/ws/wscompile/plugin/at_generated - - diff --git a/jdk/makefiles/common/internal/Defs-langtools.gmk b/jdk/makefiles/common/internal/Defs-langtools.gmk deleted file mode 100644 index eebbfd0cbcb..00000000000 --- a/jdk/makefiles/common/internal/Defs-langtools.gmk +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar - -IMPORT_RT_PACKAGES += \ - javax/annotation/processing \ - javax/lang/model \ - javax/tools - -IMPORT_TOOLS_PACKAGES += \ - com/sun/javadoc \ - com/sun/source \ - com/sun/tools/classfile \ - com/sun/tools/doclets \ - com/sun/tools/javac \ - com/sun/tools/javadoc \ - com/sun/tools/javah \ - com/sun/tools/javap - diff --git a/jdk/makefiles/common/internal/ImportComponents.gmk b/jdk/makefiles/common/internal/ImportComponents.gmk deleted file mode 100644 index 995de5b6e9a..00000000000 --- a/jdk/makefiles/common/internal/ImportComponents.gmk +++ /dev/null @@ -1,173 +0,0 @@ -# -# Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - --include $(SPEC) - -# JDK jars where component classes come from as second choice -JDK_RT_JAR = $(JDK_IMPORT_PATH)/jre/lib/rt.jar -JDK_TOOLS_JAR = $(JDK_IMPORT_PATH)/lib/tools.jar -JDK_RESOURCES_JAR = $(JDK_IMPORT_PATH)/jre/lib/resources.jar - -# The specific packages that come from or go to rt.jar and tools.jar -# IF the component deliverables are not available. -IMPORT_TOOLS_PACKAGES = -IMPORT_RT_PACKAGES = - -# The following will add to IMPORT_TOOLS_PACKAGES and/or IMPORT_RT_PACKAGES -ifndef LANGTOOLS_DIST - include $(BUILDDIR)/common/internal/Defs-langtools.gmk -endif -ifndef CORBA_DIST - include $(BUILDDIR)/common/internal/Defs-corba.gmk -endif -ifndef JAXP_DIST - include $(BUILDDIR)/common/internal/Defs-jaxp.gmk -endif -ifndef JAXWS_DIST - include $(BUILDDIR)/common/internal/Defs-jaxws.gmk -endif - -# Clean up these lists so empty lists are empty -IMPORT_TOOLS_PACKAGES := $(strip $(IMPORT_TOOLS_PACKAGES)) -IMPORT_RT_PACKAGES := $(strip $(IMPORT_RT_PACKAGES)) - -# Relative paths to import component deliverables -CLASSES_JAR_FILE=lib/classes.jar -SRC_ZIP_FILE=lib/src.zip -BIN_ZIP_FILE=lib/bin.zip -DOC_ZIP_FILE=lib/doc.zip - -################################################################# -# Macros: - -# Importing component class files -define import-one-classes -if [ "$($1)" != "" ] ; then \ - $(ECHO) "Importing classes from component $1"; \ - $(call Unjar,$2,$($1)/$(CLASSES_JAR_FILE),); \ -fi -endef - -# Importing optional component doc files (for man pages?) -define import-one-docs -if [ "$($1)" != "" -a -f $($1)/$(DOC_ZIP_FILE) ] ; then \ - $(ECHO) "Importing docs from component $1"; \ - $(call Unzipper,$2,$($1)/$(DOC_ZIP_FILE)); \ -fi -endef - -# Importing optional component src files (for jdk src.zip and javadoc) -define import-one-sources -if [ "$($1)" != "" ] ; then \ - $(ECHO) "Importing sources from component $1"; \ - $(call Unzipper,$2,$($1)/$(SRC_ZIP_FILE)); \ -fi -endef - -# Importing optional component bin files (for install image) -define import-one-binaries -if [ "$($1)" != "" -a -f $($1)/$(BIN_ZIP_FILE) ] ; then \ - $(ECHO) "Importing binaries from component $1"; \ - $(call Unzipper,$2,$($1)/$(BIN_ZIP_FILE)); \ -fi -endef - -# Unzip zip file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define Unzipper -( \ - $(MKDIR) -p $1; \ - ( $(CD) $1 && $(UNZIP) -o $2 > /dev/null ) \ -) -endef - -# Unjar directories $3 from jar file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define Unjar -( \ - $(MKDIR) -p $1; \ - ( $(CD) $1 && $(BOOT_JAR_CMD) xf $2 $3 $(BOOT_JAR_JFLAGS) ) && \ - ( $(CD) $1 && $(java-vm-cleanup) ) \ -) -endef - -# Import all component sources into directory $1 -define import-component-sources -$(call import-one-sources,LANGTOOLS_DIST,$1) -$(call import-one-sources,CORBA_DIST,$1) -$(call import-one-sources,JAXP_DIST,$1) -$(call import-one-sources,JAXWS_DIST,$1) -endef - -# Import all component docs into directory $1 (optional) -define import-component-docs -$(call import-one-docs,LANGTOOLS_DIST,$1) -$(call import-one-docs,CORBA_DIST,$1) -$(call import-one-docs,JAXP_DIST,$1) -$(call import-one-docs,JAXWS_DIST,$1) -endef - -# Import all component bins into directory $1 (optional) -define import-component-binaries -$(call import-one-binaries,LANGTOOLS_DIST,$1) -$(call import-one-binaries,CORBA_DIST,$1) -$(call import-one-binaries,JAXP_DIST,$1) -$(call import-one-binaries,JAXWS_DIST,$1) -if [ "$(CORBA_DIST)" = "" ] ; then \ - $(MKDIR) -p $(OUTPUTDIR)/lib ; \ - ( $(CD) $(JDK_IMPORT_PATH) && $(CP) $(IMPORT_CORBA_BINARIES) $(ABS_OUTPUTDIR)/lib ) ; \ -fi -endef - -# Import all component classes into directory $1 -# Here we special case classes coming from JDK when component not supplied -define import-component-classes -$(ECHO) "Import classes from $(JDK_IMPORT_PATH)" -if [ "$(IMPORT_TOOLS_PACKAGES)" != "" ] ; then \ - $(call Unjar,$1,$(JDK_RESOURCES_JAR),$(IMPORT_TOOLS_PACKAGES)); \ - $(call Unjar,$1,$(JDK_TOOLS_JAR),$(IMPORT_TOOLS_PACKAGES)); \ -fi -if [ "$(IMPORT_RT_PACKAGES)" != "" ] ; then \ - $(call Unjar,$1,$(JDK_RESOURCES_JAR),$(IMPORT_RT_PACKAGES)); \ - $(call Unjar,$1,$(JDK_RT_JAR),$(IMPORT_RT_PACKAGES)); \ -fi -$(call import-one-classes,LANGTOOLS_DIST,$1) -$(call import-one-classes,CORBA_DIST,$1) -$(call import-one-classes,JAXP_DIST,$1) -$(call import-one-classes,JAXWS_DIST,$1) -endef - -# Clean up import files -define import-component-sources-clean -$(RM) -r $1 -endef -define import-component-docs-clean -$(RM) -r $1 -endef -define import-component-classes-clean -$(RM) -r $(IMPORT_TOOLS_PACKAGES:%=$1/%) -$(RM) -r $(IMPORT_RT_PACKAGES:%=$1/%) -endef - diff --git a/jdk/makefiles/common/internal/NativeCompileRules.gmk b/jdk/makefiles/common/internal/NativeCompileRules.gmk deleted file mode 100644 index 68d5eca4d69..00000000000 --- a/jdk/makefiles/common/internal/NativeCompileRules.gmk +++ /dev/null @@ -1,238 +0,0 @@ -# -# Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Native C/C++ Compile Rules -# - --include $(SPEC) --include $(VARS) - -COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c -COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c - -# -# INCREMENTAL_BUILD: Record the #include file dependencies. -# -# NOTE: We build make include files with the suffix -# $(DEPEND_SUFFIX) on every compilation. These are initially -# created as temp files just in case a ^C kills it in the middle. -# Compiler is smart enough to handle ^C and not create the .o file, or -# is supposed to be that smart, but the .$(DEPEND_SUFFIX) file -# creation here isn't. -# These .$(DEPEND_SUFFIX) files are included by Library.gmk and -# Program.gmk, when they exist (Search for 'make dependencies'). -# - -ifeq ($(INCREMENTAL_BUILD),true) - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CC) $(CC_DEPEND) $(CPPFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CXX) $(CC_DEPEND) $(CPPFLAGS) $(CXXFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -endif # INCREMENTAL_BUILD - -# -# C, C++, asm files. -# -# Normal or parallel compile rule is the same, but batch compiles require -# we save up the sources files that use the same compile line so that we -# can do one compile line. -# - -ifneq ($(COMPILE_APPROACH), batch) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - $(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -else - - # - # Batch compiling might be faster if the compiler was smart about recognizing - # optimization opportunities available when all files are being compiled - # the same way. Unfortunately this is rare. - # Automatic pre-compiled headers (pch) might be a possibility so we - # add any auto pch options here. - # So we save all the source files that have the same compile line as the - # first file. A normal compile pass is made after the batch compile - # to catch anything missed. - # If the compilers had a -o option that allowed us to direct where to - # write the object files to, then we would not need to save the object - # file list or move them from the make directory to the build directory. - # - - # Source names - COMPILE_LIST.c = $(OBJDIR)/.source_names_c - COMPILE_LIST.cpp = $(OBJDIR)/.source_names_cpp - - # Object file list - COMPILE_OBJ_LIST.c = $(OBJDIR)/.obj_names_c - COMPILE_OBJ_LIST.cpp = $(OBJDIR)/.obj_names_cpp - - # The compile line - COMPILE_BATCH.c = $(OBJDIR)/.compile_c - COMPILE_BATCH.cpp = $(OBJDIR)/.compile_cpp - - # The compile line for the current target - THIS_COMPILE_BATCH.c = $(COMPILE_BATCH.c)-$(@F) - THIS_COMPILE_BATCH.cpp = $(COMPILE_BATCH.cpp)-$(@F) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.c) - @if [ ! -s $(COMPILE_BATCH.c) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c) ; \ - $(ECHO) $< > $(COMPILE_LIST.c); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.c); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c)`" \ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.c); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.c); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.c) - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "$(COMPILE.cc) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.cpp) - @if [ ! -s $(COMPILE_BATCH.cpp) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp) ; \ - $(ECHO) $< > $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.cpp); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp)`"\ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.cpp); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.cpp) - @$(check-conventions) - -batch_compile: $(FILES_o) - @$(ECHO) "Doing batch compilations" - @if [ -s $(COMPILE_LIST.c) ] ; then \ - $(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)`" ; \ - ( $(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR) ) || exit 1 ; \ - fi - @if [ -s $(COMPILE_LIST.cpp) ] ; then \ - $(ECHO) "$(COMPILE.cc) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)`" ; \ - ( $(COMPILE.cc) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR) ) || exit 1 ; \ - fi - @$(RM) $(COMPILE_BATCH.c) $(COMPILE_LIST.c) $(COMPILE_OBJ_LIST.c) - @$(RM) $(COMPILE_BATCH.cpp) $(COMPILE_LIST.cpp) $(COMPILE_OBJ_LIST.cpp) - -endif - -# newer as does not handle c++ style comments -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.s - ifneq ($(CC_VERSION), gcc) - @$(prep-target) - $(COMPILE.s) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - else - @$(prep-target) - $(CPP) -x assembler-with-cpp $< | $(COMPILE.s) -o $@ - endif - @$(check-conventions) - -# Obj-C files (Mac OS X only). -ifeq ($(PLATFORM), macosx) -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.m - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.mm - @$(prep-target) - $(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) -endif # PLATFORM - -# -# Quick hack for making the compiler generate just the assembly file. -# $ gnumake obj/sparc/myfile.s -# -$(OBJDIR)/%.s: %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ -S $< - @$(check-conventions) - -# remove the intermediate files from the directories. -# (If VARIANT=OPT, this removes all debug and fastdebug files too) -clobber clean:: - $(RM) -r $(OBJDIR) - $(RM) -r $(OBJDIR)_* - -# -# Lint support -# (The 'lint' rule below is an older rule not using the .$(LINT_SUFFIX) files) -# - -ifeq ($(PLATFORM), solaris) -$(OBJDIR)/%.$(LINT_SUFFIX): %.c - @$(prep-target) - $(LINT.c) -dirout=$(OBJDIR) -c $< -lint.clean: - $(RM) $(OBJDIR)/*.$(LINT_SUFFIX) -# Old rule -lint: $(FILES_c) - ifneq ($(FILES_c),) - $(LINT.c) -Ncheck -Nlevel=3 $? $(LDLIBS) > lint.$(ARCH) 2>&1 - endif -endif - -.PHONY: batch_compile - - diff --git a/jdk/makefiles/common/internal/Resources.gmk b/jdk/makefiles/common/internal/Resources.gmk deleted file mode 100644 index 2b5c1e7bd16..00000000000 --- a/jdk/makefiles/common/internal/Resources.gmk +++ /dev/null @@ -1,262 +0,0 @@ -# -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic mechanism for installing properties files, resource bundles, -# and other resource files. -# -# FILES_properties should be defined. -# FILES_compiled_properties should be defined. -# -# If COMPILED_PROPERTIES_SUPERCLASS is defined, ALL the FILES_properties -# files will be compiled into java with this super class. -# -# You can add locales to LOCALE_SUFFIXES explicitly, or use the -# LOCALE_SET_DEFINITION variable to add some pre-defined locale lists. -# The LOCALE_SET_DEFINITION can have the value: jre, plugin, or jdk. -# -# Resource bundles to be installed are identified using the following variables. -# Note that only the file name of the base bundle is given; localized versions -# are added automatically. For Java files, use a format suitable for inclusion -# in the FILES_java list; dito for properties, all relative paths. -# -# NEW_RESOURCE_BUNDLES_JAVA - new resource bundles implemented in -# Java, not localized -# RESOURCE_BUNDLES_JAVA - resource bundles implemented in -# Java, localized -# -# The following variable is now used for most .properties files in the JDK. -# These properties files are converted into java and compiled with javac. -# The resulting .class files are usually smaller and are always faster to load. -# The relative path to the properties file becomes a relative path to a -# java source file. -# -# RESOURCE_BUNDLES_COMPILED_PROPERTIES - resource bundles implemented as -# properties files, localized -# NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES - same as above, not localized -# -# For non-compiled properties files, use the following variables: -# -# NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - new resource bundles implemented as -# properties files, not localized -# RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - resource bundles implemented as -# properties files, localized -# -# Other properties files to be installed are identified using the variable: -# -# OTHER_PROPERTIES -# - -include $(SPEC) -include $(SRC_ROOT)/jdk/makefiles/Tools.gmk - -# Compile properties files into java source? -ifdef COMPILED_PROPERTIES_SUPERCLASS - # Add all properties files to the compiled properties list (all or nothing) - COMPILED_PROPERTIES += $(FILES_compiled_properties) $(FILES_properties) -else - COMPILED_PROPERTIES_SUPERCLASS = ListResourceBundle - COMPILED_PROPERTIES += $(FILES_compiled_properties) -endif - -# Determine the locale suffixes needed beyond the base bundle - -ifeq ($(LOCALE_SET_DEFINITION), plugin) - LOCALE_SUFFIXES += $(PLUGIN_LOCALES) -endif -ifeq ($(LOCALE_SET_DEFINITION), jdk) - LOCALE_SUFFIXES += $(JDK_LOCALES) -endif -ifeq ($(LOCALE_SET_DEFINITION), jre) - LOCALE_SUFFIXES += $(JRE_LOCALES) -endif - -# Java files get tacked onto the standard list of files to compile -RESOURCE_BUNDLE_FILES_java += $(NEW_RESOURCE_BUNDLES_JAVA) -RESOURCE_BUNDLE_FILES_java += $(RESOURCE_BUNDLES_JAVA) \ - $(foreach file,$(RESOURCE_BUNDLES_JAVA), \ - $(foreach locale,$(LOCALE_SUFFIXES), \ - $(basename $(file))_$(locale).java)) - -# Add to java sources list -FILES_java += $(RESOURCE_BUNDLE_FILES_java) - -# Compiled properties files are translated to .java. -# The .java files are generated into GENSRCDIR. -COMPILED_PROPERTIES += $(NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES) -COMPILED_PROPERTIES += $(RESOURCE_BUNDLES_COMPILED_PROPERTIES) \ - $(foreach file,$(RESOURCE_BUNDLES_COMPILED_PROPERTIES),\ - $(foreach locale,$(LOCALE_SUFFIXES),\ - $(basename $(file))_$(locale)$(suffix $(file)))) - -# Add to java sources list -FILES_java += $(COMPILED_PROPERTIES:%.properties=%.java) - -# Non-compiled files -PROPERTIES_FILES += $(NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) -PROPERTIES_FILES += $(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) \ - $(foreach file,$(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES), \ - $(foreach locale,$(LOCALE_SUFFIXES), \ - $(basename $(file))_$(locale)$(suffix $(file)))) -# other properties -PROPERTIES_FILES += $(OTHER_PROPERTIES) - -# -# Process and strip all non-compiled properties files (in a batch mode) -# -STRIP_PROP_FILES = $(PROPERTIES_FILES:%=$(CLASSDESTDIR)/%) -# To efficiently strip properties we use one run of StripProperties. -# This macro gathers an option for use later. -STRIP_PROP_options=$(TEMPDIR)/strip_prop_options -define install-properties-file -$(install-file) -$(call chmod-file, a+rw) -@$(ECHO) "# Adding to strip properties list: $@" -$(ECHO) "$@" >> $(STRIP_PROP_options) -endef - -# Constructs command line options file -$(STRIP_PROP_options): $(STRIP_PROP_FILES) - @$(TOUCH) $@ -strip_prop_options_clean: - @$(RM) $(STRIP_PROP_options) - -# Strip the properties files -strip_all_props: $(BUILD_TOOLS) $(STRIP_PROP_options) - @if [ -s $(STRIP_PROP_options) ] ; then \ - $(ECHO) "$(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options)" ; \ - $(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options) ; \ - fi - @$(java-vm-cleanup) - -# -# Creates files in CLASSDESTDIR -# - -# In some cases, we move files from package to resources subdir -$(CLASSDESTDIR)/$(PKGDIR)/resources/%.properties: \ - $(SHARE_SRC)/classes/$(PKGDIR)/%.properties - $(install-properties-file) -$(CLASSDESTDIR)/%.properties: $(SHARE_SRC)/classes/%.properties - $(install-properties-file) -$(CLASSDESTDIR)/%.res: $(SHARE_SRC)/classes/%.res - $(install-file) -$(CLASSDESTDIR)/%.dtd: $(SHARE_SRC)/classes/%.dtd - $(install-file) -$(CLASSDESTDIR)/%.xml: $(SHARE_SRC)/classes/%.xml - $(install-file) -$(CLASSDESTDIR)/%.prp: $(SHARE_SRC)/classes/%.prp - $(install-file) - -# -# To efficiently compile properties into java sources we use one run -# of compileproperties. This macro gathers an option for use later. -# Note: The properties file and java source name can be different -# locales, e.g. zh_TW and zh_HK. The java source filename -# determines the name of the class. -COMPILE_PROP_options=$(TEMPDIR)/compile_prop_options -define add-property-java-file -@$(prep-target) -@$(ECHO) "# Adding to compile properties list: $? -> $@" -$(ECHO) "-compile $? $@ $(COMPILED_PROPERTIES_SUPERCLASS)" \ - >> $(COMPILE_PROP_options) -endef - -$(GENSRCDIR)/%.java: $(PLATFORM_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(SHARE_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(GENSRCDIR)/%.properties - $(add-property-java-file) -ifndef OPENJDK -$(GENSRCDIR)/%.java: $(CLOSED_PLATFORM_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(CLOSED_SHARE_SRC)/classes/%.properties - $(add-property-java-file) -endif - -# Create HK java file from zh_TW (explicit resource bundles only) -define create-hk-java-file -@$(prep-target) -$(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@ -endef - -# Explicit resource bundles -$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.java - $(create-hk-java-file) -$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.java - $(create-hk-java-file) - -# Compile of zh_HK properties just uses the zh_TW properties files -$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.properties - $(add-property-java-file) -$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.properties - $(add-property-java-file) - -# Simple delivery of zh_HK properties files just copies zh_TW properties files -$(CLASSDESTDIR)/%_zh_HK.properties: \ - $(PLATFORM_SRC)/classes/%_zh_TW.properties - $(install-properties-file) -$(CLASSDESTDIR)/%_zh_HK.properties: \ - $(SHARE_SRC)/classes/%_zh_TW.properties - $(install-properties-file) - -# List of java files converted from properties files needed -COMPILE_PROP_JAVA_FILES = $(COMPILED_PROPERTIES:%.properties=$(GENSRCDIR)/%.java) - -# Constructs command line options file -$(COMPILE_PROP_options): $(COMPILE_PROP_JAVA_FILES) - @$(TOUCH) $@ -compile_prop_options_clean: - @$(RM) $(COMPILE_PROP_options) - -# Make sure all are compiled, one compiler run -compile_all_props: $(BUILD_TOOLS) $(COMPILE_PROP_options) - @if [ `$(CAT) $(COMPILE_PROP_options) | $(WC) -l` -ge 1 ] ; then \ - $(MKDIR) -p $(GENSRCDIR); \ - $(ECHO) "$(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options)";\ - $(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options) ; \ - $(java-vm-cleanup); \ - fi - -# Make sure the build rule creates all the properties -resources: - -ifneq ($(strip $(PROPERTIES_FILES)),) - resources: strip_prop_options_clean strip_all_props - clobber clean:: - $(RM) $(STRIP_PROP_FILES) $(STRIP_PROP_options) -endif - -ifneq ($(strip $(COMPILED_PROPERTIES)),) - resources: compile_prop_options_clean compile_all_props - clobber clean:: - $(RM) $(COMPILE_PROP_JAVA_FILES) $(COMPILE_PROP_options) -endif - -.PHONY: resources \ - compile_prop_options_clean compile_all_props \ - strip_prop_options_clean strip_all_props - diff --git a/jdk/makefiles/common/shared/Compiler-gcc.gmk b/jdk/makefiles/common/shared/Compiler-gcc.gmk deleted file mode 100644 index 3b6923eac06..00000000000 --- a/jdk/makefiles/common/shared/Compiler-gcc.gmk +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# GCC Compiler settings -# - -ifeq ($(PLATFORM), windows) - - # Settings specific to Windows, pretty stale, hasn't been used - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E - CXX ?= $(COMPILER_PATH)g++ - CCC ?= $(COMPILER_PATH)g++ - AR ?= $(COMPILER_PATH)lib - LINK ?= $(COMPILER_PATH)link - RC ?= $(COMPILER_PATH)rc - LINK32 = $(LINK) - RSC = $(RC) - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - ifeq ($(ARCH_DATA_MODEL), 32) - CC_VER = UNKNOWN - else - CC_VER = UNKNOWN - endif - _LINK_VER :=$(shell $(LINK) 2>&1 | $(HEAD) -n 1) - LINK_VER :=$(call GetVersion,"$(_LINK_VER)") - -endif - -ifeq ($(PLATFORM), linux) - -# Settings specific to Linux - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E -# Acquire the paths to the compilers and tools - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # g++ always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use gcc to statically link the C++ runtime. gcc and g++ use - # the same subprocess to compile C++ files, so it is OK to build using gcc. - CXX ?= $(CC) - #$(COMPILER_PATH)gcc - else -# CXX = $(COMPILER_PATH)g++ - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -shared - SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 ) - -endif - -ifeq ($(PLATFORM), solaris) - - # Settings specific to Solaris - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E - CXX ?= $(COMPILER_PATH)g++ - - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G - -endif - -# Get gcc version -_CC_VER :=$(shell $(CC) -dumpversion 2>&1 ) -CC_VER :=$(call GetVersion,"$(_CC_VER)") -CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) -CC_MINORVER :=$(call MinorVersion,$(CC_VER)) - -# Name of compiler -COMPILER_NAME = GCC$(call MajorVersion,$(CC_VER)) -COMPILER_VERSION = $(COMPILER_NAME) - diff --git a/jdk/makefiles/common/shared/Compiler-llvm.gmk b/jdk/makefiles/common/shared/Compiler-llvm.gmk deleted file mode 100644 index 0b26a08cd24..00000000000 --- a/jdk/makefiles/common/shared/Compiler-llvm.gmk +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# LLVM Compiler settings -# - -ifeq ($(PLATFORM), macosx) - - # Settings specific to Mac OS X - ifeq ($(origin CC), default) - CC = $(COMPILER_PATH)llvm-gcc - endif - CPP = $(COMPILER_PATH)llvm-gcc -E - ifeq ($(origin CXX), default) - CXX = $(COMPILER_PATH)llvm-g++ - endif - - REQUIRED_CC_VER = 4.2.1 - - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -Wl,-install_name,@rpath/$(@F) -dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 - SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 ) - - AR = $(CC) - ARFLAGS = -nostdlib -r -arch i386 -arch x86_64 -o - -endif - -# Get llvm version -_CC_VER :=$(shell $(CC) -dumpversion 2>&1 ) -CC_VER :=$(call GetVersion,"$(_CC_VER)") - -# Name of compiler -COMPILER_NAME = LLVM-GCC$(call MajorVersion,$(CC_VER)) -COMPILER_VERSION = $(COMPILER_NAME) - diff --git a/jdk/makefiles/common/shared/Compiler-msvc.gmk b/jdk/makefiles/common/shared/Compiler-msvc.gmk deleted file mode 100644 index b5007022664..00000000000 --- a/jdk/makefiles/common/shared/Compiler-msvc.gmk +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# MSVC Compiler settings -# - -ifeq ($(PLATFORM), windows) - CC ?= $(COMPILER_PATH)cl - CPP ?= $(COMPILER_PATH)cl - CXX ?= $(COMPILER_PATH)cl - CCC ?= $(COMPILER_PATH)cl - AR ?= $(COMPILER_PATH)lib - LINK ?= $(COMPILER_PATH)link - LINK32 ?= $(LINK) -# TODO Add dumpbin.exe to configure - DUMPBIN ?= $(COMPILER_PATH)dumpbin.exe - - # Fill in unknown values - COMPILER_NAME=Unknown MSVC Compiler - COMPILER_VERSION= - - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - - # Compiler version and type (Always get word after "Version") - CC_VER := $(shell $(CC) 2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/' | $(NAWK) '{print $$2}') - - LINK_VER := $(shell $(LINK) | $(HEAD) -n 1 | $(NAWK) '{print $$6}') - CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) - - # The VS2010 compiler is the same one used on both 32bit and 64bit - ifeq ($(CC_MAJORVER), 16) - COMPILER_NAME=Microsoft Visual Studio 10 (16.00.30319.01) - COMPILER_VERSION=VS2010 - ifeq ($(WINDOWSSDKDIR),) - WINDOWSSDKDIR := $(error WINDOWSSDKDIR cannot be empty here) - endif - ifeq ($(ARCH_DATA_MODEL), 32) - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin - else - ifeq ($(ARCH), ia64) - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin/ia64 - else - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin/x64 - endif - endif - RC = $(_OTHER_TOOLS_BIN)/RC.Exe - REBASE = $(_OTHER_TOOLS_BIN)/ReBase.Exe - MT = $(_OTHER_TOOLS_BIN)/mt.exe - MTL = $(_OTHER_TOOLS_BIN)/midl.exe - endif - - # These variables can never be empty - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - ifndef COMPILER_VERSION - COMPILER_VERSION := $(error COMPILER_VERSION cannot be empty here) - endif - ifneq ($(COMPILER_VERSION),VS2010) - COMPILER_VERSION := $(error COMPILER_VERSION must be VS2010) - endif - - # Shared library generation flag - SHARED_LIBRARY_FLAG = -LD - # RSC is always same as RC (Not sure who uses this RSC variable) - RSC = $(RC) - -endif - diff --git a/jdk/makefiles/common/shared/Compiler-sun.gmk b/jdk/makefiles/common/shared/Compiler-sun.gmk deleted file mode 100644 index 539ba98f22a..00000000000 --- a/jdk/makefiles/common/shared/Compiler-sun.gmk +++ /dev/null @@ -1,138 +0,0 @@ -# -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Sun Studio Compiler settings -# - -# Sun Studio Compiler settings specific to Solaris -ifeq ($(PLATFORM), solaris) - CC ?= $(COMPILER_PATH)cc - CPP ?= $(COMPILER_PATH)cc -E - CXX ?= $(COMPILER_PATH)CC - LINT ?= $(COMPILER_PATH)lint - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G - GCC =$(GCC_COMPILER_PATH)gcc -endif - -# Sun Studio Compiler settings specific to Linux -ifeq ($(PLATFORM), linux) - # This has not been tested - CC ?= $(COMPILER_PATH)cc - CPP ?= $(COMPILER_PATH)cc -E - CXX ?= $(COMPILER_PATH)CC - LINT ?= $(COMPILER_PATH)lint - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # CC always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use cc to statically link the C++ runtime. - CXX ?= $(COMPILER_PATH)cc - else - CXX ?= $(COMPILER_PATH)CC - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G -endif - -# Get compiler version -_CC_VER :=$(shell $(CC) -V 2>&1 | $(HEAD) -n 1) -CC_VER :=$(call GetVersion,"$(_CC_VER)") -CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) -CC_MINORVER :=$(call MinorVersion,$(CC_VER)) - -# Name of compilers being used -COMPILER_VERSION-5.7 = SS10 -COMPILER_NAME-5.7 = Sun Studio 10 -COMPILER_VERSION-5.8 = SS11 -COMPILER_NAME-5.8 = Sun Studio 11 -COMPILER_VERSION-5.9 = SS12 -COMPILER_NAME-5.9 = Sun Studio 12 -COMPILER_VERSION-5.10 = SS12u1 -COMPILER_NAME-5.10 = Sun Studio 12 Update 1 -COMPILER_VERSION-5.11 = OSS12u2 -COMPILER_NAME-5.11 = Oracle Solaris Studio 12 Update 2 -COMPILER_VERSION = $(COMPILER_VERSION-$(CC_VER)) -COMPILER_NAME = $(COMPILER_NAME-$(CC_VER)) - -# Arch specific settings (determines type of .o files and instruction set) -# Starting in SS12 (5.9), the arch options changed. -# The assembler /usr/ccs/bin/as wants older SS11 (5.8) style options. -# Note: We need to have both 32 and 64 values at all times for awt Makefiles. -# -XARCH_OPTION_OLD/32 = -XARCH_OPTION_OLD/64 = -XARCH_OPTION_NEW/32 = -m32 -XARCH_OPTION_NEW/64 = -m64 -# Lint options are slightly different -LINT_XARCH_OPTION_OLD/32 = -LINT_XARCH_OPTION_OLD/64 = -LINT_XARCH_OPTION_NEW/32 = -m32 -LINT_XARCH_OPTION_NEW/64 = -m64 -ifeq ($(ARCH_FAMILY), sparc) - ifdef VIS_NEEDED - XARCH_OPTION_OLD/32 += -xarch=v8plusa - XARCH_OPTION_OLD/64 += -xarch=v9a - XARCH_OPTION_NEW/32 += -xarch=sparcvis - XARCH_OPTION_NEW/64 += -xarch=sparcvis - else - # Someday this should change to improve optimization on UltraSPARC - # and abandon v8, even change to sparcvis or sparcvis2, this - # abandons machines like the SPARCstation 10. - # Indications with jdk6 is that alacrity runs do not show a - # big improvement using v8plus over v8, but other benchmarks might. - XARCH_OPTION_OLD/32 += -xarch=v8 - XARCH_OPTION_OLD/64 += -xarch=v9 - # Note that this new option (SS12+) effectively means v8plus - XARCH_OPTION_NEW/32 += -xarch=sparc - XARCH_OPTION_NEW/64 += -xarch=sparc - endif - LINT_XARCH_OPTION_OLD/64 += -Xarch=v9 -endif -ifeq ($(ARCH_FAMILY), i586) - XARCH_OPTION_OLD/64 += -xarch=amd64 - LINT_XARCH_OPTION_OLD/64 += -Xarch=amd64 -endif -# Pick the options we want based on the compiler being used. (5.9 or newer) -CC_59_OR_NEWER := \ - $(shell expr $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \>= 9 \) ) -ifeq ($(CC_59_OR_NEWER), 1) - XARCH_OPTION/32 = $(XARCH_OPTION_NEW/32) - XARCH_OPTION/64 = $(XARCH_OPTION_NEW/64) - LINT_XARCH_OPTION/32 = $(LINT_XARCH_OPTION_NEW/32) - LINT_XARCH_OPTION/64 = $(LINT_XARCH_OPTION_NEW/64) -else - XARCH_OPTION/32 = $(XARCH_OPTION_OLD/32) - XARCH_OPTION/64 = $(XARCH_OPTION_OLD/64) - LINT_XARCH_OPTION/32 = $(LINT_XARCH_OPTION_OLD/32) - LINT_XARCH_OPTION/64 = $(LINT_XARCH_OPTION_OLD/64) -endif -XARCH_OPTION = $(XARCH_OPTION/$(ARCH_DATA_MODEL)) -LINT_XARCH_OPTION = $(LINT_XARCH_OPTION/$(ARCH_DATA_MODEL)) -# The /usr/ccs/bin/as assembler always wants the older SS11 (5.8) options. -AS_XARCH_OPTION = $(XARCH_OPTION_OLD/$(ARCH_DATA_MODEL)) - diff --git a/jdk/makefiles/common/shared/Defs-control.gmk b/jdk/makefiles/common/shared/Defs-control.gmk deleted file mode 100644 index 3a5dc1686d2..00000000000 --- a/jdk/makefiles/common/shared/Defs-control.gmk +++ /dev/null @@ -1,143 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Common variables used by all the Java makefiles. This file should -# not contain rules. -# - -# WARNING: This file is shared with other components. -# - -ifndef JDK_MAKE_SHARED_DIR - JDK_MAKE_SHARED_DIR = $(JDK_TOPDIR)/makefiles/common/shared -endif - -ifndef HOTSPOT_TOPDIR - HOTSPOT_TOPDIR=$(TOPDIR)/hotspot -endif -ifndef LANGTOOLS_TOPDIR - LANGTOOLS_TOPDIR=$(TOPDIR)/langtools -endif -ifndef CORBA_TOPDIR - CORBA_TOPDIR=$(TOPDIR)/corba -endif -ifndef JAXP_TOPDIR - JAXP_TOPDIR=$(TOPDIR)/jaxp -endif -ifndef JAXWS_TOPDIR - JAXWS_TOPDIR=$(TOPDIR)/jaxws -endif -ifndef JDK_TOPDIR - JDK_TOPDIR=$(TOPDIR)/jdk -endif -ifndef INSTALL_TOPDIR - INSTALL_TOPDIR=$(TOPDIR)/install -endif -ifndef SPONSORS_TOPDIR - SPONSORS_TOPDIR=$(TOPDIR)/sponsors -endif -ifndef DEPLOY_TOPDIR - DEPLOY_TOPDIR=$(TOPDIR)/deploy -endif - -# Get shared platform settings -include $(JDK_MAKE_SHARED_DIR)/Platform.gmk - -# Default directory immediately above the "build" output directory (OUTPUTDIR) -BUILD_PARENT_DIRECTORY=$(TOPDIR) - -# Get platform specific settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -SRC_BUNDLEDIR = $(OUTPUTDIR)/source-bundles -ABS_SRC_BUNDLEDIR = $(ABS_OUTPUTDIR)/source-bundles -BIN_BUNDLEDIR = $(OUTPUTDIR)/bundles -BIN_DEMOS_BUNDLEDIR = $(OUTPUTDIR)/demos-bundles -ABS_BIN_BUNDLEDIR = $(ABS_OUTPUTDIR)/bundles - -dummy := $(shell $(MKDIR) -p $(BIN_BUNDLEDIR)) -dummy := $(shell $(MKDIR) -p $(BIN_DEMOS_BUNDLEDIR) ) -dummy := $(shell $(MKDIR) -p $(SRC_BUNDLEDIR) ) - -TEMP_DIR = $(OUTPUTDIR)/tmp -ABS_TEMP_DIR = $(ABS_OUTPUTDIR)/tmp - -dummy := $(shell $(MKDIR) -p $(TEMP_DIR)) - -# The language version we want for this jdk build -SOURCE_LANGUAGE_VERSION=7 -# The class version we want for this jdk build -TARGET_CLASS_VERSION=7 - -# The MESSAGE, WARNING and ERROR files are used to store sanity check and -# source check messages, warnings and errors. -export ERROR_FILE := $(ABS_OUTPUTDIR)/sanityCheckErrors.txt -export WARNING_FILE := $(ABS_OUTPUTDIR)/sanityCheckWarnings.txt -export MESSAGE_FILE := $(ABS_OUTPUTDIR)/sanityCheckMessages.txt - -# source bundle generation definitions -BUNDLE_DATE := $(shell $(DATE) '+%d_%b_%Y' | $(TR) "[A-Z]" "[a-z]") -ifdef ALT_BUNDLE_DATE - BUNDLE_DATE := $(ALT_BUNDLE_DATE) -endif - -# If the update version contains non-numeric characters, we need -# to massage it into a numeric format. Unfortunately, the -# Windows VERSIONINFO resource that we stick in jvm.dll cannot -# handle non-numeric characters. We have to do this here because -# Hotspot (nmake) cannot handle calculations. So we use the -# following formula: -# COOKED_JDK_UPDATE_VERSION = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION -# -# Here are some examples: -# 1.5.0 b01 -> 5,0,0,1 -# 1.5.0_10 b01 -> 5,0,100,1 -# 1.4.2 b01 -> 4,2,0,1 -# 1.4.2_02 b01 -> 4,2,20,1 -# 1.4.2_02a b01 -> 4,2,21,1 -# 1.4.2_02b b01 -> 4,2,22,1 -ifdef JDK_UPDATE_VERSION - VTMP := $(shell $(ECHO) $(JDK_UPDATE_VERSION) | $(TR) "abcde" "12345") - CHAR1 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 1, 1);}') - CHAR2 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 2, 1);}') - CHAR3 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 3, 1);}') - ifeq ($(CHAR3),) - CHAR3 := 0 - endif - ifeq ($(CHAR1), 0) - COOKED_JDK_UPDATE_VERSION := $(CHAR2)$(CHAR3) - else - COOKED_JDK_UPDATE_VERSION := $(CHAR1)$(CHAR2)$(CHAR3) - endif -endif - -ifneq ($(JDK_BUILD_NUMBER),) - COOKED_BUILD_NUMBER = $(shell $(ECHO) $(JDK_BUILD_NUMBER) \ - | $(SED) -e 's/^b//' | $(SED) -e 's/^0//') -else - COOKED_BUILD_NUMBER = 0 -endif - diff --git a/jdk/makefiles/common/shared/Defs-java.gmk b/jdk/makefiles/common/shared/Defs-java.gmk deleted file mode 100644 index 4422ca312b0..00000000000 --- a/jdk/makefiles/common/shared/Defs-java.gmk +++ /dev/null @@ -1,249 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Common java/javac/jdk variables used by all the Java makefiles. -# This file should not contain rules. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - --include $(SPEC) - -# -# Memory related -J flags that all uses of java tools should use. -# -#JAVA_MEM_FLAGS = -Xmx$(MAX_VM_MEMORY)m -#ifeq ($(ARCH), ia64) - # Special flags for javac on ia64 to work around a VM problem with - # bad code generation during inlining (what version had this problem?): - # Suspect this may not be needed anymore. -# JAVA_MEM_FLAGS += -Xms$(MAX_VM_MEMORY)m -XX:-Inline -#else -# JAVA_MEM_FLAGS += -Xms$(MIN_VM_MEMORY)m -XX:PermSize=32m -XX:MaxPermSize=160m -#endif - -# -# All java tools (javac, javah, and javadoc) run faster with certain java -# options, this macro should be used with all these tools. -# In particular, the client VM makes these tools run faster when -# it's available. -# -ADD_CLIENT_VM_OPTION = false -ifeq ($(PLATFORM), solaris) - ADD_CLIENT_VM_OPTION = true -else - ifeq ($(ARCH_DATA_MODEL), 32) - ADD_CLIENT_VM_OPTION = true - endif -endif - -# Options for hotspot to turn off printing of options with fastdebug version -# and creating the hotspot.log file. -#JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS = \ -# -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput - -# JVM options -ifeq ($(PLATFORM), macosx) - JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS) -Djava.awt.headless=true -else - JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS) -endif - -#ifeq ($(ADD_CLIENT_VM_OPTION), true) -# JAVA_JVM_FLAGS += -client -#endif -#ifdef USE_HOTSPOT_INTERPRETER_MODE -# JAVA_JVM_FLAGS += -Xint -#endif - -# Various VM flags -JAVA_TOOLS_FLAGS = $(JAVA_JVM_FLAGS) $(JAVA_MEM_FLAGS) - -# The VM flags for javac -JAVAC_JVM_FLAGS = - -# 64-bit builds require a larger thread stack size. -#ifeq ($(ARCH_DATA_MODEL), 32) -# JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=768 -#else -# JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=1536 -#endif -JAVAC_JVM_FLAGS += $(JAVA_TOOLS_FLAGS:%=-J%) - -# The jar -J options are special, must be added at the end of the command line -JAR_JFLAGS = $(JAVA_TOOLS_FLAGS:%=-J%) - -# JAVA_TOOLS_DIR is the default location to find Java tools to run, if -# langtools is not available. -# This should be the latest promoted JDK javac. -ifndef JAVA_TOOLS_DIR - JAVA_TOOLS_DIR = $(JDK_IMPORT_PATH)/bin -endif - -# -# Invoking the Java compiler. In leaf makefiles, choose as follows: -# -- Use JAVAC if you want to take full control of what options get -# passed to javac. -# -- Use JAVAC_CMD if you want to take the defaults given to you. -# - -ifndef DEBUG_CLASSFILES - ifeq ($(VARIANT), DBG) - DEBUG_CLASSFILES = true - endif -endif -JAVACFLAGS = -ifeq ($(DEBUG_CLASSFILES),true) - JAVACFLAGS += -g -endif -ifeq ($(JAVAC_MAX_WARNINGS), true) - JAVAC_LINT_OPTIONS += -Xlint:all -endif -ifeq ($(JAVAC_WARNINGS_FATAL), true) - JAVACFLAGS += -Werror -endif - -# TODO: Workaround for CR 7063027. Remove -path eventually. -JAVAC_LINT_OPTIONS += -Xlint:-path - -JAVACFLAGS += $(JAVAC_LINT_OPTIONS) - -# -# Some licensees do not get the Security Source bundles. We will -# fall back on the prebuilt jce.jar so that we can do a best -# attempt at building. If sources exist, we always want to -# build/use the most recent source instead of an older jce.jar, whether -# built implicitly/explicitly. -# -ifeq ($(wildcard $(SHARE_SRC)/classes/javax/crypto/Cipher.java),) - JCEFLAGS = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar -endif - -# Add the source level -SOURCE_LANGUAGE_VERSION = 7 -LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION) -JAVACFLAGS += $(LANGUAGE_VERSION) - -# Add the class version we want -TARGET_CLASS_VERSION = 7 -CLASS_VERSION = -target $(TARGET_CLASS_VERSION) -JAVACFLAGS += $(CLASS_VERSION) -JAVACFLAGS += -encoding ascii -JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCEFLAGS)" -JAVACFLAGS += $(OTHER_JAVACFLAGS) - -# Needed for javah -JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCEFLAGS)" - -# Needed for javadoc to ensure it builds documentation -# against the newly built classes -JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR) - -# Needed for JAVADOC and BOOT_JAVACFLAGS -NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true - -# Langtools -LANGTOOLS_DIST ?= $(ALT_LANGTOOLS_DIST) - -ifdef LANGTOOLS_DIST - JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar - JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar - JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar - DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar - JAVAC_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVAC_JAR)" \ - -jar $(JAVAC_JAR) $(JAVACFLAGS) - JAVAH_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \ - -jar $(JAVAH_JAR) $(JAVAHFLAGS) - JAVADOC_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \ - -jar $(JAVADOC_JAR) $(JAVADOCFLAGS) -else - # If no explicit tools, use boot tools (add VM flags in this case) - JAVAC_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \ - $(JAVACFLAGS) - JAVAH_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javah \ - $(JAVAHFLAGS) - JAVADOC_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \ - $(JAVADOCFLAGS) -endif - -# Override of what javac to use (see deploy workspace) -#ifdef JAVAC -# JAVAC_CMD = $(JAVAC) -#endif - -# -# The bootstrap java compiler (defined as the javac in the ALT_BOOTDIR jdk). -# Will be used to compile java code used to build the jdk, e.g. class files -# created by this compiler will NOT become part of this built jdk, but just -# used to build this jdk, e.g. run with the java in the ALT_BOOTDIR jdk. -# -# The javac supplied with the LANGTOOLS_DIST should be used to build the -# classes that will be put into the built jdk. But note that this javac -# will use the ALT_BOOTDIR java runtime. Any classes created by the -# LANGTOOLS_DIST javac should not be run during this jdk build and indeed -# may not even run with the ALT_BOOTDIR jdk because they may be a newer -# class file version that the ALT_BOOTDIR jdk doesn't understand. -# -# The important observation here is that the built jdk is NOT run during -# the build. If the built jdk needs to be verified that it can build this -# same jdk, then it should be supplied to the build process as the ALT_BOOTDIR -# jdk, and this resulting built jdk should be compared to the first one. -# (They should be the same). Re-using this built jdk as the ALT_BOOTDIR -# jdk will be the only way and the recommeneded way to verify the built jdk -# can bootstrap itself. -# - -# The javac options supplied to the boot javac is limited. This compiler -# should only be used to build the 'make/tools' sources, which are not -# class files that end up in the classes directory. -BOOT_JAVACFLAGS += $(JAVAC_LINT_OPTIONS) -ifeq ($(JAVAC_WARNINGS_FATAL), true) - BOOT_JAVACFLAGS += -Werror -endif - -BOOT_JAVACFLAGS += -encoding ascii -BOOT_JAR_JFLAGS += $(JAR_JFLAGS) - -BOOT_JAVACFLAGS += $(NO_PROPRIETARY_API_WARNINGS) - -BOOT_JAVA_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS) -BOOT_JAVAC_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS) -BOOT_JAR_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/jar -BOOT_JARSIGNER_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/jarsigner - -# Various tools we need to run (FIXUP: Are these the right ones?) -NATIVE2ASCII = $(UNCYGDRIVE) $(BOOTDIR)/bin/native2ascii $(JAVA_TOOLS_FLAGS:%=-J%) -RMIC = $(UNCYGDRIVE) $(BOOTDIR)/bin/rmic $(JAVA_TOOLS_FLAGS:%=-J%) -IDLJ = $(UNCYGDRIVE) $(BOOTDIR)/bin/idlj $(JAVA_TOOLS_FLAGS:%=-J%) - -# Should not be used -#JAVA = /should/not/be/used - diff --git a/jdk/makefiles/common/shared/Defs-javadoc.gmk b/jdk/makefiles/common/shared/Defs-javadoc.gmk deleted file mode 100644 index c222ad10fa4..00000000000 --- a/jdk/makefiles/common/shared/Defs-javadoc.gmk +++ /dev/null @@ -1,71 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Copyright year for beginning of Java and some of the apis -# (Needed when creating the javadocs) -FIRST_COPYRIGHT_YEAR = 1993 -DOMAPI_FIRST_COPYRIGHT_YEAR = 2005 -MIRROR_FIRST_COPYRIGHT_YEAR = 2004 -DOCLETAPI_FIRST_COPYRIGHT_YEAR = 1993 -TAGLETAPI_FIRST_COPYRIGHT_YEAR = 1993 -JDI_FIRST_COPYRIGHT_YEAR = 1999 -JAAS_FIRST_COPYRIGHT_YEAR = 1998 -JGSS_FIRST_COPYRIGHT_YEAR = 2000 -SMARTCARDIO_FIRST_COPYRIGHT_YEAR = 2005 -HTTPSERVER_FIRST_COPYRIGHT_YEAR = 2005 -MGMT_FIRST_COPYRIGHT_YEAR = 2003 -ATTACH_FIRST_COPYRIGHT_YEAR = 2005 -JCONSOLE_FIRST_COPYRIGHT_YEAR = 2006 -SCTPAPI_FIRST_COPYRIGHT_YEAR = 2009 -TRACING_FIRST_COPYRIGHT_YEAR = 2008 -TREEAPI_FIRST_COPYRIGHT_YEAR = 2005 -JNLP_FIRST_COPYRIGHT_YEAR = 1998 -PLUGIN2_FIRST_COPYRIGHT_YEAR = 2007 - -# Oracle name -FULL_COMPANY_NAME = Oracle and/or its affiliates - -# Copyright address -COMPANY_ADDRESS = 500 Oracle Parkway
    Redwood Shores, CA 94065 USA. - -# The trademark symbol -TRADEMARK = ™ - -# Common copyright lines used -# The word "Copyright" might optionally be a link to the file cpyr.html. -# The first year of copyright may vary or not be available. -# The address to the company might be optional. -COMMA:= , -EMPTY:= -SPACE:=$(EMPTY) $(EMPTY) -COPYRIGHT_SYMBOL = &\#x00a9; -# Macro to construct the copyright line -# (The GNU make 3.78.1 "if" conditional is broken, fixed in GNU make 3.81) -define CopyrightLine # optionalurl optionalfirstyear optionaladdress -$(if $(strip $1),Copyright,Copyright) \ -$(COPYRIGHT_SYMBOL) $(if $2,$2${COMMA},) $(COPYRIGHT_YEAR),\ -$(FULL_COMPANY_NAME). $3 All rights reserved. -endef - diff --git a/jdk/makefiles/common/shared/Defs-linux.gmk b/jdk/makefiles/common/shared/Defs-linux.gmk deleted file mode 100644 index 1e0559dbf4a..00000000000 --- a/jdk/makefiles/common/shared/Defs-linux.gmk +++ /dev/null @@ -1,213 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Linux. -# - -# Default for COMPILER_WARNINGS_FATAL on Linux (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Linux should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH =/opt/java - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /bin/ -endif - -# USRBIN_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_USRBIN_PATH)" "undefined" - USRBIN_PATH :=$(call PrefixPath,$(ALT_USRBIN_PATH)) -else - USRBIN_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the Solaris ported UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - COMPILER_PATH =/usr/bin/ -endif - -# OPENWIN_HOME: path to where the X11 environment is installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq ($(ALT_OPENWIN_HOME),) - OPENWIN_HOME :=$(call PrefixPath,$(ALT_OPENWIN_HOME)) -else - OPENWIN_HOME ?=$(SYS_ROOT)/usr/X11R6/ -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - DEVTOOLS_PATH =/usr/bin/ -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# Always build headless on Linux -BUILD_HEADLESS = true -LIBM=-lm - -# GCC29_COMPILER_PATH: is the path to where the gcc 2.9 compiler is installed -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_GCC29_COMPILER_PATH - GCC29_COMPILER_PATH :=$(call PrefixPath,$(ALT_GCC29_COMPILER_PATH)) -else - GCC29_COMPILER_PATH = $(JDK_DEVTOOLS_DIR)/$(PLATFORM)/gcc29/usr/ -endif - -_CUPS_HEADERS_PATH=/usr/include - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif - -# JDK_IMPORT_PATH: location of JDK install tree (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -D -g --defined-only $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-macosx.gmk b/jdk/makefiles/common/shared/Defs-macosx.gmk deleted file mode 100644 index a847d8ae9f3..00000000000 --- a/jdk/makefiles/common/shared/Defs-macosx.gmk +++ /dev/null @@ -1,252 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Bsd. -# - -# Default for COMPILER_WARNINGS_FATAL on Bsd (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Bsd should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH = $(PACKAGE_PATH) - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /bin/ -endif - -# USRBIN_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_USRBIN_PATH)" "undefined" - USRBIN_PATH :=$(call PrefixPath,$(ALT_USRBIN_PATH)) -else - USRBIN_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the Solaris ported UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - ifeq ($(OS_VENDOR), Apple) - ifndef DEVELOPER_DIR - DEVELOPER_DIR = $(shell /usr/bin/xcode-select -print-path)/usr/bin/ - endif - - COMPILER_PATH := $(call DirExists,$(DEVELOPER_DIR),/usr/bin/,/NOT-SET) - else - COMPILER_PATH =/usr/bin/ - endif -endif - -# OPENWIN_HOME: path to where the X11 environment is installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq ($(ALT_OPENWIN_HOME),) - OPENWIN_HOME :=$(call PrefixPath,$(ALT_OPENWIN_HOME)) -else - OPENWIN_HOME ?=$(X11_PATH) -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - DEVTOOLS_PATH =$(PACKAGE_PATH)/bin/ -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# Always build headless on Bsd -BUILD_HEADLESS = true -LIBM=-lm - -ifeq ($(OS_VENDOR), Apple) - _CUPS_HEADERS_PATH=/usr/include -else - _CUPS_HEADERS_PATH=$(PACKAGE_PATH)/include -endif - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, bsd-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif -BUILD_JDK_IMPORT_PATH:=$(call AltCheckValue,BUILD_JDK_IMPORT_PATH) - -# JDK_IMPORT_PATH: location of JDK install tree (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif -JDK_IMPORT_PATH:=$(call AltCheckValue,JDK_IMPORT_PATH) - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif -HOTSPOT_IMPORT_PATH:=$(call AltCheckValue,HOTSPOT_IMPORT_PATH) - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif - HOTSPOT_CLIENT_PATH:=$(call AltCheckValue,HOTSPOT_CLIENT_PATH) -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif -HOTSPOT_SERVER_PATH:=$(call AltCheckValue,HOTSPOT_SERVER_PATH) - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -ifeq ($(OS_VENDOR), Apple) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -g $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "WARNING: File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(OTOOL) -L $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(OTOOL) -l $1 | $(EGREP) 'path ' ) \ -) || true -endef -else -ifeq ($(OS_VENDOR), OpenBSD) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(OBJDUMP) -T $1 | $(EGREP) '[0-9a-f]* g *DF \.text.*SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) || true -endef -else -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -D -g --defined-only $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -endif # OS_VENDOR == OpenBSD -endif # OS_VENDOR == Apple -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-solaris.gmk b/jdk/makefiles/common/shared/Defs-solaris.gmk deleted file mode 100644 index cd7fa15d27c..00000000000 --- a/jdk/makefiles/common/shared/Defs-solaris.gmk +++ /dev/null @@ -1,239 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Solaris. -# - -# Default for COMPILER_WARNINGS_FATAL on Solaris (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Solaris should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH =/usr/jdk/instances - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the less common UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - # If the place where we keep a set of Sun Studio compilers doesn't exist, - # try and use /opt/SUNWspro, the default location for the SS compilers. - # (DirExists checks for this path twice, an automount double check) - _SUNSTUDIO_SET_ROOT=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/SUNWspro - SUNSTUDIO_SET_ROOT:=$(call DirExists,$(_SUNSTUDIO_SET_ROOT),$(_SUNSTUDIO_SET_ROOT),) - ifneq ($(SUNSTUDIO_SET_ROOT),) - COMPILER_PATH =$(SUNSTUDIO_SET_ROOT)/$(REQUIRED_COMPILER_VERSION)/bin/ - else - COMPILER_PATH =/opt/SUNWspro/bin/ - endif -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - ifdef ALT_JDK_DEVTOOLS_DIR - DEVTOOLS_PATH =$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/bin/ - else - ifdef OPENJDK - DEVTOOLS_PATH = /usr/bin/ - else - DEVTOOLS_PATH =$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/bin/ - endif - endif -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# GCC_COMPILER_PATH: path to where the gcc/g++ compiler and tools are installed -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_GCC_COMPILER_PATH)" "undefined" - GCC_COMPILER_PATH :=$(call PrefixPath,$(ALT_GCC_COMPILER_PATH)) -else - GCC_COMPILER_PATH = $(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/gnucc/bin/ -endif - - -# Always build headless on Solaris -BUILD_HEADLESS = true - -_CUPS_HEADERS_PATH=/opt/sfw/cups/include - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif - -# JDK_IMPORT_PATH: location of previously built JDK (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Some libraries do not have mapfiles for multiple reasons. -# These libraries for sparc and sparcv9 are exceptions to the mapfile rule: -# libjdgaSUNWafb.so -# libjdgaSUNWcg6.so -# libjdgaSUNWffb.so -# libjdgaSUNWm64.so -# libxinerama.so -# The library libJdbcOdbc.so has also been given an exception. -# The JNI/JVMTI demo libraries are also missing mapfiles, no exceptions yet. -ifeq ($(ARCH_FAMILY),sparc) - MAPFILE_EXCEPTIONS = \ - (libJdbcOdbc|libjdgaSUNWafb|libjdgaSUNWcg6|libjdgaSUNWffb|libjdgaSUNWm64|libxinerama) -else - MAPFILE_EXCEPTIONS = (libJdbcOdbc) -endif - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -ifneq (,$(DUMP)) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(ECHO) $(basename $(notdir $1)) | $(EGREP) '$(MAPFILE_EXCEPTIONS)'`" = "" \ - -a "`$(NM) -g -D $1 | $(EGREP) -v 'UNDEF' | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(DUMP) -L -v $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification since no dump command found" \ -) -endef -endif -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-utils.gmk b/jdk/makefiles/common/shared/Defs-utils.gmk deleted file mode 100644 index 4c38e4b3aa9..00000000000 --- a/jdk/makefiles/common/shared/Defs-utils.gmk +++ /dev/null @@ -1,2 +0,0 @@ -# Purposely empty for now, should be removed eventually. - diff --git a/jdk/makefiles/common/shared/Defs-versions.gmk b/jdk/makefiles/common/shared/Defs-versions.gmk deleted file mode 100644 index fba70370ba2..00000000000 --- a/jdk/makefiles/common/shared/Defs-versions.gmk +++ /dev/null @@ -1,215 +0,0 @@ -# -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# WARNING: This file is shared with other workspaces. -# - -# This file needs these set: PLATFORM, ARCH_FAMILY, and ARCH_DATA_MODEL. - -# Windows uses Microsoft compilers by default -ifeq ($(PLATFORM), windows) - override CC_VERSION = msvc -endif - -# Solaris uses Sun Studio compilers by default -ifeq ($(PLATFORM), solaris) - override CC_VERSION = sun -endif - -# Linux uses GNU compilers by default -ifeq ($(PLATFORM), linux) - override CC_VERSION = gcc -endif - -# Mac OS X uses LLVM by default -ifeq ($(PLATFORM), macosx) - override CC_VERSION = llvm -endif - -########################################################################## -# -# List of JDK official minimum, expected, or required versions: -# -# REQUIRED_ALSA_VERSION -# Linux only: The ALSA sound library version expected. -# -# REQUIRED_ANT_VER -# The minimum 'ant' version. -# -# REQUIRED_BOOT_VER -# The minimum boot jdk version. -# -# REQUIRED_CC_VER -# The primary C compiler version expected. -# -# REQUIRED_COMPILER_NAME -# The long descriptive name of the compiler we should use -# -# REQUIRED_COMPILER_VERSION -# The one word name that identifies the compilers being used. -# -# REQUIRED_CYGWIN_VER -# Windows only: If CYGWIN is used, the minimum CYGWIN version. -# -# REQUIRED_DXSDK_VER -# Windows only: The version of DirectX SDK expected. -# -# REQUIRED_FREETYPE_VERSION -# If we are using freetype, the freetype version expected. -# -# REQUIRED_GCC_VER -# Solaris and Linux only. The required version of gcc/g++ for the legacy OJI plugin. -# -# REQUIRED_LINK_VER -# Windows only: The version of link.exe expected. -# -# REQUIRED_MAKE_VER -# The minimum version of GNU make. -# -# REQUIRED_MKS_VER -# Windows only: If MKS used instead of CYGWIN, the minimum version of MKS. -# -# REQUIRED_OS_VARIANT_NAME -# The OS variation name required. -# Solaris: Solaris or OpenSolaris -# Windows: Windows2000, WindowsXP, Windows2003, etc. -# Linux: Fedora, RedHat, SuSE, Ubuntu, etc. -# -# REQUIRED_OS_VARIANT_VERSION -# The version number associated with the above OS variant name. -# Solaris: output of uname -r -# Windows: 5.0 for Windows2000, 5.1 for WindowsXP, 5.2 for Windows2003, etc. -# Linux: number for the variant, e.g. 9 for Fedora 9 -# -# REQUIRED_OS_VERSION -# The formal OS version number. -# Solaris & Windows: same as REQUIRED_OS_VARIANT_VERSION -# Linux: the kernel version, or output of uname -r -# -# REQUIRED_UNZIP_VER -# The minimum version of unzip. -# -# REQUIRED_ZIP_VER -# The minimum version of unzip. -# -########### -# -# Differences in the build platform from these versions may trigger warnings -# messages during the sanity checking when building the JDK. -# -# When building the OpenJDK most of these required or expected versions are -# ignored or allowed to vary widely to accomodate the many build situations -# of the OpenJDK. -# -########################################################################## - -# Solaris specific -ifeq ($(PLATFORM), solaris) - REQUIRED_OS_NAME = SunOS - REQUIRED_OS_VERSION = 5.10 - REQUIRED_OS_VARIANT_NAME = Solaris - REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION) - REQUIRED_COMPILER_NAME = Sun Studio 12 Update 1 - REQUIRED_COMPILER_VERSION = SS12u1 - # Cross-compilation compiler versions are target specific - # so don't set a required version if cross-compiling - ifndef CROSS_COMPILE_ARCH - ifeq ($(CC_VERSION),sun) - REQUIRED_CC_VER = 5.10 - endif - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 3.4.3 - endif - endif - REQUIRED_GCC_VER = 2.95.2 -endif - -# Linux specific -ifeq ($(PLATFORM), linux) - REQUIRED_OS_NAME = Linux - REQUIRED_OS_VERSION = 2.6 - REQUIRED_OS_VARIANT_NAME = Fedora - REQUIRED_OS_VARIANT_VERSION = 9 - REQUIRED_ALSA_VERSION = 0.9.1 - REQUIRED_COMPILER_NAME = GCC4 - REQUIRED_COMPILER_VERSION = GCC4 - REQUIRED_GCC_VER = 2.95 - # Cross-compilation compiler versions are target specific - # so don't set a required version if cross-compiling - ifndef CROSS_COMPILE_ARCH - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 4.3.0 - endif - ifeq ($(CC_VERSION),sun) - REQUIRED_CC_VER = 5.10 - endif - endif -endif - -# Mac specific -ifeq ($(PLATFORM), macosx) - REQUIRED_OS_NAME = Darwin - REQUIRED_OS_VERSION = 11.2 - REQUIRED_OS_VARIANT_NAME = MacOSX - REQUIRED_OS_VARIANT_VERSION = 10.7.2 - REQUIRED_COMPILER_NAME = GCC4 - REQUIRED_COMPILER_VERSION = GCC4 - REQUIRED_CC_VER = 4.2.1 -endif - -# Windows specific -ifeq ($(PLATFORM), windows) - REQUIRED_OS_NAME = Windows - ifeq ($(ARCH_DATA_MODEL),64) - REQUIRED_OS_VERSION = 5.2 - REQUIRED_OS_VARIANT_NAME = Windows2003 - else - REQUIRED_OS_VERSION = 5.1 - REQUIRED_OS_VARIANT_NAME = WindowsXP - endif - REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION) - REQUIRED_CYGWIN_VER = 4.0 - REQUIRED_MKS_VER = 6.1 - REQUIRED_DXSDK_VER = 0x0900 - ifeq ($(CC_VERSION),msvc) - REQUIRED_COMPILER_NAME = Visual Studio 10 - REQUIRED_COMPILER_VERSION = VS2010 - REQUIRED_CC_VER = 16.00.30319.01 - REQUIRED_LINK_VER = 10.00.30319.01 - endif - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 3.4.3 - endif -endif - -# Generic -REQUIRED_ANT_VER = 1.7.1 -REQUIRED_BOOT_VER = 1.7 -REQUIRED_FREETYPE_VERSION = 2.3.0 -REQUIRED_MAKE_VER = 3.81 -REQUIRED_UNZIP_VER = 5.12 -REQUIRED_ZIP_VER = 2.2 - diff --git a/jdk/makefiles/common/shared/Defs-windows.gmk b/jdk/makefiles/common/shared/Defs-windows.gmk deleted file mode 100644 index da796ee3f9f..00000000000 --- a/jdk/makefiles/common/shared/Defs-windows.gmk +++ /dev/null @@ -1,696 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Windows. -# - -# Default for COMPILER_WARNINGS_FATAL on Windows (C++ compiler warnings) -# Level: Default is 3, 0 means none, 4 is the most but may be unreliable -# Some makefiles may have set this to 0 to turn off warnings completely, -# which also effectively creates a COMPILER_WARNINGS_FATAL=false situation. -# Program.gmk may turn this down to 2 (building .exe's). -# Windows 64bit platforms are less likely to be warning free. -# Historically, Windows 32bit builds should be mostly warning free. -# VS2010 introduced a large number of security warnings that are off by -# default but will be turned back on with SHOW_ALL_WARNINGS=true. -ifndef COMPILER_WARNING_LEVEL - COMPILER_WARNING_LEVEL=3 -endif -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif -ifndef SHOW_ALL_WARNINGS - SHOW_ALL_WARNINGS = false -endif - -# Windows should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = normal -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -# (This may not be working on windows yet, always force to false.) -override INCREMENTAL_BUILD = false - -# WARNING: This is extremely touch stuff, between CYGWIN vs. MKS and all -# variations of MKS and CYGWIN releases, and 32bit vs 64bit, -# this file can give you nightmares. -# -# Notes: -# Keep all paths in the windows "mixed" style except CYGWIN UNXIXCOMMAND_PATH. -# Use of PrefixPath is critical, some variables must end with / (see NOTE). -# Use of quotes is critical due to possible spaces in paths coming from -# the environment variables, be careful. -# First convert \ to / with subst, keep it quoted due to blanks, then -# use cygpath -s or dosname -s to get the short non-blank name. -# If the MKS is old and doesn't have a dosname -s, you will be forced -# to set ALT variables with the short non-space directory names. -# If dosname doesn't appear to work, we won't use it. -# The dosname utility also wants to accept stdin if it is not supplied -# any path on the command line, this is really dangerous when using -# make variables that can easily become empty, so I use: -# echo $1 | dosname -s instead of dosname -s $1 -# to prevent dosname from hanging up the make process when $1 is empty. -# The cygpath utility does not have this problem. -# The ALT values should never really have spaces or use \. -# Suspect these environment variables to have spaces and/or \ characters: -# SYSTEMROOT, SystemRoot, WINDIR, windir, PROGRAMFILES, ProgramFiles, -# DXSDK_DIR, MSTOOLS, Mstools, MSSDK, MSSdk, VCnnCOMNTOOLS, -# MSVCDIR, MSVCDir. -# So use $(subst \,/,) on them first adding quotes and placing them in -# their own variable assigned with :=, then use FullPath. -# - -ifdef USING_CYGWIN -# Macro to effectively do a toupper without an exec -define ToUpper -$(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,$(subst f,F,\ -$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,$(subst k,K,$(subst l,L,\ -$(subst m,M,$(subst n,N,$(subst o,O,$(subst p,P,$(subst q,Q,$(subst r,R,\ -$(subst s,S,$(subst t,T,$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,\ -$(subst y,Y,$(subst z,Z,$1)))))))))))))))))))))))))) -endef -# All possible drive letters -drives=a b c d e f g h i j k l m n o p q r s t v u w x y z -# Convert /cygdrive/ paths to the mixed style without an exec of cygpath -# Must be a path with no spaces. /cygdrive/letter is always lowercase -# and letter:/ is always uppercase coming from cygpath. -define MixedPath -$(patsubst /%,$(CYGWIN_HOME)/%,$(sort $(filter-out /cygdrive/%,$(foreach drive,$(drives),$(patsubst /cygdrive/$(drive)/%,$(call ToUpper,$(drive)):/%,$1))))) -endef -# Use FullPath to get C:/ style non-spaces path. Never ends with a /! -# We assume cygpath is available in the search path -# NOTE: Use of 'pwd' with CYGWIN will not get you a mixed style path! -define FullPath -$(if $(word 2,$1),$(shell $(CYGPATH_CMD) $1 2> $(DEV_NULL)),$(call MixedPath,$(realpath $(subst ",,$1)))) -endef -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then $(CYGPATH_CMD) "$1" 2> $(DEV_NULL); else echo "$1"; fi) -endef -else -# Temporary until we upgrade to MKS 8.7, MKS pwd returns mixed mode path -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef -endif - -# System drive -ifdef SYSTEMDRIVE - _system_drive =$(SYSTEMDRIVE) -else - ifdef SystemDrive - _system_drive =$(SystemDrive) - endif -endif -_system_drive:=$(call CheckValue,_system_drive,C:) - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -# With cygwin, just use this as is don't use FullPath on it. -ifdef ALT_UNIXCOMMAND_PATH - ifdef USING_CYGWIN - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) - else - xALT_UNIXCOMMAND_PATH :="$(subst \,/,$(ALT_UNIXCOMMAND_PATH))" - fxALT_UNIXCOMMAND_PATH :=$(call FullPath,$(xALT_UNIXCOMMAND_PATH)) - UNIXCOMMAND_PATH :=$(call PrefixPath,$(fxALT_UNIXCOMMAND_PATH)) - endif -else - ifdef USING_CYGWIN - UNIXCOMMAND_PATH :=$(call PrefixPath,/usr/bin) - else - ifdef ROOTDIR - xROOTDIR :="$(subst \,/,$(ROOTDIR))" - _rootdir :=$(call FullPath,$(xROOTDIR)) - else - xROOTDIR :="$(_system_drive)/mksnt" - _rootdir :=$(call FullPath,$(xROOTDIR)) - endif - ifneq ($(_rootdir),) - UNIXCOMMAND_PATH :=$(call PrefixPath,$(_rootdir)/mksnt) - endif - endif -endif -UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH) - -# Get version of MKS or CYGWIN -ifndef USING_CYGWIN -_MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@') -MKS_VER :=$(call GetVersion,$(_MKS_VER)) -# At this point, we can re-define FullPath to use DOSNAME_CMD -CHECK_MKS87:=$(call CheckVersions,$(MKS_VER),8.7) -TRY_DOSNAME:=false -ifeq ($(CHECK_MKS87),same) -TRY_DOSNAME:=true -endif -# Newer should be ok -ifeq ($(CHECK_MKS87),newer) -TRY_DOSNAME:=true -endif -ifeq ($(TRY_DOSNAME),true) -ifeq ($(shell $(UNIXCOMMAND_PATH)dosname -s $(_system_drive)/ 2> $(DEV_NULL)),$(_system_drive)/) -_DOSNAME=$(UNIXCOMMAND_PATH)dosname -DOSNAME_CMD:=$(_DOSNAME) -s -define FullPath -$(subst //,/,$(shell echo $1 | $(DOSNAME_CMD) 2> $(DEV_NULL))) -endef -endif # test dosname -s -endif # TRY_DOSNAME -endif # MKS - -# We try to get references to what we need via the default component -# environment variables, or what was used historically. - -# Process Windows values into FullPath values, these paths may have \ chars - -# System root -ifdef SYSTEMROOT - xSYSTEMROOT :="$(subst \,/,$(SYSTEMROOT))" - _system_root :=$(call FullPath,$(xSYSTEMROOT)) -else - ifdef SystemRoot - xSYSTEMROOT :="$(subst \,/,$(SystemRoot))" - _system_root :=$(call FullPath,$(xSYSTEMROOT)) - else - ifdef WINDIR - xWINDIR :="$(subst \,/,$(WINDIR))" - _system_root :=$(call FullPath,$(xWINDIR)) - else - ifdef windir - xWINDIR :="$(subst \,/,$(windir))" - _system_root :=$(call FullPath,$(xWINDIR)) - endif - endif - endif -endif -_system_root:=$(call CheckValue,_system_root,$(_system_drive)/WINNT) - -# Program Files directory -ifdef PROGRAMFILES - xPROGRAMFILES :="$(subst \,/,$(PROGRAMFILES))" -else - ifeq ($(ARCH_DATA_MODEL), 32) - xPROGRAMFILES :="$(_system_drive)/Program Files" - else - xPROGRAMFILES :="$(_system_drive)/Program Files (x86)" - endif -endif -ifeq ($(ARCH_DATA_MODEL), 32) - _program_files :=$(call FullPath,$(xPROGRAMFILES)) - _program_files32 :=$(_program_files) -else - ifdef PROGRAMW6432 - xPROGRAMW6432 :="$(subst \,/,$(PROGRAMW6432))" - else - xPROGRAMW6432 :="$(_system_drive)/Program Files" - endif - _program_files :=$(call FullPath,$(xPROGRAMW6432)) - _program_files32 :=$(call FullPath,$(xPROGRAMFILES)) - ifneq ($(word 1,$(_program_files32)),$(_program_files32)) - _program_files32:= - endif -endif -ifneq ($(word 1,$(_program_files)),$(_program_files)) - _program_files:= -endif - -# DirectX SDK -ifdef ALT_DXSDK_DRIVE - _dx_sdk_dir =$(ALT_DXSDK_DRIVE):/DXSDK -else - ifdef DXSDK_DIR - xDXSDK_DIR :="$(subst \,/,$(DXSDK_DIR))" - else - xDXSDK_DIR :="$(_system_drive)/DXSDK" - endif - _dx_sdk_dir :=$(call FullPath,$(xDXSDK_DIR)) -endif - -# Use of the Visual Studio compilers requires certain env variables be set: -# PATH should include the path to cl.exe -# INCLUDE should be defined -# LIB should be defined -# LIBPATH should be defined -# VS100COMNTOOLS should be defined -# WINDOWSSDKDIR should be defined -# The 7.0a path is from VS2010 Pro, the 7.1 path is the standalone SDK. -# For 64bit either will work for us. -# If a developer chooses to install the standalone SDK in some other -# location, then they need to set WINDOWSSDKDIR. -# -# Compilers for 64bit may be from the free SDK, or Visual Studio Professional. -# The free Express compilers don't contain 64 bit compilers, which is why -# you instead need the SDK. -# Release enginering will use VS2010 Pro, so the frequency of testing of -# SDK based builds will depend entirely on individual usage. - -# We only need to do this once -ifndef VS2010_EXISTS - # The 2 key paths we need are WINDOWSSDKDIR and VS100COMNTOOLS. - # If not defined try to see if default location exists. - # If defined make sure that the path has no spaces. - # Finally, export path with no spaces so logic minimizes FullPath calls. - ifndef WINDOWSSDKDIR - # The 7.0a SDK is the second choice. - xWINDOWSSDKDIR :="$(_program_files32)/Microsoft SDKs/Windows/v7.0a/" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - # The 7.1 SDK is the second choice. - ifeq ($(fWINDOWSSDKDIR),) - xWINDOWSSDKDIR :="$(_program_files32)/Microsoft SDKs/Windows/v7.1/" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - endif - else - ifneq ($(word 2,$(WINDOWSSDKDIR)),) - xWINDOWSSDKDIR :="$(subst \,/,$(WINDOWSSDKDIR))" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - else - fWINDOWSSDKDIR :=$(WINDOWSSDKDIR) - endif - endif - ifneq ($(fWINDOWSSDKDIR),) - WINDOWSSDKDIR :=$(fWINDOWSSDKDIR)/ - endif - ifndef VS100COMNTOOLS - xVS100COMNTOOLS :="$(_program_files32)/Microsoft Visual Studio 10.0/Common7/Tools/" - fVS100COMNTOOLS :=$(call FullPath,$(xVS100COMNTOOLS)) - else - xVS100COMNTOOLS :="$(subst \,/,$(VS100COMNTOOLS))" - ifneq ($(word 2,$(VS100COMNTOOLS)),) - fVS100COMNTOOLS :=$(call FullPath,$(xVS100COMNTOOLS)) - else - fVS100COMNTOOLS :=$(xVS100COMNTOOLS) - endif - endif - ifneq ($(fVS100COMNTOOLS),) - VS100COMNTOOLS :=$(fVS100COMNTOOLS)/ - endif - # Check to see that both exist - ifeq ($(WINDOWSSDKDIR),) - _vs2010_message := No WINDOWSSDKDIR found on system. $(_vs2010_message) - VS2010_EXISTS := false - endif - ifeq ($(VS100COMNTOOLS),) - _vs2010_message := No VS100COMNTOOLS found on system. $(_vs2010_message) - VS2010_EXISTS := false - endif - ifeq ($(VS2010_EXISTS),false) - x:=$(warning WARNING: No VS2010 available. $(_vs2010_message)) - VS100COMNTOOLS := - WINDOWSSDKDIR := - else - VS2010_EXISTS := true - _msvc_dir :=$(VS100COMNTOOLS)/../../Vc - endif - export VS2010_EXISTS - export VS100COMNTOOLS - export WINDOWSSDKDIR -endif - -ifneq ($(VS2010_EXISTS),true) - x:=$(error ERROR: No VS2010 found on system.) -endif - -# VS2010 Compiler root directory -_msvc_dir :=$(VS100COMNTOOLS)/../../Vc -# SDK root directory -_ms_sdk :=$(WINDOWSSDKDIR) -# Compiler bin directory and redist directory -ifeq ($(ARCH_DATA_MODEL), 32) - _compiler_bin :=$(_msvc_dir)/Bin - _redist_sdk :=$(call FullPath,$(_msvc_dir)/redist/x86/Microsoft.VC100.CRT) -endif -ifeq ($(ARCH_DATA_MODEL), 64) - _compiler_bin :=$(_msvc_dir)/bin/amd64 - _redist_sdk :=$(call FullPath,$(_msvc_dir)/redist/x64/Microsoft.VC100.CRT) -endif -ifeq ($(_redist_sdk),) - _redist_sdk :=$(_system_root)/system32 -endif - -# Location on system where jdk installs might be -ifneq ($(_program_files),) - USRJDKINSTANCES_PATH =$(_program_files)/Java -else - USRJDKINSTANCES_PATH =$(_system_drive)/ -endif - -# SLASH_JAVA: location of all network accessable files -# NOTE: Do not use FullPath on this because it's often a drive letter and -# plain drive letters are ambiguous, so just use this 'as is'. -ifdef ALT_SLASH_JAVA - xALT_SLASH_JAVA :="$(subst \,/,$(ALT_SLASH_JAVA))" - SLASH_JAVA :=$(xALT_SLASH_JAVA) -else - ifdef ALT_JDK_JAVA_DRIVE - SLASH_JAVA =$(JDK_JAVA_DRIVE) - else - SLASH_JAVA =J: - endif -endif -#SLASH_JAVA:=$(call AltCheckSpaces,SLASH_JAVA) - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - xALT_JDK_DEVTOOLS_DIR :="$(subst \,/,$(ALT_JDK_DEVTOOLS_DIR))" - JDK_DEVTOOLS_DIR :=$(call FullPath,$(xALT_JDK_DEVTOOLS_DIR)) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif -JDK_DEVTOOLS_DIR:=$(call AltCheckSpaces,JDK_DEVTOOLS_DIR) - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_COMPILER_PATH - xALT_COMPILER_PATH :="$(subst \,/,$(ALT_COMPILER_PATH))" - fxALT_COMPILER_PATH :=$(call FullPath,$(xALT_COMPILER_PATH)) - COMPILER_PATH :=$(call PrefixPath,$(fxALT_COMPILER_PATH)) -else - COMPILER_PATH :=$(call PrefixPath,$(_compiler_bin)) -endif -COMPILER_PATH :=$(call AltCheckSpaces,COMPILER_PATH) - -# MSDEVTOOLS_PATH: path to where the additional MS Compiler tools are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_MSDEVTOOLS_PATH - xALT_MSDEVTOOLS_PATH :="$(subst \,/,$(ALT_MSDEVTOOLS_PATH))" - fxALT_MSDEVTOOLS_PATH :=$(call FullPath,$(xALT_MSDEVTOOLS_PATH)) - MSDEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_MSDEVTOOLS_PATH)) -else - ifeq ($(ARCH_DATA_MODEL), 64) - ifdef MSTOOLS - xMSTOOLS :="$(subst \,/,$(MSTOOLS))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - ifdef Mstools - xMSTOOLS :="$(subst \,/,$(Mstools))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - _ms_tools := - endif - endif - ifneq ($(_ms_tools),) - _ms_tools_bin :=$(_ms_tools)/Bin - else - # Assumes compiler bin is .../Bin/win64/x86/AMD64, rc.exe is 3 levels up - _ms_tools_bin :=$(_compiler_bin)/../../.. - endif - else - _ms_tools_bin :=$(_compiler_bin) - endif - MSDEVTOOLS_PATH :=$(call PrefixPath,$(_ms_tools_bin)) -endif -MSDEVTOOLS_PATH:=$(call AltCheckSpaces,MSDEVTOOLS_PATH) - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_DEVTOOLS_PATH - xALT_DEVTOOLS_PATH :="$(subst \,/,$(ALT_DEVTOOLS_PATH))" - fxALT_DEVTOOLS_PATH :=$(call FullPath,$(xALT_DEVTOOLS_PATH)) - DEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_DEVTOOLS_PATH)) -else - ifdef USING_CYGWIN - DEVTOOLS_PATH :=$(UNIXCOMMAND_PATH) - else - xDEVTOOLS_PATH :="$(_system_drive)/utils" - fxDEVTOOLS_PATH :=$(call FullPath,$(xDEVTOOLS_PATH)) - DEVTOOLS_PATH :=$(call PrefixPath,$(fxDEVTOOLS_PATH)) - endif -endif -DEVTOOLS_PATH:=$(call AltCheckSpaces,DEVTOOLS_PATH) - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -# The _BOOTDIR3 is defind optionally. -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(_system_drive)/jdk$(PREVIOUS_JDK_VERSION) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) - _BOOTDIR3 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) -endif - -# Everybody needs the MSVCRNN runtime starting with VS2010 -_NEEDS_MSVCRNN = true - -ifeq ($(_NEEDS_MSVCRNN), true) - # MSVCRNN_DLL_PATH: location of msvcrnn.dll that will be re-distributed - ifdef ALT_MSVCRNN_DLL_PATH - xALT_MSVCRNN_DLL_PATH :="$(subst \,/,$(ALT_MSVCRNN_DLL_PATH))" - MSVCRNN_DLL_PATH :=$(call FullPath,$(xALT_MSVCRNN_DLL_PATH)) - else - MSVCRNN_DLL_PATH :=$(_redist_sdk) - endif - MSVCRNN_DLL_PATH :=$(call AltCheckSpaces,MSVCRNN_DLL_PATH) -endif - -# DXSDK_PATH: path to Microsoft DirectX SDK Include and Lib -ifdef ALT_DXSDK_PATH - xALT_DXSDK_PATH :="$(subst \,/,$(ALT_DXSDK_PATH))" - DXSDK_PATH :=$(call FullPath,$(xALT_DXSDK_PATH)) -else - _DXSDK_PATH1 :=$(_dx_sdk_dir) - _DXSDK_PATH2 :=$(JDK_DEVTOOLS_DIR)/windows/dxsdk - DXSDK_PATH :=$(call DirExists,$(_DXSDK_PATH1),$(_DXSDK_PATH2),$(_dx_sdk_dir)) -endif -DXSDK_PATH :=$(call AltCheckSpaces,DXSDK_PATH) - -# DXSDK_INCLUDE_PATH: path to Microsoft DirectX SDK Include -ifdef ALT_DXSDK_INCLUDE_PATH - xALT_DXSDK_INCLUDE_PATH :="$(subst \,/,$(ALT_DXSDK_INCLUDE_PATH))" - DXSDK_INCLUDE_PATH :=$(call FullPath,$(xALT_DXSDK_INCLUDE_PATH)) -else - DXSDK_INCLUDE_PATH =$(subst //,/,$(DXSDK_PATH)/Include) -endif - -# DXSDK_LIB_PATH: path to Microsoft DirectX SDK Lib -ifdef ALT_DXSDK_LIB_PATH - xALT_DXSDK_LIB_PATH :="$(subst \,/,$(ALT_DXSDK_LIB_PATH))" - DXSDK_LIB_PATH :=$(call FullPath,$(xALT_DXSDK_LIB_PATH)) -else - ifeq ($(ARCH_DATA_MODEL), 64) - # 64bit libs are located in "Lib/x64" subdir - DXSDK_LIB_PATH =$(subst //,/,$(DXSDK_PATH)/Lib/x64) - else - DXSDK_LIB_PATH =$(subst //,/,$(DXSDK_PATH)/Lib) - endif -endif - -# DEPLOY_MSSDK: Microsoft SDK for this platform (for deploy) -ifdef ALT_DEPLOY_MSSDK - xALT_DEPLOY_MSSDK :="$(subst \,/,$(ALT_DEPLOY_MSSDK))" - DEPLOY_MSSDK :=$(call FullPath,$(xALT_DEPLOY_MSSDK)) -else - DEPLOY_MSSDK :=$(_ms_sdk) -endif -DEPLOY_MSSDK:=$(call AltCheckSpaces,DEPLOY_MSSDK) - -# INSTALL_MSSDK: Microsoft Installer SDK for this platform (for install) -ifdef ALT_INSTALL_MSSDK - xALT_INSTALL_MSSDK :="$(subst \,/,$(ALT_INSTALL_MSSDK))" - INSTALL_MSSDK :=$(call FullPath,$(xALT_INSTALL_MSSDK)) -else - INSTALL_MSSDK :=$(_ms_sdk) -endif -INSTALL_MSSDK:=$(call AltCheckSpaces,INSTALL_MSSDK) - -# WSCRIPT: path to wscript.exe (used in creating install bundles) -ifdef ALT_WSCRIPT - xALT_WSCRIPT :="$(subst \,/,$(ALT_WSCRIPT))" - WSCRIPT =$(xALT_WSCRIPT) -else - _WSCRIPT1 :=$(_system_root)/system32/wscript.exe - _WSCRIPT2 :=$(DEVTOOLS_PATH)wscript.exe - WSCRIPT :=$(call FileExists,$(_WSCRIPT1),$(_WSCRIPT2)) -endif -WSCRIPT:=$(call AltCheckSpaces,WSCRIPT) -# batch mode no modal dialogs on errors, please. -WSCRIPT += -B - -# CSCRIPT: path to cscript.exe (used in creating install bundles) -ifdef ALT_CSCRIPT - xALT_CSCRIPT :="$(subst \,/,$(ALT_CSCRIPT))" - CSCRIPT =$(xALT_CSCRIPT) -else - _CSCRIPT1 :=$(_system_root)/system32/cscript.exe - _CSCRIPT2 :=$(DEVTOOLS_PATH)cscript.exe - CSCRIPT :=$(call FileExists,$(_CSCRIPT1),$(_CSCRIPT2)) -endif -CSCRIPT:=$(call AltCheckSpaces,CSCRIPT) - -# CABARC: path to cabarc.exe (used in creating install bundles) -ifdef ALT_CABARC - xALT_CABARC :="$(subst \,/,$(ALT_CABARC))" - CABARC =$(xALT_CABARC) -else - _CABARC1 :=$(_system_root)/system32/cabarc.exe - _CABARC2 :=$(DEVTOOLS_PATH)cabarc.exe - CABARC :=$(call FileExists,$(_CABARC1),$(_CABARC2)) -endif -CABARC:=$(call AltCheckSpaces,CABARC) - -# MSICERT: path to msicert.exe (used in creating install bundles) -ifdef ALT_MSICERT - xALT_MSICERT :="$(subst \,/,$(ALT_MSICERT))" - MSICERT =$(xALT_MSICERT) -else - _MSICERT1 :=$(INSTALL_MSSDK)/Bin/msicert.exe - _MSICERT2 :=$(DEVTOOLS_PATH)msicert.exe - MSICERT :=$(call FileExists,$(_MSICERT1),$(_MSICERT2)) -endif -MSICERT:=$(call AltCheckSpaces,MSICERT) - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif -BUILD_JDK_IMPORT_PATH:=$(call AltCheckSpaces,BUILD_JDK_IMPORT_PATH) - -# JDK_IMPORT_PATH: location of previously built JDK (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif -JDK_IMPORT_PATH:=$(call AltCheckSpaces,JDK_IMPORT_PATH) - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif - HOTSPOT_CLIENT_PATH:=$(call AltCheckSpaces,HOTSPOT_CLIENT_PATH) -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif -HOTSPOT_SERVER_PATH:=$(call AltCheckSpaces,HOTSPOT_SERVER_PATH) - -# HOTSPOT_LIB_PATH: location of jvm.lib file. -ifdef ALT_HOTSPOT_LIB_PATH - xALT_HOTSPOT_LIB_PATH :="$(subst \,/,$(ALT_HOTSPOT_LIB_PATH))" - HOTSPOT_LIB_PATH :=$(call FullPath,$(xALT_HOTSPOT_LIB_PATH)) -else - HOTSPOT_LIB_PATH =$(HOTSPOT_IMPORT_PATH)/lib -endif -HOTSPOT_LIB_PATH:=$(call AltCheckSpaces,HOTSPOT_LIB_PATH) - -# Special define for checking the binaries - -# All windows dll and exe files should have been built with /NXCOMPAT -# and be setup for dynamic base addresses. -# In addition, we should not be dependent on certain dll files that -# we do not or cannot redistribute. - -# List of filenames we should NOT be dependent on -ifeq ($(MFC_DEBUG),true) - BANNED_DLLS=msvcp100[.]dll -else - BANNED_DLLS=msvcp100[.]dll|msvcr100d[.]dll|msvcrtd[.]dll -endif - -# Check for /safeseh (only used on 32bit) -define binary_file_safeseh_verification # binary_file -( \ - $(ECHO) "Checking for /SAFESEH usage in: $1" && \ - if [ "`$(DUMPBIN) /loadconfig $1 | $(EGREP) -i 'Safe Exception Handler Table'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'Safe Exception Handler Table' in loadconfig: $1" ; \ - $(DUMPBIN) /loadconfig $1 ; \ - exit 6 ; \ - fi ; \ -) -endef - -# Check for /NXCOMPAT usage -define binary_file_nxcompat_verification # binary_file -( \ - $(ECHO) "Checking for /NXCOMPAT usage in: $1" && \ - if [ "`$(DUMPBIN) /headers $1 | $(EGREP) -i 'NX compatible'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'NX compatible' in headers: $1" ; \ - $(DUMPBIN) /headers $1 ; \ - exit 7 ; \ - fi ; \ -) -endef - -# Check for /DYNAMICBASE usage -define binary_file_dynamicbase_verification # binary_file -( \ - $(ECHO) "Checking for /DYNAMICBASE usage in: $1" && \ - if [ "`$(DUMPBIN) /headers $1 | $(EGREP) -i 'Dynamic base'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'Dynamic base' in headers: $1" ; \ - $(DUMPBIN) /headers $1 ; \ - exit 8 ; \ - fi ; \ -) -endef - -# Check for banned dll usage -define binary_file_dll_verification # binary_file -( \ - $(ECHO) "Checking for banned dependencies in: $1" && \ - if [ "`$(DUMPBIN) /dependents $1 | $(EGREP) -i '$(BANNED_DLLS)'`" != "" ] ; then \ - $(ECHO) "ERROR: Found use of $(BANNED_DLLS)"; \ - $(DUMPBIN) /dependents $1 ; \ - exit 9 ; \ - fi ; \ -) -endef - -# Macro to check it's input file for properly built executables. -# Relies on process exit code. Different for 32bit vs 64bit. -ifeq ($(ARCH_DATA_MODEL),32) -define binary_file_verification # binary_file -( \ - $(call binary_file_safeseh_verification,$1); \ - $(call binary_file_nxcompat_verification,$1); \ - $(call binary_file_dynamicbase_verification,$1); \ - $(call binary_file_dll_verification,$1); \ -) -endef -else -define binary_file_verification # binary_file -( \ - $(call binary_file_nxcompat_verification,$1); \ - $(call binary_file_dynamicbase_verification,$1); \ - $(call binary_file_dll_verification,$1); \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs.gmk b/jdk/makefiles/common/shared/Defs.gmk deleted file mode 100644 index 9a8236c495a..00000000000 --- a/jdk/makefiles/common/shared/Defs.gmk +++ /dev/null @@ -1,666 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for all platforms. -# -# Normally the convention is that these alternate definitions of -# primary make variables are never defined inside the Makefiles anywhere -# but are defined via environment variables or set on the make command -# line. So you should never see an ALT_* variable defined in any -# makefiles, just used. This is the convention and there are some -# exceptions, either mistakes or unusual circumstances. -# -# The naming convention for the default value of one of these variables -# that has an ALT_* override capability is to name the default value with a -# leading underscore (_). So for XXX you would have: -# _XXX default value -# ALT_XXX any override the user is providing if any -# XXX the final value, either the default _XXX or the ALT_XXX value. -# - -# On Directory names. In very rare cases should the Windows directory -# names use the backslash, please use the C:/ style of windows paths. -# Avoid duplicating the // characters in paths, this has known to cause -# strange problems with jar and other utilities, e.g. /a//b/ != /a/b/. -# Some of these variables have an explicit trailing / character, but in -# general, they should NOT have the trailing / character. - --include $(SPEC) --include $(VARS) - -# Get shared system utilities macros defined -include $(JDK_MAKE_SHARED_DIR)/Defs-utils.gmk - -# Assumes ARCH, PLATFORM, ARCH_VM_SUBDIR, JDK_TOPDIR, etc. have been defined. - -# Simple pwd path -# NOTE: Just use the shell's cd and pwd here, more reliable at sanity time. -define PwdPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef -define AbsPwdPathCheck -$(shell cd .. 2> $(DEV_NULL) && cd $1 2> $(DEV_NULL) && pwd) -endef - -# Checks an ALT value for spaces (should be one word), -# warns and returns Check_ALT_$1 if spaces -define AltCheckSpaces -$(if $(word 2,$($1)),$(warning "WARNING: Value of $1 contains a space: '$($1)', check or set ALT_$1")Check_ALT_$1,$($1)) -endef - -# Checks an ALT value for empty, warns and returns Check_ALT_$1 if empty -define AltCheckValue -$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, check or set ALT_$1")Check_ALT_$1) -endef - -# Checks any value for empty, warns and returns $2 if empty -define CheckValue -$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, will use '$2'")$2) -endef - -# Prefix for a utility prefix path, if empty leave alone, otherwise end with a / -define PrefixPath -$(if $1,$(subst //,/,$1/),) -endef - -# Select a directory if it exists, or the alternate 2 or the alternate 3 -define DirExists -$(shell \ - if [ -d "$1" ]; then \ - echo "$1"; \ - elif [ -d "$2" ]; then \ - echo "$2"; \ - else \ - echo "$3"; \ - fi) -endef - -# Select a directory if it exists, or the alternate 2, or the alternate 3, or the alternate 4 -define DirExists4 -$(shell \ - if [ -d "$1" ]; then \ - echo "$1"; \ - elif [ -d "$2" ]; then \ - echo "$2"; \ - elif [ -d "$3" ]; then \ - echo "$3"; \ - else \ - echo "$4"; \ - fi) -endef - - -# Select a writable directory if it exists and is writable, or the alternate -define WriteDirExists -$(shell \ - if [ -d "$1" -a -w "$1" ]; then \ - echo "$1"; \ - else \ - echo "$2"; \ - fi) -endef - -# Select a file if it exists, or the alternate 1, or the alternate 2 -define FileExists -$(shell \ - if [ -r "$1" ]; then \ - echo "$1"; \ - elif [ -r "$2" ]; then \ - echo "$2"; \ - else \ - echo "NO_FILE_EXISTS"; \ - fi) -endef - -# Given a line of text, get the version number from it -define GetVersion -$(shell echo $1 | sed -e 's@[^0-9]*\([0-9][0-9]*\.[0-9][.0-9]*\).*@\1@' ) -endef - -# Return one part of the version numbers, watch out for non digits. -define VersionWord # Number Version -$(word $1,$(subst ., ,$(subst -, ,$2))) -endef - -# Given a major.minor.micro version, return the major, minor, or micro number -define MajorVersion -$(if $(call VersionWord,1,$1),$(call VersionWord,1,$1),0) -endef -define MinorVersion -$(if $(call VersionWord,2,$1),$(call VersionWord,2,$1),0) -endef -define MicroVersion -$(if $(call VersionWord,3,$1),$(call VersionWord,3,$1),0) -endef - -# Macro that returns missing, same, newer, or older $1=version $2=required -define CheckVersions -$(shell \ - if [ "$1" = "" -o "$2" = "" ]; then \ - echo missing; \ - elif [ "$1" = "$2" ]; then \ - echo same; \ - elif [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \ - echo older; \ - elif [ $(call MajorVersion,$1) -gt $(call MajorVersion,$2) ] ; then \ - echo newer; \ - elif [ $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \ - echo older; \ - elif [ $(call MinorVersion,$1) -gt $(call MinorVersion,$2) ]; then \ - echo newer; \ - elif [ $(call MicroVersion,$1) -lt $(call MicroVersion,$2) ]; then \ - echo older; \ - elif [ $(call MicroVersion,$1) -gt $(call MicroVersion,$2) ]; then \ - echo newer; \ - else \ - echo same; \ - fi) -endef - -# Expand SRCDIR_LIST, which is used to automatically include various -# platform and shared sources/headers. This is mainly useful for the -# Mac OS X build, which pulls its platform sources from the solaris and/or -# macosx trees, depending on the component. -ifeq ($(PLATFORM), macosx) - define JavaSrcDirList - $(JAVA_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2) - endef - define NativeSrcDirList - $(NATIVE_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2) - endef -endif - -# Make sure certain variables are non-empty at this point -_check_values:=\ -$(call CheckValue,ARCH,),\ -$(call CheckValue,ARCH_DATA_MODEL,),\ -$(call CheckValue,ARCH_VM_SUBDIR,),\ -$(call CheckValue,JDK_TOPDIR,),\ -$(call CheckValue,JDK_MAKE_SHARED_DIR,),\ -$(call CheckValue,VARIANT,),\ -$(call CheckValue,PLATFORM,) - -# Misc common settings for all workspaces -# This determines the version of the product, and the previous version or boot -ifndef JDK_MAJOR_VERSION - JDK_MAJOR_VERSION = 1 - PREVIOUS_MAJOR_VERSION = 1 -endif - -ifndef JDK_MINOR_VERSION - JDK_MINOR_VERSION = 8 - PREVIOUS_MINOR_VERSION = 7 -endif - -ifndef JDK_MICRO_VERSION - JDK_MICRO_VERSION = 0 - PREVIOUS_MICRO_VERSION = 0 -endif - -ifndef MILESTONE - MILESTONE = internal -endif - -# Default names -ifdef OPENJDK - LAUNCHER_NAME = openjdk - PRODUCT_NAME = OpenJDK - PRODUCT_SUFFIX = Runtime Environment - JDK_RC_PLATFORM_NAME = Platform - COMPANY_NAME = N/A -else - LAUNCHER_NAME = java - PRODUCT_NAME = Java(TM) - PRODUCT_SUFFIX = SE Runtime Environment - JDK_RC_PLATFORM_NAME = Platform SE - COMPANY_NAME = Oracle Corporation -endif - -RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) - -ifndef BUILD_NUMBER - JDK_BUILD_NUMBER = b00 -else - ifndef JDK_BUILD_NUMBER - JDK_BUILD_NUMBER = $(BUILD_NUMBER) - endif -endif - -# Default variant is the optimized version of everything -# can be OPT or DBG, default is OPT -# Determine the extra pattern to add to the release name for debug/fastdebug. -# Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over. -# Determine suffix for obj directory or OBJDIR, for .o files. -# (by keeping .o files separate, just .o files, they don't clobber each -# other, however, the library files will clobber each other). -# -ifeq ($(VARIANT), DBG) - BUILD_VARIANT_RELEASE=-debug - OBJDIRNAME_SUFFIX=_g -else - BUILD_VARIANT_RELEASE= - OBJDIRNAME_SUFFIX= -endif -ifeq ($(FASTDEBUG), true) - VARIANT=DBG - BUILD_VARIANT_RELEASE=-fastdebug - OBJDIRNAME_SUFFIX=_gO - _JDK_IMPORT_VARIANT=/fastdebug -endif - -# Depending on the flavor of the build, add a -debug or -fastdebug to the name -ifdef DEBUG_NAME - BUILD_VARIANT_RELEASE=-$(DEBUG_NAME) -endif - -# These default values are redefined during a release build. -# CTE can set JDK_UPDATE_VERSION during the update release -ifdef JDK_UPDATE_VERSION - JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)_$(JDK_UPDATE_VERSION) - MARKETING_NUMBER := $(shell \ - $(ECHO) $(JDK_UPDATE_VERSION) | $(NAWK) '{if (substr($$0,1,1)=="0") print substr($$0, 2); else print $$0;}') - MARKET_NAME= $(shell $(ECHO) " Update $(MARKETING_NUMBER)") - JDK_MKTG_VERSION = $(JDK_MINOR_VERSION)u$(MARKETING_NUMBER) -else - JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) - JDK_MKTG_VERSION = $(JDK_MINOR_VERSION) - MARKET_NAME= -endif -JDK_UNDERSCORE_VERSION = $(subst .,_,$(JDK_VERSION)) -JDK_MKTG_UNDERSCORE_VERSION = $(subst .,_,$(JDK_MKTG_VERSION)) - -# RELEASE is JDK_VERSION and -MILESTONE if MILESTONE is set -ifneq ($(MILESTONE),fcs) - RELEASE = $(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE) -else - RELEASE = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE) -endif - -# FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set -ifdef BUILD_NUMBER - FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER) -else - BUILD_NUMBER = b00 - ifndef USER_RELEASE_SUFFIX - BUILD_DATE := $(shell $(DATE) '+%Y_%m_%d_%H_%M') - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME := $(shell $(ECHO) "$(USER)" | $(TR) -d -c 'abcdefghijklmnopqrstuvqxyz0123456789') - USER_RELEASE_SUFFIX := $(shell $(ECHO) "$(CLEAN_USERNAME)_$(BUILD_DATE)" | $(TR) 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz') - endif - export USER_RELEASE_SUFFIX - FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER) -endif - -# Promoted build location -PROMOTED_RE_AREA = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted -PROMOTED_BUILD_LATEST = latest -PROMOTED_BUILD_BASEDIR = $(PROMOTED_RE_AREA)/$(PROMOTED_BUILD_LATEST) -PROMOTED_BUILD_DISTDIR = $(PROMOTED_BUILD_BASEDIR)/dist/$(PLATFORM)-$(ARCH) -PROMOTED_BUILD_BINARIES = $(PROMOTED_BUILD_BASEDIR)/binaries - -# PARALLEL_COMPILE_JOBS: is the number of compiles done in parallel. -# If the user sets ALT_PARALLEL_COMPILE_JOBS, then COMPILE_APPROACH is set -# to parallel. -# -# Recommended setting: 2 seems to be ideal for single cpu machines, -# 2 times the number of CPU's is a basic formula, -# but probably not more than 4 if the machine is -# being shared by others, or the machine is limited -# in RAM or swap. -# -ifdef ALT_PARALLEL_COMPILE_JOBS - PARALLEL_COMPILE_JOBS=$(ALT_PARALLEL_COMPILE_JOBS) -else - PARALLEL_COMPILE_JOBS=2 -endif - -# Previous JDK release (version of BOOTDIR version) -ifdef ALT_PREVIOUS_JDK_VERSION - PREVIOUS_JDK_VERSION = $(ALT_PREVIOUS_JDK_VERSION) -else - PREVIOUS_JDK_VERSION = $(PREVIOUS_MAJOR_VERSION).$(PREVIOUS_MINOR_VERSION).$(PREVIOUS_MICRO_VERSION) -endif -export PREVIOUS_JDK_VERSION -PREVIOUS_JDK_VERSION:=$(call AltCheckSpaces,PREVIOUS_JDK_VERSION) - -# Version with _ instead of . in number -ifeq ($(PREVIOUS_MINOR_VERSION),5) - PREVIOUS_JDK_UNDERSCORE_VERSION = $(subst .,_,$(PREVIOUS_JDK_VERSION)) -else - PREVIOUS_JDK_UNDERSCORE_VERSION = $(PREVIOUS_MINOR_VERSION) -endif - -# Include any private definitions for this set of workspaces -_PRIVATE_DEFS_FILE=$(JDK_MAKE_SHARED_DIR)/PrivateDefs.gmk -ifeq ($(USING_PRIVATE_DEFS),) - USING_PRIVATE_DEFS:=$(shell if [ -f $(_PRIVATE_DEFS_FILE) ]; then echo true; else echo false; fi) -endif -ifeq ($(USING_PRIVATE_DEFS),true) -dummy:=$(warning "WARNING: Using definitions from $(_PRIVATE_DEFS_FILE)") -include $(_PRIVATE_DEFS_FILE) -endif - -# OUTPUTDIR: Location of all output for the build -ifdef ALT_OUTPUTDIR - OUTPUTDIR:=$(subst \,/,$(ALT_OUTPUTDIR)) - # Assumes this is absolute (checks later) - ABS_OUTPUTDIR:=$(OUTPUTDIR) -else - ifndef _OUTPUTDIR - # Default: Get "build" parent directory, which should always exist - ifndef BUILD_PARENT_DIRECTORY - BUILD_PARENT_DIRECTORY=$(BUILDDIR)/.. - endif - ifdef OPENJDK - _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH)$(OPENJDK_SUFFIX) - else - _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH) - endif - _OUTPUTDIR=$(BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME) - endif - OUTPUTDIR:=$(_OUTPUTDIR) -endif -# Check for spaces and null value -OUTPUTDIR:=$(call AltCheckSpaces,OUTPUTDIR) - -# Get platform specific settings -# NB: OUTPUTDIR must be defined. Otherwise hotspot import detection will not work correctly -# On other hand this must be included early as it provides platform specific defines such as FullPath -include $(JDK_MAKE_SHARED_DIR)/Defs-versions.gmk - -# Get platform specific settings (defines COMPILER_PATH) -include $(JDK_MAKE_SHARED_DIR)/Defs-$(PLATFORM).gmk - -# Components -ifdef ALT_LANGTOOLS_DIST - LANGTOOLS_DIST :=$(call FullPath,$(ALT_LANGTOOLS_DIST)) -else - LANGTOOLS_DIST = -endif -ifdef ALT_CORBA_DIST - CORBA_DIST :=$(call FullPath,$(ALT_CORBA_DIST)) -else - CORBA_DIST = -endif -ifdef ALT_JAXP_DIST - JAXP_DIST :=$(call FullPath,$(ALT_JAXP_DIST)) -else - JAXP_DIST = -endif -ifdef ALT_JAXWS_DIST - JAXWS_DIST :=$(call FullPath,$(ALT_JAXWS_DIST)) -else - JAXWS_DIST = -endif - -# HOTSPOT_DOCS_IMPORT_PATH: Path to hotspot docs files to import into the docs generation -ifdef ALT_HOTSPOT_DOCS_IMPORT_PATH - HOTSPOT_DOCS_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_DOCS_IMPORT_PATH)) -else - HOTSPOT_DOCS_IMPORT_PATH :=$(call DirExists,$(HOTSPOT_IMPORT_PATH)/docs,$(PROMOTED_BUILD_BASEDIR)/docs,/NO_DOCS_DIR) -endif - -# These are the same on all platforms but require the above platform include 1st - -# BOOTDIR: Bootstrap JDK, previous released JDK. -# _BOOTDIR1 and _BOOTDIR2 picked by platform -# Platform may optionally define _BOOTDIR3 as well. -ifdef ALT_BOOTDIR - BOOTDIR =$(ALT_BOOTDIR) -else - ifdef _BOOTDIR3 - BOOTDIR :=$(call DirExists4,$(_BOOTDIR1),$(_BOOTDIR2),$(_BOOTDIR3),/NO_BOOTDIR) - else - BOOTDIR :=$(call DirExists,$(_BOOTDIR1),$(_BOOTDIR2),/NO_BOOTDIR) - endif -endif -export BOOTDIR -BOOTDIR:=$(call AltCheckSpaces,BOOTDIR) - -# PREVIOUS_FCS_RE_AREA: re path to where previous release binaries/bundles are -PREVIOUS_FCS_RE_AREA = $(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs - -# PREVIOUS_RELEASE_IMAGE: Previous install image to compare against -ifdef ALT_PREVIOUS_RELEASE_IMAGE - - # Explicit image provided, no bundle access needed - PREVIOUS_RELEASE_IMAGE :=$(call FullPath,$(ALT_PREVIOUS_RELEASE_IMAGE)) - -else - - # PREVIOUS_RELEASE_PATH: path to where previous release bundles are - ifdef ALT_PREVIOUS_RELEASE_PATH - PREVIOUS_RELEASE_PATH :=$(call OptFullPath,$(ALT_PREVIOUS_RELEASE_PATH)) - else - PREVIOUS_RELEASE_PATH := \ - $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/bundles/$(PLATFORM)-$(ARCH),,) - endif - - # Depending on if we have access to these bundles - ifeq ($(PREVIOUS_RELEASE_PATH),) - # Use images in re area or BOOTDIR (which is normally the previous release) - PREVIOUS_RELEASE_IMAGE := \ - $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/binaries/$(PLATFORM)-$(ARCH),$(BOOTDIR),) - else - # Get names of and paths to bundles - PREVIOUS_RELEASE_PATH:=$(call AltCheckSpaces,PREVIOUS_RELEASE_PATH) - export PREVIOUS_RELEASE_PATH - - # PREVIOUS_JDK_FILE: filename of install bundle for previous JDK - ifdef ALT_PREVIOUS_JDK_FILE - PREVIOUS_JDK_FILE =$(ALT_PREVIOUS_JDK_FILE) - else - PREVIOUS_JDK_FILE = \ - jdk-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX) - endif - export PREVIOUS_JDK_FILE - PREVIOUS_JDK_FILE:=$(call AltCheckSpaces,PREVIOUS_JDK_FILE) - - # PREVIOUS_JRE_FILE: filename of install bundle for previous JRE - ifdef ALT_PREVIOUS_JRE_FILE - PREVIOUS_JRE_FILE =$(ALT_PREVIOUS_JRE_FILE) - else - PREVIOUS_JRE_FILE = \ - jre-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX) - endif - export PREVIOUS_JRE_FILE - PREVIOUS_JRE_FILE:=$(call AltCheckSpaces,PREVIOUS_JRE_FILE) - - # Paths to these bundles - PREVIOUS_JRE_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JRE_FILE) - PREVIOUS_JDK_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JDK_FILE) - endif - -endif - -# Indicate we are using an image comparison -ifneq ($(PREVIOUS_RELEASE_IMAGE),) - PREVIOUS_RELEASE_PATH = USING-PREVIOUS_RELEASE_IMAGE - PREVIOUS_JRE_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE - PREVIOUS_JDK_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE -endif - -# CACERTS_FILE: if OPENJDK is false and the internal version of the file -# (that is, non-empty) is available, use it, otherwise use an -# empty keystore. -# -# We put this variable here for sanity checks and in case another -# components will need to know which cacerts file is being used. -# -ifdef ALT_CACERTS_FILE - CACERTS_FILE = $(ALT_CACERTS_FILE) -else - CACERTS_EXT = $(SHARE_SRC)/lib/security/cacerts - ifdef OPENJDK - CACERTS_FILE :=$(CACERTS_EXT) - else # (!OPENJDK) - CACERTS_INT = $(CLOSED_SHARE_SRC)/lib/security/cacerts.internal - CACERTS_FILE :=$(call FileExists,$(CACERTS_INT),$(CACERTS_EXT)) - endif # (OPENJDK) -endif -CACERTS_FILE:=$(call AltCheckSpaces,CACERTS_FILE) - -# -# When signing the JCE framework and provider, we could be using built -# bits on a read-only filesystem. If so, this test will fail and crash -# the build. -# -ifndef IGNORE_WRITABLE_OUTPUTDIR_TEST -# Create the output directory and make sure it exists and is writable -_create_outputdir:=$(shell $(MKDIR) -p "$(OUTPUTDIR)" > $(DEV_NULL) 2>&1) -ifeq ($(call WriteDirExists,$(OUTPUTDIR),/dev/null),/dev/null) - _outputdir_error:=$(error "ERROR: OUTPUTDIR '$(OUTPUTDIR)' not created or not writable") -endif -endif - -# Define absolute path if needed and check for spaces and null value -ifndef ABS_OUTPUTDIR - ifdef _OUTPUTDIRNAME - #Could not define this at the same time as _OUTPUTDIRNAME as FullPath is not defined at that point - ABS_BUILD_PARENT_DIRECTORY:=$(call FullPath,$(BUILD_PARENT_DIRECTORY)) - ABS_OUTPUTDIR:=$(ABS_BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME) - else - ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR)) - endif -endif -ABS_OUTPUTDIR:=$(call AltCheckSpaces,ABS_OUTPUTDIR) -# Make doubly sure this is a full path -ifeq ($(call AbsPwdPathCheck,$(ABS_OUTPUTDIR)), ) - ifdef ALT_OUTPUTDIR - _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)', was ALT_OUTPUTDIR '$(ALT_OUTPUTDIR)' an absolute path?") - else - _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)'") - endif -endif -_dir1:=$(call FullPath,$(ABS_OUTPUTDIR)) -_dir2:=$(call FullPath,$(OUTPUTDIR)) -ifneq ($(_dir1),$(_dir2)) - _outputdir_error:=$(error "ERROR: ABS_OUTPUTDIR '$(ABS_OUTPUTDIR)' is not the same directory as OUTPUTDIR '$(OUTPUTDIR)', '$(_dir1)'!='$(_dir2)'") -endif - -# Bin directory -# NOTE: ISA_DIR is usually empty, on Solaris it might be /sparcv9 or /amd64 -BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR) - -# MOZILLA_HEADERS_PATH: path to mozilla header files for plugin -ifdef ALT_MOZILLA_HEADERS_PATH - MOZILLA_HEADERS_PATH :=$(call FullPath,$(ALT_MOZILLA_HEADERS_PATH)) -else - MOZILLA_HEADERS_PATH =$(JDK_DEVTOOLS_DIR)/share/plugin -endif -MOZILLA_HEADERS_PATH:=$(call AltCheckSpaces,MOZILLA_HEADERS_PATH) - -# CUPS_HEADERS_PATH: path to Cups headers files for Unix printing -#ifneq ($(PLATFORM), windows) -#JDK_CUPS_HEADERS_PATH=$(JDK_DEVTOOLS_DIR)/share/cups/include -# ifdef ALT_CUPS_HEADERS_PATH -# CUPS_HEADERS_PATH:=$(call FullPath,$(ALT_CUPS_HEADERS_PATH)) -# CUPS_HEADERS_PATH:=$(call AltCheckValue,CUPS_HEADERS_PATH) -# else -# CUPS_HEADERS_PATH:= \ -# $(shell if [ -d "$(JDK_CUPS_HEADERS_PATH)" ]; then \ -# echo "$(JDK_CUPS_HEADERS_PATH)"; \ -# else \ -# echo "$(_CUPS_HEADERS_PATH)";\ -# fi) -# endif -#endif - -# Utilities ant -ifeq ($(PLATFORM), windows) - ifeq ($(ANT_HOME),) - ANT_HOME := $(call DirExists,$(JDK_DEVTOOLS_DIR)/share/ant/latest,,) - endif -endif - -# There are few problems with ant we need to workaround: -# 1) ant is using temporary directory java.io.tmpdir -# However, this directory is not unique enough and two separate ant processes -# can easily end up using the exact same temp directory. This may lead to weird build failures -# To workaround this we will define tmp dir explicitly -# 2) ant attempts to detect JDK location based on java.exe location -# This is fragile as developer may have JRE first on the PATH. -# To workaround this we will specify JAVA_HOME explicitly - -ANT_TMPDIR = $(ABS_OUTPUTDIR)/tmp -ANT_WORKAROUNDS = ANT_OPTS=-Djava.io.tmpdir='$(ANT_TMPDIR)' JAVA_HOME='$(BOOTDIR)' - -ifeq ($(ANT_HOME),) - ANT = $(ANT_WORKAROUNDS) ant -else - ANT = $(ANT_WORKAROUNDS) $(ANT_HOME)/bin/ant -endif - -ifdef ALT_COPYRIGHT_YEAR - COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) -else - COPYRIGHT_YEAR = $(shell $(DATE) '+%Y') -endif - -# Create file with source information -SOURCE_TIPS=$(ABS_OUTPUTDIR)/source_tips - -# The source tips can come from the Mercurial repository, or in the files -# $(HGTIP_FILENAME) which contains the tip but is also positioned in the same -# directory as the original $(HGDIR) directory. -# These should not be := assignments, only used from the root Makefile. -HG_VERSION = $(shell $(HG) version 2> $(DEV_NULL)) -HG_DIRECTORY=.hg -HGTIP_FILENAME=.hgtip -HG_SEARCH = ./REPO ./*/REPO ./*/*/REPO ./*/*/*/REPO -REPO_LIST = $(patsubst ./%,%,$(patsubst %/,%,$(sort $(dir \ - $(shell ( $(LS) -d $(HG_SEARCH:%/REPO=%/$(HG_DIRECTORY)) ; \ - $(LS) $(HG_SEARCH:%/REPO=%/$(HGTIP_FILENAME)) ) \ - 2> $(DEV_NULL)))))) - -# Emit the repo:tip pairs to $@ -define GetSourceTips -for i in $(REPO_LIST) IGNORE ; do \ - if [ "$${i}" = "IGNORE" ] ; then \ - continue; \ - elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \ - $(PRINTF) " %s:%s" \ - "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \ - elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \ - $(PRINTF) " %s:%s" \ - "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \ - fi; \ -done >> $@ -$(PRINTF) "\n" >> $@ -endef - -# Create the HGTIP_FILENAME file -define CreateHgTip -$(HG) tip --repository $1 --template '{node|short}\n' > $1/$(HGTIP_FILENAME);\ -$(ECHO) $1/$(HGTIP_FILENAME) -endef - -# Get the compiler specific settings (will run the compiler to find out) -# NOTE: COMPILER_PATH must be set by this time. -# Up until we include this file, we don't know what specific compiler -# version is actually being used (i.e. what is in PATH or COMPILER_PATH). -include $(JDK_MAKE_SHARED_DIR)/Compiler-$(CC_VERSION).gmk - diff --git a/jdk/makefiles/common/shared/Platform.gmk b/jdk/makefiles/common/shared/Platform.gmk deleted file mode 100644 index 56ee0195d14..00000000000 --- a/jdk/makefiles/common/shared/Platform.gmk +++ /dev/null @@ -1,526 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Shared platform (OS/ARCH) variable settings for the JDK builds. -# -# Includes basic system requirements, versions of utilities required, -# suffixes on files, and basic defaults attributed to the build platform. -# - -# -# Assumes some basic unix system utilities (e.g. uname) are in the search path -# in order to figure out the system. -# - -ifndef PLATFORM_SHARED - -PLATFORM_SHARED=done - -# Possible Input variables: -# ARCH_DATA_MODEL 32 or 64, default to 32 -# USER, LOGNAME user name (runs logname, or id if not set) -# PROCESSOR_IDENTIFIER windows only: needed in environment -# -# (Also gets input by running the utilities uname, logname, isainfo, or id.) -# -# Variables set by this file: -# SYSTEM_UNAME what 'uname' says this system is -# USER login name of user (minus blanks) -# PLATFORM windows, solaris, or linux -# VARIANT OPT or DBG, OPT is the default -# TEMP_DISK /tmp or C:/temp -# ARCH_DATA_MODEL 32 or 64 -# ARCH sparc, sparcv9, i586, amd64, or ia64 -# ARCH_FAMILY sparc or i586 -# ARCHPROP sparc or x86 -# ARCH_VM_SUBDIR jre/bin, jre/lib/sparc, etc. -# LIBARCH sparc, sparcv9, i386, amd64, or ia64 -# DEV_NULL destination of /dev/null, NUL or /dev/NULL -# CLASSPATH_SEPARATOR separator in classpath, ; or : -# LIB_PREFIX dynamic or static library prefix, lib or empty -# LIB_SUFFIX static library file suffix, .lib or .a? -# LIBRARY_SUFFIX dynamic library file suffix, .dll or .so -# OBJECT_SUFFIX object file suffix, .o or .obj -# EXE_SUFFIX executable file suffix, .exe or empty -# BUNDLE_FILE_SUFFIX suffix for bundles: .tar or .tar.gz -# ISA_DIR solaris only: /sparcv9 or /amd64 -# LIBARCH32 solaris only: sparc or i386 -# LIBARCH64 solaris only: sparcv9 or amd64 -# USING_CYGWIN windows only: true or false -# ISHIELD_TEMP_MIN windows only: minimum disk space in temp area - -# Only run uname once in this make session. -ifndef SYSTEM_UNAME - SYSTEM_UNAME := $(shell uname) - export SYSTEM_UNAME -endif - -# -# Prune out all known SCM (Source Code Management) directories -# so they will not be included when copying directory trees -# or packaging up .jar files, etc. This applies to all workspaces. -# -SCM_DIRs = .hg .svn CVS RCS SCCS Codemgr_wsdata deleted_files .hgignore .hgtags -# When changing SCM_DIRs also change SCM_DIRS_rexp and SCM_DIRS_prune: -SCM_DIRS_rexp = ".hg|.svn|CVS|RCS|SCCS|Codemgr_wsdata|deleted_files|.hgignore|.hgtags" -SCM_DIRS_prune = \( -name .hg -o -name .svn -o -name CVS -o -name RCS -o -name SCCS -o -name Codemgr_wsdata -o -name deleted_files -o -name .hgignore -o -name .hgtags \) -prune - -# Don't define this unless it's not defined -ifndef VARIANT - VARIANT=OPT -endif - -# Platform settings specific to Solaris -ifeq ($(SYSTEM_UNAME), SunOS) - PLATFORM = solaris - # Solaris sparc build can be either 32-bit or 64-bit. - # Default to 32, but allow explicit setting to 32 or 64. - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - endif - ifeq ($(ARCH_DATA_MODEL), 32) - processor := $(shell uname -p) - archExpr = case "$(processor)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - *) \ - echo $(processor) \ - ;; \ - esac - ARCH := $(shell $(archExpr)) - else - ARCH := $(shell isainfo -n) - # ISA_DIR is used to locate 64-bit specific libraries which are generally - # in the same general place as other libraries under the ./$(ARCH) directory - ISA_DIR = /$(ARCH) - endif - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - ARCH_FAMILY = $(ARCH) - LIBARCH = i386 - # Value of Java os.arch property - ARCHPROP = x86 - else - ifeq ($(ARCH), amd64) - ARCH_FAMILY = i586 - else - ARCH_FAMILY = sparc - endif - LIBARCH = $(ARCH) - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - endif - # The two LIBARCH names - ifeq ($(ARCH_FAMILY), sparc) - LIBARCH32 = sparc - LIBARCH64 = sparcv9 - else - LIBARCH32 = i386 - LIBARCH64 = amd64 - endif - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar - # How much RAM does this machine have (zones send an error to stderr): - MB_OF_MEMORY:=$(shell /usr/sbin/prtconf 2>/dev/null | fgrep 'Memory size:' | expand | cut -d' ' -f3) -endif - -# Platform settings specific to Linux -ifeq ($(SYSTEM_UNAME), Linux) - PLATFORM = linux - # Arch and OS name/version - ifdef CROSS_COMPILE_ARCH - mach := $(CROSS_COMPILE_ARCH) - else - mach := $(shell uname -m) - endif - archExpr = case "$(mach)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - ia64) \ - echo ia64 \ - ;; \ - x86_64) \ - echo amd64 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - arm*) \ - echo arm \ - ;; \ - *) \ - echo $(mach) \ - ;; \ - esac - ARCH := $(shell $(archExpr) ) - ARCH_FAMILY := $(ARCH) - - # Linux builds may be 32-bit or 64-bit data model. - ifeq ($(ARCH), sparc) - # Linux sparc build can be either 32-bit or 64-bit. - # Default to 32, but allow explicit setting to 32 or 64. - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - endif - ifeq ($(ARCH_DATA_MODEL), 32) - ARCH=sparc - else - ARCH=sparcv9 - endif - else - # Most archs are 32-bit - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - ifeq ($(ARCH), amd64) - ARCH_DATA_MODEL=64 - endif - ifeq ($(ARCH), ia64) - ARCH_DATA_MODEL=64 - endif - endif - endif - - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - LIBARCH = i386 - else - LIBARCH = $(ARCH) - endif - - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar.gz - # How much RAM does this machine have: - MB_OF_MEMORY := $(shell free -m | fgrep Mem: | awk '{print $$2;}' ) -endif - -ifeq ($(SYSTEM_UNAME), Darwin) - PLATFORM = macosx - OS_NAME = darwin - OS_VENDOR = Apple - GB_OF_MEMORY := $(shell system_profiler SPHardwareDataType | fgrep Memory: | awk '{print $$2}') - MB_OF_MEMORY := $(shell expr ${GB_OF_MEMORY} '*' 1024) -endif - -# Platform settings specific to BSD/Mac OS X -ifeq ($(PLATFORM), macosx) - OS_VERSION := $(shell uname -r) - - # Arch and OS name/version - # Darwin x86 builds are i386/amd64 universal by default. - # Allow arch to be set from the environment to avoid this. - ifeq ($(origin ARCH), undefined) - ifeq ($(PLATFORM), macosx) -# ifdef OPENJDK -- when universal 32/64 binaries available in Hotspot -# mach := universal -# else - mach := x86_64 -# endif - else - mach := $(shell uname -m) - endif - else - mach := $(ARCH) - endif - - archExpr = case "$(mach)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - sparc64) \ - echo sparcv9 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - x86_64) \ - echo amd64 \ - ;; \ - universal) \ - echo universal \ - ;; \ - "Power Macintosh") \ - echo ppc \ - ;; \ - *) \ - echo $(mach) \ - ;; \ - esac - ARCH := $(shell $(archExpr) ) - ARCH_FAMILY := $(ARCH) - - # i586, sparc, and ppc are 32 bit, amd64 and sparc64 are 64 - # ARCH_DATA_MODEL does not exactly mean anything in universal - # but it has to be one or the other, so pick 32 - ifneq (,$(findstring $(ARCH), i586 sparc ppc universal)) - ARCH_DATA_MODEL=32 - else - ARCH_DATA_MODEL=64 - endif - - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - LIBARCH = i386 - else - LIBARCH = $(ARCH) - endif - - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar.gz - # How much RAM does this machine have: -endif - -# Windows with and without CYGWIN will be slightly different -ifeq ($(SYSTEM_UNAME), Windows_NT) - PLATFORM = windows -endif -ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME))) - PLATFORM = windows - USING_CYGWIN = true - export USING_CYGWIN - CYGPATH_CMD=cygpath -a -s -m - # Only run "cygpath /" once in this make session. - ifndef CYGWIN_HOME - CYGWIN_HOME := $(shell $(CYGPATH_CMD) /) - export CYGWIN_HOME - endif -endif - -# Platform settings specific to Windows -ifeq ($(PLATFORM), windows) - # Windows builds default to the appropriate for the underlaying - # architecture. - # Temporary disk area - TEMP_DISK=C:/temp - # GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always - # return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead. - # And sometimes PROCESSOR_IDENTIFIER is not defined at all - # (in some restricted shells), so we use uname if we have to. - ifeq ($(PROCESSOR_IDENTIFIER),) - # Only run uname -m once in this make session. - ifndef SYSTEM_UNAME_M - SYSTEM_UNAME_M := $(shell uname -m) - export SYSTEM_UNAME_M - endif - PROC_ARCH:=$(SYSTEM_UNAME_M) - else - PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER)) - endif - # Cover all the possibilities, MKS uname, CYGWIN uname, PROCESSOR_IDENTIFIER - # Get: X86, X64, or IA64 - PROC_ARCH:=$(patsubst 386,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 486,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 586,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 686,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i386,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i486,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i586,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i686,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst x86,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst intel64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst Intel64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst INTEL64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst em64t,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst EM64T,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst amd64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst AMD64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 8664,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst x86_64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst ia64,IA64,$(PROC_ARCH)) - ifndef ARCH_DATA_MODEL - ifeq ($(PROC_ARCH),IA64) - ARCH_DATA_MODEL=64 - else - ifeq ($(PROC_ARCH),X64) - ARCH_DATA_MODEL=64 - else - ARCH_DATA_MODEL=32 - endif - endif - endif - export ARCH_DATA_MODEL - ifeq ($(ARCH_DATA_MODEL), 64) - # If the user wants to perform a cross compile build then they must - # - set ARCH_DATA_MODEL=64 and either - # + set ARCH to ia64 or amd64, or - ifeq ($(PROC_ARCH),X64) - ARCH=amd64 - else - ifeq ($(PROC_ARCH),IA64) - ARCH=ia64 - endif - endif - LIBARCH=$(ARCH) - # Value of Java os.arch property - ARCHPROP=$(LIBARCH) - else - # LIBARCH is used to preserve the jre/lib/i386 directory name for 32-bit intel - ARCH=i586 - LIBARCH=i386 - # Value of Java os.arch property - ARCHPROP=x86 - endif - ARCH_FAMILY = $(ARCH) - # Where is unwanted output to be delivered? - # MKS uses the special file "NUL", cygwin uses the customary unix file. - ifeq ($(USING_CYGWIN),true) - DEV_NULL = /dev/null - else - DEV_NULL = NUL - endif - export DEV_NULL - # Classpath separator - CLASSPATH_SEPARATOR = ; - # The suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = obj - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = .exe - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX= - LIBRARY_SUFFIX = dll - LIB_SUFFIX = lib - # User name determination (set _USER) - ifndef USER - ifdef USERNAME - _USER := $(USERNAME) - else - ifdef LOGNAME - _USER := $(LOGNAME) - else - _USER := $(shell id -un) - endif - endif - else - _USER:=$(USER) - endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/bin - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar - # ISHIELD_TEMP_MIN is the difference of an empty C:\TEMP vs. one after a - # bundles build on windows. - ISHIELD_TEMP_MIN=250000 - # How much RAM does this machine have: - ifeq ($(JDK_HAS_MEM_INFO),) - MB_OF_MEMORY := 1024 - endif -endif - -# Unix type settings (same for all unix platforms) -ifneq ($(PLATFORM), windows) - # Temporary disk area - TEMP_DISK=/tmp - # Where is unwanted output to be delivered? - DEV_NULL = /dev/null - export DEV_NULL - # Character used between entries in classpath - CLASSPATH_SEPARATOR = : - # suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = o - # The suffix applied to runtime libraries - LIBRARY_SUFFIX = so - # The suffix applied to link libraries - LIB_SUFFIX = so - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX = lib - # User name determination (set _USER) - ifndef USER - ifdef LOGNAME - _USER := $(LOGNAME) - else - _USER := $(shell logname) - endif - else - _USER:=$(USER) - endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/lib/$(LIBARCH) -endif - -# Darwin-specific Overrides -ifeq ($(SYSTEM_UNAME),Darwin) - # The suffix applied to runtime libraries - LIBRARY_SUFFIX = dylib - # The suffix applied to link libraries - ifeq ($(ARCH), universal) - LIB_SUFFIX = o - else - LIB_SUFFIX = a - endif - - ifeq ($(PLATFORM), macosx) - ARCH_VM_SUBDIR=jre/lib/$(LIBARCH) - endif -endif - -# Machines with 512Mb or less of real memory are considered low memory -# build machines and adjustments will be made to prevent excessing -# system swapping during the build. -ifeq ($(JDK_HAS_MEM_INFO),) - JDK_HAS_MEM_INFO=true - export JDK_HAS_MEM_INFO - ifneq ($(MB_OF_MEMORY),) - LOW_MEMORY_MACHINE := $(shell \ - if [ $(MB_OF_MEMORY) -le 512 ] ; then \ - echo "true"; \ - else \ - echo "false"; \ - fi) - MAX_VM_MEMORY := 512 - MIN_VM_MEMORY := $(MAX_VM_MEMORY) - else - MB_OF_MEMORY := unknown - LOW_MEMORY_MACHINE := true - MAX_VM_MEMORY := 384 - MIN_VM_MEMORY := 128 - endif - export MB_OF_MEMORY - export LOW_MEMORY_MACHINE - export MAX_VM_MEMORY - export MIN_VM_MEMORY -endif - -# If blanks in the username, use the first 4 words and pack them together -_USER1:=$(subst ', ,$(_USER)) -_USER2:=$(subst ", ,$(_USER1)) -USER:=$(word 1,$(_USER2))$(word 2,$(_USER2))$(word 3,$(_USER2))$(word 4,$(_USER2)) -export USER - -export PLATFORM -endif - diff --git a/jdk/makefiles/common/shared/PrivateDefs.gmk-example b/jdk/makefiles/common/shared/PrivateDefs.gmk-example deleted file mode 100644 index 93f6a43fb47..00000000000 --- a/jdk/makefiles/common/shared/PrivateDefs.gmk-example +++ /dev/null @@ -1,19 +0,0 @@ - -# This file, when re-named to PrivateDefs.gmk will get included in the -# makefile definitions (before the ALT_ variables are read) so that you can -# override makefile settings permanently for a workspace. -# Use of this file will cause WARNING errors, repeatedly, for a reason. -# -# WARNING: Use with caution. -# - -# EXAMPLE: Testing a special build of hotspot -# (this is the build/solaris/export-solaris-sparc directory from doing -# a 'cd hotspot/make; gnumake' build) -# -ifeq ($(PLATFORM),solaris) - ifeq ($(ARCH),sparc) - ALT_HOTSPOT_IMPORT_PATH=$(JDK_TOPDIR)/../export-solaris-sparc - endif -endif - diff --git a/jdk/makefiles/common/shared/Sanity-Settings.gmk b/jdk/makefiles/common/shared/Sanity-Settings.gmk deleted file mode 100644 index e571b068f82..00000000000 --- a/jdk/makefiles/common/shared/Sanity-Settings.gmk +++ /dev/null @@ -1,267 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Shared sanity settings file. Fills in the variable ALL_SETTINGS. -# - -# On Windows in particular, it can happen that quotes get into the PATH -# variable. This is very bad, and must be caught early or you can -# see errors like: sh: -c: line 0: syntax error near unexpected token -# -ifneq ($(PATH), $(subst ",,$(PATH))) - dummy1:=$(error ERROR: PATH variable contains double quotes, fix your PATH.) -endif -ifneq ($(PATH), $(subst ',,$(PATH))) - dummy1:=$(error ERROR: PATH variable contains single quotes, fix your PATH.) -endif - -# Used to add a heading to ALL_SETTINGS -define addHeading -"\n$1:\n" -endef - -# Used to add a line to ALL_SETTINGS for an optional value -# (need if test for windows which has issues with ; characters in values) -define addOptionalSetting -$(if $($1)," $1 = $($1)\n"," $1 = $($1)\n") -endef - -# Used to add a line to ALL_SETTINGS for something that must have a value -define addRequiredSetting -$(if $($1)," $1 = $($1)\n",$(warning WARNING: $1 should not be empty [Sanity-Settings.gmk])) -endef - -# Used to add a line to ALL_SETTINGS for something that must have a value -define addRequiredVersionSetting -$(if $($1)," $1 = $($1) [requires at least $(REQUIRED_$1)]\n",$(warning WARNING: $1 should not be empty [Sanity-Settings.gmk])) -endef - -# Used to add a series of lines to ALL_SETTINGS -define addAltSetting -" $1 = $($1)\n ALT_$1 = $(ALT_$1)\n" -endef - -# Variable that contains a string of all information - -# Make sure this is a 'do it now' variable. -ALL_SETTINGS:=$(call addHeading,Bootstrap Settings) -ALL_SETTINGS+=$(call addAltSetting,BOOTDIR) -ALL_SETTINGS+=$(call addRequiredVersionSetting,BOOT_VER) -ALL_SETTINGS+=$(call addAltSetting,OUTPUTDIR) -ALL_SETTINGS+=$(call addRequiredSetting,ABS_OUTPUTDIR) - - -ALL_SETTINGS+=$(call addHeading,Build Tool Settings) -ALL_SETTINGS+=$(call addAltSetting,SLASH_JAVA) -ALL_SETTINGS+=$(call addRequiredSetting,VARIANT) -ALL_SETTINGS+=$(call addAltSetting,JDK_DEVTOOLS_DIR) -ALL_SETTINGS+=$(call addOptionalSetting,ANT_HOME) -ALL_SETTINGS+=$(call addAltSetting,UNIXCOMMAND_PATH) -ALL_SETTINGS+=$(call addAltSetting,COMPILER_PATH) -ALL_SETTINGS+=$(call addAltSetting,DEVTOOLS_PATH) -ifeq ($(PLATFORM),linux) - ALL_SETTINGS+=$(call addAltSetting,UNIXCCS_PATH) - ALL_SETTINGS+=$(call addAltSetting,USRBIN_PATH) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,GCC29_COMPILER_PATH) - endif -endif -ifeq ($(PLATFORM),solaris) - ALL_SETTINGS+=$(call addAltSetting,UNIXCCS_PATH) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,GCC_COMPILER_PATH) - endif -endif -ifeq ($(PLATFORM),windows) - ifneq ($(MSVCRNN_DLL),) - ALL_SETTINGS+=$(call addAltSetting,MSVCRNN_DLL_PATH) - endif - ALL_SETTINGS+=$(call addRequiredSetting,INCLUDE) - ALL_SETTINGS+=$(call addRequiredSetting,LIB) -endif -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_NAME) -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_VERSION) -ifdef REQUIRED_CC_VER - ALL_SETTINGS+=$(call addRequiredVersionSetting,CC_VER) -else - ALL_SETTINGS+=$(call addOptionalSetting,CC_VER) -endif -ifeq ($(PLATFORM),solaris) - ifeq ($(ARCH_DATA_MODEL), 32) - ifndef OPENJDK - ALL_SETTINGS+=$(call addRequiredVersionSetting,GCC_VER) - endif - endif -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,ZIP_VER) -ALL_SETTINGS+=$(call addRequiredVersionSetting,UNZIP_VER) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addRequiredVersionSetting,LINK_VER) - ALL_SETTINGS+=$(call addRequiredSetting,CC) - ALL_SETTINGS+=$(call addRequiredSetting,LINK) - ALL_SETTINGS+=$(call addRequiredSetting,DUMPBIN) -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,ANT_VER) -ALL_SETTINGS+=$(call addRequiredSetting,TEMPDIR) - - -ALL_SETTINGS+=$(call addHeading,Build Directives) -ALL_SETTINGS+=$(call addOptionalSetting,OPENJDK) -ALL_SETTINGS+=$(call addOptionalSetting,USE_HOTSPOT_INTERPRETER_MODE) -ALL_SETTINGS+=$(call addOptionalSetting,PEDANTIC) -ALL_SETTINGS+=$(call addOptionalSetting,DEV_ONLY) -ALL_SETTINGS+=$(call addOptionalSetting,NO_DOCS) -ALL_SETTINGS+=$(call addOptionalSetting,NO_DEMOS) -ALL_SETTINGS+=$(call addOptionalSetting,NO_SAMPLES) -ALL_SETTINGS+=$(call addOptionalSetting,NO_IMAGES) -ALL_SETTINGS+=$(call addOptionalSetting,TOOLS_ONLY) -ALL_SETTINGS+=$(call addOptionalSetting,INSANE) -ALL_SETTINGS+=$(call addRequiredSetting,COMPILE_APPROACH) -ifeq ($(COMPILE_APPROACH), parallel) - ALL_SETTINGS+=$(call addAltSetting,PARALLEL_COMPILE_JOBS) -endif -ALL_SETTINGS+=$(call addOptionalSetting,FASTDEBUG) -ALL_SETTINGS+=$(call addRequiredSetting,COMPILER_WARNINGS_FATAL) -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_WARNING_LEVEL) -ALL_SETTINGS+=$(call addOptionalSetting,SHOW_ALL_WARNINGS) -ALL_SETTINGS+=$(call addRequiredSetting,INCREMENTAL_BUILD) -ALL_SETTINGS+=$(call addOptionalSetting,CC_HIGHEST_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CC_HIGHER_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CC_LOWER_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CXXFLAGS) -ALL_SETTINGS+=$(call addOptionalSetting,CFLAGS) - -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAVA_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAVAC_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAR_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JARSIGNER_CMD) - -# These don't print out well with windows due to the ';' characters -ifneq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addOptionalSetting,JAVAC_CMD) - ALL_SETTINGS+=$(call addOptionalSetting,JAVAH_CMD) - ALL_SETTINGS+=$(call addOptionalSetting,JAVADOC_CMD) -endif - -ALL_SETTINGS+=$(call addHeading,Build Platform Settings) -ALL_SETTINGS+=$(call addRequiredSetting,USER) -ALL_SETTINGS+=$(call addRequiredSetting,PLATFORM) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH) -ALL_SETTINGS+=$(call addRequiredSetting,LIBARCH) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH_FAMILY) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH_DATA_MODEL) -ALL_SETTINGS+=$(call addRequiredSetting,ARCHPROP) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_ARCHITECTURE) - ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_IDENTIFIER) - ifdef USING_CYGWIN - ALL_SETTINGS+=$(call addRequiredSetting,USING_CYGWIN) - ALL_SETTINGS+=$(call addRequiredVersionSetting,CYGWIN_VER) - ALL_SETTINGS+=$(call addRequiredSetting,CYGPATH_CMD) - else - ALL_SETTINGS+=$(call addRequiredVersionSetting,MKS_VER) - ALL_SETTINGS+=$(call addOptionalSetting,DOSNAME_CMD) - endif -endif -ifeq ($(PLATFORM),linux) - ifdef REQUIRED_ALSA_VERSION - ALL_SETTINGS+=$(call addRequiredSetting,ALSA_VERSION) - endif -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,OS_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_NAME) -ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_VERSION) -ALL_SETTINGS+=$(call addRequiredSetting,MB_OF_MEMORY) - - -ALL_SETTINGS+=$(call addHeading,GNU Make Settings) -ALL_SETTINGS+=$(call addRequiredSetting,MAKE) -ALL_SETTINGS+=$(call addRequiredVersionSetting,MAKE_VER) -ALL_SETTINGS+=$(call addOptionalSetting,MAKECMDGOALS) -ALL_SETTINGS+=$(call addOptionalSetting,MAKEFLAGS) -ALL_SETTINGS+=$(call addRequiredSetting,SHELL) - - -ALL_SETTINGS+=$(call addHeading,Target Build Versions) -ALL_SETTINGS+=$(call addRequiredSetting,JDK_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,MILESTONE) -ALL_SETTINGS+=$(call addOptionalSetting,RELEASE) -ALL_SETTINGS+=$(call addRequiredSetting,FULL_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,BUILD_NUMBER) - - -ALL_SETTINGS+=$(call addHeading,External File/Binary Locations) -ALL_SETTINGS+=$(call addRequiredSetting,USRJDKINSTANCES_PATH) -ALL_SETTINGS+=$(call addAltSetting,BUILD_JDK_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,JDK_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,LANGTOOLS_DIST) -ALL_SETTINGS+=$(call addAltSetting,CORBA_DIST) -ALL_SETTINGS+=$(call addAltSetting,JAXP_DIST) -ALL_SETTINGS+=$(call addAltSetting,JAXWS_DIST) -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_DOCS_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_IMPORT_PATH) -ifeq ($(ARCH_DATA_MODEL), 32) - ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_CLIENT_PATH) -endif -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_SERVER_PATH) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_LIB_PATH) - ALL_SETTINGS+=$(call addRequiredSetting,DXSDK_VER) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_PATH) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_INCLUDE_PATH) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_LIB_PATH) - ALL_SETTINGS+=$(call addAltSetting,WINDOWSSDKDIR) - ALL_SETTINGS+=$(call addRequiredSetting,RC) - ALL_SETTINGS+=$(call addRequiredSetting,REBASE) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,DEPLOY_MSSDK) - ALL_SETTINGS+=$(call addAltSetting,INSTALL_MSSDK) - ALL_SETTINGS+=$(call addAltSetting,WSCRIPT) - ALL_SETTINGS+=$(call addAltSetting,MSICERT) - endif -endif -ALL_SETTINGS+=$(call addAltSetting,CACERTS_FILE) -ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,MOZILLA_HEADERS_PATH) -endif -ifneq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addAltSetting,CUPS_HEADERS_PATH) -endif - -ifdef OPENJDK - ALL_SETTINGS+=$(call addHeading,OpenJDK-specific settings) - ALL_SETTINGS+=$(call addAltSetting,FREETYPE_HEADERS_PATH) - ALL_SETTINGS+=$(call addAltSetting,FREETYPE_LIB_PATH) -endif - -ifdef OPENJDK - ALL_SETTINGS+=$(call addHeading,Previous JDK Settings) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_RELEASE_PATH) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_VERSION) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_FILE) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JRE_FILE) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_RELEASE_IMAGE) -endif diff --git a/jdk/makefiles/docs/CORE_PKGS.gmk b/jdk/makefiles/docs/CORE_PKGS.gmk index 84c8986370c..6b5f4af797a 100644 --- a/jdk/makefiles/docs/CORE_PKGS.gmk +++ b/jdk/makefiles/docs/CORE_PKGS.gmk @@ -64,7 +64,7 @@ ACTIVE_JSR_PKGS= \ javax.management.* \ javax.script \ javax.sql.* \ - javax.tools \ + javax.tools.* \ javax.xml.* \ org.w3c.* \ org.xml.sax @@ -218,6 +218,7 @@ CORE_PKGS = \ javax.swing.plaf.nimbus \ javax.swing.plaf.synth \ javax.tools \ + javax.tools.annotation \ javax.transaction \ javax.transaction.xa \ javax.xml.parsers \ diff --git a/jdk/makefiles/java/Makefile b/jdk/makefiles/java/Makefile deleted file mode 100644 index 6d9f5dadbe3..00000000000 --- a/jdk/makefiles/java/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all of java -# - -PRODUCT=java -BUILDDIR=.. -include $(BUILDDIR)/common/Defs.gmk - -# -# The order of subdirs here is important -# -SUBDIRS += jvm redist verify fdlibm java sun_nio jli main - -# Others -# Note: java_crw_demo java_hprof_demo are demos but must be delivered built in sdk - -SUBDIRS += security util net nio - -SUBDIRS_management = management -SUBDIRS_misc = npt java_crw_demo java_hprof_demo \ - instrument -#TODO Check invoke -# logging instrument invoke sql rmi - - -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 32) - SUBDIRS += jexec - endif -endif # PLATFORM - -ifeq ($(PLATFORM), linux) - SUBDIRS += jexec -endif # PLATFORM - -ifeq ($(PLATFORM), macosx) - SUBDIRS += jobjc -endif # PLATFORM - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/java/fdlibm/FILES_c.gmk b/jdk/makefiles/java/fdlibm/FILES_c.gmk deleted file mode 100644 index cc7a1ad06d1..00000000000 --- a/jdk/makefiles/java/fdlibm/FILES_c.gmk +++ /dev/null @@ -1,88 +0,0 @@ -# -# Copyright (c) 1998, 2002, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - k_standard.c \ - k_rem_pio2.c \ - k_cos.c \ - k_sin.c \ - k_tan.c \ - e_acos.c \ - e_asin.c \ - e_atan2.c \ - e_atanh.c \ - e_cosh.c \ - e_exp.c \ - e_fmod.c \ - e_hypot.c \ - e_log.c \ - e_log10.c \ - e_pow.c \ - e_rem_pio2.c \ - e_remainder.c \ - e_scalb.c \ - e_sinh.c \ - e_sqrt.c \ - w_acos.c \ - w_asin.c \ - w_atan2.c \ - w_atanh.c \ - w_cosh.c \ - w_exp.c \ - w_fmod.c \ - w_hypot.c \ - w_log.c \ - w_log10.c \ - w_pow.c \ - w_remainder.c \ - w_scalb.c \ - w_sinh.c \ - w_sqrt.c \ - s_atan.c \ - s_cbrt.c \ - s_ceil.c \ - s_copysign.c \ - s_cos.c \ - s_expm1.c \ - s_fabs.c \ - s_finite.c \ - s_floor.c \ - s_frexp.c \ - s_ilogb.c \ - s_isnan.c \ - s_ldexp.c \ - s_lib_version.c \ - s_log1p.c \ - s_logb.c \ - s_matherr.c \ - s_modf.c \ - s_nextafter.c \ - s_rint.c \ - s_scalbn.c \ - s_signgam.c \ - s_significand.c \ - s_sin.c \ - s_tan.c \ - s_tanh.c diff --git a/jdk/makefiles/java/fdlibm/Makefile b/jdk/makefiles/java/fdlibm/Makefile deleted file mode 100644 index 36a9611e69b..00000000000 --- a/jdk/makefiles/java/fdlibm/Makefile +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for fdlibm -# -# Note: -# The fdlibm libraries are built using special rules in Library.gmk. -# - -BUILDDIR = ../.. -LIBRARY = fdlibm -PRODUCT = java - -include $(BUILDDIR)/common/Defs.gmk - -# -# Where is fdlibm in the source tree? -# -FDLIBM_SRC = $(SHARE_SRC)/native/java/lang/fdlibm - -# Windows: compiler flags -ifeq ($(PLATFORM),windows) - # Turn all optimizations off - OPTIMIZATION_LEVEL = NONE - FASTDEBUG_OPTIMIZATION_LEVEL = NONE - OTHER_CFLAGS = - CPPFLAGS_DBG += -DLOGGING -endif - -# -# Linux: Disable optimization to get correctly reproducible -# floating-point results. -# -ifeq ($(PLATFORM),linux) - # Turn all optimizations off - OPTIMIZATION_LEVEL = NONE - FASTDEBUG_OPTIMIZATION_LEVEL = NONE -endif - -ifeq ($(PLATFORM),macosx) - # Turn all optimizations off - OPTIMIZATION_LEVEL = NONE - FASTDEBUG_OPTIMIZATION_LEVEL = NONE -endif - -# -# Include path. -# -OTHER_INCLUDES = -I$(FDLIBM_SRC)/include - -# -# Things that must be linked in. -# -OTHER_LDLIBS = - -# -# Files to compile. -# -include FILES_c.gmk - -# -# Rules for the .a file. -# -include $(BUILDDIR)/common/Library.gmk - -# -# Find fdlibm source files. -# -vpath %.c -vpath %.c $(FDLIBM_SRC)/src diff --git a/jdk/makefiles/java/instrument/Makefile b/jdk/makefiles/java/instrument/Makefile deleted file mode 100644 index 76a05537290..00000000000 --- a/jdk/makefiles/java/instrument/Makefile +++ /dev/null @@ -1,149 +0,0 @@ -# -# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Makefile for building the Java Programming Language Instrumentation Services -# agent, supporting java.lang.instrument - -BUILDDIR = ../.. -PACKAGE = sun.instrument -LIBRARY = instrument -PRODUCT = sun - -# Configure the CFLAGS for this library. Use static binding so that there -# are not dependencies on modules not on the search patch when invoked from -# the Windows system directory (or elsewhere). -MS_RUNTIME_STATIC=true - -FILES_m = mapfile-vers - -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true - -include $(BUILDDIR)/common/Defs.gmk - -# Use the mapfile-vers (See the mapfile located with this Makefile) -ifdef FILES_m -include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -# -# Files to compile. -# -FILES_c = \ - EncodingSupport.c \ - EncodingSupport_md.c \ - FileSystemSupport_md.c \ - InstrumentationImplNativeMethods.c \ - InvocationAdapter.c \ - JarFacade.c \ - JPLISAgent.c \ - JPLISAssert.c \ - JavaExceptions.c \ - PathCharsValidator.c \ - Reentrancy.c \ - Utilities.c - -# -# -jaragent support requires zip and jar manfiest parser to be compiled -# into the instrument library. -# -IO_PLATFORM_SRC = $(PLATFORM_SRC)/native/java/io -LAUNCHER_SHARE_SRC = $(SHARE_SRC)/bin -LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC)/bin - -FILES_c += \ - canonicalize_md.c - -FILES_export = \ - sun/instrument/InstrumentationImpl.java - -# -# This controls the ability to do logging in the library. -# -CPPFLAGS_DBG += -DJPLIS_LOGGING -CPPFLAGS_OPT += -DNO_JPLIS_LOGGING - -OTHER_INCLUDES = -I$(SHARE_SRC)/instrument -OTHER_INCLUDES += -I$(PLATFORM_SRC)/instrument -OTHER_INCLUDES += -I$(IO_PLATFORM_SRC) -OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC) -I$(LAUNCHER_PLATFORM_SRC) - -# -# Create a dependency on libjli (Java Launcher Infrastructure) -# -# On UNIX, this is a relative dependency using $ORIGIN. Unfortunately, to -# do this reliably on Linux takes a different syntax than Solaris. -# -# On Windows, this is done by using the same directory as the executable -# itself, as with all the Windows libraries. -# -ifeq ($(PLATFORM), windows) - OTHER_LDLIBS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/jli.lib - OTHER_LCF += -export:Agent_OnAttach - # equivalent of strcasecmp is stricmp on Windows - CPPFLAGS_COMMON += -Dstrcasecmp=stricmp -else -ifneq (,$(findstring $(PLATFORM), macosx)) - ifneq ($(ARCH), universal) - LDFLAGS += -Wl,-all_load - endif - LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a - OTHER_LDLIBS += -liconv - ifeq ($(SYSTEM_ZLIB), true) - OTHER_LDLIBS += -lz - endif -else - LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli - OTHER_LDLIBS += -ljli - OTHER_LDLIBS += -ldl - ifeq ($(PLATFORM), solaris) - LDFLAGS += -R \$$ORIGIN/jli - endif - ifeq ($(PLATFORM), linux) - LDFLAGS += $(LDFLAG_Z_ORIGIN) - LDFLAGS += -Wl,--allow-shlib-undefined - LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/jli - endif -endif -endif - -ifeq ($(PLATFORM), macosx) - LDFLAGS += -framework Cocoa -framework Security -framework ApplicationServices -endif - -# -# Library to compile. -# -include $(BUILDDIR)/common/Library.gmk - -# We don't want to link against -ljava -JAVALIB= - -# -# Add to ambient vpath so we pick up the library files -# -vpath %.c $(SHARE_SRC)/instrument $(PLATFORM_SRC)/instrument -vpath %.c $(IO_PLATFORM_SRC) - diff --git a/jdk/makefiles/java/invoke/Makefile b/jdk/makefiles/java/invoke/Makefile deleted file mode 100644 index 93b1f46f5d3..00000000000 --- a/jdk/makefiles/java/invoke/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. - -PACKAGE = java.lang.invoke -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -AUTO_FILES_JAVA_DIRS = java/lang/invoke sun/invoke -FILES_java = \ - java/lang/ClassValue.java \ - java/lang/BootstrapMethodError.java - -# The sources built here use new language syntax to generate -# method handle calls. Let's be sure we are using that format. -LANGUAGE_VERSION = -source 7 -CLASS_VERSION = -target 7 - -include $(BUILDDIR)/common/Classes.gmk diff --git a/jdk/makefiles/java/java/Exportedfiles.gmk b/jdk/makefiles/java/java/Exportedfiles.gmk deleted file mode 100644 index 3eac7db2d39..00000000000 --- a/jdk/makefiles/java/java/Exportedfiles.gmk +++ /dev/null @@ -1,178 +0,0 @@ -# -# Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# These are the names of JAVA classes for which we will make .h files. -# -ifneq ($(PLATFORM), windows) -FILES_export = \ - java/lang/Object.java \ - java/lang/Class.java \ - java/lang/Compiler.java \ - java/lang/String.java \ - java/lang/Thread.java \ - java/lang/ThreadGroup.java \ - java/lang/StrictMath.java \ - java/lang/Number.java \ - java/lang/Byte.java \ - java/lang/Short.java \ - java/lang/Integer.java \ - java/lang/Long.java \ - java/lang/Float.java \ - java/lang/Double.java \ - java/lang/Boolean.java \ - java/lang/Character.java \ - java/lang/System.java \ - java/lang/ClassLoader.java \ - java/lang/Runtime.java \ - java/lang/SecurityManager.java \ - java/lang/Shutdown.java \ - java/lang/Package.java \ - java/lang/ref/Finalizer.java \ - java/lang/reflect/AccessibleObject.java \ - java/lang/reflect/Field.java \ - java/lang/reflect/Method.java \ - java/lang/reflect/Constructor.java \ - java/lang/reflect/InvocationTargetException.java \ - java/lang/reflect/Array.java \ - java/lang/reflect/Proxy.java \ - java/security/AccessController.java \ - java/util/Date.java \ - java/util/TimeZone.java \ - java/util/ResourceBundle.java \ - java/util/concurrent/atomic/AtomicLong.java \ - java/util/prefs/FileSystemPreferences.java \ - java/io/Console.java \ - java/io/FileDescriptor.java \ - java/io/InputStream.java \ - java/io/FileInputStream.java \ - java/io/FileOutputStream.java \ - java/io/PrintStream.java \ - java/io/RandomAccessFile.java \ - java/io/DataInputStream.java \ - java/io/DataOutputStream.java \ - java/io/File.java \ - java/io/FileSystem.java \ - java/io/UnixFileSystem.java \ - java/io/ObjectInputStream.java \ - java/io/ObjectOutputStream.java \ - java/io/ObjectStreamClass.java \ - java/lang/Throwable.java \ - java/lang/NoClassDefFoundError.java \ - java/lang/StringIndexOutOfBoundsException.java \ - java/lang/OutOfMemoryError.java \ - sun/misc/Version.java \ - sun/misc/VM.java \ - sun/misc/VMSupport.java \ - sun/misc/Signal.java \ - sun/misc/MessageUtils.java \ - sun/misc/NativeSignalHandler.java \ - sun/misc/GC.java \ - sun/reflect/ConstantPool.java \ - sun/reflect/NativeConstructorAccessorImpl.java \ - sun/reflect/NativeMethodAccessorImpl.java \ - sun/reflect/Reflection.java - -EXPORTED_inner = \ - java.lang.ClassLoader$$NativeLibrary - -else # PLATFORM -FILES_export = \ - java/lang/Object.java \ - java/lang/Class.java \ - java/lang/Compiler.java \ - java/lang/String.java \ - java/lang/Thread.java \ - java/lang/ThreadGroup.java \ - java/lang/StrictMath.java \ - java/lang/Number.java \ - java/lang/Byte.java \ - java/lang/Short.java \ - java/lang/Integer.java \ - java/lang/Long.java \ - java/lang/Float.java \ - java/lang/Double.java \ - java/lang/Boolean.java \ - java/lang/System.java \ - java/lang/Package.java \ - java/lang/ClassLoader.java \ - java/lang/Runtime.java \ - java/lang/SecurityManager.java \ - java/lang/Shutdown.java \ - java/lang/reflect/AccessibleObject.java \ - java/lang/reflect/Field.java \ - java/lang/reflect/Method.java \ - java/lang/reflect/Constructor.java \ - java/lang/reflect/InvocationTargetException.java \ - java/lang/reflect/Array.java \ - java/lang/reflect/Proxy.java \ - java/lang/ref/Reference.java \ - java/lang/ref/Finalizer.java \ - java/util/Date.java \ - java/util/Properties.java \ - java/util/ResourceBundle.java \ - java/util/TimeZone.java \ - java/util/concurrent/atomic/AtomicLong.java \ - java/util/prefs/WindowsPreferences.java \ - java/util/prefs/WindowsPreferencesFactory.java \ - java/util/logging/FileHandler.java \ - java/io/Console.java \ - java/io/FileSystem.java \ - java/io/FileDescriptor.java \ - java/io/InputStream.java \ - java/io/FileInputStream.java \ - java/io/FileOutputStream.java \ - java/io/PrintStream.java \ - java/io/RandomAccessFile.java \ - java/io/DataInputStream.java \ - java/io/DataOutputStream.java \ - java/io/File.java \ - java/io/ObjectOutputStream.java \ - java/io/ObjectInputStream.java \ - java/io/ObjectStreamClass.java \ - java/lang/Throwable.java \ - java/lang/NoClassDefFoundError.java \ - java/lang/StringIndexOutOfBoundsException.java \ - java/lang/OutOfMemoryError.java \ - java/lang/ProcessImpl.java \ - sun/misc/Version.java \ - sun/misc/VM.java \ - sun/misc/VMSupport.java \ - sun/misc/GC.java \ - sun/misc/Signal.java \ - sun/misc/NativeSignalHandler.java \ - sun/misc/MessageUtils.java \ - java/security/AccessController.java \ - sun/reflect/ConstantPool.java \ - sun/reflect/NativeConstructorAccessorImpl.java \ - sun/reflect/NativeMethodAccessorImpl.java \ - sun/reflect/Reflection.java \ - sun/security/provider/NativeSeedGenerator.java \ - sun/io/Win32ErrorMode.java - -EXPORTED_inner = \ - java.lang.ClassLoader$$NativeLibrary - -endif # PLATFORM diff --git a/jdk/makefiles/java/java/FILES_c.gmk b/jdk/makefiles/java/java/FILES_c.gmk deleted file mode 100644 index a8256b78e16..00000000000 --- a/jdk/makefiles/java/java/FILES_c.gmk +++ /dev/null @@ -1,82 +0,0 @@ -# -# Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - AccessController.c \ - Array.c \ - String.c \ - Class.c \ - ClassLoader.c \ - Compiler.c \ - Console_md.c \ - Double.c \ - FileSystem_md.c \ - FileDescriptor_md.c \ - FileInputStream.c \ - FileInputStream_md.c \ - FileOutputStream_md.c \ - Finalizer.c \ - Float.c \ - Object.c \ - ObjectOutputStream.c \ - ObjectInputStream.c \ - ObjectStreamClass.c \ - Package.c \ - ProcessEnvironment_md.c \ - Proxy.c \ - RandomAccessFile.c \ - RandomAccessFile_md.c \ - ResourceBundle.c \ - Runtime.c \ - SecurityManager.c \ - Shutdown.c \ - StrictMath.c \ - System.c \ - Thread.c \ - Throwable.c \ - Signal.c \ - NativeSignalHandler.c \ - verify_stub.c \ - io_util.c \ - io_util_md.c \ - jio.c \ - logging.c \ - jni_util.c \ - jni_util_md.c \ - jdk_util.c \ - jdk_util_md.c \ - check_version.c \ - java_props_md.c \ - DriverManager.c \ - ConstantPool.c \ - MessageUtils.c \ - GC.c \ - NativeAccessors.c \ - Reflection.c \ - Bits.c \ - AtomicLong.c \ - Version.c \ - VM.c \ - VMSupport.c diff --git a/jdk/makefiles/java/java/FILES_java.gmk b/jdk/makefiles/java/java/FILES_java.gmk deleted file mode 100644 index 7a6d93a8f37..00000000000 --- a/jdk/makefiles/java/java/FILES_java.gmk +++ /dev/null @@ -1,489 +0,0 @@ -# -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# This is the list of java classes that will be automatically built -# from sources. See Exportedfiles.gmk for the list of files which -# will generate header files -# -JAVA_JAVA_java = \ - java/lang/Object.java \ - java/lang/AutoCloseable.java \ - java/lang/Class.java \ - java/lang/Thread.java \ - java/lang/Character.java \ - java/lang/CharacterData.java \ - java/lang/CharacterName.java \ - sun/misc/ASCIICaseInsensitiveComparator.java \ - sun/misc/VM.java \ - sun/misc/Signal.java \ - sun/misc/NativeSignalHandler.java \ - java/lang/ThreadGroup.java \ - java/lang/ThreadLocal.java \ - java/lang/InheritableThreadLocal.java \ - java/lang/String.java \ - java/lang/ConditionalSpecialCasing.java \ - java/lang/StringCoding.java \ - java/lang/StringBuffer.java \ - java/lang/StringBuilder.java \ - java/lang/SuppressWarnings.java \ - java/lang/AbstractStringBuilder.java \ - java/lang/ClassLoader.java \ - java/lang/AssertionStatusDirectives.java \ - java/lang/Enum.java \ - java/lang/StrictMath.java \ - java/lang/Math.java \ - sun/misc/FloatingDecimal.java \ - sun/misc/FormattedFloatingDecimal.java \ - java/lang/Number.java \ - java/lang/Byte.java \ - java/lang/Short.java \ - java/lang/Integer.java \ - java/lang/Long.java \ - java/lang/Float.java \ - java/lang/Double.java \ - java/lang/Boolean.java \ - java/lang/Void.java \ - java/lang/Runnable.java \ - java/lang/Cloneable.java \ - java/lang/CharSequence.java \ - java/lang/SecurityManager.java \ - java/lang/Runtime.java \ - java/lang/RuntimePermission.java \ - java/lang/ApplicationShutdownHooks.java \ - java/lang/Shutdown.java \ - java/lang/Terminator.java \ - java/lang/System.java \ - java/lang/Compiler.java \ - java/lang/Throwable.java \ - java/lang/Exception.java \ - java/lang/ReflectiveOperationException.java \ - java/lang/IllegalAccessException.java \ - java/lang/InstantiationException.java \ - java/lang/ClassNotFoundException.java \ - java/lang/CloneNotSupportedException.java \ - java/lang/InterruptedException.java \ - java/lang/NoSuchFieldException.java \ - java/lang/NoSuchMethodException.java \ - java/lang/RuntimeException.java \ - java/lang/ArithmeticException.java \ - java/lang/ArrayStoreException.java \ - java/lang/ClassCastException.java \ - java/lang/IndexOutOfBoundsException.java \ - java/lang/ArrayIndexOutOfBoundsException.java \ - java/lang/StringIndexOutOfBoundsException.java \ - java/lang/NegativeArraySizeException.java \ - java/lang/NullPointerException.java \ - java/lang/IllegalStateException.java \ - java/lang/IllegalArgumentException.java \ - java/lang/NumberFormatException.java \ - java/lang/IllegalThreadStateException.java \ - java/lang/IllegalMonitorStateException.java \ - java/lang/SecurityException.java \ - java/lang/TypeNotPresentException.java \ - java/lang/EnumConstantNotPresentException.java \ - java/lang/UnsupportedOperationException.java \ - java/lang/Error.java \ - java/lang/AssertionError.java \ - java/lang/ThreadDeath.java \ - java/lang/LinkageError.java \ - java/lang/ClassCircularityError.java \ - java/lang/ClassFormatError.java \ - java/lang/UnsupportedClassVersionError.java \ - java/lang/ExceptionInInitializerError.java \ - java/lang/IncompatibleClassChangeError.java \ - java/lang/AbstractMethodError.java \ - java/lang/IllegalAccessError.java \ - java/lang/InstantiationError.java \ - java/lang/NoSuchFieldError.java \ - java/lang/NoSuchMethodError.java \ - java/lang/NoClassDefFoundError.java \ - java/lang/UnsatisfiedLinkError.java \ - java/lang/VerifyError.java \ - java/lang/VirtualMachineError.java \ - java/lang/InternalError.java \ - java/lang/OutOfMemoryError.java \ - java/lang/StackOverflowError.java \ - java/lang/UnknownError.java \ - java/lang/StackTraceElement.java \ - java/lang/Package.java \ - java/lang/Process.java \ - java/lang/ProcessBuilder.java \ - java/lang/ProcessEnvironment.java \ - java/lang/ProcessImpl.java \ - java/lang/Appendable.java \ - java/lang/Comparable.java \ - java/lang/Readable.java \ - java/lang/Override.java \ - java/lang/SafeVarargs.java \ - java/lang/SuppressWarnings.java \ - java/lang/ref/Reference.java \ - java/lang/ref/SoftReference.java \ - java/lang/ref/WeakReference.java \ - java/lang/ref/FinalReference.java \ - java/lang/ref/PhantomReference.java \ - java/lang/ref/ReferenceQueue.java \ - java/lang/ref/Finalizer.java \ - java/util/BitSet.java \ - java/util/Calendar.java \ - java/util/GregorianCalendar.java \ - sun/util/BuddhistCalendar.java \ - java/util/JapaneseImperialCalendar.java \ - sun/util/calendar/CalendarDate.java \ - sun/util/calendar/ImmutableGregorianDate.java \ - sun/util/calendar/CalendarSystem.java \ - sun/util/calendar/Era.java \ - sun/util/calendar/CalendarUtils.java \ - sun/util/calendar/AbstractCalendar.java \ - sun/util/calendar/BaseCalendar.java \ - sun/util/calendar/Gregorian.java \ - sun/util/calendar/JulianCalendar.java \ - sun/util/calendar/LocalGregorianCalendar.java \ - java/util/Currency.java \ - java/util/Date.java \ - java/util/Dictionary.java \ - java/util/EmptyStackException.java \ - java/util/Enumeration.java \ - java/util/EventListener.java \ - java/util/EventListenerProxy.java \ - java/util/EventObject.java \ - java/util/Formatter.java \ - java/util/Formattable.java \ - java/util/FormattableFlags.java \ - java/util/IllegalFormatException.java \ - java/util/DuplicateFormatFlagsException.java \ - java/util/FormatFlagsConversionMismatchException.java \ - java/util/IllegalFormatCodePointException.java \ - java/util/IllegalFormatConversionException.java \ - java/util/IllegalFormatFlagsException.java \ - java/util/IllegalFormatPrecisionException.java \ - java/util/IllegalFormatWidthException.java \ - java/util/MissingFormatArgumentException.java \ - java/util/MissingFormatWidthException.java \ - java/util/UnknownFormatConversionException.java \ - java/util/UnknownFormatFlagsException.java \ - java/util/IllformedLocaleException.java \ - java/util/FormatterClosedException.java \ - java/util/ListResourceBundle.java \ - sun/util/EmptyListResourceBundle.java \ - java/util/Locale.java \ - sun/util/locale/BaseLocale.java \ - sun/util/locale/Extension.java \ - sun/util/locale/InternalLocaleBuilder.java \ - sun/util/locale/LanguageTag.java \ - sun/util/locale/LocaleExtensions.java \ - sun/util/locale/LocaleObjectCache.java \ - sun/util/locale/LocaleSyntaxException.java \ - sun/util/locale/LocaleUtils.java \ - sun/util/locale/ParseStatus.java \ - sun/util/locale/StringTokenIterator.java \ - sun/util/locale/UnicodeLocaleExtension.java \ - java/util/LocaleISOData.java \ - sun/util/LocaleServiceProviderPool.java \ - sun/util/LocaleDataMetaInfo.java \ - java/util/MissingResourceException.java \ - java/util/NoSuchElementException.java \ - java/util/Observable.java \ - java/util/Observer.java \ - java/util/Properties.java \ - java/util/InvalidPropertiesFormatException.java \ - java/util/PropertyPermission.java \ - java/util/PropertyResourceBundle.java \ - java/util/Random.java \ - java/util/ResourceBundle.java \ - sun/util/ResourceBundleEnumeration.java \ - sun/util/CoreResourceBundleControl.java \ - java/util/Scanner.java \ - java/util/InputMismatchException.java \ - java/util/Stack.java \ - java/util/StringTokenizer.java \ - java/util/TimeZone.java \ - java/util/SimpleTimeZone.java \ - sun/util/TimeZoneNameUtility.java \ - sun/util/calendar/ZoneInfo.java \ - sun/util/calendar/ZoneInfoFile.java \ - sun/util/calendar/TzIDOldMapping.java \ - java/util/TooManyListenersException.java \ - java/util/Comparator.java \ - java/util/Collections.java \ - java/util/Iterator.java \ - java/util/ListIterator.java \ - java/util/Collection.java \ - java/util/Set.java \ - java/util/SortedSet.java \ - java/util/NavigableSet.java \ - java/util/List.java \ - java/util/Queue.java \ - java/util/Deque.java \ - java/util/AbstractCollection.java \ - java/util/AbstractSet.java \ - java/util/HashSet.java \ - java/util/LinkedHashSet.java \ - java/util/TreeSet.java \ - java/util/EnumSet.java \ - java/util/RegularEnumSet.java \ - java/util/JumboEnumSet.java \ - java/util/AbstractList.java \ - java/util/ArrayList.java \ - java/util/Vector.java \ - java/util/AbstractSequentialList.java \ - java/util/LinkedList.java \ - java/util/AbstractQueue.java \ - java/util/PriorityQueue.java \ - java/util/ArrayDeque.java \ - java/util/Map.java \ - java/util/SortedMap.java \ - java/util/NavigableMap.java \ - java/util/AbstractMap.java \ - java/util/HashMap.java \ - java/util/LinkedHashMap.java \ - java/util/TreeMap.java \ - java/util/Hashtable.java \ - java/util/WeakHashMap.java \ - java/util/IdentityHashMap.java \ - java/util/EnumMap.java \ - java/util/Arrays.java \ - java/util/DualPivotQuicksort.java \ - java/util/TimSort.java \ - java/util/ComparableTimSort.java \ - java/util/ConcurrentModificationException.java \ - java/util/ServiceLoader.java \ - java/util/ServiceConfigurationError.java \ - java/util/Timer.java \ - java/util/TimerTask.java \ - java/util/Objects.java \ - java/util/UUID.java \ - java/util/concurrent/AbstractExecutorService.java \ - java/util/concurrent/ArrayBlockingQueue.java \ - java/util/concurrent/BlockingDeque.java \ - java/util/concurrent/BlockingQueue.java \ - java/util/concurrent/BrokenBarrierException.java \ - java/util/concurrent/Callable.java \ - java/util/concurrent/CancellationException.java \ - java/util/concurrent/CompletionService.java \ - java/util/concurrent/ConcurrentHashMap.java \ - java/util/concurrent/ConcurrentLinkedDeque.java \ - java/util/concurrent/ConcurrentLinkedQueue.java \ - java/util/concurrent/ConcurrentMap.java \ - java/util/concurrent/ConcurrentNavigableMap.java \ - java/util/concurrent/ConcurrentSkipListMap.java \ - java/util/concurrent/ConcurrentSkipListSet.java \ - java/util/concurrent/CopyOnWriteArrayList.java \ - java/util/concurrent/CopyOnWriteArraySet.java \ - java/util/concurrent/CountDownLatch.java \ - java/util/concurrent/CyclicBarrier.java \ - java/util/concurrent/DelayQueue.java \ - java/util/concurrent/Delayed.java \ - java/util/concurrent/Exchanger.java \ - java/util/concurrent/ExecutionException.java \ - java/util/concurrent/Executor.java \ - java/util/concurrent/ExecutorService.java \ - java/util/concurrent/ExecutorCompletionService.java \ - java/util/concurrent/Executors.java \ - java/util/concurrent/ForkJoinPool.java \ - java/util/concurrent/ForkJoinTask.java \ - java/util/concurrent/ForkJoinWorkerThread.java \ - java/util/concurrent/Future.java \ - java/util/concurrent/FutureTask.java \ - java/util/concurrent/LinkedBlockingDeque.java \ - java/util/concurrent/LinkedBlockingQueue.java \ - java/util/concurrent/LinkedTransferQueue.java \ - java/util/concurrent/Phaser.java \ - java/util/concurrent/PriorityBlockingQueue.java \ - java/util/concurrent/RecursiveAction.java \ - java/util/concurrent/RecursiveTask.java \ - java/util/concurrent/RejectedExecutionException.java \ - java/util/concurrent/RejectedExecutionHandler.java \ - java/util/concurrent/RunnableFuture.java \ - java/util/concurrent/RunnableScheduledFuture.java \ - java/util/concurrent/ScheduledExecutorService.java \ - java/util/concurrent/ScheduledFuture.java \ - java/util/concurrent/ScheduledThreadPoolExecutor.java \ - java/util/concurrent/Semaphore.java \ - java/util/concurrent/SynchronousQueue.java \ - java/util/concurrent/ThreadFactory.java \ - java/util/concurrent/ThreadLocalRandom.java \ - java/util/concurrent/ThreadPoolExecutor.java \ - java/util/concurrent/TimeUnit.java \ - java/util/concurrent/TimeoutException.java \ - java/util/concurrent/TransferQueue.java \ - java/util/concurrent/atomic/AtomicBoolean.java \ - java/util/concurrent/atomic/AtomicInteger.java \ - java/util/concurrent/atomic/AtomicIntegerArray.java \ - java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java \ - java/util/concurrent/atomic/AtomicLong.java \ - java/util/concurrent/atomic/AtomicLongArray.java \ - java/util/concurrent/atomic/AtomicLongFieldUpdater.java \ - java/util/concurrent/atomic/AtomicMarkableReference.java \ - java/util/concurrent/atomic/AtomicReference.java \ - java/util/concurrent/atomic/AtomicReferenceArray.java \ - java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java \ - java/util/concurrent/atomic/AtomicStampedReference.java \ - java/util/concurrent/locks/AbstractOwnableSynchronizer.java \ - java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java \ - java/util/concurrent/locks/AbstractQueuedSynchronizer.java \ - java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java \ - java/util/concurrent/locks/Condition.java \ - java/util/concurrent/locks/Lock.java \ - java/util/concurrent/locks/LockSupport.java \ - java/util/concurrent/locks/ReadWriteLock.java \ - java/util/concurrent/locks/ReentrantLock.java \ - java/util/concurrent/locks/ReentrantReadWriteLock.java \ - java/util/regex/Pattern.java \ - java/util/regex/Matcher.java \ - java/util/regex/MatchResult.java \ - java/util/regex/ASCII.java \ - java/util/regex/UnicodeProp.java \ - java/util/regex/PatternSyntaxException.java \ - java/util/prefs/Preferences.java \ - java/util/prefs/AbstractPreferences.java \ - java/util/prefs/PreferenceChangeEvent.java \ - java/util/prefs/PreferenceChangeListener.java \ - java/util/prefs/NodeChangeEvent.java \ - java/util/prefs/NodeChangeListener.java \ - java/util/prefs/BackingStoreException.java \ - java/util/prefs/InvalidPreferencesFormatException.java \ - java/util/prefs/PreferencesFactory.java \ - java/util/prefs/Base64.java \ - java/util/prefs/XmlSupport.java \ - java/util/spi/CurrencyNameProvider.java \ - java/util/spi/LocaleNameProvider.java \ - java/util/spi/LocaleServiceProvider.java \ - java/util/spi/TimeZoneNameProvider.java \ - java/io/Closeable.java \ - java/io/Flushable.java \ - java/io/PipedInputStream.java \ - java/io/PipedOutputStream.java \ - java/io/IOException.java \ - java/io/CharConversionException.java \ - java/io/FileNotFoundException.java \ - java/io/EOFException.java \ - java/io/SyncFailedException.java \ - java/io/UTFDataFormatException.java \ - java/io/InterruptedIOException.java \ - java/io/UnsupportedEncodingException.java \ - java/io/DataInput.java \ - java/io/DataOutput.java \ - java/io/InputStream.java \ - java/io/FileInputStream.java \ - java/io/FilterInputStream.java \ - java/io/BufferedInputStream.java \ - java/io/DataInputStream.java \ - java/io/ByteArrayInputStream.java \ - java/io/PushbackInputStream.java \ - java/io/SequenceInputStream.java \ - java/io/StringBufferInputStream.java \ - java/io/LineNumberInputStream.java \ - java/io/OutputStream.java \ - java/io/FileOutputStream.java \ - java/io/FilterOutputStream.java \ - java/io/BufferedOutputStream.java \ - java/io/DataOutputStream.java \ - java/io/ByteArrayOutputStream.java \ - java/io/PrintStream.java \ - java/io/RandomAccessFile.java \ - java/io/StreamTokenizer.java \ - java/io/DeleteOnExitHook.java \ - java/io/File.java \ - java/io/FileSystem.java \ - java/io/FileDescriptor.java \ - java/io/FilenameFilter.java \ - java/io/FileFilter.java \ - java/io/FilePermission.java \ - java/io/Serializable.java \ - java/io/Externalizable.java \ - java/io/SerialCallbackContext.java \ - java/io/Bits.java \ - java/io/ObjectInput.java \ - java/io/ObjectInputStream.java \ - java/io/ObjectInputValidation.java \ - java/io/ObjectOutput.java \ - java/io/ObjectOutputStream.java \ - java/io/ObjectStreamClass.java \ - java/io/ObjectStreamConstants.java \ - java/io/ObjectStreamField.java \ - java/io/SerializablePermission.java \ - java/io/InvalidClassException.java \ - java/io/InvalidObjectException.java \ - java/io/NotActiveException.java \ - java/io/NotSerializableException.java \ - java/io/ObjectStreamException.java \ - java/io/OptionalDataException.java \ - java/io/StreamCorruptedException.java \ - java/io/WriteAbortedException.java \ - java/io/Reader.java \ - java/io/BufferedReader.java \ - java/io/LineNumberReader.java \ - java/io/CharArrayReader.java \ - java/io/FilterReader.java \ - java/io/PushbackReader.java \ - java/io/InputStreamReader.java \ - java/io/FileReader.java \ - java/io/PipedReader.java \ - java/io/StringReader.java \ - java/io/Writer.java \ - java/io/BufferedWriter.java \ - java/io/PrintWriter.java \ - java/io/CharArrayWriter.java \ - java/io/FilterWriter.java \ - java/io/OutputStreamWriter.java \ - java/io/FileWriter.java \ - java/io/PipedWriter.java \ - java/io/StringWriter.java \ - java/io/Console.java \ - java/io/ExpiringCache.java \ - java/nio/charset/Charset.java \ - java/nio/charset/CharsetDecoder.java \ - java/nio/charset/CharsetEncoder.java \ - java/nio/charset/UnmappableCharacterException.java \ - java/nio/Bits.java \ - java/nio/DirectByteBuffer.java \ - java/nio/HeapByteBuffer.java \ - java/nio/HeapCharBuffer.java \ - java/security/AccessController.java \ - java/security/ProtectionDomain.java \ - java/net/URLClassLoader.java \ - java/net/URLConnection.java \ - sun/misc/Launcher.java \ - sun/misc/MetaIndex.java \ - sun/misc/URLClassPath.java \ - sun/misc/Version.java \ - sun/misc/FileURLMapper.java \ - sun/misc/MessageUtils.java \ - sun/misc/GC.java \ - sun/misc/Service.java \ - sun/misc/JavaAWTAccess.java \ - sun/misc/JavaLangAccess.java \ - sun/misc/JavaIOAccess.java \ - sun/misc/JavaIOFileDescriptorAccess.java \ - sun/misc/JavaNioAccess.java \ - sun/misc/Perf.java \ - sun/misc/PerfCounter.java \ - sun/net/www/protocol/jar/Handler.java \ - sun/net/www/protocol/jar/JarURLConnection.java \ - sun/net/www/protocol/file/Handler.java \ - sun/net/www/protocol/file/FileURLConnection.java - -FILES_java = $(JAVA_JAVA_java) diff --git a/jdk/makefiles/java/java/Makefile b/jdk/makefiles/java/java/Makefile deleted file mode 100644 index 451fbeaa3a0..00000000000 --- a/jdk/makefiles/java/java/Makefile +++ /dev/null @@ -1,375 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for core Java libraries -# (java.lang, java.lang.ref, java.lang.reflect, java.io, java.util) -# - -BUILDDIR = ../.. -PACKAGE = java.lang -LIBRARY = java -PRODUCT = java -SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=true -SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true -JAVAC_MAX_WARNINGS=true -include $(BUILDDIR)/common/Defs.gmk - -$(info ENTERING java) - -# windows compiler flags -ifeq ($(PLATFORM),windows) - OTHER_CFLAGS = - # build directly into BINDIR... - LIB_LOCATION = $(BINDIR) - # Exported functions - OTHER_LCF = -export:winFileHandleOpen -export:handleLseek -endif - -OTHER_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ - -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ - -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \ - -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"' - -ifdef JDK_UPDATE_VERSION -OTHER_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"' -endif - - -# -# Files to compile. -# -include FILES_c.gmk -include FILES_java.gmk -include Exportedfiles.gmk - -ifeq ($(PLATFORM),windows) -FILES_java += java/io/Win32FileSystem.java \ - java/io/WinNTFileSystem.java \ - java/util/prefs/WindowsPreferences.java \ - java/util/prefs/WindowsPreferencesFactory.java - -FILES_c += ProcessImpl_md.c \ - Win32FileSystem_md.c \ - WinNTFileSystem_md.c \ - canonicalize_md.c \ - dirent_md.c \ - TimeZone.c \ - TimeZone_md.c \ - WindowsPreferences.c \ - sun/security/provider/WinCAPISeedGenerator.c \ - sun/io/Win32ErrorMode.c - -else # PLATFORM -FILES_java += java/lang/UNIXProcess.java \ - java/io/UnixFileSystem.java \ - java/util/prefs/FileSystemPreferences.java \ - java/util/prefs/FileSystemPreferencesFactory.java \ - -FILES_c += UNIXProcess_md.c \ - UnixFileSystem_md.c \ - canonicalize_md.c \ - TimeZone.c \ - TimeZone_md.c \ - FileSystemPreferences.c - -INIT += $(GENSRCDIR)/java/lang/UNIXProcess.java - -endif # PLATFORM - -ifeq ($(PLATFORM), macosx) -FILES_c += java_props_macosx.c -FILES_java += java/util/prefs/MacOSXPreferences.java \ - java/util/prefs/MacOSXPreferencesFile.java \ - java/util/prefs/MacOSXPreferencesFactory.java - -CFLAGS_$(VARIANT)/java_props_md.o = -Os -x objective-c -endif - -# -# Make sure first rule does 'all' -# -default_rule: all - -# -# Source files to generate before we try to compile anything -# - -CLASSES_INIT = niosrc rbcontrolsrc - -niosrc: ; ($(CD) ../nio; $(MAKE) sources) - -rbcontrolsrc: $(GENSRCDIR)/sun/util/CoreResourceBundleControl.java - -# -# Add to the default C file search paths -# -vpath %.c $(PLATFORM_SRC)/native/java/lang:$(SHARE_SRC)/native/java/lang -vpath %.c $(SHARE_SRC)/native/java/lang/ref -vpath %.c $(SHARE_SRC)/native/java/lang/reflect -vpath %.c $(SHARE_SRC)/native/java/io -vpath %.c $(PLATFORM_SRC)/native/java/io -vpath %.c $(SHARE_SRC)/native/java/nio -vpath %.c $(SHARE_SRC)/native/java/security -vpath %.c $(SHARE_SRC)/native/common -vpath %.c $(SHARE_SRC)/native/sun/misc -vpath %.c $(SHARE_SRC)/native/sun/reflect -vpath %.c $(SHARE_SRC)/native/java/sql -vpath %.c $(SHARE_SRC)/native/java/util -vpath %.c $(SHARE_SRC)/native/java/util/concurrent/atomic -vpath %.c $(PLATFORM_SRC)/native/common -vpath %.c $(PLATFORM_SRC)/native/java/util -vpath %.c $(PLATFORM_SRC)/native/sun/security/provider -vpath %.c $(PLATFORM_SRC)/native/sun/io - -# -# Includes the fdlibm header file. -# -OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/lang/fdlibm/include - -# -# Also include the io_util.h header file. -# -OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/io -OTHER_INCLUDES += -I$(PLATFORM_SRC)/native/java/io - -# -# Also include the TimeZone_md.h header file. -# -OTHER_INCLUDES += -I$(PLATFORM_SRC)/native/java/util - -# -# Is the altzone extern documented in ctime(3C) available? -# -ifneq ($(PLATFORM), windows) -ifneq ($(PLATFORM), macosx) -HAVE_ALTZONE=true -endif -endif - -ifeq ($(HAVE_ALTZONE),true) -OTHER_CPPFLAGS += -DHAVE_ALTZONE -endif - -# -# System.c needs RELEASE. -# java_props_md.c needs ARCH on non-Solaris platforms. -# -OTHER_CPPFLAGS += $(VERSION_DEFINES) - -# -# Include name of LIBARCH -# -OTHER_CPPFLAGS += -DARCHPROPNAME='"$(ARCHPROP)"' - -# -# Is the key in the call nl_langinfo(CODESET) called something other than -# CODESET? -# -ifdef ALT_CODESET_KEY -OTHER_CPPFLAGS += -DALT_CODESET_KEY=$(ALT_CODESET_KEY) -endif - -# -# Install .lib file. -# -INSTALL_DOT_LIB = true - -# -# What to link? -# On Windows, shell32 is not normally required and so it is delay loaded. -# -ifeq ($(PLATFORM),windows) -OTHER_LDLIBS += $(JVMLIB) -libpath:$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) fdlibm.lib \ - -libpath:$(OBJDIR)/../../../verify/$(OBJDIRNAME) verify.lib \ - shell32.lib delayimp.lib /DELAYLOAD:shell32.dll -else -OTHER_LDLIBS += $(JVMLIB) -lverify $(LIBSOCKET) $(LIBNSL) $(LIBSCF) $(LIBDL) \ - -L$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) -lfdlibm.$(ARCH) -ifeq ($(PLATFORM), macosx) -OTHER_LDLIBS += \ - -framework CoreFoundation \ - -framework Security \ - -framework SystemConfiguration -endif -endif - -# -# Rules. -# -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - FILES_reorder += reorder-$(ARCH) - endif -endif - -SUBDIRS = reflect -include $(BUILDDIR)/common/Subdirs.gmk - -all build: - $(SUBDIRS-loop) -clean clobber:: - $(SUBDIRS-loop) - -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -ifeq ($(PLATFORM), solaris) - ifeq ($(CC_VER), 5.8) - ifndef REMOVE_ALL_WORKAROUNDS - CFLAGS_OPT/ObjectInputStream.o = -xO3 \ - $(warning "WARNING: Using workaround for SS11 bug 6346242, on $@") - endif - endif -endif - -ifneq ($(PLATFORM),windows) - -# UNIXProcess.java is different for solaris and linux. We need to copy -# the correct UNIXProcess.java over to $(GENSRCDIR)/java/lang/. - -ifeq ($(PLATFORM), macosx) -PLATFORM_UNIX_PROCESS = \ - $(PLATFORM_SRC)/classes/java/lang/UNIXProcess.java.bsd -else -PLATFORM_UNIX_PROCESS = \ - $(PLATFORM_SRC)/classes/java/lang/UNIXProcess.java.$(PLATFORM) -endif - -$(GENSRCDIR)/java/lang/UNIXProcess.java: $(PLATFORM_UNIX_PROCESS) - $(install-file) - -clean:: - $(RM) $(GENSRCDIR)/java/lang/UNIXProcess.java - -endif - - -# -# Because we can't link against ourselves! -# -JAVALIB = - -# -# Special rules. -# -clean:: - $(RM) -r $(CLASSHDRDIR) - -clobber:: - $(RM) -r $(CLASSBINDIR)/java/io $(CLASSBINDIR)/java/lang \ - $(CLASSBINDIR)/java/security $(CLASSBINDIR)/java/util \ - $(CLASSBINDIR)/sun/misc - -# -# Additional rule from sun/net/GNUmakefile to copy content-type.properties -# file so that the MimeTable class won't complain while bootstrapping... -# -PROPS = content-types.properties - -# -# Rule to copy calendars.properties file. -# -CAL_PROPS = calendars.properties - -# -# Rule to copy tzmappings file on Windows -# -ifeq ($(PLATFORM), windows) -TZMAP = $(LIBDIR)/tzmappings -TZMAPFILE = $(PLATFORM_SRC)/lib/tzmappings - -$(TZMAP): $(TZMAPFILE) - $(install-file) - $(call chmod-file, 444) -endif - -build: $(LIBDIR)/$(PROPS) $(LIBDIR)/$(CAL_PROPS) $(TZMAP) - -$(LIBDIR)/$(PROPS): $(PLATFORM_SRC)/lib/$(PROPS) - $(install-file) - -$(LIBDIR)/$(CAL_PROPS): $(SHARE_SRC)/lib/$(CAL_PROPS) - $(install-file) - -clean:: - $(RM) -r $(LIBDIR)/$(PROPS) $(TZMAP) - -# -# Rules to create lib/currency.data -# - -CURDATA = $(LIBDIR)/currency.data - -build: $(CURDATA) - -$(CURDATA): \ - $(BUILD_TOOLS) \ - $(SHARE_SRC)/classes/java/util/CurrencyData.properties - $(RM) $(CURDATA) - $(TOOL_GENERATECURRENCYDATA) -o $@.temp \ - < $(SHARE_SRC)/classes/java/util/CurrencyData.properties - $(MV) $@.temp $@ - $(call chmod-file, 444) - -clean:: - $(RM) $(CURDATA) - - -# -# Rules to generate classes/java/lang/uniName.dat -# - - - -UNINAME = $(CLASSBINDIR)/java/lang/uniName.dat - -build: $(UNINAME) -$(UNINAME): $(JDK_TOPDIR)/make/tools/UnicodeData/UnicodeData.txt \ - $(BUILD_TOOLS) - @$(prep-target) - $(TOOL_CHARACTERNAME) \ - $(JDK_TOPDIR)/make/tools/UnicodeData/UnicodeData.txt $(UNINAME) - -clean:: - $(RM) $(UNINAME) - -# -# End of rules to create $(GENSRCDIR)/java/lang/CharacterDataXX.java -# - -# -# Rule to precompile CoreResourceBundleControl.java -# -LOCALES_GEN_SH = localelist.sh - -$(GENSRCDIR)/sun/util/CoreResourceBundleControl.java: \ - $(SHARE_SRC)/classes/sun/util/CoreResourceBundleControl-XLocales.java.template $(LOCALES_GEN_SH) - @$(prep-target) - NAWK="$(NAWK)" SED="$(SED)" $(SH) $(LOCALES_GEN_SH) "$(JRE_NONEXIST_LOCALES)" \ - $< $@ -clean:: - $(RM) $(GENSRCDIR)/sun/util/CoreResourceBundleControl.java - diff --git a/jdk/makefiles/java/java/reflect/Makefile b/jdk/makefiles/java/java/reflect/Makefile deleted file mode 100644 index 40bd886c081..00000000000 --- a/jdk/makefiles/java/java/reflect/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# -# Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for reflection and annotations -# - -BUILDDIR = ../../.. -PACKAGE = java.lang.reflect -PRODUCT = java - -include $(BUILDDIR)/common/Defs.gmk - -# -# Files to compile. -# -AUTO_FILES_JAVA_DIRS = java/lang/reflect sun/reflect - -# -# Install .lib file. -# -INSTALL_DOT_LIB = true - -include $(BUILDDIR)/common/Classes.gmk - -# -# Special rules. -# - -subdirs: classes - -clean:: - $(RM) -r $(CLASSHDRDIR) - -clobber:: - $(RM) -r $(CLASSBINDIR)/java/lang/reflect \ - $(CLASSBINDIR)/java/lang/annotatation - -.PHONY: clean clobber diff --git a/jdk/makefiles/java/java_crw_demo/Makefile b/jdk/makefiles/java/java_crw_demo/Makefile deleted file mode 100644 index ebcadd74656..00000000000 --- a/jdk/makefiles/java/java_crw_demo/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. - -LIBRARY = java_crw_demo -PRODUCT = sun -LIBRARY_OUTPUT = java_crw_demo - -# Configure the CFLAGS for this library. - -include $(BUILDDIR)/common/Defs.gmk - -SRCDIR=$(SHARE_SRC)/demo/jvmti/java_crw_demo - -# Use the mapfile-vers (See the mapfile located with this Makefile) -FILES_m = mapfile-vers -ifdef FILES_m -include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -# -# Files to compile. -# -FILES_c = java_crw_demo.c - -OTHER_INCLUDES = -I$(SRCDIR) - -# -# Library to compile. -# -include $(BUILDDIR)/common/Library.gmk - -# We don't want to link against -ljava -JAVALIB= - -# -# Add to ambient vpath so we pick up the library files -# -vpath %.c $(SRCDIR) - diff --git a/jdk/makefiles/java/java_hprof_demo/Makefile b/jdk/makefiles/java/java_hprof_demo/Makefile deleted file mode 100644 index 9880547be71..00000000000 --- a/jdk/makefiles/java/java_hprof_demo/Makefile +++ /dev/null @@ -1,120 +0,0 @@ -# -# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -LIBRARY = hprof -PRODUCT = sun -LIBRARY_OUTPUT = hprof_jvmti - -# Use highest optimization -OPTIMIZATION_LEVEL = HIGHEST - -# Configure the CFLAGS for this library. -FILES_m = mapfile-vers - -include $(BUILDDIR)/common/Defs.gmk - -SRCDIR=$(SHARE_SRC)/demo/jvmti/hprof -PSRCDIR=$(PLATFORM_SRC)/demo/jvmti/hprof - -# Use the mapfile-vers (See the mapfile located with this Makefile) -ifdef FILES_m -include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -# -# Files to compile. -# -FILES_c = \ - debug_malloc.c \ - hprof_blocks.c \ - hprof_check.c \ - hprof_class.c \ - hprof_cpu.c \ - hprof_error.c \ - hprof_event.c \ - hprof_frame.c \ - hprof_init.c \ - hprof_io.c \ - hprof_ioname.c \ - hprof_listener.c \ - hprof_loader.c \ - hprof_md.c \ - hprof_monitor.c \ - hprof_object.c \ - hprof_reference.c \ - hprof_site.c \ - hprof_stack.c \ - hprof_string.c \ - hprof_table.c \ - hprof_tag.c \ - hprof_tls.c \ - hprof_trace.c \ - hprof_tracker.c \ - hprof_util.c - -OTHER_INCLUDES = -I$(SRCDIR) \ - -I$(SHARE_SRC)/npt \ - -I$(PLATFORM_SRC)/npt \ - -I$(SHARE_SRC)/demo/jvmti/java_crw_demo - -ifeq ($(PLATFORM), windows) - OTHER_LDLIBS += wsock32.lib winmm.lib -else - OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) $(LIBDL) -endif - -# -# Tell library.gmk to copy the txt file first -# -INIT += $(LIBDIR)/jvm.hprof.txt - -# -# This puts logging code in -# -CPPFLAGS_DBG += -DHPROF_LOGGING - -# -# Library to compile. -# -include $(BUILDDIR)/common/Library.gmk - -# We don't want to link against -ljava -JAVALIB= - -# -# Add to ambient vpath so we pick up the library files -# -vpath %.c $(SRCDIR):$(PSRCDIR) - -# -# Install the hprof prelude -# -$(LIBDIR)/jvm.hprof.txt: $(SRCDIR)/jvm.hprof.txt - $(install-file) - -clean clobber:: - $(RM) $(LIBDIR)/jvm.hprof.txt - diff --git a/jdk/makefiles/java/jexec/Makefile b/jdk/makefiles/java/jexec/Makefile deleted file mode 100644 index aa379048f05..00000000000 --- a/jdk/makefiles/java/jexec/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -# -# Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building jexec, a wrapper for direct execution of JAR files -# on UNIX systems. -# - -BUILDDIR = ../.. - -PACKAGE = java.jexec -PRODUCT = sun -PROGRAM = jexec - -include $(BUILDDIR)/common/Defs.gmk - -ifeq ($(COMPILE_APPROACH),batch) - override COMPILE_APPROACH = normal -endif - -include $(BUILDDIR)/common/Rules.gmk - -JEXE_SRC = $(PLATFORM_SRC)/bin - -FILES_c = jexec.c -FILES_o = $(patsubst %.c,$(OBJDIR)/%.o,$(FILES_c)) - -vpath %.c $(JEXE_SRC) - -ifeq ($(PLATFORM), linux) - # - # On Linux jexec goes in lib, not lib/ - # - LIB_LOCATION = $(LIBDIR) - - # - # Also include the manifest_info.h header file. - # - OTHER_INCLUDES += -I$(SHARE_SRC)/bin -endif # PLATFORM - -build: $(LIB_LOCATION)/$(PROGRAM) - -$(LIB_LOCATION)/$(PROGRAM):: $(FILES_o) - $(prep-target) - $(LINK_PRE_CMD) $(CC) $(LDFLAGS) $(FILES_o) $(CC_OBJECT_OUTPUT_FLAG)$@ - -clean clobber:: - $(RM) $(FILES_o) $(LIB_LOCATION)/$(PROGRAM) - diff --git a/jdk/makefiles/java/jli/Makefile b/jdk/makefiles/java/jli/Makefile deleted file mode 100644 index 8aec159e4d1..00000000000 --- a/jdk/makefiles/java/jli/Makefile +++ /dev/null @@ -1,231 +0,0 @@ -# -# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Java Launcher Infrastructure Library (libjli) -# -# This library provides shared support for the Java launcher in all of -# its manifestations (java, javaw, javac, ...). -# -BUILDDIR = ../.. -LIBRARY = jli -PRODUCT = java - -# -# Must be included before Defs.gmk to be functional. -# -# Note that for Windows, both a dynamic and static version are built. -# Doing the compiles with the static library specified can be overridden -# by the link step, but not the reverse. -# -MS_RUNTIME_STATIC = true - -include $(BUILDDIR)/common/Defs.gmk - -ifneq ($(SYSTEM_ZLIB),true) - ZIP_SRC = $(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION) -endif #SYSTEM_ZLIB -LAUNCHER_SHARE_SRC = $(SHARE_SRC)/bin - -# set the platform specific directory for macosx, also this platform shares -# substantial family ties with its siblings (solaris and linux), thus we add -# solaris src path to its compilation dependencies. -ifeq ($(PLATFORM), macosx) - LAUNCHER_PLATFORM_SRC = $(BUILDDIR)/../src/macosx/bin - LAUNCHER_SOLARIS_PLATFORM_SRC = $(BUILDDIR)/../src/solaris/bin -else # !MACOSX - LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC)/bin -endif #PLATFORM - -ifeq ($(ZERO_BUILD), true) - ERGO_FAMILY=zero -else # !ZERO_BUILD - ifneq (,$(findstring $(ARCH_FAMILY), amd64 x86_64)) - ERGO_FAMILY=i586 - else # !X86 FAMILY - ERGO_FAMILY=$(ARCH_FAMILY) - endif #ARCH_FAMILY -endif # ZERO_BUILD - -# -# Files to compile. -# -FILES_c = java.c \ - splashscreen_stubs.c \ - parse_manifest.c \ - version_comp.c \ - wildcard.c \ - jli_util.c - -ifneq ($(SYSTEM_ZLIB),true) - FILES_c += inflate.c \ - inftrees.c \ - inffast.c \ - zadler32.c \ - zcrc32.c \ - zutil.c -endif # SYSTEM_ZLIB - -# add platform specific files -ifeq ($(PLATFORM), windows) - FILES_c += java_md.c -else # NIXES - FILES_c += java_md_common.c - ifeq ($(PLATFORM), macosx) - FILES_c += java_md_macosx.c - else # SOLARIS/LINUX - FILES_c += java_md_solinux.c - FILES_c += ergo.c - ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c - # if the architecture specific ergo file exists then - # use it, else use the generic definitions from ergo.c - ifneq ($(wildcard $(LAUNCHER_PLATFORM_SRC)/$(ERGO_ARCH_FILE)),) - FILES_c += $(ERGO_ARCH_FILE) - else # !ERGO_ARCH_FILE - OTHER_CPPFLAGS += -DUSE_GENERIC_ERGO - endif # ERGO_ARCH_FILE - endif #MACOSX -endif #WINDOWS - -# Names of arch directories -LIBARCH_DEFINES = -DLIBARCHNAME='"$(LIBARCH)"' -ifeq ($(PLATFORM), solaris) - LIBARCH_DEFINES += -DLIBARCH32NAME='"$(LIBARCH32)"' - LIBARCH_DEFINES += -DLIBARCH64NAME='"$(LIBARCH64)"' -endif # PLATFORM - -ifeq ($(PLATFORM), macosx) - OTHER_CPPFLAGS += $(LIBARCH_DEFINES) -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" -else # ! MACOSX - OTHER_CPPFLAGS += $(LIBARCH_DEFINES) -endif #PLATFORM - -ifneq ($(PLATFORM), windows) # UNIX systems - ifeq ($(PLATFORM), macosx) - LIB_LOCATION = $(LIBDIR)/jli - else # SOLARIS/LINUX - LD_RUNPATH_EXTRAS += .. - LIB_LOCATION = $(LIBDIR)/$(LIBARCH)/jli - # Note: it is important to keep this order, meaning -lc as the - # last library, otherwise it could cause compatibility issues - # by pulling in SUNW_private symbols from libc - LDLIBS = -ldl -lc - ifeq ($(USE_PTHREADS),true) - LDLIBS += -lpthread - endif # USE_PTHREADS - endif # PLATFORM -endif # PLATFORM - -ifeq ($(PLATFORM), windows) - EXTRA_LIBS = advapi32.lib \ - comctl32.lib \ - user32.lib - JAVALIB = - OTHER_LCF = -export:JLI_Launch \ - -export:JLI_ManifestIterate \ - -export:JLI_SetTraceLauncher \ - -export:JLI_ReportErrorMessage \ - -export:JLI_ReportErrorMessageSys \ - -export:JLI_ReportMessage \ - -export:JLI_ReportExceptionDescription -endif # PLATFORM - -OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC) -OTHER_INCLUDES += -I$(LAUNCHER_PLATFORM_SRC) -ifneq ($(SYSTEM_ZLIB),true) - OTHER_INCLUDES += -I$(ZIP_SRC) -else # !SYSTEM_ZLIB - LDLIBS += -lz -endif # SYSTEM_ZLIB - -# -# Library to compile. -# -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -# -# On Windows, some executable objects need to be statically linked against -# the jli library. Hence, we need both a standard library (archive) and -# an import library (associated with a dll). These both usually have the -# extension .LIB, so they need to be placed in different directories. The -# import library is build (as usual) in the $(OBJDIR) directory while the -# standard library is built in a "static" subdirectory. The standard library -# is not delivered as part of the product, but is only needed as part of -# the build process. The import library is built by the standard rules -# in Library.gmk. The additional rules which follow build the standard -# library. -# -ifeq ($(PLATFORM), windows) - STATIC_LIBRARY = $(OBJDIR)/static/$(LIBPREFIX)$(LIBRARY).lib - - $(STATIC_LIBRARY): $(FILES_o) - @$(prep-target) - $(AR) -nologo -out:$@ $(FILES_o) - - library:: $(STATIC_LIBRARY) -else - -ifeq ($(PLATFORM), macosx) - # Some Obj-C code is embedded in java_md_macosx.c, we stipulate so, using - # "-x" option. Not doing so will cause the compiler to choose the language - # based on the filename suffix, also "-Os" optimizes the file for size. - CFLAGS_$(VARIANT)/java_md_macosx.o = -Os -x objective-c - # Needed for linking the various launchers - LDFLAGS += -framework Cocoa -framework Security \ - -framework ApplicationServices - # Add solaris sources containing common logic to the header path - OTHER_INCLUDES += -I$(LAUNCHER_SOLARIS_PLATFORM_SRC) -endif # PLATFORM macosx - -STATIC_LIBRARY_DIR = $(OBJDIR)/static -STATIC_LIBRARY_NAME = lib$(LIBRARY).a -STATIC_LIBRARY = $(STATIC_LIBRARY_DIR)/$(STATIC_LIBRARY_NAME) - -$(STATIC_LIBRARY_DIR): | $(OBJDIR) - @$(MKDIR) $(STATIC_LIBRARY_DIR) - -$(STATIC_LIBRARY): $(STATIC_LIBRARY_DIR) - @$(prep-target) - $(AR) $(ARFLAGS) $@ $(FILES_o) - -library:: $(STATIC_LIBRARY) -endif # NOT WINDOWS - -vpath %.c $(LAUNCHER_SHARE_SRC) $(LAUNCHER_PLATFORM_SRC) -ifneq ($(SYSTEM_ZLIB),true) - vpath %.c $(ZIP_SRC) -else # !SYSTEM_ZLIB - # - # Add to ambient vpath so we pick up the library files, for macos we add - # solaris sources which contains the common logic for all nixes - # - ifeq ($(PLATFORM), macosx) - vpath %.c $(LAUNCHER_SHARE_SRC) $(ZIP_SRC) $(LAUNCHER_PLATFORM_SRC) \ - $(LAUNCHER_SOLARIS_PLATFORM_SRC) - else # !MACOSX - vpath %.c $(LAUNCHER_SHARE_SRC) $(ZIP_SRC) $(LAUNCHER_PLATFORM_SRC) - endif # MACOSX -endif # SYSTEM_LIB diff --git a/jdk/makefiles/java/jobjc/Makefile b/jdk/makefiles/java/jobjc/Makefile deleted file mode 100644 index 6996cbfabeb..00000000000 --- a/jdk/makefiles/java/jobjc/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building jobjc - -BUILDDIR = ../.. -include $(BUILDDIR)/common/Defs.gmk -SRCDIR = $(JDK_TOPDIR)/src/macosx/native/jobjc - -ifeq ($(PLATFORM),macosx) - -# FRAMEWORKS for which we want to build bridge support -FRAMEWORKS = Foundation CoreFoundation AppKit - -# metadata stuff -GEN_DIR = $(OUTPUTDIR)/bridge_metadata -STABLE_GEN_DIR = $(OUTPUTDIR)/stable_bridge_metadata -STABLE_METADATA_FILES = $(addsuffix Full.bridgesupport,$(addprefix $(STABLE_GEN_DIR)/,$(FRAMEWORKS))) - -# source files -CORE_SRC = $(shell $(FIND) $(SRCDIR) -type f -name "*.hs" -or -name "*.java" -or -name "*.m" -or -name "*.h" -print) -GENERATOR_SRC = $(shell $(FIND) $(SRCDIR) -type f -name "*.java" -print) -ADDITIONS_SRC = $(shell $(FIND) $(SRCDIR) -type f -name "*.java" -or -name "*.m" -or -name "*.h" -print) -BUILD_SRC = $(SRCDIR)/JObjC.xcodeproj/project.pbxproj $(SRCDIR)/bridgesupport.gmk $(SRCDIR)/build.xml $(SRCDIR)/extract_classes.pl $(SRCDIR)/run-and-write-if-okay $(SRCDIR)/rungen $(SRCDIR)/runjava - -# jobjc products for jdk -BUILT_DYLIB = $(OUTPUTDIR)/JObjC.dst/Debug/libJObjC.dylib -BUILT_JAR = $(OUTPUTDIR)/JObjC.build/JObjC.jar - -$(GEN_DIR): - mkdir -p $(GEN_DIR) - -stabilize: $(GEN_DIR) - @echo Updating bridge support in $(GEN_DIR) - ($(CD) $(GEN_DIR); $(MAKE) STABLE_GEN_DIR="$(STABLE_GEN_DIR)" FRAMEWORKS="$(FRAMEWORKS)" -f $(SRCDIR)/bridgesupport.gmk all) - -$(STABLE_METADATA_FILES): stabilize - -ABS_OUTPUTDIR=$(realpath $(OUTPUTDIR)) -ABS_STABLE_GEN_DIR=$(realpath $(STABLE_GEN_DIR)) - -$(BUILT_DYLIB) $(BUILT_JAR): $(STABLE_METADATA_FILES) $(CORE_SRC) $(GENERATOR_SRC) $(ADDITIONS_SRC) $(BUILD_SRC) - @echo JObjC dylib or jar out of data wrt FRAMEWORKS '(' $(FRAMEWORKS) ')' or JObjC source '(' core, generator, additions, build ')' - @echo Running ant with java_home set to ${ALT_BOOTDIR} - (cd $(SRCDIR); OBJROOT="$(ABS_OUTPUTDIR)/JObjC.build" DSTROOT="$(ABS_OUTPUTDIR)/JObjC.dst" JAVA_HOME=${ALT_BOOTDIR} STABLE_GEN_DIR="$(ABS_STABLE_GEN_DIR)" /usr/bin/ant -verbose all) - -all: $(BUILD_DYLIB) $(BUILT_JAR) - $(CP) $(BUILT_DYLIB) $(LIB_LOCATION)/libJObjC.dylib - -clean clobber:: - (cd $(SRCDIR); export OBJROOT=$(OUTPUTDIR)/JObjC.build; export DSTROOT=$(OUTPUTDIR)/JObjC.dst; /usr/bin/ant clean) - -endif diff --git a/jdk/makefiles/java/jvm/Makefile b/jdk/makefiles/java/jvm/Makefile deleted file mode 100644 index 26f95ff4a99..00000000000 --- a/jdk/makefiles/java/jvm/Makefile +++ /dev/null @@ -1,95 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. - -include $(BUILDDIR)/common/Defs.gmk - -JVMCFG = $(JVMCFG_DIR)/jvm.cfg - -# -# How to install jvm.cfg. -# -ifeq ($(ZERO_BUILD), true) -JVMCFG_ARCH = zero -else -JVMCFG_ARCH = $(ARCH) -endif - -ifeq ($(PLATFORM),macosx) - JVMCFG_SRC=$(PLATFORM_SRC_MACOS)/bin/$(JVMCFG_ARCH)/jvm.cfg - JVMCFG_DIR = $(LIBDIR) -else - JVMCFG_SRC=$(PLATFORM_SRC)/bin/$(JVMCFG_ARCH)/jvm.cfg - JVMCFG_DIR = $(LIBDIR)/$(LIBARCH) -endif - -ifeq ($(ARCH_DATA_MODEL),32) - # On 32 bit machines, we can have client and/or server libjvms installed. - # Since the currently committed jvm.cfg expects clientANDserver, we need - # to patch the jvm.cfg when we have built only a client or only a server. - # This should also support -kernel, -zero and -zeroshark. - ifeq ($(JVM_VARIANTS),$(COMMA)client$(COMMA)) - # Create a patched jvm.cfg to use -client by default and alias -server to -client. - $(JVMCFG):: - $(MKDIR) -p $(JVMCFG_DIR) - $(RM) -f $(JVMCFG) - $(PRINTF) "-client KNOWN\n">$(JVMCFG) - $(PRINTF) "-server IGNORE\n">>$(JVMCFG) - $(PRINTF) "-hotspot ALIASED_TO -client\n">>$(JVMCFG) - $(PRINTF) "-classic WARN\n">>$(JVMCFG) - $(PRINTF) "-native ERROR\n">>$(JVMCFG) - $(PRINTF) "-green ERROR\n">>$(JVMCFG) - else - ifeq ($(JVM_VARIANTS),$(COMMA)server$(COMMA)) - # Create a patched jvm.cfg to use -server by default and alias -client to -server. - $(JVMCFG):: - $(MKDIR) -p $(JVMCFG_DIR) - $(RM) -f $(JVMCFG) - $(PRINTF) "-server KNOWN\n">$(JVMCFG) - $(PRINTF) "-client IGNORE\n">>$(JVMCFG) - $(PRINTF) "-hotspot IGNORE\n">>$(JVMCFG) - $(PRINTF) "-classic WARN\n">>$(JVMCFG) - $(PRINTF) "-native ERROR\n">>$(JVMCFG) - $(PRINTF) "-green ERROR\n">>$(JVMCFG) - else - # Use the default jvm.cfg for this 32 bit setup. - $(JVMCFG): $(JVMCFG_SRC) - $(install-file) - endif - endif -else - # Use the default jvm.cfg for this 64 bit setup. - $(JVMCFG): $(JVMCFG_SRC) - $(install-file) -endif - -all: build - -build: $(JVMCFG) - -clean clobber:: - $(RM) $(JVMCFG) - diff --git a/jdk/makefiles/java/main/Makefile b/jdk/makefiles/java/main/Makefile deleted file mode 100644 index 9eb14ab24d8..00000000000 --- a/jdk/makefiles/java/main/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building java command line tools -# - -BUILDDIR = ../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -ifeq ($(PLATFORM), windows) -SUBDIRS = java javaw -else -SUBDIRS = java -endif -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/java/main/java/Makefile b/jdk/makefiles/java/main/java/Makefile deleted file mode 100644 index 1766880712c..00000000000 --- a/jdk/makefiles/java/main/java/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PROGRAM = java -PRODUCT = java - -# -# Statically link java to avoid the dependency on msvcrNN.dll. This -# must be set before Defs.gmk is included. -# -MS_RUNTIME_STATIC = true -# -# Statically link java to avoid the dependency on jli.dll. This -# must be set before Program.gmk is included. -# -STATIC_JLI = true - -include $(BUILDDIR)/common/Defs.gmk - -# Override the default version info with our own resource file (see 5106536) -ifeq ($(PLATFORM), windows) -LDLIBS_COMMON += user32.lib comctl32.lib - -ifdef OPENJDK - RC_FLAGS += -i "$(PLATFORM_SRC)/resource/icons" -else - RC_FLAGS += -i "$(CLOSED_SRC)/windows/native/sun/windows" -endif - VERSIONINFO_RESOURCE = $(PLATFORM_SRC)/resource/java.rc -endif - -# -# Rules. -# -include $(BUILDDIR)/common/Program.gmk -OTHER_CPPFLAGS += -DEXPAND_CLASSPATH_WILDCARDS -OTHER_CPPFLAGS += -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' - -ifeq ($(PLATFORM), solaris) -LDFLAGS += -R$(OPENWIN_LIB) -endif diff --git a/jdk/makefiles/java/main/java/mapfile-amd64 b/jdk/makefiles/java/main/java/mapfile-amd64 deleted file mode 100644 index 760fcc1a90a..00000000000 --- a/jdk/makefiles/java/main/java/mapfile-amd64 +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# -# Specify what global symbols we export. Note that we're not really -# interested in declaring a version, simply scoping the file is sufficient. -# - -SUNWprivate_1.1 { - global: - main; # Provides basic adb symbol offsets - environ; # Public symbols and required by Java run time - _environ; - __environ_lock; - - local: - *; -}; diff --git a/jdk/makefiles/java/main/java/mapfile-i586 b/jdk/makefiles/java/main/java/mapfile-i586 deleted file mode 100644 index 48061dd8e90..00000000000 --- a/jdk/makefiles/java/main/java/mapfile-i586 +++ /dev/null @@ -1,48 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# -# Specify what global symbols we export. Note that we're not really -# interested in declaring a version, simply scoping the file is sufficient. -# - -SUNWprivate_1.1 { - global: - main; # Provides basic adb symbol offsets - environ; # Public symbols and required by Java run time - _environ; - __environ_lock; - ___Argv; # The following are private, but as they are - _start; # exported from ctr1/crtn, the clever hacker - _init; # might know about them. However note, that - _fini; # their use is strictly not supported. - _lib_version; -# _mcount; - __fsr; - __fsr_init_value; - __longdouble_used; - - local: - *; -}; diff --git a/jdk/makefiles/java/main/java/mapfile-sparc b/jdk/makefiles/java/main/java/mapfile-sparc deleted file mode 100644 index ef7eaf9b7b2..00000000000 --- a/jdk/makefiles/java/main/java/mapfile-sparc +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# Specify what global symbols we export. Note that we're not really -# interested in declaring a version, simply scoping the file is sufficient. -# - -SUNWprivate_1.1 { - global: - main; # Provides basic adb symbol offsets - environ; # Public symbols and required by Java run time - _environ; - __environ_lock; - ___Argv; # The following are private, but as they are - _start; # exported from ctr1/crtn, the clever hacker - _init; # might know about them. However note, that - _fini; # their use is strictly not supported. - _lib_version; - __cg92_used; - __xargc; - __xargv; - __fsr_init_value; - - local: - *; -}; diff --git a/jdk/makefiles/java/main/java/mapfile-sparcv9 b/jdk/makefiles/java/main/java/mapfile-sparcv9 deleted file mode 100644 index 5ecdf6fbcf3..00000000000 --- a/jdk/makefiles/java/main/java/mapfile-sparcv9 +++ /dev/null @@ -1,48 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Specify what global symbols we export. Note that we're not really -# interested in declaring a version, simply scoping the file is sufficient. -# - -SUNWprivate_1.1 { - global: - main; # Provides basic adb symbol offsets - environ; # Public symbols and required by Java run time - _environ; - __environ_lock; - ___Argv; # The following are private, but as they are - _start; # exported from ctr1/crtn, the clever hacker - _init; # might know about them. However note, that - _fini; # their use is strictly not supported. - _lib_version; - __xargc; - __xargv; - __fsr_init_value; - - local: - *; -}; diff --git a/jdk/makefiles/java/main/javaw/Makefile b/jdk/makefiles/java/main/javaw/Makefile deleted file mode 100644 index 93a536e9edd..00000000000 --- a/jdk/makefiles/java/main/javaw/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -# -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building javaw.exe (for windows) -# - -BUILDDIR = ../../.. -PROGRAM = javaw -PRODUCT = java - -# -# Statically link javaw to avoid the dependency on msvcrNN.dll. This -# must be set before Defs.gmk is included. -# -MS_RUNTIME_STATIC = true -# -# Statically link javaw to avoid the dependency on jli.dll. This -# must be set before Program.gmk is included. -# -STATIC_JLI = true - -include $(BUILDDIR)/common/Defs.gmk - -OTHER_CPPFLAGS += -DJAVAW -LDLIBS_COMMON += user32.lib comctl32.lib - -# Override the default version info with our own resource file (see 5106536) -ifeq ($(PLATFORM), windows) -ifdef OPENJDK - RC_FLAGS += -i "$(PLATFORM_SRC)/resource/icons" -else - RC_FLAGS += -i "$(CLOSED_SRC)/windows/native/sun/windows" -endif - VERSIONINFO_RESOURCE = $(PLATFORM_SRC)/resource/java.rc -endif - -# -# Rules. -# -include $(BUILDDIR)/common/Program.gmk -OTHER_CPPFLAGS += -DEXPAND_CLASSPATH_WILDCARDS -OTHER_CPPFLAGS += -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' - diff --git a/jdk/makefiles/java/management/Exportedfiles.gmk b/jdk/makefiles/java/management/Exportedfiles.gmk deleted file mode 100644 index 0654fb57526..00000000000 --- a/jdk/makefiles/java/management/Exportedfiles.gmk +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# These are the names of Java classes for which we will make .h files. -# - -FILES_export = \ - sun/management/ClassLoadingImpl.java \ - sun/management/FileSystemImpl.java \ - sun/management/Flag.java \ - sun/management/GarbageCollectorImpl.java \ - sun/management/GcInfoBuilder.java \ - sun/management/HotSpotDiagnostic.java \ - sun/management/HotspotThread.java \ - sun/management/MemoryImpl.java \ - sun/management/MemoryManagerImpl.java \ - sun/management/MemoryPoolImpl.java \ - sun/management/ThreadImpl.java \ - sun/management/VMManagementImpl.java diff --git a/jdk/makefiles/java/management/FILES_c.gmk b/jdk/makefiles/java/management/FILES_c.gmk deleted file mode 100644 index 8c5ddce29b5..00000000000 --- a/jdk/makefiles/java/management/FILES_c.gmk +++ /dev/null @@ -1,40 +0,0 @@ -# -# Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - ClassLoadingImpl.c \ - FileSystemImpl.c \ - Flag.c \ - GarbageCollectorImpl.c \ - GcInfoBuilder.c \ - HotSpotDiagnostic.c \ - HotspotThread.c \ - MemoryImpl.c \ - MemoryManagerImpl.c \ - MemoryPoolImpl.c \ - ThreadImpl.c \ - VMManagementImpl.c \ - management.c - diff --git a/jdk/makefiles/java/management/Makefile b/jdk/makefiles/java/management/Makefile deleted file mode 100644 index bffb5ed7bdd..00000000000 --- a/jdk/makefiles/java/management/Makefile +++ /dev/null @@ -1,131 +0,0 @@ -# -# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = java.lang.management -LIBRARY = management -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -MGMT_SRC = $(SHARE_SRC)/classes/java/lang/management -SMGMT_SRC = $(SHARE_SRC)/classes/sun/management - -AGENTJAR = $(LIBDIR)/management-agent.jar -MANIFEST = $(SMGMT_SRC)/manifest - -# -# Use mapfile -# -FILES_m = mapfile-vers -include $(BUILDDIR)/common/Mapfile-vers.gmk - -# -# Files to compile -# -include FILES_c.gmk - -# We don't need snmp here. -AUTO_JAVA_PRUNE = snmp -AUTO_FILES_JAVA_DIRS = java/lang/management com/sun/management sun/management - -include Exportedfiles.gmk - -ifeq ($(PLATFORM),windows) - -FILES_c += OperatingSystem_md.c - -FILES_export += com/sun/management/OperatingSystem.java - -else # PLATFORM (i.e. solaris & linux) - -FILES_c += UnixOperatingSystem_md.c - -FILES_export += com/sun/management/UnixOperatingSystem.java - -ifeq ($(PLATFORM),solaris) - -FILES_c += SolarisOperatingSystem.c -OTHER_LDLIBS += -lkstat - -endif # PLATFORM solaris - -ifeq ($(PLATFORM),linux) - -FILES_c += LinuxOperatingSystem.c - -endif # PLATFORM linux - -ifeq ($(PLATFORM),macosx) - -FILES_c += MacosxOperatingSystem.c - -endif # PLATFORM macosx - -endif # PLATFORM - -# -# Resources -# -LOCALE_SET_DEFINITION = jre -RESOURCE_BUNDLES_COMPILED_PROPERTIES = sun/management/resources/agent.properties - -# -# Find C source files -# -vpath %.c $(SHARE_SRC)/native/sun/management -vpath %.c $(PLATFORM_SRC)/native/sun/management -vpath %.c $(PLATFORM_SRC)/native/com/sun/management - -# -# Access to management.h -# - -OTHER_INCLUDES += \ - -I$(SHARE_SRC)/native/sun/management - -ifeq ($(PLATFORM),windows) - # Need process status helper API (psapi) on Windows - OTHER_LDLIBS += $(JVMLIB) psapi.lib -endif - -# -# Library to compile. -# -include $(BUILDDIR)/common/Library.gmk - -$(AGENTJAR): $(LIBDIR) $(TEMPDIR)/manifest - $(BOOT_JAR_CMD) -cfm $(AGENTJAR) $(TEMPDIR)/manifest $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -$(TEMPDIR)/manifest: $(MANIFEST) - $(install-manifest-file) - -build: $(AGENTJAR) - -clean clobber:: - $(RM) -r $(CLASSDESTDIR)/java/management - $(RM) -r $(CLASSDESTDIR)/sun/management - $(RM) $(TEMPDIR)/manifest $(AGENTJAR) - diff --git a/jdk/makefiles/java/net/FILES_c.gmk b/jdk/makefiles/java/net/FILES_c.gmk deleted file mode 100644 index a4bbb409328..00000000000 --- a/jdk/makefiles/java/net/FILES_c.gmk +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - DatagramPacket.c \ - InetAddress.c \ - Inet4Address.c \ - Inet6Address.c \ - NetworkInterface.c \ - InetAddressImplFactory.c \ - Inet4AddressImpl.c \ - Inet6AddressImpl.c \ - SocketInputStream.c \ - SocketOutputStream.c \ - net_util.c \ - net_util_md.c \ - ResolverConfigurationImpl.c \ - DefaultProxySelector.c - -ifeq ($(PLATFORM), linux) - FILES_c += linux_close.c -endif - -ifeq ($(PLATFORM), macosx) - FILES_c += bsd_close.c -endif - -ifeq ($(PLATFORM), windows) - FILES_c += TwoStacksPlainSocketImpl.c - FILES_c += DualStackPlainSocketImpl.c - FILES_c += TwoStacksPlainDatagramSocketImpl.c - FILES_c += DualStackPlainDatagramSocketImpl.c -else - FILES_c += PlainSocketImpl.c - FILES_c += PlainDatagramSocketImpl.c -endif - diff --git a/jdk/makefiles/java/net/Makefile b/jdk/makefiles/java/net/Makefile deleted file mode 100644 index ba15900fc3f..00000000000 --- a/jdk/makefiles/java/net/Makefile +++ /dev/null @@ -1,141 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = java.net -LIBRARY = net -PRODUCT = sun -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true -JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -include FILES_c.gmk - -AUTO_FILES_JAVA_DIRS = java/net - -ifeq ($(PLATFORM), windows) - FILES_c += NTLMAuthSequence.c - FILES_c += NetworkInterface_winXP.c -else - FILES_c += SdpSupport.c -endif - -FILES_export = \ - java/net/Socket.java \ - java/net/SocketOptions.java \ - java/net/SocketImpl.java \ - java/net/AbstractPlainSocketImpl.java \ - java/net/PlainSocketImpl.java \ - java/net/ServerSocket.java \ - java/net/InetAddress.java \ - java/net/Inet4Address.java \ - java/net/Inet6Address.java \ - java/net/InetAddressImpl.java \ - java/net/Inet4AddressImpl.java \ - java/net/Inet6AddressImpl.java \ - java/net/NetworkInterface.java \ - java/net/SocketInputStream.java \ - java/net/SocketOutputStream.java \ - java/net/DefaultDatagramSocketImplFactory.java \ - java/net/DatagramPacket.java \ - java/net/DatagramSocket.java \ - java/net/DatagramSocketImpl.java \ - java/net/AbstractPlainDatagramSocketImpl.java \ - java/net/MulticastSocket.java \ - java/net/UnknownHostException.java \ - java/net/ProtocolException.java \ - sun/net/spi/DefaultProxySelector.java - -ifeq ($(PLATFORM), windows) - FILES_export += java/net/TwoStacksPlainSocketImpl.java - FILES_export += java/net/DualStackPlainSocketImpl.java - FILES_export += java/net/TwoStacksPlainDatagramSocketImpl.java - FILES_export += java/net/DualStackPlainDatagramSocketImpl.java -else - FILES_export += java/net/PlainDatagramSocketImpl.java -endif - -# -# Find platform specific native code -# -vpath %.c $(PLATFORM_SRC)/native/sun/net/dns $(PLATFORM_SRC)/native/sun/net/www/protocol/http/ntlm \ - $(PLATFORM_SRC)/native/sun/net/sdp $(PLATFORM_SRC)/native/sun/net/spi - -# -# Include rules -# -include $(BUILDDIR)/common/Mapfile-vers.gmk - -include $(BUILDDIR)/common/Library.gmk - -ifeq ($(PLATFORM), macosx) -ifdef DONT_ENABLE_IPV6 - OTHER_CFLAGS += -DDONT_ENABLE_IPV6 -endif - OTHER_LDLIBS = $(JVMLIB) -pthread -else -ifeq ($(PLATFORM), windows) - OTHER_LDLIBS = ws2_32.lib $(JVMLIB) \ - secur32.lib iphlpapi.lib delayimp.lib \ - /DELAYLOAD:secur32.dll /DELAYLOAD:iphlpapi.dll -else - OTHER_LDLIBS = $(LIBSOCKET) $(LIBNSL) $(LIBDL) $(JVMLIB) -endif -ifeq ($(PLATFORM), linux) - OTHER_LDLIBS += -lpthread -endif -endif # PLATFORM - -CLASSES.export += java.lang.Integer java.io.FileDescriptor java.net.InetAddressImplFactory java.net.Inet4AddressImpl java.net.Inet6AddressImpl - -# -# Resources -# -LOCALE_SET_DEFINITION = jre - -MISC_FILES = $(LIBDIR) $(LIBDIR)/net.properties - -$(LIBDIR)/net.properties: $(SHARE_SRC)/lib/net.properties - $(install-file) - -# -# SDP configuration template -# -ifeq ($(PLATFORM), solaris) -SDP_PATH = sdp/sdp.conf.template -SDP_CONF = $(LIBDIR)/$(SDP_PATH) -$(SDP_CONF): $(PLATFORM_SRC)/lib/$(SDP_PATH) - @$(RM) $* - $(install-file) - -MISC_FILES += $(SDP_CONF) -endif - -build: $(MISC_FILES) - diff --git a/jdk/makefiles/java/nio/Exportedfiles.gmk b/jdk/makefiles/java/nio/Exportedfiles.gmk deleted file mode 100644 index 75ee6beec4d..00000000000 --- a/jdk/makefiles/java/nio/Exportedfiles.gmk +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# These are the names of Java classes for which we will make .h files. -# - -FILES_export = \ - java/net/SocketOptions.java \ - java/nio/MappedByteBuffer.java \ - sun/nio/ch/DatagramChannelImpl.java \ - sun/nio/ch/DatagramDispatcher.java \ - sun/nio/ch/FileChannelImpl.java \ - sun/nio/ch/FileDispatcherImpl.java \ - sun/nio/ch/FileKey.java \ - sun/nio/ch/FileLockImpl.java \ - sun/nio/ch/IOStatus.java \ - sun/nio/ch/IOUtil.java \ - sun/nio/ch/Net.java \ - sun/nio/ch/PollArrayWrapper.java \ - sun/nio/ch/ServerSocketChannelImpl.java \ - sun/nio/ch/SocketChannelImpl.java \ - sun/nio/ch/SocketDispatcher.java \ - java/io/FileDescriptor.java \ diff --git a/jdk/makefiles/java/nio/FILES_c.gmk b/jdk/makefiles/java/nio/FILES_c.gmk deleted file mode 100644 index 1373bac7546..00000000000 --- a/jdk/makefiles/java/nio/FILES_c.gmk +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - DatagramChannelImpl.c \ - DatagramDispatcher.c \ - FileChannelImpl.c \ - FileDispatcherImpl.c \ - FileKey.c \ - IOUtil.c \ - MappedByteBuffer.c \ - Net.c \ - ServerSocketChannelImpl.c \ - SocketChannelImpl.c \ - SocketDispatcher.c diff --git a/jdk/makefiles/java/nio/FILES_java.gmk b/jdk/makefiles/java/nio/FILES_java.gmk deleted file mode 100644 index b394b89e483..00000000000 --- a/jdk/makefiles/java/nio/FILES_java.gmk +++ /dev/null @@ -1,442 +0,0 @@ -# -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_src = \ - java/nio/Bits.java \ - java/nio/Buffer.java \ - java/nio/ByteOrder.java \ - java/nio/MappedByteBuffer.java \ - java/nio/StringCharBuffer.java \ - \ - java/nio/channels/AsynchronousByteChannel.java \ - java/nio/channels/AsynchronousChannel.java \ - java/nio/channels/AsynchronousChannelGroup.java \ - java/nio/channels/AsynchronousFileChannel.java \ - java/nio/channels/AsynchronousServerSocketChannel.java \ - java/nio/channels/AsynchronousSocketChannel.java \ - java/nio/channels/ByteChannel.java \ - java/nio/channels/Channel.java \ - java/nio/channels/Channels.java \ - java/nio/channels/CompletionHandler.java \ - java/nio/channels/DatagramChannel.java \ - java/nio/channels/FileChannel.java \ - java/nio/channels/FileLock.java \ - java/nio/channels/GatheringByteChannel.java \ - java/nio/channels/InterruptibleChannel.java \ - java/nio/channels/Pipe.java \ - java/nio/channels/MembershipKey.java \ - java/nio/channels/MulticastChannel.java \ - java/nio/channels/NetworkChannel.java \ - java/nio/channels/ReadableByteChannel.java \ - java/nio/channels/ScatteringByteChannel.java \ - java/nio/channels/SeekableByteChannel.java \ - java/nio/channels/SelectableChannel.java \ - java/nio/channels/Selector.java \ - java/nio/channels/SelectionKey.java \ - java/nio/channels/ServerSocketChannel.java \ - java/nio/channels/SocketChannel.java \ - java/nio/channels/WritableByteChannel.java \ - \ - java/nio/channels/spi/AbstractInterruptibleChannel.java \ - java/nio/channels/spi/AbstractSelectableChannel.java \ - java/nio/channels/spi/AbstractSelectionKey.java \ - java/nio/channels/spi/AbstractSelector.java \ - java/nio/channels/spi/AsynchronousChannelProvider.java \ - java/nio/channels/spi/SelectorProvider.java \ - \ - java/nio/charset/Charset.java \ - java/nio/charset/CoderResult.java \ - java/nio/charset/CoderMalfunctionError.java \ - java/nio/charset/CodingErrorAction.java \ - java/nio/charset/MalformedInputException.java \ - java/nio/charset/StandardCharsets.java \ - java/nio/charset/UnmappableCharacterException.java \ - \ - java/nio/charset/spi/CharsetProvider.java \ - \ - java/nio/file/AccessDeniedException.java \ - java/nio/file/AccessMode.java \ - java/nio/file/AtomicMoveNotSupportedException.java \ - java/nio/file/ClosedDirectoryStreamException.java \ - java/nio/file/ClosedFileSystemException.java \ - java/nio/file/ClosedWatchServiceException.java \ - java/nio/file/CopyMoveHelper.java \ - java/nio/file/CopyOption.java \ - java/nio/file/DirectoryIteratorException.java \ - java/nio/file/DirectoryNotEmptyException.java \ - java/nio/file/DirectoryStream.java \ - java/nio/file/FileAlreadyExistsException.java \ - java/nio/file/FileStore.java \ - java/nio/file/FileSystem.java \ - java/nio/file/FileSystemAlreadyExistsException.java \ - java/nio/file/FileSystemException.java \ - java/nio/file/FileSystemNotFoundException.java \ - java/nio/file/FileSystems.java \ - java/nio/file/FileTreeWalker.java \ - java/nio/file/FileVisitOption.java \ - java/nio/file/FileVisitResult.java \ - java/nio/file/FileVisitor.java \ - java/nio/file/Files.java \ - java/nio/file/InvalidPathException.java \ - java/nio/file/LinkOption.java \ - java/nio/file/LinkPermission.java \ - java/nio/file/NoSuchFileException.java \ - java/nio/file/NotDirectoryException.java \ - java/nio/file/NotLinkException.java \ - java/nio/file/OpenOption.java \ - java/nio/file/Path.java \ - java/nio/file/PathMatcher.java \ - java/nio/file/Paths.java \ - java/nio/file/ProviderMismatchException.java \ - java/nio/file/ProviderNotFoundException.java \ - java/nio/file/ReadOnlyFileSystemException.java \ - java/nio/file/SecureDirectoryStream.java \ - java/nio/file/SimpleFileVisitor.java \ - java/nio/file/StandardCopyOption.java \ - java/nio/file/StandardOpenOption.java \ - java/nio/file/StandardWatchEventKinds.java \ - java/nio/file/TempFileHelper.java \ - java/nio/file/WatchEvent.java \ - java/nio/file/WatchKey.java \ - java/nio/file/WatchService.java \ - java/nio/file/Watchable.java \ - \ - java/nio/file/attribute/AclEntry.java \ - java/nio/file/attribute/AclEntryFlag.java \ - java/nio/file/attribute/AclEntryPermission.java \ - java/nio/file/attribute/AclEntryType.java \ - java/nio/file/attribute/AclFileAttributeView.java \ - java/nio/file/attribute/AttributeView.java \ - java/nio/file/attribute/BasicFileAttributeView.java \ - java/nio/file/attribute/BasicFileAttributes.java \ - java/nio/file/attribute/DosFileAttributeView.java \ - java/nio/file/attribute/DosFileAttributes.java \ - java/nio/file/attribute/FileAttribute.java \ - java/nio/file/attribute/FileAttributeView.java \ - java/nio/file/attribute/FileOwnerAttributeView.java \ - java/nio/file/attribute/FileStoreAttributeView.java \ - java/nio/file/attribute/FileTime.java \ - java/nio/file/attribute/GroupPrincipal.java \ - java/nio/file/attribute/UserDefinedFileAttributeView.java \ - java/nio/file/attribute/PosixFileAttributeView.java \ - java/nio/file/attribute/PosixFileAttributes.java \ - java/nio/file/attribute/PosixFilePermission.java \ - java/nio/file/attribute/PosixFilePermissions.java \ - java/nio/file/attribute/UserPrincipal.java \ - java/nio/file/attribute/UserPrincipalLookupService.java \ - java/nio/file/attribute/UserPrincipalNotFoundException.java \ - \ - java/nio/file/spi/FileSystemProvider.java \ - java/nio/file/spi/FileTypeDetector.java \ - \ - com/sun/nio/file/ExtendedCopyOption.java \ - com/sun/nio/file/ExtendedOpenOption.java \ - com/sun/nio/file/ExtendedWatchEventModifier.java \ - com/sun/nio/file/SensitivityWatchEventModifier.java \ - \ - sun/nio/ByteBuffered.java \ - \ - sun/nio/ch/AbstractPollArrayWrapper.java \ - sun/nio/ch/AllocatedNativeObject.java \ - sun/nio/ch/AsynchronousChannelGroupImpl.java \ - sun/nio/ch/AsynchronousFileChannelImpl.java \ - sun/nio/ch/AsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/AsynchronousSocketChannelImpl.java \ - sun/nio/ch/Cancellable.java \ - sun/nio/ch/ChannelInputStream.java \ - sun/nio/ch/CompletedFuture.java \ - sun/nio/ch/DatagramChannelImpl.java \ - sun/nio/ch/DatagramDispatcher.java \ - sun/nio/ch/DatagramSocketAdaptor.java \ - sun/nio/ch/DefaultAsynchronousChannelProvider.java \ - sun/nio/ch/DefaultSelectorProvider.java \ - sun/nio/ch/DirectBuffer.java \ - sun/nio/ch/ExtendedSocketOption.java \ - sun/nio/ch/FileChannelImpl.java \ - sun/nio/ch/FileDispatcher.java \ - sun/nio/ch/FileDispatcherImpl.java \ - sun/nio/ch/FileKey.java \ - sun/nio/ch/FileLockImpl.java \ - sun/nio/ch/FileLockTable.java \ - sun/nio/ch/Groupable.java \ - sun/nio/ch/Interruptible.java \ - sun/nio/ch/Invoker.java \ - sun/nio/ch/IOUtil.java \ - sun/nio/ch/IOStatus.java \ - sun/nio/ch/IOVecWrapper.java \ - sun/nio/ch/MembershipKeyImpl.java \ - sun/nio/ch/MembershipRegistry.java \ - sun/nio/ch/NativeDispatcher.java \ - sun/nio/ch/NativeObject.java \ - sun/nio/ch/NativeThread.java \ - sun/nio/ch/NativeThreadSet.java \ - sun/nio/ch/Net.java \ - sun/nio/ch/OptionKey.java \ - sun/nio/ch/PendingFuture.java \ - sun/nio/ch/PipeImpl.java \ - sun/nio/ch/PollArrayWrapper.java \ - sun/nio/ch/Reflect.java \ - sun/nio/ch/Secrets.java \ - sun/nio/ch/SelectionKeyImpl.java \ - sun/nio/ch/SelectorImpl.java \ - sun/nio/ch/SelectorProviderImpl.java \ - sun/nio/ch/SelChImpl.java \ - sun/nio/ch/ServerSocketAdaptor.java \ - sun/nio/ch/ServerSocketChannelImpl.java \ - sun/nio/ch/SinkChannelImpl.java \ - sun/nio/ch/SocketAdaptor.java \ - sun/nio/ch/SocketChannelImpl.java \ - sun/nio/ch/SocketDispatcher.java \ - sun/nio/ch/SocketOptionRegistry.java \ - sun/nio/ch/SourceChannelImpl.java \ - sun/nio/ch/ThreadPool.java \ - sun/nio/ch/Util.java \ - \ - sun/nio/cs/AbstractCharsetProvider.java \ - sun/nio/cs/ArrayDecoder.java \ - sun/nio/cs/ArrayEncoder.java \ - sun/nio/cs/FastCharsetProvider.java \ - sun/nio/cs/HistoricallyNamedCharset.java \ - sun/nio/cs/ISO_8859_1.java \ - sun/nio/cs/SingleByte.java \ - sun/nio/cs/SingleByteDecoder.java \ - sun/nio/cs/SingleByteEncoder.java \ - sun/nio/cs/StreamEncoder.java \ - sun/nio/cs/StreamDecoder.java \ - sun/nio/cs/Surrogate.java \ - sun/nio/cs/ThreadLocalCoders.java \ - sun/nio/cs/US_ASCII.java \ - sun/nio/cs/UTF_16.java \ - sun/nio/cs/UTF_16BE.java \ - sun/nio/cs/UTF_16LE.java \ - sun/nio/cs/UTF_8.java \ - sun/nio/cs/CESU_8.java \ - sun/nio/cs/Unicode.java \ - sun/nio/cs/UnicodeDecoder.java \ - sun/nio/cs/UnicodeEncoder.java \ - sun/nio/cs/UTF_32.java \ - sun/nio/cs/UTF_32BE.java \ - sun/nio/cs/UTF_32LE.java \ - sun/nio/cs/UTF_32BE_BOM.java \ - sun/nio/cs/UTF_32LE_BOM.java \ - sun/nio/cs/UTF_32Coder.java \ - \ - sun/nio/fs/AbstractAclFileAttributeView.java \ - sun/nio/fs/AbstractBasicFileAttributeView.java \ - sun/nio/fs/AbstractFileTypeDetector.java \ - sun/nio/fs/AbstractFileSystemProvider.java \ - sun/nio/fs/AbstractPath.java \ - sun/nio/fs/AbstractPoller.java \ - sun/nio/fs/AbstractUserDefinedFileAttributeView.java \ - sun/nio/fs/AbstractWatchKey.java \ - sun/nio/fs/AbstractWatchService.java \ - sun/nio/fs/BasicFileAttributesHolder.java \ - sun/nio/fs/Cancellable.java \ - sun/nio/fs/DefaultFileSystemProvider.java \ - sun/nio/fs/DefaultFileTypeDetector.java \ - sun/nio/fs/DynamicFileAttributeView.java \ - sun/nio/fs/FileOwnerAttributeViewImpl.java \ - sun/nio/fs/Globs.java \ - sun/nio/fs/NativeBuffer.java \ - sun/nio/fs/NativeBuffers.java \ - sun/nio/fs/Reflect.java \ - sun/nio/fs/Util.java \ - \ - java/net/DatagramSocket.java \ - java/net/DatagramSocketImpl.java \ - java/net/PlainSocketImpl.java \ - java/net/Socket.java \ - java/net/ServerSocket.java \ - java/net/SocketImpl.java \ - java/net/Socket.java \ - java/io/InputStreamReader.java \ - java/io/OutputStreamWriter.java \ - java/lang/String.java \ - java/lang/StringCoding.java \ - \ - sun/misc/Cleaner.java \ - sun/util/PreHashedMap.java - -# Generated coder classes -# -FILES_gen_coder = \ - java/nio/charset/CharsetDecoder.java \ - java/nio/charset/CharsetEncoder.java - -# Generated buffer classes -# -FILES_gen_buffer = \ - java/nio/ByteBuffer.java \ - java/nio/CharBuffer.java \ - java/nio/ShortBuffer.java \ - java/nio/IntBuffer.java \ - java/nio/LongBuffer.java \ - java/nio/FloatBuffer.java \ - java/nio/DoubleBuffer.java \ - \ - java/nio/HeapByteBuffer.java \ - java/nio/HeapByteBufferR.java \ - java/nio/HeapCharBuffer.java \ - java/nio/HeapCharBufferR.java \ - java/nio/HeapShortBuffer.java \ - java/nio/HeapShortBufferR.java \ - java/nio/HeapIntBuffer.java \ - java/nio/HeapIntBufferR.java \ - java/nio/HeapLongBuffer.java \ - java/nio/HeapLongBufferR.java \ - java/nio/HeapFloatBuffer.java \ - java/nio/HeapFloatBufferR.java \ - java/nio/HeapDoubleBuffer.java \ - java/nio/HeapDoubleBufferR.java \ - \ - java/nio/DirectByteBuffer.java \ - java/nio/DirectByteBufferR.java \ - \ - java/nio/DirectCharBufferU.java \ - java/nio/DirectCharBufferRU.java \ - java/nio/DirectShortBufferU.java \ - java/nio/DirectShortBufferRU.java \ - java/nio/DirectIntBufferU.java \ - java/nio/DirectIntBufferRU.java \ - java/nio/DirectLongBufferU.java \ - java/nio/DirectLongBufferRU.java \ - java/nio/DirectFloatBufferU.java \ - java/nio/DirectFloatBufferRU.java \ - java/nio/DirectDoubleBufferU.java \ - java/nio/DirectDoubleBufferRU.java \ - \ - java/nio/DirectCharBufferS.java \ - java/nio/DirectCharBufferRS.java \ - java/nio/DirectShortBufferS.java \ - java/nio/DirectShortBufferRS.java \ - java/nio/DirectIntBufferS.java \ - java/nio/DirectIntBufferRS.java \ - java/nio/DirectLongBufferS.java \ - java/nio/DirectLongBufferRS.java \ - java/nio/DirectFloatBufferS.java \ - java/nio/DirectFloatBufferRS.java \ - java/nio/DirectDoubleBufferS.java \ - java/nio/DirectDoubleBufferRS.java \ - \ - java/nio/ByteBufferAsCharBufferB.java \ - java/nio/ByteBufferAsCharBufferRB.java \ - java/nio/ByteBufferAsShortBufferB.java \ - java/nio/ByteBufferAsShortBufferRB.java \ - java/nio/ByteBufferAsIntBufferB.java \ - java/nio/ByteBufferAsIntBufferRB.java \ - java/nio/ByteBufferAsLongBufferB.java \ - java/nio/ByteBufferAsLongBufferRB.java \ - java/nio/ByteBufferAsFloatBufferB.java \ - java/nio/ByteBufferAsFloatBufferRB.java \ - java/nio/ByteBufferAsDoubleBufferB.java \ - java/nio/ByteBufferAsDoubleBufferRB.java \ - \ - java/nio/ByteBufferAsCharBufferL.java \ - java/nio/ByteBufferAsCharBufferRL.java \ - java/nio/ByteBufferAsShortBufferL.java \ - java/nio/ByteBufferAsShortBufferRL.java \ - java/nio/ByteBufferAsIntBufferL.java \ - java/nio/ByteBufferAsIntBufferRL.java \ - java/nio/ByteBufferAsLongBufferL.java \ - java/nio/ByteBufferAsLongBufferRL.java \ - java/nio/ByteBufferAsFloatBufferL.java \ - java/nio/ByteBufferAsFloatBufferRL.java \ - java/nio/ByteBufferAsDoubleBufferL.java \ - java/nio/ByteBufferAsDoubleBufferRL.java - -# Generated exception classes -# -FILES_gen_ex = \ - java/nio/BufferOverflowException.java \ - java/nio/BufferUnderflowException.java \ - java/nio/InvalidMarkException.java \ - java/nio/ReadOnlyBufferException.java \ - \ - java/nio/channels/AcceptPendingException.java \ - java/nio/channels/AlreadyBoundException.java \ - java/nio/channels/AlreadyConnectedException.java \ - java/nio/channels/AsynchronousCloseException.java \ - java/nio/channels/CancelledKeyException.java \ - java/nio/channels/ClosedByInterruptException.java \ - java/nio/channels/ClosedChannelException.java \ - java/nio/channels/ClosedSelectorException.java \ - java/nio/channels/ConnectionPendingException.java \ - java/nio/channels/FileLockInterruptionException.java \ - java/nio/channels/IllegalBlockingModeException.java \ - java/nio/channels/IllegalChannelGroupException.java \ - java/nio/channels/IllegalSelectorException.java \ - java/nio/channels/InterruptedByTimeoutException.java \ - java/nio/channels/NoConnectionPendingException.java \ - java/nio/channels/NonReadableChannelException.java \ - java/nio/channels/NonWritableChannelException.java \ - java/nio/channels/NotYetBoundException.java \ - java/nio/channels/NotYetConnectedException.java \ - java/nio/channels/OverlappingFileLockException.java \ - java/nio/channels/ReadPendingException.java \ - java/nio/channels/ShutdownChannelGroupException.java \ - java/nio/channels/UnresolvedAddressException.java \ - java/nio/channels/UnsupportedAddressTypeException.java \ - java/nio/channels/WritePendingException.java \ - \ - java/nio/charset/CharacterCodingException.java \ - java/nio/charset/IllegalCharsetNameException.java \ - java/nio/charset/UnsupportedCharsetException.java - -FILES_gen_sbcs = \ - sun/nio/cs/ISO_8859_2.java \ - sun/nio/cs/ISO_8859_4.java \ - sun/nio/cs/ISO_8859_5.java \ - sun/nio/cs/ISO_8859_7.java \ - sun/nio/cs/ISO_8859_9.java \ - sun/nio/cs/ISO_8859_13.java \ - sun/nio/cs/ISO_8859_15.java \ - sun/nio/cs/IBM437.java \ - sun/nio/cs/IBM737.java \ - sun/nio/cs/IBM775.java \ - sun/nio/cs/IBM850.java \ - sun/nio/cs/IBM852.java \ - sun/nio/cs/IBM855.java \ - sun/nio/cs/IBM857.java \ - sun/nio/cs/IBM858.java \ - sun/nio/cs/IBM862.java \ - sun/nio/cs/IBM866.java \ - sun/nio/cs/IBM874.java \ - sun/nio/cs/KOI8_R.java \ - sun/nio/cs/KOI8_U.java \ - sun/nio/cs/MS1250.java \ - sun/nio/cs/MS1251.java \ - sun/nio/cs/MS1252.java \ - sun/nio/cs/MS1253.java \ - sun/nio/cs/MS1254.java \ - sun/nio/cs/MS1257.java - -FILES_gen_csp = sun/nio/cs/StandardCharsets.java - -FILES_gen_sor = sun/nio/ch/SocketOptionRegistry.java - -FILES_gen = $(FILES_gen_coder) $(FILES_gen_buffer) $(FILES_gen_ex) \ - $(FILES_gen_csp) $(FILES_gen_sor) - -FILES_java = $(FILES_src) $(FILES_gen) $(FILES_gen_sbcs) diff --git a/jdk/makefiles/java/nio/Makefile b/jdk/makefiles/java/nio/Makefile deleted file mode 100644 index dee240f4cb2..00000000000 --- a/jdk/makefiles/java/nio/Makefile +++ /dev/null @@ -1,994 +0,0 @@ -# -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for java.nio -# - -BUILDDIR = ../.. -LEGACY_BUILDDIR = ../../../make -PACKAGE = java.nio -LIBRARY = nio -PRODUCT = java -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -NIO_SRC = $(SHARE_SRC)/classes/java/nio -NIO_GEN = $(GENSRCDIR)/java/nio - -SNIO_SRC = $(SHARE_SRC)/classes/sun/nio -SNIO_GEN = $(GENSRCDIR)/sun/nio - -# -# Files to compile -# - -include FILES_java.gmk -include FILES_c.gmk -include Exportedfiles.gmk - -ifeq ($(PLATFORM), solaris) -FILES_java += \ - sun/nio/ch/AbstractPollSelectorImpl.java \ - sun/nio/ch/DevPollArrayWrapper.java \ - sun/nio/ch/DevPollSelectorImpl.java \ - sun/nio/ch/DevPollSelectorProvider.java \ - sun/nio/ch/InheritedChannel.java \ - sun/nio/ch/PollSelectorProvider.java \ - sun/nio/ch/PollSelectorImpl.java \ - sun/nio/ch/Port.java \ - sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \ - sun/nio/ch/SolarisAsynchronousChannelProvider.java \ - sun/nio/ch/SolarisEventPort.java \ - sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \ - \ - sun/nio/fs/GnomeFileTypeDetector.java \ - sun/nio/fs/PollingWatchService.java \ - sun/nio/fs/SolarisAclFileAttributeView.java \ - sun/nio/fs/SolarisFileStore.java \ - sun/nio/fs/SolarisFileSystem.java \ - sun/nio/fs/SolarisFileSystemProvider.java \ - sun/nio/fs/SolarisUserDefinedFileAttributeView.java \ - sun/nio/fs/SolarisNativeDispatcher.java \ - sun/nio/fs/SolarisWatchService.java \ - sun/nio/fs/UnixChannelFactory.java \ - sun/nio/fs/UnixCopyFile.java \ - sun/nio/fs/UnixDirectoryStream.java \ - sun/nio/fs/UnixException.java \ - sun/nio/fs/UnixFileAttributeViews.java \ - sun/nio/fs/UnixFileAttributes.java \ - sun/nio/fs/UnixFileKey.java \ - sun/nio/fs/UnixFileModeAttribute.java \ - sun/nio/fs/UnixFileStore.java \ - sun/nio/fs/UnixFileStoreAttributes.java \ - sun/nio/fs/UnixFileSystem.java \ - sun/nio/fs/UnixFileSystemProvider.java \ - sun/nio/fs/UnixMountEntry.java \ - sun/nio/fs/UnixNativeDispatcher.java \ - sun/nio/fs/UnixPath.java \ - sun/nio/fs/UnixSecureDirectoryStream.java \ - sun/nio/fs/UnixUriUtils.java \ - sun/nio/fs/UnixUserPrincipals.java - -FILES_c += \ - DevPollArrayWrapper.c \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - SolarisEventPort.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - \ - GnomeFileTypeDetector.c \ - SolarisNativeDispatcher.c \ - SolarisWatchService.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c - -FILES_export += \ - sun/nio/ch/DevPollArrayWrapper.java \ - sun/nio/ch/InheritedChannel.java \ - sun/nio/ch/NativeThread.java \ - sun/nio/ch/SolarisEventPort.java \ - sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \ - \ - sun/nio/fs/GnomeFileTypeDetector.java \ - sun/nio/fs/SolarisNativeDispatcher.java \ - sun/nio/fs/SolarisWatchService.java \ - sun/nio/fs/UnixCopyFile.java \ - sun/nio/fs/UnixNativeDispatcher.java - -FILES_gen += \ - sun/nio/fs/SolarisConstants.java \ - sun/nio/fs/UnixConstants.java -endif # PLATFORM = solaris - -ifeq ($(PLATFORM), windows) -FILES_java += \ - sun/nio/ch/Iocp.java \ - sun/nio/ch/PendingIoCache.java \ - sun/nio/ch/WindowsAsynchronousChannelProvider.java \ - sun/nio/ch/WindowsAsynchronousFileChannelImpl.java \ - sun/nio/ch/WindowsAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java \ - sun/nio/ch/WindowsSelectorImpl.java \ - sun/nio/ch/WindowsSelectorProvider.java \ - \ - sun/nio/fs/RegistryFileTypeDetector.java \ - sun/nio/fs/WindowsAclFileAttributeView.java \ - sun/nio/fs/WindowsChannelFactory.java \ - sun/nio/fs/WindowsConstants.java \ - sun/nio/fs/WindowsDirectoryStream.java \ - sun/nio/fs/WindowsException.java \ - sun/nio/fs/WindowsFileAttributeViews.java \ - sun/nio/fs/WindowsFileAttributes.java \ - sun/nio/fs/WindowsFileCopy.java \ - sun/nio/fs/WindowsFileStore.java \ - sun/nio/fs/WindowsFileSystem.java \ - sun/nio/fs/WindowsFileSystemProvider.java \ - sun/nio/fs/WindowsLinkSupport.java \ - sun/nio/fs/WindowsUserDefinedFileAttributeView.java \ - sun/nio/fs/WindowsNativeDispatcher.java \ - sun/nio/fs/WindowsPath.java \ - sun/nio/fs/WindowsPathParser.java \ - sun/nio/fs/WindowsPathType.java \ - sun/nio/fs/WindowsSecurity.java \ - sun/nio/fs/WindowsSecurityDescriptor.java \ - sun/nio/fs/WindowsUriSupport.java \ - sun/nio/fs/WindowsUserPrincipals.java \ - sun/nio/fs/WindowsWatchService.java - -FILES_c += \ - Iocp.c \ - RegistryFileTypeDetector.c \ - WindowsAsynchronousFileChannelImpl.c \ - WindowsAsynchronousServerSocketChannelImpl.c \ - WindowsAsynchronousSocketChannelImpl.c \ - WindowsNativeDispatcher.c \ - WindowsSelectorImpl.c - -FILES_export += \ - sun/nio/ch/Iocp.java \ - sun/nio/ch/WindowsAsynchronousFileChannelImpl.java \ - sun/nio/ch/WindowsAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java \ - sun/nio/ch/WindowsSelectorImpl.java \ - sun/nio/fs/WindowsNativeDispatcher.java \ - sun/nio/fs/RegistryFileTypeDetector.java -endif # PLATFORM = windows - -ifeq ($(PLATFORM), linux) -FILES_java += \ - sun/nio/ch/AbstractPollSelectorImpl.java \ - sun/nio/ch/EPoll.java \ - sun/nio/ch/EPollArrayWrapper.java \ - sun/nio/ch/EPollPort.java \ - sun/nio/ch/EPollSelectorProvider.java \ - sun/nio/ch/EPollSelectorImpl.java \ - sun/nio/ch/InheritedChannel.java \ - sun/nio/ch/LinuxAsynchronousChannelProvider.java \ - sun/nio/ch/PollSelectorProvider.java \ - sun/nio/ch/PollSelectorImpl.java \ - sun/nio/ch/Port.java \ - sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \ - sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \ - \ - sun/nio/fs/GnomeFileTypeDetector.java \ - sun/nio/fs/LinuxDosFileAttributeView.java \ - sun/nio/fs/LinuxFileStore.java \ - sun/nio/fs/LinuxFileSystem.java \ - sun/nio/fs/LinuxFileSystemProvider.java \ - sun/nio/fs/LinuxUserDefinedFileAttributeView.java \ - sun/nio/fs/LinuxNativeDispatcher.java \ - sun/nio/fs/LinuxWatchService.java \ - sun/nio/fs/UnixChannelFactory.java \ - sun/nio/fs/UnixCopyFile.java \ - sun/nio/fs/UnixDirectoryStream.java \ - sun/nio/fs/UnixException.java \ - sun/nio/fs/UnixFileAttributeViews.java \ - sun/nio/fs/UnixFileAttributes.java \ - sun/nio/fs/UnixFileKey.java \ - sun/nio/fs/UnixFileModeAttribute.java \ - sun/nio/fs/UnixFileStore.java \ - sun/nio/fs/UnixFileStoreAttributes.java \ - sun/nio/fs/UnixFileSystem.java \ - sun/nio/fs/UnixFileSystemProvider.java \ - sun/nio/fs/UnixMountEntry.java \ - sun/nio/fs/UnixNativeDispatcher.java \ - sun/nio/fs/UnixPath.java \ - sun/nio/fs/UnixSecureDirectoryStream.java \ - sun/nio/fs/UnixUriUtils.java \ - sun/nio/fs/UnixUserPrincipals.java - -FILES_c += \ - EPoll.c \ - EPollArrayWrapper.c \ - EPollPort.c \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - \ - GnomeFileTypeDetector.c \ - LinuxNativeDispatcher.c \ - LinuxWatchService.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c - -FILES_export += \ - sun/nio/ch/EPoll.java \ - sun/nio/ch/EPollArrayWrapper.java \ - sun/nio/ch/EPollPort.java \ - sun/nio/ch/InheritedChannel.java \ - sun/nio/ch/NativeThread.java \ - sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \ - \ - sun/nio/fs/GnomeFileTypeDetector.java \ - sun/nio/fs/LinuxNativeDispatcher.java \ - sun/nio/fs/LinuxWatchService.java \ - sun/nio/fs/UnixCopyFile.java \ - sun/nio/fs/UnixNativeDispatcher.java - -FILES_gen += \ - sun/nio/fs/UnixConstants.java -endif # PLATFORM = linux - -ifeq ($(PLATFORM), macosx) -FILES_java += \ - sun/nio/ch/AbstractPollSelectorImpl.java \ - sun/nio/ch/BsdAsynchronousChannelProvider.java \ - sun/nio/ch/InheritedChannel.java \ - sun/nio/ch/KQueue.java \ - sun/nio/ch/KQueuePort.java \ - sun/nio/ch/PollSelectorProvider.java \ - sun/nio/ch/PollSelectorImpl.java \ - sun/nio/ch/Port.java \ - sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \ - sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \ - \ - sun/nio/fs/GnomeFileTypeDetector.java \ - sun/nio/fs/BsdFileStore.java \ - sun/nio/fs/BsdFileSystem.java \ - sun/nio/fs/BsdFileSystemProvider.java \ - sun/nio/fs/BsdNativeDispatcher.java \ - sun/nio/fs/PollingWatchService.java \ - sun/nio/fs/UnixChannelFactory.java \ - sun/nio/fs/UnixCopyFile.java \ - sun/nio/fs/UnixDirectoryStream.java \ - sun/nio/fs/UnixException.java \ - sun/nio/fs/UnixFileAttributeViews.java \ - sun/nio/fs/UnixFileAttributes.java \ - sun/nio/fs/UnixFileKey.java \ - sun/nio/fs/UnixFileModeAttribute.java \ - sun/nio/fs/UnixFileStore.java \ - sun/nio/fs/UnixFileStoreAttributes.java \ - sun/nio/fs/UnixFileSystem.java \ - sun/nio/fs/UnixFileSystemProvider.java \ - sun/nio/fs/UnixMountEntry.java \ - sun/nio/fs/UnixNativeDispatcher.java \ - sun/nio/fs/UnixPath.java \ - sun/nio/fs/UnixSecureDirectoryStream.java \ - sun/nio/fs/UnixUriUtils.java \ - sun/nio/fs/UnixUserPrincipals.java - -FILES_c += \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - \ - GnomeFileTypeDetector.c \ - BsdNativeDispatcher.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c \ - \ - KQueue.c \ - KQueuePort.c - -FILES_export += \ - sun/nio/ch/InheritedChannel.java \ - sun/nio/ch/KQueue.java \ - sun/nio/ch/KQueuePort.java \ - sun/nio/ch/NativeThread.java \ - sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \ - sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \ - \ - sun/nio/fs/GnomeFileTypeDetector.java \ - sun/nio/fs/BsdNativeDispatcher.java \ - sun/nio/fs/UnixCopyFile.java \ - sun/nio/fs/UnixNativeDispatcher.java - -FILES_gen += \ - sun/nio/fs/UnixConstants.java -endif # PLATFORM = bsd, macosx - -ifeq ($(PLATFORM), macosx) -FILES_java += \ - sun/nio/ch/KQueueSelectorProvider.java \ - sun/nio/ch/KQueueSelectorImpl.java \ - sun/nio/ch/KQueueArrayWrapper.java - -FILES_c += \ - KQueueArrayWrapper.c - -vpath %.c $(call NativeSrcDirList,,native/sun/nio/fs) -vpath %.c $(call NativeSrcDirList,,native/sun/nio/ch) - -else - -# -# Find platform-specific C source files -# -vpath %.c $(PLATFORM_SRC)/native/sun/nio/fs -vpath %.c $(PLATFORM_SRC)/native/sun/nio/ch -vpath %.c $(SHARE_SRC)/native/sun/nio/ch - -endif # PLATFORM = macosx - -# -# Various variables -# - -JAVALIB = # Don't self-link - -# -# Access to io_util.c and net_util.c -# - -OTHER_INCLUDES += \ - -I$(SHARE_SRC)/native/sun/nio/ch \ - -I$(SHARE_SRC)/native/java/io \ - -I$(SHARE_SRC)/native/java/net \ - -I$(PLATFORM_SRC)/native/java/net \ - -I$(CLASSHDRDIR)/../../../java.lang/java/CClassHeaders - -ifeq ($(PLATFORM),windows) - OTHER_LDLIBS += $(JVMLIB) ws2_32.lib \ - -libpath:$(LIBDIR) java.lib \ - $(OBJDIR)/../../../../sun/java.net/net/$(OBJDIRNAME)/net.lib \ - $(OBJDIR)/../../../java.lang/java/$(OBJDIRNAME)/io_util.obj \ - $(OBJDIR)/../../../java.lang/java/$(OBJDIRNAME)/FileDescriptor_md.obj -endif -ifeq ($(PLATFORM), linux) -OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -lpthread $(LIBDL) -endif -ifeq ($(PLATFORM), macosx) -OTHER_LDLIBS += -L$(LIBDIR) -ljava -lnet -pthread -endif -ifeq ($(PLATFORM), solaris) -OTHER_LDLIBS += $(JVMLIB) $(LIBSOCKET) -lposix4 $(LIBDL) -lsendfile \ - -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -endif # PLATFORM - -# -# Rules -# - -build: sources - -clean clobber:: - $(RM) -r $(NIO_GEN) $(SNIO_GEN) - $(RM) -r $(CLASSDESTDIR)/java/nio - $(RM) -r $(CLASSDESTDIR)/sun/nio - -ifeq ($(PLATFORM), solaris) -FILES_m = mapfile-solaris -endif -ifeq ($(PLATFORM), linux) -FILES_m = mapfile-linux -endif -ifeq ($(PLATFORM), macosx) -FILES_m = mapfile-bsd -endif -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -# -# Generate source files -# - -FILES_genout = $(FILES_gen:%.java=$(GENSRCDIR)/%.java) - -BUF_SRC=$(NIO_SRC) -CH_SRC=$(NIO_SRC)/channels -CS_SRC=$(NIO_SRC)/charset -SCH_SRC=$(SNIO_SRC)/ch -SCS_SRC=$(SNIO_SRC)/cs -SFS_SRC=$(SNIO_SRC)/fs - -# Template files -HEAP_X_BUF_TEMPLATE=$(BUF_SRC)/Heap-X-Buffer.java.template -BYTE_X_BUF_TEMPLATE=$(BUF_SRC)/ByteBufferAs-X-Buffer.java.template -X_BUF_TEMPLATE=$(BUF_SRC)/X-Buffer.java.template -X_BUF_BIN_TEMPLATE=$(BUF_SRC)/X-Buffer-bin.java.template -DIRECT_X_BUF_TEMPLATE=$(BUF_SRC)/Direct-X-Buffer.java.template -DIRECT_X_BUF_BIN_TEMPLATE=$(BUF_SRC)/Direct-X-Buffer-bin.java.template -CHARSET_X_CODER_TEMPLATE=$(CS_SRC)/Charset-X-Coder.java.template - -BUF_GEN=$(NIO_GEN) -CH_GEN=$(NIO_GEN)/channels -CS_GEN=$(NIO_GEN)/charset -SCH_GEN=$(SNIO_GEN)/ch -SCS_GEN=$(SNIO_GEN)/cs -SFS_GEN=$(SNIO_GEN)/fs - -FILES_gensbcs_out = $(FILES_gen_sbcs:%.java=$(GENSRCDIR)/%.java) - -sources: $(SPP_JARFILE) $(FILES_genout) $(FILES_gensbcs_out) - -# -# Generated buffer classes -# - -GEN_BUFFER_SH = genBuffer.sh - -GEN_BUFFER_CMD = SPP="$(TOOL_SPP)" NAWK="$(NAWK)" SED="$(SED)" SH="$(SH)" \ - $(SH) $(GEN_BUFFER_SH) - -# Public abstract buffer classes -# -$(BUF_GEN)/ByteBuffer.java: $(X_BUF_TEMPLATE) \ - $(X_BUF_BIN_TEMPLATE) \ - $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=byte BIN=1 SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/CharBuffer.java: $(X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ShortBuffer.java: $(X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/IntBuffer.java: $(X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/LongBuffer.java: $(X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/FloatBuffer.java: $(X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DoubleBuffer.java: $(X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ - -# Buffers whose contents are heap-allocated -# -$(BUF_GEN)/HeapByteBuffer.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=byte SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapByteBuffer%.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=byte RW=$* SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapCharBuffer.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapCharBuffer%.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char RW=$* SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapShortBuffer.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapShortBuffer%.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short RW=$* SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapIntBuffer.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapIntBuffer%.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int RW=$* SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapLongBuffer.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapLongBuffer%.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long RW=$* SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapFloatBuffer.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapFloatBuffer%.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float RW=$* SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapDoubleBuffer.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/HeapDoubleBuffer%.java: $(HEAP_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double RW=$* SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ - -# Direct byte buffer -# -$(BUF_GEN)/DirectByteBuffer.java: $(DIRECT_X_BUF_TEMPLATE) \ - $(DIRECT_X_BUF_TEMPLATE) \ - $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=byte BIN=1 SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectByteBuffer%.java: $(DIRECT_X_BUF_TEMPLATE) \ - $(DIRECT_X_BUF_TEMPLATE) \ - $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=byte RW=$* BIN=1 SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ - -# Unswapped views of direct byte buffers -# -$(BUF_GEN)/DirectCharBufferU.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectCharBuffer%U.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char RW=$* BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectShortBufferU.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectShortBuffer%U.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short RW=$* BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectIntBufferU.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectIntBuffer%U.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int RW=$* BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectLongBufferU.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectLongBuffer%U.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long RW=$* BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectFloatBufferU.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectFloatBuffer%U.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float RW=$* BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectDoubleBufferU.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectDoubleBuffer%U.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double RW=$* BO=U SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ - -# Swapped views of direct byte buffers -# -$(BUF_GEN)/DirectCharBufferS.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectCharBuffer%S.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char RW=$* BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectShortBufferS.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectShortBuffer%S.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short RW=$* BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectIntBufferS.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectIntBuffer%S.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int RW=$* BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectLongBufferS.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectLongBuffer%S.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long RW=$* BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectFloatBufferS.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectFloatBuffer%S.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float RW=$* BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectDoubleBufferS.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/DirectDoubleBuffer%S.java: $(DIRECT_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double RW=$* BO=S SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ - -# Big-endian views of byte buffers -# -$(BUF_GEN)/ByteBufferAsCharBufferB.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsCharBuffer%B.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char RW=$* BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsShortBufferB.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsShortBuffer%B.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short RW=$* BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsIntBufferB.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsIntBuffer%B.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int RW=$* BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsLongBufferB.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsLongBuffer%B.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long RW=$* BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsFloatBufferB.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsFloatBuffer%B.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float RW=$* BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsDoubleBufferB.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsDoubleBuffer%B.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double RW=$* BO=B SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ - -# Little-endian views of byte buffers -# -$(BUF_GEN)/ByteBufferAsCharBufferL.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsCharBuffer%L.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=char RW=$* BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsShortBufferL.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsShortBuffer%L.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=short RW=$* BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsIntBufferL.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsIntBuffer%L.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=int RW=$* BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsLongBufferL.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsLongBuffer%L.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=long RW=$* BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsFloatBufferL.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsFloatBuffer%L.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=float RW=$* BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsDoubleBufferL.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ -$(BUF_GEN)/ByteBufferAsDoubleBuffer%L.java: $(BYTE_X_BUF_TEMPLATE) $(GEN_BUFFER_SH) - $(prep-target) - @$(RM) $@.temp - TYPE=double RW=$* BO=L SRC=$< DST=$@.temp $(GEN_BUFFER_CMD) - $(MV) $@.temp $@ - -# -# Generated coder classes -# - -GEN_CODER_SH = genCoder.sh - -GEN_CODER_CMD = SPP="$(TOOL_SPP)" SED="$(SED)" NAWK="$(NAWK)" SH="$(SH)" $(SH) $(GEN_CODER_SH) - -$(CS_GEN)/CharsetDecoder.java: $(CHARSET_X_CODER_TEMPLATE) $(GEN_CODER_SH) - $(prep-target) - @$(RM) $@.temp - $(GEN_CODER_CMD) decoder $< $@.temp - $(MV) $@.temp $@ - -$(CS_GEN)/CharsetEncoder.java: $(CHARSET_X_CODER_TEMPLATE) $(GEN_CODER_SH) - $(prep-target) - @$(RM) $@.temp - $(GEN_CODER_CMD) encoder $< $@.temp - $(MV) $@.temp $@ - -# -# Generated exception classes -# - -GEN_EX_SH = genExceptions.sh - -GEN_EX_CMD = NAWK="$(NAWK)" SH="$(SH)" $(SH) $(GEN_EX_SH) - -$(CH_GEN)/%Exception.java: genExceptions.sh $(CH_SRC)/exceptions - $(prep-target) - @$(RM) $@.temp - $(GEN_EX_CMD) $(CH_SRC)/exceptions $(CH_GEN) - -$(CS_GEN)/%Exception.java: genExceptions.sh $(CS_SRC)/exceptions - $(prep-target) - @$(RM) $@.temp - $(GEN_EX_CMD) $(CS_SRC)/exceptions $(CS_GEN) - -$(BUF_GEN)/%Exception.java: genExceptions.sh $(BUF_SRC)/exceptions - $(prep-target) - @$(RM) $@.temp - $(GEN_EX_CMD) $(BUF_SRC)/exceptions $(BUF_GEN) - -# -# Generated charset-provider classes -# - -$(SCS_GEN)/StandardCharsets.java: genCharsetProvider.sh \ - $(HASHER_JARFILE) $(SCS_SRC)/standard-charsets - $(prep-target) - @$(RM) $@.temp - NAWK="$(NAWK)" TEMPDIR="$(TEMPDIR)" SH="$(SH)" \ - HASHER="$(TOOL_HASHER)" \ - $(SH) -e genCharsetProvider.sh $(SCS_SRC)/standard-charsets $(SCS_GEN) - -# -# Generated channel implementation classes. -# C source is compiled in TEMPDIR to avoid turds left by Windows compilers. -# - -GENSOR_SRC = $(SHARE_SRC)/native/sun/nio/ch/genSocketOptionRegistry.c - -GENSOR_EXE = $(TEMPDIR)/genSocketOptionRegistry$(EXE_SUFFIX) - -SOR_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSOR_SRC) | \ - $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') - -$(TEMPDIR)/$(GENSOR_SRC) : $(GENSOR_SRC) - $(install-file) - -ifndef NIO_CC - ifeq ($(PLATFORM), macosx) - NIO_CC=$(HOST_CC) - else - NIO_CC=$(CC) - endif -endif - -$(GENSOR_EXE) : $(TEMPDIR)/$(GENSOR_SRC) - $(prep-target) - ($(CD) $(TEMPDIR); $(NIO_CC) $(CPPFLAGS) $(LDDFLAGS) \ - -o genSocketOptionRegistry$(EXE_SUFFIX) $(GENSOR_SRC)) - -ifdef NIO_PLATFORM_CLASSES_ROOT_DIR -$(SCH_GEN)/SocketOptionRegistry.java: $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/ch/SocketOptionRegistry-$(PLATFORM)-$(ARCH).java - $(prep-target) - $(CP) $< $@ -else -$(SCH_GEN)/SocketOptionRegistry.java: $(GENSOR_EXE) - $(prep-target) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@ - $(GENSOR_EXE) >> $@ -endif -# -# Generated sun.nio.cs SingleByte classes -# -GENCSSRC = $(LEGACY_BUILDDIR)/tools/CharsetMapping - -$(FILES_gensbcs_out): $(GENCSSRC)/SingleByte-X.java.template $(GENCSSRC)/sbcs - @$(prep-target) - $(TOOL_CHARSETMAPPING) $(GENCSSRC) $(SCS_GEN) sbcs - -# -# Generated file system implementation classes (Unix only) -# - -GENUC_SRC = $(PLATFORM_SRC)/native/sun/nio/fs/genUnixConstants.c - -GENUC_OBJ = $(TEMPDIR)/genUnixConstants.o -GENUC_EXE = $(TEMPDIR)/genUnixConstants - -GENUC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENUC_SRC) | \ - $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') - -$(GENUC_EXE) : $(GENUC_SRC) - $(prep-target) - $(NIO_CC) $(CPPFLAGS) -c -o $(GENUC_OBJ) $(GENUC_SRC) - $(NIO_CC) $(CPPFLAGS) -o $@ $(GENUC_OBJ) - -ifdef NIO_PLATFORM_CLASSES_ROOT_DIR -$(SFS_GEN)/UnixConstants.java: $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/fs/UnixConstants-$(PLATFORM)-$(ARCH).java - $(prep-target) - $(CP) $< $@ -else -$(SFS_GEN)/UnixConstants.java: $(GENUC_EXE) - $(prep-target) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(GENUC_COPYRIGHT_YEARS)" > $@ - $(GENUC_EXE) >> $@ -endif - -GENSC_SRC = $(PLATFORM_SRC)/native/sun/nio/fs/genSolarisConstants.c - -GENSC_OBJ = $(TEMPDIR)/genSolarisConstants.o -GENSC_EXE = $(TEMPDIR)/genSolarisConstants - -GENSC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSC_SRC) | \ - $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') - -$(GENSC_EXE) : $(GENSC_SRC) - $(prep-target) - $(NIO_CC) $(CPPFLAGS) -c -o $(GENSC_OBJ) $(GENSC_SRC) - $(NIO_CC) $(CPPFLAGS) -o $@ $(GENSC_OBJ) - -ifdef NIO_PLATFORM_CLASSES_ROOT_DIR -$(SFS_GEN)/SolarisConstants.java: $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/fs/SolarisConstants-$(PLATFORM)-$(ARCH).java - $(prep-target) - $(CP) $< $@ -else -$(SFS_GEN)/SolarisConstants.java: $(GENSC_EXE) - $(prep-target) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(GENSC_COPYRIGHT_YEARS)" > $@ - $(GENSC_EXE) >> $@ -endif - -.PHONY: sources diff --git a/jdk/makefiles/java/nio/genBuffer.sh b/jdk/makefiles/java/nio/genBuffer.sh deleted file mode 100644 index 91e6f7e80d1..00000000000 --- a/jdk/makefiles/java/nio/genBuffer.sh +++ /dev/null @@ -1,173 +0,0 @@ -#! /bin/sh - -# -# Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Generate concrete buffer classes - -# Required environment variables -# NAWK SED SPP To invoke tools -# TYPE Primitive type -# SRC Source file -# DST Destination file -# -# Optional environment variables -# RW Mutability: R(ead only), W(ritable) -# BO Byte order: B(ig), L(ittle), S(wapped), U(nswapped) -# BIN Defined => generate binary-data access methods - -type=$TYPE -rw=$RW -rwkey=XX - -case $type in - char) fulltype=character;; - int) fulltype=integer;; - *) fulltype=$type;; -esac - -case $type in - byte) LBPV=0;; - char | short) LBPV=1;; - int | float) LBPV=2;; - long | double) LBPV=3;; -esac - -case $type in - float|double) floatingPointOrIntegralType=floatingPointType;; - *) floatingPointOrIntegralType=integralType;; -esac - -typesAndBits() { - - type="$1"; BO="$2" - memtype=$type; swaptype=$type; frombits=; tobits= - - case $type in - float) memtype=int - if [ x$BO != xU ]; then - swaptype=int - fromBits=Float.intBitsToFloat - toBits=Float.floatToRawIntBits - fi;; - double) memtype=long - if [ x$BO != xU ]; then - swaptype=long - fromBits=Double.longBitsToDouble - toBits=Double.doubleToRawLongBits - fi;; - esac - - echo memtype=$memtype swaptype=$swaptype fromBits=$fromBits toBits=$toBits - - echo $type $fulltype $memtype $swaptype \ - | $NAWK '{ type = $1; fulltype = $2; memtype = $3; swaptype = $4; - x = substr(type, 1, 1); - Type = toupper(x) substr(type, 2); - Fulltype = toupper(x) substr(fulltype, 2); - Memtype = toupper(substr(memtype, 1, 1)) substr(memtype, 2); - Swaptype = toupper(substr(swaptype, 1, 1)) substr(swaptype, 2); - printf("Type=%s x=%s Fulltype=%s Memtype=%s Swaptype=%s ", - Type, x, Fulltype, Memtype, Swaptype); }' - - echo "swap=`if [ x$BO = xS ]; then echo Bits.swap; fi`" - -} - -eval `typesAndBits $type $BO` - -a=`if [ $type = int ]; then echo an; else echo a; fi` -A=`if [ $type = int ]; then echo An; else echo A; fi` - -if [ "x$rw" = xR ]; then rwkey=ro; else rwkey=rw; fi - -set -e - -$SPP <$SRC >$DST \ - -K$type \ - -K$floatingPointOrIntegralType \ - -Dtype=$type \ - -DType=$Type \ - -Dfulltype=$fulltype \ - -DFulltype=$Fulltype \ - -Dx=$x \ - -Dmemtype=$memtype \ - -DMemtype=$Memtype \ - -DSwaptype=$Swaptype \ - -DfromBits=$fromBits \ - -DtoBits=$toBits \ - -DLG_BYTES_PER_VALUE=$LBPV \ - -DBYTES_PER_VALUE="(1 << $LBPV)" \ - -DBO=$BO \ - -Dswap=$swap \ - -DRW=$rw \ - -K$rwkey \ - -Da=$a \ - -DA=$A \ - -Kbo$BO - -if [ $BIN ]; then - - genBinOps() { - type="$1" - Type=`echo $1 | $NAWK '{ print toupper(substr($1, 1, 1)) substr($1, 2) }'` - fulltype="$2" - LBPV="$3" - nbytes="$4" - nbytesButOne="$5" - a=`if [ $type = int ]; then echo an; else echo a; fi` - src=$6 - eval `typesAndBits $type` - $SPP <$src \ - -Dtype=$type \ - -DType=$Type \ - -Dfulltype=$fulltype \ - -Dmemtype=$memtype \ - -DMemtype=$Memtype \ - -DfromBits=$fromBits \ - -DtoBits=$toBits \ - -DLG_BYTES_PER_VALUE=$LBPV \ - -DBYTES_PER_VALUE="(1 << $LBPV)" \ - -Dnbytes=$nbytes \ - -DnbytesButOne=$nbytesButOne \ - -DRW=$rw \ - -K$rwkey \ - -Da=$a \ - -be - } - - mv $DST $DST.tmp - sed -e '/#BIN/,$d' <$DST.tmp >$DST - rm -f $DST.tmp - binops=`dirname $SRC`/`basename $SRC .java.template`-bin.java.template - genBinOps char character 1 two one $binops >>$DST - genBinOps short short 1 two one $binops >>$DST - genBinOps int integer 2 four three $binops >>$DST - genBinOps long long 3 eight seven $binops >>$DST - genBinOps float float 2 four three $binops >>$DST - genBinOps double double 3 eight seven $binops >>$DST - echo '}' >>$DST - -fi diff --git a/jdk/makefiles/java/nio/genCoder.sh b/jdk/makefiles/java/nio/genCoder.sh deleted file mode 100644 index 4a2668d75b7..00000000000 --- a/jdk/makefiles/java/nio/genCoder.sh +++ /dev/null @@ -1,99 +0,0 @@ -#! /bin/sh - -# -# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Generate charset coder and decoder classes - -# Environment variables required from make: SED SPP - -what=$1 -SRC=$2 -DST=$3 - -if [ x$what = xdecoder ]; then - - echo ' '$SRC '--('$what')-->' $DST - $SPP <$SRC >$DST \ - -K$what \ - -DA='A' \ - -Da='a' \ - -DCode='Decode' \ - -Dcode='decode' \ - -DitypesPhrase='bytes in a specific charset' \ - -DotypesPhrase='sixteen-bit Unicode characters' \ - -Ditype='byte' \ - -Dotype='character' \ - -DItype='Byte' \ - -DOtype='Char' \ - -Dcoder='decoder' \ - -DCoder='Decoder' \ - -Dcoding='decoding' \ - -DOtherCoder='Encoder' \ - -DreplTypeName='string' \ - -DdefaultRepl='"\\uFFFD"' \ - -DdefaultReplName='"\\uFFFD"<\/tt>' \ - -DreplType='String' \ - -DreplFQType='java.lang.String' \ - -DreplLength='length()' \ - -DItypesPerOtype='CharsPerByte' \ - -DnotLegal='not legal for this charset' \ - -Dotypes-per-itype='chars-per-byte' \ - -DoutSequence='Unicode character' - -elif [ x$what = xencoder ]; then - - echo ' '$SRC '--('$what')-->' $DST - $SPP <$SRC >$DST \ - -K$what \ - -DA='An' \ - -Da='an' \ - -DCode='Encode' \ - -Dcode='encode' \ - -DitypesPhrase='sixteen-bit Unicode characters' \ - -DotypesPhrase='bytes in a specific charset' \ - -Ditype='character' \ - -Dotype='byte' \ - -DItype='Char' \ - -DOtype='Byte' \ - -Dcoder='encoder' \ - -DCoder='Encoder' \ - -Dcoding='encoding' \ - -DOtherCoder='Decoder' \ - -DreplTypeName='byte array' \ - -DdefaultRepl='new byte[] { (byte)'"'"\\?"'"' }' \ - -DdefaultReplName='{<\/tt>\ (byte)'"'"\\?"'"'<\/tt>\ }<\/tt>' \ - -DreplType='byte[]' \ - -DreplFQType='byte[]' \ - -DreplLength='length' \ - -DItypesPerOtype='BytesPerChar' \ - -DnotLegal='not a legal sixteen-bit Unicode sequence' \ - -Dotypes-per-itype='bytes-per-char' \ - -DoutSequence='byte sequence in the given charset' - -else - echo Illegal coder type: $what - exit 1 -fi diff --git a/jdk/makefiles/java/npt/Makefile b/jdk/makefiles/java/npt/Makefile deleted file mode 100644 index e5efd9dd423..00000000000 --- a/jdk/makefiles/java/npt/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. - -# It's currently used by jpda and hprof. Put it in base module for now. -LIBRARY = npt -PRODUCT = sun -LIBRARY_OUTPUT = npt - -# Configure the CFLAGS for this library. - -FILES_m = mapfile-vers - -include $(BUILDDIR)/common/Defs.gmk - -SRCDIR=$(SHARE_SRC)/npt -PSRCDIR=$(PLATFORM_SRC)/npt - -# Use the mapfile-vers (See the mapfile located with this Makefile) -ifdef FILES_m -include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -# -# Files to compile. -# -FILES_c = \ - npt.c \ - utf.c \ - utf_md.c - -OTHER_INCLUDES = -I$(SRCDIR) -I$(PSRCDIR) - -# -# Library to compile. -# -include $(BUILDDIR)/common/Library.gmk - -# We don't want to link against -ljava -JAVALIB= - -# Add -export options to explicitly spell exported symbols -ifeq ($(PLATFORM), windows) - OTHER_LCF += -export:nptInitialize -export:nptTerminate -endif - -# Add location of iconv header -ifeq ($(PLATFORM), macosx) - OTHER_LDLIBS += -liconv -endif - -# -# Add to ambient vpath so we pick up the library files -# -vpath %.c $(SRCDIR):$(PSRCDIR) - diff --git a/jdk/makefiles/java/redist/Makefile b/jdk/makefiles/java/redist/Makefile deleted file mode 100644 index 5c623b2de78..00000000000 --- a/jdk/makefiles/java/redist/Makefile +++ /dev/null @@ -1,497 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Imports files exported by a hotspot build or provided from an external -# location into the OUTPUTDIR, and also primes the OUTPUTDIR with files -# that are provided inside this workspace. -# -# IMPORT_LIST contains the list of destination files that are copied -# from external places (outside this workspace). -# -# INTERNAL_IMPORT_LIST is the list of destination files from BUILDDIR. -# - -BUILDDIR = ../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk -include $(BUILDDIR)/Tools.gmk - -$(info ENTERING redist) - -SERVER_LOCATION = server -CLIENT_LOCATION = client -KERNEL_LOCATION = kernel - -DB_SUFFIX = _db -DTRACE_SUFFIX = _dtrace - -ifeq ($(PLATFORM), windows) - LIB_LOCATION = $(BINDIR) -else ifeq ($(PLATFORM), macosx) - LIB_LOCATION = $(LIBDIR) -else - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -JVM_NAME = $(LIB_PREFIX)jvm.$(LIBRARY_SUFFIX) -JVMLIB_NAME = $(LIB_PREFIX)jvm.$(LIB_SUFFIX) -JVMMAP_NAME = $(LIB_PREFIX)jvm.map -JVMPDB_NAME = $(LIB_PREFIX)jvm.pdb -LIBJSIG_NAME = $(LIB_PREFIX)jsig.$(LIBRARY_SUFFIX) -JVMDB_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).$(LIBRARY_SUFFIX) -JVMDTRACE_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).$(LIBRARY_SUFFIX) - -JVM_DEBUGINFO_NAME = $(LIB_PREFIX)jvm.debuginfo -LIBJSIG_DEBUGINFO_NAME = $(LIB_PREFIX)jsig.debuginfo -JVMDB_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).debuginfo -JVMDTRACE_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).debuginfo - -CLASSSHARINGDATA_DIR = $(BUILDDIR)/../make/tools/sharing - -# Needed to do file copy -ABS_BUILDDIR :=$(call FullPath,$(BUILDDIR)) - -SUBDIRS_desktop = fonts -SUBDIRS_tools = sajdi -include $(BUILDDIR)/common/Subdirs.gmk - -all clean clobber:: - $(SUBDIRS-loop) - -all:: build - -# List of files created here or coming from BUILDDIR area (this workspace) -INTERNAL_IMPORT_LIST = $(LIBDIR)/classlist - -# List of files coming from outside this workspace -ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST = $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME) - endif - endif -endif -ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME) \ - $(LIB_LOCATION)/$(CLIENT_LOCATION)/Xusage.txt - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME) - endif - endif -endif - -$(info ENTERING redist 2) -ifeq ($(PLATFORM), windows) - IMPORT_LIST += $(BINDIR)/$(notdir $(MSVCR100DLL)) - - $(BINDIR)/$(notdir $(MSVCR100DLL)): $(MSVCR100DLL) - $(install-import-file) - $(call chmod-file, a+x) - - # Get the hotspot .map and .pdb files for client and server - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += \ - $(LIBDIR)/$(JVMLIB_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME) - endif - - # Add .map and .pdb files to the import path for client and kernel VMs. - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME) - endif - ifeq ($(JVM_VARIANT_KERNEL),true) - IMPORT_LIST += $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME) - endif - - $(info XXXX $(LIBDIR)/$(JVMLIB_NAME): $(HOTSPOT_LIB_PATH)/$(JVMLIB_NAME)) - $(LIBDIR)/$(JVMLIB_NAME): $(HOTSPOT_LIB_PATH)/$(JVMLIB_NAME) - $(install-import-file) - - # it is OK for the .map and .pdb files to not exist, so do not force a - # dependency on them from the bootstrap location, and allow the copy to fail. - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMPDB_NAME) $@ - - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMPDB_NAME) $@ - - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMPDB_NAME) $@ - -else - # Posix like systems - IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain the target of the symlink - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - endif - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain the target of the symlink - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - endif - - ifeq ($(PLATFORM), solaris) - - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME) - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME) not found!) - endif - - $(LIB_LOCATION)/$(JVM_NAME): $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME) - @$(prep-target) - endif - - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME) - endif - endif - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/$(JVMDB_NAME) not found!) - endif - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME) not found!) - endif - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME) not found!) - endif - endif - endif -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVM_NAME): $(HOTSPOT_KERNEL_PATH)/$(JVM_NAME) - $(install-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(LIBJSIG_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_NAME)) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) \ -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) -endif -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_NAME)) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt : $(HOTSPOT_SERVER_PATH)/Xusage.txt - $(install-import-file) - - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/Xusage.txt : $(HOTSPOT_CLIENT_PATH)/Xusage.txt - $(install-import-file) - -$(LIB_LOCATION)/$(KERNEL_LOCATION)/Xusage.txt : $(HOTSPOT_KERNEL_PATH)/Xusage.txt - $(install-file) - -# -# Specific to non-OpenJDK building -# -ifndef OPENJDK - -INTERNAL_IMPORT_LIST += \ - $(LIBDIR)/security/US_export_policy.jar \ - $(LIBDIR)/security/local_policy.jar \ - $(LIBDIR)/jce.jar - -$(LIBDIR)/jce.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar - $(install-file) -$(LIBDIR)/security/US_export_policy.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar - $(install-file) -$(LIBDIR)/security/local_policy.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar - $(install-file) - -endif # OPENJDK - -# Construct classlist file -$(LIBDIR)/classlist: \ - $(CLASSSHARINGDATA_DIR)/classlist.$(PLATFORM) \ - $(ADDJSUM_JARFILE) - @$(prep-target) - @$(RM) -f $@.temp - $(TOOL_ADDJSUM) \ - $(CLASSSHARINGDATA_DIR)/classlist.$(PLATFORM) $@.temp - $(MV) $@.temp $@ - -# Import internal files (ones that are stashed in this source tree) -import_internal_files : $(INTERNAL_IMPORT_LIST) - -# Import files from the JDK that we are not building -import_files: $(IMPORT_LIST) - -# Get component information variables and rules -include $(BUILDDIR)/common/internal/ImportComponents.gmk - -# Security files we need to import -SEC_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/sec-bin.zip -SEC_FILES_WIN_ZIP=$(ABS_BUILDDIR)/tools/crypto/sec-windows-bin.zip -JGSS_WIN32_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/jgss-windows-i586-bin.zip -JGSS_WIN64_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/jgss-windows-x64-bin.zip - -# Unzip zip file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define SecUnzipper -if [ -f $2 ] ; then \ - $(MKDIR) -p $1; \ - $(ECHO) "( $(CD) $1 && $(UNZIP) -o $2 )"; \ - ( $(CD) $1 && $(UNZIP) -o $2 ); \ -fi -endef - -# If sec-bin exists, unpack it into the build directory -# Also, the library recompile build indirectly depends on two SSL classes, -# so copy those as well FIXUP -# if sec-windows-bin exists, unpack it into the build directory -# if JGSS files exists, unpack it into the build directory -$(TEMPDIR)/security_imported: - @$(prep-target) - @$(call SecUnzipper,$(OUTPUTDIR),$(SEC_FILES_ZIP)) -ifeq ($(PLATFORM), windows) - @$(call SecUnzipper,$(OUTPUTDIR),$(SEC_FILES_WIN_ZIP)) -endif -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - @$(call SecUnzipper,$(OUTPUTDIR),$(JGSS_WIN32_FILES_ZIP)) - else - @$(call SecUnzipper,$(OUTPUTDIR),$(JGSS_WIN64_FILES_ZIP)) - endif -endif - @$(ECHO) "Imported on `$(DATE)`" > $@ - -# Import all files from other components -$(TEMPDIR)/components_imported: - @$(prep-target) - $(call import-component-binaries,$(ABS_OUTPUTDIR)) - $(call import-component-sources,$(IMPORTSRCDIR)) - $(call import-component-docs,$(IMPORTDOCDIR)) - $(call import-component-classes,$(CLASSDESTDIR)) - @$(ECHO) "Imported on `$(DATE)`" > $@ - -# Do pretty much everything -build : import_files \ - import_internal_files \ - $(TEMPDIR)/components_imported \ - $(TEMPDIR)/security_imported - -# Clean up what we imported (except for component files) -clean clobber:: - $(RM) $(IMPORT_LIST) - $(RM) $(INTERNAL_IMPORT_LIST) - $(call import-component-sources-clean,$(IMPORTSRCDIR)) - $(call import-component-docs-clean,$(IMPORTDOCDIR)) - $(call import-component-classes-clean,$(CLASSDESTDIR)) - $(RM) $(TEMPDIR)/components_imported - $(RM) $(TEMPDIR)/security_imported - -.PHONY: import_files import_internal_files - diff --git a/jdk/makefiles/java/redist/fonts/Makefile b/jdk/makefiles/java/redist/fonts/Makefile deleted file mode 100644 index d98fb8fb13b..00000000000 --- a/jdk/makefiles/java/redist/fonts/Makefile +++ /dev/null @@ -1,110 +0,0 @@ -# -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - - -# -# List of lucida font files that we redistribute. -# - -SHARED_FONTFILES = \ - $(LIBDIR)/fonts/LucidaTypewriterRegular.ttf \ - $(LIBDIR)/fonts/LucidaTypewriterBold.ttf \ - $(LIBDIR)/fonts/LucidaBrightRegular.ttf \ - $(LIBDIR)/fonts/LucidaBrightDemiBold.ttf \ - $(LIBDIR)/fonts/LucidaBrightItalic.ttf \ - $(LIBDIR)/fonts/LucidaBrightDemiItalic.ttf \ - $(LIBDIR)/fonts/LucidaSansRegular.ttf \ - $(LIBDIR)/fonts/LucidaSansDemiBold.ttf \ - -ifeq ($(PLATFORM), linux) - -# The oblique versions of the font are derived from the base versions -# and since 2D can do this derivation on the fly at run time there is no -# need to redistribute the fonts. An exception to this is on Linux. -# The reason is that the Lucidas are specified in the font.properties files -# on Linux, and so AWT/Motif components expect to be able to ask the Xserver -# for these oblique fonts, but the Xserver cannot do the same derivation as -# 2D can. - -OBLIQUE_FONTFILES = \ - $(LIBDIR)/oblique-fonts/LucidaTypewriterOblique.ttf \ - $(LIBDIR)/oblique-fonts/LucidaTypewriterBoldOblique.ttf \ - $(LIBDIR)/oblique-fonts/LucidaSansOblique.ttf \ - $(LIBDIR)/oblique-fonts/LucidaSansDemiOblique.ttf \ - -endif - -ifndef OPENJDK - -# Lucida font files are not included in the OpenJDK distribution. -# Get names of font files - -# Copy font files into OUTPUTDIR area - -FONTFILES = $(SHARED_FONTFILES) -FONTSDIR = $(LIBDIR)/fonts -FONTSDIRFILE = $(FONTSDIR)/fonts.dir -INTERNAL_IMPORT_LIST = $(FONTFILES) - -ifneq ($(PLATFORM), windows) - INTERNAL_IMPORT_LIST += $(FONTSDIRFILE) -endif - -$(LIBDIR)/fonts/%.ttf: $(CLOSED_SRC)/share/lib/fonts/%.ttf - $(install-file) - -$(FONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.fonts.dir - $(install-file) - -ifeq ($(PLATFORM), linux) - -# The oblique fonts are only needed/wanted on Linux. - -OBLFONTSDIR = $(LIBDIR)/oblique-fonts -OBLFONTSDIRFILE = $(OBLFONTSDIR)/fonts.dir -INTERNAL_IMPORT_LIST += $(OBLIQUE_FONTFILES) $(OBLFONTSDIRFILE) - -$(LIBDIR)/oblique-fonts/%.ttf: $(CLOSED_SRC)/share/lib/fonts/oblique/%.ttf - $(install-file) - -$(OBLFONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.oblique-fonts.dir - $(install-file) - -endif # linux - -all build : $(INTERNAL_IMPORT_LIST) - -clean clobber:: - $(RM) $(INTERNAL_IMPORT_LIST) - -else - -all build clean clobber : - -endif # !OPENJDK diff --git a/jdk/makefiles/java/redist/sajdi/Makefile b/jdk/makefiles/java/redist/sajdi/Makefile deleted file mode 100644 index 1e1e818772d..00000000000 --- a/jdk/makefiles/java/redist/sajdi/Makefile +++ /dev/null @@ -1,99 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -ifeq ($(PLATFORM), windows) - LIB_LOCATION = $(BINDIR) -else ifeq ($(PLATFORM), macosx) - LIB_LOCATION = $(LIBDIR) -else - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -# INCLUDE_SA is false on platforms where SA is not supported. -# On platforms where it is supported, we want to allow it to -# not be present, at least temporarily. So, -# if the SA files (well, just sa-jdi.jar) do not exist -# in the HOTSPOT_IMPORT_PATH, then we won't build SA. -SA_EXISTS := $(shell if [ -r $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar ] ; then \ - $(ECHO) true; \ - else \ - $(ECHO) false; \ - fi) - -ifeq ($(SA_EXISTS), false) - INCLUDE_SA := false -endif - -IMPORT_LIST = -ifeq ($(INCLUDE_SA), true) - IMPORT_LIST += $(LIBDIR)/sa-jdi.jar \ - $(LIB_LOCATION)/$(SALIB_NAME) - ifeq ($(PLATFORM), windows) - IMPORT_LIST += $(LIB_LOCATION)/$(SAMAP_NAME) \ - $(LIB_LOCATION)/$(SAPDB_NAME) - endif - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SA_DEBUGINFO_NAME) - endif - endif -endif # INCLUDE_SA - - -ifeq ($(INCLUDE_SA), true) -# The Serviceability Agent is built in the Hotspot workspace. -# It contains two files: -# - sa-jdi.jar: This goes into the same dir as tools.jar. -# - a shared library: sawindbg.dll on windows / libproc.sa on unix -# This goes into the same dir as the other -# shared libs, eg. libjdwp.so. -$(LIBDIR)/sa-jdi.jar: $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar - $(install-importonly-file) - -$(LIB_LOCATION)/$(SALIB_NAME): $(HOTSPOT_SALIB_PATH)/$(SALIB_NAME) - $(install-import-file) - -ifeq ($(PLATFORM), windows) -$(LIB_LOCATION)/$(SAPDB_NAME): $(HOTSPOT_SALIB_PATH)/$(SAPDB_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SAMAP_NAME): $(HOTSPOT_SALIB_PATH)/$(SAMAP_NAME) - $(install-import-file) -endif # windows - - ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(SA_DEBUGINFO_NAME): $(HOTSPOT_SALIB_PATH)/$(SA_DEBUGINFO_NAME) - $(install-import-file) - endif -endif # INCLUDE_SA - -all: $(IMPORT_LIST) - -clean clobber:: diff --git a/jdk/makefiles/java/security/Makefile b/jdk/makefiles/java/security/Makefile deleted file mode 100644 index 19f43144ae7..00000000000 --- a/jdk/makefiles/java/security/Makefile +++ /dev/null @@ -1,125 +0,0 @@ -# -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = java.security -PRODUCT = sun -JAVAC_MAX_WARNINGS = true -JAVAC_LINT_OPTIONS = -Xlint:all -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Rules -# -AUTO_FILES_JAVA_DIRS = java/security - -# -# Directories -# - -PROPS_SRC = $(JDK_TOPDIR)/src/share/lib/security/java.security - -ifeq ($(PLATFORM), solaris) -PROPS_SRC = $(JDK_TOPDIR)/src/share/lib/security/java.security-solaris - -else # NOT_SOLARIS - -# Register Microsoft CryptoAPI provider only on Windows platform. -ifeq ($(PLATFORM), windows) - PROPS_SRC = $(JDK_TOPDIR)/src/share/lib/security/java.security-windows -else # NOT_WINDOWS - -ifeq ($(PLATFORM), macosx) - PROPS_SRC = $(JDK_TOPDIR)/src/share/lib/security/java.security-macosx -endif # MACOSX - -endif # NOT_WINDOWS -endif # NOT_SOLARIS - - -PROPS_BUILD = $(LIBDIR)/security/java.security - -POLICY_SRC = $(JDK_TOPDIR)/src/share/lib/security/java.policy -POLICY_BUILD = $(LIBDIR)/security/java.policy - -CACERTS_SRC = $(CACERTS_FILE) -CACERTS_BUILD = $(LIBDIR)/security/cacerts - -ifndef OPENJDK - BLACKLIST_SRC = $(CLOSED_SHARE_SRC)/lib/security/blacklist - BLACKLIST_BUILD = $(LIBDIR)/security/blacklist - TRUSTEDLIBS_SRC = $(CLOSED_SHARE_SRC)/lib/security/trusted.libraries - TRUSTEDLIBS_BUILD = $(LIBDIR)/security/trusted.libraries -endif - -FILES_class = $(FILES_java:%.java=$(CLASSBINDIR)/%.class) - -# -# Rules -# -include $(BUILDDIR)/common/Rules.gmk - -ifdef OPENJDK -build: properties policy cacerts -else -build: properties policy cacerts blacklist trustedlibs -endif - -install: all - -properties: classes $(PROPS_BUILD) - -policy: classes $(POLICY_BUILD) - -cacerts: classes $(CACERTS_BUILD) - -blacklist: classes $(BLACKLIST_BUILD) - -trustedlibs: classes $(TRUSTEDLIBS_BUILD) - -$(PROPS_BUILD): $(PROPS_SRC) - $(install-file) - -$(POLICY_BUILD): $(POLICY_SRC) - $(install-file) - -$(CACERTS_BUILD): $(CACERTS_SRC) - $(install-file) - -$(BLACKLIST_BUILD): $(BLACKLIST_SRC) - $(install-file) - -$(TRUSTEDLIBS_BUILD): $(TRUSTEDLIBS_SRC) - $(install-file) - -clean clobber:: .delete.classlist - $(RM) -r $(CLASSBINDIR)/java/security - $(RM) $(PROPS_BUILD) $(POLICY_BUILD) $(CACERTS_BUILD) $(BLACKLIST_BUILD) $(TRUSTEDLIBS_BUILD) - -# Additional Rule for building sun.security.util -$(CLASSBINDIR)/%.class: $(SHARE_SRC)/sun/%.java - @$(ECHO) $? >> $(TEMPDIR)/.classes.list - diff --git a/jdk/makefiles/java/sun_nio/FILES_java.gmk b/jdk/makefiles/java/sun_nio/FILES_java.gmk deleted file mode 100644 index b00fb04c588..00000000000 --- a/jdk/makefiles/java/sun_nio/FILES_java.gmk +++ /dev/null @@ -1,78 +0,0 @@ -# -# Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# This is the list of java classes that will be automatically built -# from sources. See Exportedfiles.gmk for the list of files which -# will generate header files -# -FILES_java = \ - sun/nio/cs/StandardCharsets.java \ - sun/nio/cs/AbstractCharsetProvider.java \ - sun/nio/cs/HistoricallyNamedCharset.java \ - sun/nio/cs/Surrogate.java \ - sun/nio/cs/CharsetMapping.java \ - sun/nio/cs/SingleByteEncoder.java \ - sun/nio/cs/SingleByteDecoder.java \ - sun/nio/cs/UnicodeEncoder.java \ - sun/nio/cs/UnicodeDecoder.java \ - sun/nio/cs/ISO_8859_1.java \ - sun/nio/cs/ISO_8859_2.java \ - sun/nio/cs/ISO_8859_4.java \ - sun/nio/cs/ISO_8859_5.java \ - sun/nio/cs/ISO_8859_7.java \ - sun/nio/cs/ISO_8859_9.java \ - sun/nio/cs/ISO_8859_13.java \ - sun/nio/cs/ISO_8859_15.java \ - sun/nio/cs/IBM437.java \ - sun/nio/cs/IBM737.java \ - sun/nio/cs/IBM775.java \ - sun/nio/cs/IBM850.java \ - sun/nio/cs/IBM852.java \ - sun/nio/cs/IBM855.java \ - sun/nio/cs/IBM857.java \ - sun/nio/cs/IBM858.java \ - sun/nio/cs/IBM862.java \ - sun/nio/cs/IBM866.java \ - sun/nio/cs/IBM874.java \ - sun/nio/cs/KOI8_R.java \ - sun/nio/cs/KOI8_U.java \ - sun/nio/cs/MS1250.java \ - sun/nio/cs/MS1251.java \ - sun/nio/cs/MS1252.java \ - sun/nio/cs/MS1253.java \ - sun/nio/cs/MS1254.java \ - sun/nio/cs/MS1257.java \ - sun/nio/cs/US_ASCII.java \ - sun/nio/cs/UTF_16.java \ - sun/nio/cs/UTF_16BE.java \ - sun/nio/cs/UTF_16LE.java \ - sun/nio/cs/UTF_16LE_BOM.java \ - sun/nio/cs/UTF_32.java \ - sun/nio/cs/UTF_32BE.java \ - sun/nio/cs/UTF_32LE.java \ - sun/nio/cs/UTF_32BE_BOM.java \ - sun/nio/cs/UTF_32LE_BOM.java - diff --git a/jdk/makefiles/java/util/FILES_java.gmk b/jdk/makefiles/java/util/FILES_java.gmk deleted file mode 100644 index 8746e024bdf..00000000000 --- a/jdk/makefiles/java/util/FILES_java.gmk +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_java = \ - sun/util/resources/LocaleData.java \ - sun/util/resources/OpenListResourceBundle.java \ - sun/util/resources/LocaleNamesBundle.java \ - sun/util/resources/TimeZoneNamesBundle.java \ - sun/util/resources/TimeZoneNames.java \ - sun/util/resources/TimeZoneNames_de.java \ - sun/util/resources/TimeZoneNames_en.java \ - sun/util/resources/TimeZoneNames_en_CA.java \ - sun/util/resources/TimeZoneNames_en_GB.java \ - sun/util/resources/TimeZoneNames_en_IE.java \ - sun/util/resources/TimeZoneNames_es.java \ - sun/util/resources/TimeZoneNames_fr.java \ - sun/util/resources/TimeZoneNames_it.java \ - sun/util/resources/TimeZoneNames_pt_BR.java \ - sun/util/resources/TimeZoneNames_sv.java diff --git a/jdk/makefiles/java/util/FILES_properties.gmk b/jdk/makefiles/java/util/FILES_properties.gmk deleted file mode 100644 index 5aa6cbfaef5..00000000000 --- a/jdk/makefiles/java/util/FILES_properties.gmk +++ /dev/null @@ -1,213 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_compiled_properties = \ - sun/util/resources/LocaleNames.properties \ - sun/util/resources/LocaleNames_be.properties \ - sun/util/resources/LocaleNames_bg.properties \ - sun/util/resources/LocaleNames_ca.properties \ - sun/util/resources/LocaleNames_cs.properties \ - sun/util/resources/LocaleNames_da.properties \ - sun/util/resources/LocaleNames_de.properties \ - sun/util/resources/LocaleNames_el.properties \ - sun/util/resources/LocaleNames_el_CY.properties \ - sun/util/resources/LocaleNames_en.properties \ - sun/util/resources/LocaleNames_en_MT.properties \ - sun/util/resources/LocaleNames_en_PH.properties \ - sun/util/resources/LocaleNames_en_SG.properties \ - sun/util/resources/LocaleNames_es.properties \ - sun/util/resources/LocaleNames_es_US.properties \ - sun/util/resources/LocaleNames_et.properties \ - sun/util/resources/LocaleNames_fi.properties \ - sun/util/resources/LocaleNames_fr.properties \ - sun/util/resources/LocaleNames_ga.properties \ - sun/util/resources/LocaleNames_hr.properties \ - sun/util/resources/LocaleNames_hu.properties \ - sun/util/resources/LocaleNames_in.properties \ - sun/util/resources/LocaleNames_is.properties \ - sun/util/resources/LocaleNames_it.properties \ - sun/util/resources/LocaleNames_lt.properties \ - sun/util/resources/LocaleNames_lv.properties \ - sun/util/resources/LocaleNames_mk.properties \ - sun/util/resources/LocaleNames_ms.properties \ - sun/util/resources/LocaleNames_mt.properties \ - sun/util/resources/LocaleNames_nl.properties \ - sun/util/resources/LocaleNames_no.properties \ - sun/util/resources/LocaleNames_no_NO_NY.properties \ - sun/util/resources/LocaleNames_pl.properties \ - sun/util/resources/LocaleNames_pt.properties \ - sun/util/resources/LocaleNames_pt_BR.properties \ - sun/util/resources/LocaleNames_pt_PT.properties \ - sun/util/resources/LocaleNames_ro.properties \ - sun/util/resources/LocaleNames_ru.properties \ - sun/util/resources/LocaleNames_sk.properties \ - sun/util/resources/LocaleNames_sl.properties \ - sun/util/resources/LocaleNames_sq.properties \ - sun/util/resources/LocaleNames_sr.properties \ - sun/util/resources/LocaleNames_sr_Latn.properties \ - sun/util/resources/LocaleNames_sv.properties \ - sun/util/resources/LocaleNames_tr.properties \ - sun/util/resources/LocaleNames_uk.properties \ - \ - sun/util/resources/CalendarData.properties \ - sun/util/resources/CalendarData_be.properties \ - sun/util/resources/CalendarData_bg.properties \ - sun/util/resources/CalendarData_ca.properties \ - sun/util/resources/CalendarData_cs.properties \ - sun/util/resources/CalendarData_da.properties \ - sun/util/resources/CalendarData_de.properties \ - sun/util/resources/CalendarData_el.properties \ - sun/util/resources/CalendarData_el_CY.properties \ - sun/util/resources/CalendarData_en.properties \ - sun/util/resources/CalendarData_en_GB.properties \ - sun/util/resources/CalendarData_en_IE.properties \ - sun/util/resources/CalendarData_en_MT.properties \ - sun/util/resources/CalendarData_es.properties \ - sun/util/resources/CalendarData_es_ES.properties \ - sun/util/resources/CalendarData_es_US.properties \ - sun/util/resources/CalendarData_et.properties \ - sun/util/resources/CalendarData_fi.properties \ - sun/util/resources/CalendarData_fr.properties \ - sun/util/resources/CalendarData_fr_CA.properties \ - sun/util/resources/CalendarData_hr.properties \ - sun/util/resources/CalendarData_hu.properties \ - sun/util/resources/CalendarData_in_ID.properties \ - sun/util/resources/CalendarData_is.properties \ - sun/util/resources/CalendarData_it.properties \ - sun/util/resources/CalendarData_lt.properties \ - sun/util/resources/CalendarData_lv.properties \ - sun/util/resources/CalendarData_mk.properties \ - sun/util/resources/CalendarData_ms_MY.properties \ - sun/util/resources/CalendarData_mt.properties \ - sun/util/resources/CalendarData_mt_MT.properties \ - sun/util/resources/CalendarData_nl.properties \ - sun/util/resources/CalendarData_no.properties \ - sun/util/resources/CalendarData_pl.properties \ - sun/util/resources/CalendarData_pt.properties \ - sun/util/resources/CalendarData_pt_PT.properties \ - sun/util/resources/CalendarData_ro.properties \ - sun/util/resources/CalendarData_ru.properties \ - sun/util/resources/CalendarData_sk.properties \ - sun/util/resources/CalendarData_sl.properties \ - sun/util/resources/CalendarData_sq.properties \ - sun/util/resources/CalendarData_sr.properties \ - sun/util/resources/CalendarData_sr_Latn_BA.properties \ - sun/util/resources/CalendarData_sr_Latn_ME.properties \ - sun/util/resources/CalendarData_sr_Latn_RS.properties \ - sun/util/resources/CalendarData_sv.properties \ - sun/util/resources/CalendarData_tr.properties \ - sun/util/resources/CalendarData_uk.properties \ - \ - sun/util/resources/CurrencyNames.properties \ - sun/util/resources/CurrencyNames_be_BY.properties \ - sun/util/resources/CurrencyNames_bg_BG.properties \ - sun/util/resources/CurrencyNames_ca_ES.properties \ - sun/util/resources/CurrencyNames_cs_CZ.properties \ - sun/util/resources/CurrencyNames_da_DK.properties \ - sun/util/resources/CurrencyNames_de.properties \ - sun/util/resources/CurrencyNames_de_AT.properties \ - sun/util/resources/CurrencyNames_de_CH.properties \ - sun/util/resources/CurrencyNames_de_DE.properties \ - sun/util/resources/CurrencyNames_de_GR.properties \ - sun/util/resources/CurrencyNames_de_LU.properties \ - sun/util/resources/CurrencyNames_el_CY.properties \ - sun/util/resources/CurrencyNames_el_GR.properties \ - sun/util/resources/CurrencyNames_en_AU.properties \ - sun/util/resources/CurrencyNames_en_CA.properties \ - sun/util/resources/CurrencyNames_en_GB.properties \ - sun/util/resources/CurrencyNames_en_IE.properties \ - sun/util/resources/CurrencyNames_en_IN.properties \ - sun/util/resources/CurrencyNames_en_MT.properties \ - sun/util/resources/CurrencyNames_en_NZ.properties \ - sun/util/resources/CurrencyNames_en_PH.properties \ - sun/util/resources/CurrencyNames_en_SG.properties \ - sun/util/resources/CurrencyNames_en_US.properties \ - sun/util/resources/CurrencyNames_en_ZA.properties \ - sun/util/resources/CurrencyNames_es.properties \ - sun/util/resources/CurrencyNames_es_AR.properties \ - sun/util/resources/CurrencyNames_es_BO.properties \ - sun/util/resources/CurrencyNames_es_CL.properties \ - sun/util/resources/CurrencyNames_es_CO.properties \ - sun/util/resources/CurrencyNames_es_CR.properties \ - sun/util/resources/CurrencyNames_es_CU.properties \ - sun/util/resources/CurrencyNames_es_DO.properties \ - sun/util/resources/CurrencyNames_es_EC.properties \ - sun/util/resources/CurrencyNames_es_ES.properties \ - sun/util/resources/CurrencyNames_es_GT.properties \ - sun/util/resources/CurrencyNames_es_HN.properties \ - sun/util/resources/CurrencyNames_es_MX.properties \ - sun/util/resources/CurrencyNames_es_NI.properties \ - sun/util/resources/CurrencyNames_es_PA.properties \ - sun/util/resources/CurrencyNames_es_PE.properties \ - sun/util/resources/CurrencyNames_es_PR.properties \ - sun/util/resources/CurrencyNames_es_PY.properties \ - sun/util/resources/CurrencyNames_es_SV.properties \ - sun/util/resources/CurrencyNames_es_US.properties \ - sun/util/resources/CurrencyNames_es_UY.properties \ - sun/util/resources/CurrencyNames_es_VE.properties \ - sun/util/resources/CurrencyNames_et_EE.properties \ - sun/util/resources/CurrencyNames_fi_FI.properties \ - sun/util/resources/CurrencyNames_fr.properties \ - sun/util/resources/CurrencyNames_fr_BE.properties \ - sun/util/resources/CurrencyNames_fr_CA.properties \ - sun/util/resources/CurrencyNames_fr_CH.properties \ - sun/util/resources/CurrencyNames_fr_FR.properties \ - sun/util/resources/CurrencyNames_fr_LU.properties \ - sun/util/resources/CurrencyNames_ga_IE.properties \ - sun/util/resources/CurrencyNames_hr_HR.properties \ - sun/util/resources/CurrencyNames_hu_HU.properties \ - sun/util/resources/CurrencyNames_in_ID.properties \ - sun/util/resources/CurrencyNames_is_IS.properties \ - sun/util/resources/CurrencyNames_it.properties \ - sun/util/resources/CurrencyNames_it_CH.properties \ - sun/util/resources/CurrencyNames_it_IT.properties \ - sun/util/resources/CurrencyNames_lt_LT.properties \ - sun/util/resources/CurrencyNames_lv_LV.properties \ - sun/util/resources/CurrencyNames_mk_MK.properties \ - sun/util/resources/CurrencyNames_ms_MY.properties \ - sun/util/resources/CurrencyNames_mt_MT.properties \ - sun/util/resources/CurrencyNames_nl_BE.properties \ - sun/util/resources/CurrencyNames_nl_NL.properties \ - sun/util/resources/CurrencyNames_no_NO.properties \ - sun/util/resources/CurrencyNames_pl_PL.properties \ - sun/util/resources/CurrencyNames_pt.properties \ - sun/util/resources/CurrencyNames_pt_BR.properties \ - sun/util/resources/CurrencyNames_pt_PT.properties \ - sun/util/resources/CurrencyNames_ro_RO.properties \ - sun/util/resources/CurrencyNames_ru_RU.properties \ - sun/util/resources/CurrencyNames_sk_SK.properties \ - sun/util/resources/CurrencyNames_sl_SI.properties \ - sun/util/resources/CurrencyNames_sq_AL.properties \ - sun/util/resources/CurrencyNames_sr_BA.properties \ - sun/util/resources/CurrencyNames_sr_CS.properties \ - sun/util/resources/CurrencyNames_sr_ME.properties \ - sun/util/resources/CurrencyNames_sr_RS.properties \ - sun/util/resources/CurrencyNames_sr_Latn_BA.properties \ - sun/util/resources/CurrencyNames_sr_Latn_ME.properties \ - sun/util/resources/CurrencyNames_sr_Latn_RS.properties \ - sun/util/resources/CurrencyNames_sv.properties \ - sun/util/resources/CurrencyNames_sv_SE.properties \ - sun/util/resources/CurrencyNames_tr_TR.properties \ - sun/util/resources/CurrencyNames_uk_UA.properties diff --git a/jdk/makefiles/java/util/Makefile b/jdk/makefiles/java/util/Makefile deleted file mode 100644 index fa6eeb69794..00000000000 --- a/jdk/makefiles/java/util/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for sun.util.resources that don't need -# to be part of the bootstrap build. -# - -BUILDDIR = ../.. - -PACKAGE = java.util.resources -PRODUCT = java -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true - -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# - -# Adds more files than before?: AUTO_FILES_JAVA_DIRS=sun/util/resources -include FILES_java.gmk - -# Adds more files than before?: AUTO_FILES_PROPERTIES_DIRS=sun/util/resources -include FILES_properties.gmk - -# -# Compile properties -# -COMPILED_PROPERTIES_SUPERCLASS=LocaleNamesBundle - -# -# Include -# -include $(BUILDDIR)/common/Classes.gmk - diff --git a/jdk/makefiles/java/verify/Makefile b/jdk/makefiles/java/verify/Makefile deleted file mode 100644 index 4343e4aa0dc..00000000000 --- a/jdk/makefiles/java/verify/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -# -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Build libverify.so -# - -BUILDDIR = ../.. -PRODUCT = java -LIBRARY = verify -include $(BUILDDIR)/common/Defs.gmk - -# -# Link to libjvm so JVM_ functions can be called. -# -OTHER_LDLIBS += $(JVMLIB) - -ifeq ($(PLATFORM), windows) - # - # Don't want JAVALIB - # - JAVALIB = - EXTRA_LIBS = -endif - -# -# Files to compile. -# -FILES_c = \ - check_code.c \ - check_format.c - -# -# Targets. -# -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - FILES_reorder += reorder-$(ARCH) - endif -endif -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -# -# Add to the ambient VPATH. -# -vpath %.c $(SHARE_SRC)/native/common - diff --git a/jdk/makefiles/java/verify/mapfile-vers b/jdk/makefiles/java/verify/mapfile-vers deleted file mode 100644 index ecabd58ef24..00000000000 --- a/jdk/makefiles/java/verify/mapfile-vers +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -SUNWprivate_1.1 { - global: - VerifyClass; - VerifyClassForMajorVersion; - VerifyClassname; - VerifyFixClassname; - local: - *; -}; diff --git a/jdk/makefiles/java/verify/reorder-i586 b/jdk/makefiles/java/verify/reorder-i586 deleted file mode 100644 index 56ee8e378d7..00000000000 --- a/jdk/makefiles/java/verify/reorder-i586 +++ /dev/null @@ -1,40 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; -# Test Null -text: .text%VerifyFixClassname; -text: .text%VerifyClassname; -text: .text%skip_over_fieldname: OUTPUTDIR/tmp/java/verify/obj/check_format.o; -text: .text%skip_over_field_signature: OUTPUTDIR/tmp/java/verify/obj/check_format.o; -text: .text%VerifyClass; -text: .text%make_class_info_from_name: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%class_name_to_ID: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%make_class_info: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%free_block: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_method: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_opcode_operands: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%initialize_dataflow: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%signature_to_fieldtype: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%check_register_values: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%pop_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%update_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%push_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_successors: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%set_protected: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_one_successor: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -# Test Exit -# Test Hello -text: .text%merge_fullinfo_types: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%isAssignableTo: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -# Test Sleep -text: .text%isLegalTarget: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_constant_pool_type: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -# Test IntToString -# Test LoadToolkit -# Test LoadFrame -# Test LoadJFrame -# Test JHello -# SwingSet -text: .text%copy_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%ntohl: OUTPUTDIR/tmp/java/verify/obj/check_code.o; diff --git a/jdk/makefiles/java/verify/reorder-sparc b/jdk/makefiles/java/verify/reorder-sparc deleted file mode 100644 index 17e13469dcd..00000000000 --- a/jdk/makefiles/java/verify/reorder-sparc +++ /dev/null @@ -1,44 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; -# Test Null -text: .text%VerifyFixClassname; -text: .text%VerifyClassname; -text: .text%skip_over_fieldname: OUTPUTDIR/tmp/java/verify/obj/check_format.o; -text: .text%VerifyClass; -text: .text%CCinit: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%initialize_class_hash; -text: .text%make_class_info_from_name: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%make_class_info: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_method: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%instruction_length: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_opcode_operands: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%initialize_exception_table: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%initialize_dataflow: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%signature_to_fieldtype: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%check_register_values: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%pop_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%update_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%push_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_successors: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%pop_and_free: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%set_protected: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_one_successor: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%finalize_class_hash: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%CCdestroy: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -# Test Exit -# Test Hello -text: .text%merge_fullinfo_types: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -# Test Sleep -# Test IntToString -# Test LoadToolkit -# Test LoadFrame -text: .text%verify_constant_pool_type: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -# Test LoadJFrame -# Test JHello -# SwingSet -text: .text%verify_field: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%check_and_push: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%signature_to_args_size: OUTPUTDIR/tmp/java/verify/obj/check_code.o; diff --git a/jdk/makefiles/java/verify/reorder-sparcv9 b/jdk/makefiles/java/verify/reorder-sparcv9 deleted file mode 100644 index 1f58d56cda3..00000000000 --- a/jdk/makefiles/java/verify/reorder-sparcv9 +++ /dev/null @@ -1,45 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; -# Test Null -text: .text%VerifyFixClassname; -text: .text%next_utf2unicode: OUTPUTDIR/tmp/java/verify/obj64/check_format.o; -text: .text%VerifyClassname; -text: .text%skip_over_fieldname: OUTPUTDIR/tmp/java/verify/obj64/check_format.o; -text: .text%VerifyClass; -text: .text%CCinit: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%initialize_class_hash; -text: .text%make_class_info_from_name: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%make_class_info: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%verify_method: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%instruction_length: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%verify_opcode_operands: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%verify_constant_pool_type: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%check_and_push: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%pop_and_free: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%set_protected: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%initialize_exception_table: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_fullinfo_types: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%initialize_dataflow: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%signature_to_fieldtype: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%check_register_values: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%pop_stack: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%update_registers: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%push_stack: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_into_successors: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_into_one_successor: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_stack: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_registers: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%finalize_class_hash: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%CCdestroy: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -# Test Exit -# Test Hello -# Test Sleep -# Test IntToString -# Test LoadToolkit -# Test LoadFrame -# Test LoadJFrame -# Test JHello -# SwingSet -text: .text%verify_field: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%signature_to_args_size: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; diff --git a/jdk/makefiles/javax/Makefile b/jdk/makefiles/javax/Makefile deleted file mode 100644 index d0c06f9c39e..00000000000 --- a/jdk/makefiles/javax/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -# -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building javax -# - -BUILDDIR = .. -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = - -SUBDIRS_management = management - -SUBDIRS_misc = \ - crypto \ - sql - - -# imageio uses xml, so build it last -SUBDIRS_desktop = \ - swing \ - sound \ - imageio - -include $(BUILDDIR)/common/Subdirs.gmk - -all build: - $(SUBDIRS-loop) -clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/javax/crypto/Defs-jce.gmk b/jdk/makefiles/javax/crypto/Defs-jce.gmk deleted file mode 100644 index 0bfd00c8cf8..00000000000 --- a/jdk/makefiles/javax/crypto/Defs-jce.gmk +++ /dev/null @@ -1,105 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -include $(BUILDDIR)/common/Release.gmk - -# -# Include these extra attributes for now, should probably take out. -# -JCE_MANIFEST_FILE = $(TEMPDIR)/manifest.mf -$(JCE_MANIFEST_FILE): $(MAINMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) "Extension-Name: javax.crypto" >> $@ - $(ECHO) "Implementation-Vendor-Id: com.sun" >> $@ - -README-MAKEFILE_WARNING = \ - "\nPlease read make/javax/crypto/Makefile for further build instructions." - -define no-source-warning - @$(ECHO) "\n***JCE sources are not available, skipping build.***" \ - $(README-MAKEFILE_WARNING) -endef - -ifndef OPENJDK - -PREBUILT_DIR = $(JDK_TOPDIR)/make/closed/tools/crypto - -define build-warning - @$(ECHO) "\n***JCE in JDK builds require special tools/procedures.***" \ - $(README-MAKEFILE_WARNING) -endef - -# -# Location for JCE codesigning key. -# -SIGNING_KEY_DIR = /security/ws/JCE-signing/src -SIGNING_KEYSTORE = $(SIGNING_KEY_DIR)/KeyStore.jks -SIGNING_PASSPHRASE = $(SIGNING_KEY_DIR)/passphrase.txt -SIGNING_ALIAS = oracle_jce_rsa - -# -# Defines for signing the various jar files. -# - -define presign - @if [ ! -f $(SIGNING_KEYSTORE) -o ! -f $(SIGNING_PASSPHRASE) ]; then \ - $(ECHO) "\n$(SIGNING_KEYSTORE): Signing mechanism *NOT* available..." \ - $(README-MAKEFILE_WARNING); \ - exit 2; \ - fi -endef - -define sign-target - $(BOOT_JARSIGNER_CMD) -keystore $(SIGNING_KEYSTORE) \ - $@ $(SIGNING_ALIAS) < $(SIGNING_PASSPHRASE) - @$(java-vm-cleanup) - @$(ECHO) "\nJar codesigning finished." -endef - -RELEASE_DIR = $(OUTPUTDIR)/jce-release - -define release-warning - @$(ECHO) \ - "\n***The jar files built by the 'release' target must***" \ - "\n***still be checked into the closed workspace! ***" \ - $(README-MAKEFILE_WARNING) -endef - -# -# Convenience macros for signing a jar file. -# -# Call through $(call sign-file, target file) -# -define sign-file - $(presign) - $(prep-target) - $(CP) $1 $@ - $(sign-target) -endef - -endif # !OPENJDK diff --git a/jdk/makefiles/javax/crypto/Makefile b/jdk/makefiles/javax/crypto/Makefile deleted file mode 100644 index f9089f902d3..00000000000 --- a/jdk/makefiles/javax/crypto/Makefile +++ /dev/null @@ -1,484 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building jce.jar and the various cryptographic strength -# policy jar files. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. There are some -# javac options currently specific to JCE, so we recompile now to make -# sure any implicit compilations didn't use any incorrect flags. -# -# For OpenJDK, the jar files built here are installed directly into the -# OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built and signed, and the resulting jar files *MUST BE CHECKED INTO -# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE -# FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual. -# If OpenJDK: builds/installs the -# jce.jar/limited policy files. -# If JDK: builds but does not install. -# During full tops-down builds, -# prebuilt/presigned jce.jar & -# limited policy files are copied -# in by make/java/redist/Makefile. -# If you are working in this directory -# and want to install the prebuilts, -# use the "install-prebuilt" target. -# -# jar Builds/installs jce.jar -# If OpenJDK, does not sign -# If JDK, tries to sign -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds jce.jar (does not sign/install) -# -# build-policy Builds policy files (does not sign/install) -# -# install-jar Alias for "jar" above -# -# install-limited Builds/installs limited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign -# install-unlimited Builds/nstalls unlimited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign -# -# Other targets (JDK only): -# -# sign Alias for sign-jar and sign-policy -# sign-jar Builds/signs jce.jar file (no install) -# sign-policy Builds/signs policy files (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../.. -PACKAGE = javax.crypto -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = \ - javax/crypto \ - sun/security/internal/interfaces \ - sun/security/internal/spec - -include $(BUILDDIR)/common/Classes.gmk - -# -# Rules -# - -# -# Some licensees do not get the security sources, but we still need to -# be able to build "all" for them. Check here to see if the sources were -# available. If not, then we don't need to continue this rule. -# - -ifdef OPENJDK -all: build-jar install-jar build-policy install-limited -else # OPENJDK -ifeq ($(strip $(FILES_java)),) -all: - $(no-source-warning) -else # FILES_java/policy files available -all: build-jar build-policy - $(build-warning) -endif # $(FILES_java)/policy files available -endif # OPENJDK - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, they will be -# placed in the appropriate areas. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include Defs-jce.gmk - - -# ===================================================== -# Build the unsigned jce.jar file. Signing comes later. -# - -JAR_DESTFILE = $(LIBDIR)/jce.jar - -# -# JCE building is somewhat involved. -# -# OpenJDK: Since we do not ship prebuilt JCE files, previous compiles -# in the build may have needed JCE class signatures. There were then -# implicitly built by javac (likely using the boot javac). While using -# those class files was fine for signatures, we need to rebuild using -# the right compiler. -# -# JDK: Even through the jce.jar was previously installed, since the -# source files are accessible in the source directories, they will -# always be "newer" than the prebuilt files inside the jar, and thus -# make will always rebuild them. (We could "hide" the JCE source in a -# separate directory, but that would make the build logic for JDK and -# OpenJDK more complicated.) -# -# Thus in either situation, we shouldn't use these files. -# -# To make sure the classes were built with the right compiler options, -# delete the existing files in $(CLASSBINDIR), rebuild the right way in a -# directory under $(TEMPDIR), then copy the files back to -# $(CLASSBINDIR). Building in $(TEMPDIR) allows us to use our make -# infrastructure without modification: .classes.list, macros, etc. -# - -# -# The list of directories that will be remade from scratch, using the -# right compilers/options. -# -DELETE_DIRS = $(patsubst %, $(CLASSBINDIR)/%, $(AUTO_FILES_JAVA_DIRS)) - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/jce.jar - -# -# Build jce.jar, then replace the previously built JCE files in the -# classes directory with these. This ensures we have consistently built -# files throughout the workspaces. -# -$(UNSIGNED_DIR)/jce.jar: prebuild build $(JCE_MANIFEST_FILE) - $(prep-target) - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - $(CP) -r $(CLASSDESTDIR)/* $(CLASSBINDIR) - @$(java-vm-cleanup) - -build: prebuild - -prebuild: - $(RM) -r $(DELETE_DIRS) - - -# ===================================================== -# Build the unsigned policy files. -# -# Given the current state of world export/import policies, -# these settings work for Sun's situation. This note is not -# legal guidance, you must still resolve any export/import issues -# applicable for your situation. Contact your export/import -# counsel for more information. -# - -POLICY_DESTDIR = $(LIBDIR)/security -UNSIGNED_POLICY_BUILDDIR = $(UNSIGNED_DIR)/policy - -build-policy: unlimited limited - -# -# Build the unsigned unlimited policy files. -# -unlimited: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar - -$(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ - policy/unlimited/default_US_export.policy \ - policy/unlimited/UNLIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ - -C policy/unlimited default_US_export.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -$(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ - policy/unlimited/default_local.policy \ - policy/unlimited/UNLIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ - -C policy/unlimited default_local.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -# -# Build the unsigned limited policy files. -# -# NOTE: We currently do not place restrictions on our limited export -# policy. This was not a typo. -# -limited: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar - -$(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar - $(install-file) - -$(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ - policy/limited/default_local.policy \ - policy/limited/exempt_local.policy \ - policy/limited/LIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/limited/LIMITED $@ \ - -C policy/limited default_local.policy \ - -C policy/limited exempt_local.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -UNSIGNED_POLICY_FILES = \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ - - -ifndef OPENJDK -# ===================================================== -# Sign the various jar files. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed -SIGNED_POLICY_BUILDDIR = $(SIGNED_DIR)/policy - -SIGNED_POLICY_FILES = \ - $(patsubst $(UNSIGNED_POLICY_BUILDDIR)/%,$(SIGNED_POLICY_BUILDDIR)/%, \ - $(UNSIGNED_POLICY_FILES)) - -sign: sign-jar sign-policy - -sign-jar: $(SIGNED_DIR)/jce.jar - -sign-policy: $(SIGNED_POLICY_FILES) - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/jce.jar: $(UNSIGNED_DIR)/jce.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/jce.jar: - @if [ ! -r $(UNSIGNED_DIR)/jce.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/jce.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/jce.jar) - -$(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar - $(call sign-file, $<) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, -# unlimited policy file distribution, etc. -# - -CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto - -release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/README.txt - $(RM) -r \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \ - $(JCE_BUILD_DIR)/release/jce.jar \ - $(JCE_BUILD_DIR)/release/US_export_policy.jar \ - $(JCE_BUILD_DIR)/release/local_policy.jar \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip - $(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy - $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release - $(CP) \ - $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ - $(JCE_BUILD_DIR)/release - $(CP) \ - $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ - $(CLOSED_DIR)/doc/README.txt \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy - cd $(JCE_BUILD_DIR)/release ; \ - $(ZIPEXE) -qr UnlimitedJCEPolicy.zip UnlimitedJCEPolicy - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install jce.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/jce.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/jce.jar -endif - $(install-file) - -# -# Install the appropriate policy file, depending on the type of build. -# -ifdef OPENJDK -INSTALL_POLICYDIR = $(UNSIGNED_POLICY_BUILDDIR) -else -INSTALL_POLICYDIR = $(SIGNED_POLICY_BUILDDIR) -endif - -install-limited-jars: \ - $(INSTALL_POLICYDIR)/limited/US_export_policy.jar \ - $(INSTALL_POLICYDIR)/limited/local_policy.jar - $(MKDIR) -p $(POLICY_DESTDIR) - $(RM) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $^ $(POLICY_DESTDIR) - -install-limited: install-limited-jars -ifndef OPENJDK - $(release-warning) -endif - -install-unlimited-jars: \ - $(INSTALL_POLICYDIR)/unlimited/US_export_policy.jar \ - $(INSTALL_POLICYDIR)/unlimited/local_policy.jar - $(MKDIR) -p $(POLICY_DESTDIR) - $(RM) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $^ $(POLICY_DESTDIR) - -install-unlimited: install-unlimited-jars -ifndef OPENJDK - $(release-warning) -endif - -ifndef OPENJDK -install-prebuilt-jars: - @$(ECHO) "\n>>>Installing prebuilt JCE framework..." - $(RM) $(JAR_DESTFILE) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $(PREBUILT_DIR)/jce/jce.jar $(JAR_DESTFILE) - $(CP) \ - $(PREBUILT_DIR)/jce/US_export_policy.jar \ - $(PREBUILT_DIR)/jce/local_policy.jar \ - $(POLICY_DESTDIR) - -install-prebuilt: install-prebuilt-jars -endif - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar $(DELETE_DIRS) $(TEMPDIR) \ - $(JCE_BUILD_DIR) - -.PHONY: build-jar jar build-policy unlimited limited install-jar \ - install-limited install-unlimited -ifndef OPENJDK -.PHONY: sign sign-jar sign-policy release install-prebuilt -endif diff --git a/jdk/makefiles/javax/crypto/policy/limited/LIMITED b/jdk/makefiles/javax/crypto/policy/limited/LIMITED deleted file mode 100644 index b58f7acd930..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/LIMITED +++ /dev/null @@ -1 +0,0 @@ -Crypto-Strength: limited diff --git a/jdk/makefiles/javax/crypto/policy/limited/default_local.policy b/jdk/makefiles/javax/crypto/policy/limited/default_local.policy deleted file mode 100644 index 2a6d5134047..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/default_local.policy +++ /dev/null @@ -1,14 +0,0 @@ -// Some countries have import limits on crypto strength. This policy file -// is worldwide importable. - -grant { - permission javax.crypto.CryptoPermission "DES", 64; - permission javax.crypto.CryptoPermission "DESede", *; - permission javax.crypto.CryptoPermission "RC2", 128, - "javax.crypto.spec.RC2ParameterSpec", 128; - permission javax.crypto.CryptoPermission "RC4", 128; - permission javax.crypto.CryptoPermission "RC5", 128, - "javax.crypto.spec.RC5ParameterSpec", *, 12, *; - permission javax.crypto.CryptoPermission "RSA", *; - permission javax.crypto.CryptoPermission *, 128; -}; diff --git a/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy b/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy deleted file mode 100644 index f3255a2d970..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy +++ /dev/null @@ -1,13 +0,0 @@ -// Some countries have import limits on crypto strength. So this file -// will be useful. - -grant { - // There is no restriction to any algorithms if KeyRecovery is enforced. - permission javax.crypto.CryptoPermission *, "KeyRecovery"; - - // There is no restriction to any algorithms if KeyEscrow is enforced. - permission javax.crypto.CryptoPermission *, "KeyEscrow"; - - // There is no restriction to any algorithms if KeyWeakening is enforced. - permission javax.crypto.CryptoPermission *, "KeyWeakening"; -}; diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED b/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED deleted file mode 100644 index 7fc7743c416..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED +++ /dev/null @@ -1 +0,0 @@ -Crypto-Strength: unlimited diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy b/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy deleted file mode 100644 index 67d0acc47a3..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy +++ /dev/null @@ -1,5 +0,0 @@ -// Manufacturing policy file. -grant { - // There is no restriction to any algorithms. - permission javax.crypto.CryptoAllPermission; -}; diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy b/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy deleted file mode 100644 index 8dc9702e9da..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy +++ /dev/null @@ -1,5 +0,0 @@ -// Country-specific policy file for countries with no limits on crypto strength. -grant { - // There is no restriction to any algorithms. - permission javax.crypto.CryptoAllPermission; -}; diff --git a/jdk/makefiles/javax/management/Makefile b/jdk/makefiles/javax/management/Makefile deleted file mode 100644 index 7887a2ac671..00000000000 --- a/jdk/makefiles/javax/management/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# -# Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all of JMX -# - -BUILDDIR = ../.. -PACKAGE = javax.management -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files to compile -# -AUTO_JAVA_PRUNE = snmp -AUTO_FILES_JAVA_DIRS = javax/management com/sun/jmx com/sun/management/jmx - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - -# -# Clean up internal-use-only package. -# -clean clobber:: - $(RM) -r $(CLASSDESTDIR)/com/sun/jmx \ - $(CLASSDESTDIR)/com/sun/management/jmx \ - $(CLASSDESTDIR)/org/omg/stub/javax/management/remote/rmi \ - diff --git a/jdk/makefiles/javax/sound/FILES_c.gmk b/jdk/makefiles/javax/sound/FILES_c.gmk deleted file mode 100644 index 364639367cf..00000000000 --- a/jdk/makefiles/javax/sound/FILES_c.gmk +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - Utilities.c \ - Platform.c - -FILES_solaris = \ - PLATFORM_API_SolarisOS_Utils.c \ - PLATFORM_API_SolarisOS_Ports.c \ - PLATFORM_API_SolarisOS_PCM.c - -FILES_linux = - -FILES_bsd = - -FILES_macosx = \ - PLATFORM_API_MacOSX_MidiIn.c \ - PLATFORM_API_MacOSX_MidiOut.c \ - PLATFORM_API_MacOSX_MidiUtils.c - -FILES_cpp_macosx = \ - PLATFORM_API_MacOSX_Utils.cpp \ - PLATFORM_API_MacOSX_PCM.cpp \ - PLATFORM_API_MacOSX_Ports.cpp - -FILES_windows = \ - PLATFORM_API_WinOS_MidiIn.c \ - PLATFORM_API_WinOS_MidiOut.c \ - PLATFORM_API_WinOS_Util.c \ - PLATFORM_API_WinOS_Ports.c - -FILES_export = \ - com/sun/media/sound/Platform.java - diff --git a/jdk/makefiles/javax/sound/Makefile b/jdk/makefiles/javax/sound/Makefile deleted file mode 100644 index cb455a7eb00..00000000000 --- a/jdk/makefiles/javax/sound/Makefile +++ /dev/null @@ -1,224 +0,0 @@ -# -# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = javax.sound -LIBRARY = jsound -PRODUCT = sun - -ifeq ($(PLATFORM),macosx) -CPLUSPLUSLIBRARY = true -endif - -include $(BUILDDIR)/common/Defs.gmk - -# include defines for sound -include SoundDefs.gmk - -# support for different mixer provider files on different platforms -#MXSP = javax.sound.sampled.spi.MixerProvider -# Mixer Service Provider Additional path -#MXSPP_ADD = - -# -# Add use of mapfile -# -FILES_m = mapfile-vers -include $(BUILDDIR)/common/Mapfile-vers.gmk - -# -# Files -# -include FILES_c.gmk - -# add java files -AUTO_FILES_JAVA_DIRS = javax/sound com/sun/media/sound - -# -# Files that just need cp. -# -SERVICEDIR = $(CLASSBINDIR)/META-INF/services - -FILES_copy = \ - $(SERVICEDIR)/javax.sound.midi.spi.MidiDeviceProvider \ - $(SERVICEDIR)/javax.sound.midi.spi.MidiFileWriter \ - $(SERVICEDIR)/javax.sound.midi.spi.MidiFileReader \ - $(SERVICEDIR)/javax.sound.midi.spi.SoundbankReader \ - $(SERVICEDIR)/javax.sound.sampled.spi.AudioFileWriter \ - $(SERVICEDIR)/javax.sound.sampled.spi.AudioFileReader \ - $(SERVICEDIR)/javax.sound.sampled.spi.FormatConversionProvider \ - $(SERVICEDIR)/javax.sound.sampled.spi.MixerProvider \ - $(LIBDIR)/sound.properties - -FILES_mkdirs = \ - $(CLASSBINDIR)/META-INF \ - $(CLASSBINDIR)/META-INF/services - -FILES_copydirs = \ - $(CLASSBINDIR) \ - $(LIBDIR) \ - $(FILES_mkdirs) - -FILES_c += $(FILES_$(PLATFORM)) -FILES_cpp += $(FILES_cpp_$(PLATFORM)) - - -# -# system dependent flags -# -ifeq ($(PLATFORM), windows) - CPPFLAGS += -DUSE_PLATFORM_MIDI_OUT=TRUE \ - -DUSE_PLATFORM_MIDI_IN=TRUE \ - -DUSE_PORTS=TRUE - LDLIBS += winmm.lib - - # Windows always provides MIDI and ports - INCLUDE_MIDI = TRUE - INCLUDE_PORTS = TRUE - - # DirectSound handles directaudio (both i586 and amd64) - SUBDIRS += jsoundds - EXTRA_SOUND_JNI_LIBS += jsoundds - #MXSPP_ADD = $(PLATFORM)-$(ARCH)/ -endif # PLATFORM win32 - -ifeq ($(PLATFORM), linux) - # ALSA handles directaudio, ports, and MIDI - SUBDIRS += jsoundalsa - EXTRA_SOUND_JNI_LIBS += jsoundalsa - #MXSPP_ADD = $(PLATFORM)-$(ARCH)/ -endif # PLATFORM linux - -ifeq ($(PLATFORM), macosx) - CPPFLAGS += -DUSE_PORTS=TRUE \ - -DUSE_DAUDIO=TRUE \ - -DUSE_PLATFORM_MIDI_OUT=TRUE \ - -DUSE_PLATFORM_MIDI_IN=TRUE - - INCLUDE_PORTS = TRUE - INCLUDE_DAUDIO = TRUE - INCLUDE_MIDI = TRUE - - LDFLAGS += -framework CoreAudio -framework CoreFoundation \ - -framework CoreServices -framework AudioUnit -lstdc++ \ - -framework CoreMIDI -framework AudioToolbox - CXXFLAGS += -I`xcode-select -print-path`/Extras/CoreAudio/PublicUtility -endif - -ifeq ($(PLATFORM), solaris) - # build with ports and direct audio - CPPFLAGS += -DUSE_PORTS=TRUE \ - -DUSE_DAUDIO=TRUE - - INCLUDE_PORTS = TRUE - INCLUDE_DAUDIO = TRUE - # build with empty MIDI i/o - INCLUDE_MIDI = TRUE -endif # PLATFORM solaris - -# for dynamic inclusion of extra sound libs: these -# JNI libs will be loaded from Platform.java -CPPFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"' - -# integrate MIDI i/o in jsound lib -ifeq ($(INCLUDE_MIDI),TRUE) - FILES_c += $(MIDIFILES_c) - FILES_export += $(MIDIFILES_export) -endif - -# integrate port files in jsound lib -ifeq ($(INCLUDE_PORTS),TRUE) - FILES_c += $(PORTFILES_c) - FILES_export += $(PORTFILES_export) -endif - -# integrate port files in jsound lib -ifeq ($(INCLUDE_DAUDIO),TRUE) - FILES_c += $(DAUDIOFILES_c) - FILES_export += $(DAUDIOFILES_export) -endif - -# -# Extra cc/linker flags. -# -CPPFLAGS += \ - -I$(SHARE_SRC)/native/com/sun/media/sound - -ifeq ($(PLATFORM), macosx) -vpath %.c $(call NativeSrcDirList,,native/com/sun/media/sound) -vpath %.cpp $(call NativeSrcDirList,,native/com/sun/media/sound) - -else -# -# Add to the ambient VPATH. -# -vpath %.c $(SHARE_SRC)/native/com/sun/media/sound -vpath %.c $(PLATFORM_SRC)/native/com/sun/media/sound -vpath %.cpp $(PLATFORM_SRC)/native/com/sun/media/sound - -endif - -# -# Include rules -# -include $(BUILDDIR)/common/Library.gmk -include $(BUILDDIR)/common/Subdirs.gmk - -# -# Rules that copy files. -# - -build: copy-files - $(SUBDIRS-loop) - -copy-files: $(FILES_copy) - -#$(SERVICEDIR)/$(MXSP): $(SHARE_SRC)/classes/com/sun/media/sound/services/$(MXSPP_ADD)$(MXSP) -# $(install-file) - -$(SERVICEDIR)/%: $(SHARE_SRC)/classes/com/sun/media/sound/services/% - $(install-file) - -$(LIBDIR)/audio/%: $(SHARE_SRC)/lib/audio/% - $(install-file) - -$(LIBDIR)/%: $(SHARE_SRC)/lib/% - $(install-file) - -# -# Since we build more than the javax.sound (as stated in the -# PACKAGE variable), we need to nuke the extra packages explicitly. -# -clean clobber:: - $(SUBDIRS-loop) - -clean clobber:: - $(RM) -r $(CLASSBINDIR)/com/sun/media/sound $(LIBDIR)/audio - $(RM) $(FILES_copy) - -# -# Declare extra phony targets. -# -.PHONY: copy-files diff --git a/jdk/makefiles/javax/sound/SoundDefs.gmk b/jdk/makefiles/javax/sound/SoundDefs.gmk deleted file mode 100644 index 06c0af8722e..00000000000 --- a/jdk/makefiles/javax/sound/SoundDefs.gmk +++ /dev/null @@ -1,124 +0,0 @@ -# -# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# defines common for all Java Sound native code - -SUBDIRS= -EXTRA_SOUND_JNI_LIBS= - -# -# Extra cc/linker flags. -# -# system dependent flags -ifeq ($(PLATFORM), windows) - CPPFLAGS += -DX_PLATFORM=X_WINDOWS -endif # PLATFORM windows - -ifeq ($(PLATFORM), linux) - CPPFLAGS += -DX_PLATFORM=X_LINUX -endif # PLATFORM linux - -ifeq ($(PLATFORM), macosx) - CPPFLAGS += -DX_PLATFORM=X_MACOSX -endif # PLATFORM macosx - -ifeq ($(PLATFORM), solaris) - CPPFLAGS += -DX_PLATFORM=X_SOLARIS - - # Solaris needs specific binding to libc - LDFLAGS += -lc - - # - # Turn off C++ exception handling. - # - ifneq ($(CC_VERSION),gcc) - CXXFLAGS += -noex - endif # CC_VERSION - -endif # PLATFORM solaris - -ifeq ($(ZERO_BUILD), true) - CPPFLAGS += -DX_ARCH=X_ZERO -else - ifeq ($(ARCH), i586) - CPPFLAGS += -DX_ARCH=X_I586 - endif # ARCH i586 - - ifeq ($(ARCH), sparc) - CPPFLAGS += -DX_ARCH=X_SPARC - endif # ARCH sparc - - ifeq ($(ARCH), sparcv9) - CPPFLAGS += -DX_ARCH=X_SPARCV9 - endif # ARCH sparcv9 - - ifeq ($(ARCH), amd64) - CPPFLAGS += -DX_ARCH=X_AMD64 - endif # ARCH amd64 - - ifeq ($(ARCH), arm) - CPPFLAGS += -DX_ARCH=X_ARM - endif # ARCH arm - - ifeq ($(ARCH), ppc) - CPPFLAGS += -DX_ARCH=X_PPC - endif # ARCH ppc - -endif - - -# files needed for MIDI i/o -MIDIFILES_c = \ - MidiInDevice.c \ - MidiInDeviceProvider.c \ - MidiOutDevice.c \ - MidiOutDeviceProvider.c \ - PlatformMidi.c - -MIDIFILES_export = \ - com/sun/media/sound/MidiInDevice.java \ - com/sun/media/sound/MidiInDeviceProvider.java \ - com/sun/media/sound/MidiOutDevice.java \ - com/sun/media/sound/MidiOutDeviceProvider.java - -# files needed for ports -PORTFILES_c = \ - PortMixerProvider.c \ - PortMixer.c - -PORTFILES_export = \ - com/sun/media/sound/PortMixer.java \ - com/sun/media/sound/PortMixerProvider.java - -# files needed for direct audio -DAUDIOFILES_c = \ - DirectAudioDeviceProvider.c \ - DirectAudioDevice.c - -DAUDIOFILES_export = \ - com/sun/media/sound/DirectAudioDeviceProvider.java \ - com/sun/media/sound/DirectAudioDevice.java - - diff --git a/jdk/makefiles/javax/sound/jsoundalsa/Makefile b/jdk/makefiles/javax/sound/jsoundalsa/Makefile deleted file mode 100644 index 5fa0124cc68..00000000000 --- a/jdk/makefiles/javax/sound/jsoundalsa/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -# -# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = javax.sound -LIBRARY = jsoundalsa -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# this Makefile compiles the native files for alsa support in java sound - -# include defines for sound -include ../SoundDefs.gmk - -# -# Use mapfile -# -FILES_m = mapfile-vers -include $(BUILDDIR)/common/Mapfile-vers.gmk - -# -# Files -# - -FILES_c = \ - Utilities.c \ - $(DAUDIOFILES_c) \ - $(MIDIFILES_c) \ - $(PORTFILES_c) - -# platform dependent files -FILES_c += \ - PLATFORM_API_LinuxOS_ALSA_CommonUtils.c \ - PLATFORM_API_LinuxOS_ALSA_PCM.c \ - PLATFORM_API_LinuxOS_ALSA_PCMUtils.c \ - PLATFORM_API_LinuxOS_ALSA_MidiIn.c \ - PLATFORM_API_LinuxOS_ALSA_MidiOut.c \ - PLATFORM_API_LinuxOS_ALSA_MidiUtils.c \ - PLATFORM_API_LinuxOS_ALSA_Ports.c - -FILES_export = \ - $(DAUDIOFILES_export) \ - $(MIDIFILES_export) \ - $(PORTFILES_export) - -OTHER_LDLIBS += -lasound - -CPPFLAGS += \ - -DUSE_DAUDIO=TRUE \ - -DUSE_PORTS=TRUE \ - -DUSE_PLATFORM_MIDI_OUT=TRUE \ - -DUSE_PLATFORM_MIDI_IN=TRUE \ - -I$(SHARE_SRC)/native/com/sun/media/sound - -# -# Add to the ambient VPATH. -# -vpath %.c $(SHARE_SRC)/native/com/sun/media/sound -vpath %.c $(PLATFORM_SRC)/native/com/sun/media/sound -vpath %.cpp $(PLATFORM_SRC)/native/com/sun/media/sound - - -# -# Include rules -# -include $(BUILDDIR)/common/Library.gmk - - - diff --git a/jdk/makefiles/javax/sound/jsoundds/Makefile b/jdk/makefiles/javax/sound/jsoundds/Makefile deleted file mode 100644 index f476b39811a..00000000000 --- a/jdk/makefiles/javax/sound/jsoundds/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# -# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = javax.sound -LIBRARY = jsoundds -PRODUCT = sun -CPLUSPLUSLIBRARY = true -include $(BUILDDIR)/common/Defs.gmk - -# this Makefile compiles the native files for DirectSound support in java sound - -# include defines for sound -include ../SoundDefs.gmk - -# -# Files -# - -FILES_c = \ - Utilities.c \ - $(DAUDIOFILES_c) - -FILES_cpp = \ - PLATFORM_API_WinOS_DirectSound.cpp - -FILES_export = \ - $(DAUDIOFILES_export) - -# -# Extra cc/linker flags. -# -LDLIBS += dsound.lib winmm.lib user32.lib ole32.lib -CPPFLAGS += \ - -DUSE_DAUDIO=TRUE \ - -I$(SHARE_SRC)/native/com/sun/media/sound \ - -I$(DXSDK_INCLUDE_PATH) - -# -# Add to the ambient VPATH. -# -vpath %.c $(SHARE_SRC)/native/com/sun/media/sound -vpath %.c $(PLATFORM_SRC)/native/com/sun/media/sound -vpath %.cpp $(PLATFORM_SRC)/native/com/sun/media/sound - -# -# Include rules -# -include $(BUILDDIR)/common/Library.gmk diff --git a/jdk/makefiles/javax/sql/Makefile b/jdk/makefiles/javax/sql/Makefile deleted file mode 100644 index cd138cb30f2..00000000000 --- a/jdk/makefiles/javax/sql/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building JDBC API and JDBC RowSet -# - -BUILDDIR = ../.. -PACKAGE = javax.sql -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files to compile. -# -AUTO_FILES_JAVA_DIRS = javax/sql - -# -# Resources -# -OTHER_PROPERTIES = $(PKGDIR)/rowset/rowset.properties - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - diff --git a/jdk/makefiles/javax/swing/FILES.gmk b/jdk/makefiles/javax/swing/FILES.gmk deleted file mode 100644 index c1ba62f797a..00000000000 --- a/jdk/makefiles/javax/swing/FILES.gmk +++ /dev/null @@ -1,235 +0,0 @@ -# -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -MISC_FILES = \ - $(CLASSBINDIR)/javax/swing/text/html/default.css \ - $(CLASSBINDIR)/javax/swing/text/rtf/charsets/NeXT.txt \ - $(CLASSBINDIR)/javax/swing/text/rtf/charsets/ansi.txt \ - $(CLASSBINDIR)/javax/swing/text/rtf/charsets/cpg437.txt \ - $(CLASSBINDIR)/javax/swing/text/rtf/charsets/cpg850.txt \ - $(CLASSBINDIR)/javax/swing/text/rtf/charsets/mac.txt - -BEANINFO_DOC = \ - $(BUILDDIR)/tools/swing-beans/SwingBeanInfo.template - -BEANIMAGES = $(BUILDDIR)/tools/swing-beans/beaninfo/images -BEANINFO_IMG = \ - $(BEANIMAGES)/AbstractButtonColor16.gif \ - $(BEANIMAGES)/BorderColor16.gif \ - $(BEANIMAGES)/JAppletColor16.gif \ - $(BEANIMAGES)/JAppletColor32.gif \ - $(BEANIMAGES)/JAppletMono16.gif \ - $(BEANIMAGES)/JAppletMono32.gif \ - $(BEANIMAGES)/JButtonColor32.gif \ - $(BEANIMAGES)/JButtonColor16.gif \ - $(BEANIMAGES)/JButtonMono32.gif \ - $(BEANIMAGES)/JButtonMono16.gif \ - $(BEANIMAGES)/JCheckBoxColor32.gif \ - $(BEANIMAGES)/JCheckBoxColor16.gif \ - $(BEANIMAGES)/JCheckBoxMono32.gif \ - $(BEANIMAGES)/JCheckBoxMono16.gif \ - $(BEANIMAGES)/JCheckBoxMenuItemColor32.gif \ - $(BEANIMAGES)/JCheckBoxMenuItemColor16.gif \ - $(BEANIMAGES)/JCheckBoxMenuItemMono32.gif \ - $(BEANIMAGES)/JCheckBoxMenuItemMono16.gif \ - $(BEANIMAGES)/JComboBoxColor32.gif \ - $(BEANIMAGES)/JComboBoxColor16.gif \ - $(BEANIMAGES)/JComboBoxMono32.gif \ - $(BEANIMAGES)/JComboBoxMono16.gif \ - $(BEANIMAGES)/JComponentColor16.gif \ - $(BEANIMAGES)/JDesktopPaneColor32.gif \ - $(BEANIMAGES)/JDesktopPaneColor16.gif \ - $(BEANIMAGES)/JDesktopPaneMono32.gif \ - $(BEANIMAGES)/JDesktopPaneMono16.gif \ - $(BEANIMAGES)/JDialogColor32.gif \ - $(BEANIMAGES)/JDialogColor16.gif \ - $(BEANIMAGES)/JDialogMono16.gif \ - $(BEANIMAGES)/JDialogMono32.gif \ - $(BEANIMAGES)/JEditorPaneColor32.gif \ - $(BEANIMAGES)/JEditorPaneColor16.gif \ - $(BEANIMAGES)/JEditorPaneMono32.gif \ - $(BEANIMAGES)/JEditorPaneMono16.gif \ - $(BEANIMAGES)/JFrameColor32.gif \ - $(BEANIMAGES)/JFrameColor16.gif \ - $(BEANIMAGES)/JFrameMono32.gif \ - $(BEANIMAGES)/JFrameMono16.gif \ - $(BEANIMAGES)/JInternalFrameColor32.gif \ - $(BEANIMAGES)/JInternalFrameColor16.gif \ - $(BEANIMAGES)/JInternalFrameMono32.gif \ - $(BEANIMAGES)/JInternalFrameMono16.gif \ - $(BEANIMAGES)/JLabelColor32.gif \ - $(BEANIMAGES)/JLabelColor16.gif \ - $(BEANIMAGES)/JLabelMono32.gif \ - $(BEANIMAGES)/JLabelMono16.gif \ - $(BEANIMAGES)/JLayeredPaneColor32.gif \ - $(BEANIMAGES)/JLayeredPaneColor16.gif \ - $(BEANIMAGES)/JLayeredPaneMono32.gif \ - $(BEANIMAGES)/JLayeredPaneMono16.gif \ - $(BEANIMAGES)/JListColor32.gif \ - $(BEANIMAGES)/JListColor16.gif \ - $(BEANIMAGES)/JListMono32.gif \ - $(BEANIMAGES)/JListMono16.gif \ - $(BEANIMAGES)/JMenuBarColor32.gif \ - $(BEANIMAGES)/JMenuBarColor16.gif \ - $(BEANIMAGES)/JMenuBarMono32.gif \ - $(BEANIMAGES)/JMenuBarMono16.gif \ - $(BEANIMAGES)/JMenuColor32.gif \ - $(BEANIMAGES)/JMenuColor16.gif \ - $(BEANIMAGES)/JMenuMono32.gif \ - $(BEANIMAGES)/JMenuMono16.gif \ - $(BEANIMAGES)/JMenuItemColor32.gif \ - $(BEANIMAGES)/JMenuItemColor16.gif \ - $(BEANIMAGES)/JMenuItemMono32.gif \ - $(BEANIMAGES)/JMenuItemMono16.gif \ - $(BEANIMAGES)/JPanelColor32.gif \ - $(BEANIMAGES)/JPanelColor16.gif \ - $(BEANIMAGES)/JPanelMono32.gif \ - $(BEANIMAGES)/JPanelMono16.gif \ - $(BEANIMAGES)/JPasswordFieldColor32.gif \ - $(BEANIMAGES)/JPasswordFieldColor16.gif \ - $(BEANIMAGES)/JPasswordFieldMono32.gif \ - $(BEANIMAGES)/JPasswordFieldMono16.gif \ - $(BEANIMAGES)/JPopupMenuColor32.gif \ - $(BEANIMAGES)/JPopupMenuColor16.gif \ - $(BEANIMAGES)/JPopupMenuMono32.gif \ - $(BEANIMAGES)/JPopupMenuMono16.gif \ - $(BEANIMAGES)/JProgressBarColor32.gif \ - $(BEANIMAGES)/JProgressBarColor16.gif \ - $(BEANIMAGES)/JProgressBarMono32.gif \ - $(BEANIMAGES)/JProgressBarMono16.gif \ - $(BEANIMAGES)/JRadioButtonColor32.gif \ - $(BEANIMAGES)/JRadioButtonColor16.gif \ - $(BEANIMAGES)/JRadioButtonMono32.gif \ - $(BEANIMAGES)/JRadioButtonMono16.gif \ - $(BEANIMAGES)/JRadioButtonMenuItemColor32.gif \ - $(BEANIMAGES)/JRadioButtonMenuItemColor16.gif \ - $(BEANIMAGES)/JRadioButtonMenuItemMono32.gif \ - $(BEANIMAGES)/JRadioButtonMenuItemMono16.gif \ - $(BEANIMAGES)/JRootPaneColor32.gif \ - $(BEANIMAGES)/JRootPaneColor16.gif \ - $(BEANIMAGES)/JRootPaneMono32.gif \ - $(BEANIMAGES)/JRootPaneMono16.gif \ - $(BEANIMAGES)/JScrollPaneColor32.gif \ - $(BEANIMAGES)/JScrollPaneColor16.gif \ - $(BEANIMAGES)/JScrollPaneMono32.gif \ - $(BEANIMAGES)/JScrollPaneMono16.gif \ - $(BEANIMAGES)/JScrollBarColor32.gif \ - $(BEANIMAGES)/JScrollBarColor16.gif \ - $(BEANIMAGES)/JScrollBarMono32.gif \ - $(BEANIMAGES)/JScrollBarMono16.gif \ - $(BEANIMAGES)/JSeparatorColor32.gif \ - $(BEANIMAGES)/JSeparatorColor16.gif \ - $(BEANIMAGES)/JSeparatorMono32.gif \ - $(BEANIMAGES)/JSeparatorMono16.gif \ - $(BEANIMAGES)/JSliderColor32.gif \ - $(BEANIMAGES)/JSliderColor16.gif \ - $(BEANIMAGES)/JSliderMono32.gif \ - $(BEANIMAGES)/JSliderMono16.gif \ - $(BEANIMAGES)/JTextPaneColor32.gif \ - $(BEANIMAGES)/JTextPaneColor16.gif \ - $(BEANIMAGES)/JTextPaneMono32.gif \ - $(BEANIMAGES)/JTextPaneMono16.gif \ - $(BEANIMAGES)/JToggleButtonColor32.gif \ - $(BEANIMAGES)/JToggleButtonColor16.gif \ - $(BEANIMAGES)/JToggleButtonMono32.gif \ - $(BEANIMAGES)/JToggleButtonMono16.gif \ - $(BEANIMAGES)/JToolBarColor32.gif \ - $(BEANIMAGES)/JToolBarColor16.gif \ - $(BEANIMAGES)/JToolBarMono32.gif \ - $(BEANIMAGES)/JToolBarMono16.gif \ - $(BEANIMAGES)/JTabbedPaneColor32.gif \ - $(BEANIMAGES)/JTabbedPaneColor16.gif \ - $(BEANIMAGES)/JTabbedPaneMono32.gif \ - $(BEANIMAGES)/JTabbedPaneMono16.gif \ - $(BEANIMAGES)/JTreeColor32.gif \ - $(BEANIMAGES)/JTreeColor16.gif \ - $(BEANIMAGES)/JTreeMono32.gif \ - $(BEANIMAGES)/JTreeMono16.gif \ - $(BEANIMAGES)/JTextAreaColor32.gif \ - $(BEANIMAGES)/JTextAreaColor16.gif \ - $(BEANIMAGES)/JTextAreaMono32.gif \ - $(BEANIMAGES)/JTextAreaMono16.gif \ - $(BEANIMAGES)/JTextFieldColor32.gif \ - $(BEANIMAGES)/JTextFieldColor16.gif \ - $(BEANIMAGES)/JTextFieldMono32.gif \ - $(BEANIMAGES)/JTextFieldMono16.gif \ - $(BEANIMAGES)/JViewportColor32.gif \ - $(BEANIMAGES)/JViewportColor16.gif \ - $(BEANIMAGES)/JViewportMono32.gif \ - $(BEANIMAGES)/JViewportMono16.gif \ - $(BEANIMAGES)/JWindowColor32.gif \ - $(BEANIMAGES)/JWindowColor16.gif \ - $(BEANIMAGES)/JWindowMono32.gif \ - $(BEANIMAGES)/JWindowMono16.gif \ - $(BEANIMAGES)/JTableColor32.gif \ - $(BEANIMAGES)/JTableColor16.gif \ - $(BEANIMAGES)/JTableMono32.gif \ - $(BEANIMAGES)/JTableMono16.gif - -BEANS = \ - AbstractButton \ - JComponent - -# These classes get listed in the swingall.jar manifest file and are -# used during BeanInfo source generation. -BEANS_MANIFEST = \ - JApplet \ - JButton \ - JCheckBox \ - JCheckBoxMenuItem \ - JComboBox \ - JDialog \ - JEditorPane \ - JFrame \ - JInternalFrame \ - JLabel \ - JList \ - JMenu \ - JMenuBar \ - JMenuItem \ - JOptionPane \ - JPanel \ - JPasswordField \ - JPopupMenu \ - JProgressBar \ - JRadioButton \ - JRadioButtonMenuItem \ - JRootPane \ - JScrollBar \ - JScrollPane \ - JSeparator \ - JSlider \ - JSpinner \ - JSplitPane \ - JTabbedPane \ - JTable \ - JTextArea \ - JTextField \ - JTextPane \ - JToggleButton \ - JToolBar \ - JTree \ - JViewport \ - JWindow diff --git a/jdk/makefiles/javax/swing/Makefile b/jdk/makefiles/javax/swing/Makefile deleted file mode 100644 index 4c67858b885..00000000000 --- a/jdk/makefiles/javax/swing/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = javax.swing -PRODUCT = com -SWING_SRC = $(SHARE_SRC)/classes/javax/swing -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -include FILES.gmk -AUTO_FILES_JAVA_DIRS = javax/swing sun/swing com/sun/java/swing -AUTO_JAVA_PRUNE = plaf - -SUBDIRS = html32dtd plaf - -include $(BUILDDIR)/common/Classes.gmk -include $(BUILDDIR)/common/Subdirs.gmk - -build: other_files - $(SUBDIRS-loop) - -clean clobber:: - $(SUBDIRS-loop) - -other_files: $(MISC_FILES) - -$(CLASSBINDIR)/%.wav: $(SHARE_SRC)/classes/%.wav - $(install-file) - -$(CLASSBINDIR)/%.gif: $(SHARE_SRC)/classes/%.gif - $(install-file) - -$(CLASSBINDIR)/%.css: $(SHARE_SRC)/classes/%.css - $(install-file) - -$(CLASSBINDIR)/%.txt: $(SHARE_SRC)/classes/%.txt - $(install-file) - diff --git a/jdk/makefiles/javax/swing/beaninfo/FILES.gmk b/jdk/makefiles/javax/swing/beaninfo/FILES.gmk deleted file mode 100644 index 126d02bd0b9..00000000000 --- a/jdk/makefiles/javax/swing/beaninfo/FILES.gmk +++ /dev/null @@ -1,126 +0,0 @@ -# -# Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# There are the Swing classes for which a BeanInfo class is generated. -# - -# this is used for solaris - -BEANS = AbstractButton \ - Box \ - JComponent \ - JApplet \ - JButton \ - JCheckBox \ - JCheckBoxMenuItem \ - JComboBox \ - JColorChooser \ - JDesktopPane \ - JDialog \ - JEditorPane \ - JFileChooser \ - JFrame \ - JFormattedTextField \ - JInternalFrame \ - JLabel \ - JLayeredPane \ - JList \ - JMenu \ - JMenuBar \ - JMenuItem \ - JOptionPane \ - JPanel \ - JPasswordField \ - JPopupMenu \ - JProgressBar \ - JRadioButton \ - JRadioButtonMenuItem\ - JScrollBar \ - JScrollPane \ - JSeparator \ - JSlider \ - JSplitPane \ - JSpinner \ - JTabbedPane \ - JTable \ - JTextArea \ - JTextField \ - JTextPane \ - JToggleButton \ - JToolBar \ - JTree \ - JWindow - -# in a separate package -BEANS_TEXT = JTextComponent \ - -# and this is used for windows - -BEANS_SOURCES = ..\..\..\..\..\src\share\classes\javax\swing\AbstractButton.java \ - ..\..\..\..\..\src\share\classes\javax\swing\Box.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JComponent.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JColorChooser.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JApplet.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JButton.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JCheckBox.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JCheckBoxMenuItem.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JComboBox.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JDesktopPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JDialog.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JEditorPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JFileChooser.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JFormattedTextField.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JFrame.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JInternalFrame.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JLabel.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JLayeredPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JList.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JMenu.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JMenuBar.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JMenuItem.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JOptionPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JPanel.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JPasswordField.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JPopupMenu.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JProgressBar.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JRadioButton.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JRadioButtonMenuItem.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JScrollBar.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JScrollPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JSeparator.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JSlider.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JSpinner.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JSplitPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JTabbedPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JTable.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JTextArea.java \ - ..\..\..\..\..\src\share\classes\javax\swing\text\JTextComponent.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JTextField.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JTextPane.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JToggleButton.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JToolBar.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JTree.java \ - ..\..\..\..\..\src\share\classes\javax\swing\JWindow.java diff --git a/jdk/makefiles/javax/swing/beaninfo/Makefile b/jdk/makefiles/javax/swing/beaninfo/Makefile deleted file mode 100644 index 4ac5408528c..00000000000 --- a/jdk/makefiles/javax/swing/beaninfo/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Create 1.1 version of BeanInfo files needed by Swing. -# -# Note that this makefile gets visited only during release engineering -# time. -# - -BUILDDIR = ../../.. -include $(BUILDDIR)/common/Defs.gmk -include SwingBeans.gmk - -all build: swing-1.2-beans - diff --git a/jdk/makefiles/javax/swing/beaninfo/SwingBeans.gmk b/jdk/makefiles/javax/swing/beaninfo/SwingBeans.gmk deleted file mode 100644 index f053f73f953..00000000000 --- a/jdk/makefiles/javax/swing/beaninfo/SwingBeans.gmk +++ /dev/null @@ -1,205 +0,0 @@ -# -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to build the BeanInfo generation tool (ie, a doclet), and -# then the beaninfo itself. Swing versions prior to 1.2 are no longer -# built. -# -# This makefile could be a lot simpler if we made it more regular. -# - -# identify this as a swingbeans product - used only to identify a -# unique name for OBJDIR -PRODUCT = swing-beans - -# -# Main targets provided by this makefile. -# -swing-1.2-beans: - $(MAKE) DEBUG_FLAG=false make-swing-beans -swing-1.2-beans-debug: - $(MAKE) DEBUG_FLAG=true make-swing-beans - - -# get the absolute path to the jar command. -PREFIX = 1.2 -JAVADOCFLAGS += $(NO_PROPRIETARY_API_WARNINGS) $(LANGUAGE_VERSION) -SWINGPKG = javax/swing -LOCAL_JAVAC_FLAGS = $(OTHER_JAVACFLAGS) -# since JAVADOC_CMD runs on ALT_BOOTDIR, the doclet and all its classes must be compiled to match -DOCLET_JAVAC_FLAGS = -source 6 -target 6 - -include FILES.gmk -include $(BUILDDIR)/common/Release.gmk - -DOCLETSRC = $(BUILDDIR)/../make/tools/swing-beans -DOCLETDST = $(TEMPDIR) - -FILES_java = GenSwingBeanInfo.java GenDocletBeanInfo.java DocBeanInfo.java -FILES_class = $(FILES_java:%.java=$(DOCLETDST)/%.class) -FAKESRC = $(JDK_TOPDIR)/src/share/classes -BEANSRCDIR = $(TEMPDIR)/$(PREFIX)src -BEANCLASSDIR = $(TEMPDIR)/$(PREFIX)classes -FILES_beans = $(BEANS:%=$(BEANSRCDIR)/%BeanInfo.java) \ - $(BEANS_TEXT:%=$(BEANSRCDIR)/text/%BeanInfo.java) \ - $(BEANSRCDIR)/SwingBeanInfoBase.java \ - $(BEANSRCDIR)/BeanInfoUtils.java - -FILES_bclass = $(FILES_beans:$(BEANSRCDIR)/%.java=$(BEANCLASSDIR)/$(SWINGPKG)/%.class) -DOCLETFLAGS = -doclet GenDocletBeanInfo -LOCAL_CLASSPATH = "$(CLASSBINDIR)$(CLASSPATH_SEPARATOR)$(BEANCLASSDIR)$(CLASSPATH_SEPARATOR)." - -# -# Main target. -# -make-swing-beans: mkdoclet mkbeaninfo mkclasses mkpackaging - -# -# Make the doclet. -# -mkdoclet: $(DOCLETDST) $(FILES_class) .SwingBeanInfo - -$(OBJDIR) $(BEANCLASSDIR) $(BEANSRCDIR) $(DOCLETDST):: - @$(ECHO) "Making directory..." $@ - @$(MKDIR) -p $@ - -$(DOCLETDST)/%.class: $(DOCLETSRC)/%.java - $(JAVAC_CMD) $(LOCAL_JAVAC_FLAGS) $(DOCLET_JAVAC_FLAGS) -classpath "$(CLASSBINDIR)$(CLASSPATH_SEPARATOR)$(DOCLETSRC)" -d $(DOCLETDST) $? - @$(java-vm-cleanup) - -# To run, the doclet needs SwingBeanInfoBase class. Also Notice the lie -# here, SwingBeanInfoBase.class goes elswhere. - -.SwingBeanInfo: $(OBJDIR) $(BEANCLASSDIR) $(BEANSRCDIR) $(SWINGPKG)/BeanInfoUtils.class $(SWINGPKG)/SwingBeanInfoBase.class - -$(SWINGPKG)/BeanInfoUtils.class: $(BEANSRCDIR)/BeanInfoUtils.java - $(JAVAC_CMD) $(LOCAL_JAVAC_FLAGS) $(DOCLET_JAVAC_FLAGS) -d $(BEANCLASSDIR) $< - @$(java-vm-cleanup) - -$(SWINGPKG)/SwingBeanInfoBase.class: $(BEANSRCDIR)/SwingBeanInfoBase.java $(BEANSRCDIR)/BeanInfoUtils.java - $(JAVAC_CMD) $(LOCAL_JAVAC_FLAGS) $(DOCLET_JAVAC_FLAGS) -classpath $(BEANCLASSDIR) -d $(BEANCLASSDIR) $< - @$(java-vm-cleanup) - -# -# Stage 1: Generate *BeanInfo.java files. -# -mkbeaninfo: $(BEANSRCDIR) .delete.beanlist $(FILES_beans) .javadoc.beanlist - -.delete.beanlist: - @$(RM) $(TEMPDIR)/.beans.list - -.javadoc.beanlist: - if [ -s $(TEMPDIR)/.beans.list ]; \ - then $(JAVADOC_CMD) $(DOCLETFLAGS) -x $(DEBUG_FLAG) -d $(BEANSRCDIR) -t $(DOCLETSRC)/SwingBeanInfo.template -docletpath $(DOCLETDST) \ - $(shell if [ -s $(TEMPDIR)/.beans.list ]; then $(CAT) $(TEMPDIR)/.beans.list; fi); \ - fi - @$(java-vm-cleanup) - -$(BEANSRCDIR)/text/%BeanInfo.java: $(FAKESRC)/$(SWINGPKG)/text/%.java - @$(ECHO) $< >> $(TEMPDIR)/.beans.list - -$(BEANSRCDIR)/%BeanInfo.java: $(FAKESRC)/$(SWINGPKG)/%.java - @$(ECHO) $< >> $(TEMPDIR)/.beans.list - -$(BEANSRCDIR)/SwingBeanInfoBase.java: $(DOCLETSRC)/beaninfo/SwingBeanInfoBase.java - $(CP) $< $@ - -$(BEANSRCDIR)/BeanInfoUtils.java: $(DOCLETSRC)/beaninfo/BeanInfoUtils.java - $(CP) $< $@ - -# -# Compile the generated *BeanInfo.java files. -# -mkclasses: .delete.classlist $(BEANCLASSDIR)/$(SWINGPKG)/SwingBeanInfoBase.class \ - $(BEANCLASSDIR)/$(SWINGPKG)/text/JTextComponentBeanInfo.class \ - .create.classlist $(FILES_bclass) .compile.classlist - -$(BEANCLASSDIR)/$(SWINGPKG)/SwingBeanInfoBase.class:: \ - $(BEANSRCDIR)/SwingBeanInfoBase.java - -$(BEANCLASSDIR)/$(SWINGPKG)/text/JTextComponentBeanInfo.class:: \ - $(BEANSRCDIR)/JTextComponentBeanInfo.java - -$(FILES_bclass):: $(FILES_beans) - -# all the sources are in one directory, so make sure that the list does -# not have the /text direcotry in it. Kludgy, this is... -.create.classlist: - @$(ECHO) $(subst /text/,/,$(FILES_beans)) >> $(TEMPDIR)/.classes.list - -.delete.classlist: - @$(ECHO) "Deleting classes.list..." - @$(RM) $(TEMPDIR)/.classes.list - -.compile.classlist: - if [ -s $(TEMPDIR)/.classes.list ] ; then \ - $(JAVAC_CMD) $(LOCAL_JAVAC_FLAGS) -classpath $(LOCAL_CLASSPATH) -d $(BEANCLASSDIR) \ - $(shell if [ -s $(TEMPDIR)/.classes.list ] ; then $(CAT) $(TEMPDIR)/.classes.list; fi ) ; \ - fi - @$(java-vm-cleanup) - -# -# Packaging -# -mkpackaging: - $(RM) -r $(BEANCLASSDIR)/$(SWINGPKG)/beaninfo/images - $(MKDIR) -p $(BEANCLASSDIR)/$(SWINGPKG)/beaninfo/images - $(CP) $(DOCLETSRC)/beaninfo/images/*.gif $(BEANCLASSDIR)/$(SWINGPKG)/beaninfo/images - $(BOOT_JAR_CMD) cf $(TEMPDIR)/tmp.jar \ - -C $(BEANCLASSDIR) javax \ - -C $(BEANCLASSDIR) sun \ - $(BOOT_JAR_JFLAGS) - $(MV) $(TEMPDIR)/tmp.jar $(JDK_IMAGE_DIR)/lib/dt.jar - @$(java-vm-cleanup) - -# -# Cleanliness. -# -swingbeans.clean swingbeans.clobber:: - $(RM) -r 1.2src 1.2classes - $(RM) -r java javax - $(RM) *.class - $(RM) $(TEMPDIR)/.beans.list $(TEMPDIR)/.classes.list beaninfo.jar - -# -# Utility. -# - - -# -# Debugging targets for looking at variables. -# -show-vars: - @$(ECHO) FILES_beans = $(FILES_beans) - @$(ECHO) FILES_bclass = $(FILES_bclass) - -.PRECIOUS: $(FILES_beans) - -.PHONY: swing-1.2-beans swing-1.2-beans-debug \ - make-swing-beans mkdoclet .SwingBeanInfo mkbeaninfo .delete.beanlist \ - .javadoc.beanlist mkclasses .create.classlist .delete.classlist \ - .compile.classlist mkpackaging mkpackaging swingbeans.clean \ - swingbeans.clobber show-vars diff --git a/jdk/makefiles/javax/swing/beaninfo/manifest b/jdk/makefiles/javax/swing/beaninfo/manifest deleted file mode 100644 index 228fcb78814..00000000000 --- a/jdk/makefiles/javax/swing/beaninfo/manifest +++ /dev/null @@ -1,111 +0,0 @@ -Name: javax/swing/JApplet.class -Java-Bean: True - -Name: javax/swing/JButton.class -Java-Bean: True - -Name: javax/swing/JCheckBox.class -Java-Bean: True - -Name: javax/swing/JCheckBoxMenuItem.class -Java-Bean: True - -Name: javax/swing/JComboBox.class -Java-Bean: True - -Name: javax/swing/JDialog.class -Java-Bean: True - -Name: javax/swing/JEditorPane.class -Java-Bean: True - -Name: javax/swing/JFormattedTextField.class -Java-Bean: True - -Name: javax/swing/JInternalFrame.class -Java-Bean: True - -Name: javax/swing/JFrame.class -Java-Bean: True - -Name: javax/swing/JLabel.class -Java-Bean: True - -Name: javax/swing/JList.class -Java-Bean: True - -Name: javax/swing/JMenu.class -Java-Bean: True - -Name: javax/swing/JMenuBar.class -Java-Bean: True - -Name: javax/swing/JMenuItem.class -Java-Bean: True - -Name: javax/swing/JOptionPane.class -Java-Bean: True - -Name: javax/swing/JPanel.class -Java-Bean: True - -Name: javax/swing/JPasswordField.class -Java-Bean: True - -Name: javax/swing/JPopupMenu.class -Java-Bean: True - -Name: javax/swing/JProgressBar.class -Java-Bean: True - -Name: javax/swing/JRadioButton.class -Java-Bean: True - -Name: javax/swing/JRadioButtonMenuItem.class -Java-Bean: True - -Name: javax/swing/JScrollBar.class -Java-Bean: True - -Name: javax/swing/JScrollPane.class -Java-Bean: True - -Name: javax/swing/JSeparator.class -Java-Bean: True - -Name: javax/swing/JSlider.class -Java-Bean: True - -Name: javax/swing/JSpinner.class -Java-Bean: True - -Name: javax/swing/JSplitPane.class -Java-Bean: True - -Name: javax/swing/JTabbedPane.class -Java-Bean: True - -Name: javax/swing/JTextArea.class -Java-Bean: True - -Name: javax/swing/JTextField.class -Java-Bean: True - -Name: javax/swing/JTextPane.class -Java-Bean: True - -Name: javax/swing/JToolBar.class -Java-Bean: True - -Name: javax/swing/JTree.class -Java-Bean: True - -Name: javax/swing/JTable.class -Java-Bean: True - -Name: javax/swing/JToggleButton.class -Java-Bean: True - -Name: javax/swing/JWindow.class -Java-Bean: True - diff --git a/jdk/makefiles/javax/swing/html32dtd/Makefile b/jdk/makefiles/javax/swing/html32dtd/Makefile deleted file mode 100644 index c24ef3391bf..00000000000 --- a/jdk/makefiles/javax/swing/html32dtd/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = javax/swing/html/parser -PRODUCT = swing -include $(BUILDDIR)/common/Defs.gmk - -# -# Shared defintions. -# -HTML32DTD = $(CLASSBINDIR)/javax/swing/text/html/parser/html32.bdtd - -$(HTML32DTD): $(BUILD_TOOLS) - @$(prep-target) - ($(TOOL_DTDBUILDER) html32 > $@) || exit 1 - @$(java-vm-cleanup) - -all build: $(HTML32DTD) - -include $(BUILDDIR)/common/Rules.gmk - diff --git a/jdk/makefiles/javax/swing/plaf/FILES.gmk b/jdk/makefiles/javax/swing/plaf/FILES.gmk deleted file mode 100644 index b30da35124a..00000000000 --- a/jdk/makefiles/javax/swing/plaf/FILES.gmk +++ /dev/null @@ -1,117 +0,0 @@ -# -# Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -MISC_SWING_FILES = \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/Computer.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/DetailsView.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/Directory.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/Error.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/File.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/FloppyDrive.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/HardDrive.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/HomeFolder.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/Inform.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/ListView.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/NewFolder.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/Question.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/TreeClosed.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/TreeLeaf.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/TreeOpen.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/UpFolder.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/Warn.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/image-delayed.png \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/image-failed.png \ -\ - $(CLASSBINDIR)/javax/swing/plaf/basic/icons/image-delayed.png \ - $(CLASSBINDIR)/javax/swing/plaf/basic/icons/image-failed.png \ -\ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/Error.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/Inform.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/Question.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/sortDown.png \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/sortUp.png \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/Warn.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/close.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/close-pressed.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/collapsed.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/collapsed-rtl.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/computer.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/directory.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/error.png \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/expanded.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/file.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/floppy.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/hardDrive.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/homeFolder.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/iconify.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/iconify-pressed.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/info.png \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/maximize.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/maximize-pressed.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/menu.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/minimize.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/minimize-pressed.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/newFolder.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/paletteClose.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/paletteClose-pressed.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/question.png \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/upFolder.gif \ - $(CLASSBINDIR)/javax/swing/plaf/metal/icons/ocean/warning.png \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/FrameClose.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/FrameMaximize.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/FrameMinimize.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/FrameRestoreDown.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/FrameRestoreUp.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/MenuItemCommand.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/OptionPaneInformation.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/OptionPaneWarning.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/OptionPaneError.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/OptionPaneQuestion.wav \ - $(CLASSBINDIR)/javax/swing/plaf/metal/sounds/PopupMenuPopup.wav - -MISC_SWING_FILES_MOTIF_GIF = \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/DesktopIcon.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/TreeClosed.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/TreeOpen.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/Inform.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/Question.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/Warn.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/Error.gif - -MISC_SWING_FILES_MOTIF_PNG = \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/image-delayed.png \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/motif/icons/image-failed.png - -MISC_SWING_FILES_UNIX = \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/gtk/icons/Directory.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/gtk/icons/File.gif \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/gtk/icons/image-delayed.png \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/gtk/icons/image-failed.png \ - $(CLASSBINDIR)/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/metacity-theme-1.xml - -LOGO_ICONS=\ - $(CLASSBINDIR)/com/sun/java/swing/plaf/windows/icons/JavaCup32.png \ - $(CLASSBINDIR)/javax/swing/plaf/basic/icons/JavaCup16.png - diff --git a/jdk/makefiles/javax/swing/plaf/Makefile b/jdk/makefiles/javax/swing/plaf/Makefile deleted file mode 100644 index 52753d64df5..00000000000 --- a/jdk/makefiles/javax/swing/plaf/Makefile +++ /dev/null @@ -1,133 +0,0 @@ -# -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = javax.swing.plaf -PRODUCT = com -SWING_SRC = $(SHARE_SRC)/classes/javax/swing -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -include FILES.gmk -AUTO_FILES_JAVA_DIRS = javax/swing/plaf sun/swing com/sun/java/swing/plaf - -ifeq ($(PLATFORM), windows) - # Don't build GTK L&F on Windows - AUTO_JAVA_PRUNE = gtk -endif - -ifdef DISABLE_NIMBUS - AUTO_JAVA_PRUNE += nimbus -endif - -MISC_FILES = $(MISC_SWING_FILES) -ifneq ($(PLATFORM), windows) - # Only include GTK icons on Solaris/Linux - MISC_FILES += $(MISC_SWING_FILES_UNIX) -endif - -NIMBUS_GENSRC_DIR = $(GENSRCDIR)/javax/swing/plaf/nimbus -NIMBUS_SKIN_FILE = $(SWING_SRC)/plaf/nimbus/skin.laf - -FILES_java = $(FILES_SWING_java) - -# -# Resources -# -LOCALE_SET_DEFINITION = jre -RESOURCE_BUNDLES_COMPILED_PROPERTIES = \ - com/sun/swing/internal/plaf/basic/resources/basic.properties \ - com/sun/swing/internal/plaf/metal/resources/metal.properties \ - com/sun/swing/internal/plaf/synth/resources/synth.properties \ - com/sun/java/swing/plaf/motif/resources/motif.properties \ - com/sun/java/swing/plaf/windows/resources/windows.properties -ifneq ($(PLATFORM), windows) - # Only compile GTK resource bundles on Solaris/Linux - RESOURCE_BUNDLES_COMPILED_PROPERTIES += \ - com/sun/java/swing/plaf/gtk/resources/gtk.properties -endif - -# -# Rules. -# Process LOGO_ICONS and Motif Icons first. -# -build: $(LOGO_ICONS) $(MISC_SWING_FILES_MOTIF_GIF) $(MISC_SWING_FILES_MOTIF_PNG) other_files - -$(NIMBUS_GENSRC_DIR): $(NIMBUS_SKIN_FILE) $(BUILD_TOOLS) - @$(ECHO) "Generating Nimbus source files:" - $(RM) -r $(NIMBUS_GENSRC_DIR) - $(TOOL_GENERATENIMBUS) \ - -skinFile $(NIMBUS_SKIN_FILE) -buildDir $(GENSRCDIR) \ - -packagePrefix $(PACKAGE).nimbus -lafName Nimbus - @$(ECHO) "Finished generating Nimbus source files" - -clean:: classes.clean - $(RM) -r $(NIMBUS_GENSRC_DIR) - -# -# Include -# -ifndef DISABLE_NIMBUS - CLASSES_INIT = $(NIMBUS_GENSRC_DIR) -endif - -include $(BUILDDIR)/common/Classes.gmk - -ifndef OPENJDK -$(LOGO_ICONS): $(CLASSBINDIR)/%.png: $(CLOSED_SRC)/share/classes/%.png - $(install-file) - -$(MISC_SWING_FILES_MOTIF_GIF): $(CLASSBINDIR)/%.gif: $(CLOSED_SRC)/share/classes/%.gif - $(install-file) - -$(MISC_SWING_FILES_MOTIF_PNG): $(CLASSBINDIR)/%.png: $(CLOSED_SRC)/share/classes/%.png - $(install-file) -endif - -other_files: $(MISC_FILES) - -$(CLASSBINDIR)/%.wav: $(SHARE_SRC)/classes/%.wav - $(install-file) - -$(CLASSBINDIR)/%.gif: $(SHARE_SRC)/classes/%.gif - $(install-file) - -$(CLASSBINDIR)/%.png: $(SHARE_SRC)/classes/%.png - $(install-file) - -$(CLASSBINDIR)/%.xml: $(SHARE_SRC)/classes/%.xml - $(install-file) - -$(CLASSBINDIR)/%.css: $(SHARE_SRC)/classes/%.css - $(install-file) - -$(CLASSBINDIR)/%.bdtd: $(SHARE_SRC)/classes/%.bdtd - $(install-file) - -$(CLASSBINDIR)/%.txt: $(SHARE_SRC)/classes/%.txt - $(install-file) - diff --git a/jdk/makefiles/sun/awt/mapfile-mawt-vers b/jdk/makefiles/mapfiles/libawt/mapfile-mawt-vers similarity index 100% rename from jdk/makefiles/sun/awt/mapfile-mawt-vers rename to jdk/makefiles/mapfiles/libawt/mapfile-mawt-vers diff --git a/jdk/makefiles/sun/awt/mapfile-vers b/jdk/makefiles/mapfiles/libawt/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/awt/mapfile-vers rename to jdk/makefiles/mapfiles/libawt/mapfile-vers diff --git a/jdk/makefiles/sun/awt/mapfile-vers-linux b/jdk/makefiles/mapfiles/libawt/mapfile-vers-linux similarity index 100% rename from jdk/makefiles/sun/awt/mapfile-vers-linux rename to jdk/makefiles/mapfiles/libawt/mapfile-vers-linux diff --git a/jdk/makefiles/sun/headless/mapfile-vers b/jdk/makefiles/mapfiles/libawt_headless/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/headless/mapfile-vers rename to jdk/makefiles/mapfiles/libawt_headless/mapfile-vers diff --git a/jdk/makefiles/sun/headless/reorder-i586 b/jdk/makefiles/mapfiles/libawt_headless/reorder-i586 similarity index 100% rename from jdk/makefiles/sun/headless/reorder-i586 rename to jdk/makefiles/mapfiles/libawt_headless/reorder-i586 diff --git a/jdk/makefiles/sun/headless/reorder-sparc b/jdk/makefiles/mapfiles/libawt_headless/reorder-sparc similarity index 100% rename from jdk/makefiles/sun/headless/reorder-sparc rename to jdk/makefiles/mapfiles/libawt_headless/reorder-sparc diff --git a/jdk/makefiles/sun/headless/reorder-sparcv9 b/jdk/makefiles/mapfiles/libawt_headless/reorder-sparcv9 similarity index 100% rename from jdk/makefiles/sun/headless/reorder-sparcv9 rename to jdk/makefiles/mapfiles/libawt_headless/reorder-sparcv9 diff --git a/jdk/makefiles/sun/xawt/mapfile-vers b/jdk/makefiles/mapfiles/libawt_xawt/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/xawt/mapfile-vers rename to jdk/makefiles/mapfiles/libawt_xawt/mapfile-vers diff --git a/jdk/makefiles/sun/dcpr/mapfile-vers b/jdk/makefiles/mapfiles/libdcpr/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/dcpr/mapfile-vers rename to jdk/makefiles/mapfiles/libdcpr/mapfile-vers diff --git a/jdk/makefiles/java/java_hprof_demo/mapfile-vers b/jdk/makefiles/mapfiles/libhprof/mapfile-vers similarity index 100% rename from jdk/makefiles/java/java_hprof_demo/mapfile-vers rename to jdk/makefiles/mapfiles/libhprof/mapfile-vers diff --git a/jdk/makefiles/java/instrument/mapfile-vers b/jdk/makefiles/mapfiles/libinstrument/mapfile-vers similarity index 100% rename from jdk/makefiles/java/instrument/mapfile-vers rename to jdk/makefiles/mapfiles/libinstrument/mapfile-vers diff --git a/jdk/makefiles/sun/security/jgss/wrapper/mapfile-vers b/jdk/makefiles/mapfiles/libj2gss/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/security/jgss/wrapper/mapfile-vers rename to jdk/makefiles/mapfiles/libj2gss/mapfile-vers diff --git a/jdk/makefiles/sun/security/smartcardio/mapfile-vers b/jdk/makefiles/mapfiles/libj2pcsc/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/security/smartcardio/mapfile-vers rename to jdk/makefiles/mapfiles/libj2pcsc/mapfile-vers diff --git a/jdk/makefiles/sun/security/pkcs11/mapfile-vers b/jdk/makefiles/mapfiles/libj2pkcs11/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/security/pkcs11/mapfile-vers rename to jdk/makefiles/mapfiles/libj2pkcs11/mapfile-vers diff --git a/jdk/makefiles/com/oracle/security/ucrypto/mapfile-vers b/jdk/makefiles/mapfiles/libj2ucrypto/mapfile-vers similarity index 100% rename from jdk/makefiles/com/oracle/security/ucrypto/mapfile-vers rename to jdk/makefiles/mapfiles/libj2ucrypto/mapfile-vers diff --git a/jdk/makefiles/java/java/mapfile-vers b/jdk/makefiles/mapfiles/libjava/mapfile-vers similarity index 99% rename from jdk/makefiles/java/java/mapfile-vers rename to jdk/makefiles/mapfiles/libjava/mapfile-vers index 8517e713dd9..23cca532fd7 100644 --- a/jdk/makefiles/java/java/mapfile-vers +++ b/jdk/makefiles/mapfiles/libjava/mapfile-vers @@ -232,7 +232,6 @@ SUNWprivate_1.1 { Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; Java_java_security_AccessController_getStackAccessControlContext; Java_java_security_AccessController_getInheritedAccessControlContext; - Java_java_sql_DriverManager_getCallerClassLoader; Java_java_util_ResourceBundle_getClassContext; Java_java_util_TimeZone_getSystemTimeZoneID; Java_java_util_TimeZone_getSystemGMTOffsetID; diff --git a/jdk/makefiles/java/java/reorder-i586 b/jdk/makefiles/mapfiles/libjava/reorder-i586 similarity index 91% rename from jdk/makefiles/java/java/reorder-i586 rename to jdk/makefiles/mapfiles/libjava/reorder-i586 index fc3202a8439..deb78fb9799 100644 --- a/jdk/makefiles/java/java/reorder-i586 +++ b/jdk/makefiles/mapfiles/libjava/reorder-i586 @@ -2,11 +2,11 @@ data = R0x2000; text = LOAD ?RXO; # Test Null text: .text%_init; -text: .text%init64IO: OUTPUTDIR/tmp/java/java.lang/java/obj/UnixFileSystem_md.o; +text: .text%init64IO: OUTPUTDIR/UnixFileSystem_md.o; text: .text%JNI_OnLoad; text: .text%Canonicalize; text: .text%canonicalize; -text: .text%collapse: OUTPUTDIR/tmp/java/java.lang/java/obj/canonicalize_md.o; +text: .text%collapse: OUTPUTDIR/canonicalize_md.o; text: .text%Java_java_lang_Object_registerNatives; text: .text%Java_java_lang_System_registerNatives; text: .text%Java_java_lang_Thread_registerNatives; @@ -18,9 +18,9 @@ text: .text%Java_java_lang_Class_registerNatives; text: .text%Java_java_lang_Class_getPrimitiveClass; text: .text%Java_java_lang_System_initProperties; text: .text%GetJavaProperties; -text: .text%uname: OUTPUTDIR/tmp/java/java.lang/java/obj/java_props_md.o; -text: .text%mapLookup: OUTPUTDIR/tmp/java/java.lang/java/obj/java_props_md.o; -text: .text%setPathEnvironment: OUTPUTDIR/tmp/java/java.lang/java/obj/java_props_md.o; +text: .text%uname: OUTPUTDIR/java_props_md.o; +text: .text%mapLookup: OUTPUTDIR/java_props_md.o; +text: .text%setPathEnvironment: OUTPUTDIR/java_props_md.o; text: .text%JNU_NewStringPlatform; text: .text%JNU_CallStaticMethodByName; text: .text%NewStringPlatform; @@ -51,7 +51,7 @@ text: .text%Java_java_lang_ClassLoader_findLoadedClass; text: .text%Java_java_lang_ClassLoader_findBootstrapClass; text: .text%Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; text: .text%Java_java_lang_System_mapLibraryName; -text: .text%cpchars: OUTPUTDIR/tmp/java/java.lang/java/obj/System.o; +text: .text%cpchars: OUTPUTDIR/System.o; text: .text%Java_java_lang_ClassLoader_00024NativeLibrary_load; text: .text%Java_java_lang_ClassLoader_00024NativeLibrary_find; text: .text%Java_java_lang_Float_floatToIntBits; diff --git a/jdk/makefiles/java/java/reorder-sparc b/jdk/makefiles/mapfiles/libjava/reorder-sparc similarity index 92% rename from jdk/makefiles/java/java/reorder-sparc rename to jdk/makefiles/mapfiles/libjava/reorder-sparc index 090f0001da2..32f9aaf2d8e 100644 --- a/jdk/makefiles/java/java/reorder-sparc +++ b/jdk/makefiles/mapfiles/libjava/reorder-sparc @@ -1,11 +1,11 @@ data = R0x2000; text = LOAD ?RXO; # Test Null -text: .text%init64IO: OUTPUTDIR/tmp/java/java.lang/java/obj/UnixFileSystem_md.o; +text: .text%init64IO: OUTPUTDIR/UnixFileSystem_md.o; text: .text%JNI_OnLoad; text: .text%Canonicalize; text: .text%canonicalize; -text: .text%collapse: OUTPUTDIR/tmp/java/java.lang/java/obj/canonicalize_md.o; +text: .text%collapse: OUTPUTDIR/canonicalize_md.o; text: .text%Java_java_lang_Object_registerNatives; text: .text%Java_java_lang_System_registerNatives; text: .text%Java_java_lang_Thread_registerNatives; @@ -19,9 +19,9 @@ text: .text%Java_java_lang_Class_getPrimitiveClass; text: .text%Java_java_lang_System_initProperties; text: .text%GetJavaProperties; text: .text%JNU_NewStringPlatform; -text: .text%initializeEncoding: OUTPUTDIR/tmp/java/java.lang/java/obj/jni_util.o; +text: .text%initializeEncoding: OUTPUTDIR/jni_util.o; text: .text%JNU_CallStaticMethodByName; -text: .text%newString646_US: OUTPUTDIR/tmp/java/java.lang/java/obj/jni_util.o; +text: .text%newString646_US: OUTPUTDIR/jni_util.o; text: .text%NewStringPlatform; text: .text%Java_java_io_FileInputStream_initIDs; text: .text%Java_java_io_FileDescriptor_initIDs; @@ -51,7 +51,7 @@ text: .text%Java_java_io_FileInputStream_available; text: .text%Java_java_io_FileInputStream_close0; text: .text%Java_java_lang_System_mapLibraryName; text: .text%Java_java_io_UnixFileSystem_getBooleanAttributes0; -text: .text%statMode: OUTPUTDIR/tmp/java/java.lang/java/obj/UnixFileSystem_md.o; +text: .text%statMode: OUTPUTDIR/UnixFileSystem_md.o; text: .text%Java_java_lang_ClassLoader_00024NativeLibrary_load; text: .text%Java_java_lang_Compiler_registerNatives; text: .text%Java_java_lang_ClassLoader_00024NativeLibrary_find; diff --git a/jdk/makefiles/java/java/reorder-sparcv9 b/jdk/makefiles/mapfiles/libjava/reorder-sparcv9 similarity index 89% rename from jdk/makefiles/java/java/reorder-sparcv9 rename to jdk/makefiles/mapfiles/libjava/reorder-sparcv9 index b20b45ab960..d64cb957793 100644 --- a/jdk/makefiles/java/java/reorder-sparcv9 +++ b/jdk/makefiles/mapfiles/libjava/reorder-sparcv9 @@ -1,11 +1,11 @@ data = R0x2000; text = LOAD ?RXO; # Test Null -text: .text%init64IO: OUTPUTDIR/tmp/java/java.lang/java/obj64/UnixFileSystem_md.o; +text: .text%init64IO: OUTPUTDIR/UnixFileSystem_md.o; text: .text%JNI_OnLoad; text: .text%Canonicalize; text: .text%canonicalize; -text: .text%collapse: OUTPUTDIR/tmp/java/java.lang/java/obj64/canonicalize_md.o; +text: .text%collapse: OUTPUTDIR/canonicalize_md.o; text: .text%Java_java_lang_Object_registerNatives; text: .text%Java_java_lang_System_registerNatives; text: .text%Java_java_lang_Thread_registerNatives; @@ -18,9 +18,9 @@ text: .text%Java_java_lang_Class_getPrimitiveClass; text: .text%Java_java_lang_System_initProperties; text: .text%GetJavaProperties; text: .text%JNU_NewStringPlatform; -text: .text%initializeEncoding: OUTPUTDIR/tmp/java/java.lang/java/obj64/jni_util.o; +text: .text%initializeEncoding: OUTPUTDIR/jni_util.o; text: .text%JNU_CallStaticMethodByName; -text: .text%newString8859_1: OUTPUTDIR/tmp/java/java.lang/java/obj64/jni_util.o; +text: .text%newString8859_1: OUTPUTDIR/jni_util.o; text: .text%NewStringPlatform; text: .text%Java_java_io_FileInputStream_initIDs; text: .text%Java_java_io_FileDescriptor_initIDs; @@ -58,7 +58,7 @@ text: .text%Java_java_io_UnixFileSystem_list; text: .text%JNU_ClassString; text: .text%JNU_CopyObjectArray; text: .text%Java_java_io_UnixFileSystem_getBooleanAttributes0; -text: .text%statMode: OUTPUTDIR/tmp/java/java.lang/java/obj64/UnixFileSystem_md.o; +text: .text%statMode: OUTPUTDIR/UnixFileSystem_md.o; text: .text%Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; text: .text%Java_java_lang_System_mapLibraryName; text: .text%Java_java_lang_ClassLoader_00024NativeLibrary_load; @@ -82,7 +82,7 @@ text: .text%Java_java_lang_ref_Finalizer_invokeFinalizeMethod; text: .text%Java_java_lang_reflect_Array_newArray; text: .text%Java_java_lang_Throwable_getStackTraceDepth; text: .text%Java_java_lang_Throwable_getStackTraceElement; -text: .text%throwFileNotFoundException: OUTPUTDIR/tmp/java/java.lang/java/obj64/io_util.o; +text: .text%throwFileNotFoundException: OUTPUTDIR/io_util.o; text: .text%JNU_NotifyAll; # Test LoadFrame text: .text%JNU_CallMethodByName; diff --git a/jdk/makefiles/java/java_crw_demo/mapfile-vers b/jdk/makefiles/mapfiles/libjava_crw_demo/mapfile-vers similarity index 100% rename from jdk/makefiles/java/java_crw_demo/mapfile-vers rename to jdk/makefiles/mapfiles/libjava_crw_demo/mapfile-vers diff --git a/jdk/makefiles/sun/jdga/mapfile-vers b/jdk/makefiles/mapfiles/libjdga/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/jdga/mapfile-vers rename to jdk/makefiles/mapfiles/libjdga/mapfile-vers diff --git a/jdk/makefiles/mapfiles/libjfr/mapfile-vers b/jdk/makefiles/mapfiles/libjfr/mapfile-vers new file mode 100644 index 00000000000..5ed216eee9d --- /dev/null +++ b/jdk/makefiles/mapfiles/libjfr/mapfile-vers @@ -0,0 +1,39 @@ +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. +# + +# Define library interface. + +SUNWprivate_1.1 { + global: + Java_oracle_jrockit_jfr_Process_getpid; + Java_oracle_jrockit_jfr_Timing_counterTime; + Java_oracle_jrockit_jfr_Timing_init; + Java_oracle_jrockit_jfr_NativeLogger_output0; + Java_oracle_jrockit_jfr_VMJFR_isEnabled; + Java_oracle_jrockit_jfr_VMJFR_options; + Java_oracle_jrockit_jfr_VMJFR_init; + Java_oracle_jrockit_jfr_VMJFR_addConstPool; + Java_oracle_jrockit_jfr_VMJFR_removeConstPool; + Java_oracle_jrockit_jfr_VMJFR_storeConstPool; + Java_oracle_jrockit_jfr_VMJFR_classID; + Java_oracle_jrockit_jfr_VMJFR_stackTraceID; + Java_oracle_jrockit_jfr_VMJFR_threadID; + Java_oracle_jrockit_jfr_VMJFR_rotate; + Java_oracle_jrockit_jfr_VMJFR_shutdown; + Java_oracle_jrockit_jfr_VMJFR_start; + Java_oracle_jrockit_jfr_VMJFR_stop; + Java_oracle_jrockit_jfr_VMJFR_buffer; + Java_oracle_jrockit_jfr_VMJFR_flush; + Java_oracle_jrockit_jfr_VMJFR_write; + Java_oracle_jrockit_jfr_VMJFR_add; + Java_oracle_jrockit_jfr_VMJFR_remove; + Java_oracle_jrockit_jfr_VMJFR_setThreshold; + Java_oracle_jrockit_jfr_VMJFR_setPeriod; + Java_oracle_jrockit_jfr_VMJFR_getPeriod; + Java_oracle_jrockit_jfr_VMJFR_descriptors; + JNI_OnLoad; + local: + *; +}; diff --git a/jdk/makefiles/java/jli/mapfile-vers b/jdk/makefiles/mapfiles/libjli/mapfile-vers similarity index 100% rename from jdk/makefiles/java/jli/mapfile-vers rename to jdk/makefiles/mapfiles/libjli/mapfile-vers diff --git a/jdk/makefiles/mapfiles/libjpeg/reorder-i586 b/jdk/makefiles/mapfiles/libjpeg/reorder-i586 index 47e18ca44d1..328c6dcd782 100644 --- a/jdk/makefiles/mapfiles/libjpeg/reorder-i586 +++ b/jdk/makefiles/mapfiles/libjpeg/reorder-i586 @@ -19,101 +19,101 @@ text: .text%jIMemMgr; text: .text%jMemInit; text: .text%jGetSmall; text: .text%jIMReader; -text: .text%alloc_small: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; -text: .text%reset_marker_reader: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%alloc_small: OUTPUTDIR/jmemmgr.o; +text: .text%reset_marker_reader: OUTPUTDIR/jdmarker.o; text: .text%jIInCtlr; -# text: .text%GET_ARRAYS: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jpegdecoder.o; +# text: .text%GET_ARRAYS: OUTPUTDIR/jpegdecoder.o; text: .text%jReadHeader; text: .text%jConsumeInput; -text: .text%reset_input_controller: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%reset_error_mgr: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jerror.o; +text: .text%reset_input_controller: OUTPUTDIR/jdinput.o; +text: .text%reset_error_mgr: OUTPUTDIR/jerror.o; text: .text%sun_jpeg_init_source; -text: .text%consume_markers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%read_markers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -# text: .text%first_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%consume_markers: OUTPUTDIR/jdinput.o; +text: .text%read_markers: OUTPUTDIR/jdmarker.o; +# text: .text%first_marker: OUTPUTDIR/jdmarker.o; text: .text%sun_jpeg_fill_input_buffer; -# text: .text%RELEASE_ARRAYS: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jpegdecoder.o; -# text: .text%get_soi: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%emit_message: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jerror.o; -# text: .text%next_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%get_interesting_appn: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -# text: .text%examine_app0: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%skip_variable: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +# text: .text%RELEASE_ARRAYS: OUTPUTDIR/jpegdecoder.o; +# text: .text%get_soi: OUTPUTDIR/jdmarker.o; +text: .text%emit_message: OUTPUTDIR/jerror.o; +# text: .text%next_marker: OUTPUTDIR/jdmarker.o; +text: .text%get_interesting_appn: OUTPUTDIR/jdmarker.o; +# text: .text%examine_app0: OUTPUTDIR/jdmarker.o; +text: .text%skip_variable: OUTPUTDIR/jdmarker.o; text: .text%sun_jpeg_skip_input_data; -# text: .text%examine_app14: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%get_dqt: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +# text: .text%examine_app14: OUTPUTDIR/jdmarker.o; +text: .text%get_dqt: OUTPUTDIR/jdmarker.o; text: .text%jAlcQTable; -text: .text%get_sof: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -# text: .text%get_dri: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%get_dht: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%get_sof: OUTPUTDIR/jdmarker.o; +# text: .text%get_dri: OUTPUTDIR/jdmarker.o; +text: .text%get_dht: OUTPUTDIR/jdmarker.o; text: .text%jAlcHTable; -text: .text%get_sos: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -# text: .text%initial_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; +text: .text%get_sos: OUTPUTDIR/jdmarker.o; +# text: .text%initial_setup: OUTPUTDIR/jdinput.o; text: .text%jDivRound; -# text: .text%default_decompress_parms: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdapimin.o; +# text: .text%default_decompress_parms: OUTPUTDIR/jdapimin.o; text: .text%jHasMultScn; text: .text%jStrtDecompress; text: .text%jIDMaster; -# text: .text%master_selection: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; +# text: .text%master_selection: OUTPUTDIR/jdmaster.o; text: .text%jCalcDimensions; -# text: .text%use_merged_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; -# text: .text%prepare_range_limit_table: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; +# text: .text%use_merged_upsample: OUTPUTDIR/jdmaster.o; +# text: .text%prepare_range_limit_table: OUTPUTDIR/jdmaster.o; text: .text%jIDColor; -# text: .text%build_ycc_rgb_table: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcolor.o; +# text: .text%build_ycc_rgb_table: OUTPUTDIR/jdcolor.o; text: .text%jIUpsampler; text: .text%jRound; -text: .text%alloc_sarray: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; -text: .text%alloc_large: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; +text: .text%alloc_sarray: OUTPUTDIR/jmemmgr.o; +text: .text%alloc_large: OUTPUTDIR/jmemmgr.o; text: .text%jGetLarge; text: .text%jIDPostC; text: .text%jIIDCT; text: .text%jIHDecoder; text: .text%jIDCoefC; text: .text%jIDMainC; -# text: .text%alloc_funny_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -text: .text%realize_virt_arrays: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; -text: .text%start_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -# text: .text%per_scan_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -# text: .text%latch_quant_tables: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%start_pass_huff_decoder: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdhuff.o; +# text: .text%alloc_funny_pointers: OUTPUTDIR/jdmainct.o; +text: .text%realize_virt_arrays: OUTPUTDIR/jmemmgr.o; +text: .text%start_input_pass: OUTPUTDIR/jdinput.o; +# text: .text%per_scan_setup: OUTPUTDIR/jdinput.o; +# text: .text%latch_quant_tables: OUTPUTDIR/jdinput.o; +text: .text%start_pass_huff_decoder: OUTPUTDIR/jdhuff.o; text: .text%jMkDDerived; -text: .text%start_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; -# text: .text%start_iMCU_row: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; -# text: .text%output_pass_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdapistd.o; -text: .text%prepare_for_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; -text: .text%start_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jddctmgr.o; -text: .text%start_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; -text: .text%start_pass_dcolor: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcolor.o; -text: .text%start_pass_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%start_pass_dpost: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdpostct.o; -text: .text%start_pass_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -# text: .text%make_funny_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; +text: .text%start_input_pass: OUTPUTDIR/jdcoefct.o; +# text: .text%start_iMCU_row: OUTPUTDIR/jdcoefct.o; +# text: .text%output_pass_setup: OUTPUTDIR/jdapistd.o; +text: .text%prepare_for_output_pass: OUTPUTDIR/jdmaster.o; +text: .text%start_pass: OUTPUTDIR/jddctmgr.o; +text: .text%start_output_pass: OUTPUTDIR/jdcoefct.o; +text: .text%start_pass_dcolor: OUTPUTDIR/jdcolor.o; +text: .text%start_pass_upsample: OUTPUTDIR/jdsample.o; +text: .text%start_pass_dpost: OUTPUTDIR/jdpostct.o; +text: .text%start_pass_main: OUTPUTDIR/jdmainct.o; +# text: .text%make_funny_pointers: OUTPUTDIR/jdmainct.o; text: .text%jReadScanlines; -text: .text%process_data_context_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -text: .text%decompress_onepass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; +text: .text%process_data_context_main: OUTPUTDIR/jdmainct.o; +text: .text%decompress_onepass: OUTPUTDIR/jdcoefct.o; text: .text%jZeroFar; -text: .text%decode_mcu: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdhuff.o; +text: .text%decode_mcu: OUTPUTDIR/jdhuff.o; text: .text%jFilBitBuf; text: .text%jHufDecode; text: .text%jRDislow; -text: .text%sep_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%fullsize_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%h2v2_fancy_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%ycc_rgb_convert: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcolor.o; -# text: .text%set_wraparound_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -# text: .text%process_restart: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdhuff.o; -text: .text%read_restart_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%finish_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -# text: .text%set_bottom_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; +text: .text%sep_upsample: OUTPUTDIR/jdsample.o; +text: .text%fullsize_upsample: OUTPUTDIR/jdsample.o; +text: .text%h2v2_fancy_upsample: OUTPUTDIR/jdsample.o; +text: .text%ycc_rgb_convert: OUTPUTDIR/jdcolor.o; +# text: .text%set_wraparound_pointers: OUTPUTDIR/jdmainct.o; +# text: .text%process_restart: OUTPUTDIR/jdhuff.o; +text: .text%read_restart_marker: OUTPUTDIR/jdmarker.o; +text: .text%finish_input_pass: OUTPUTDIR/jdinput.o; +# text: .text%set_bottom_pointers: OUTPUTDIR/jdmainct.o; text: .text%jFinDecompress; -text: .text%finish_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; +text: .text%finish_output_pass: OUTPUTDIR/jdmaster.o; text: .text%sun_jpeg_term_source; text: .text%jAbort; -text: .text%free_pool: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; +text: .text%free_pool: OUTPUTDIR/jmemmgr.o; text: .text%jFreeLarge; text: .text%jFreeSmall; text: .text%jDestDecompress; text: .text%jDestroy; -text: .text%self_destruct: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; +text: .text%self_destruct: OUTPUTDIR/jmemmgr.o; text: .text%jMemTerm; -text: .text%process_data_simple_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; +text: .text%process_data_simple_main: OUTPUTDIR/jdmainct.o; diff --git a/jdk/makefiles/mapfiles/libjpeg/reorder-sparc b/jdk/makefiles/mapfiles/libjpeg/reorder-sparc index a7b21edca43..e771347cead 100644 --- a/jdk/makefiles/mapfiles/libjpeg/reorder-sparc +++ b/jdk/makefiles/mapfiles/libjpeg/reorder-sparc @@ -19,101 +19,101 @@ text: .text%jIMemMgr; text: .text%jMemInit; text: .text%jGetSmall; text: .text%jIMReader; -text: .text%alloc_small: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; -text: .text%reset_marker_reader: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%alloc_small: OUTPUTDIR/jmemmgr.o; +text: .text%reset_marker_reader: OUTPUTDIR/jdmarker.o; text: .text%jIInCtlr; -text: .text%GET_ARRAYS: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jpegdecoder.o; +text: .text%GET_ARRAYS: OUTPUTDIR/jpegdecoder.o; text: .text%jReadHeader; text: .text%jConsumeInput; -text: .text%reset_input_controller: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%reset_error_mgr: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jerror.o; +text: .text%reset_input_controller: OUTPUTDIR/jdinput.o; +text: .text%reset_error_mgr: OUTPUTDIR/jerror.o; text: .text%sun_jpeg_init_source; -text: .text%consume_markers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%read_markers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -# text: .text%first_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%consume_markers: OUTPUTDIR/jdinput.o; +text: .text%read_markers: OUTPUTDIR/jdmarker.o; +# text: .text%first_marker: OUTPUTDIR/jdmarker.o; text: .text%sun_jpeg_fill_input_buffer; -text: .text%RELEASE_ARRAYS: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jpegdecoder.o; -# text: .text%get_soi: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%emit_message: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jerror.o; -text: .text%next_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%get_interesting_appn: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%examine_app0: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%skip_variable: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%RELEASE_ARRAYS: OUTPUTDIR/jpegdecoder.o; +# text: .text%get_soi: OUTPUTDIR/jdmarker.o; +text: .text%emit_message: OUTPUTDIR/jerror.o; +text: .text%next_marker: OUTPUTDIR/jdmarker.o; +text: .text%get_interesting_appn: OUTPUTDIR/jdmarker.o; +text: .text%examine_app0: OUTPUTDIR/jdmarker.o; +text: .text%skip_variable: OUTPUTDIR/jdmarker.o; text: .text%sun_jpeg_skip_input_data; -text: .text%examine_app14: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%get_dqt: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%examine_app14: OUTPUTDIR/jdmarker.o; +text: .text%get_dqt: OUTPUTDIR/jdmarker.o; text: .text%jAlcQTable; -text: .text%get_sof: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -# text: .text%get_dri: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%get_dht: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; +text: .text%get_sof: OUTPUTDIR/jdmarker.o; +# text: .text%get_dri: OUTPUTDIR/jdmarker.o; +text: .text%get_dht: OUTPUTDIR/jdmarker.o; text: .text%jAlcHTable; -text: .text%get_sos: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%initial_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; +text: .text%get_sos: OUTPUTDIR/jdmarker.o; +text: .text%initial_setup: OUTPUTDIR/jdinput.o; text: .text%jDivRound; -text: .text%default_decompress_parms: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdapimin.o; +text: .text%default_decompress_parms: OUTPUTDIR/jdapimin.o; text: .text%jHasMultScn; text: .text%jStrtDecompress; text: .text%jIDMaster; -text: .text%master_selection: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; +text: .text%master_selection: OUTPUTDIR/jdmaster.o; text: .text%jCalcDimensions; -# text: .text%use_merged_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; -# text: .text%prepare_range_limit_table: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; +# text: .text%use_merged_upsample: OUTPUTDIR/jdmaster.o; +# text: .text%prepare_range_limit_table: OUTPUTDIR/jdmaster.o; text: .text%jIDColor; -# text: .text%build_ycc_rgb_table: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcolor.o; +# text: .text%build_ycc_rgb_table: OUTPUTDIR/jdcolor.o; text: .text%jIUpsampler; text: .text%jRound; -text: .text%alloc_sarray: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; -text: .text%alloc_large: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; +text: .text%alloc_sarray: OUTPUTDIR/jmemmgr.o; +text: .text%alloc_large: OUTPUTDIR/jmemmgr.o; text: .text%jGetLarge; text: .text%jIDPostC; text: .text%jIIDCT; text: .text%jIHDecoder; text: .text%jIDCoefC; text: .text%jIDMainC; -text: .text%alloc_funny_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -text: .text%realize_virt_arrays: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; -text: .text%start_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%per_scan_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%latch_quant_tables: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -text: .text%start_pass_huff_decoder: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdhuff.o; +text: .text%alloc_funny_pointers: OUTPUTDIR/jdmainct.o; +text: .text%realize_virt_arrays: OUTPUTDIR/jmemmgr.o; +text: .text%start_input_pass: OUTPUTDIR/jdinput.o; +text: .text%per_scan_setup: OUTPUTDIR/jdinput.o; +text: .text%latch_quant_tables: OUTPUTDIR/jdinput.o; +text: .text%start_pass_huff_decoder: OUTPUTDIR/jdhuff.o; text: .text%jMkDDerived; -text: .text%start_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; -# text: .text%start_iMCU_row: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; -text: .text%output_pass_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdapistd.o; -text: .text%prepare_for_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; -text: .text%start_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jddctmgr.o; -text: .text%start_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; -text: .text%start_pass_dcolor: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcolor.o; -text: .text%start_pass_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%start_pass_dpost: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdpostct.o; -text: .text%start_pass_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -text: .text%make_funny_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; +text: .text%start_input_pass: OUTPUTDIR/jdcoefct.o; +# text: .text%start_iMCU_row: OUTPUTDIR/jdcoefct.o; +text: .text%output_pass_setup: OUTPUTDIR/jdapistd.o; +text: .text%prepare_for_output_pass: OUTPUTDIR/jdmaster.o; +text: .text%start_pass: OUTPUTDIR/jddctmgr.o; +text: .text%start_output_pass: OUTPUTDIR/jdcoefct.o; +text: .text%start_pass_dcolor: OUTPUTDIR/jdcolor.o; +text: .text%start_pass_upsample: OUTPUTDIR/jdsample.o; +text: .text%start_pass_dpost: OUTPUTDIR/jdpostct.o; +text: .text%start_pass_main: OUTPUTDIR/jdmainct.o; +text: .text%make_funny_pointers: OUTPUTDIR/jdmainct.o; text: .text%jReadScanlines; -text: .text%process_data_context_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -text: .text%decompress_onepass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcoefct.o; +text: .text%process_data_context_main: OUTPUTDIR/jdmainct.o; +text: .text%decompress_onepass: OUTPUTDIR/jdcoefct.o; text: .text%jZeroFar; -text: .text%decode_mcu: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdhuff.o; +text: .text%decode_mcu: OUTPUTDIR/jdhuff.o; text: .text%jFilBitBuf; text: .text%jHufDecode; text: .text%jRDislow; -text: .text%sep_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%fullsize_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%h2v2_fancy_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdsample.o; -text: .text%ycc_rgb_convert: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdcolor.o; -# text: .text%set_wraparound_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; -#text: .text%process_restart: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdhuff.o; -text: .text%read_restart_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmarker.o; -text: .text%finish_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdinput.o; -# text: .text%set_bottom_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; +text: .text%sep_upsample: OUTPUTDIR/jdsample.o; +text: .text%fullsize_upsample: OUTPUTDIR/jdsample.o; +text: .text%h2v2_fancy_upsample: OUTPUTDIR/jdsample.o; +text: .text%ycc_rgb_convert: OUTPUTDIR/jdcolor.o; +# text: .text%set_wraparound_pointers: OUTPUTDIR/jdmainct.o; +#text: .text%process_restart: OUTPUTDIR/jdhuff.o; +text: .text%read_restart_marker: OUTPUTDIR/jdmarker.o; +text: .text%finish_input_pass: OUTPUTDIR/jdinput.o; +# text: .text%set_bottom_pointers: OUTPUTDIR/jdmainct.o; text: .text%jFinDecompress; -text: .text%finish_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmaster.o; +text: .text%finish_output_pass: OUTPUTDIR/jdmaster.o; text: .text%sun_jpeg_term_source; text: .text%jAbort; -text: .text%free_pool: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; +text: .text%free_pool: OUTPUTDIR/jmemmgr.o; text: .text%jFreeLarge; text: .text%jFreeSmall; text: .text%jDestDecompress; text: .text%jDestroy; -text: .text%self_destruct: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jmemmgr.o; +text: .text%self_destruct: OUTPUTDIR/jmemmgr.o; text: .text%jMemTerm; -text: .text%process_data_simple_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj/jdmainct.o; +text: .text%process_data_simple_main: OUTPUTDIR/jdmainct.o; diff --git a/jdk/makefiles/mapfiles/libjpeg/reorder-sparcv9 b/jdk/makefiles/mapfiles/libjpeg/reorder-sparcv9 index 3af1a21eb80..5c01872c381 100644 --- a/jdk/makefiles/mapfiles/libjpeg/reorder-sparcv9 +++ b/jdk/makefiles/mapfiles/libjpeg/reorder-sparcv9 @@ -19,101 +19,101 @@ text: .text%jIMemMgr; text: .text%jMemInit; text: .text%jGetSmall; text: .text%jIMReader; -text: .text%alloc_small: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jmemmgr.o; -text: .text%reset_marker_reader: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; +text: .text%alloc_small: OUTPUTDIR/jmemmgr.o; +text: .text%reset_marker_reader: OUTPUTDIR/jdmarker.o; text: .text%jIInCtlr; -text: .text%GET_ARRAYS: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jpegdecoder.o; +text: .text%GET_ARRAYS: OUTPUTDIR/jpegdecoder.o; text: .text%jReadHeader; text: .text%jConsumeInput; -text: .text%reset_input_controller: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdinput.o; -text: .text%reset_error_mgr: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jerror.o; +text: .text%reset_input_controller: OUTPUTDIR/jdinput.o; +text: .text%reset_error_mgr: OUTPUTDIR/jerror.o; text: .text%sun_jpeg_init_source; -text: .text%consume_markers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdinput.o; -text: .text%read_markers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -# text: .text%first_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; +text: .text%consume_markers: OUTPUTDIR/jdinput.o; +text: .text%read_markers: OUTPUTDIR/jdmarker.o; +# text: .text%first_marker: OUTPUTDIR/jdmarker.o; text: .text%sun_jpeg_fill_input_buffer; -text: .text%RELEASE_ARRAYS: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jpegdecoder.o; -# text: .text%get_soi: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%emit_message: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jerror.o; -text: .text%next_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%get_interesting_appn: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%examine_app0: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%skip_variable: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; +text: .text%RELEASE_ARRAYS: OUTPUTDIR/jpegdecoder.o; +# text: .text%get_soi: OUTPUTDIR/jdmarker.o; +text: .text%emit_message: OUTPUTDIR/jerror.o; +text: .text%next_marker: OUTPUTDIR/jdmarker.o; +text: .text%get_interesting_appn: OUTPUTDIR/jdmarker.o; +text: .text%examine_app0: OUTPUTDIR/jdmarker.o; +text: .text%skip_variable: OUTPUTDIR/jdmarker.o; text: .text%sun_jpeg_skip_input_data; -text: .text%examine_app14: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%get_dqt: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; +text: .text%examine_app14: OUTPUTDIR/jdmarker.o; +text: .text%get_dqt: OUTPUTDIR/jdmarker.o; text: .text%jAlcQTable; -text: .text%get_sof: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -# text: .text%get_dri: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%get_dht: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; +text: .text%get_sof: OUTPUTDIR/jdmarker.o; +# text: .text%get_dri: OUTPUTDIR/jdmarker.o; +text: .text%get_dht: OUTPUTDIR/jdmarker.o; text: .text%jAlcHTable; -text: .text%get_sos: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%initial_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdinput.o; +text: .text%get_sos: OUTPUTDIR/jdmarker.o; +text: .text%initial_setup: OUTPUTDIR/jdinput.o; text: .text%jDivRound; -text: .text%default_decompress_parms: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdapimin.o; +text: .text%default_decompress_parms: OUTPUTDIR/jdapimin.o; text: .text%jHasMultScn; text: .text%jStrtDecompress; text: .text%jIDMaster; -text: .text%master_selection: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmaster.o; +text: .text%master_selection: OUTPUTDIR/jdmaster.o; text: .text%jCalcDimensions; -# text: .text%use_merged_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmaster.o; -# text: .text%prepare_range_limit_table: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmaster.o; +# text: .text%use_merged_upsample: OUTPUTDIR/jdmaster.o; +# text: .text%prepare_range_limit_table: OUTPUTDIR/jdmaster.o; text: .text%jIDColor; -# text: .text%build_ycc_rgb_table: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdcolor.o; +# text: .text%build_ycc_rgb_table: OUTPUTDIR/jdcolor.o; text: .text%jIUpsampler; text: .text%jRound; -text: .text%alloc_sarray: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jmemmgr.o; -text: .text%alloc_large: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jmemmgr.o; +text: .text%alloc_sarray: OUTPUTDIR/jmemmgr.o; +text: .text%alloc_large: OUTPUTDIR/jmemmgr.o; text: .text%jGetLarge; text: .text%jIDPostC; text: .text%jIIDCT; text: .text%jIHDecoder; text: .text%jIDCoefC; text: .text%jIDMainC; -text: .text%alloc_funny_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmainct.o; -text: .text%realize_virt_arrays: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jmemmgr.o; -text: .text%start_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdinput.o; -text: .text%per_scan_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdinput.o; -text: .text%latch_quant_tables: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdinput.o; -text: .text%start_pass_huff_decoder: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdhuff.o; +text: .text%alloc_funny_pointers: OUTPUTDIR/jdmainct.o; +text: .text%realize_virt_arrays: OUTPUTDIR/jmemmgr.o; +text: .text%start_input_pass: OUTPUTDIR/jdinput.o; +text: .text%per_scan_setup: OUTPUTDIR/jdinput.o; +text: .text%latch_quant_tables: OUTPUTDIR/jdinput.o; +text: .text%start_pass_huff_decoder: OUTPUTDIR/jdhuff.o; text: .text%jMkDDerived; -text: .text%start_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdcoefct.o; -# text: .text%start_iMCU_row: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdcoefct.o; -text: .text%output_pass_setup: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdapistd.o; -text: .text%prepare_for_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmaster.o; -text: .text%start_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jddctmgr.o; -text: .text%start_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdcoefct.o; -text: .text%start_pass_dcolor: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdcolor.o; -text: .text%start_pass_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdsample.o; -text: .text%start_pass_dpost: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdpostct.o; -text: .text%start_pass_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmainct.o; -text: .text%make_funny_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmainct.o; +text: .text%start_input_pass: OUTPUTDIR/jdcoefct.o; +# text: .text%start_iMCU_row: OUTPUTDIR/jdcoefct.o; +text: .text%output_pass_setup: OUTPUTDIR/jdapistd.o; +text: .text%prepare_for_output_pass: OUTPUTDIR/jdmaster.o; +text: .text%start_pass: OUTPUTDIR/jddctmgr.o; +text: .text%start_output_pass: OUTPUTDIR/jdcoefct.o; +text: .text%start_pass_dcolor: OUTPUTDIR/jdcolor.o; +text: .text%start_pass_upsample: OUTPUTDIR/jdsample.o; +text: .text%start_pass_dpost: OUTPUTDIR/jdpostct.o; +text: .text%start_pass_main: OUTPUTDIR/jdmainct.o; +text: .text%make_funny_pointers: OUTPUTDIR/jdmainct.o; text: .text%jReadScanlines; -text: .text%process_data_context_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmainct.o; -text: .text%decompress_onepass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdcoefct.o; +text: .text%process_data_context_main: OUTPUTDIR/jdmainct.o; +text: .text%decompress_onepass: OUTPUTDIR/jdcoefct.o; text: .text%jZeroFar; -text: .text%decode_mcu: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdhuff.o; +text: .text%decode_mcu: OUTPUTDIR/jdhuff.o; text: .text%jFilBitBuf; text: .text%jHufDecode; text: .text%jRDislow; -text: .text%sep_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdsample.o; -text: .text%fullsize_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdsample.o; -text: .text%h2v2_fancy_upsample: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdsample.o; -text: .text%ycc_rgb_convert: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdcolor.o; -# text: .text%set_wraparound_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmainct.o; -text: .text%process_restart: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdhuff.o; -text: .text%read_restart_marker: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmarker.o; -text: .text%finish_input_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdinput.o; -# text: .text%set_bottom_pointers: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmainct.o; +text: .text%sep_upsample: OUTPUTDIR/jdsample.o; +text: .text%fullsize_upsample: OUTPUTDIR/jdsample.o; +text: .text%h2v2_fancy_upsample: OUTPUTDIR/jdsample.o; +text: .text%ycc_rgb_convert: OUTPUTDIR/jdcolor.o; +# text: .text%set_wraparound_pointers: OUTPUTDIR/jdmainct.o; +text: .text%process_restart: OUTPUTDIR/jdhuff.o; +text: .text%read_restart_marker: OUTPUTDIR/jdmarker.o; +text: .text%finish_input_pass: OUTPUTDIR/jdinput.o; +# text: .text%set_bottom_pointers: OUTPUTDIR/jdmainct.o; text: .text%jFinDecompress; -text: .text%finish_output_pass: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmaster.o; +text: .text%finish_output_pass: OUTPUTDIR/jdmaster.o; text: .text%sun_jpeg_term_source; text: .text%jAbort; -text: .text%free_pool: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jmemmgr.o; +text: .text%free_pool: OUTPUTDIR/jmemmgr.o; text: .text%jFreeLarge; text: .text%jFreeSmall; text: .text%jDestDecompress; text: .text%jDestroy; -text: .text%self_destruct: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jmemmgr.o; +text: .text%self_destruct: OUTPUTDIR/jmemmgr.o; text: .text%jMemTerm; -text: .text%process_data_simple_main: OUTPUTDIR/tmp/sun/sun.awt/jpeg/obj64/jdmainct.o; +text: .text%process_data_simple_main: OUTPUTDIR/jdmainct.o; diff --git a/jdk/makefiles/javax/sound/mapfile-vers b/jdk/makefiles/mapfiles/libjsound/mapfile-vers similarity index 100% rename from jdk/makefiles/javax/sound/mapfile-vers rename to jdk/makefiles/mapfiles/libjsound/mapfile-vers diff --git a/jdk/makefiles/javax/sound/jsoundalsa/mapfile-vers b/jdk/makefiles/mapfiles/libjsoundalsa/mapfile-vers similarity index 100% rename from jdk/makefiles/javax/sound/jsoundalsa/mapfile-vers rename to jdk/makefiles/mapfiles/libjsoundalsa/mapfile-vers diff --git a/jdk/makefiles/sun/cmm/kcms/mapfile-vers b/jdk/makefiles/mapfiles/libkcms/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/cmm/kcms/mapfile-vers rename to jdk/makefiles/mapfiles/libkcms/mapfile-vers diff --git a/jdk/makefiles/java/management/mapfile-vers b/jdk/makefiles/mapfiles/libmanagement/mapfile-vers similarity index 100% rename from jdk/makefiles/java/management/mapfile-vers rename to jdk/makefiles/mapfiles/libmanagement/mapfile-vers diff --git a/jdk/makefiles/sun/image/generic/mapfile-vers b/jdk/makefiles/mapfiles/libmlib_image/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/image/generic/mapfile-vers rename to jdk/makefiles/mapfiles/libmlib_image/mapfile-vers diff --git a/jdk/makefiles/java/net/mapfile-vers b/jdk/makefiles/mapfiles/libnet/mapfile-vers similarity index 100% rename from jdk/makefiles/java/net/mapfile-vers rename to jdk/makefiles/mapfiles/libnet/mapfile-vers diff --git a/jdk/makefiles/java/nio/mapfile-bsd b/jdk/makefiles/mapfiles/libnio/mapfile-bsd similarity index 100% rename from jdk/makefiles/java/nio/mapfile-bsd rename to jdk/makefiles/mapfiles/libnio/mapfile-bsd diff --git a/jdk/makefiles/java/nio/mapfile-linux b/jdk/makefiles/mapfiles/libnio/mapfile-linux similarity index 99% rename from jdk/makefiles/java/nio/mapfile-linux rename to jdk/makefiles/mapfiles/libnio/mapfile-linux index d72244170b9..63c9cbf1443 100644 --- a/jdk/makefiles/java/nio/mapfile-linux +++ b/jdk/makefiles/mapfiles/libnio/mapfile-linux @@ -39,7 +39,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_EPollArrayWrapper_epollCreate; Java_sun_nio_ch_EPollArrayWrapper_epollCtl; Java_sun_nio_ch_EPollArrayWrapper_epollWait; - Java_sun_nio_ch_EPollArrayWrapper_fdLimit; Java_sun_nio_ch_EPollArrayWrapper_init; Java_sun_nio_ch_EPollArrayWrapper_interrupt; Java_sun_nio_ch_EPollArrayWrapper_offsetofData; @@ -87,7 +86,9 @@ SUNWprivate_1.1 { Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; Java_sun_nio_ch_IOUtil_fdVal; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; diff --git a/jdk/makefiles/java/nio/mapfile-solaris b/jdk/makefiles/mapfiles/libnio/mapfile-solaris similarity index 95% rename from jdk/makefiles/java/nio/mapfile-solaris rename to jdk/makefiles/mapfiles/libnio/mapfile-solaris index 4d86f28a566..5a4908e1f6d 100644 --- a/jdk/makefiles/java/nio/mapfile-solaris +++ b/jdk/makefiles/mapfiles/libnio/mapfile-solaris @@ -36,7 +36,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_DatagramDispatcher_readv0; Java_sun_nio_ch_DatagramDispatcher_write0; Java_sun_nio_ch_DatagramDispatcher_writev0; - Java_sun_nio_ch_DevPollArrayWrapper_fdLimit; Java_sun_nio_ch_DevPollArrayWrapper_init; Java_sun_nio_ch_DevPollArrayWrapper_interrupt; Java_sun_nio_ch_DevPollArrayWrapper_poll0; @@ -74,8 +73,10 @@ SUNWprivate_1.1 { Java_sun_nio_ch_InheritedChannel_soType0; Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_fdVal; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; @@ -112,13 +113,13 @@ SUNWprivate_1.1 { Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs; Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect; - Java_sun_nio_ch_SolarisEventPort_init; - Java_sun_nio_ch_SolarisEventPort_portCreate; - Java_sun_nio_ch_SolarisEventPort_portClose; - Java_sun_nio_ch_SolarisEventPort_portAssociate; - Java_sun_nio_ch_SolarisEventPort_portGet; - Java_sun_nio_ch_SolarisEventPort_portGetn; - Java_sun_nio_ch_SolarisEventPort_portSend; + Java_sun_nio_ch_SolarisEventPort_port_1create; + Java_sun_nio_ch_SolarisEventPort_port_1close; + Java_sun_nio_ch_SolarisEventPort_port_1associate; + Java_sun_nio_ch_SolarisEventPort_port_1dissociate; + Java_sun_nio_ch_SolarisEventPort_port_1get; + Java_sun_nio_ch_SolarisEventPort_port_1getn; + Java_sun_nio_ch_SolarisEventPort_port_1send; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGio; Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGio; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGnomeVfs; diff --git a/jdk/makefiles/java/nio/reorder-i586 b/jdk/makefiles/mapfiles/libnio/reorder-i586 similarity index 100% rename from jdk/makefiles/java/nio/reorder-i586 rename to jdk/makefiles/mapfiles/libnio/reorder-i586 diff --git a/jdk/makefiles/java/nio/reorder-sparc b/jdk/makefiles/mapfiles/libnio/reorder-sparc similarity index 100% rename from jdk/makefiles/java/nio/reorder-sparc rename to jdk/makefiles/mapfiles/libnio/reorder-sparc diff --git a/jdk/makefiles/java/nio/reorder-sparcv9 b/jdk/makefiles/mapfiles/libnio/reorder-sparcv9 similarity index 100% rename from jdk/makefiles/java/nio/reorder-sparcv9 rename to jdk/makefiles/mapfiles/libnio/reorder-sparcv9 diff --git a/jdk/makefiles/java/npt/mapfile-vers b/jdk/makefiles/mapfiles/libnpt/mapfile-vers similarity index 100% rename from jdk/makefiles/java/npt/mapfile-vers rename to jdk/makefiles/mapfiles/libnpt/mapfile-vers diff --git a/jdk/makefiles/sun/splashscreen/mapfile-vers b/jdk/makefiles/mapfiles/libsplashscreen/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/splashscreen/mapfile-vers rename to jdk/makefiles/mapfiles/libsplashscreen/mapfile-vers diff --git a/jdk/makefiles/sun/security/ec/mapfile-vers b/jdk/makefiles/mapfiles/libsunec/mapfile-vers similarity index 100% rename from jdk/makefiles/sun/security/ec/mapfile-vers rename to jdk/makefiles/mapfiles/libsunec/mapfile-vers diff --git a/jdk/makefiles/mapfiles/libverify/reorder-i586 b/jdk/makefiles/mapfiles/libverify/reorder-i586 index 56ee8e378d7..72f02543150 100644 --- a/jdk/makefiles/mapfiles/libverify/reorder-i586 +++ b/jdk/makefiles/mapfiles/libverify/reorder-i586 @@ -3,38 +3,38 @@ text = LOAD ?RXO; # Test Null text: .text%VerifyFixClassname; text: .text%VerifyClassname; -text: .text%skip_over_fieldname: OUTPUTDIR/tmp/java/verify/obj/check_format.o; -text: .text%skip_over_field_signature: OUTPUTDIR/tmp/java/verify/obj/check_format.o; +text: .text%skip_over_fieldname: OUTPUTDIR/check_format.o; +text: .text%skip_over_field_signature: OUTPUTDIR/check_format.o; text: .text%VerifyClass; -text: .text%make_class_info_from_name: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%class_name_to_ID: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%make_class_info: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%free_block: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_method: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_opcode_operands: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%initialize_dataflow: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%signature_to_fieldtype: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%check_register_values: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%pop_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%update_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%push_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_successors: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%set_protected: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_one_successor: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%make_class_info_from_name: OUTPUTDIR/check_code.o; +text: .text%class_name_to_ID: OUTPUTDIR/check_code.o; +text: .text%make_class_info: OUTPUTDIR/check_code.o; +text: .text%free_block: OUTPUTDIR/check_code.o; +text: .text%verify_method: OUTPUTDIR/check_code.o; +text: .text%verify_opcode_operands: OUTPUTDIR/check_code.o; +text: .text%initialize_dataflow: OUTPUTDIR/check_code.o; +text: .text%signature_to_fieldtype: OUTPUTDIR/check_code.o; +text: .text%check_register_values: OUTPUTDIR/check_code.o; +text: .text%pop_stack: OUTPUTDIR/check_code.o; +text: .text%update_registers: OUTPUTDIR/check_code.o; +text: .text%push_stack: OUTPUTDIR/check_code.o; +text: .text%merge_into_successors: OUTPUTDIR/check_code.o; +text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/check_code.o; +text: .text%set_protected: OUTPUTDIR/check_code.o; +text: .text%merge_into_one_successor: OUTPUTDIR/check_code.o; +text: .text%merge_registers: OUTPUTDIR/check_code.o; # Test Exit # Test Hello -text: .text%merge_fullinfo_types: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%isAssignableTo: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%merge_fullinfo_types: OUTPUTDIR/check_code.o; +text: .text%isAssignableTo: OUTPUTDIR/check_code.o; # Test Sleep -text: .text%isLegalTarget: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_constant_pool_type: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%isLegalTarget: OUTPUTDIR/check_code.o; +text: .text%verify_constant_pool_type: OUTPUTDIR/check_code.o; # Test IntToString # Test LoadToolkit # Test LoadFrame # Test LoadJFrame # Test JHello # SwingSet -text: .text%copy_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%ntohl: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%copy_stack: OUTPUTDIR/check_code.o; +text: .text%ntohl: OUTPUTDIR/check_code.o; diff --git a/jdk/makefiles/mapfiles/libverify/reorder-sparc b/jdk/makefiles/mapfiles/libverify/reorder-sparc index 17e13469dcd..58056cfe1a6 100644 --- a/jdk/makefiles/mapfiles/libverify/reorder-sparc +++ b/jdk/makefiles/mapfiles/libverify/reorder-sparc @@ -3,42 +3,42 @@ text = LOAD ?RXO; # Test Null text: .text%VerifyFixClassname; text: .text%VerifyClassname; -text: .text%skip_over_fieldname: OUTPUTDIR/tmp/java/verify/obj/check_format.o; +text: .text%skip_over_fieldname: OUTPUTDIR/check_format.o; text: .text%VerifyClass; -text: .text%CCinit: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%CCinit: OUTPUTDIR/check_code.o; text: .text%initialize_class_hash; -text: .text%make_class_info_from_name: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%make_class_info: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_method: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%instruction_length: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%verify_opcode_operands: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%initialize_exception_table: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%initialize_dataflow: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%signature_to_fieldtype: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%check_register_values: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%pop_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%update_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%push_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_successors: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%pop_and_free: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%set_protected: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_into_one_successor: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_stack: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%merge_registers: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%finalize_class_hash: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%CCdestroy: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%make_class_info_from_name: OUTPUTDIR/check_code.o; +text: .text%make_class_info: OUTPUTDIR/check_code.o; +text: .text%verify_method: OUTPUTDIR/check_code.o; +text: .text%instruction_length: OUTPUTDIR/check_code.o; +text: .text%verify_opcode_operands: OUTPUTDIR/check_code.o; +text: .text%initialize_exception_table: OUTPUTDIR/check_code.o; +text: .text%initialize_dataflow: OUTPUTDIR/check_code.o; +text: .text%signature_to_fieldtype: OUTPUTDIR/check_code.o; +text: .text%check_register_values: OUTPUTDIR/check_code.o; +text: .text%pop_stack: OUTPUTDIR/check_code.o; +text: .text%update_registers: OUTPUTDIR/check_code.o; +text: .text%push_stack: OUTPUTDIR/check_code.o; +text: .text%merge_into_successors: OUTPUTDIR/check_code.o; +text: .text%pop_and_free: OUTPUTDIR/check_code.o; +text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/check_code.o; +text: .text%set_protected: OUTPUTDIR/check_code.o; +text: .text%merge_into_one_successor: OUTPUTDIR/check_code.o; +text: .text%merge_stack: OUTPUTDIR/check_code.o; +text: .text%merge_registers: OUTPUTDIR/check_code.o; +text: .text%finalize_class_hash: OUTPUTDIR/check_code.o; +text: .text%CCdestroy: OUTPUTDIR/check_code.o; # Test Exit # Test Hello -text: .text%merge_fullinfo_types: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%merge_fullinfo_types: OUTPUTDIR/check_code.o; # Test Sleep # Test IntToString # Test LoadToolkit # Test LoadFrame -text: .text%verify_constant_pool_type: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%verify_constant_pool_type: OUTPUTDIR/check_code.o; # Test LoadJFrame # Test JHello # SwingSet -text: .text%verify_field: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%check_and_push: OUTPUTDIR/tmp/java/verify/obj/check_code.o; -text: .text%signature_to_args_size: OUTPUTDIR/tmp/java/verify/obj/check_code.o; +text: .text%verify_field: OUTPUTDIR/check_code.o; +text: .text%check_and_push: OUTPUTDIR/check_code.o; +text: .text%signature_to_args_size: OUTPUTDIR/check_code.o; diff --git a/jdk/makefiles/mapfiles/libverify/reorder-sparcv9 b/jdk/makefiles/mapfiles/libverify/reorder-sparcv9 index 1f58d56cda3..c0185f66769 100644 --- a/jdk/makefiles/mapfiles/libverify/reorder-sparcv9 +++ b/jdk/makefiles/mapfiles/libverify/reorder-sparcv9 @@ -2,36 +2,36 @@ data = R0x2000; text = LOAD ?RXO; # Test Null text: .text%VerifyFixClassname; -text: .text%next_utf2unicode: OUTPUTDIR/tmp/java/verify/obj64/check_format.o; +text: .text%next_utf2unicode: OUTPUTDIR/check_format.o; text: .text%VerifyClassname; -text: .text%skip_over_fieldname: OUTPUTDIR/tmp/java/verify/obj64/check_format.o; +text: .text%skip_over_fieldname: OUTPUTDIR/check_format.o; text: .text%VerifyClass; -text: .text%CCinit: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; +text: .text%CCinit: OUTPUTDIR/check_code.o; text: .text%initialize_class_hash; -text: .text%make_class_info_from_name: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%make_class_info: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%verify_method: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%instruction_length: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%verify_opcode_operands: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%verify_constant_pool_type: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%check_and_push: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%pop_and_free: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%set_protected: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%initialize_exception_table: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_fullinfo_types: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%initialize_dataflow: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%signature_to_fieldtype: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%check_register_values: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%pop_stack: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%update_registers: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%push_stack: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_into_successors: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_into_one_successor: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_stack: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%merge_registers: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%finalize_class_hash: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%CCdestroy: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; +text: .text%make_class_info_from_name: OUTPUTDIR/check_code.o; +text: .text%make_class_info: OUTPUTDIR/check_code.o; +text: .text%verify_method: OUTPUTDIR/check_code.o; +text: .text%instruction_length: OUTPUTDIR/check_code.o; +text: .text%verify_opcode_operands: OUTPUTDIR/check_code.o; +text: .text%verify_constant_pool_type: OUTPUTDIR/check_code.o; +text: .text%cp_index_to_class_fullinfo: OUTPUTDIR/check_code.o; +text: .text%check_and_push: OUTPUTDIR/check_code.o; +text: .text%pop_and_free: OUTPUTDIR/check_code.o; +text: .text%set_protected: OUTPUTDIR/check_code.o; +text: .text%initialize_exception_table: OUTPUTDIR/check_code.o; +text: .text%merge_fullinfo_types: OUTPUTDIR/check_code.o; +text: .text%initialize_dataflow: OUTPUTDIR/check_code.o; +text: .text%signature_to_fieldtype: OUTPUTDIR/check_code.o; +text: .text%check_register_values: OUTPUTDIR/check_code.o; +text: .text%pop_stack: OUTPUTDIR/check_code.o; +text: .text%update_registers: OUTPUTDIR/check_code.o; +text: .text%push_stack: OUTPUTDIR/check_code.o; +text: .text%merge_into_successors: OUTPUTDIR/check_code.o; +text: .text%merge_into_one_successor: OUTPUTDIR/check_code.o; +text: .text%merge_stack: OUTPUTDIR/check_code.o; +text: .text%merge_registers: OUTPUTDIR/check_code.o; +text: .text%finalize_class_hash: OUTPUTDIR/check_code.o; +text: .text%CCdestroy: OUTPUTDIR/check_code.o; # Test Exit # Test Hello # Test Sleep @@ -41,5 +41,5 @@ text: .text%CCdestroy: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; # Test LoadJFrame # Test JHello # SwingSet -text: .text%verify_field: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; -text: .text%signature_to_args_size: OUTPUTDIR/tmp/java/verify/obj64/check_code.o; +text: .text%verify_field: OUTPUTDIR/check_code.o; +text: .text%signature_to_args_size: OUTPUTDIR/check_code.o; diff --git a/jdk/makefiles/mapfiles/libzip/reorder-i586 b/jdk/makefiles/mapfiles/libzip/reorder-i586 index ee717ff2f26..16bc0de9367 100644 --- a/jdk/makefiles/mapfiles/libzip/reorder-i586 +++ b/jdk/makefiles/mapfiles/libzip/reorder-i586 @@ -5,15 +5,15 @@ text: .text%ZIP_Open; text: .text%ZIP_Open_Generic; text: .text%InitializeZip; text: .text%allocZip; -text: .text%readCEN: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%findEND: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%hash: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%isMetaName: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%addMetaName: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; +text: .text%readCEN: OUTPUTDIR/zip_util.o; +text: .text%findEND: OUTPUTDIR/zip_util.o; +text: .text%hash: OUTPUTDIR/zip_util.o; +text: .text%isMetaName: OUTPUTDIR/zip_util.o; +text: .text%addMetaName: OUTPUTDIR/zip_util.o; text: .text%ZIP_FindEntry; text: .text%ZIP_GetEntry; text: .text%ZIP_Lock; -text: .text%readLOC: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; +text: .text%readLOC: OUTPUTDIR/zip_util.o; text: .text%ZIP_Unlock; text: .text%ZIP_FreeEntry; text: .text%Java_java_util_zip_ZipFile_initIDs; @@ -37,7 +37,7 @@ text: .text%Java_java_util_zip_Inflater_inflateBytes; text: .text%inflate; text: .text%Java_java_util_zip_ZipFile_read; text: .text%ZIP_Read; -text: .text%huft_build: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/inftrees.o; +text: .text%huft_build: OUTPUTDIR/inftrees.o; text: .text%zcfree; text: .text%Java_java_util_jar_JarFile_getMetaInfEntryNames; text: .text%ZIP_ReadEntry; diff --git a/jdk/makefiles/mapfiles/libzip/reorder-sparc b/jdk/makefiles/mapfiles/libzip/reorder-sparc index 176c7709e49..df4ea6db1f7 100644 --- a/jdk/makefiles/mapfiles/libzip/reorder-sparc +++ b/jdk/makefiles/mapfiles/libzip/reorder-sparc @@ -5,11 +5,11 @@ text: .text%ZIP_Open; text: .text%ZIP_Open_Generic; text: .text%InitializeZip; text: .text%allocZip; -text: .text%readCEN: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%findEND: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%hash: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%isMetaName: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; -text: .text%addMetaName: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj/zip_util.o; +text: .text%readCEN: OUTPUTDIR/zip_util.o; +text: .text%findEND: OUTPUTDIR/zip_util.o; +text: .text%hash: OUTPUTDIR/zip_util.o; +text: .text%isMetaName: OUTPUTDIR/zip_util.o; +text: .text%addMetaName: OUTPUTDIR/zip_util.o; text: .text%ZIP_FindEntry; text: .text%ZIP_GetEntry; text: .text%ZIP_Lock; diff --git a/jdk/makefiles/mapfiles/libzip/reorder-sparcv9 b/jdk/makefiles/mapfiles/libzip/reorder-sparcv9 index bf2d983ed19..f5c24f29fd2 100644 --- a/jdk/makefiles/mapfiles/libzip/reorder-sparcv9 +++ b/jdk/makefiles/mapfiles/libzip/reorder-sparcv9 @@ -4,15 +4,15 @@ text: .text%ZIP_Open; text: .text%ZIP_Open_Generic; text: .text%InitializeZip; text: .text%allocZip; -text: .text%readCEN: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj64/zip_util.o; -text: .text%findEND: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj64/zip_util.o; -text: .text%hash: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj64/zip_util.o; -text: .text%isMetaName: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj64/zip_util.o; -text: .text%addMetaName: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj64/zip_util.o; +text: .text%readCEN: OUTPUTDIR/zip_util.o; +text: .text%findEND: OUTPUTDIR/zip_util.o; +text: .text%hash: OUTPUTDIR/zip_util.o; +text: .text%isMetaName: OUTPUTDIR/zip_util.o; +text: .text%addMetaName: OUTPUTDIR/zip_util.o; text: .text%ZIP_FindEntry; text: .text%ZIP_GetEntry; text: .text%ZIP_Lock; -text: .text%readLOC: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj64/zip_util.o; +text: .text%readLOC: OUTPUTDIR/zip_util.o; text: .text%ZIP_Unlock; text: .text%ZIP_FreeEntry; text: .text%Java_java_util_zip_ZipFile_initIDs; @@ -36,7 +36,7 @@ text: .text%Java_java_util_zip_Inflater_inflateBytes; text: .text%inflate; text: .text%Java_java_util_zip_ZipFile_read; text: .text%ZIP_Read; -text: .text%huft_build: OUTPUTDIR/tmp/sun/java.util.zip/zip/obj64/inftrees.o; +text: .text%huft_build: OUTPUTDIR/inftrees.o; text: .text%zcfree; text: .text%Java_java_util_jar_JarFile_getMetaInfEntryNames; text: .text%ZIP_ReadEntry; diff --git a/jdk/makefiles/mkdemo/Makefile b/jdk/makefiles/mkdemo/Makefile deleted file mode 100644 index 4cbe431a884..00000000000 --- a/jdk/makefiles/mkdemo/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all the demos -# - -BUILDDIR = .. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = jni -SUBDIRS_desktop = -SUBDIRS_management = -SUBDIRS_misc = -SUBDIRS_tools = jvmti - -include $(BUILDDIR)/common/Subdirs.gmk - -TOPLEVEL_FILES = \ - $(DEMODIR)/README - -all build:: nbproject - $(SUBDIRS-loop) - -all build:: $(TOPLEVEL_FILES) - -nbproject: - $(RM) -r $(DEMODIR)/nbproject - $(MKDIR) -p $(DEMODIR) - ( $(CD) $(SHARE_SRC)/demo && $(TAR) -cf - \ - `$(FIND) nbproject $(SCM_DIRS_prune) -o -type f -print` ) | \ - ( $(CD) $(DEMODIR) && $(TAR) -xf - ) -ifndef OPENJDK - ( $(CD) $(CLOSED_SHARE_SRC)/demo && $(TAR) -cf - \ - `$(FIND) nbproject $(SCM_DIRS_prune) -o -type f -print` ) | \ - ( $(CD) $(DEMODIR) && $(TAR) -xf - ) -endif - -$(DEMODIR)/%: $(DEMOSRCDIR)/% - $(install-file) - -clean clobber:: - $(SUBDIRS-loop) - $(RM) -r $(DEMODIR) - $(RM) -r $(DEMOCLASSDIR) diff --git a/jdk/makefiles/mkdemo/jni/Poller/Makefile b/jdk/makefiles/mkdemo/jni/Poller/Makefile deleted file mode 100644 index baf23e39c8d..00000000000 --- a/jdk/makefiles/mkdemo/jni/Poller/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Build Poller class demo. -# - -BUILDDIR = ../../.. -PRODUCT = demo/jni -DEMONAME = Poller -include $(BUILDDIR)/common/Defs.gmk - -DEMO_ROOT = $(PLATFORM_SRC)/demo/jni/$(DEMONAME) -DEMO_TOPFILES = ./README.txt -DEMO_MAINCLASS = Client -DEMO_NATIVECLASS= $(DEMONAME) -DEMO_DESTDIR = $(DEMODIR)/jni/$(DEMONAME) - -# -# Demo jar building rules. -# -include $(BUILDDIR)/common/Demo.gmk - diff --git a/jdk/makefiles/mkdemo/jvmti/Makefile b/jdk/makefiles/mkdemo/jvmti/Makefile deleted file mode 100644 index 88434cf464e..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building the jvmti demo(s) -# - -BUILDDIR = ../.. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -# Can be built in any order, the JRE version of hprof and java_crw_demo are -# really built in make/java. -# The hprof target here just delivers the sources and README files. -# The java_crw_demo and agent_util files are copied into each demo that -# uses them. -SUBDIRS = \ - hprof - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - -all build :: $(DEMODIR)/jvmti/index.html - -$(DEMODIR)/jvmti/index.html: $(SHARE_SRC)/demo/jvmti/index.html - $(install-file) - diff --git a/jdk/makefiles/mkdemo/jvmti/README.txt b/jdk/makefiles/mkdemo/jvmti/README.txt deleted file mode 100644 index 99e2a8f021d..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/README.txt +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -Instructions on adding a jvmti demo agent. - -Basically you want to mimic the jvmti demo agent "mtrace". - -* Create and populate a source directory at src/share/demo/jvmti - (Try and re-use code in agent_util area like src/share/demo/jvmti/mtrace) - (This should include a small README.txt document on what this demo is) - -* Make sure the appropriate "demo" copyright notice is added to all the - source files. - -* Edit src/share/demo/jvmti/index.html and add in reference to this demo. - -* Create make directory at make/mkdemo/jvmti - (Mimic make/mkdemo/jvmti/mtrace/Makefile) - -* Edit make/mkdemo/jvmti/Makefile and add in the new demo - -* Create test directory at test/demo/jvmti, create at least one test - (Use test/demo/jvmti/mtrace as a template) - -* Don't forget to check in all the new files - -* Build and create images (cd make && gnumake && gnumake images) - (Do this on Solaris, Linux, and at least one Windows platform) - -* Verify that browsing build/*/j2sdk-images/demo/jvmti looks right - -* Run the tests: cd test/demo/jvmti && runregress . - (Do this on Solaris, Linux, and at least one Windows platform) - -Contact: serviceability-dev@openjdk.java.net for more information or help. - diff --git a/jdk/makefiles/mkdemo/jvmti/hprof/Makefile b/jdk/makefiles/mkdemo/jvmti/hprof/Makefile deleted file mode 100644 index e2529192a8e..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/hprof/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PRODUCT = demo/jvmti -DEMONAME = hprof -include $(BUILDDIR)/common/Defs.gmk - -DEMO_ROOT = $(SHARE_SRC)/demo/jvmti/$(DEMONAME) -DEMO_TOPFILES = ./README.txt -DEMO_PSRCDIR = $(PLATFORM_SRC)/demo/jvmti/$(DEMONAME) -DEMO_DESTDIR = $(DEMODIR)/jvmti/$(DEMONAME) - -DEMO_OBJECTS = java_crw_demo.$(OBJECT_SUFFIX) - -ifeq ($(PLATFORM), windows) - EXTRA_LIBS += wsock32.lib winmm.lib -endif -ifeq ($(PLATFORM), solaris) - OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -endif -ifeq ($(PLATFORM), linux) - OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -lpthread -endif - -# -# Demo jar building rules. -# -include $(BUILDDIR)/common/Demo.gmk - diff --git a/jdk/makefiles/mkdemo/jvmti/mapfile-vers b/jdk/makefiles/mkdemo/jvmti/mapfile-vers deleted file mode 100644 index 5d5740463bc..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/mapfile-vers +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Define public interface for a Java JVMTI agent library (Solaris & Linux). - -SUNWprivate_1.1 { - global: - Agent_OnLoad; - Agent_OnUnload; - local: - *; -}; diff --git a/jdk/makefiles/mkdemo/management/README.txt b/jdk/makefiles/mkdemo/management/README.txt deleted file mode 100644 index ab667a17078..00000000000 --- a/jdk/makefiles/mkdemo/management/README.txt +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -Instructions on adding a java.lang.management demo. - -Basically you want to mimic the java.lang.management demo "FullThreadDump". - -* Create and populate a source directory at src/demo/management - (This should include a small README.txt document on what this demo is) - -* Make sure the appropriate "demo" copyright notice is added to all the - source files. - -* Edit src/share/demo/management/index.html and add in reference to this demo. - -* Create make directory at make/mkdemo/management - (Mimic make/mkdemo/management/FullThreadDump/Makefile) - -* Edit make/mkdemo/management/Makefile and add in the new demo - -* Create test directory at test/demo/management, create at least one test - (Use test/demo/management/FullThreadDump as a template) - -* Don't forget to put all files under SCM control - -* Build and create images (cd make && gnumake && gnumake images) - (Do this on Solaris, Linux, and at least one Windows platform) - -* Verify that browsing build/*/j2sdk-images/demo/management looks right - -* Run the tests: cd test/demo/management && runregress . - (Do this on Solaris, Linux, and at least one Windows platform) - -Contact: jk-svc-group@sun.com for more information or help. - diff --git a/jdk/makefiles/java/nio/addNotices.sh b/jdk/makefiles/scripts/addNotices.sh similarity index 100% rename from jdk/makefiles/java/nio/addNotices.sh rename to jdk/makefiles/scripts/addNotices.sh diff --git a/jdk/makefiles/java/nio/genCharsetProvider.sh b/jdk/makefiles/scripts/genCharsetProvider.sh similarity index 98% rename from jdk/makefiles/java/nio/genCharsetProvider.sh rename to jdk/makefiles/scripts/genCharsetProvider.sh index 1b0fe1aac57..ca7a2dad85f 100644 --- a/jdk/makefiles/java/nio/genCharsetProvider.sh +++ b/jdk/makefiles/scripts/genCharsetProvider.sh @@ -48,7 +48,7 @@ echo '-->' $OUT # Header # -$SH ./addNotices.sh "$COPYRIGHT_YEARS" > $OUT +$SH ${SCRIPTS}/addNotices.sh "$COPYRIGHT_YEARS" > $OUT cat <<__END__ >>$OUT diff --git a/jdk/makefiles/java/nio/genExceptions.sh b/jdk/makefiles/scripts/genExceptions.sh similarity index 97% rename from jdk/makefiles/java/nio/genExceptions.sh rename to jdk/makefiles/scripts/genExceptions.sh index 9839282bdd2..b3f653d7f7e 100644 --- a/jdk/makefiles/java/nio/genExceptions.sh +++ b/jdk/makefiles/scripts/genExceptions.sh @@ -41,7 +41,7 @@ gen() { echo '-->' $DST/$ID.java out=$DST/${ID}.java - $SH ./addNotices.sh "$COPYRIGHT_YEARS" > $out + $SH ${SCRIPTS}/addNotices.sh "$COPYRIGHT_YEARS" > $out cat >>$out <<__END__ diff --git a/jdk/makefiles/java/java/localelist.sh b/jdk/makefiles/scripts/localelist.sh similarity index 100% rename from jdk/makefiles/java/java/localelist.sh rename to jdk/makefiles/scripts/localelist.sh diff --git a/jdk/makefiles/sun/Makefile b/jdk/makefiles/sun/Makefile deleted file mode 100644 index fc4ea995515..00000000000 --- a/jdk/makefiles/sun/Makefile +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all of sun tools -# - -BUILDDIR = .. -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# Rhino/Mozilla java sources -ORG_EXISTS := $(call DirExists,$(CLOSED_SRC)/share/classes/sun/org,,) -ifneq ("$(ORG_EXISTS)", "") - ORG_SUBDIR = org -endif - -# Non windows subdirs -ifneq ($(PLATFORM), windows) - ifndef OPENJDK - ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - # Solaris 11 does not have support for new compilation of DGA code. - OS_VERSION = $(shell uname -r) - OS_MAJOR_VERSION := $(call MajorVersion,$(OS_VERSION)) - OS_MINOR_VERSION := $(call MinorVersion,$(OS_VERSION)) - ifeq ($(shell $(EXPR) $(OS_MAJOR_VERSION) == 5), 1) - ifeq ($(shell $(EXPR) $(OS_MINOR_VERSION) \<= 10), 1) - DGA_SUBDIR = jdga - endif - endif - endif - endif - endif - HEADLESS_SUBDIR = headless - XAWT_SUBDIR = xawt -endif - -ifeq ($(PLATFORM), macosx) - LWAWT_PRE_SUBDIR = osxapp - LWAWT_SUBDIR = lwawt -endif - -ifndef OPENJDK -ifneq ($(PLATFORM), macosx) - JDBC_SUBDIR = jdbc -endif -endif - -ifdef OPENJDK -else - RENDER_SUBDIR = dcpr -endif - -# nio need to be compiled before awt to have all charsets ready -SUBDIRS = security javazic nio - -ifdef BUILD_HEADLESS_ONLY - DISPLAY_LIBS = awt $(HEADLESS_SUBDIR) - DISPLAY_TOOLS = -else - DISPLAY_LIBS = awt splashscreen $(XAWT_SUBDIR) $(HEADLESS_SUBDIR) - DISPLAY_TOOLS = -endif -SUBDIRS_desktop = $(RENDER_SUBDIR) image \ - $(LWAWT_PRE_SUBDIR) $(DISPLAY_LIBS) $(DGA_SUBDIR) $(LWAWT_SUBDIR)\ - cmm $(DISPLAY_TOOLS) -SUBDIRS_management = -SUBDIRS_misc = $(ORG_SUBDIR) $(JDBC_SUBDIR) -SUBDIRS_tools = - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/sun/awt/CondenseRules.awk b/jdk/makefiles/sun/awt/CondenseRules.awk deleted file mode 100644 index 89cfd6841b9..00000000000 --- a/jdk/makefiles/sun/awt/CondenseRules.awk +++ /dev/null @@ -1,21 +0,0 @@ -BEGIN { - previous=""; - prefix=""; - ORS=""; - OFS=""; -} -{ - if ($1 != previous) { - if (previous != "") { - print "\n\n"; - } - previous = $1; - print $1; - prefix="\t"; - } - print prefix $2; - prefix=" "; -} -END { - print "\n"; -} diff --git a/jdk/makefiles/sun/awt/Depend.mak b/jdk/makefiles/sun/awt/Depend.mak deleted file mode 100644 index 95e56154914..00000000000 --- a/jdk/makefiles/sun/awt/Depend.mak +++ /dev/null @@ -1,163 +0,0 @@ -# -# This makefile must be executed on a system with makedepend, such as Solaris. -# In my copious amount of spare time, I hope to write a Java-based makedepend -# to eliminate this dependency (no pun intended). TB - -BUILD_DIR = ../.. -TOPDIR = ../../.. - -STUBDIR = WindowsSystemHeaderStubs -BUILDSTUBDIR = BuildStubs - -SHARE_SRC = $(TOPDIR)/src/share -SUN_SRC = $(SHARE_SRC)/native/sun -COMP_SRC = $(SUN_SRC)/awt/alphacomposite -DEBUG_SRC = $(SUN_SRC)/awt/debug -IMG_SRC = $(SUN_SRC)/awt/image -MEDIA_SRC = $(SUN_SRC)/awt/medialib -J2D_SRC = $(SUN_SRC)/java2d -J2D_FONT_SRC = $(SUN_SRC)/font -J2D_WINDOWS_SRC = $(WINDOWS_SRC)/native/sun/java2d -AWT_WINDOWS_SRC = $(WINDOWS_SRC)/native/sun/awt -LOOP_SRC = $(SUN_SRC)/java2d/loops -PIPE_SRC = $(SUN_SRC)/java2d/pipe -WINDOWS_SRC = $(TOPDIR)/src/windows -SRC = $(WINDOWS_SRC)/native/sun/windows - -# ensure consistent sort order -LC_ALL:= C - -SRCDIRS = \ - $(COMP_SRC) \ - $(DEBUG_SRC) \ - $(IMG_SRC) \ - $(IMG_SRC)/cvutils \ - $(IMG_SRC)/gif \ - $(MEDIA_SRC) \ - $(J2D_SRC) \ - $(J2D_FONT_SRC) \ - $(J2D_SRC)/opengl \ - $(J2D_WINDOWS_SRC)/windows \ - $(J2D_WINDOWS_SRC)/d3d \ - $(J2D_WINDOWS_SRC)/opengl \ - $(LOOP_SRC) \ - $(PIPE_SRC) \ - $(SRC) - -INCLUDES = \ - -I$(STUBDIR) \ - -I$(BUILDSTUBDIR) \ - -I$(SHARE_SRC)/javavm/export \ - -I$(WINDOWS_SRC)/javavm/export \ - -I$(SHARE_SRC)/native/common \ - -I$(WINDOWS_SRC)/native/common \ - -I$(SUN_SRC)/dc/doe \ - -I$(SUN_SRC)/dc/path \ - -I$(COMP_SRC) \ - -I$(DEBUG_SRC) \ - -I$(IMG_SRC) \ - -I$(IMG_SRC)/cvutils \ - -I$(MEDIA_SRC) \ - -I$(J2D_SRC) \ - -I$(J2D_FONT_SRC) \ - -I$(J2D_SRC)/opengl \ - -I$(J2D_WINDOWS_SRC) \ - -I$(J2D_WINDOWS_SRC)/windows \ - -I$(J2D_WINDOWS_SRC)/d3d \ - -I$(J2D_WINDOWS_SRC)/opengl \ - -I$(AWT_WINDOWS_SRC) \ - -I$(LOOP_SRC) \ - -I$(PIPE_SRC) \ - -I$(SRC) - -STUBFILES = \ - $(STUBDIR)/ddraw.h \ - $(STUBDIR)/d3d.h \ - $(STUBDIR)/d3d9.h \ - $(STUBDIR)/Ole2.h \ - $(STUBDIR)/Zmouse.h \ - $(STUBDIR)/cderr.h \ - $(STUBDIR)/comdef.h \ - $(STUBDIR)/commctrl.h \ - $(STUBDIR)/commdlg.h \ - $(STUBDIR)/comutil.h \ - $(STUBDIR)/direct.h \ - $(STUBDIR)/d3dcom.h \ - $(STUBDIR)/imm.h \ - $(STUBDIR)/ime.h \ - $(STUBDIR)/io.h \ - $(STUBDIR)/map \ - $(STUBDIR)/mmsystem.h \ - $(STUBDIR)/new.h \ - $(STUBDIR)/new \ - $(STUBDIR)/ole2.h \ - $(STUBDIR)/process.h \ - $(STUBDIR)/richole.h \ - $(STUBDIR)/richedit.h \ - $(STUBDIR)/shellapi.h \ - $(STUBDIR)/shlwapi.h \ - $(STUBDIR)/shlobj.h \ - $(STUBDIR)/tchar.h \ - $(STUBDIR)/winbase.h \ - $(STUBDIR)/windef.h \ - $(STUBDIR)/windows.h \ - $(STUBDIR)/Windows.h \ - $(STUBDIR)/windowsx.h \ - $(STUBDIR)/winspool.h \ - $(STUBDIR)/winuser.h \ - $(STUBDIR)/wtypes.h \ - $(STUBDIR)/zmouse.h \ - -EXTRAFILES_c = \ - img_colors.c - -default: dependencies - -include FILES_c_windows.gmk - -dependencies: - rm -rf make.depend - rm -rf make.tmp make.tmp2 make.tmp.bak - rm -rf $(STUBDIR) $(BUILDSTUBDIR) depend.filelist - for file in $(FILES_c) $(FILES_cpp) $(EXTRAFILES_c); do \ - for dir in $(SRCDIRS); do \ - if [ -f $$dir/$$file ]; then \ - echo $$dir/$$file >>depend.filelist; \ - fi; \ - if [ -f $$dir/$${file}pp ]; then \ - echo $$dir/$${file}pp >>depend.filelist; \ - fi; \ - done; \ - done - touch make.tmp - mkdir $(STUBDIR) - touch $(STUBFILES) - mkdir $(BUILDSTUBDIR) - gnumake -f Depend.mak classhdrstubs - touch $(BUILDSTUBDIR)/awt_colors.h - cat depend.filelist | xargs -n 100 makedepend \ - -DWIN32 -D_X86X -Dx86 -DDEBUG -D_MSC_VER -DMLIB_NO_LIBSUNMATH \ - -DUNICODE -D_UNICODE \ - -a -f make.tmp -o.obj $(INCLUDES) - fgrep .obj make.tmp | sed -f Depend.sed | sort -f -u | nawk -f CondenseRules.awk > make.depend - rm -rf make.tmp make.tmp2 make.tmp.bak - rm -rf $(STUBDIR) $(BUILDSTUBDIR) depend.filelist - - -include FILES_export_windows.gmk - -EXTRAFILES_java = \ - sun/java2d/opengl/OGLContext/OGLContextCaps.java \ - sun/java2d/d3d/D3DPaints/MultiGradient.java \ - sun/java2d/d3d/D3DContext/D3DContextCaps.java \ - java/lang/Integer.java - -FILES_java = $(FILES_export) $(FILES_export2) $(FILES_export3) \ - $(EXTRAFILES_java) - -classhdrstubs: - for file in `echo $(FILES_java) | \ - tr ' ' '\n' | \ - sed -e 'y/\//_/' -e 's/\.java/.h/'`; do \ - echo "#include " > $(BUILDSTUBDIR)/$$file; \ - done diff --git a/jdk/makefiles/sun/awt/Depend.sed b/jdk/makefiles/sun/awt/Depend.sed deleted file mode 100644 index 00a4bdd19e1..00000000000 --- a/jdk/makefiles/sun/awt/Depend.sed +++ /dev/null @@ -1,32 +0,0 @@ -# Unqualify std headers -# remove headers with no extension as well (e.g. C++ 94 STL headers) - robi -# s/ \/usr\/include[^ ]*\.h//g -s/ \/usr\/include[^ ]*//g - -# Unqualify std Windows headers -# remove headers with no extension as well (e.g. C++ 94 STL headers) - robi -# s/ WindowsSystemHeaderStubs[^ ]*\.h//g -s/ WindowsSystemHeaderStubs[^ ]*//g - -# #################################### -# Rules to allow for generation of dependencies on an unbuilt tree... -# -# BuildStubs is populated with stubs for include files that are -# generated by the build and then dependencies are adjusted here -# -# Adjust awt_colors.h -# Change BuildStubs to . -s/ BuildStubs\/awt_colors.h/ $(OBJDIR)\/awt_colors.h/g -# -# Adjust CClassHeaders -# Change BuildStubs to CClassHeaders -s/ BuildStubs/ $(CLASSHDRDIR)/g -# -# End of unbuilt tree adjustments -# #################################### - -# Remove any empty rules -/:[ ]*$/d - -# Change .obj path from src to proper awt/obj or awt/obj_g directory -s/^.*\/\(.*:\)/$(OBJDIR)\/\1:/ diff --git a/jdk/makefiles/sun/awt/FILES_c_macosx.gmk b/jdk/makefiles/sun/awt/FILES_c_macosx.gmk deleted file mode 100644 index adf5a9a5f0b..00000000000 --- a/jdk/makefiles/sun/awt/FILES_c_macosx.gmk +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_AWT_objc = \ - $(TARGDIR)MacOSXResourceBundle.m - diff --git a/jdk/makefiles/sun/awt/FILES_c_unix.gmk b/jdk/makefiles/sun/awt/FILES_c_unix.gmk deleted file mode 100644 index 55a387e69f6..00000000000 --- a/jdk/makefiles/sun/awt/FILES_c_unix.gmk +++ /dev/null @@ -1,173 +0,0 @@ -# -# Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# The debug_* files included here aren't for 2D specifically but they -# have no X dependency. - -FILES_2D_vis = \ - vis_FuncArray.c \ - java2d_Mlib.c \ - mlib_ImageCreate.c \ - mlib_ImageZoom_NN.c \ - mlib_ImageCopy_Bit.c \ - mlib_sys.c \ - mlib_v_ImageClear.c \ - mlib_v_ImageClear_f.c \ - mlib_v_ImageConstXor.c \ - mlib_v_ImageCopy.c \ - mlib_v_ImageCopy_f.c \ - mlib_v_ImageXor.c \ - mlib_v_ImageZoom_NN_f.c \ - vis_Interp.c \ - vis_AlphaMacros.c \ - vis_AlphaMaskBlit.c \ - vis_AlphaMaskFill.c \ - vis_ByteGray.c \ - vis_ByteGray_FromRgb.c \ - vis_ByteGray_Mask.c \ - vis_ByteIndexed.c \ - vis_DrawLine.c \ - vis_FourByteAbgr.c \ - vis_IntArgb.c \ - vis_IntArgbPre.c \ - vis_IntArgbPre_Mask.c \ - vis_IntBgr.c \ - vis_IntRgb.c \ - vis_IntRgbx.c \ - vis_SrcMaskFill.c \ - vis_SrcOverMaskBlit.c \ - vis_SrcOverMaskFill.c \ - vis_FourByteAbgrPre.c \ - vis_GlyphList.c \ - vis_GlyphListXor.c \ - vis_IntArgbBm.c \ - vis_ThreeByteBgr.c \ - vis_UshortGray.c \ - vis_UshortGray_FromRgb.c \ - vis_XorBlit.c - -FILES_2D_c = \ - gifdecoder.c \ - imageInitIDs.c \ - img_colors.c \ - img_globals.c \ - SurfaceData.c \ - Region.c \ - BufImgSurfaceData.c \ - Disposer.c \ - Trace.c \ - GraphicsPrimitiveMgr.c \ - Blit.c \ - BlitBg.c \ - ScaledBlit.c \ - FillRect.c \ - FillSpans.c \ - FillParallelogram.c \ - DrawParallelogram.c \ - DrawLine.c \ - DrawRect.c \ - DrawPolygons.c \ - DrawPath.c \ - FillPath.c \ - ProcessPath.c \ - MaskBlit.c \ - MaskFill.c \ - TransformHelper.c \ - AlphaMath.c \ - AlphaMacros.c \ - AnyByte.c \ - ByteBinary1Bit.c \ - ByteBinary2Bit.c \ - ByteBinary4Bit.c \ - ByteIndexed.c \ - ByteGray.c \ - Index8Gray.c \ - Index12Gray.c \ - AnyShort.c \ - Ushort555Rgb.c \ - Ushort565Rgb.c \ - Ushort4444Argb.c \ - Ushort555Rgbx.c \ - UshortGray.c \ - UshortIndexed.c \ - Any3Byte.c \ - ThreeByteBgr.c \ - AnyInt.c \ - IntArgb.c \ - IntArgbPre.c \ - IntArgbBm.c \ - IntRgb.c \ - IntBgr.c \ - IntRgbx.c \ - Any4Byte.c \ - FourByteAbgr.c \ - FourByteAbgrPre.c \ - BufferedMaskBlit.c \ - BufferedRenderPipe.c \ - ShapeSpanIterator.c \ - SpanClipRenderer.c \ - awt_ImageRep.c \ - awt_ImagingLib.c \ - awt_Mlib.c \ - awt_parseImage.c \ - DataBufferNative.c \ - dither.c \ - debug_assert.c \ - debug_mem.c \ - debug_trace.c \ - debug_util.c - -# These files are required to be built, with or without motif. Some of -# these are only dependent on X11, and some contain native source that -# is required, even in a headless build. - -FILES_NO_MOTIF_c = \ - awt_Font.c \ - HeadlessToolkit.c \ - fontpath.c \ - VDrawingArea.c \ - X11Color.c \ - X11Renderer.c \ - X11PMBlitLoops.c \ - X11SurfaceData.c \ - X11FontScaler_md.c \ - X11TextRenderer_md.c \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - GLXGraphicsConfig.c \ - GLXSurfaceData.c \ - AccelGlyphCache.c \ - CUPSfuncs.c diff --git a/jdk/makefiles/sun/awt/FILES_c_windows.gmk b/jdk/makefiles/sun/awt/FILES_c_windows.gmk deleted file mode 100644 index ec512b73a9d..00000000000 --- a/jdk/makefiles/sun/awt/FILES_c_windows.gmk +++ /dev/null @@ -1,208 +0,0 @@ -# -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - GraphicsPrimitiveMgr.c \ - Blit.c \ - BlitBg.c \ - ScaledBlit.c \ - FillRect.c \ - FillSpans.c \ - FillParallelogram.c \ - DrawParallelogram.c \ - DrawLine.c \ - DrawRect.c \ - DrawPolygons.c \ - DrawPath.c \ - FillPath.c \ - ProcessPath.c \ - MaskBlit.c \ - MaskFill.c \ - TransformHelper.c \ - AlphaMath.c \ - AlphaMacros.c \ - AnyByte.c \ - ByteBinary1Bit.c \ - ByteBinary2Bit.c \ - ByteBinary4Bit.c \ - ByteIndexed.c \ - ByteGray.c \ - Index8Gray.c \ - Index12Gray.c \ - AnyShort.c \ - Ushort555Rgb.c \ - Ushort565Rgb.c \ - Ushort4444Argb.c \ - Ushort555Rgbx.c \ - UshortGray.c \ - UshortIndexed.c \ - Any3Byte.c \ - ThreeByteBgr.c \ - AnyInt.c \ - IntArgb.c \ - IntArgbPre.c \ - IntArgbBm.c \ - IntRgb.c \ - IntBgr.c \ - IntRgbx.c \ - Any4Byte.c \ - FourByteAbgr.c \ - FourByteAbgrPre.c \ - BufferedMaskBlit.c \ - BufferedRenderPipe.c \ - ShapeSpanIterator.c \ - SpanClipRenderer.c \ - SurfaceData.c \ - Region.c \ - DataBufferNative.c \ - BufImgSurfaceData.c \ - Disposer.c \ - Trace.c \ - img_globals.c \ - gifdecoder.c \ - awt_parseImage.c \ - awt_ImageRep.c \ - awt_ImagingLib.c \ - dither.c \ - imageInitIDs.c \ - debug_assert.c \ - debug_mem.c \ - debug_trace.c \ - debug_util.c \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - WGLGraphicsConfig.c \ - WGLSurfaceData.c \ - AccelGlyphCache.c \ - rect.c - -FILES_cpp = \ - CmdIDList.cpp \ - Hashtable.cpp \ - GDIHashtable.cpp \ - Devices.cpp \ - ObjectList.cpp \ - GDIBlitLoops.cpp \ - GDIRenderer.cpp \ - GDIWindowSurfaceData.cpp \ - WindowsFlags.cpp \ - WPrinterJob.cpp \ - awt_AWTEvent.cpp \ - awt_BitmapUtil.cpp \ - awt_Brush.cpp \ - awt_Button.cpp \ - awt_Canvas.cpp \ - awt_Checkbox.cpp \ - awt_Choice.cpp \ - awt_Clipboard.cpp \ - awt_Color.cpp \ - awt_Component.cpp \ - awt_Container.cpp \ - awt_Cursor.cpp \ - awt_DataTransferer.cpp \ - awt_Debug.cpp \ - awt_Dimension.cpp \ - awt_Desktop.cpp \ - awt_DesktopProperties.cpp \ - awt_Dialog.cpp \ - awt_DrawingSurface.cpp \ - awt_FileDialog.cpp \ - awt_Event.cpp \ - awt_Font.cpp \ - awt_Frame.cpp \ - awt_GDIObject.cpp \ - awt_IconCursor.cpp \ - awt_InputEvent.cpp \ - awt_InputMethod.cpp \ - awt_InputTextInfor.cpp \ - awt_Insets.cpp \ - awt_KeyEvent.cpp \ - awt_KeyboardFocusManager.cpp \ - awt_Label.cpp \ - awt_List.cpp \ - awt_Menu.cpp \ - awt_MenuBar.cpp \ - awt_MenuItem.cpp \ - awt_MouseEvent.cpp \ - awt_Object.cpp \ - awt_Palette.cpp \ - awt_Panel.cpp \ - awt_PopupMenu.cpp \ - awt_Pen.cpp \ - awt_PrintControl.cpp \ - awt_PrintDialog.cpp \ - awt_PrintJob.cpp \ - awt_Rectangle.cpp \ - awt_Robot.cpp \ - awt_Scrollbar.cpp \ - awt_ScrollPane.cpp \ - awt_TextArea.cpp \ - awt_TextComponent.cpp \ - awt_TextField.cpp \ - awt_Toolkit.cpp \ - awt_Window.cpp \ - awt_Win32GraphicsEnv.cpp \ - awt_Win32GraphicsDevice.cpp \ - awt_Win32GraphicsConfig.cpp \ - awt_DnDDT.cpp \ - awt_DnDDS.cpp \ - awt_Mlib.cpp \ - awt_new.cpp \ - awt_TrayIcon.cpp \ - awt_DCHolder.cpp \ - awt_ole.cpp \ - ShaderList.cpp \ - D3DBlitLoops.cpp \ - D3DBufImgOps.cpp \ - D3DContext.cpp \ - D3DGlyphCache.cpp \ - D3DGraphicsDevice.cpp \ - D3DMaskBlit.cpp \ - D3DMaskCache.cpp \ - D3DMaskFill.cpp \ - D3DPipelineManager.cpp \ - D3DPaints.cpp \ - D3DRenderer.cpp \ - D3DRenderQueue.cpp \ - D3DResourceManager.cpp \ - D3DSurfaceData.cpp \ - D3DTextRenderer.cpp \ - D3DVertexCacher.cpp \ - ShellFolder2.cpp \ - ThemeReader.cpp \ - ComCtl32Util.cpp \ - DllUtil.cpp \ - initIDs.cpp \ - MouseInfo.cpp diff --git a/jdk/makefiles/sun/awt/FILES_export_macosx.gmk b/jdk/makefiles/sun/awt/FILES_export_macosx.gmk deleted file mode 100644 index 8975d6d5fa0..00000000000 --- a/jdk/makefiles/sun/awt/FILES_export_macosx.gmk +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# FILES_export definitions for Mac OS X - -FILES_export += \ - com/apple/resources/MacOSXResourceBundle.java diff --git a/jdk/makefiles/sun/awt/FILES_export_unix.gmk b/jdk/makefiles/sun/awt/FILES_export_unix.gmk deleted file mode 100644 index 5cd8a010007..00000000000 --- a/jdk/makefiles/sun/awt/FILES_export_unix.gmk +++ /dev/null @@ -1,189 +0,0 @@ -# -# Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# FILES_export definitions for Solaris and Linux - -FILES_export = \ - sun/font/FontManager.java \ - sun/awt/image/ImageRepresentation.java \ - sun/awt/image/GifImageDecoder.java \ - sun/awt/image/NativeLibLoader.java \ - sun/java2d/loops/Blit.java \ - sun/java2d/loops/BlitBg.java \ - sun/java2d/loops/ScaledBlit.java \ - sun/java2d/loops/TransformBlit.java \ - sun/java2d/loops/FillRect.java \ - sun/java2d/loops/FillSpans.java \ - sun/java2d/loops/FillParallelogram.java \ - sun/java2d/loops/DrawParallelogram.java \ - sun/java2d/loops/DrawGlyphList.java \ - sun/java2d/loops/DrawGlyphListAA.java \ - sun/java2d/loops/DrawGlyphListLCD.java \ - sun/java2d/loops/DrawLine.java \ - sun/java2d/loops/DrawRect.java \ - sun/java2d/loops/DrawPolygons.java \ - sun/java2d/loops/DrawPath.java \ - sun/java2d/loops/FillPath.java \ - sun/java2d/loops/MaskBlit.java \ - sun/java2d/loops/MaskFill.java \ - sun/java2d/loops/TransformHelper.java \ - sun/java2d/loops/GraphicsPrimitiveMgr.java \ - sun/java2d/loops/GraphicsPrimitive.java \ - sun/java2d/pipe/hw/AccelSurface.java \ - sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \ - sun/java2d/pipe/hw/ContextCapabilities.java \ - sun/awt/image/ImagingLib.java \ - sun/java2d/SurfaceData.java \ - sun/java2d/SunGraphics2D.java \ - sun/awt/KeyboardFocusManagerPeerImpl.java \ - sun/awt/image/BufImgSurfaceData.java \ - sun/awt/image/DataBufferNative.java \ - \ - sun/awt/X11InputMethod.java \ - sun/awt/motif/MFontConfiguration.java \ - sun/awt/DebugSettings.java \ - sun/awt/EmbeddedFrame.java \ - sun/awt/PlatformFont.java \ - sun/awt/FontDescriptor.java \ - sun/awt/NativeLibLoader.java \ - sun/awt/X11GraphicsEnvironment.java \ - sun/awt/X11GraphicsDevice.java \ - sun/awt/X11GraphicsConfig.java \ - sun/awt/CharsetString.java \ - sun/awt/UNIXToolkit.java \ - sun/java2d/pipe/BufferedContext.java \ - sun/java2d/pipe/BufferedMaskBlit.java \ - sun/java2d/pipe/BufferedOpCodes.java \ - sun/java2d/pipe/BufferedMaskBlit.java \ - sun/java2d/pipe/BufferedPaints.java \ - sun/java2d/pipe/BufferedRenderPipe.java \ - sun/java2d/pipe/BufferedTextPipe.java \ - sun/java2d/pipe/RenderBuffer.java \ - sun/java2d/pipe/ShapeSpanIterator.java \ - sun/java2d/pipe/SpanClipRenderer.java \ - sun/java2d/pipe/RegionIterator.java \ - sun/awt/image/IntegerComponentRaster.java \ - sun/java2d/cmm/CMSManager.java \ - sun/java2d/cmm/PCMM.java \ - sun/java2d/cmm/ColorTransform.java \ - sun/awt/datatransfer/DataTransferer.java \ - sun/awt/dnd/SunDragSourceContextPeer.java \ - sun/java2d/opengl/OGLBlitLoops.java \ - sun/java2d/opengl/OGLContext.java \ - sun/java2d/opengl/OGLMaskFill.java \ - sun/java2d/opengl/OGLPaints.java \ - sun/java2d/opengl/OGLRenderer.java \ - sun/java2d/opengl/OGLRenderQueue.java \ - sun/java2d/opengl/OGLSurfaceData.java \ - sun/java2d/opengl/OGLTextRenderer.java \ - sun/java2d/opengl/GLXGraphicsConfig.java \ - sun/java2d/opengl/GLXSurfaceData.java \ - sun/java2d/x11/X11PMBlitLoops.java \ - sun/java2d/x11/X11PMBlitBgLoops.java \ - sun/java2d/x11/X11Renderer.java \ - sun/java2d/x11/X11SurfaceData.java \ - com/sun/java/swing/plaf/gtk/GTKEngine.java \ - com/sun/java/swing/plaf/gtk/GTKStyle.java \ - sun/awt/ExtendedKeyCodes.java - - -FILES_export2 = \ - java/awt/AlphaComposite.java \ - java/awt/MouseInfo.java \ - java/awt/Cursor.java \ - java/awt/Graphics.java \ - java/awt/Color.java \ - java/awt/Image.java \ - java/awt/Rectangle.java \ - java/awt/Event.java \ - java/awt/Font.java \ - java/awt/Insets.java \ - java/awt/Point.java \ - java/awt/FontMetrics.java \ - java/awt/Toolkit.java \ - java/awt/Component.java \ - java/awt/Container.java \ - java/awt/Canvas.java \ - java/awt/Button.java \ - java/awt/List.java \ - java/awt/Adjustable.java \ - java/awt/Scrollbar.java \ - java/awt/ScrollPane.java \ - java/awt/ScrollPaneAdjustable.java \ - java/awt/Window.java \ - java/awt/TextField.java \ - java/awt/Label.java \ - java/awt/Choice.java \ - java/awt/TextArea.java \ - java/awt/MenuBar.java \ - java/awt/Menu.java \ - java/awt/MenuComponent.java \ - java/awt/PopupMenu.java \ - java/awt/Dialog.java \ - java/awt/FileDialog.java \ - java/awt/MenuItem.java \ - java/awt/Checkbox.java \ - java/awt/CheckboxMenuItem.java \ - java/awt/CheckboxGroup.java \ - java/awt/Frame.java \ - java/awt/Transparency.java \ - java/awt/AWTException.java \ - java/awt/AWTEvent.java \ - java/awt/AWTKeyStroke.java \ - java/awt/KeyboardFocusManager.java \ - java/awt/Dimension.java \ - java/awt/SystemColor.java \ - java/awt/TrayIcon.java \ - java/awt/DisplayMode.java \ - java/awt/color/ColorSpace.java \ - java/awt/color/ICC_Profile.java \ - java/awt/geom/PathIterator.java \ - java/awt/image/AffineTransformOp.java \ - java/awt/image/ImageConsumer.java \ - java/awt/image/ImageObserver.java \ - java/awt/image/BufferedImage.java \ - java/awt/image/ColorModel.java \ - java/awt/image/ConvolveOp.java \ - java/awt/image/DirectColorModel.java \ - java/awt/image/IndexColorModel.java \ - java/awt/image/DataBuffer.java \ - java/awt/datatransfer/Transferable.java \ - java/awt/datatransfer/DataFlavor.java \ - java/awt/datatransfer/UnsupportedFlavorException.java \ - java/awt/datatransfer/Clipboard.java \ - java/awt/datatransfer/ClipboardOwner.java \ - java/awt/datatransfer/StringSelection.java \ - java/awt/event/AdjustmentEvent.java \ - java/awt/event/KeyEvent.java \ - java/awt/event/MouseEvent.java \ - java/awt/event/MouseWheelEvent.java \ - java/awt/event/FocusEvent.java \ - java/awt/event/InputEvent.java \ - java/awt/event/WindowEvent.java \ - java/awt/event/NativeLibLoader.java \ - java/awt/peer/ComponentPeer.java \ - java/awt/dnd/DnDConstants.java \ - sun/awt/CausedFocusEvent.java - diff --git a/jdk/makefiles/sun/awt/FILES_export_windows.gmk b/jdk/makefiles/sun/awt/FILES_export_windows.gmk deleted file mode 100644 index 81e90e8ba74..00000000000 --- a/jdk/makefiles/sun/awt/FILES_export_windows.gmk +++ /dev/null @@ -1,252 +0,0 @@ -# -# Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# FILES_export definitions for Win32 - -FILES_export = \ - java/awt/AlphaComposite.java \ - java/awt/MouseInfo.java \ - java/awt/Graphics.java \ - java/awt/Color.java \ - java/awt/Image.java \ - java/awt/Rectangle.java \ - java/awt/Event.java \ - java/awt/Font.java \ - java/awt/FontMetrics.java \ - java/awt/Toolkit.java \ - java/awt/Component.java \ - java/awt/Container.java \ - java/awt/Canvas.java \ - java/awt/Button.java \ - java/awt/List.java \ - java/awt/Adjustable.java \ - java/awt/Scrollbar.java \ - java/awt/ScrollPane.java \ - java/awt/ScrollPaneAdjustable.java \ - java/awt/Transparency.java \ - java/awt/Window.java \ - java/awt/TextField.java \ - java/awt/Label.java \ - java/awt/Choice.java \ - java/awt/TextComponent.java \ - java/awt/TextArea.java \ - java/awt/MenuBar.java \ - java/awt/Menu.java \ - java/awt/Dialog.java \ - java/awt/FileDialog.java \ - java/awt/MenuItem.java \ - java/awt/MenuComponent.java \ - java/awt/Checkbox.java \ - java/awt/CheckboxGroup.java \ - java/awt/CheckboxMenuItem.java \ - java/awt/Frame.java \ - java/awt/Insets.java \ - java/awt/Cursor.java \ - java/awt/Dimension.java \ - java/awt/PopupMenu.java \ - java/awt/AWTEvent.java \ - java/awt/AWTException.java \ - java/awt/AWTKeyStroke.java \ - java/awt/KeyboardFocusManager.java \ - java/awt/DisplayMode.java \ - java/awt/TrayIcon.java \ - java/awt/datatransfer/StringSelection.java \ - java/awt/datatransfer/Transferable.java \ - java/awt/dnd/DnDConstants.java \ - java/awt/event/ActionEvent.java \ - java/awt/event/AdjustmentEvent.java \ - java/awt/event/ComponentEvent.java \ - java/awt/event/FocusEvent.java \ - java/awt/event/ItemEvent.java \ - java/awt/event/InputEvent.java \ - java/awt/event/InvocationEvent.java \ - java/awt/event/KeyEvent.java \ - java/awt/event/MouseEvent.java \ - java/awt/event/MouseWheelEvent.java \ - java/awt/event/WindowEvent.java \ - java/awt/event/InputMethodEvent.java \ - java/awt/im/InputMethodHighlight.java \ - java/awt/im/spi/InputMethod.java \ - java/awt/font/TextHitInfo.java \ - java/text/AttributedCharacterIterator.java \ - java/text/AttributedString.java \ - java/awt/geom/PathIterator.java \ - java/awt/image/AffineTransformOp.java \ - java/awt/image/ImageConsumer.java \ - java/awt/image/ImageObserver.java \ - java/awt/image/BufferedImage.java \ - java/awt/image/ColorModel.java \ - java/awt/image/ConvolveOp.java \ - java/awt/image/DirectColorModel.java \ - java/awt/image/IndexColorModel.java \ - java/awt/image/Raster.java \ - java/awt/color/ColorSpace.java \ - java/awt/color/ICC_Profile.java \ - java/awt/peer/ComponentPeer.java \ - java/awt/peer/MenuComponentPeer.java \ - java/io/InputStream.java - -FILES_export2 = \ - sun/awt/im/InputMethodContext.java \ - sun/awt/EmbeddedFrame.java \ - sun/awt/KeyboardFocusManagerPeerImpl.java \ - sun/awt/windows/WEmbeddedFrame.java \ - sun/awt/windows/WEmbeddedFramePeer.java \ - sun/awt/Win32FontManager.java \ - sun/awt/Win32GraphicsEnvironment.java \ - sun/awt/Win32GraphicsDevice.java \ - sun/awt/Win32GraphicsConfig.java \ - sun/java2d/SunGraphicsEnvironment.java \ - sun/java2d/SunGraphics2D.java \ - sun/java2d/SurfaceData.java \ - sun/awt/image/IntegerComponentRaster.java \ - sun/awt/image/ImagingLib.java \ - sun/awt/image/BufImgSurfaceData.java \ - sun/awt/image/DataBufferNative.java \ - sun/awt/shell/Win32ShellFolder2.java \ - sun/java2d/windows/GDIBlitLoops.java \ - sun/java2d/windows/GDIRenderer.java \ - sun/java2d/windows/GDIWindowSurfaceData.java \ - sun/java2d/windows/WindowsFlags.java \ - sun/java2d/loops/Blit.java \ - sun/java2d/loops/BlitBg.java \ - sun/java2d/loops/ScaledBlit.java \ - sun/java2d/loops/FillRect.java \ - sun/java2d/loops/FillSpans.java \ - sun/java2d/loops/FillParallelogram.java \ - sun/java2d/loops/DrawParallelogram.java \ - sun/java2d/loops/DrawGlyphList.java \ - sun/java2d/loops/DrawGlyphListAA.java \ - sun/java2d/loops/DrawGlyphListLCD.java \ - sun/java2d/loops/DrawLine.java \ - sun/java2d/loops/DrawRect.java \ - sun/java2d/loops/DrawPolygons.java \ - sun/java2d/loops/DrawPath.java \ - sun/java2d/loops/FillPath.java \ - sun/java2d/loops/MaskBlit.java \ - sun/java2d/loops/MaskFill.java \ - sun/java2d/loops/TransformHelper.java \ - sun/java2d/loops/GraphicsPrimitiveMgr.java \ - sun/java2d/loops/GraphicsPrimitive.java \ - sun/java2d/cmm/CMSManager.java \ - sun/java2d/cmm/PCMM.java \ - sun/java2d/cmm/ColorTransform.java \ - sun/awt/ScrollPaneWheelScroller.java \ - sun/awt/datatransfer/DataTransferer.java \ - sun/awt/datatransfer/SunClipboard.java \ - sun/awt/dnd/SunDragSourceContextPeer.java \ - sun/awt/windows/WToolkitThreadBlockedHandler.java - -FILES_export3 = \ - java/awt/CheckboxMenuItem.java \ - java/awt/Menu.java \ - java/awt/MenuBar.java \ - java/awt/MenuComponent.java \ - java/awt/MenuItem.java \ - sun/awt/PlatformFont.java \ - sun/awt/FontDescriptor.java \ - sun/awt/CharsetString.java \ - java/awt/image/DataBuffer.java \ - sun/awt/image/GifImageDecoder.java \ - sun/awt/image/ImageRepresentation.java \ - sun/awt/windows/WCustomCursor.java \ - sun/awt/windows/WDefaultFontCharset.java \ - sun/awt/windows/WButtonPeer.java \ - sun/awt/windows/WCanvasPeer.java \ - sun/awt/windows/WCheckboxPeer.java \ - sun/awt/windows/WCheckboxMenuItemPeer.java \ - sun/awt/windows/WChoicePeer.java \ - sun/awt/windows/WClipboard.java \ - sun/awt/windows/WColor.java \ - sun/awt/windows/WDataTransferer.java \ - sun/awt/windows/WDesktopPeer.java \ - sun/awt/windows/WDesktopProperties.java \ - sun/awt/windows/WDialogPeer.java \ - sun/awt/windows/WDragSourceContextPeer.java \ - sun/awt/windows/WDropTargetContextPeer.java \ - sun/awt/windows/WFileDialogPeer.java \ - sun/awt/windows/WFontPeer.java \ - sun/awt/windows/WFontMetrics.java \ - sun/awt/windows/WFramePeer.java \ - sun/awt/windows/WGlobalCursorManager.java \ - sun/awt/windows/WInputMethod.java \ - sun/awt/windows/WInputMethodDescriptor.java \ - sun/awt/windows/WComponentPeer.java \ - sun/awt/windows/WLabelPeer.java \ - sun/awt/windows/WListPeer.java \ - sun/awt/windows/WMenuBarPeer.java \ - sun/awt/windows/WMenuItemPeer.java \ - sun/awt/windows/WMenuPeer.java \ - sun/awt/windows/WObjectPeer.java \ - sun/awt/windows/WPopupMenuPeer.java \ - sun/awt/windows/WPrintDialog.java \ - sun/awt/windows/WPrintDialogPeer.java \ - sun/awt/windows/WPrinterJob.java \ - sun/awt/windows/WRobotPeer.java \ - sun/awt/windows/WScrollbarPeer.java \ - sun/awt/windows/WScrollPanePeer.java \ - sun/awt/windows/WTextAreaPeer.java \ - sun/awt/windows/WTextComponentPeer.java \ - sun/awt/windows/WTextFieldPeer.java \ - sun/awt/windows/WPanelPeer.java \ - sun/awt/windows/WToolkit.java \ - sun/awt/windows/WWindowPeer.java \ - sun/awt/windows/ThemeReader.java \ - sun/awt/windows/WBufferStrategy.java \ - sun/awt/windows/WTrayIconPeer.java \ - sun/awt/image/ImagingLib.java \ - sun/awt/ExtendedKeyCodes.java \ - sun/java2d/pipe/hw/AccelSurface.java \ - sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \ - sun/java2d/pipe/hw/ContextCapabilities.java \ - sun/java2d/pipe/BufferedContext.java \ - sun/java2d/pipe/BufferedMaskBlit.java \ - sun/java2d/pipe/BufferedOpCodes.java \ - sun/java2d/pipe/BufferedPaints.java \ - sun/java2d/pipe/BufferedRenderPipe.java \ - sun/java2d/pipe/BufferedTextPipe.java \ - sun/java2d/pipe/RenderBuffer.java \ - sun/java2d/pipe/ShapeSpanIterator.java \ - sun/java2d/pipe/SpanClipRenderer.java \ - sun/java2d/pipe/RegionIterator.java \ - sun/java2d/opengl/OGLBlitLoops.java \ - sun/java2d/opengl/OGLContext.java \ - sun/java2d/opengl/OGLMaskFill.java \ - sun/java2d/opengl/OGLPaints.java \ - sun/java2d/opengl/OGLRenderQueue.java \ - sun/java2d/opengl/OGLRenderer.java \ - sun/java2d/opengl/OGLSurfaceData.java \ - sun/java2d/opengl/OGLTextRenderer.java \ - sun/java2d/opengl/WGLGraphicsConfig.java \ - sun/java2d/opengl/WGLSurfaceData.java \ - sun/java2d/d3d/D3DBlitLoops.java \ - sun/java2d/d3d/D3DGraphicsDevice.java \ - sun/java2d/d3d/D3DSurfaceData.java \ - sun/java2d/d3d/D3DMaskFill.java \ - sun/java2d/d3d/D3DPaints.java \ - sun/java2d/d3d/D3DRenderQueue.java \ - sun/java2d/d3d/D3DRenderer.java \ - sun/java2d/d3d/D3DTextRenderer.java \ - sun/java2d/d3d/D3DContext.java diff --git a/jdk/makefiles/sun/awt/Makefile b/jdk/makefiles/sun/awt/Makefile deleted file mode 100644 index 7703027bcad..00000000000 --- a/jdk/makefiles/sun/awt/Makefile +++ /dev/null @@ -1,568 +0,0 @@ -# -# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = sun.awt -LIBRARY = awt -PRODUCT = sun - -# Tell Defs.gmk that VIS is needed -VIS_NEEDED=true - -# Use highest optimization level -OPTMIZATION_LEVEL = HIGHEST - -include $(BUILDDIR)/common/Defs.gmk -include $(BUILDDIR)/Tools.gmk - -OTHER_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES - -# -# Files -# - -# -# Include all Java source files in sun/awt and sun/java2d, except for: -# sun/awt/resources handled by java/awt/Makefile -# sun/java2d/pisces handled by sun/pisces/Makefile -# -AUTO_FILES_JAVA_DIRS = sun/awt sun/java2d com/sun/awt -AUTO_JAVA_PRUNE = resources pisces - -ifeq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv WINDOWS - -# -# Files -# -include FILES_c_windows.gmk -include FILES_export_windows.gmk - -# -# Prune files that are currently unused on Windows (but still used on -# Solaris/Linux). -# -AUTO_JAVA_PRUNE += RemoteOffScreenImage.java - -OTHER_CFLAGS += $(GX_OPTION) -DMLIB_NO_LIBSUNMATH -DUNICODE -D_UNICODE -OTHER_CXXFLAGS += $(GX_OPTION) -DUNICODE -D_UNICODE - -ifeq ($(ARCH_DATA_MODEL), 64) - OTHER_CFLAGS += -DMLIB_OS64BIT -endif - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WINDOWS -endif # PLATFORM - -ifneq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv SOLARIS/LINUX - -# -# Files -# -include FILES_c_unix.gmk -include FILES_export_unix.gmk -# -# Prune the sun/awt/X11 subdirectory, which is handled by sun/xawt/Makefile. -# Also prune files that are currently unused on Solaris/Linux (but still -# used on Windows). -# -AUTO_JAVA_PRUNE += X11 AWTCharset.java - -ifeq ($(PLATFORM), solaris) -FILES_c = $(FILES_2D_c) -FILES_c += awt_LoadLibrary.c -OTHER_LDLIBS = $(JVMLIB) $(LIBM) $(LIBDL) -ifeq ($(CC_VER), 5.8) - ifndef REMOVE_ALL_WORKAROUNDS - ifeq ($(ARCH_FAMILY), i586) - # If on Solaris 11 (or dlfcn.h has unknown_control_flow pragmas in it) - # we trigger a SS11 bug that causes the compiler to crash (bug 6343678) - # Here we check to see if we need this workaround and change the opt - # settings for this one file. - USE_WORKAROUND:=$(shell $(GREP) unknown_control_flow /usr/include/dlfcn.h) - ifneq ($(USE_WORKAROUND),) - ifeq ($(FASTDEBUG), true) - CFLAGS_DBG/awt_Mlib.o = -xO0 \ - $(warning "WARNING: Using workaround for SS11 bug 6343678, on $@") - endif - # Compiler bug 6343678 need to prevent a SEGV in the compiler - CFLAGS_OPT/awt_Mlib.o = -g \ - $(warning "WARNING: Using workaround for SS11 bug 6343678, on $@") - endif - endif - endif -endif -endif - -ifeq ($(PLATFORM), linux) -FILES_c = $(FILES_2D_c) -FILES_c += awt_LoadLibrary.c -OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH -OTHER_LDLIBS = $(JVMLIB) $(LIBM) $(LIBDL) -endif - -FILES_c += initIDs.c - -ifeq ($(PLATFORM), macosx) -FILES_c = $(FILES_2D_c) -FILES_c += awt_LoadLibrary.c -OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH -OTHER_LDLIBS = $(JVMLIB) $(LIBM) -endif - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS/LINUX -endif # PLATFORM - -ifeq ($(PLATFORM), macosx) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MAC OS X - -# -# Files -# -include FILES_c_macosx.gmk -include FILES_export_macosx.gmk - -FILES_objc = $(FILES_AWT_objc) -OTHER_LDLIBS = -lmlib_image $(JVMLIB) $(LIBM) \ - -framework Cocoa \ - -framework OpenGL \ - -framework JavaNativeFoundation \ - -framework JavaRuntimeSupport \ - -framework ApplicationServices \ - -framework AudioToolbox - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MAC OS X -endif # PLATFORM - -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv SOLARIS-SPARC -# solaris-sparc and solaris-sparcv9 both build 'vis' -ifeq ("$(PLATFORM)-$(ARCH_FAMILY)", "solaris-sparc") - FILES_c += $(FILES_2D_vis) - ASFLAGS += -P - FILES_s += mlib_v_ImageCopy_blk.s - INLINE_VIS = $(PLATFORM_SRC)/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il - CFLAGS_sparcv9 = -DMLIB_OS64BIT - - CFLAGS += $(CFLAGS_$(ARCH)) -DMLIB_ADD_SUFF $(INLINE_VIS) \ - -I$(SHARE_SRC)/native/sun/awt/medialib \ - -I$(PLATFORM_SRC)/native/sun/awt/medialib \ - -I$(PLATFORM_SRC)/native/sun/java2d/loops - -vpath %.c $(PLATFORM_SRC)/native/sun/java2d/loops -vpath %.c $(SHARE_SRC)/native/sun/awt/medialib -vpath %.c $(PLATFORM_SRC)/native/sun/awt/medialib -vpath %.s $(PLATFORM_SRC)/native/sun/awt/medialib - -else - FILES_c += MapAccelFunc.c -endif -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS-SPARC - -# -# Resources -# -LOCALE_SET_DEFINITION = jre -ifeq ($(PLATFORM), windows) - RESOURCE_BUNDLES_COMPILED_PROPERTIES += \ - sun/awt/windows/awtLocalization.properties -endif - -# -# Rules -# -ifeq ($(PLATFORM), linux) - FILES_m = mapfile-vers-linux - # libawt.so on Linux is statically linked with Motif and contains all the - # Xm symbols. Mapfile is disabled so the symbols will remain public. - LDNOMAP=true -endif - -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -COMPILEFONTCONFIG_FLAGS = -ifdef ALT_COMPILEFONTCONFIG_FLAGS - COMPILEFONTCONFIG_FLAGS += $(ALT_COMPILEFONTCONFIG_FLAGS) -endif -build: fontconfigs - - -ifeq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv WINDOWS -# -# Additional dependencies. -# -# If make.depend is not working correctly, then it can be omitted -# if you always build from a clean workspace. - -include make.depend - -# required additional rules: - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WINDOWS -endif # PLATFORM - -ifneq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv SOLARIS/LINUX - -ifndef OPENJDK -build: dgalibs -endif -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS/LINUX -endif # PLATFORM - -clobber clean:: java2d.clean fontconfigs.clean - -ifndef OPENJDK -clobber clean:: dgalib.clean -endif - -java2d.clean: - $(RM) -r $(CLASSBINDIR)/sun/java2d .classes.* - -# -# Add to the ambient vpath to pick up files in subdirectories -# -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image/gif -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image/cvutils -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/shell -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/medialib -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/debug -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/utility -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/loops -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/pipe -vpath %.cpp $(SHARE_SRC)/native/$(PKGDIR)/image -ifeq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv WINDOWS -vpath %.cpp $(PLATFORM_SRC)/native/sun/windows -vpath %.cpp $(PLATFORM_SRC)/native/$(PKGDIR) -vpath %.cpp $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/windows -vpath %.cpp $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/d3d -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/opengl -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/opengl -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../font -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WINDOWS -endif # PLATFORM - -ifneq (,$(findstring $(PLATFORM), linux bsd)) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv LINUX -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/opengl -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/opengl -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/x11 -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../font -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ LINUX -endif # PLATFORM - -ifeq ($(PLATFORM), macosx) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MAC OS X -vpath %.m $(call NativeSrcDirList,,native/com/apple/resources) -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MAC OS X -endif # PLATFORM - -ifeq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv WINDOWS -OTHER_LDLIBS = kernel32.lib user32.lib gdi32.lib winspool.lib \ - imm32.lib ole32.lib uuid.lib shell32.lib \ - comdlg32.lib winmm.lib comctl32.lib \ - shlwapi.lib delayimp.lib \ - $(JVMLIB) \ - /DELAYLOAD:user32.dll /DELAYLOAD:gdi32.dll \ - /DELAYLOAD:shell32.dll /DELAYLOAD:winmm.dll \ - /DELAYLOAD:winspool.drv /DELAYLOAD:imm32.dll \ - /DELAYLOAD:ole32.dll /DELAYLOAD:comdlg32.dll \ - /DELAYLOAD:comctl32.dll /DELAYLOAD:shlwapi.dll - -clean:: awt.clean - -awt.clean: - $(RM) $(TEMPDIR)/awt.ico - $(RM) $(TEMPDIR)/awt.res - $(RM) $(TEMPDIR)/hand.cur - $(RM) $(TEMPDIR)/check.bmp -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WINDOWS -endif # PLATFORM - -ifneq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv SOLARIS/LINUX - -LIBXTST = -lXtst - -# Use -lXmu for EditRes support -LIBXMU_DBG = -lXmu -LIBXMU_OPT = -LIBXMU = $(LIBXMU_$(VARIANT)) - -# -# Extra C flags. -# - - -ifndef OPENJDK - -# -# Solaris X11 Direct Graphics Access library -# - -_DGALIBS_sparc = \ - libxinerama.so \ - libjdgaSUNWcg6.so \ - libjdgaSUNWffb.so \ - libjdgaSUNWm64.so \ - libjdgaSUNWafb.so - -_DGALIBS_sparcv9 = \ - libxinerama.so \ - libjdgaSUNWcg6.so \ - libjdgaSUNWffb.so \ - libjdgaSUNWm64.so \ - libjdgaSUNWafb.so - -_DGALIBS_i586 = # no i586 library yet - -_DGALIBS_amd64 = # no amd64 library yet - -DGALIBS = $(_DGALIBS_$(ARCH):%=$(LIBDIR)/$(LIBARCH)/%) - -dgalibs: $(DGALIBS) - -$(LIBDIR)/$(LIBARCH)/libxinerama.so: $(CLOSED_SRC)/solaris/lib/$(ARCH)/libxinerama.so - $(install-file) - $(call chmod-file, a+x) - -$(LIBDIR)/$(LIBARCH)/libjdgaSUNW%.so: $(CLOSED_SRC)/solaris/lib/$(ARCH)/libjdgaSUNW%.so - $(install-file) - $(call chmod-file, a+x) - -$(LIBDIR)/$(LIBARCH)/libjdgaSUNWafb.so: $(LIBDIR)/$(LIBARCH)/libjdgaSUNWffb.so - $(prep-target) - $(call install-sym-link, libjdgaSUNWffb.so) - -clean:: dgalib.clean - -dgalib.clean: - $(RM) $(LIBDIR)/$(LIBARCH)/libjdgaSUNW* $(LIBDIR)/$(LIBARCH)/libxinerama.so -endif - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS/LINUX -endif # PLATFORM - -# -# Font configs -# - -ifeq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv WINDOWS - -FONTCONFIGS_SRC = $(PLATFORM_SRC)/classes/sun/awt/windows -_FONTCONFIGS = \ - fontconfig.properties - -FONTCONFIGS_SRC_PREFIX = - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WINDOWS -endif # PLATFORM - -ifeq ($(PLATFORM), linux) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv LINUX -ifdef OPENJDK - -FONTCONFIGS_SRC = $(PLATFORM_SRC)/classes/sun/awt/fontconfigs -_FONTCONFIGS = \ - fontconfig.properties \ - fontconfig.SuSE.properties \ - fontconfig.Ubuntu.properties \ - fontconfig.Fedora.properties -else - -FONTCONFIGS_SRC = $(CLOSED_SRC)/solaris/classes/sun/awt/fontconfigs -_FONTCONFIGS = \ - fontconfig.properties \ - fontconfig.RedHat.5.properties \ - fontconfig.RedHat.6.properties \ - fontconfig.Turbo.properties \ - fontconfig.SuSE.10.properties \ - fontconfig.SuSE.11.properties -endif - -FONTCONFIGS_SRC_PREFIX = $(PLATFORM). - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ LINUX -endif # PLATFORM - -ifeq ($(PLATFORM), solaris) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv SOLARIS - -FONTCONFIGS_SRC = $(PLATFORM_SRC)/classes/sun/awt/fontconfigs -_FONTCONFIGS = \ - fontconfig.properties - -FONTCONFIGS_SRC_PREFIX = $(PLATFORM). - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS -endif # PLATFORM - - -ifeq ($(PLATFORM), macosx) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MAC OS X - -FONTCONFIGS_SRC = $(JDK_TOPDIR)/src/macosx/classes/sun/awt/fontconfigs -_FONTCONFIGS = \ - fontconfig.properties - -FONTCONFIGS_SRC_PREFIX = $(PLATFORM). - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MAC OS X -endif # PLATFORM - -FONTCONFIGS = $(_FONTCONFIGS:%=$(LIBDIR)/%.src) -BINARYFONTCONFIGS = $(_FONTCONFIGS:%.properties=$(LIBDIR)/%.bfc) - -fontconfigs: $(FONTCONFIGS) $(BINARYFONTCONFIGS) - -$(LIBDIR)/%.src: $(FONTCONFIGS_SRC)/$(FONTCONFIGS_SRC_PREFIX)% - $(install-file) - -$(LIBDIR)/%.bfc: $(FONTCONFIGS_SRC)/$(FONTCONFIGS_SRC_PREFIX)%.properties \ - $(BUILD_TOOLS) - $(prep-target) - $(TOOL_COMPILEFONTCONFIG) $(COMPILEFONTCONFIG_FLAGS) $< $@ - $(call chmod-file, 444) - @$(java-vm-cleanup) - -fontconfigs.clean : - $(RM) $(FONTCONFIGS) - $(RM) $(BINARYFONTCONFIGS) - -ifeq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv WINDOWS -OTHER_CFLAGS += $(GX_OPTION) -DUNICODE -D_UNICODE - -ifeq ($(MILESTONE), internal) - CPPFLAGS += -DINTERNAL_BUILD -endif - -# -# Useful variables that name parts of the src tree. -# -WINAWT_native = $(PLATFORM_SRC)/native/sun/windows -WINAWT_COMMON_native = $(PLATFORM_SRC)/native/sun/awt_common - -# FIXME: awt shouldn't have to see the VM's private headers. -# FIXME: if you re-order this list, the build breaks, possibly because -# of filename collision. Such a collision, if present, is pure -# evil. Need to investigate this. - -OTHER_INCLUDES += -I$(CLASSHDRDIR)/../../java/jvm \ - -I$(OBJDIR) \ - -I$(SHARE_SRC)/native/common \ - -I$(WINAWT_native) \ - -I$(DXSDK_INCLUDE_PATH) \ - -I$(SHARE_SRC)/native/sun/awt/image/cvutils \ - -I$(SHARE_SRC)/native/sun/awt/image \ - -I$(SHARE_SRC)/native/sun/java2d/loops \ - -I$(SHARE_SRC)/native/sun/java2d \ - -I$(PLATFORM_SRC)/native/sun/java2d \ - -I$(SHARE_SRC)/native/sun/java2d/opengl \ - -I$(PLATFORM_SRC)/native/sun/java2d/d3d \ - -I$(PLATFORM_SRC)/native/sun/java2d/opengl \ - -I$(PLATFORM_SRC)/native/sun/java2d/windows \ - -I$(SHARE_SRC)/native/sun/font \ - -I$(SHARE_SRC)/native/sun/java2d/pipe \ - -I$(SHARE_SRC)/native/sun/dc/path \ - -I$(SHARE_SRC)/native/sun/dc/doe \ - -I$(SHARE_SRC)/native/sun/awt/debug \ - -I$(PLATFORM_SRC)/native/sun/awt -# -I$(WINAWT_COMMON_native) - -# this is only required for compiling )/native/sun/awt/medialib/*.c files -# -OTHER_INCLUDES += -I$(SHARE_SRC)/native/sun/awt/medialib - -# -# .res file construction. -# - -ifdef OPENJDK - RC_FLAGS += -i "$(PLATFORM_SRC)/resource/icons" -else - RC_FLAGS += -i "$(CLOSED_SRC)/windows/native/sun/windows" -endif -VERSIONINFO_RESOURCE = $(WINAWT_native)/awt.rc - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WINDOWS -endif # PLATFORM - -ifneq ($(PLATFORM), windows) -# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv SOLARIS/LINUX - -# -# Other extra flags needed for compiling. -# - -ifeq ($(PLATFORM), linux) -CPPFLAGS += -I$(OPENWIN_HOME)/include \ - -I$(OPENWIN_HOME)/include/X11/extensions \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/font -endif -CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/debug \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../font \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../font \ - -I$(SHARE_SRC)/native/$(PKGDIR)/image \ - -I$(SHARE_SRC)/native/$(PKGDIR)/image/cvutils \ - -I$(SHARE_SRC)/native/$(PKGDIR)/shell \ - -I$(SHARE_SRC)/native/$(PKGDIR)/medialib \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/medialib \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../java2d \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d/loops \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d/pipe \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d/opengl \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/opengl \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/x11 \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../dc/doe \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../dc/path \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../jdga \ - -I$(PLATFORM_SRC)/native/$(PKGDIR) \ - $(EVENT_MODEL) - -ifeq ($(PLATFORM), linux) -LDFLAGS += -L$(OPENWIN_LIB) -endif - -LDFLAGS += -L$(LIBDIR)/$(LIBARCH)/$(TSOBJDIR) \ - $(AWT_RUNPATH) - -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS/LINUX -endif # PLATFORM - -CLASSES.export += java.io.InputStream \ - java.lang.Integer \ - java.lang.ThreadGroup - -.PHONY: dgalibs dgalib.clean fontconfigs fontconfigs.clean - diff --git a/jdk/makefiles/sun/awt/README b/jdk/makefiles/sun/awt/README deleted file mode 100644 index 2fe5bb639a6..00000000000 --- a/jdk/makefiles/sun/awt/README +++ /dev/null @@ -1,26 +0,0 @@ -README: - -This directory builds the new version of the Windows AWT. It's been built -successfully with Visual C++ 4.1, but since it uses very little of VC++'s -runtime, it will probably work with other versions of that compiler. - -Included in this project is a generated file, make.depend, which lists -all interdependencies of the source files. This file is generated *on -Solaris or Linux* with the following command: - - % gnumake -f Depend.mak - -This step only needs to be run when new files are added to the project, -or include statements are changed. - -Also, if new CClassHeader dependencies are added for Java class files -that are not built from a Java source file listed in java_awt.jmk or -windows_awt.jmk then you need to update the FILES_java list in the -"else" part of the "ifdef JFILES" branch in Depend.mak. -At some point we should look at a way to share the explicit list of -exported files between Depend.mak and GNUmakefile. - -****NOTE**** - In order to run this command, the executable -/usr/openwin/bin/makedepend is required to be in your $PATH. -****NOTE**** diff --git a/jdk/makefiles/sun/awt/make.depend b/jdk/makefiles/sun/awt/make.depend deleted file mode 100644 index 02b3b1672d1..00000000000 --- a/jdk/makefiles/sun/awt/make.depend +++ /dev/null @@ -1,357 +0,0 @@ -$(OBJDIR)/AccelGlyphCache.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/AlphaMacros.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/AlphaMath.obj:: ../../../src/share/native/sun/java2d/loops/AlphaMath.h - -$(OBJDIR)/Any3Byte.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Any4Byte.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/AnyByte.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/AnyInt.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/AnyShort.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/awt_AWTEvent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_BitmapUtil.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Brush.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Button.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Button.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WButtonPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Button.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Canvas.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Checkbox.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Checkbox.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Checkbox.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Choice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Choice.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WChoicePeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Choice.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Clipboard.obj:: $(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Color.obj:: $(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Component.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Container.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Cursor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_DataTransferer.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_DCHolder.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_DCHolder.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_ole.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Debug.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Desktop.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_DesktopProperties.obj:: $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Dialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Dimension.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_DnDDS.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_dnd_SunDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_DCHolder.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_ole.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_DnDDT.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDropTargetContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_ole.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_DrawingSurface.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Event.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_FileDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Font.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Frame.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_GDIObject.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_IconCursor.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_ImageRep.obj:: $(CLASSHDRDIR)/sun_awt_image_ImageRepresentation.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/awt_ImagingLib.obj:: $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_image_ConvolveOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h - -$(OBJDIR)/awt_InputEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_InputMethod.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethodDescriptor.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_InputTextInfor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Insets.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_KeyboardFocusManager.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_KeyEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Label.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Label.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WLabelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Label.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_List.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Menu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_MenuBar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_MenuItem.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Mlib.obj:: $(CLASSHDRDIR)/java_awt_image_BufferedImage.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Mlib.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_MouseEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_new.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Object.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_ole.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_ole.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Palette.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_CustomPaletteDef.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Panel.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_parseImage.obj:: $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h - -$(OBJDIR)/awt_Pen.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_PopupMenu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_PrintControl.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_PrintDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_PrintJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Rectangle.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Robot.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WRobotPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Robot.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Scrollbar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_ScrollPane.obj:: $(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_TextArea.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_TextComponent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_TextField.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Toolkit.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_TrayIcon.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Win32GraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsConfig.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Win32GraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32FontManager.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/Blit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_Blit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/BlitBg.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_BlitBg.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/BufferedMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedMaskBlit.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/BufferedRenderPipe.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/BufImgSurfaceData.obj:: $(CLASSHDRDIR)/sun_awt_image_BufImgSurfaceData.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/BufImgSurfaceData.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/img_util_md.h - -$(OBJDIR)/ByteBinary1Bit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByteBinary.h ../../../src/share/native/sun/java2d/loops/ByteBinary1Bit.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/ByteBinary2Bit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByteBinary.h ../../../src/share/native/sun/java2d/loops/ByteBinary2Bit.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/ByteBinary4Bit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByteBinary.h ../../../src/share/native/sun/java2d/loops/ByteBinary4Bit.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/ByteGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/ByteIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/CmdIDList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/ComCtl32Util.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/D3DBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DShaders.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/D3DGlyphCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DGraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DGraphicsDevice.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGraphicsDevice.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/D3DMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DMaskCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DMaskFill.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DPaints_MultiGradient.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DPipelineManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBadHardware.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/D3DRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DRenderer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/D3DResourceManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/D3DSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/D3DTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/D3DVertexCacher.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/DataBufferNative.obj:: $(CLASSHDRDIR)/sun_awt_image_DataBufferNative.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/debug_assert.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/debug_mem.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/debug_trace.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/debug_util.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/Devices.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext_D3DContextCaps.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/Disposer.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/dither.obj:: ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/windows/native/sun/windows/colordata.h - -$(OBJDIR)/DllUtil.obj:: ../../../src/windows/native/sun/windows/DllUtil.h - -$(OBJDIR)/DrawLine.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawLine.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/DrawParallelogram.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawParallelogram.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/ParallelogramUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/DrawPath.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawPath.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/DrawPath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/DrawPolygons.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawPolygons.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/DrawRect.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawRect.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/FillParallelogram.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_FillParallelogram.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/ParallelogramUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/FillPath.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_FillPath.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/DrawPath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/FillRect.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_FillRect.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/FillSpans.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_FillSpans.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/FourByteAbgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgr.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/FourByteAbgrPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgrPre.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/GDIBlitLoops.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIBlitLoops.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/GDIHashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/GDIRenderer.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIRenderer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/GDIWindowSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIWindowSurfaceData.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/gifdecoder.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/GraphicsPrimitiveMgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_GraphicsPrimitiveMgr.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Hashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/imageInitIDs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/img_colors.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/img_globals.obj:: $(CLASSHDRDIR)/java_awt_image_DirectColorModel.h $(CLASSHDRDIR)/java_awt_image_IndexColorModel.h $(CLASSHDRDIR)/java_awt_Transparency.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/windows/javavm/export/jni_md.h - -$(OBJDIR)/Index12Gray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Index8Gray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/initIDs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/IntArgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/IntArgbBm.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/IntArgbPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/IntBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/IntRgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/IntRgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/IntRgbx.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/MaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskBlit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/MaskFill.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskFill.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/ParallelogramUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/MouseInfo.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/ObjectList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/OGLBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLFuncs.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLMaskFill.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedPaints.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLRenderer.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/OGLVertexCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h - -$(OBJDIR)/ProcessPath.obj:: $(CLASSHDRDIR)/java_awt_geom_PathIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Region.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h - -$(OBJDIR)/ScaledBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_ScaledBlit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/ShapeSpanIterator.obj:: $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_ShapeSpanIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/pipe/PathConsumer2D.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/ShellFolder2.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/SpanClipRenderer.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_RegionIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_SpanClipRenderer.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/SurfaceData.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/ThemeReader.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_ThemeReader.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/ThreeByteBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Trace.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h - -$(OBJDIR)/TransformHelper.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_loops_TransformHelper.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/awt/utility/rect.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Ushort4444Argb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Ushort555Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Ushort555Rgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgbx.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/Ushort565Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/UshortGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/UshortIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/loops/UshortIndexed.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/WGLGraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLGraphicsConfig.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h - -$(OBJDIR)/WGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext_OGLContextCaps.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h - -$(OBJDIR)/WindowsFlags.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h - -$(OBJDIR)/WPrinterJob.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h diff --git a/jdk/makefiles/sun/awt/mawt.gmk b/jdk/makefiles/sun/awt/mawt.gmk deleted file mode 100644 index e0dd783b256..00000000000 --- a/jdk/makefiles/sun/awt/mawt.gmk +++ /dev/null @@ -1,229 +0,0 @@ -# -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# to create directory: -# -INIT += $(LIB_LOCATION) - -# -# Files -# -# mawt.gmk is just used in building X/Motif native code, so -# this list of java files is no longer included. -#include FILES_java_unix.gmk -include $(BUILDDIR)/sun/awt/FILES_c_unix.gmk - -include $(BUILDDIR)/sun/awt/FILES_export_unix.gmk - -# Check which C files should be built. Headless uses only -# non-motif files. Also, a version-specific motif file is -# compiled based on the motif version. -FILES_c = $(FILES_NO_MOTIF_c) - -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - FILES_reorder += reorder-$(ARCH) - endif -endif - -# -# Rules -# - -# Class files should be built & clobbered in make/sun/awt -# If removing this line, also reinclude sun_awt.jmk -DONT_CLOBBER_CLASSES = true - - -ifndef HEADLESS -ifeq ($(VARIANT), OPT) -FILES_m = ../awt/mapfile-mawt-vers -endif -endif - -# Since this library will be living in a subdirectory below the other libraries -# we need to add an extra runpath so that libraries in the upper directory -# are found at runtime. -LD_RUNPATH_EXTRAS = .. - -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -$(LIB_LOCATION): - $(MKDIR) -p $@ - -clean:: - -# -# Add to the ambient vpath to pick up files in subdirectories -# -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/alphacomposite -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image/gif -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image/cvutils -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/shell -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/medialib -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/opengl -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/opengl -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/x11 -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/debug -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../font -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/loops -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/pipe -vpath %.cpp $(SHARE_SRC)/native/$(PKGDIR)/image -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/robot_child - -# -# Libraries to link in. -# - - -ifeq ($(DEBUG_BINARIES), true) - CFLAGS += -g -endif -ifeq ($(HEADLESS),true) -CFLAGS += -DHEADLESS=$(HEADLESS) -CPPFLAGS += -DHEADLESS=$(HEADLESS) -OTHER_LDLIBS = -else -LIBXTST = -lXtst -ifeq ($(PLATFORM), linux) - ifeq ($(ARCH_DATA_MODEL), 64) - # XXX what about the rest of them? - LIBXT = -lXt - else - # Allows for builds on Debian GNU Linux, X11 is in a different place - LIBXT = $(firstword $(wildcard $(OPENWIN_LIB)/libXt.a) \ - $(wildcard /usr/lib/libXt.a)) - LIBSM = $(firstword $(wildcard $(OPENWIN_LIB)/libSM.a) \ - $(wildcard /usr/lib/libSM.a)) - LIBICE = $(firstword $(wildcard $(OPENWIN_LIB)/libICE.a) \ - $(wildcard /usr/lib/libICE.a)) - LIBXTST = $(firstword $(wildcard $(OPENWIN_LIB)/libXtst.a) \ - $(wildcard /usr/lib/libXtst.a)) - endif -endif - -# Use -lXmu for EditRes support -LIBXMU_DBG = -lXmu -LIBXMU_OPT = -LIBXMU = $(LIBXMU_$(VARIANT)) - -ifeq ($(PLATFORM), solaris) -OTHER_LDLIBS = -lXt -lXext $(LIBXTST) $(LIBXMU) -lX11 -lXi -endif - -ifneq (,$(findstring $(PLATFORM), linux macosx)) -OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH -# XXX what is this define below? Isn't it motif-related? -OTHER_CFLAGS += -DXMSTRINGDEFINES=1 -OTHER_LDLIBS = $(LIBXMU) $(LIBXTST) -lXext $(LIBXT) $(LIBSM) $(LIBICE) -lX11 -lXi -endif - -endif -# !HEADLESS - -OTHER_LDLIBS += $(JVMLIB) $(LIBCXX) \ - -lawt $(LIBM) $(LIBDL) - -# -# Sun CC with -Xa misdefines __STDC__ to 0 (zero). -# The following will force checking of X11 prototypes. -# -ifneq ($(CC_VERSION),gcc) -CPPFLAGS += -DFUNCPROTO=15 -endif - -# -# Other extra flags needed for compiling. -# -CPPFLAGS += $(CUPS_CFLAGS) - -ifndef HEADLESS -CPPFLAGS += -I$(OPENWIN_HOME)/include -LDFLAGS += -L$(OPENWIN_LIB) - -endif # !HEADLESS - -CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/debug \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../font \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../font \ - -I$(SHARE_SRC)/native/$(PKGDIR)/image \ - -I$(SHARE_SRC)/native/$(PKGDIR)/image/cvutils \ - -I$(SHARE_SRC)/native/$(PKGDIR)/shell \ - -I$(SHARE_SRC)/native/$(PKGDIR)/alphacomposite \ - -I$(SHARE_SRC)/native/$(PKGDIR)/medialib \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/medialib \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../java2d \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d/loops \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d/pipe \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../java2d/opengl \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/opengl \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/x11 \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../dc/doe \ - -I$(SHARE_SRC)/native/$(PKGDIR)/../dc/path \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/../jdga \ - -I$(PLATFORM_SRC)/native/$(PKGDIR) \ - $(EVENT_MODEL) - -ifeq ($(PLATFORM), macosx) -CPPFLAGS += -I$(CUPS_HEADERS_PATH) - -ifndef HEADLESS -CPPFLAGS += -I$(MOTIF_DIR)/include \ - -I$(OPENWIN_HOME)/include -LDFLAGS += -L$(MOTIF_LIB) -L$(OPENWIN_LIB) - -endif # !HEADLESS -endif # PLATFORM - -ifeq ($(PLATFORM), linux) - # Checking for the X11/extensions headers at the additional location - CPPFLAGS += -I$(firstword $(wildcard $(OPENWIN_HOME)/include/X11/extensions) \ - $(wildcard /usr/include/X11/extensions)) -endif - -ifeq ($(PLATFORM), macosx) - CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions \ - -I$(OPENWIN_HOME)/include -endif - -ifeq ($(PLATFORM), solaris) - CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions -endif - -ifeq ($(PLATFORM), macosx) - CPPFLAGS += -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" -endif - -LDFLAGS += -L$(LIBDIR)/$(LIBARCH)/$(TSOBJDIR) \ - $(AWT_RUNPATH) - -CLASSES.export += java.io.InputStream \ - java.lang.ThreadGroup - diff --git a/jdk/makefiles/sun/cmm/Makefile b/jdk/makefiles/sun/cmm/Makefile deleted file mode 100644 index 1f611069aba..00000000000 --- a/jdk/makefiles/sun/cmm/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -# -# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -ifdef OPENJDK - SUBDIRS += - ICCPROFILE_SRC_DIR = $(SHARE_SRC)/lib/cmm/lcms -else # !OPENJDK - SUBDIRS += kcms - ICCPROFILE_SRC_DIR = $(CLOSED_SRC)/share/lib/cmm/kcms -endif # OPENJDK - -include $(BUILDDIR)/common/Subdirs.gmk - -# -# ICC Profiles used by the CMM. -# -#ICCPROFILE_DEST_DIR = $(LIBDIR)/cmm - -#iccprofiles: $(ICCPROFILE_DEST_DIR)/sRGB.pf $(ICCPROFILE_DEST_DIR)/GRAY.pf \ -# $(ICCPROFILE_DEST_DIR)/CIEXYZ.pf $(ICCPROFILE_DEST_DIR)/PYCC.pf \ -# $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf - -$(ICCPROFILE_DEST_DIR)/sRGB.pf: $(ICCPROFILE_SRC_DIR)/sRGB.pf - $(install-file) - $(call chmod-file, 444) - -$(ICCPROFILE_DEST_DIR)/GRAY.pf: $(ICCPROFILE_SRC_DIR)/GRAY.pf - $(install-file) - $(call chmod-file, 444) - -$(ICCPROFILE_DEST_DIR)/CIEXYZ.pf: $(ICCPROFILE_SRC_DIR)/CIEXYZ.pf - $(install-file) - $(call chmod-file, 444) - -$(ICCPROFILE_DEST_DIR)/PYCC.pf: $(ICCPROFILE_SRC_DIR)/PYCC.pf - $(install-file) - $(call chmod-file, 444) - -$(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf: $(ICCPROFILE_SRC_DIR)/LINEAR_RGB.pf - $(install-file) - $(call chmod-file, 444) - -iccprofiles.clean: - $(RM) -r $(ICCPROFILE_DEST_DIR) - - -clobber: iccprofiles.clean - $(SUBDIRS-loop) - -clean: iccprofiles.clean - $(SUBDIRS-loop) - -all build:: # iccprofiles - $(SUBDIRS-loop) - -openjdk:: - $(MAKE) OPENJDK=true build - -.PHONY: iccprofiles iccprofiles.clean copy-files openjdk diff --git a/jdk/makefiles/sun/cmm/kcms/FILES_c_unix.gmk b/jdk/makefiles/sun/cmm/kcms/FILES_c_unix.gmk deleted file mode 100644 index cd20c775477..00000000000 --- a/jdk/makefiles/sun/cmm/kcms/FILES_c_unix.gmk +++ /dev/null @@ -1,134 +0,0 @@ -# -# Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - attrmgr.c \ - auxpt.c \ - calc.c \ - calcgtbl.c \ - calcitbl.c \ - calcmtbl.c \ - calcotbl.c \ - chainsu.c \ - chnrules.c \ - cmpsatt.c \ - cmpsattf.c \ - cmyklin.c \ - combine.c \ - compilut.c \ - compitbl.c \ - compose.c \ - compotbl.c \ - convert1.c \ - copy.c \ - crc32.c \ - dispatch.c \ - doevalsw.c \ - eval.c \ - evalth13.c \ - evalth14.c \ - evalth1c.c \ - evalth1g.c \ - f4lex.c \ - filemap.c \ - fmtdata.c \ - futiomem.c \ - futiotbl.c \ - futmft2.c \ - fwdmono.c \ - fwdxform.c \ - fxnull.c \ - invmono.c \ - invxform.c \ - io.c \ - io_swab.c \ - ioencode.c \ - iomf.c \ - iotable.c \ - kcms_io.c \ - kcpmgr.c \ - kcpmgru.c \ - kpfile.c \ - kplib.c \ - kpmd5.c \ - lab2uvl.c \ - lab2xyz.c \ - lensity.c \ - linlab.c \ - logrgb.c \ - loguvl.c \ - malloc.c \ - mat2fut.c \ - matrix.c \ - memory.c \ - moncurv.c \ - new.c \ - outmat.c \ - profile.c \ - profilem.c \ - ptchain.c \ - pteval.c \ - ptinvert.c \ - ptiomem.c \ - pttmgr.c \ - rel2abs.c \ - resize.c \ - share.c \ - solvemat.c \ - spattpr.c \ - spattr.c \ - spattrio.c \ - spcvrt.c \ - speval.c \ - splink.c \ - splut.c \ - sprofile.c \ - sprofpr.c \ - spsave.c \ - spsearch.c \ - spsys.c \ - spsystem.c \ - sptagio.c \ - sptagmgr.c \ - sputilpr.c \ - spxf_gen.c \ - spxfcvrt.c \ - spxfgpr.c \ - spxfmtag.c \ - spxform.c \ - spxfprv.c \ - spxfromr.c \ - sync.c \ - systime.c \ - thread.c \ - thredmem.c \ - ukcpmgr.c \ - unixmem.c \ - util.c \ - uvl2lab.c \ - xfers.c \ - xyz2lab.c \ - xyzmap.c \ - CMM.c diff --git a/jdk/makefiles/sun/cmm/kcms/FILES_c_windows.gmk b/jdk/makefiles/sun/cmm/kcms/FILES_c_windows.gmk deleted file mode 100644 index de1a9298358..00000000000 --- a/jdk/makefiles/sun/cmm/kcms/FILES_c_windows.gmk +++ /dev/null @@ -1,138 +0,0 @@ -# -# Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - attrmgr.c \ - auxpt.c \ - calc.c \ - calcgtbl.c \ - calcitbl.c \ - calcmtbl.c \ - calcotbl.c \ - chainsu.c \ - chnrules.c \ - cmmdll.c \ - cmpsatt.c \ - cmpsattf.c \ - cmyklin.c \ - combine.c \ - compilut.c \ - compitbl.c \ - compose.c \ - compotbl.c \ - convert1.c \ - copy.c \ - crc32.c \ - dispatch.c \ - doevalsw.c \ - eval.c \ - evalth13.c \ - evalth14.c \ - evalth1c.c \ - evalth1g.c \ - f4lex.c \ - filemap.c \ - fmtdata.c \ - futiomem.c \ - futiotbl.c \ - futmft2.c \ - fwdmono.c \ - fwdxform.c \ - fxnull.c \ - invmono.c \ - invxform.c \ - io.c \ - io_swab.c \ - ioencode.c \ - iomf.c \ - iotable.c \ - kcms_io.c \ - kcpmgr.c \ - kcpmgru.c \ - kpfile.c \ - kplib.c \ - kpmd5.c \ - lab2uvl.c \ - lab2xyz.c \ - lensity.c \ - linlab.c \ - logrgb.c \ - loguvl.c \ - malloc.c \ - mat2fut.c \ - matrix.c \ - memory.c \ - moncurv.c \ - new.c \ - outmat.c \ - profile.c \ - profilem.c \ - ptchain.c \ - pteval.c \ - ptinvert.c \ - ptiomem.c \ - pttmgr.c \ - registry.c \ - rel2abs.c \ - resize.c \ - share.c \ - solvemat.c \ - spattpr.c \ - spattr.c \ - spattrio.c \ - spcvrt.c \ - speval.c \ - splink.c \ - splut.c \ - sprofile.c \ - sprofpr.c \ - spsave.c \ - spsearch.c \ - spsys.c \ - spsystem.c \ - sptagio.c \ - sptagmgr.c \ - sputilpr.c \ - spxf_gen.c \ - spxfcvrt.c \ - spxffile.c \ - spxfgpr.c \ - spxfmtag.c \ - spxform.c \ - spxfprv.c \ - spxfromr.c \ - sync.c \ - sysinfo.c \ - systime.c \ - thread.c \ - thredmem.c \ - util.c \ - uvl2lab.c \ - winmem.c \ - wkcpmgr.c \ - xfers.c \ - xyz2lab.c \ - xyzmap.c \ - CMM.c diff --git a/jdk/makefiles/sun/cmm/kcms/Makefile b/jdk/makefiles/sun/cmm/kcms/Makefile deleted file mode 100644 index 50b525671c5..00000000000 --- a/jdk/makefiles/sun/cmm/kcms/Makefile +++ /dev/null @@ -1,108 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = sun.java2d.cmm.kcms -LIBRARY = kcms -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -ifeq ($(PLATFORM), windows) -include FILES_c_windows.gmk -else # PLATFORM -include FILES_c_unix.gmk -endif # PLATFORM - -FILES_java = \ - sun/java2d/cmm/kcms/CMM.java - -FILES_export = \ - sun/java2d/cmm/kcms/CMM.java - -ifeq ($(PLATFORM), windows) - # Override the default version info with our own resource file (see 5043594) - VERSIONINFO_RESOURCE = $(CLOSED_SRC)/share/native/sun/java2d/cmm/kcms/cmm.rc -endif - -# Rules -# -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -SERVICEDIR = $(CLASSBINDIR)/META-INF/services - -FILES_copy = \ - $(SERVICEDIR)/sun.java2d.cmm.PCMM - - -build: copy-files - -copy-files: $(FILES_copy) - -$(SERVICEDIR)/%: $(CLOSED_SRC)/share/classes/sun/java2d/cmm/kcms/META-INF/services/% - $(install-file) - -# -# Extra rules -# -ifeq ($(PLATFORM), linux) - LDLIBS += -lpthread - OTHER_CFLAGS += -Wno-missing-field-initializers -endif - -clean clobber:: - $(RM) $(FILES_copy) - -# -# Add to ambient vpath to get files in a subdirectory -# -vpath %.c $(CLOSED_SRC)/share/native/$(PKGDIR) - -ifeq ($(PLATFORM), windows) - -OTHER_LDLIBS = user32.lib version.lib - -clean:: res.clean - -res.clean: - $(RM) $(OBJDIR)/cmm.rc - $(RM) $(OBJDIR)/cmm.res - $(RM) $(OBJDIR)/cmm.h - -else # PLATFORM -OTHER_LDLIBS = $(LIBM) - -# Use pic instead of PIC on this library -GLOBAL_KPIC = $(PIC_CODE_SMALL) - -CPPFLAGS += -I$(CLASSHDRDIR) \ - -endif # PLATFORM - -CFLAGS += -DJAVACMM -DFUT_CALC_EX -DNO_FUT_GCONST - diff --git a/jdk/makefiles/sun/dcpr/FILES_c.gmk b/jdk/makefiles/sun/dcpr/FILES_c.gmk deleted file mode 100644 index 898f66e248d..00000000000 --- a/jdk/makefiles/sun/dcpr/FILES_c.gmk +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - CJError.c \ - doeObject.c \ - doeSun.c \ - dcPool.c \ - CJPathConsumer.c \ - CJPathConsumer2D.c \ - dcPathConsumer.c \ - dcPathStore.c \ - dcPathError.c \ - dcPathException.c \ - PathFiller.c \ - PathDasher.c \ - PathStroker.c \ - dcLLFiller.c \ - dcLLFillerH.c \ - dcLLFillerS.c \ - dcPRError.c \ - dcPRException.c \ - dcPathFiller.c \ - dcPathDasher.c \ - dcPathStorage.c \ - dcPathStroker.c \ - affine.c \ - angles.c \ - arcs.c \ diff --git a/jdk/makefiles/sun/dcpr/Makefile b/jdk/makefiles/sun/dcpr/Makefile deleted file mode 100644 index fb22b1d3f72..00000000000 --- a/jdk/makefiles/sun/dcpr/Makefile +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = sun.dc -LIBRARY = dcpr -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -include FILES_c.gmk - -FILES_java = \ - sun/dc/DuctusRenderingEngine.java \ - sun/dc/path/FastPathProducer.java \ - sun/dc/path/PathConsumer.java \ - sun/dc/path/PathError.java \ - sun/dc/path/PathException.java \ - sun/dc/pr/PathDasher.java \ - sun/dc/pr/PathFiller.java \ - sun/dc/pr/PathStroker.java \ - sun/dc/pr/PRError.java \ - sun/dc/pr/PRException.java \ - sun/dc/pr/Rasterizer.java - -FILES_export = \ - sun/dc/pr/PathDasher.java \ - sun/dc/pr/PathFiller.java \ - sun/dc/pr/PathStroker.java - -# -# Rules. -# -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -SERVICEDIR = $(CLASSBINDIR)/META-INF/services - -FILES_copy = \ - $(SERVICEDIR)/sun.java2d.pipe.RenderingEngine - -build: copy-files - -copy-files: $(FILES_copy) - -$(SERVICEDIR)/%: $(SHARE_SRC)/classes/sun/dc/META-INF/services/% - $(install-file) - -# -# Add to the ambient vpath to pick up files in subdirectories -# -vpath %.c $(CLOSED_SRC)/share/native/$(PKGDIR)/doe -vpath %.c $(CLOSED_SRC)/share/native/$(PKGDIR)/path -vpath %.c $(CLOSED_SRC)/share/native/$(PKGDIR)/pr -vpath %.c $(CLOSED_SRC)/share/native/$(PKGDIR)/util -vpath %.c $(SHARE_SRC)/native/sun/java2d/pipe - -ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBM) -endif # PLATFORM - -CPPFLAGS += \ - -I$(CLOSED_SRC)/share/native/$(PKGDIR)/doe \ - -I$(CLOSED_SRC)/share/native/$(PKGDIR)/path \ - -I$(CLOSED_SRC)/share/native/$(PKGDIR)/pr \ - -I$(CLOSED_SRC)/share/native/$(PKGDIR)/util \ - -I$(SHARE_SRC)/native/sun/java2d/pipe \ - -I$(PLATFORM_SRC)/native/sun/java2d - diff --git a/jdk/makefiles/sun/headless/Makefile b/jdk/makefiles/sun/headless/Makefile deleted file mode 100644 index 2b3aae4fd76..00000000000 --- a/jdk/makefiles/sun/headless/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -HEADLESS = true -NO_ROBOT = true -MOTIF_VERSION = none -MOTIF_VERSION_STRING=none - -PACKAGE = sun.awt -LIBRARY = awt_headless -PRODUCT = sun - -include $(BUILDDIR)/common/Defs.gmk - -ifdef BUILD_HEADLESS - include $(BUILDDIR)/sun/awt/mawt.gmk -else - all build clean clobber :: - # do nothing case -endif - diff --git a/jdk/makefiles/sun/image/Makefile b/jdk/makefiles/sun/image/Makefile deleted file mode 100644 index 7056ed97faa..00000000000 --- a/jdk/makefiles/sun/image/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -# -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building the generic and vis versions of medialib -# - -BUILDDIR = ../.. -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = generic - -# solaris-sparc and solaris-sparcv9 both build 'vis' -ifeq ($(PLATFORM),solaris) - ifeq ($(ARCH),sparc) - SUBDIRS += vis - endif - ifeq ($(ARCH),sparcv9) - SUBDIRS += vis - endif -endif - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/sun/image/generic/FILES_c.gmk b/jdk/makefiles/sun/image/generic/FILES_c.gmk deleted file mode 100644 index dda8c407976..00000000000 --- a/jdk/makefiles/sun/image/generic/FILES_c.gmk +++ /dev/null @@ -1,96 +0,0 @@ -# -# Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -IMAGE_AFFINE_FILES = \ - mlib_ImageAffine_NN.c \ - mlib_ImageAffine_NN_Bit.c \ - mlib_ImageAffine_BC_S32.c \ - mlib_ImageAffine_BC_D64.c \ - mlib_ImageAffine_BC_F32.c \ - mlib_ImageAffine_BL_S32.c \ - mlib_ImageAffine_BL_D64.c \ - mlib_ImageAffine_BL_F32.c \ - mlib_c_ImageAffine_NN.c \ - mlib_c_ImageAffine_BL.c \ - mlib_c_ImageAffine_BL_S16.c \ - mlib_c_ImageAffine_BL_U16.c \ - mlib_c_ImageAffine_BC.c \ - mlib_c_ImageAffine_BC_S16.c \ - mlib_c_ImageAffine_BC_U16.c \ - mlib_c_ImageAffineIndex_BC.c \ - mlib_c_ImageAffineIndex_BL.c \ - mlib_ImageAffineEdge.c \ - mlib_ImageScanPoly.c \ - mlib_ImageColorTrue2Index.c \ - mlib_ImageDivTables.c \ - mlib_c_ImageThresh1_U8.c \ - mlib_ImageFilters.c \ - -IMAGE_LOOKUP_FILES = \ - mlib_c_ImageLookUp_f.c \ - mlib_ImageLookUp_64.c \ - mlib_ImageLookUp_Bit.c \ - mlib_c_ImageCopy.c \ - -IMAGE_CONV_FILES = \ - mlib_ImageConv_16ext.c \ - mlib_ImageConv_u16ext.c \ - mlib_ImageConvMxN_ext.c \ - mlib_ImageConvMxN_Fp.c \ - mlib_ImageConv_8ext.c \ - mlib_c_ImageConv_f.c \ - mlib_ImageClipping.c \ - mlib_c_ImageConvCopyEdge.c \ - mlib_c_ImageConvClearEdge.c \ - mlib_ImageConv_8nw.c \ - mlib_ImageConv_16nw.c \ - mlib_ImageConv_u16nw.c \ - mlib_ImageConv_32nw.c \ - mlib_ImageConv_F32nw.c \ - mlib_ImageConv_D64nw.c \ - mlib_ImageConv2x2_f.c \ - mlib_ImageConvClearEdge_Fp.c \ - mlib_ImageConvCopyEdge_Bit.c \ - mlib_ImageConvClearEdge_Bit.c \ - mlib_ImageCopy_Bit.c \ - mlib_c_ImageConvVersion.c \ - - -SHARE_SYS_FILES = \ - mlib_sys.c \ - mlib_ImageUtils.c \ - - -FILES_c = \ - mlib_ImageAffine.c \ - mlib_ImageCreate.c \ - mlib_c_ImageLookUp.c \ - mlib_ImageConvMxN.c \ - mlib_ImageConvKernelConvert.c \ - $(IMAGE_AFFINE_FILES) \ - $(IMAGE_LOOKUP_FILES) \ - $(IMAGE_CONV_FILES) \ - $(SHARE_SYS_FILES) \ - diff --git a/jdk/makefiles/sun/image/generic/Makefile b/jdk/makefiles/sun/image/generic/Makefile deleted file mode 100644 index d68eae07971..00000000000 --- a/jdk/makefiles/sun/image/generic/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building the generic version of medialib -# - -BUILDDIR = ../../.. -PACKAGE = sun.awt.medialib -LIBRARY = mlib_image -PRODUCT = sun - -# Use highest level of optimization on this library -OPTIMIZATION_LEVEL = HIGHEST - -include $(BUILDDIR)/common/Defs.gmk - -# -# Use mapfile -# -FILES_m = mapfile-vers -include $(BUILDDIR)/common/Mapfile-vers.gmk - -# -# Files -# -include FILES_c.gmk - -# -# Rules -# -include $(BUILDDIR)/common/Library.gmk - -# -# set compile options for solaris 32- or 64-bit build -# -ifeq ($(ARCH_DATA_MODEL), 64) - CFLAGS += -DMLIB_OS64BIT -endif # ARCH_DATA_MODEL - -ifneq ($(PLATFORM), sparc) - OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH -endif - -CPPFLAGS += \ - -I$(PLATFORM_SRC)/native/$(PKGDIR)/medialib - -OTHER_CFLAGS += -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES - -ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBM) $(LIBDL) -endif - diff --git a/jdk/makefiles/sun/image/vis/FILES_c.gmk b/jdk/makefiles/sun/image/vis/FILES_c.gmk deleted file mode 100644 index 8f61ba66e6d..00000000000 --- a/jdk/makefiles/sun/image/vis/FILES_c.gmk +++ /dev/null @@ -1,162 +0,0 @@ -# -# Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -REQUIRED_NATIVE_FILES = \ - mlib_v_ImageLookUp.c \ - -REQUIRED_SHARE_FILES = \ - mlib_ImageCreate.c \ - mlib_ImageAffine.c \ - mlib_ImageConvMxN.c \ - mlib_ImageConvKernelConvert.c \ - -SYS_SHARE_FILES = \ - mlib_sys.c \ - -RADIO_SHARE_FILES = \ - mlib_ImageLookUp_64.c \ - mlib_ImageLookUp_Bit.c \ - mlib_ImageColorTrue2Index.c \ - mlib_c_ImageThresh1_U8.c \ - - -RADIO_NATIVE_FILES = \ - mlib_v_ImageLookUpS16S16Func.c \ - mlib_v_ImageLookUpS16S32Func.c \ - mlib_v_ImageLookUpS16U16Func.c \ - mlib_v_ImageLookUpS16U8Func.c \ - mlib_v_ImageLookUpS32S16Func.c \ - mlib_v_ImageLookUpS32S32Func.c \ - mlib_v_ImageLookUpS32U16Func.c \ - mlib_v_ImageLookUpS32U8Func.c \ - mlib_v_ImageLookUpSIS16S16Func.c \ - mlib_v_ImageLookUpSIS16S32Func.c \ - mlib_v_ImageLookUpSIS16U16Func.c \ - mlib_v_ImageLookUpSIS16U8Func.c \ - mlib_v_ImageLookUpSIS32S16Func.c \ - mlib_v_ImageLookUpSIS32S32Func.c \ - mlib_v_ImageLookUpSIS32U16Func.c \ - mlib_v_ImageLookUpSIS32U8Func.c \ - mlib_v_ImageLookUpSIU16S16Func.c \ - mlib_v_ImageLookUpSIU16S32Func.c \ - mlib_v_ImageLookUpSIU16U16Func.c \ - mlib_v_ImageLookUpSIU16U8Func.c \ - mlib_v_ImageLookUpSIU8S16Func.c \ - mlib_v_ImageLookUpSIU8S32Func.c \ - mlib_v_ImageLookUpSIU8U16Func.c \ - mlib_v_ImageLookUpSIU8U8Func.c \ - mlib_v_ImageLookUpU16S16Func.c \ - mlib_v_ImageLookUpU16S32Func.c \ - mlib_v_ImageLookUpU16U16Func.c \ - mlib_v_ImageLookUpU16U8Func.c \ - mlib_v_ImageLookUpU8S16Func.c \ - mlib_v_ImageLookUpU8S32Func.c \ - mlib_v_ImageLookUpU8U16Func.c \ - mlib_v_ImageLookUpU8U8Func.c \ - -GEOM_NATIVE_FILES = \ - mlib_v_ImageAffineIndex_BC.c \ - mlib_v_ImageAffine_BC.c \ - mlib_v_ImageAffine_BC_S16.c \ - mlib_v_ImageAffine_BC_U16.c \ - mlib_v_ImageAffine_BL.c \ - mlib_v_ImageAffine_BL_S16.c \ - mlib_v_ImageAffine_BL_U16.c \ - mlib_v_ImageAffine_NN.c \ - mlib_v_ImageFilters.c \ - -GEOM_SHARE_FILES = \ - mlib_ImageAffineEdge.c \ - mlib_ImageAffine_BC_D64.c \ - mlib_ImageAffine_BC_F32.c \ - mlib_ImageAffine_BC_S32.c \ - mlib_ImageAffine_BL_D64.c \ - mlib_ImageAffine_BL_F32.c \ - mlib_ImageAffine_BL_S32.c \ - mlib_ImageAffine_NN.c \ - mlib_ImageAffine_NN_Bit.c \ - mlib_ImageFilters.c \ - mlib_ImageScanPoly.c \ - -SPATIAL_SHARED_FILES = \ - mlib_ImageConv_8nw.c \ - mlib_ImageConv_8ext.c \ - mlib_ImageConv_16nw.c \ - mlib_ImageConv_16ext.c \ - mlib_ImageConv_u16nw.c \ - mlib_ImageConv_u16ext.c \ - mlib_ImageConv_32nw.c \ - mlib_ImageConv_F32nw.c \ - mlib_ImageConvMxN_Fp.c \ - mlib_ImageConvMxN_ext.c \ - mlib_ImageConv_D64nw.c \ - mlib_ImageClipping.c \ - mlib_ImageConvCopyEdge_Bit.c \ - mlib_ImageConvClearEdge_Bit.c \ - mlib_ImageConv2x2_f.c \ - mlib_ImageConvClearEdge_Fp.c \ - -SPATIAL_NATIVE_FILES = \ - mlib_v_ImageConvMxN_8.c \ - mlib_v_ImageConvClearEdge.c \ - mlib_v_ImageConvCopyEdge.c \ - mlib_v_ImageConvMxN_8ext.c \ - mlib_v_ImageConvVersion.c \ - mlib_v_ImageConv_8nw.c \ - mlib_ImageConvCopyEdge_Fp.c \ - -FORMAT_NATIVE_FILES = \ - mlib_v_ImageChannelInsert_1.c \ - mlib_v_ImageChannelExtract_43.c \ - mlib_v_ImageChannelExtract_1.c \ - -COPY_SHARED_FILES = \ - mlib_ImageCopy_Bit.c \ - -COPY_NATIVE_FILES = \ - mlib_v_ImageCopy_f.c \ - -COMMON_SHARED_FILES = \ - mlib_ImageUtils.c \ - mlib_ImageDivTables.c \ - -NATIVE_FILES = \ - $(REQUIRED_NATIVE_FILES) \ - -FILES_c = \ - $(REQUIRED_NATIVE_FILES) \ - $(REQUIRED_SHARE_FILES) \ - $(RADIO_SHARE_FILES) \ - $(RADIO_NATIVE_FILES) \ - $(GEOM_NATIVE_FILES) \ - $(GEOM_SHARE_FILES) \ - $(SPATIAL_SHARED_FILES) \ - $(SPATIAL_NATIVE_FILES) \ - $(FORMAT_NATIVE_FILES) \ - $(SYS_SHARE_FILES) \ - $(COPY_SHARED_FILES) \ - $(COPY_NATIVE_FILES) \ - $(COMMON_SHARED_FILES) \ - diff --git a/jdk/makefiles/sun/image/vis/Makefile b/jdk/makefiles/sun/image/vis/Makefile deleted file mode 100644 index 6281803723e..00000000000 --- a/jdk/makefiles/sun/image/vis/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -# -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building the VIS (solaris-only) version of medialib -# -BUILDDIR = ../../.. -PACKAGE = sun.awt.medialib -LIBRARY = mlib_image_v -PRODUCT = sun - -# Tell Defs.gmk we need VIS instructions -VIS_NEEDED=true - -# Select highest level of optimization for this library -OPTIMIZATION_LEVEL = HIGHEST - -include $(BUILDDIR)/common/Defs.gmk - -# -# Use generic mapfile -# -FILES_m = ../generic/mapfile-vers -include $(BUILDDIR)/common/Mapfile-vers.gmk - -# -# Files -# -include FILES_c.gmk - -# -# Rules -# -include $(BUILDDIR)/common/Library.gmk - -vpath %.s $(PLATFORM_SRC)/native/sun/awt/medialib -vpath %.c $(SHARE_SRC)/native/sun/awt/medialib - -# -# set compile options for solaris 32- or 64-bit build -# -ASFLAGS += -P -CFLAGS_sparcv9 = -DMLIB_OS64BIT -INLINE = $(PLATFORM_SRC)/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il - -CFLAGS += $(CFLAGS_$(ARCH)) $(INLINE) -I$(PLATFORM_SRC)/native/sun/awt/medialib -I$(SHARE_SRC)/native/sun/awt/medialib - -OTHER_CFLAGS += -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES -OTHER_LDLIBS = $(LIBM) $(LIBDL) - diff --git a/jdk/makefiles/sun/jdbc/Makefile b/jdk/makefiles/sun/jdbc/Makefile deleted file mode 100644 index b5751d104c5..00000000000 --- a/jdk/makefiles/sun/jdbc/Makefile +++ /dev/null @@ -1,142 +0,0 @@ -# -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for JDBC-ODBC Bridge Driver -# -# Note - the native library for the bridge may be linked with the -# shared library for the ODBC driver manager. Or dummy libraries -# may be used to just create libJdbcOdbc.so with a dependency on -# libodbc.so and libodbcinst.so. -# - -BUILDDIR = ../.. -PACKAGE = sun.jdbc.odbc -LIBRARY = JdbcOdbc -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# - -AUTO_FILES_JAVA_DIRS = sun/jdbc/odbc - -FILES_c = \ - JdbcOdbc.c - -FILES_export = \ - sun/jdbc/odbc/JdbcOdbc.java - -# Use fake libraries on Solaris and Linux just so the library we create has -# a dependency on these two library names. (which are not part of the jdk) -ifneq ($(PLATFORM), windows) - # In jdk5 and jdk6, and on Solaris 32bit, we would have required that - # these two libraries exist at: $(ALT_ODBCDIR)/ISLIodbc/2.11/lib - # In jdk7, we just fake them out like we did on Linux in jdk5 and jdk6. - # - # If you wanted to use the real odbc libraries, change the value of - # ODBC_LIBRARY_LOCATION, and delete the variable assignments below. - # - # Tell linker to ignore missing externals when building this shared library. - LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker nodefs - # Define a place to create the fake libraries and their names. - ODBC_LIBRARY_LOCATION = $(TEMPDIR) - ODBC_FAKE_LIBRARIES = $(ODBC_LIBRARY_LOCATION)/libodbcinst.so $(ODBC_LIBRARY_LOCATION)/libodbc.so - # Make sure they get created early. - INIT += $(ODBC_FAKE_LIBRARIES) -endif - -# -# Rules -# -include $(BUILDDIR)/common/Library.gmk - -# -# The UNIX define specifies conditional compilation for UNIX -# -ifeq ($(PLATFORM), windows) - LDLIBS += odbc32.lib odbccp32.lib -else - CFLAGS += -DUNIX - LDFLAGS += -L$(ODBC_LIBRARY_LOCATION) -lodbcinst -lodbc -endif - -# -# The native code for the bridge uses conditional compilation to -# support Solaris, Win95 and Mac PPC. This is the path to the shared C files -# (which unfortunately are in the same directory as shared Java files). -# -vpath %.c $(CLOSED_SHARE_SRC)/classes/sun/jdbc/odbc - -# -# Rules to generate fake libraries -# - -ifdef ODBC_FAKE_LIBRARIES -$(TEMPDIR)/dummyodbc.c: - @$(prep-target) - $(ECHO) "void dummyOdbc(void){}" >> $@ -$(TEMPDIR)/dummyodbc.o: $(TEMPDIR)/dummyodbc.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< -$(ODBC_FAKE_LIBRARIES): $(TEMPDIR)/dummyodbc.o - @$(prep-target) - $(CC) $(SHARED_LIBRARY_FLAG) $(LDFLAGS_COMMON) -o $@ $< $(EXTRA_LIBS) -clean:: - $(RM) -f $(ODBC_FAKE_LIBRARIES) - $(RM) -f $(TEMPDIR)/dummyodbc.c - $(RM) -f $(TEMPDIR)/dummyodbc.o -endif - -# -# Files that need to be copied -# -SERVICEDIR = $(CLASSBINDIR)/META-INF/services - -FILES_copy = \ - $(SERVICEDIR)/java.sql.Driver - - -FILES_mkdirs = \ - $(CLASSBINDIR)/META-INF \ - $(CLASSBINDIR)/META-INF/services - -FILES_copydirs = \ - $(CLASSBINDIR) \ - $(FILES_mkdirs) - -build: copy-files - -copy-files: $(FILES_copy) - -$(SERVICEDIR)/%: $(CLOSED_SHARE_SRC)/classes/sun/jdbc/odbc/META-INF/services/% - $(install-file) - -clean clobber:: - $(RM) $(FILES_copy) - -.PHONY: copy-files - diff --git a/jdk/makefiles/sun/jdga/Makefile b/jdk/makefiles/sun/jdga/Makefile deleted file mode 100644 index 7c3c2b5ac59..00000000000 --- a/jdk/makefiles/sun/jdga/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -# -# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -BUILDDIR = ../.. -PACKAGE = sun.jdga -LIBRARY = sunwjdga -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -FILES_c = \ - dgalock.c - -# -# Add use of mapfile -# -ifeq ($(ARCH_FAMILY), sparc) -FILES_m = mapfile-vers -include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -# -# Rules. -# -include $(BUILDDIR)/common/Library.gmk - -# -# Add to the ambient vpath to pick up files in subdirectories -# -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR) - -ifneq ($(PLATFORM), windows) - LDLIBS = -ldga -lX11 $(LIBDL) -lc - - CPPFLAGS += \ - -I$(SHARE_SRC)/javavm/export \ - -I$(PLATFORM_SRC)/javavm/export \ - -I$(OPENWIN_HOME)/include -endif - -LDFLAGS += -L$(OPENWIN_LIB) -R$(OPENWIN_RUNTIME_LIB) diff --git a/jdk/makefiles/sun/jkernel/Makefile b/jdk/makefiles/sun/jkernel/Makefile deleted file mode 100644 index 5abf87b57f5..00000000000 --- a/jdk/makefiles/sun/jkernel/Makefile +++ /dev/null @@ -1,94 +0,0 @@ -# -# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -MODULE = jkernel -PACKAGE = sun.jkernel -LIBRARY = jkernel -PRODUCT = sun - -include $(BUILDDIR)/common/Defs.gmk - -# -# Use highest optimization level -# -_OPT = $(CC_HIGHEST_OPT) - -# -# Java source files -# -include FILES_java.gmk -AUTO_FILES_JAVA_DIRS = sun/jkernel - -LOCALE_SUFFIXES = $(JDK_LOCALES) - -# -# Native source files -# - -ifeq ($(ARCH_DATA_MODEL), 32) - -ifeq ($(PLATFORM), windows) - -# If this is the VS Express compiler it will lack vc/atlmfc/ -ATL_MFC_DIR :=$(call DirExists,$(COMPILER_PATH)/../atlmfc,,) - -ifneq ($(ATL_MFC_DIR),) - -include FILES_c_windows.gmk - -vpath %.cpp $(PLATFORM_SRC)/native/sun/jkernel - - -VERSIONINFO_RESOURCE = $(PLATFORM_SRC)/native/sun/jkernel/kernel.rc - -LDLIBS += urlmon.lib wininet.lib shlwapi.lib version.lib comctl32.lib gdi32.lib -def:$(PLATFORM_SRC)/native/sun/jkernel/kernel.def - -include $(BUILDDIR)/common/Library.gmk - -endif - -endif - -endif - -# -# Resources -# -include $(JDK_TOPDIR)/makefiles/common/internal/Resources.gmk - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - -# If extra compression is going to be available in the deploy build enable -# its use here by defining the JRE-relative pathname of the shared library - -ifeq ($(PLATFORM), windows) - ifdef EXTRA_COMP_INSTALL_PATH - CPPFLAGS += -DEXTRA_COMP_INSTALL_PATH=$(EXTRA_COMP_INSTALL_PATH) - endif -endif diff --git a/jdk/makefiles/sun/lwawt/FILES_c_macosx.gmk b/jdk/makefiles/sun/lwawt/FILES_c_macosx.gmk deleted file mode 100644 index 05b2d14b921..00000000000 --- a/jdk/makefiles/sun/lwawt/FILES_c_macosx.gmk +++ /dev/null @@ -1,100 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_objc = \ - awt.m \ - ApplicationDelegate.m \ - CFRetainedResource.m \ - CGLGraphicsConfig.m \ - CGLSurfaceData.m \ - CGLLayer.m \ - CGraphicsConfig.m \ - CGraphicsDevice.m \ - CGraphicsEnv.m \ - CCharToGlyphMapper.m \ - CSystemColors.m \ - AWTFont.m \ - CGGlyphOutlines.m \ - CGGlyphImages.m \ - CoreTextSupport.m \ - AWTStrike.m \ - InitIDs.m \ - AWTEvent.m \ - AWTView.m \ - AWTWindow.m \ - AWTSurfaceLayers.m \ - CCursorManager.m \ - CClipboard.m \ - CDataTransferer.m \ - CDragSource.m \ - CDragSourceContextPeer.m \ - CDropTarget.m \ - CDropTargetContextPeer.m \ - CInputMethod.m \ - CDesktopPeer.m \ - OSVersion.m \ - DnDUtilities.m \ - CFileDialog.m \ - CImage.m \ - CMenu.m \ - CMenuBar.m \ - CMenuComponent.m \ - CMenuItem.m \ - CPopupMenu.m \ - CRobot.m \ - CTrayIcon.m \ - CWrapper.m \ - JavaAccessibilityAction.m \ - JavaAccessibilityUtilities.m \ - JavaComponentAccessibility.m \ - JavaTextAccessibility.m \ - LWCToolkit.m \ - GeomUtilities.m \ - CPrinterJob.m \ - PrintModel.m \ - PrinterSurfaceData.m \ - PrinterView.m \ - QuartzSurfaceData.m \ - QuartzRenderer.m \ - CTextPipe.m \ - ImageSurfaceData.m \ - awt_DrawingSurface.m - -FILES_c = \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - AccelGlyphCache.c \ - CUPSfuncs.c - diff --git a/jdk/makefiles/sun/lwawt/FILES_export_macosx.gmk b/jdk/makefiles/sun/lwawt/FILES_export_macosx.gmk deleted file mode 100644 index 43710d7dbbb..00000000000 --- a/jdk/makefiles/sun/lwawt/FILES_export_macosx.gmk +++ /dev/null @@ -1,279 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# FILES_export definitions for Mac OS X - -FILES_export = \ - com/apple/eawt/Application.java \ - com/apple/eawt/_AppDockIconHandler.java \ - com/apple/eawt/_AppEventHandler.java \ - com/apple/eawt/_AppEventLegacyHandler.java \ - com/apple/eawt/_AppMenuBarHandler.java \ - com/apple/eawt/_AppMiscHandlers.java \ - com/apple/eawt/event/GestureHandler.java \ - com/apple/eawt/FullScreenAdapter.java \ - com/apple/eawt/FullScreenHandler.java \ - com/apple/eawt/FullScreenListener.java \ - com/apple/eawt/FullScreenUtilities.java \ - sun/font/FontManager.java \ - sun/awt/image/ImageRepresentation.java \ - sun/awt/image/GifImageDecoder.java \ - sun/awt/image/NativeLibLoader.java \ - sun/java2d/CRenderer.java \ - sun/java2d/CompositeCRenderer.java \ - sun/java2d/DataBufferNIOInt.java \ - sun/java2d/IntegerNIORaster.java \ - sun/java2d/OSXSurfaceData.java \ - sun/java2d/OSXOffScreenSurfaceData.java \ - sun/java2d/loops/Blit.java \ - sun/java2d/loops/BlitBg.java \ - sun/java2d/loops/ScaledBlit.java \ - sun/java2d/loops/TransformBlit.java \ - sun/java2d/loops/FillRect.java \ - sun/java2d/loops/FillSpans.java \ - sun/java2d/loops/FillParallelogram.java \ - sun/java2d/loops/DrawParallelogram.java \ - sun/java2d/loops/DrawGlyphList.java \ - sun/java2d/loops/DrawGlyphListAA.java \ - sun/java2d/loops/DrawGlyphListLCD.java \ - sun/java2d/loops/DrawLine.java \ - sun/java2d/loops/DrawRect.java \ - sun/java2d/loops/DrawPolygons.java \ - sun/java2d/loops/DrawPath.java \ - sun/java2d/loops/FillPath.java \ - sun/java2d/loops/MaskBlit.java \ - sun/java2d/loops/MaskFill.java \ - sun/java2d/loops/TransformHelper.java \ - sun/java2d/loops/GraphicsPrimitiveMgr.java \ - sun/java2d/loops/GraphicsPrimitive.java \ - sun/java2d/pipe/hw/AccelSurface.java \ - sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \ - sun/java2d/pipe/hw/ContextCapabilities.java \ - sun/awt/image/ImagingLib.java \ - sun/java2d/SurfaceData.java \ - sun/java2d/SunGraphics2D.java \ - sun/awt/KeyboardFocusManagerPeerImpl.java \ - sun/awt/image/BufImgSurfaceData.java \ - sun/awt/image/DataBufferNative.java \ - \ - sun/awt/CGraphicsConfig.java \ - sun/awt/CGraphicsDevice.java \ - sun/awt/CGraphicsEnvironment.java \ - sun/font/CCharToGlyphMapper.java \ - sun/font/CFont.java \ - sun/font/CFontConfiguration.java \ - sun/font/CFontManager.java \ - sun/font/CStrike.java \ - sun/font/CStrikeDisposer.java \ - sun/java2d/BackBufferCapsProvider.java \ - sun/java2d/MacosxSurfaceManagerFactory.java \ - sun/lwawt/LWButtonPeer.java \ - sun/lwawt/LWCanvasPeer.java \ - sun/lwawt/LWCheckboxPeer.java \ - sun/lwawt/LWChoicePeer.java \ - sun/lwawt/LWComponentPeer.java \ - sun/lwawt/LWContainerPeer.java \ - sun/lwawt/LWCursorManager.java \ - sun/lwawt/LWKeyboardFocusManagerPeer.java \ - sun/lwawt/LWLabelPeer.java \ - sun/lwawt/LWListPeer.java \ - sun/lwawt/LWMouseInfoPeer.java \ - sun/lwawt/LWPanelPeer.java \ - sun/lwawt/LWRepaintArea.java \ - sun/lwawt/LWScrollBarPeer.java \ - sun/lwawt/LWScrollPanePeer.java \ - sun/lwawt/LWTextComponentPeer.java \ - sun/lwawt/LWTextFieldPeer.java \ - sun/lwawt/LWToolkit.java \ - sun/lwawt/LWWindowPeer.java \ - sun/lwawt/PlatformWindow.java \ - sun/lwawt/SelectionClearListener.java \ - sun/lwawt/macosx/CPrinterDevice.java \ - sun/lwawt/macosx/CPrinterDialog.java \ - sun/lwawt/macosx/CPrinterDialogPeer.java \ - sun/lwawt/macosx/CPrinterGraphics.java \ - sun/lwawt/macosx/CPrinterGraphicsConfig.java \ - sun/lwawt/macosx/CPrinterJob.java \ - sun/lwawt/macosx/CPrinterJobDialog.java \ - sun/lwawt/macosx/CPrinterPageDialog.java \ - sun/lwawt/macosx/CPrinterSurfaceData.java \ - sun/lwawt/macosx/CTextPipe.java \ - sun/lwawt/macosx/CDesktopPeer.java \ - sun/java2d/CRenderer.java \ - sun/lwawt/macosx/EventDispatchAccess.java \ - sun/lwawt/macosx/NSPrintInfo.java \ - sun/lwawt/macosx/CAccessibility.java \ - sun/lwawt/macosx/CAccessible.java \ - sun/lwawt/macosx/CFRetainedResource.java \ - sun/lwawt/macosx/CCheckboxMenuItem.java \ - sun/lwawt/macosx/CClipboard.java \ - sun/lwawt/macosx/CDataTransferer.java \ - sun/lwawt/macosx/CDragSourceContextPeer.java \ - sun/lwawt/macosx/CMouseDragGestureRecognizer.java \ - sun/lwawt/macosx/CDropTarget.java \ - sun/lwawt/macosx/CDropTargetContextPeer.java \ - sun/lwawt/macosx/CCursorManager.java \ - sun/lwawt/macosx/CFileDialog.java \ - sun/lwawt/macosx/CImage.java \ - sun/lwawt/macosx/CMenu.java \ - sun/lwawt/macosx/CMenuBar.java \ - sun/lwawt/macosx/CMenuComponent.java \ - sun/lwawt/macosx/CMenuItem.java \ - sun/lwawt/macosx/CMouseInfoPeer.java \ - sun/lwawt/macosx/CPlatformView.java \ - sun/lwawt/macosx/CPlatformWindow.java \ - sun/lwawt/macosx/CPlatformComponent.java \ - sun/lwawt/macosx/CEmbeddedFrame.java \ - sun/lwawt/macosx/CPlatformEmbeddedFrame.java \ - sun/lwawt/macosx/CPlatformResponder.java \ - sun/lwawt/macosx/CPopupMenu.java \ - sun/lwawt/macosx/CRobot.java \ - sun/lwawt/macosx/CSystemTray.java \ - sun/lwawt/macosx/CTrayIcon.java \ - sun/lwawt/macosx/CWrapper.java \ - sun/lwawt/macosx/CocoaConstants.java \ - sun/lwawt/macosx/LWCToolkit.java \ - sun/lwawt/macosx/CInputMethod.java \ - sun/lwawt/macosx/CInputMethodDescriptor.java \ - sun/lwawt/macosx/event/NSEvent.java \ - \ - sun/awt/DebugSettings.java \ - sun/awt/EmbeddedFrame.java \ - sun/awt/PlatformFont.java \ - sun/awt/FontDescriptor.java \ - sun/awt/NativeLibLoader.java \ - sun/awt/CharsetString.java \ - sun/awt/SunHints.java \ - sun/java2d/pipe/BufferedContext.java \ - sun/java2d/pipe/BufferedMaskBlit.java \ - sun/java2d/pipe/BufferedOpCodes.java \ - sun/java2d/pipe/BufferedMaskBlit.java \ - sun/java2d/pipe/BufferedPaints.java \ - sun/java2d/pipe/BufferedRenderPipe.java \ - sun/java2d/pipe/BufferedTextPipe.java \ - sun/java2d/pipe/RenderBuffer.java \ - sun/java2d/pipe/ShapeSpanIterator.java \ - sun/java2d/pipe/SpanClipRenderer.java \ - sun/java2d/pipe/RegionIterator.java \ - sun/awt/image/IntegerComponentRaster.java \ - sun/java2d/cmm/CMSManager.java \ - sun/java2d/cmm/PCMM.java \ - sun/java2d/cmm/ColorTransform.java \ - sun/awt/datatransfer/DataTransferer.java \ - sun/awt/dnd/SunDragSourceContextPeer.java \ - sun/java2d/opengl/OGLBlitLoops.java \ - sun/java2d/opengl/OGLContext.java \ - sun/java2d/opengl/OGLMaskFill.java \ - sun/java2d/opengl/OGLPaints.java \ - sun/java2d/opengl/OGLRenderer.java \ - sun/java2d/opengl/OGLRenderQueue.java \ - sun/java2d/opengl/OGLSurfaceData.java \ - sun/java2d/opengl/OGLTextRenderer.java \ - sun/java2d/opengl/CGLGraphicsConfig.java \ - sun/java2d/opengl/CGLSurfaceData.java \ - sun/java2d/opengl/CGLLayer.java \ - sun/awt/ExtendedKeyCodes.java - -FILES_export2 = \ - java/awt/AlphaComposite.java \ - java/awt/MouseInfo.java \ - java/awt/Cursor.java \ - java/awt/Graphics.java \ - java/awt/Color.java \ - java/awt/Image.java \ - java/awt/Rectangle.java \ - java/awt/Event.java \ - java/awt/Font.java \ - java/awt/Insets.java \ - java/awt/Point.java \ - java/awt/FontMetrics.java \ - java/awt/Toolkit.java \ - java/awt/Component.java \ - java/awt/Container.java \ - java/awt/Canvas.java \ - java/awt/Button.java \ - java/awt/List.java \ - java/awt/Adjustable.java \ - java/awt/Scrollbar.java \ - java/awt/ScrollPane.java \ - java/awt/ScrollPaneAdjustable.java \ - java/awt/Window.java \ - java/awt/TextField.java \ - java/awt/Label.java \ - java/awt/Choice.java \ - java/awt/TextArea.java \ - java/awt/MenuBar.java \ - java/awt/Menu.java \ - java/awt/MenuComponent.java \ - java/awt/PopupMenu.java \ - java/awt/Dialog.java \ - java/awt/FileDialog.java \ - java/awt/MenuItem.java \ - java/awt/Checkbox.java \ - java/awt/CheckboxMenuItem.java \ - java/awt/CheckboxGroup.java \ - java/awt/Frame.java \ - java/awt/Transparency.java \ - java/awt/AWTException.java \ - java/awt/AWTEvent.java \ - java/awt/AWTKeyStroke.java \ - java/awt/KeyboardFocusManager.java \ - java/awt/Dimension.java \ - java/awt/SystemColor.java \ - java/awt/TrayIcon.java \ - java/awt/DisplayMode.java \ - java/awt/color/ColorSpace.java \ - java/awt/color/ICC_Profile.java \ - java/awt/geom/PathIterator.java \ - java/awt/image/AffineTransformOp.java \ - java/awt/image/ImageConsumer.java \ - java/awt/image/ImageObserver.java \ - java/awt/image/BufferedImage.java \ - java/awt/image/ColorModel.java \ - java/awt/image/ConvolveOp.java \ - java/awt/image/DirectColorModel.java \ - java/awt/image/IndexColorModel.java \ - java/awt/image/DataBuffer.java \ - java/awt/datatransfer/Transferable.java \ - java/awt/datatransfer/DataFlavor.java \ - java/awt/datatransfer/UnsupportedFlavorException.java \ - java/awt/datatransfer/Clipboard.java \ - java/awt/datatransfer/ClipboardOwner.java \ - java/awt/datatransfer/StringSelection.java \ - java/awt/event/AdjustmentEvent.java \ - java/awt/event/KeyEvent.java \ - java/awt/event/MouseEvent.java \ - java/awt/event/MouseWheelEvent.java \ - java/awt/event/FocusEvent.java \ - java/awt/event/InputEvent.java \ - java/awt/event/WindowEvent.java \ - java/awt/event/NativeLibLoader.java \ - java/awt/peer/ComponentPeer.java \ - java/awt/dnd/DnDConstants.java \ - sun/awt/CausedFocusEvent.java \ - java/awt/print/PageFormat.java \ - java/awt/print/Pageable.java \ - java/awt/print/Printable.java \ - java/awt/BasicStroke.java diff --git a/jdk/makefiles/sun/lwawt/Makefile b/jdk/makefiles/sun/lwawt/Makefile deleted file mode 100644 index 6c0742fdfef..00000000000 --- a/jdk/makefiles/sun/lwawt/Makefile +++ /dev/null @@ -1,114 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -MODULE = awt -PACKAGE = sun.lwawt -LIBRARY = awt_lwawt -PRODUCT = sun - -LIB_LOCATION = $(LIBDIR) - -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -include FILES_c_macosx.gmk -include FILES_export_macosx.gmk -AUTO_FILES_JAVA_DIRS = sun/awt sun/font sun/lwawt sun/lwawt/macosx sun/java2d sun/java2d/opengl com/apple/eawt - -# -# Rules. -# -# include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -# -# Add to the ambient vpath to pick up files in subdirectories -# -vpath %.c $(SHARE_SRC)/native/sun/awt/debug -vpath %.c $(SHARE_SRC)/native/sun/awt/image -vpath %.c $(SHARE_SRC)/native/sun/awt/image/gif -vpath %.c $(SHARE_SRC)/native/sun/awt/image/cvutils -vpath %.c $(SHARE_SRC)/native/sun/awt/shell -vpath %.c $(SHARE_SRC)/native/sun/java2d -vpath %.c $(SHARE_SRC)/native/sun/java2d/loops -vpath %.c $(SHARE_SRC)/native/sun/java2d/pipe -vpath %.c $(SHARE_SRC)/native/sun/java2d/opengl -vpath %.c $(SHARE_SRC)/native/sun/awt/medialib -vpath %.c $(SHARE_SRC)/native/sun/awt/utility -vpath %.c $(SHARE_SRC)/native/sun/font -vpath %.c $(call NativeSrcDirList,,native/sun/awt) - -vpath %.cpp $(SHARE_SRC)/native/sun/image - -vpath %.m $(call NativeSrcDirList,,native/sun/awt) -vpath %.m $(call NativeSrcDirList,,native/sun/font) -vpath %.m $(call NativeSrcDirList,,native/sun/java2d) -vpath %.m $(call NativeSrcDirList,,native/sun/java2d/opengl) - -OTHER_LDLIBS += \ - -lawt -lmlib_image -losxapp $(JVMLIB) $(LIBM) \ - -framework Accelerate \ - -framework ApplicationServices \ - -framework AudioToolbox \ - -framework Carbon \ - -framework Cocoa \ - -framework Security \ - -framework ExceptionHandling \ - -framework JavaNativeFoundation \ - -framework JavaRuntimeSupport \ - -framework OpenGL \ - -framework QuartzCore -CPPFLAGS += \ - -I$(CLASSHDRDIR) \ - -I$(SHARE_SRC)/native/sun/awt/debug \ - -I$(SHARE_SRC)/native/sun/awt/image/cvutils \ - -I$(SHARE_SRC)/native/sun/java2d \ - -I$(SHARE_SRC)/native/sun/java2d/loops \ - -I$(SHARE_SRC)/native/sun/awt/image/cvutils \ - -I$(SHARE_SRC)/native/sun/awt/image \ - -I$(SHARE_SRC)/native/sun/font \ - -I$(SHARE_SRC)/native/sun/java2d/pipe \ - -I$(SHARE_SRC)/native/sun/java2d/opengl \ - -I$(SHARE_SRC)/native/sun/dc/path \ - -I$(SHARE_SRC)/native/sun/dc/doe \ - -I$(SHARE_SRC)/native/sun/awt/alphacomposite \ - -I$(SHARE_SRC)/native/sun/awt/medialib \ - -I$(SHARE_SRC)/native/sun/awt \ - $(call NativeSrcDirList,-I,/native/sun/awt) \ - $(call NativeSrcDirList,-I,/native/sun/osxapp) \ - $(call NativeSrcDirList,-I,/native/sun/font) \ - $(call NativeSrcDirList,-I,/native/sun/java2d) \ - $(call NativeSrcDirList,-I,/native/sun/java2d/opengl) - -ifeq ($(MILESTONE), internal) - CPPFLAGS += -DINTERNAL_BUILD -endif - -clean clobber:: - -.PHONY: diff --git a/jdk/makefiles/sun/nio/Makefile b/jdk/makefiles/sun/nio/Makefile deleted file mode 100644 index 905deeb1cd4..00000000000 --- a/jdk/makefiles/sun/nio/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = sun.nio -PRODUCT = sun -SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=true -SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = cs -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/sun/nio/cs/FILES_java.gmk b/jdk/makefiles/sun/nio/cs/FILES_java.gmk deleted file mode 100644 index 05d722b1be1..00000000000 --- a/jdk/makefiles/sun/nio/cs/FILES_java.gmk +++ /dev/null @@ -1,133 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Character converters for lib/charsets.jar -# -# Core character converters are built from make/java/java. -# - -FILES_gen_extcs = \ - sun/nio/cs/ext/IBM037.java \ - sun/nio/cs/ext/IBM1006.java \ - sun/nio/cs/ext/IBM1025.java \ - sun/nio/cs/ext/IBM1026.java \ - sun/nio/cs/ext/IBM1046.java \ - sun/nio/cs/ext/IBM1047.java \ - sun/nio/cs/ext/IBM1097.java \ - sun/nio/cs/ext/IBM1098.java \ - sun/nio/cs/ext/IBM1112.java \ - sun/nio/cs/ext/IBM1122.java \ - sun/nio/cs/ext/IBM1123.java \ - sun/nio/cs/ext/IBM1124.java \ - sun/nio/cs/ext/IBM1140.java \ - sun/nio/cs/ext/IBM1141.java \ - sun/nio/cs/ext/IBM1142.java \ - sun/nio/cs/ext/IBM1143.java \ - sun/nio/cs/ext/IBM1144.java \ - sun/nio/cs/ext/IBM1145.java \ - sun/nio/cs/ext/IBM1146.java \ - sun/nio/cs/ext/IBM1147.java \ - sun/nio/cs/ext/IBM1148.java \ - sun/nio/cs/ext/IBM1149.java \ - sun/nio/cs/ext/IBM273.java \ - sun/nio/cs/ext/IBM277.java \ - sun/nio/cs/ext/IBM278.java \ - sun/nio/cs/ext/IBM280.java \ - sun/nio/cs/ext/IBM284.java \ - sun/nio/cs/ext/IBM285.java \ - sun/nio/cs/ext/IBM297.java \ - sun/nio/cs/ext/IBM420.java \ - sun/nio/cs/ext/IBM424.java \ - sun/nio/cs/ext/IBM500.java \ - sun/nio/cs/ext/IBM833.java \ - sun/nio/cs/ext/IBM838.java \ - sun/nio/cs/ext/IBM856.java \ - sun/nio/cs/ext/IBM860.java \ - sun/nio/cs/ext/IBM861.java \ - sun/nio/cs/ext/IBM863.java \ - sun/nio/cs/ext/IBM864.java \ - sun/nio/cs/ext/IBM865.java \ - sun/nio/cs/ext/IBM868.java \ - sun/nio/cs/ext/IBM869.java \ - sun/nio/cs/ext/IBM870.java \ - sun/nio/cs/ext/IBM871.java \ - sun/nio/cs/ext/IBM875.java \ - sun/nio/cs/ext/IBM918.java \ - sun/nio/cs/ext/IBM921.java \ - sun/nio/cs/ext/IBM922.java \ - sun/nio/cs/ext/ISO_8859_11.java \ - sun/nio/cs/ext/ISO_8859_3.java \ - sun/nio/cs/ext/ISO_8859_6.java \ - sun/nio/cs/ext/ISO_8859_8.java \ - sun/nio/cs/ext/MS1255.java \ - sun/nio/cs/ext/MS1256.java \ - sun/nio/cs/ext/MS1258.java \ - sun/nio/cs/ext/MS874.java \ - sun/nio/cs/ext/MacArabic.java \ - sun/nio/cs/ext/MacCentralEurope.java \ - sun/nio/cs/ext/MacCroatian.java \ - sun/nio/cs/ext/MacCyrillic.java \ - sun/nio/cs/ext/MacDingbat.java \ - sun/nio/cs/ext/MacGreek.java \ - sun/nio/cs/ext/MacHebrew.java \ - sun/nio/cs/ext/MacIceland.java \ - sun/nio/cs/ext/MacRoman.java \ - sun/nio/cs/ext/MacRomania.java \ - sun/nio/cs/ext/MacSymbol.java \ - sun/nio/cs/ext/MacThai.java \ - sun/nio/cs/ext/MacTurkish.java \ - sun/nio/cs/ext/MacUkraine.java \ - sun/nio/cs/ext/TIS_620.java \ - sun/nio/cs/ext/EUC_TWMapping.java \ - sun/nio/cs/ext/HKSCSMapping.java \ - sun/nio/cs/ext/HKSCS2001Mapping.java \ - sun/nio/cs/ext/HKSCS_XPMapping.java \ - sun/nio/cs/ext/IBM1364.java \ - sun/nio/cs/ext/IBM1381.java \ - sun/nio/cs/ext/IBM1383.java \ - sun/nio/cs/ext/IBM930.java \ - sun/nio/cs/ext/IBM933.java \ - sun/nio/cs/ext/IBM935.java \ - sun/nio/cs/ext/IBM937.java \ - sun/nio/cs/ext/IBM939.java \ - sun/nio/cs/ext/IBM942.java \ - sun/nio/cs/ext/IBM943.java \ - sun/nio/cs/ext/IBM948.java \ - sun/nio/cs/ext/IBM949.java \ - sun/nio/cs/ext/IBM950.java \ - sun/nio/cs/ext/IBM970.java \ - sun/nio/cs/ext/EUC_CN.java \ - sun/nio/cs/ext/EUC_KR.java \ - sun/nio/cs/ext/Johab.java \ - sun/nio/cs/ext/MS932.java \ - sun/nio/cs/ext/MS936.java \ - sun/nio/cs/ext/MS949.java \ - sun/nio/cs/ext/MS950.java \ - sun/nio/cs/ext/GBK.java \ - sun/nio/cs/ext/Big5.java - -FILES_java = $(FILES_src) $(FILES_gen_extcs) - diff --git a/jdk/makefiles/sun/nio/cs/Makefile b/jdk/makefiles/sun/nio/cs/Makefile deleted file mode 100644 index 760b1b178f6..00000000000 --- a/jdk/makefiles/sun/nio/cs/Makefile +++ /dev/null @@ -1,140 +0,0 @@ -# -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for character converters. -# - -BUILDDIR = ../../.. - -# charsets should be separated from nio module -PACKAGE = sun.nio -PRODUCT = sun - -# This re-directs all the class files to a separate location -CLASSDESTDIR = $(TEMPDIR)/classes - -JAVAC_MAX_WARNINGS = false -JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -include FILES_java.gmk -AUTO_FILES_JAVA_DIRS = sun/nio/cs/ext - -# For Cygwin, command line arguments that are paths must be converted to -# windows style paths. These paths cannot be used as targets, however, because -# the ":" in them will interfere with GNU Make rules, generating "multiple -# target pattern" errors. - -# this define is for the rule: -CHARSETS_JAR = $(LIBDIR)/charsets.jar - -# extcs -FILES_genout_extcs = $(FILES_gen_extcs:%.java=$(GENSRCDIR)/%.java) - -# -# These sun.awt charsets use sun/nio/cs/ext charsets that only exist -# in JDK7 charsets.jar, which causes problem when build the symbol -# table for rt.jar in Release.gmk. They are now removed from the -# rt.jar when building jdk/jre image (in Release.gmk), so add them -# into charsets.jar here -# -ifeq ($(PLATFORM), windows) -FILES_src += \ - sun/awt/HKSCS.java -else -# Solaris/Linux -FILES_src += \ - sun/awt/HKSCS.java \ - sun/awt/motif/X11GB2312.java \ - sun/awt/motif/X11GBK.java \ - sun/awt/motif/X11KSC5601.java -endif # PLATFORM - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - -build: $(FILES_genout_extcs) $(CHARSETS_JAR) - -# -# Extra rules to build character converters. - -SERVICE_DESCRIPTION = java.nio.charset.spi.CharsetProvider -SERVICE_DESCRIPTION_PATH = META-INF/services/$(SERVICE_DESCRIPTION) - -GENCSDATASRC = ../../../../make/tools/CharsetMapping -GENCSSRCDIR = ../../../../make/tools/src/build/tools/charsetmapping -GENCSEXT = $(GENSRCDIR)/sun/nio/cs/ext - -FILES_MAP = $(GENCSDATASRC)/sjis0213.map -FILES_DAT = $(CLASSDESTDIR)/sun/nio/cs/ext/sjis0213.dat - -$(FILES_DAT): $(FILES_MAP) - @$(prep-target) - $(TOOL_CHARSETMAPPING) \ - $(FILES_MAP) $(FILES_DAT) sjis0213 - - -$(FILES_genout_extcs): \ - $(GENCSDATASRC)/SingleByte-X.java.template \ - $(GENCSDATASRC)/DoubleByte-X.java.template \ - $(GENCSDATASRC)/extsbcs $(GENCSDATASRC)/dbcs - @$(prep-target) - $(RM) -r $(GENCSEXT) - $(MKDIR) -p $(GENCSEXT) - $(TOOL_CHARSETMAPPING) $(GENCSDATASRC) $(GENCSEXT) extsbcs - $(TOOL_CHARSETMAPPING) $(GENCSDATASRC) $(GENCSEXT) euctw \ - $(GENCSSRCDIR)/EUC_TW.java - $(TOOL_CHARSETMAPPING) $(GENCSDATASRC) $(GENCSEXT) hkscs \ - $(GENCSSRCDIR)/HKSCS.java - $(TOOL_CHARSETMAPPING) $(GENCSDATASRC) $(GENCSEXT) dbcs - -$(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH): \ - $(SHARE_SRC)/classes/sun/nio/cs/ext/$(SERVICE_DESCRIPTION_PATH) - $(install-file) - -# no compression unless requested -ifndef COMPRESS_JARS - CREATE_JAR_OPTS_NOMANIFEST = cf0 -else - CREATE_JAR_OPTS_NOMANIFEST = cf -endif - -$(CHARSETS_JAR): $(FILES_class) $(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH) $(FILES_DAT) - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(CHARSETS_JAR) \ - -C $(CLASSDESTDIR) sun \ - -C $(CLASSDESTDIR) $(SERVICE_DESCRIPTION_PATH) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -clean:: - $(RM) -r $(CLASSDESTDIR) - $(RM) $(CHARSETS_JAR) diff --git a/jdk/makefiles/sun/org/Makefile b/jdk/makefiles/sun/org/Makefile deleted file mode 100644 index a992cde4f32..00000000000 --- a/jdk/makefiles/sun/org/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building Mozilla modules -# - -BUILDDIR = ../.. -PRODUCT = org -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = mozilla -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/sun/org/mozilla/Makefile b/jdk/makefiles/sun/org/mozilla/Makefile deleted file mode 100644 index 0805da63bda..00000000000 --- a/jdk/makefiles/sun/org/mozilla/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building Mozilla JavaScript modules -# - -BUILDDIR = ../../.. -PRODUCT = org -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = javascript -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/sun/org/mozilla/javascript/Makefile b/jdk/makefiles/sun/org/mozilla/javascript/Makefile deleted file mode 100644 index f381b94e33c..00000000000 --- a/jdk/makefiles/sun/org/mozilla/javascript/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all of sun.org.mozilla.javascript.internal.* -# - -BUILDDIR = ../../../.. -PACKAGE = sun.org.mozilla.javascript.internal -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -AUTO_FILES_JAVA_DIRS = sun/org/mozilla/javascript/internal - -RESOURCEDIR = \ - $(CLASSDESTDIR)/sun/org/mozilla/javascript/internal/resources - -FILES_copy = \ - $(RESOURCEDIR)/Messages.properties \ - $(RESOURCEDIR)/Messages_fr.properties - -# -# Rules -# - -include $(BUILDDIR)/common/Classes.gmk - -all: classes copy-files - -# -# Copy resource messages file for Rhino JavaScript interpreter -# - -copy-files: $(FILES_copy) - -$(RESOURCEDIR)/%: $(CLOSED_SRC)/share/classes/sun/org/mozilla/javascript/internal/resources/% - $(install-file) - -.PHONY: copy-files - -clean clobber:: - $(RM) -rf $(CLASSDESTDIR)/sun/org/mozilla/javascript diff --git a/jdk/makefiles/sun/osxapp/Makefile b/jdk/makefiles/sun/osxapp/Makefile deleted file mode 100644 index 7c47edd2d16..00000000000 --- a/jdk/makefiles/sun/osxapp/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -LIBRARY = osxapp -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -FILES_objc = \ - NSApplicationAWT.m \ - QueuingApplicationDelegate.m \ - PropertiesUtilities.m \ - ThreadUtilities.m - -# -# Rules. -# -include $(BUILDDIR)/common/Library.gmk - -# -# Add to the ambient vpath to pick up files in subdirectories -# -vpath %.m $(call NativeSrcDirList,,native/sun/osxapp) - -# TODO: perhaps not all of the below frameworks are required -OTHER_LDLIBS += \ - -framework Accelerate \ - -framework ApplicationServices \ - -framework AudioToolbox \ - -framework Carbon \ - -framework Cocoa \ - -framework Security \ - -framework ExceptionHandling \ - -framework JavaNativeFoundation \ - -framework JavaRuntimeSupport \ - -framework OpenGL \ - -framework IOSurface \ - -framework QuartzCore - -CPPFLAGS += \ - $(call NativeSrcDirList,-I,/native/sun/osxapp) - - -ifeq ($(MILESTONE), internal) - CPPFLAGS += -DINTERNAL_BUILD -endif - -clean clobber:: - -.PHONY: diff --git a/jdk/makefiles/sun/security/Makefile b/jdk/makefiles/sun/security/Makefile deleted file mode 100644 index 14b651d1e1b..00000000000 --- a/jdk/makefiles/sun/security/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -# -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Build classes for security tools: -# -# * keytool -# * jarsigner -# * policytool -# -# Also install wrappers for all of these. -# - -BUILDDIR = ../.. -SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=true -# Can't enable -Werror since krb5/Makefile implicitly compiles -# javax/security/auth/kerberos/ServicePermission.java, which contains -# a fallthrough warning. -#SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# build sun/security/jgss/wrapper on non-windows platform -JGSS_WRAPPER = -ifneq ($(PLATFORM), windows) - JGSS_WRAPPER = jgss/wrapper -endif - -# Build PKCS#11 on all platforms except 64-bit Windows. -# We exclude windows-amd64 because we don't have any -# 64-bit PKCS#11 implementations to test with on that platform. -PKCS11 = pkcs11 -ifeq ($(ARCH_DATA_MODEL), 64) - ifeq ($(PLATFORM), windows) - PKCS11 = - endif -endif - -# Build Microsoft CryptoAPI provider only on Windows platform. -MSCAPI = -ifeq ($(PLATFORM), windows) - MSCAPI = mscapi -endif - -# Build in-tree elliptic curve crypto provider only when -# DISABLE_INTREE_EC is not set -INTREE_EC = ec -ifdef DISABLE_INTREE_EC - INTREE_EC = -endif - -SUBDIRS = $(INTREE_EC) other util krb5 -SUBDIRS_misc = jgss $(PKCS11) $(JGSS_WRAPPER) $(MSCAPI) smartcardio -SUBDIRS_tools = tools -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - -clean:: - $(RM) -r $(CLASSBINDIR)/sun/security diff --git a/jdk/makefiles/sun/security/ec/FILES_c.gmk b/jdk/makefiles/sun/security/ec/FILES_c.gmk deleted file mode 100644 index 278cb21a199..00000000000 --- a/jdk/makefiles/sun/security/ec/FILES_c.gmk +++ /dev/null @@ -1,54 +0,0 @@ -# -# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - ec.c \ - ec2_163.c \ - ec2_193.c \ - ec2_233.c \ - ec2_aff.c \ - ec2_mont.c \ - ecdecode.c \ - ecl.c \ - ecl_curve.c \ - ecl_gf.c \ - ecl_mult.c \ - ec_naf.c \ - ecp_192.c \ - ecp_224.c \ - ecp_256.c \ - ecp_384.c \ - ecp_521.c \ - ecp_aff.c \ - ecp_jac.c \ - ecp_jm.c \ - ecp_mont.c \ - mp_gf2m.c \ - mpi.c \ - mplogic.c \ - mpmontg.c \ - oid.c \ - secitem.c - diff --git a/jdk/makefiles/sun/security/ec/Makefile b/jdk/makefiles/sun/security/ec/Makefile deleted file mode 100644 index 146a24e7a9b..00000000000 --- a/jdk/makefiles/sun/security/ec/Makefile +++ /dev/null @@ -1,332 +0,0 @@ -# -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building sunec.jar and sunec native library. -# -# This file was derived from make/com/sun/crypto/provider/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. For OpenJDK, -# the jar files built here are installed directly into the OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, signed, and then the resulting jar files MUST BE CHECKED -# INTO THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT -# BE FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual, plus the native libraries. -# If OpenJDK, installs sunec.jar. -# If JDK, installs prebuilt -# sunec.jar. -# -# jar Builds/installs sunec.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunec.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunec.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.ec -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS=false -JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Java files -# -AUTO_FILES_JAVA_DIRS = $(PKGDIR) - -# -# Exclude the sources that get built by ../other/Makefile -# -AUTO_JAVA_PRUNE = \ - ECKeyFactory.java \ - ECParameters.java \ - ECPrivateKeyImpl.java \ - ECPublicKeyImpl.java \ - NamedCurve.java - -# -# Some licensees do not get the native ECC sources, but we still need to -# be able to build "all" for them. Check here to see if the sources are -# available. If not, then skip them. -# - -NATIVE_ECC_AVAILABLE := $(shell \ - if [ -d $(SHARE_SRC)/native/$(PKGDIR)/impl ] ; then \ - $(ECHO) true; \ - else \ - $(ECHO) false; \ - fi) - -ifeq ($(NATIVE_ECC_AVAILABLE), true) - - LIBRARY = sunec - - # - # Java files that define native methods - # - FILES_export = \ - $(PKGDIR)/ECDHKeyAgreement.java \ - $(PKGDIR)/ECDSASignature.java \ - $(PKGDIR)/ECKeyPairGenerator.java - - JAVAHFLAGS += -Xbootclasspath/p:$(CLASSDESTDIR) - - # - # C and C++ files - # - include FILES_c.gmk - - FILES_cpp = ECC_JNI.cpp - - CPLUSPLUSLIBRARY=true - - FILES_m = mapfile-vers - - # - # Find native code - # - vpath %.cpp $(SHARE_SRC)/native/$(PKGDIR) - - vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/impl - - # - # Find include files - # - OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR)/impl - - # - # Compiler flags - # - OTHER_CFLAGS += -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B - - # - # Libraries to link - # - ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBCXX) - endif - - include $(BUILDDIR)/common/Mapfile-vers.gmk - - include $(BUILDDIR)/common/Library.gmk - -else # NATIVE_ECC_AVAILABLE - - include $(BUILDDIR)/common/Classes.gmk - -endif # NATIVE_ECC_AVAILABLE - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, -# they will be placed in the appropriate area. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - -# -# Rules -# - -ifdef OPENJDK -all: build-jar install-jar -else -all: build-jar install-prebuilt - $(build-warning) -endif - - -# ===================================================== -# Build the unsigned sunec.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunec.jar - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunec.jar - -# -# Build sunec.jar. -# -$(UNSIGNED_DIR)/sunec.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunec.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunec.jar: $(UNSIGNED_DIR)/sunec.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunec.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunec.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunec.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunec.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunec.jar - $(RM) $(JCE_BUILD_DIR)/release/sunec.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunec.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunec.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunec.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunec.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunEC provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/ec/sunec.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/sun/security/jgss/Makefile b/jdk/makefiles/sun/security/jgss/Makefile deleted file mode 100644 index e8dbb6c2046..00000000000 --- a/jdk/makefiles/sun/security/jgss/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.jgss -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -AUTO_FILES_JAVA_DIRS = sun/security/jgss - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk diff --git a/jdk/makefiles/sun/security/jgss/wrapper/FILES_c.gmk b/jdk/makefiles/sun/security/jgss/wrapper/FILES_c.gmk deleted file mode 100644 index 438168cbfc2..00000000000 --- a/jdk/makefiles/sun/security/jgss/wrapper/FILES_c.gmk +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - NativeUtil.c \ - NativeFunc.c \ - GSSLibStub.c diff --git a/jdk/makefiles/sun/security/jgss/wrapper/Makefile b/jdk/makefiles/sun/security/jgss/wrapper/Makefile deleted file mode 100644 index 91fdf90b475..00000000000 --- a/jdk/makefiles/sun/security/jgss/wrapper/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../../.. -PACKAGE = sun.security.jgss.wrapper -PRODUCT = sun - -LIBRARY = j2gss -# Force name of temp directory (needed due to LIBRARY change below) -LIBRARY_OUTPUT = j2gss - -include $(BUILDDIR)/common/Defs.gmk - -# -# C and Java Files -# -include FILES_c.gmk - -AUTO_FILES_JAVA_DIRS = sun/security/jgss/wrapper - -# -# Java files that define native methods -# -FILES_export = \ - sun/security/jgss/wrapper/GSSLibStub.java - -# -# Find native code -# -vpath %.c \ - $(SHARE_SRC)/native/sun/security/jgss/wrapper \ - $(PLATFORM_SRC)/native/sun/security/jgss/wrapper - -# -# Find include files -# -OTHER_INCLUDES += \ - -I$(SHARE_SRC)/native/sun/security/jgss/wrapper \ - -I$(PLATFORM_SRC)/native/sun/security/jgss/wrapper - -# -# Rules -# -#FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class) - -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -# -# Libraries to link -# -ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBDL) -endif - diff --git a/jdk/makefiles/sun/security/krb5/FILES_c_windows.gmk b/jdk/makefiles/sun/security/krb5/FILES_c_windows.gmk deleted file mode 100644 index 82d5b6b85dc..00000000000 --- a/jdk/makefiles/sun/security/krb5/FILES_c_windows.gmk +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - NativeCreds.c \ - WindowsDirectory.c diff --git a/jdk/makefiles/sun/security/krb5/Makefile b/jdk/makefiles/sun/security/krb5/Makefile deleted file mode 100644 index 02ac6e99d54..00000000000 --- a/jdk/makefiles/sun/security/krb5/Makefile +++ /dev/null @@ -1,90 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.krb5 -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Java Files -# -AUTO_FILES_JAVA_DIRS = sun/security/krb5 - -ifeq ($(PLATFORM), macosx) -FILES_export = sun/security/krb5/Credentials.java -FILES_c = nativeccache.c -LIBRARY = osxkrb5 -endif # PLATFORM - -ifeq ($(PLATFORM), windows) -# -# Java files that define native methods -# -FILES_export = \ - sun/security/krb5/Credentials.java \ - sun/security/krb5/Config.java -include FILES_c_windows.gmk -# We need some extra libs for win32 -LIBRARY = w2k_lsa_auth -EXTRA_LIBS += Secur32.lib netapi32.lib\ - kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ - advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib wsock32.lib -endif # PLATFORM - -# -# Find native code -# -ifeq ($PLATFORM), macosx) - vpath %.c $(call NativeSrcDirList,,native/sun/security/krb5) -else - vpath %.c \ - $(PLATFORM_SRC)/native/sun/security/krb5 -endif - -JGSS_NATIVE_SRC=$(PLATFORM_SRC)/native/sun/security/krb5 -JGSS_NATIVE_DIR_EXISTS := $(shell if [ -d $(JGSS_NATIVE_SRC) ] ; then echo true; else echo false; fi) - -# -# Rules -# -ifeq ($(PLATFORM), windows) - ifeq ($(JGSS_NATIVE_DIR_EXISTS), true) - include $(BUILDDIR)/common/Library.gmk - endif -else ifeq ($(PLATFORM), macosx) - include $(BUILDDIR)/common/Library.gmk -else -include $(BUILDDIR)/common/Classes.gmk -endif # PLATFORM - -ifneq ($(PLATFORM), windows) - ifeq ($(PLATFORM), macosx) - OTHER_LDLIBS = $(LIBDL) -framework Kerberos - else - OTHER_LDLIBS = $(LIBDL) - endif -endif diff --git a/jdk/makefiles/sun/security/mscapi/FILES_cpp.gmk b/jdk/makefiles/sun/security/mscapi/FILES_cpp.gmk deleted file mode 100644 index 20ee872e460..00000000000 --- a/jdk/makefiles/sun/security/mscapi/FILES_cpp.gmk +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_cpp = \ - security.cpp - diff --git a/jdk/makefiles/sun/security/mscapi/Makefile b/jdk/makefiles/sun/security/mscapi/Makefile deleted file mode 100644 index 389d5a1a016..00000000000 --- a/jdk/makefiles/sun/security/mscapi/Makefile +++ /dev/null @@ -1,295 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building sunmscapi.jar and native libraries. -# -# This file was derived from make/com/sun/crypto/provider/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. For OpenJDK, -# the jar files built here are installed directly into the OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, signed, and then the resulting jar files MUST BE CHECKED -# INTO THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT -# BE FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual, plus the native libraries. -# If OpenJDK, installs sunmscapi.jar. -# If JDK, installs prebuilt -# sunmscapi.jar. -# -# jar Builds/installs sunmscapi.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunmscapi.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunmscapi.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.mscapi -LIBRARY = sunmscapi -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing/obfuscation) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -include $(BUILDDIR)/common/Defs.gmk - -CPLUSPLUSLIBRARY=true - -# -# C++ and Java Files -# -include FILES_cpp.gmk - -AUTO_FILES_JAVA_DIRS = sun/security/mscapi - -# -# Java files that define native methods -# -FILES_export = \ - sun/security/mscapi/KeyStore.java \ - sun/security/mscapi/Key.java \ - sun/security/mscapi/PRNG.java \ - sun/security/mscapi/RSACipher.java \ - sun/security/mscapi/RSAPublicKey.java \ - sun/security/mscapi/RSASignature.java \ - sun/security/mscapi/RSAKeyPairGenerator.java - -# -# Find native code -# -vpath %.cpp \ - $(PLATFORM_SRC)/native/sun/security/mscapi - -# -# Find include files -# -OTHER_INCLUDES += \ - -I$(PLATFORM_SRC)/native/sun/security/mscapi - -# -# Rules -# -CLASSDESTDIR = $(TEMPDIR)/classes -JAVAHFLAGS += -Xbootclasspath/p:$(CLASSDESTDIR) - -include $(BUILDDIR)/common/Mapfile-vers.gmk - -include $(BUILDDIR)/common/Library.gmk - -# -# Libraries to link -# -ifeq ($(PLATFORM), windows) - OTHER_LDLIBS += Crypt32.Lib -endif - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, -# they will be placed in the appropriate area. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -# -# Rules -# - -ifdef OPENJDK -all: build-jar install-jar -else -all: build-jar install-prebuilt - $(build-warning) -endif - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - -# ===================================================== -# Build the unsigned sunmscapi.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunmscapi.jar - -# -# The sunmscapi.jar needs to be in the extension class directory, -# therefore none of its classes can appear in $(CLASSBINDIR). -# Currently no one is using any of the MSCAPI internals, so these files -# should not have been built. -# - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunmscapi.jar - -# -# Build sunmscapi.jar. -# -$(UNSIGNED_DIR)/sunmscapi.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunmscapi.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunmscapi.jar: $(UNSIGNED_DIR)/sunmscapi.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunmscapi.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunmscapi.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunmscapi.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunmscapi.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunmscapi.jar - $(RM) $(JCE_BUILD_DIR)/release/sunmscapi.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunmscapi.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunmscapi.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunmscapi.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunmscapi.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunMSCAPI provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/mscapi/sunmscapi.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/sun/security/other/Makefile b/jdk/makefiles/sun/security/other/Makefile deleted file mode 100644 index 37293aa9cb0..00000000000 --- a/jdk/makefiles/sun/security/other/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# -# Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.other -PRODUCT = sun -JAVAC_MAX_WARNINGS=true -JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -AUTO_FILES_JAVA_DIRS = \ - sun/security/acl \ - sun/security/jca \ - sun/security/pkcs \ - sun/security/pkcs10 \ - sun/security/pkcs12 \ - sun/security/provider \ - sun/security/rsa \ - sun/security/ssl \ - sun/security/ssl/krb5 \ - sun/security/timestamp \ - sun/security/validator \ - sun/security/x509 \ - com/sun/net/ssl/internal/ssl - -# -# EC classes used by the packages above -# -FILES_java += \ - sun/security/ec/ECKeyFactory.java \ - sun/security/ec/ECParameters.java \ - sun/security/ec/ECPrivateKeyImpl.java \ - sun/security/ec/ECPublicKeyImpl.java \ - sun/security/ec/NamedCurve.java - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk diff --git a/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk b/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk deleted file mode 100644 index 328547a3f4a..00000000000 --- a/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - j2secmod.c \ - j2secmod_md.c \ - p11_convert.c \ - p11_crypt.c \ - p11_digest.c \ - p11_dual.c \ - p11_general.c \ - p11_keymgmt.c \ - p11_mutex.c \ - p11_objmgmt.c \ - p11_sessmgmt.c \ - p11_sign.c \ - p11_util.c \ - p11_md.c - diff --git a/jdk/makefiles/sun/security/pkcs11/Makefile b/jdk/makefiles/sun/security/pkcs11/Makefile deleted file mode 100644 index 7f9c1c75574..00000000000 --- a/jdk/makefiles/sun/security/pkcs11/Makefile +++ /dev/null @@ -1,312 +0,0 @@ -# -# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building sunpkcs11.jar and native libraries. -# -# This file was derived from make/com/sun/crypto/provider/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. For OpenJDK, -# the jar files built here are installed directly into the OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, signed, and then the resulting jar files MUST BE CHECKED -# INTO THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT -# BE FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual, plus the native libraries. -# If OpenJDK, installs sunpkcs11.jar. -# If JDK, installs prebuilt -# sunpkcs11.jar. -# -# jar Builds/installs sunpkcs11.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunpkcs11.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunpkcs11.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.pkcs11 -LIBRARY = j2pkcs11 -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing/obfuscation) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS=false -JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# -# C and Java Files -# -include FILES_c.gmk - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = sun/security/pkcs11 - -# -# Java files that define native methods -# -FILES_export = \ - sun/security/pkcs11/wrapper/PKCS11.java \ - sun/security/pkcs11/Secmod.java - -# -# Find native code -# -vpath %.c \ - $(SHARE_SRC)/native/sun/security/pkcs11/wrapper \ - $(PLATFORM_SRC)/native/sun/security/pkcs11/wrapper \ - -# -# Find include files -# -OTHER_INCLUDES += \ - -I$(SHARE_SRC)/native/sun/security/pkcs11/wrapper \ - -I$(PLATFORM_SRC)/native/sun/security/pkcs11/wrapper - -# -# Rules -# -CLASSDESTDIR = $(TEMPDIR)/classes -JAVAHFLAGS = -bootclasspath "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)" - -include $(BUILDDIR)/common/Mapfile-vers.gmk - -include $(BUILDDIR)/common/Library.gmk - -# -# Libraries to link -# -ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBDL) -endif - -# Other config files -SUNPKCS11_CFG = - -ifeq ($(PLATFORM), solaris) -#SUNPKCS11_CFG = sunpkcs11-cfg -endif # PLATFORM - -SUNPKCS11_CFG_SRC = $(TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg -SUNPKCS11_CFG_BUILD = $(LIBDIR)/security/sunpkcs11-solaris.cfg - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, -# they will be placed in the appropriate area. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -# -# Rules -# - -ifdef OPENJDK -all: $(SUNPKCS11_CFG) build-jar install-jar -else -all: $(SUNPKCS11_CFG) build-jar install-prebuilt - $(build-warning) -endif - -sunpkcs11-cfg: $(SUNPKCS11_CFG_BUILD) - -$(SUNPKCS11_CFG_BUILD): $(SUNPKCS11_CFG_SRC) - $(install-file) - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - -# ===================================================== -# Build the unsigned sunpkcs11.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunpkcs11.jar - -# -# The sunpkcs11.jar needs to be in the extension class directory, -# therefore none of its classes can appear in $(CLASSBINDIR). -# Currently no one is using any of the PKCS11 internals, so these files -# should not have been built. -# - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunpkcs11.jar - -# -# Build sunpkcs11.jar. -# -$(UNSIGNED_DIR)/sunpkcs11.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunpkcs11.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunpkcs11.jar: $(UNSIGNED_DIR)/sunpkcs11.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunpkcs11.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunpkcs11.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunpkcs11.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunpkcs11.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunpkcs11.jar - $(RM) $(JCE_BUILD_DIR)/release/sunpkcs11.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunpkcs11.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunpkcs11.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunpkcs11.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunpkcs11.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunPKCS11 provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/pkcs11/sunpkcs11.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - $(RM) $(SUNPKCS11_CFG_BUILD) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/sun/security/smartcardio/FILES_c.gmk b/jdk/makefiles/sun/security/smartcardio/FILES_c.gmk deleted file mode 100644 index 67b760eefdf..00000000000 --- a/jdk/makefiles/sun/security/smartcardio/FILES_c.gmk +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - pcsc.c \ - pcsc_md.c diff --git a/jdk/makefiles/sun/security/smartcardio/Makefile b/jdk/makefiles/sun/security/smartcardio/Makefile deleted file mode 100644 index c98e97800e6..00000000000 --- a/jdk/makefiles/sun/security/smartcardio/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.smartcardio -LIBRARY = j2pcsc -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# C and Java Files -# -include FILES_c.gmk - -AUTO_FILES_JAVA_DIRS = sun/security/smartcardio - -# -# Java files that define native methods -# -FILES_export = \ - sun/security/smartcardio/PCSC.java \ - sun/security/smartcardio/PlatformPCSC.java - -# -# Find native code -# -vpath %.c \ - $(SHARE_SRC)/native/sun/security/smartcardio \ - $(PLATFORM_SRC)/native/sun/security/smartcardio - -# -# Find include files -# -OTHER_INCLUDES += \ - -I$(SHARE_SRC)/native/sun/security/smartcardio \ - -I$(PLATFORM_SRC)/native/sun/security/smartcardio \ - -I$(PLATFORM_SRC)/native/sun/security/smartcardio/MUSCLE - -# -# Rules -# -#CLASSDESTDIR = $(TMPDIR)/classes - -#FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class) - -include $(BUILDDIR)/common/Mapfile-vers.gmk - -include $(BUILDDIR)/common/Library.gmk - -# -# Libraries to link -# -ifeq ($(PLATFORM), windows) - OTHER_LDLIBS = winscard.lib -else - OTHER_LDLIBS = $(LIBDL) - OTHER_CFLAGS = -D__sun_jdk -endif diff --git a/jdk/makefiles/sun/security/tools/Makefile b/jdk/makefiles/sun/security/tools/Makefile deleted file mode 100644 index 94f692a2324..00000000000 --- a/jdk/makefiles/sun/security/tools/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.tools -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -AUTO_FILES_JAVA_DIRS = sun/security/tools - -# -# Resources -# -LOCALE_SET_DEFINITION = jdk -RESOURCE_BUNDLES_JAVA = sun/security/tools/JarSignerResources.java - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - -build: -# $(call make-launcher, keytool, sun.security.tools.KeyTool, , ) -#ifndef BUILD_HEADLESS_ONLY -# $(call make-launcher, policytool, sun.security.tools.policytool.PolicyTool, , ) -#endif - diff --git a/jdk/makefiles/sun/security/util/Makefile b/jdk/makefiles/sun/security/util/Makefile deleted file mode 100644 index be7c7f8be0d..00000000000 --- a/jdk/makefiles/sun/security/util/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.util -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -AUTO_FILES_JAVA_DIRS = sun/security/util - -# -# Resources -# -LOCALE_SET_DEFINITION = jre -RESOURCE_BUNDLES_JAVA = sun/security/util/Resources.java - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - diff --git a/jdk/makefiles/sun/splashscreen/FILES_c.gmk b/jdk/makefiles/sun/splashscreen/FILES_c.gmk deleted file mode 100644 index f55b8d71539..00000000000 --- a/jdk/makefiles/sun/splashscreen/FILES_c.gmk +++ /dev/null @@ -1,114 +0,0 @@ -# -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -FILES_c = \ - java_awt_SplashScreen.c \ - splashscreen_gfx_impl.c \ - splashscreen_gif.c \ - splashscreen_impl.c \ - splashscreen_jpeg.c \ - splashscreen_png.c \ - splashscreen_sys.c \ - png.c \ - pngerror.c \ - pngget.c \ - pngmem.c \ - pngpread.c \ - pngread.c \ - pngrio.c \ - pngrtran.c \ - pngrutil.c \ - pngset.c \ - pngtrans.c \ - pngwio.c \ - pngwrite.c \ - pngwtran.c \ - pngwutil.c \ - dgif_lib.c \ - gif_err.c \ - gifalloc.c \ - jcomapi.c \ - jdapimin.c \ - jdapistd.c \ - jdcoefct.c \ - jdcolor.c \ - jddctmgr.c \ - jdhuff.c \ - jdinput.c \ - jdmainct.c \ - jdmarker.c \ - jdmaster.c \ - jdmerge.c \ - jdphuff.c \ - jdpostct.c \ - jdsample.c \ - jerror.c \ - jidctflt.c \ - jidctfst.c \ - jidctint.c \ - jidctred.c \ - jmemmgr.c \ - jmemnobs.c \ - jquant1.c \ - jquant2.c \ - jutils.c \ - jcapimin.c \ - jcapistd.c \ - jccoefct.c \ - jccolor.c \ - jcdctmgr.c \ - jchuff.c \ - jcinit.c \ - jcmainct.c \ - jcmarker.c \ - jcmaster.c \ - jcparam.c \ - jcphuff.c \ - jcprepct.c \ - jcsample.c \ - jctrans.c \ - jdtrans.c \ - jfdctflt.c \ - jfdctfst.c \ - jfdctint.c - -ifneq ($(SYSTEM_ZLIB),true) - FILES_c += \ - compress.c \ - deflate.c \ - gzclose.c \ - gzlib.c \ - gzread.c \ - gzwrite.c \ - infback.c \ - inffast.c \ - inflate.c \ - inftrees.c \ - trees.c \ - uncompr.c \ - zadler32.c \ - zcrc32.c \ - zutil.c -endif diff --git a/jdk/makefiles/sun/splashscreen/Makefile b/jdk/makefiles/sun/splashscreen/Makefile deleted file mode 100644 index 8ca6c35e79c..00000000000 --- a/jdk/makefiles/sun/splashscreen/Makefile +++ /dev/null @@ -1,134 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = sun.awt -LIBRARY = splashscreen -PRODUCT = sun -include $(BUILDDIR)/common/Defs.gmk - -# -# Files -# -include FILES_c.gmk - -FILES_java = \ - java/awt/SplashScreen.java - -FILES_export = \ - java/awt/SplashScreen.java - - -# -# Rules -# -# FIXME!!!! -#ifeq ($(PLATFORM), solaris) -# ifneq ($(ARCH), amd64) -# FILES_reorder += reorder-$(ARCH) -# endif -#endif -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -JAVALIB= - -# -# C Flags -# - -CFLAGS += -DSPLASHSCREEN - -ifeq ($(PLATFORM), macosx) - CFLAGS += -DWITH_MACOSX - - # CFLAGS and CPPFLAGS are added when linking as well, so we use VARIANT - # instead to specify that we're actually compiling objective-c code here - CFLAGS_$(VARIANT)/java_awt_SplashScreen.o = -x objective-c - CFLAGS_$(VARIANT)/splashscreen_gfx_impl.o = -x objective-c - CFLAGS_$(VARIANT)/splashscreen_gif.o = -x objective-c - CFLAGS_$(VARIANT)/splashscreen_impl.o = -x objective-c - CFLAGS_$(VARIANT)/splashscreen_jpeg.o = -x objective-c - CFLAGS_$(VARIANT)/splashscreen_png.o = -x objective-c - CFLAGS_$(VARIANT)/splashscreen_sys.o = -x objective-c - - OTHER_CFLAGS += -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks - CPPFLAGS += -I/System/Library/Frameworks/AppKit.framework/Versions/C/Headers - OTHER_LDLIBS += $(LIBM) -lpthread -liconv -losxapp \ - -framework ApplicationServices \ - -framework Foundation \ - -framework Cocoa \ - -framework JavaNativeFoundation -else ifneq ($(PLATFORM), windows) - CFLAGS += -DWITH_X11 - ifeq ($(PLATFORM), macosx) - OTHER_LDLIBS += -liconv - CPPFLAGS += -I$(OPENWIN_HOME)/include \ - -I$(OPENWIN_HOME)/include/X11/extensions - OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -pthread - else - CPPFLAGS += -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions - OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -lpthread - endif -else # PLATFORM - CFLAGS += -DWITH_WIN32 - OTHER_LDLIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll -#$(JVMLIB) $(OBJDIR)/../../jpeg/$(OBJDIRNAME)/jpeg$(SUFFIX).lib -endif # PLATFORM - -# -# Add to ambient vpath to get files in a subdirectory -# -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/splashscreen -vpath %.c $(SHARE_SRC)/native/$(PKGDIR) -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/giflib -ifneq ($(SYSTEM_ZLIB),true) - vpath %.c $(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION) -endif -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/libpng -vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image/jpeg -ifneq ($(PLATFORM), macosx) - vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/splashscreen -else - vpath %.m $(call NativeSrcDirList,,native/$(PKGDIR)/splashscreen) -endif - -ifneq ($(PLATFORM), macosx) - CPPFLAGS += -I$(PLATFORM_SRC)/native/$(PKGDIR)/splashscreen -else - CPPFLAGS += $(call NativeSrcDirList,-I,native/$(PKGDIR)/splashscreen) - CPPFLAGS += $(call NativeSrcDirList,-I,/native/sun/osxapp) -endif -CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/splashscreen -CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg -ifneq ($(SYSTEM_ZLIB),true) - CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION) -else - OTHER_LDLIBS += -lz -endif - -# Shun the less than portable MMX assembly code in pnggccrd.c, -# and use alternative implementations in C. -CPPFLAGS += -DPNG_NO_MMX_CODE diff --git a/jdk/makefiles/sun/xawt/FILES_c_unix.gmk b/jdk/makefiles/sun/xawt/FILES_c_unix.gmk deleted file mode 100644 index 0ce8bdd11f5..00000000000 --- a/jdk/makefiles/sun/xawt/FILES_c_unix.gmk +++ /dev/null @@ -1,85 +0,0 @@ -# -# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# include rules -# - -FILES_c = \ - XlibWrapper.c \ - XWindow.c \ - XToolkit.c \ - X11Color.c \ - X11SurfaceData.c \ - awt_GraphicsEnv.c \ - awt_InputMethod.c \ - robot_common.c \ - awt_Robot.c \ - list.c \ - multiVis.c \ - initIDs.c \ - awt_util.c \ - awt_Desktop.c \ - awt_UNIXToolkit.c \ - X11FontScaler_md.c \ - X11TextRenderer_md.c \ - fontpath.c \ - awt_Insets.c \ - awt_Event.c \ - X11Renderer.c \ - X11PMBlitLoops.c \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - GLXGraphicsConfig.c \ - GLXSurfaceData.c \ - AccelGlyphCache.c \ - awt_Font.c \ - multi_font.c \ - awt_AWTEvent.c \ - awt_DrawingSurface.c \ - jawt.c \ - CUPSfuncs.c \ - debug_assert.c \ - debug_mem.c \ - debug_trace.c \ - debug_util.c \ - awt_Plugin.c \ - gtk2_interface.c \ - swing_GTKEngine.c \ - swing_GTKStyle.c \ - rect.c \ - sun_awt_X11_GtkFileDialogPeer.c \ - XRSurfaceData.c \ - XRBackendNative.c diff --git a/jdk/makefiles/sun/xawt/FILES_export_unix.gmk b/jdk/makefiles/sun/xawt/FILES_export_unix.gmk deleted file mode 100644 index 5d8d624dfdb..00000000000 --- a/jdk/makefiles/sun/xawt/FILES_export_unix.gmk +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# include rules -# - -FILES_export = \ - sun/awt/X11/XlibWrapper.java \ - sun/awt/X11/XWindow.java \ - sun/awt/X11/XDesktopPeer.java \ - sun/awt/X11/XToolkit.java \ - sun/awt/X11/XComponentPeer.java \ - sun/awt/X11/XInputMethod.java \ - sun/awt/X11/GtkFileDialogPeer.java diff --git a/jdk/makefiles/sun/xawt/Makefile b/jdk/makefiles/sun/xawt/Makefile deleted file mode 100644 index 14409bd18f2..00000000000 --- a/jdk/makefiles/sun/xawt/Makefile +++ /dev/null @@ -1,381 +0,0 @@ -# -# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -PACKAGE = sun.awt.X11 -LIBRARY = awt_xawt -PRODUCT = sun - -include $(BUILDDIR)/common/Defs.gmk - -GEN_DIR=$(GENSRCDIR)/sun/awt/X11 - -CLASSES_INIT += $(TEMPDIR)/.gen.wrappers $(TEMPDIR)/.gen_icons touch.wrappers - -.PHONY: generated.clean - -# -# Files -# -include FILES_c_unix.gmk -include FILES_export_unix.gmk -AUTO_FILES_JAVA_DIRS = sun/awt/X11 -AUTO_JAVA_PRUNE = WrapperGenerator.java - -LDFLAGS += -L$(OPENWIN_LIB) - -# For Xrender extension. -ifeq ($(PLATFORM), solaris) -LDFLAGS += -L/usr/openwin/sfw/lib$(ISA_DIR) -R/usr/openwin/sfw/lib$(ISA_DIR) -endif - -ifeq ($(PLATFORM), linux) -LDFLAGS += -lpthread -dummy := $(shell $(MKDIR) -p $(LIB_LOCATION)) -endif - -ifeq ($(PLATFORM), macosx) -LDFLAGS += -pthread -dummy := $(shell $(MKDIR) -p $(LIB_LOCATION)) -endif - -# Since this library will be living in a subdirectory below the other libraries -# we need to add an extra runpath so that libraries in the upper directory -# are found at runtime. -LD_RUNPATH_EXTRAS = .. - -# -# Rules. -# -include $(BUILDDIR)/common/Mapfile-vers.gmk -include $(BUILDDIR)/common/Library.gmk - -# -# Add to the ambient vpath to pick up files in subdirectories -# -vpath %.c $(SHARE_SRC)/native/sunawt/alphacomposite -vpath %.c $(PLATFORM_SRC)/native/sun/xawt -vpath %.c $(PLATFORM_SRC)/native/sun/awt -vpath %.c $(SHARE_SRC)/native/sun/awt/debug -vpath %.c $(SHARE_SRC)/native/sun/awt/image -vpath %.c $(SHARE_SRC)/native/sun/awt/image/gif -vpath %.c $(SHARE_SRC)/native/sun/awt/image/cvutils -vpath %.c $(SHARE_SRC)/native/sun/awt/shell -vpath %.c $(SHARE_SRC)/native/sun/java2d -vpath %.c $(SHARE_SRC)/native/sun/java2d/loops -vpath %.c $(SHARE_SRC)/native/sun/java2d/pipe -vpath %.c $(SHARE_SRC)/native/sun/awt/medialib -vpath %.c $(SHARE_SRC)/native/sun/awt/utility -vpath %.cpp $(SHARE_SRC)/native/sun/image -vpath %.c $(SHARE_SRC)/native/sun/font -vpath %.c $(PLATFORM_SRC)/native/sun/awt/robot_child -vpath %.c $(SHARE_SRC)/native/sun/java2d/opengl -vpath %.c $(PLATFORM_SRC)/native/sun/java2d/opengl -vpath %.c $(PLATFORM_SRC)/native/sun/java2d/x11 - -OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) \ - $(LDFLAGS_COMMON) $(AWT_RUNPATH) $(OTHER_LDFLAGS) -lXtst -lXi - -ifeq ($(PLATFORM), solaris) -CPPFLAGS += -DFUNCPROTO=15 -dummy := $(shell $(MKDIR) -p $(LIB_LOCATION)) -endif - -CPPFLAGS += $(CUPS_CFLAGS) - -CPPFLAGS += -DXAWT -DXAWT_HACK \ - -I$(TEMPDIR)/../../sun.awt/awt/CClassHeaders \ - -I$(PLATFORM_SRC)/native/sun/awt \ - -I$(PLATFORM_SRC)/native/sun/xawt \ - -I$(PLATFORM_SRC)/native/sun/jdga \ - -I$(SHARE_SRC)/native/sun/awt/debug \ - -I$(SHARE_SRC)/native/sun/awt/image/cvutils \ - -I$(SHARE_SRC)/native/sun/java2d \ - -I$(SHARE_SRC)/native/sun/java2d/loops \ - -I$(SHARE_SRC)/native/sun/awt/image/cvutils \ - -I$(SHARE_SRC)/native/sun/awt/image \ - -I$(SHARE_SRC)/native/sun/font \ - -I$(PLATFORM_SRC)/native/sun/java2d \ - -I$(SHARE_SRC)/native/sun/java2d/pipe \ - -I$(SHARE_SRC)/native/sun/java2d/opengl \ - -I$(PLATFORM_SRC)/native/sun/java2d/opengl \ - -I$(PLATFORM_SRC)/native/sun/java2d/x11 \ - -I$(SHARE_SRC)/native/sun/dc/path \ - -I$(SHARE_SRC)/native/sun/dc/doe \ - -I$(SHARE_SRC)/native/sun/awt/alphacomposite \ - -I$(SHARE_SRC)/native/sun/awt/medialib \ - -I$(PLATFORM_SRC)/native/sun/awt/medialib \ - -I$(PLATFORM_SRC)/native/sun/font \ - -I$(SHARE_SRC)/native/sun/awt \ - -I$(PLATFORM_SRC)/native/sun/awt - -ifeq ($(PLATFORM), linux) - ifndef CROSS_COMPILE_ARCH - # Allows for builds on Debian GNU Linux, X11 is in a different place - # This should really be handled at a higher-level so we don't have to - # work-around this when cross-compiling - CPPFLAGS += -I$(SYS_ROOT)/usr/X11R6/include/X11/extensions \ - -I$(SYS_ROOT)/usr/include/X11/extensions \ - -I$(OPENWIN_HOME)/include - else - CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions \ - -I$(OPENWIN_HOME)/include - endif -endif - -# We have some odd logic here because some Solaris 10 updates -# have a render.h file that suggests gradients are supported, but -# the Xrender.h doesn't have the corresponding type definitions. -# Earlier updates have neither. We'd like to know if there's a mismatch. -# Whilst in the C preprocessor we can tell if the render.h define's are set -# we can't tell anything about C declarations. -# A grep of Xrender.h is the only way to know this. If they are absent -# we will set a flag indicating this mismatch and the JDK source file -# will interpret it to resolve the problem. -ifeq ($(PLATFORM), solaris) - CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions - OS_VERSION := $(shell uname -r) - XRENDER_H := $(OPENWIN_HOME)/share/include/X11/extensions/Xrender.h - ifeq ($(OS_VERSION),5.10) - LINEARGRADIENT_CNT := $(shell $(EGREP) -c XLinearGradient $(XRENDER_H)) - ifeq ($(LINEARGRADIENT_CNT),0) - CFLAGS+= -DSOLARIS10_NO_XRENDER_STRUCTS - endif - endif -endif - -ifeq ($(PLATFORM), macosx) - CPPFLAGS += -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" -endif - -ifeq ($(MILESTONE), internal) - CPPFLAGS += -DINTERNAL_BUILD -endif - -# -# Generation of wrappers -# -SIZER_DIR=$(GEN_DIR)/generator -SIZER = $(SIZER_DIR)/sizer -SIZER_32_C = $(SIZER).32.c -SIZER_64_C = $(SIZER).64.c -CFLAGS_32=$(CFLAGS) -CFLAGS_64=$(CFLAGS) - -ifeq ($(PLATFORM), solaris) - -isalist:=$(shell $(ISAINFO)) - -ifneq (,$(findstring sparcv9, $(isalist))) -# On sparcv9 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL. -# On sparcv9 CFLAGS already contain $(XARCH_OPTION/64), so to generate 32-bit sizer we need to change this option. -CFLAGS_32=$(subst $(XARCH_OPTION/64),$(XARCH_OPTION/32),$(CFLAGS)) -SIZERS = $(SIZER).32 $(SIZER).64 -SIZERS_C = $(SIZER_32_C) $(SIZER_64_C) -SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 $(WRAPPER_GENERATOR_DIR)/sizes.64 -CFLAGS_64=$(CFLAGS) $(XARCH_OPTION/64) -else -ifneq (,$(findstring amd64, $(isalist))) -# On amd64 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL. -# On amd64 CFLAGS already contain $(XARCH_OPTION/64), so to generate 32-bit sizer we need to change this option. -CFLAGS_32=$(subst $(XARCH_OPTION/64),$(XARCH_OPTION/32),$(CFLAGS)) -SIZERS = $(SIZER).32 $(SIZER).64 -SIZERS_C = $(SIZER_32_C) $(SIZER_64_C) -SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 $(WRAPPER_GENERATOR_DIR)/sizes.64 -CFLAGS_64=$(CFLAGS) $(XARCH_OPTION/64) -else # !sparcv9 : includes (32-bit) sparc, i586 -SIZERS = $(SIZER).32 -SIZERS_C = $(SIZER_32_C) -SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 -endif # amd64 -endif # sparcv9 - -else # !solaris - -ifeq ($(PLATFORM), macosx) -CFLAGS_32=-arch i386 -SIZERS = $(SIZER).32 $(SIZER).64 -SIZERS_C = $(SIZER_32_C) $(SIZER_64_C) -SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 $(WRAPPER_GENERATOR_DIR)/sizes.64 -CFLAGS_64=-arch x86_64 -else # !macosx -ifeq ($(ARCH_DATA_MODEL), 32) -SIZERS = $(SIZER).32 -SIZERS_C = $(SIZER_32_C) -SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 -else # !32 -SIZERS = $(SIZER).64 -SIZERS_C = $(SIZER_64_C) -SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.64 -endif # 32 -endif # !macosx -endif # solaris - -# XXX Hack for 6185483 - use hard-coded sizes. -# Add the 64-bit platforms that need to be included into 32-bit build -# and have sizes.64-$(PLATFORM)-$(LIBARCH) hardcoded in the workspace -ifeq ($(PLATFORM)-$(LIBARCH), solaris-i386) -# If you define DOHACK=true for some combination of $(PLATFORM)-$(LIBARCH), -# make sure you have sizes.64-$(PLATFORM)-$(LIBARCH) pre-generated in -# $(PLATFORM_SRC)/classes/sun/awt/X11/generator/ -DOHACK=true -endif # Hack - -ifeq ($(DOHACK), true) -PREDEFINED_SIZES_TMPL=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/sizes.64-$(PLATFORM)-$(LIBARCH) -PREDEFINED_SIZES=$(WRAPPER_GENERATOR_DIR)/sizes.64 -SIZES += $(WRAPPER_GENERATOR_DIR)/sizes.64 -endif - -ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) -DOCOMPARE=true -endif -# 64 bit sizers are generated on platform-libarch (left) for use -# on platform-libarch (right) and stored under the latter name. -# Do compare manually stored and automatically generated pair(s) -# if DOCOMPARE=true, just after the generation. -STORED_SIZES_TMPL_solaris_amd64=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/sizes.64-solaris-i386 - -WRAPPER_GENERATOR_JAVA=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/WrapperGenerator.java -WRAPPER_GENERATOR_DIR=$(GENSRCDIR)/sun/awt/X11/generator -WRAPPER_GENERATOR_TEMPDIR=$(TEMPDIR)/sun/awt/X11/generator -WRAPPER_GENERATOR_CLASS=$(WRAPPER_GENERATOR_TEMPDIR)/WrapperGenerator.class -XLIBTYPES=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/xlibtypes.txt - -$(SIZERS): $(SIZERS_C) - $(prep-target) -ifndef CROSS_COMPILE_ARCH - $(CC) $(CFLAGS_$(subst .,,$(suffix $@))) $(CPPFLAGS) -c -o $(SIZER)$(suffix $@).o $(SIZER)$(suffix $@).c - $(CC) $(CFLAGS_$(subst .,,$(suffix $@))) -o $@ $(CPPFLAGS) $(SIZER)$(suffix $@).o -else - $(HOST_CC) $(CPPFLAGS) -c -o $(SIZER)$(suffix $@).o $(SIZER)$(suffix $@).c - $(HOST_CC) $(CPPFLAGS) -o $@ $(SIZER)$(suffix $@).o -endif - -$(WRAPPER_GENERATOR_CLASS): $(WRAPPER_GENERATOR_JAVA) - $(prep-target) - $(BOOT_JAVAC_CMD) -d $(WRAPPER_GENERATOR_TEMPDIR) $(WRAPPER_GENERATOR_JAVA) - -$(SIZERS_C): $(WRAPPER_GENERATOR_CLASS) $(XLIBTYPES) - $(prep-target) - $(MKDIR) -p $(WRAPPER_GENERATOR_TEMPDIR) - $(BOOT_JAVA_CMD) -cp $(WRAPPER_GENERATOR_TEMPDIR) WrapperGenerator \ - $(SIZER_DIR) $(XLIBTYPES) "sizer" $(subst .,,$(suffix $(basename $@))) - -$(SIZES): $(SIZERS) - @if [ "$(DOHACK)$@" = "true$(PREDEFINED_SIZES)" ]; then \ - $(ECHO) COPYING $(PREDEFINED_SIZES_TMPL) into $@; \ - $(CP) $(PREDEFINED_SIZES_TMPL) $@; \ - $(CHMOD) +w $@;\ - else \ - $(ECHO) GENERATING $@; \ - $(WRAPPER_GENERATOR_DIR)/sizer$(suffix $@) > $@; \ - fi - @if [ "$(DOCOMPARE)$(suffix $@)" = "true.64" ]; then \ - $(ECHO) COMPARING $@ and $(STORED_SIZES_TMPL_$(PLATFORM)_$(LIBARCH)); \ - $(DIFF) $@ $(STORED_SIZES_TMPL_$(PLATFORM)_$(LIBARCH)); \ - fi - -$(TEMPDIR)/.gen.wrappers: $(SIZES) $(WRAPPER_GENERATOR_CLASS) $(XLIBTYPES) - $(BOOT_JAVA_CMD) -cp $(WRAPPER_GENERATOR_TEMPDIR) WrapperGenerator \ - $(GEN_DIR) $(XLIBTYPES) "gen" $(WRAPPER_GENERATOR_DIR)/sizes - -touch.wrappers: $(TEMPDIR)/.gen.wrappers - $(MKDIR) -p $(TEMPDIR) - $(TOUCH) $(TEMPDIR)/.gen.wrappers - -generated.clean: - $(RM) -r $(WRAPPER_GENERATOR_TEMPDIR) - $(RM) -r $(WRAPPER_GENERATOR_DIR) - $(RM) -r $(GEN_DIR)/*.java - $(RM) -r $(TEMPDIR)/.gen_icons - -ifdef OPENJDK - ICONS_PATH_PREFIX=$(PLATFORM_SRC) -else - ICONS_PATH_PREFIX=$(CLOSED_SRC)/solaris -endif - -ICONS = \ - $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon16.png \ - $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon24.png \ - $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon32.png \ - $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png - - -ICONPATH=$(PLATFORM_SRC)/classes/sun/awt/X11 - -ICONS += \ - $(ICONPATH)/security-icon-bw16.png \ - $(ICONPATH)/security-icon-interim16.png \ - $(ICONPATH)/security-icon-yellow16.png \ - $(ICONPATH)/security-icon-bw24.png \ - $(ICONPATH)/security-icon-interim24.png \ - $(ICONPATH)/security-icon-yellow24.png \ - $(ICONPATH)/security-icon-bw32.png \ - $(ICONPATH)/security-icon-interim32.png \ - $(ICONPATH)/security-icon-yellow32.png \ - $(ICONPATH)/security-icon-bw48.png \ - $(ICONPATH)/security-icon-interim48.png \ - $(ICONPATH)/security-icon-yellow48.png - -TEMPDIR_CLASSES = $(TEMPDIR)/classes - -$(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class: ToBin.java - @$(prep-target) - $(BOOT_JAVAC_CMD) -d $(TEMPDIR_CLASSES) $< - -$(TEMPDIR)/.gen_icons: $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class $(ICONS) - $(prep-target) - for i in $(ICONS); do \ - filename=`basename $$i`; \ - name=`$(ECHO) $$filename | $(TR) '\-.' '__'`; \ - classname=$(GEN_DIR)/XAWTIcon32_$$name.java; \ - $(RM) $$classname; \ - $(ECHO) "package sun.awt.X11;" >> $$classname ; \ - $(ECHO) "public class XAWTIcon32_$$name {" >> $$classname; \ - $(ECHO) "public static int[] $$name = { " >> $$classname; \ - $(CAT) $$i | \ - $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES) \ - -Djava.awt.headless=true \ - sun.awt.X11.ToBin >> $$classname; \ - $(ECHO) "}; }" >> $$classname; \ - classname=$(GEN_DIR)/XAWTIcon64_$$name.java; \ - $(RM) $$classname; \ - $(ECHO) "package sun.awt.X11;" >> $$classname ; \ - $(ECHO) "public class XAWTIcon64_$$name {" >> $$classname; \ - $(ECHO) "public static long[] $$name = { " >> $$classname; \ - $(CAT) $$i | \ - $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES) \ - -Djava.awt.headless=true \ - sun.awt.X11.ToBin >> $$classname; \ - $(ECHO) "}; }" >> $$classname; \ - done - $(TOUCH) $@ - -clean clobber:: generated.clean - -.PHONY: generated.clean robot_child - diff --git a/jdk/src/macosx/classes/apple/applescript/AppleScriptEngine.java b/jdk/src/macosx/classes/apple/applescript/AppleScriptEngine.java index 06a20d79e7c..917037b7998 100644 --- a/jdk/src/macosx/classes/apple/applescript/AppleScriptEngine.java +++ b/jdk/src/macosx/classes/apple/applescript/AppleScriptEngine.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ package apple.applescript; import java.io.*; +import java.nio.file.Files; import java.util.*; import java.util.Map.Entry; @@ -297,7 +298,7 @@ public class AppleScriptEngine implements ScriptEngine { File tmpfile; FileWriter tmpwrite; try { - tmpfile = File.createTempFile("AppleScriptEngine.", ".scpt"); + tmpfile = Files.createTempFile("AppleScriptEngine.", ".scpt").toFile(); tmpwrite = new FileWriter(tmpfile); // read in our input and write directly to tmpfile diff --git a/jdk/src/macosx/classes/apple/laf/JRSUIConstants.java b/jdk/src/macosx/classes/apple/laf/JRSUIConstants.java index 37d1c5d32f8..8e71a50c658 100644 --- a/jdk/src/macosx/classes/apple/laf/JRSUIConstants.java +++ b/jdk/src/macosx/classes/apple/laf/JRSUIConstants.java @@ -28,9 +28,13 @@ package apple.laf; import java.lang.reflect.Field; import java.nio.ByteBuffer; +import javax.tools.annotation.GenerateNativeHeader; + public final class JRSUIConstants { private static native long getPtrForConstant(final int constant); + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader static class Key { protected static final int _value = 20; public static final Key VALUE = new Key(_value); @@ -66,6 +70,8 @@ public final class JRSUIConstants { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader static class DoubleValue { protected static final byte TYPE_CODE = 1; @@ -133,6 +139,8 @@ public final class JRSUIConstants { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Size extends Property { private static final byte SHIFT = 0; private static final byte SIZE = 3; @@ -153,6 +161,8 @@ public final class JRSUIConstants { public static final Size LARGE = new Size(_large); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class State extends Property { private static final byte SHIFT = Size.SHIFT + Size.SIZE; private static final byte SIZE = 4; @@ -179,6 +189,8 @@ public final class JRSUIConstants { public static final State DRAG = new State(_drag); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Direction extends Property { private static final byte SHIFT = State.SHIFT + State.SIZE; private static final byte SIZE = 4; @@ -209,6 +221,8 @@ public final class JRSUIConstants { public static final Direction WEST = new Direction(_west); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Orientation extends Property { private static final byte SHIFT = Direction.SHIFT + Direction.SIZE; private static final byte SIZE = 2; @@ -225,6 +239,8 @@ public final class JRSUIConstants { public static final Orientation VERTICAL = new Orientation(_vertical); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class AlignmentVertical extends Property { private static final byte SHIFT = Orientation.SHIFT + Orientation.SIZE; private static final byte SIZE = 2; @@ -243,6 +259,8 @@ public final class JRSUIConstants { public static final AlignmentVertical BOTTOM = new AlignmentVertical(_bottom); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class AlignmentHorizontal extends Property { private static final byte SHIFT = AlignmentVertical.SHIFT + AlignmentVertical.SIZE; private static final byte SIZE = 2; @@ -261,6 +279,8 @@ public final class JRSUIConstants { public static final AlignmentHorizontal RIGHT = new AlignmentHorizontal(_right); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class SegmentPosition extends Property { private static final byte SHIFT = AlignmentHorizontal.SHIFT + AlignmentHorizontal.SIZE; private static final byte SIZE = 3; @@ -281,6 +301,8 @@ public final class JRSUIConstants { public static final SegmentPosition ONLY = new SegmentPosition(_only); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class ScrollBarPart extends Property { private static final byte SHIFT = SegmentPosition.SHIFT + SegmentPosition.SIZE; private static final byte SIZE = 4; @@ -309,6 +331,8 @@ public final class JRSUIConstants { public static final ScrollBarPart TRACK_MAX = new ScrollBarPart(_trackMax); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Variant extends Property { private static final byte SHIFT = ScrollBarPart.SHIFT + ScrollBarPart.SIZE; private static final byte SIZE = 4; @@ -340,6 +364,8 @@ public final class JRSUIConstants { public static final Variant GRADIENT_SIDE_BAR_FOCUSED_SELECTION = new Variant(_gradientSideBarFocusedSelection); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class WindowType extends Property { private static final byte SHIFT = Variant.SHIFT + Variant.SIZE; private static final byte SIZE = 2; @@ -358,6 +384,8 @@ public final class JRSUIConstants { public static final WindowType TITLELESS_UTILITY = new WindowType(_titlelessUtility); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Focused extends Property { private static final byte SHIFT = WindowType.SHIFT + WindowType.SIZE; private static final byte SIZE = 1; @@ -374,6 +402,8 @@ public final class JRSUIConstants { public static final Focused YES = new Focused(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class IndicatorOnly extends Property { private static final byte SHIFT = Focused.SHIFT + Focused.SIZE; private static final byte SIZE = 1; @@ -390,6 +420,8 @@ public final class JRSUIConstants { public static final IndicatorOnly YES = new IndicatorOnly(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class NoIndicator extends Property { private static final byte SHIFT = IndicatorOnly.SHIFT + IndicatorOnly.SIZE; private static final byte SIZE = 1; @@ -406,6 +438,8 @@ public final class JRSUIConstants { public static final NoIndicator YES = new NoIndicator(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class ArrowsOnly extends Property { private static final byte SHIFT = NoIndicator.SHIFT + NoIndicator.SIZE; private static final byte SIZE = 1; @@ -422,6 +456,8 @@ public final class JRSUIConstants { public static final ArrowsOnly YES = new ArrowsOnly(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class FrameOnly extends Property { private static final byte SHIFT = ArrowsOnly.SHIFT + ArrowsOnly.SIZE; private static final byte SIZE = 1; @@ -438,6 +474,8 @@ public final class JRSUIConstants { public static final FrameOnly YES = new FrameOnly(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class SegmentTrailingSeparator extends Property { private static final byte SHIFT = FrameOnly.SHIFT + FrameOnly.SIZE; private static final byte SIZE = 1; @@ -454,6 +492,8 @@ public final class JRSUIConstants { public static final SegmentTrailingSeparator YES = new SegmentTrailingSeparator(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class SegmentLeadingSeparator extends Property { private static final byte SHIFT = SegmentTrailingSeparator.SHIFT + SegmentTrailingSeparator.SIZE; private static final byte SIZE = 1; @@ -470,6 +510,8 @@ public final class JRSUIConstants { public static final SegmentLeadingSeparator YES = new SegmentLeadingSeparator(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class NothingToScroll extends Property { private static final byte SHIFT = SegmentLeadingSeparator.SHIFT + SegmentLeadingSeparator.SIZE; private static final byte SIZE = 1; @@ -486,6 +528,8 @@ public final class JRSUIConstants { public static final NothingToScroll YES = new NothingToScroll(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class WindowTitleBarSeparator extends Property { private static final byte SHIFT = NothingToScroll.SHIFT + NothingToScroll.SIZE; private static final byte SIZE = 1; @@ -502,6 +546,8 @@ public final class JRSUIConstants { public static final WindowTitleBarSeparator YES = new WindowTitleBarSeparator(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class WindowClipCorners extends Property { private static final byte SHIFT = WindowTitleBarSeparator.SHIFT + WindowTitleBarSeparator.SIZE; private static final byte SIZE = 1; @@ -518,6 +564,8 @@ public final class JRSUIConstants { public static final WindowClipCorners YES = new WindowClipCorners(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class ShowArrows extends Property { private static final byte SHIFT = WindowClipCorners.SHIFT + WindowClipCorners.SIZE; private static final byte SIZE = 1; @@ -534,6 +582,8 @@ public final class JRSUIConstants { public static final ShowArrows YES = new ShowArrows(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class BooleanValue extends Property { private static final byte SHIFT = ShowArrows.SHIFT + ShowArrows.SIZE; private static final byte SIZE = 1; @@ -550,6 +600,8 @@ public final class JRSUIConstants { public static final BooleanValue YES = new BooleanValue(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Animating extends Property { private static final byte SHIFT = BooleanValue.SHIFT + BooleanValue.SIZE; private static final byte SIZE = 1; @@ -566,6 +618,8 @@ public final class JRSUIConstants { public static final Animating YES = new Animating(_yes); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Widget extends Property { private static final byte SHIFT = Animating.SHIFT + Animating.SIZE; private static final byte SIZE = 7; @@ -755,6 +809,8 @@ public final class JRSUIConstants { public static final Widget WINDOW_FRAME = new Widget(_windowFrame); } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Hit { private static final int _unknown = -1; public static final Hit UNKNOWN = new Hit(_unknown); @@ -775,6 +831,8 @@ public final class JRSUIConstants { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class ScrollBarHit extends Hit { private static final int _thumb = 2; public static final ScrollBarHit THUMB = new ScrollBarHit(_thumb); diff --git a/jdk/src/macosx/classes/com/apple/eawt/FullScreenHandler.java b/jdk/src/macosx/classes/com/apple/eawt/FullScreenHandler.java index 8b8c2a5da16..7ad93640215 100644 --- a/jdk/src/macosx/classes/com/apple/eawt/FullScreenHandler.java +++ b/jdk/src/macosx/classes/com/apple/eawt/FullScreenHandler.java @@ -33,6 +33,10 @@ import javax.swing.RootPaneContainer; import com.apple.eawt.AppEvent.FullScreenEvent; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader final class FullScreenHandler { private static final String CLIENT_PROPERTY = "com.apple.eawt.event.internalFullScreenHandler"; diff --git a/jdk/src/macosx/classes/com/apple/eawt/event/GestureHandler.java b/jdk/src/macosx/classes/com/apple/eawt/event/GestureHandler.java index eb636f44791..3b4d54f4287 100644 --- a/jdk/src/macosx/classes/com/apple/eawt/event/GestureHandler.java +++ b/jdk/src/macosx/classes/com/apple/eawt/event/GestureHandler.java @@ -31,6 +31,10 @@ import java.util.List; import javax.swing.*; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader final class GestureHandler { private static final String CLIENT_PROPERTY = "com.apple.eawt.event.internalGestureHandler"; diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaButtonLabeledUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaButtonLabeledUI.java index 95503c8271d..d9ebdd0e11d 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaButtonLabeledUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaButtonLabeledUI.java @@ -30,6 +30,7 @@ import java.awt.image.BufferedImage; import javax.swing.*; import javax.swing.border.Border; +import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.View; @@ -76,8 +77,11 @@ public abstract class AquaButtonLabeledUI extends AquaButtonToggleUI implements protected void setThemeBorder(final AbstractButton b) { super.setThemeBorder(b); - // Set the correct border - b.setBorder(AquaButtonBorder.getBevelButtonBorder()); + Border border = b.getBorder(); + if (border == null || border instanceof UIResource) { + // Set the correct border + b.setBorder(AquaButtonBorder.getBevelButtonBorder()); + } } protected abstract AquaButtonBorder getPainter(); diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java index ea09bf8a9b7..fca44784938 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java @@ -257,7 +257,7 @@ public class AquaInternalFrameUI extends BasicInternalFrameUI implements SwingCo } public Dimension getPreferredSize(JComponent x) { - Dimension preferredSize = super.getMinimumSize(x); + Dimension preferredSize = super.getPreferredSize(x); Dimension minimumSize = frame.getMinimumSize(); if (preferredSize.width < minimumSize.width) { preferredSize.width = minimumSize.width; diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java b/jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java index c7d970c13fd..3c872df2b26 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java @@ -250,6 +250,7 @@ public class AquaLookAndFeel extends BasicLookAndFeel { */ private void initResourceBundle(final UIDefaults table) { table.setDefaultLocale(Locale.getDefault()); + table.addResourceBundle(PKG_PREFIX + "resources.aqua"); try { final ResourceBundle aquaProperties = MacOSXResourceBundle.getMacResourceBundle(PKG_PREFIX + "resources.aqua"); final Enumeration propertyKeys = aquaProperties.getKeys(); @@ -259,7 +260,6 @@ public class AquaLookAndFeel extends BasicLookAndFeel { table.put(key, aquaProperties.getString(key)); } } catch (final Exception e) { - table.addResourceBundle(PKG_PREFIX + "resources.aqua"); } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java index 07a758f7d9f..960705b8ead 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java @@ -32,10 +32,20 @@ import javax.swing.plaf.basic.BasicPanelUI; import com.apple.laf.AquaUtils.RecyclableSingleton; import com.apple.laf.AquaUtils.RecyclableSingletonFromDefaultConstructor; +import java.awt.Graphics; + public class AquaPanelUI extends BasicPanelUI { static RecyclableSingleton instance = new RecyclableSingletonFromDefaultConstructor(AquaPanelUI.class); public static ComponentUI createUI(final JComponent c) { return instance.get(); } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java index e7277128fe7..6f3c1f2534f 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java @@ -319,4 +319,12 @@ public class AquaRootPaneUI extends BasicRootPaneUI implements AncestorListener, updateComponentTreeUIActivation(element, active); } } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java index 1035a3e535e..39eb640e3db 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java @@ -60,6 +60,10 @@ public class AquaScrollPaneUI extends javax.swing.plaf.basic.BasicScrollPaneUI { if (wasVisible) { vScrollBar.setVisible(true); } + + // Consume the event even when the scrollBar is invisible + // see #7124320 + e.consume(); } } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaTabbedPaneUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaTabbedPaneUI.java index f463d640fed..7dbc187296d 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaTabbedPaneUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaTabbedPaneUI.java @@ -318,7 +318,7 @@ public class AquaTabbedPaneUI extends AquaTabbedPaneCopyFromBasicUI { } // not for the scrolling tabs - if (tabIndex >= 0) { + if (component == null && tabIndex >= 0) { paintTitle(g2d, font, metrics, textRect, tabIndex, title); } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java index 660cff318d6..bf87e2d1bb7 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java @@ -73,9 +73,7 @@ public class AquaToolBarUI extends BasicToolBarUI implements SwingConstants { g.translate(x, y); if (c.isOpaque()) { - final Color background = c.getBackground(); - g.setColor(background); - g.fillRect(0, 0, w - 1, h - 1); + AquaUtils.fillRect(g, c, c.getBackground(), 0, 0, w - 1, h - 1); } final Color oldColor = g.getColor(); @@ -137,4 +135,12 @@ public class AquaToolBarUI extends BasicToolBarUI implements SwingConstants { return true; } } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java b/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java index 58b0d1efb98..0592da714a2 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java @@ -28,18 +28,19 @@ package com.apple.laf; import java.awt.*; import java.awt.image.*; import java.lang.ref.SoftReference; -import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.security.PrivilegedAction; import java.util.*; import javax.swing.*; import javax.swing.border.Border; +import javax.swing.plaf.UIResource; import sun.awt.AppContext; import sun.lwawt.macosx.CImage; import sun.lwawt.macosx.CImage.Creator; +import sun.lwawt.macosx.CPlatformWindow; import sun.swing.SwingUtilities2; import com.apple.laf.AquaImageFactory.SlicedImageControl; @@ -389,4 +390,51 @@ public class AquaUtils { return false; } } + + protected static boolean isWindowTextured(final Component c) { + if (!(c instanceof JComponent)) { + return false; + } + final JRootPane pane = ((JComponent) c).getRootPane(); + if (pane == null) { + return false; + } + Object prop = pane.getClientProperty( + CPlatformWindow.WINDOW_BRUSH_METAL_LOOK); + if (prop != null) { + return Boolean.parseBoolean(prop.toString()); + } + prop = pane.getClientProperty(CPlatformWindow.WINDOW_STYLE); + return prop != null && "textured".equals(prop); + } + + private static Color resetAlpha(final Color color) { + return new Color(color.getRed(), color.getGreen(), color.getBlue(), 0); + } + + protected static void fillRect(final Graphics g, final Component c) { + fillRect(g, c, c.getBackground(), 0, 0, c.getWidth(), c.getHeight()); + } + + protected static void fillRect(final Graphics g, final Component c, + final Color color, final int x, final int y, + final int w, final int h) { + if (!(g instanceof Graphics2D)) { + return; + } + final Graphics2D cg = (Graphics2D) g.create(); + try { + if (color instanceof UIResource && isWindowTextured(c) + && color.equals(SystemColor.window)) { + cg.setComposite(AlphaComposite.Src); + cg.setColor(resetAlpha(color)); + } else { + cg.setColor(color); + } + cg.fillRect(x, y, w, h); + } finally { + cg.dispose(); + } + } } + diff --git a/jdk/src/macosx/classes/com/apple/laf/resources/aqua.properties b/jdk/src/macosx/classes/com/apple/laf/resources/aqua.properties index 30a840d9520..17f7a94584a 100644 --- a/jdk/src/macosx/classes/com/apple/laf/resources/aqua.properties +++ b/jdk/src/macosx/classes/com/apple/laf/resources/aqua.properties @@ -36,45 +36,45 @@ # support. ############ FILE CHOOSER STRINGS ############# -FileChooser.fileDescriptionText=Generic File -FileChooser.directoryDescriptionText=Directory -FileChooser.newFolderErrorText=Error occured during folder creation +FileChooser.fileDescription.textAndMnemonic=Generic File +FileChooser.directoryDescription.textAndMnemonic=Directory +FileChooser.newFolderError.textAndMnemonic=Error occured during folder creation FileChooser.newFolderErrorSeparator= : -FileChooser.acceptAllFileFilterText=All Files -FileChooser.cancelButtonText=Cancel -FileChooser.saveButtonText=Save -FileChooser.openButtonText=Open -FileChooser.saveDialogTitleText=Save -FileChooser.openDialogTitleText=Open -FileChooser.updateButtonText=Update -FileChooser.helpButtonText=Help -FileChooser.directoryOpenButtonText=Open +FileChooser.acceptAllFileFilter.textAndMnemonic=All Files +FileChooser.cancelButton.textAndMnemonic=Cancel +FileChooser.saveButton.textAndMnemonic=Save +FileChooser.openButton.textAndMnemonic=Open +FileChooser.saveDialogTitle.textAndMnemonic=Save +FileChooser.openDialogTitle.textAndMnemonic=Open +FileChooser.updateButton.textAndMnemonic=Update +FileChooser.helpButton.textAndMnemonic=Help +FileChooser.directoryOpenButton.textAndMnemonic=Open # File Size Units FileChooser.fileSizeKiloBytes={0} KB FileChooser.fileSizeMegaBytes={0} MB FileChooser.fileSizeGigaBytes={0} GB -// Mac-specific strings -FileChooser.saveTitleText=Save -FileChooser.openTitleText=Open -FileChooser.newFolderExistsErrorText=That name is already taken -FileChooser.chooseButtonText=Choose +# Mac-specific strings +FileChooser.saveTitle.textAndMnemonic=Save +FileChooser.openTitle.textAndMnemonic=Open +FileChooser.newFolderExistsError.textAndMnemonic=That name is already taken +FileChooser.chooseButton.textAndMnemonic=Choose -FileChooser.newFolderButtonText=New Folder -FileChooser.newFolderTitleText=New Folder -FileChooser.fileNameLabelText=File: -FileChooser.saveDialogFileNameLabelText=Save As: -FileChooser.filesOfTypeLabelText=File Format: +FileChooser.newFolderButton.textAndMnemonic=New Folder +FileChooser.newFolderTitle.textAndMnemonic=New Folder +FileChooser.fileNameLabel.textAndMnemonic=File: +FileChooser.saveDialogFileNameLabel.textAndMnemonic=Save As: +FileChooser.filesOfTypeLabel.textAndMnemonic=File Format: FileChooser.desktopName=Desktop -FileChooser.newFolderPromptText=Name of new folder: +FileChooser.newFolderPrompt.textAndMnemonic=Name of new folder: FileChooser.untitledFolderName=untitled folder FileChooser.untitledFileName=untitled -FileChooser.createButtonText=Create +FileChooser.createButton.textAndMnemonic=Create -FileChooser.byDateText=Date Modified -FileChooser.byNameText=Name +FileChooser.byDate.textAndMnemonic=Date Modified +FileChooser.by.textAndMnemonic=Name FileChooser.newFolderAccessibleName=New Folder FileChooser.mac.newFolder=untitled folder @@ -82,76 +82,54 @@ FileChooser.mac.newFolder.subsequent=untitled folder {0} ############ COLOR CHOOSER STRINGS ############# -ColorChooser.previewText=Preview -ColorChooser.okText=OK -ColorChooser.cancelText=Cancel -ColorChooser.resetText=Reset -# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic -ColorChooser.resetMnemonic=82 -ColorChooser.sampleText=Sample Text Sample Text -ColorChooser.swatchesNameText=Swatches -ColorChooser.swatchesMnemonic=83 -ColorChooser.swatchesDisplayedMnemonicIndex=0 -ColorChooser.swatchesRecentText=Recent: -ColorChooser.hsbNameText=HSB -# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX -# constant, and an index into the text to render the mnemonic as. The -# mnemonic is xxxMnemonic and the index of the character to underline is -# xxxDisplayedMnemonicIndex. -ColorChooser.hsbMnemonic=72 -ColorChooser.hsbDisplayedMnemonicIndex=0 -ColorChooser.hsbHueText=H -ColorChooser.hsbSaturationText=S -ColorChooser.hsbBrightnessText=B -ColorChooser.hsbRedText=R -ColorChooser.hsbGreenText=G -ColorChooser.hsbBlueText=B -ColorChooser.rgbNameText=RGB -ColorChooser.rgbMnemonic=71 -ColorChooser.rgbDisplayedMnemonicIndex=1 -ColorChooser.rgbRedText=Red -ColorChooser.rgbRedMnemonic=68 -ColorChooser.rgbGreenText=Green -ColorChooser.rgbGreenMnemonic=78 -ColorChooser.rgbBlueText=Blue -ColorChooser.rgbBlueMnemonic=66 +ColorChooser.preview.textAndMnemonic=Preview +ColorChooser.ok.textAndMnemonic=OK +ColorChooser.cancel.textAndMnemonic=Cancel +ColorChooser.reset.textAndMnemonic=&Reset +ColorChooser.sample.textAndMnemonic=Sample Text Sample Text +ColorChooser.swatches.textAndMnemonic=&Swatches +ColorChooser.swatchesRecent.textAndMnemonic=Recent: +ColorChooser.hsb.textAndMnemonic=&HSB +ColorChooser.hsbHue.textAndMnemonic=H +ColorChooser.hsbSaturation.textAndMnemonic=S +ColorChooser.hsbBrightness.textAndMnemonic=B +ColorChooser.hsbRed.textAndMnemonic=R +ColorChooser.hsbGreen.textAndMnemonic=G +ColorChooser.hsbBlue.textAndMnemonic=B +ColorChooser.rgb.textAndMnemonic=R&GB +ColorChooser.rgbRed.textAndMnemonic=Re&d +ColorChooser.rgbGreen.textAndMnemonic=Gree&n +ColorChooser.rgbBlue.textAndMnemonic=&Blue ############ OPTION PANE STRINGS ############# -# Mnemonic keys correspond to KeyEvent.VK_XXX constant # We only define mnemonics for YES/NO, but for completeness you can # define mnemonics for any of the buttons. -OptionPane.yesButtonText=Yes -OptionPane.yesButtonMnemonic=89 -OptionPane.noButtonText=No -OptionPane.noButtonMnemonic=78 -OptionPane.okButtonText=OK -OptionPane.okButtonMnemonic=0 -OptionPane.cancelButtonText=Cancel -OptionPane.cancelButtonMnemonic=0 -OptionPane.titleText=Select an Option +OptionPane.yesButton.textAndMnemonic=&Yes +OptionPane.noButton.textAndMnemonic=&No +OptionPane.okButton.textAndMnemonic=OK +OptionPane.cancelButton.textAndMnemonic=Cancel +OptionPane.title.textAndMnemonic=Select an Option # Title for the dialog for the showInputDialog methods. Only used if # the developer uses one of the variants that doesn't take a title. -OptionPane.inputDialogTitle=Input +OptionPane.inputDialog.titleAndMnemonic=Input # Title for the dialog for the showMessageDialog methods. Only used if # the developer uses one of the variants that doesn't take a title. -OptionPane.messageDialogTitle=Message +OptionPane.messageDialog.titleAndMnemonic=Message ############ Printing Dialog Strings ############ -PrintingDialog.titleProgressText=Printing -PrintingDialog.titleAbortingText=Printing (Aborting) +PrintingDialog.titleProgress.textAndMnemonic=Printing +PrintingDialog.titleAborting.textAndMnemonic=Printing (Aborting) -PrintingDialog.contentInitialText=Printing in progress... +PrintingDialog.contentInitial.textAndMnemonic=Printing in progress... # The following string will be formatted by a MessageFormat # and {0} will be replaced by page number being printed -PrintingDialog.contentProgressText=Printed page {0}... +PrintingDialog.contentProgress.textAndMnemonic=Printed page {0}... -PrintingDialog.contentAbortingText=Printing aborting... +PrintingDialog.contentAborting.textAndMnemonic=Printing aborting... -PrintingDialog.abortButtonText=Abort -PrintingDialog.abortButtonMnemonic=65 -PrintingDialog.abortButtonDisplayedMnemonicIndex=0 -PrintingDialog.abortButtonToolTipText=Abort Printing +PrintingDialog.abortButton.textAndMnemonic=&Abort +PrintingDialog.abortButtonToolTip.textAndMnemonic=Abort Printing ############ Internal Frame Strings ############ InternalFrame.iconButtonToolTip=Minimize @@ -160,42 +138,42 @@ InternalFrame.restoreButtonToolTip=Restore InternalFrame.closeButtonToolTip=Close ############ Internal Frame Title Pane Strings ############ -InternalFrameTitlePane.restoreButtonText=Restore -InternalFrameTitlePane.moveButtonText=Move -InternalFrameTitlePane.sizeButtonText=Size -InternalFrameTitlePane.minimizeButtonText=Minimize -InternalFrameTitlePane.maximizeButtonText=Maximize -InternalFrameTitlePane.closeButtonText=Close +InternalFrameTitlePane.restoreButton.textAndMnemonic=Restore +InternalFrameTitlePane.moveButton.textAndMnemonic=Move +InternalFrameTitlePane.sizeButton.textAndMnemonic=Size +InternalFrameTitlePane.minimizeButton.textAndMnemonic=Minimize +InternalFrameTitlePane.maximizeButton.textAndMnemonic=Maximize +InternalFrameTitlePane.closeButton.textAndMnemonic=Close ############ Text strings ############# # Used for html forms -FormView.submitButtonText=Submit Query -FormView.resetButtonText=Reset -FormView.browseFileButtonText=Browse... +FormView.submitButton.textAndMnemonic=Submit Query +FormView.resetButton.textAndMnemonic=Reset +FormView.browseFileButton.textAndMnemonic=Browse... ############ Abstract Document Strings ############ -AbstractDocument.styleChangeText=style change -AbstractDocument.additionText=addition -AbstractDocument.deletionText=deletion -AbstractDocument.undoText=Undo -AbstractDocument.redoText=Redo +AbstractDocument.styleChange.textAndMnemonic=style change +AbstractDocument.addition.textAndMnemonic=addition +AbstractDocument.deletion.textAndMnemonic=deletion +AbstractDocument.undo.textAndMnemonic=Undo +AbstractDocument.redo.textAndMnemonic=Redo ############ Abstract Button Strings ############ -AbstractButton.clickText=click +AbstractButton.click.textAndMnemonic=click ############ Abstract Undoable Edit Strings ############ -AbstractUndoableEdit.undoText=Undo -AbstractUndoableEdit.redoText=Redo +AbstractUndoableEdit.undo.textAndMnemonic=Undo +AbstractUndoableEdit.redo.textAndMnemonic=Redo ############ Combo Box Strings ############ -ComboBox.togglePopupText=togglePopup +ComboBox.togglePopup.textAndMnemonic=togglePopup ############ Progress Monitor Strings ############ -ProgressMonitor.progressText=Progress... +ProgressMonitor.progress.textAndMnemonic=Progress... ############ Split Pane Strings ############ -SplitPane.leftButtonText=left button -SplitPane.rightButtonText=right button +SplitPane.leftButton.textAndMnemonic=left button +SplitPane.rightButton.textAndMnemonic=right button # Used for Isindex IsindexView.prompt=This is a searchable index. Enter search keywords: diff --git a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java index 7a4ef4b6605..a4ec19a6803 100644 --- a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java +++ b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java @@ -35,16 +35,16 @@ class MacOSXPreferences extends AbstractPreferences { private static final String defaultAppName = "com.apple.java.util.prefs"; // true if this node is a child of userRoot or is userRoot - private boolean isUser; + private final boolean isUser; // true if this node is userRoot or systemRoot - private boolean isRoot; + private final boolean isRoot; // CF's storage location for this node and its keys - private MacOSXPreferencesFile file; + private final MacOSXPreferencesFile file; // absolutePath() + "/" - private String path; + private final String path; // User root and system root nodes private static MacOSXPreferences userRoot = null; @@ -73,36 +73,40 @@ class MacOSXPreferences extends AbstractPreferences { // Create a new root node. Called by getUserRoot() and getSystemRoot() // Synchronization is provided by the caller. - private MacOSXPreferences(boolean newIsUser) - { - super(null, ""); - isUser = newIsUser; - isRoot = true; - - initFields(); + private MacOSXPreferences(boolean newIsUser) { + this(null, "", false, true, newIsUser); } // Create a new non-root node with the given parent. // Called by childSpi(). - private MacOSXPreferences(MacOSXPreferences parent, String name) + private MacOSXPreferences(MacOSXPreferences parent, String name) { + this(parent, name, false, false, false); + } + + private MacOSXPreferences(MacOSXPreferences parent, String name, + boolean isNew) + { + this(parent, name, isNew, false, false); + } + + private MacOSXPreferences(MacOSXPreferences parent, String name, + boolean isNew, boolean isRoot, boolean isUser) { super(parent, name); - isUser = isUserNode(); - isRoot = false; - - initFields(); - } - - - private void initFields() - { + this.isRoot = isRoot; + if (isRoot) + this.isUser = isUser; + else + this.isUser = isUserNode(); path = isRoot ? absolutePath() : absolutePath() + "/"; file = cfFileForNode(isUser); - newNode = file.addNode(path); + if (isNew) + newNode = isNew; + else + newNode = file.addNode(path); } - // Create and return the MacOSXPreferencesFile for this node. // Does not write anything to the file. private MacOSXPreferencesFile cfFileForNode(boolean isUser) @@ -135,18 +139,21 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation + @Override protected void putSpi(String key, String value) { file.addKeyToNode(path, key, value); } // AbstractPreferences implementation + @Override protected String getSpi(String key) { return file.getKeyFromNode(path, key); } // AbstractPreferences implementation + @Override protected void removeSpi(String key) { Objects.requireNonNull(key, "Specified key cannot be null"); @@ -155,8 +162,9 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation + @Override protected void removeNodeSpi() - throws BackingStoreException + throws BackingStoreException { // Disallow flush or sync between these two operations // (they may be manipulating two different files) @@ -174,8 +182,9 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation + @Override protected String[] childrenNamesSpi() - throws BackingStoreException + throws BackingStoreException { String[] result = file.getChildrenForNode(path); if (result == null) throw new BackingStoreException("Couldn't get list of children for node '" + path + "'"); @@ -183,8 +192,9 @@ class MacOSXPreferences extends AbstractPreferences { } // AbstractPreferences implementation + @Override protected String[] keysSpi() - throws BackingStoreException + throws BackingStoreException { String[] result = file.getKeysForNode(path); if (result == null) throw new BackingStoreException("Couldn't get list of keys for node '" + path + "'"); @@ -192,19 +202,21 @@ class MacOSXPreferences extends AbstractPreferences { } // AbstractPreferences implementation + @Override protected AbstractPreferences childSpi(String name) { // Add to parent's child list here and disallow sync // because parent and child might be in different files. synchronized(MacOSXPreferencesFile.class) { - file.addChildToNode(path, name); - return new MacOSXPreferences(this, name); + boolean isNew = file.addChildToNode(path, name); + return new MacOSXPreferences(this, name, isNew); } } // AbstractPreferences override + @Override public void flush() - throws BackingStoreException + throws BackingStoreException { // Flush should *not* check for removal, unlike sync, but should // prevent simultaneous removal. @@ -217,15 +229,17 @@ class MacOSXPreferences extends AbstractPreferences { } // AbstractPreferences implementation + @Override protected void flushSpi() - throws BackingStoreException + throws BackingStoreException { // nothing here - overridden flush() doesn't call this } // AbstractPreferences override + @Override public void sync() - throws BackingStoreException + throws BackingStoreException { synchronized(lock) { if (isRemoved()) @@ -244,8 +258,9 @@ class MacOSXPreferences extends AbstractPreferences { } // AbstractPreferences implementation + @Override protected void syncSpi() - throws BackingStoreException + throws BackingStoreException { // nothing here - overridden sync() doesn't call this } diff --git a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFactory.java b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFactory.java index 05ef30c7800..2d1710e1930 100644 --- a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFactory.java +++ b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFactory.java @@ -26,10 +26,12 @@ package java.util.prefs; class MacOSXPreferencesFactory implements PreferencesFactory { + @Override public Preferences userRoot() { return MacOSXPreferences.getUserRoot(); } + @Override public Preferences systemRoot() { return MacOSXPreferences.getSystemRoot(); } diff --git a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java index 992ae620338..e27ac0f1532 100644 --- a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java +++ b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java @@ -101,9 +101,10 @@ class MacOSXPreferencesFile { } // Maps string -> weak reference to MacOSXPreferencesFile - private static HashMap cachedFiles = null; + private static HashMap> + cachedFiles; // Files that may have unflushed changes - private static HashSet changedFiles = null; + private static HashSet changedFiles; // Timer and pending sync and flush tasks (which are both scheduled @@ -136,13 +137,14 @@ class MacOSXPreferencesFile { { MacOSXPreferencesFile result = null; - if (cachedFiles == null) cachedFiles = new HashMap(); + if (cachedFiles == null) + cachedFiles = new HashMap<>(); String hashkey = newName + String.valueOf(isUser); - WeakReference hashvalue = (WeakReference)cachedFiles.get(hashkey); + WeakReference hashvalue = cachedFiles.get(hashkey); if (hashvalue != null) { - result = (MacOSXPreferencesFile)hashvalue.get(); + result = hashvalue.get(); } if (result == null) { // Java user node == CF current user, any host @@ -150,7 +152,7 @@ class MacOSXPreferencesFile { result = new MacOSXPreferencesFile(newName, isUser ? cfCurrentUser : cfAnyUser, isUser ? cfAnyHost : cfCurrentHost); - cachedFiles.put(hashkey, new WeakReference(result)); + cachedFiles.put(hashkey, new WeakReference(result)); } // Don't schedule this file for flushing until some nodes or @@ -171,10 +173,11 @@ class MacOSXPreferencesFile { boolean ok = true; if (cachedFiles != null && !cachedFiles.isEmpty()) { - Iterator iter = cachedFiles.values().iterator(); + Iterator> iter = + cachedFiles.values().iterator(); while (iter.hasNext()) { - WeakReference ref = (WeakReference)iter.next(); - MacOSXPreferencesFile f = (MacOSXPreferencesFile)ref.get(); + WeakReference ref = iter.next(); + MacOSXPreferencesFile f = ref.get(); if (f != null) { if (!f.synchronize()) ok = false; } else { @@ -202,10 +205,11 @@ class MacOSXPreferencesFile { static synchronized boolean syncUser() { boolean ok = true; if (cachedFiles != null && !cachedFiles.isEmpty()) { - Iterator iter = cachedFiles.values().iterator(); + Iterator> iter = + cachedFiles.values().iterator(); while (iter.hasNext()) { - WeakReference ref = iter.next(); - MacOSXPreferencesFile f = (MacOSXPreferencesFile)ref.get(); + WeakReference ref = iter.next(); + MacOSXPreferencesFile f = ref.get(); if (f != null && f.user == cfCurrentUser) { if (!f.synchronize()) { ok = false; @@ -240,12 +244,10 @@ class MacOSXPreferencesFile { boolean ok = true; if (changedFiles != null && !changedFiles.isEmpty()) { - Iterator iter = changedFiles.iterator(); - while (iter.hasNext()) { - MacOSXPreferencesFile f = (MacOSXPreferencesFile)iter.next(); - if (!f.synchronize()) ok = false; + for (MacOSXPreferencesFile f : changedFiles) { + if (!f.synchronize()) + ok = false; } - changedFiles.clear(); } @@ -263,7 +265,8 @@ class MacOSXPreferencesFile { private void markChanged() { // Add this file to the changed file list - if (changedFiles == null) changedFiles = new HashSet(); + if (changedFiles == null) + changedFiles = new HashSet<>(); changedFiles.add(this); // Schedule a new flush and a shutdown hook, if necessary @@ -309,7 +312,9 @@ class MacOSXPreferencesFile { if (syncInterval > 0) { timer().schedule(new TimerTask() { - public void run() { MacOSXPreferencesFile.syncWorld();} + @Override + public void run() { + MacOSXPreferencesFile.syncWorld();} }, syncInterval * 1000, syncInterval * 1000); } else { // syncInterval property not set. No sync timer ever. @@ -323,6 +328,7 @@ class MacOSXPreferencesFile { if (timer == null) { timer = new Timer(true); // daemon Thread flushThread = new Thread() { + @Override public void run() { flushWorld(); } @@ -354,11 +360,11 @@ class MacOSXPreferencesFile { } } - void addChildToNode(String path, String child) + boolean addChildToNode(String path, String child) { synchronized(MacOSXPreferencesFile.class) { markChanged(); - addChildToNode(path, child+"/", appName, user, host); + return addChildToNode(path, child+"/", appName, user, host); } } @@ -427,7 +433,7 @@ class MacOSXPreferencesFile { addNode(String path, String name, long user, long host); private static final native void removeNode(String path, String name, long user, long host); - private static final native void + private static final native boolean addChildToNode(String path, String child, String name, long user, long host); private static final native void diff --git a/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java b/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java index 1fda340c509..431a1e000d4 100644 --- a/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java +++ b/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.Window; import java.awt.AWTPermission; +import java.awt.DisplayMode; import sun.java2d.opengl.CGLGraphicsConfig; @@ -40,16 +41,19 @@ public class CGraphicsDevice extends GraphicsDevice { private final int displayID; // Array of all GraphicsConfig instances for this device - private final CGraphicsConfig[] configs; + private final GraphicsConfiguration[] configs; // Default config (temporarily hard coded) private final int DEFAULT_CONFIG = 0; private static AWTPermission fullScreenExclusivePermission; + // Save/restore DisplayMode for the Full Screen mode + private DisplayMode originalMode; + public CGraphicsDevice(int displayID) { this.displayID = displayID; - configs = new CGraphicsConfig[] { + configs = new GraphicsConfiguration[] { CGLGraphicsConfig.getConfig(this, 0) }; } @@ -66,7 +70,7 @@ public class CGraphicsDevice extends GraphicsDevice { */ @Override public GraphicsConfiguration[] getConfigurations() { - return configs; + return configs.clone(); } /** @@ -123,18 +127,22 @@ public class CGraphicsDevice extends GraphicsDevice { } boolean fsSupported = isFullScreenSupported(); + if (fsSupported && old != null) { // enter windowed mode (and restore original display mode) exitFullScreenExclusive(old); - - // TODO: restore display mode + if (originalMode != null) { + setDisplayMode(originalMode); + originalMode = null; + } } super.setFullScreenWindow(w); if (fsSupported && w != null) { - // TODO: save current display mode - + if (isDisplayChangeSupported()) { + originalMode = getDisplayMode(); + } // enter fullscreen mode enterFullScreenExclusive(w); } @@ -178,4 +186,33 @@ public class CGraphicsDevice extends GraphicsDevice { peer.exitFullScreenMode(); } } + + @Override + public boolean isDisplayChangeSupported() { + return true; + } + + @Override + public void setDisplayMode(DisplayMode dm) { + nativeSetDisplayMode(displayID, dm.getWidth(), dm.getHeight(), dm.getBitDepth(), dm.getRefreshRate()); + if (isFullScreenSupported() && getFullScreenWindow() != null) { + getFullScreenWindow().setSize(dm.getWidth(), dm.getHeight()); + } + } + + @Override + public DisplayMode getDisplayMode() { + return nativeGetDisplayMode(displayID); + } + + @Override + public DisplayMode[] getDisplayModes() { + return nativeGetDisplayModes(displayID); + } + + private native void nativeSetDisplayMode(int displayID, int w, int h, int bpp, int refrate); + + private native DisplayMode nativeGetDisplayMode(int displayID); + + private native DisplayMode[] nativeGetDisplayModes(int displayID); } diff --git a/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java b/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java index 8a647d1de36..ab435a93fac 100644 --- a/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java +++ b/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java @@ -181,6 +181,10 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment { return devices.values().toArray(new CGraphicsDevice[devices.values().size()]); } + public synchronized GraphicsDevice getScreenDevice(int displayID) { + return devices.get(displayID); + } + @Override protected synchronized int getNumScreens() { return devices.size(); @@ -196,29 +200,25 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment { return true; } - private Font[] allFontsWithLogical; static String[] sLogicalFonts = { "Serif", "SansSerif", "Monospaced", "Dialog", "DialogInput" }; @Override public Font[] getAllFonts() { - if (allFontsWithLogical == null) + + Font[] newFonts; + Font[] superFonts = super.getAllFonts(); + + int numLogical = sLogicalFonts.length; + int numOtherFonts = superFonts.length; + + newFonts = new Font[numOtherFonts + numLogical]; + System.arraycopy(superFonts,0,newFonts,numLogical,numOtherFonts); + + for (int i = 0; i < numLogical; i++) { - Font[] newFonts; - Font[] superFonts = super.getAllFonts(); - - int numLogical = sLogicalFonts.length; - int numOtherFonts = superFonts.length; - - newFonts = new Font[numOtherFonts + numLogical]; - System.arraycopy(superFonts,0,newFonts,numLogical,numOtherFonts); - - for (int i = 0; i < numLogical; i++) - { - newFonts[i] = new Font(sLogicalFonts[i], Font.PLAIN, 1); - } - allFontsWithLogical = newFonts; + newFonts[i] = new Font(sLogicalFonts[i], Font.PLAIN, 1); } - return java.util.Arrays.copyOf(allFontsWithLogical, allFontsWithLogical.length); + return newFonts; } } diff --git a/jdk/src/macosx/classes/sun/java2d/OSXSurfaceData.java b/jdk/src/macosx/classes/sun/java2d/OSXSurfaceData.java index a91cf5f8a71..8844d5aa194 100644 --- a/jdk/src/macosx/classes/sun/java2d/OSXSurfaceData.java +++ b/jdk/src/macosx/classes/sun/java2d/OSXSurfaceData.java @@ -37,9 +37,13 @@ import sun.java2d.loops.*; import sun.java2d.pipe.*; import sun.lwawt.macosx.*; +import javax.tools.annotation.GenerateNativeHeader; + /* * This is the SurfaceData for a CGContextRef. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class OSXSurfaceData extends BufImgSurfaceData { final static float UPPER_BND = Float.MAX_VALUE / 2.0f; final static float LOWER_BND = -UPPER_BND; diff --git a/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java b/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java index 219c84cc108..674b97951af 100644 --- a/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java +++ b/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java @@ -68,11 +68,12 @@ public class CGLLayer extends CFRetainedResource { } public boolean isOpaque() { - return peer.isOpaque(); + return !peer.isTranslucent(); } public int getTransparency() { - return (peer.isOpaque() ? Transparency.OPAQUE : Transparency.TRANSLUCENT); + return peer.isTranslucent() ? Transparency.TRANSLUCENT : + Transparency.OPAQUE; } public Object getDestination() { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java index f0cd54d93b3..e5f8838c8cd 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java @@ -47,8 +47,8 @@ final class LWButtonPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setLabel(getTarget().getLabel()); synchronized (getDelegateLock()) { getDelegate().addActionListener(this); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java index b639e6c2903..69bce89adae 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java @@ -61,8 +61,8 @@ final class LWCheckboxPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setLabel(getTarget().getLabel()); setState(getTarget().getState()); setCheckboxGroup(getTarget().getCheckboxGroup()); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java b/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java index b0ab9d0e3f0..dc781d3d682 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java @@ -55,8 +55,8 @@ final class LWChoicePeer extends LWComponentPeer> } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final Choice choice = getTarget(); final JComboBox combo = getDelegate(); synchronized (getDelegateLock()) { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java index a7b15e07c96..f6ad8838051 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java @@ -56,6 +56,8 @@ import sun.java2d.SunGraphics2D; import sun.java2d.opengl.OGLRenderQueue; import sun.java2d.pipe.Region; +import sun.util.logging.PlatformLogger; + import javax.swing.JComponent; import javax.swing.SwingUtilities; import javax.swing.RepaintManager; @@ -65,7 +67,10 @@ import sun.lwawt.macosx.CDropTarget; import com.sun.java.swing.SwingUtilities3; public abstract class LWComponentPeer - implements ComponentPeer, DropTargetPeer { + implements ComponentPeer, DropTargetPeer +{ + private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWComponentPeer"); + // State lock is to be used for modifications to this // peer's fields (e.g. bounds, background, font, etc.) // It should be the last lock in the lock chain @@ -76,19 +81,10 @@ public abstract class LWComponentPeer // lock is not used as there are many peers related ops // to be done on the toolkit thread, and we don't want to // depend on a public lock on this thread - private final static Object peerTreeLock = + private static final Object peerTreeLock = new StringBuilder("LWComponentPeer.peerTreeLock"); - /** - * A custom tree-lock used for the hierarchy of the delegate Swing - * components. - * The lock synchronizes access to the delegate - * internal state. Think of it as a 'virtual EDT'. - */ -// private final Object delegateTreeLock = -// new StringBuilder("LWComponentPeer.delegateTreeLock"); - - private T target; + private final T target; // Container peer. It may not be the peer of the target's direct // parent, for example, in the case of hw/lw mixing. However, @@ -103,10 +99,10 @@ public abstract class LWComponentPeer // be updated when the component is reparented to another container private LWWindowPeer windowPeer; - private AtomicBoolean disposed = new AtomicBoolean(false); + private final AtomicBoolean disposed = new AtomicBoolean(false); // Bounds are relative to parent peer - private Rectangle bounds = new Rectangle(); + private final Rectangle bounds = new Rectangle(); private Region region; // Component state. Should be accessed under the state lock @@ -117,9 +113,11 @@ public abstract class LWComponentPeer private Color foreground; private Font font; - // Paint area to coalesce all the paint events and store - // the target dirty area - private RepaintArea targetPaintArea; + /** + * Paint area to coalesce all the paint events and store the target dirty + * area. + */ + private final RepaintArea targetPaintArea; // private volatile boolean paintPending; private volatile boolean isLayouting; @@ -132,7 +130,7 @@ public abstract class LWComponentPeer private int fNumDropTargets = 0; private CDropTarget fDropTarget = null; - private PlatformComponent platformComponent; + private final PlatformComponent platformComponent; private final class DelegateContainer extends Container { { @@ -170,6 +168,7 @@ public abstract class LWComponentPeer } public LWComponentPeer(T target, PlatformComponent platformComponent) { + targetPaintArea = new LWRepaintArea(); this.target = target; this.platformComponent = platformComponent; @@ -196,10 +195,13 @@ public abstract class LWComponentPeer synchronized (getDelegateLock()) { delegate = createDelegate(); if (delegate != null) { + delegate.setVisible(false); delegateContainer = new DelegateContainer(); delegateContainer.add(delegate); delegateContainer.addNotify(); delegate.addNotify(); + resetColorsAndFont(delegate); + delegate.setOpaque(true); } else { return; } @@ -273,27 +275,28 @@ public abstract class LWComponentPeer return getDelegate(); } - /* - * Initializes this peer by fetching all the properties from the target. - * The call to initialize() is not placed to LWComponentPeer ctor to - * let the subclass ctor to finish completely first. Instead, it's the - * LWToolkit object who is responsible for initialization. + /** + * Initializes this peer. The call to initialize() is not placed to + * LWComponentPeer ctor to let the subclass ctor to finish completely first. + * Instead, it's the LWToolkit object who is responsible for initialization. + * Note that we call setVisible() at the end of initialization. */ - public void initialize() { + public final void initialize() { platformComponent.initialize(target, this, getPlatformWindow()); - targetPaintArea = new LWRepaintArea(); - if (getDelegate() != null) { - synchronized (getDelegateLock()) { - resetColorsAndFont(delegate); - getDelegate().setOpaque(true); - } - } + initializeImpl(); + setVisible(target.isVisible()); + } + + /** + * Fetching general properties from the target. Should be overridden in + * subclasses to initialize specific peers properties. + */ + void initializeImpl() { setBackground(target.getBackground()); setForeground(target.getForeground()); setFont(target.getFont()); setBounds(target.getBounds()); setEnabled(target.isEnabled()); - setVisible(target.isVisible()); } private static void resetColorsAndFont(final Container c) { @@ -309,15 +312,18 @@ public abstract class LWComponentPeer return stateLock; } - // Synchronize all operations with the Swing delegates under - // AWT tree lock, using a new separate lock to synchronize - // access to delegates may lead deadlocks + /** + * Synchronize all operations with the Swing delegates under AWT tree lock, + * using a new separate lock to synchronize access to delegates may lead + * deadlocks. Think of it as a 'virtual EDT'. + * + * @return DelegateLock + */ final Object getDelegateLock() { - //return delegateTreeLock; return getTarget().getTreeLock(); } - protected final static Object getPeerTreeLock() { + protected static final Object getPeerTreeLock() { return peerTreeLock; } @@ -372,7 +378,7 @@ public abstract class LWComponentPeer } @Override - public void dispose() { + public final void dispose() { if (disposed.compareAndSet(false, true)) { disposeImpl(); } @@ -418,8 +424,7 @@ public abstract class LWComponentPeer @Override public final Graphics getGraphics() { - Graphics g = getWindowPeerOrSelf().isOpaque() ? getOnscreenGraphics() - : getOffscreenGraphics(); + final Graphics g = getOnscreenGraphics(); if (g != null) { synchronized (getPeerTreeLock()){ applyConstrain(g); @@ -437,13 +442,7 @@ public abstract class LWComponentPeer final LWWindowPeer wp = getWindowPeerOrSelf(); return wp.getOnscreenGraphics(getForeground(), getBackground(), getFont()); - } - public final Graphics getOffscreenGraphics() { - final LWWindowPeer wp = getWindowPeerOrSelf(); - - return wp.getOffscreenGraphics(getForeground(), getBackground(), - getFont()); } private void applyConstrain(final Graphics g) { @@ -457,7 +456,7 @@ public abstract class LWComponentPeer } //TODO Move this method to SG2D? - private void SG2DConstraint(final SunGraphics2D sg2d, Region r) { + void SG2DConstraint(final SunGraphics2D sg2d, Region r) { sg2d.constrainX = sg2d.transX; sg2d.constrainY = sg2d.transY; @@ -704,7 +703,7 @@ public abstract class LWComponentPeer // Obtain the metrics from the offscreen window where this peer is // mostly drawn to. // TODO: check for "use platform metrics" settings - Graphics g = getWindowPeer().getOffscreenGraphics(); + Graphics g = getWindowPeer().getGraphics(); try { if (g != null) { return g.getFontMetrics(f); @@ -753,14 +752,17 @@ public abstract class LWComponentPeer } @Override - public void setVisible(boolean v) { + public void setVisible(final boolean v) { synchronized (getStateLock()) { if (visible == v) { return; } visible = v; } + setVisibleImpl(v); + } + protected void setVisibleImpl(final boolean v) { final D delegate = getDelegate(); if (delegate != null) { @@ -885,7 +887,13 @@ public abstract class LWComponentPeer @Override public boolean requestFocus(Component lightweightChild, boolean temporary, boolean focusedWindowChangeAllowed, long time, - CausedFocusEvent.Cause cause) { + CausedFocusEvent.Cause cause) + { + if (focusLog.isLoggable(PlatformLogger.FINEST)) { + focusLog.finest("lightweightChild=" + lightweightChild + ", temporary=" + temporary + + ", focusedWindowChangeAllowed=" + focusedWindowChangeAllowed + + ", time= " + time + ", cause=" + cause); + } if (LWKeyboardFocusManagerPeer.getInstance(getAppContext()). processSynchronousLightweightTransfer(getTarget(), lightweightChild, temporary, focusedWindowChangeAllowed, time)) { @@ -901,19 +909,44 @@ public abstract class LWComponentPeer case LWKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED: Window parentWindow = SunToolkit.getContainingWindow(getTarget()); if (parentWindow == null) { + focusLog.fine("request rejected, parentWindow is null"); LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget()); return false; } LWWindowPeer parentPeer = (LWWindowPeer) parentWindow.getPeer(); if (parentPeer == null) { + focusLog.fine("request rejected, parentPeer is null"); LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget()); return false; } + // A fix for 7145768. Ensure the parent window is currently natively focused. + // The more evident place to perform this check is in KFM.shouldNativelyFocusHeavyweight, + // however that is the shared code and this particular problem's reproducibility has + // platform specifics. So, it was decided to narrow down the fix to lwawt (OSX) in + // current release. TODO: consider fixing it in the shared code. + if (!focusedWindowChangeAllowed) { + LWWindowPeer decoratedPeer = parentPeer.isSimpleWindow() ? + LWWindowPeer.getOwnerFrameDialog(parentPeer) : parentPeer; + + if (decoratedPeer == null || !decoratedPeer.getPlatformWindow().isActive()) { + if (focusLog.isLoggable(PlatformLogger.FINE)) { + focusLog.fine("request rejected, focusedWindowChangeAllowed==false, " + + "decoratedPeer is inactive: " + decoratedPeer); + } + LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget()); + return false; + } + } + boolean res = parentPeer.requestWindowFocus(cause); // If parent window can be made focused and has been made focused (synchronously) // then we can proceed with children, otherwise we retreat if (!res || !parentWindow.isFocused()) { + if (focusLog.isLoggable(PlatformLogger.FINE)) { + focusLog.fine("request rejected, res= " + res + ", parentWindow.isFocused()=" + + parentWindow.isFocused()); + } LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget()); return false; } @@ -940,8 +973,8 @@ public abstract class LWComponentPeer @Override public Image createImage(int w, int h) { - // TODO: accelerated image - return getGraphicsConfiguration().createCompatibleImage(w, h); + CGraphicsConfig gc = (CGraphicsConfig)getGraphicsConfiguration(); + return gc.createAcceleratedImage(getTarget(), w, h); } @Override @@ -971,14 +1004,33 @@ public abstract class LWComponentPeer @Override public final void applyShape(final Region shape) { synchronized (getStateLock()) { - region = shape; + if (region == shape || (region != null && region.equals(shape))) { + return; + } + } + applyShapeImpl(shape); + } + + void applyShapeImpl(final Region shape) { + synchronized (getStateLock()) { + if (shape != null) { + region = Region.WHOLE_REGION.getIntersection(shape); + } else { + region = null; + } } repaintParent(getBounds()); } protected final Region getRegion() { synchronized (getStateLock()) { - return region == null ? Region.getInstance(getSize()) : region; + return isShaped() ? region : Region.getInstance(getSize()); + } + } + + public boolean isShaped() { + synchronized (getStateLock()) { + return region != null; } } @@ -1319,7 +1371,7 @@ public abstract class LWComponentPeer * * @see #isVisible() */ - protected boolean isShowing() { + protected final boolean isShowing() { synchronized (getPeerTreeLock()) { if (isVisible()) { final LWContainerPeer container = getContainerPeer(); @@ -1346,11 +1398,6 @@ public abstract class LWComponentPeer } } - // Just a helper method, thus final - protected final void flushOffscreenGraphics() { - flushOffscreenGraphics(getSize()); - } - protected static final void flushOnscreenGraphics(){ final OGLRenderQueue rq = OGLRenderQueue.getInstance(); rq.lock(); @@ -1361,36 +1408,6 @@ public abstract class LWComponentPeer } } - /* - * Flushes the given rectangle from the back buffer to the screen. - */ - protected void flushOffscreenGraphics(Rectangle r) { - flushOffscreenGraphics(r.x, r.y, r.width, r.height); - } - - private void flushOffscreenGraphics(int x, int y, int width, int height) { - Image bb = getWindowPeerOrSelf().getBackBuffer(); - if (bb != null) { - // g is a screen Graphics from the delegate - final Graphics g = getOnscreenGraphics(); - - if (g != null && g instanceof Graphics2D) { - try { - Graphics2D g2d = (Graphics2D)g; - Point p = localToWindow(new Point(0, 0)); - Composite composite = g2d.getComposite(); - g2d.setComposite(AlphaComposite.Src); - g.drawImage(bb, x, y, x + width, y + height, p.x + x, - p.y + y, p.x + x + width, p.y + y + height, - null); - g2d.setComposite(composite); - } finally { - g.dispose(); - } - } - } - } - /** * Used by ContainerPeer to skip all the paint events during layout. * diff --git a/jdk/src/macosx/classes/sun/lwawt/LWCursorManager.java b/jdk/src/macosx/classes/sun/lwawt/LWCursorManager.java index 1c34353c7b9..de1b537856a 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWCursorManager.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWCursorManager.java @@ -88,20 +88,20 @@ public abstract class LWCursorManager { } else { cursor = (c != null) ? c.getCursor() : null; } - // TODO: default cursor for modal blocked windows setCursor(cursor); } /** * Returns the first visible, enabled and showing component under cursor. + * Returns null for modal blocked windows. * * @param cursorPos Current cursor position. - * @return Component + * @return Component or null. */ private static final Component findComponent(final Point cursorPos) { final LWComponentPeer peer = LWWindowPeer.getPeerUnderCursor(); Component c = null; - if (peer != null) { + if (peer != null && peer.getWindowPeerOrSelf().getBlocker() == null) { c = peer.getTarget(); if (c instanceof Container) { final Point p = peer.getLocationOnScreen(); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java index a37c1a6c910..f8c764364cc 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java @@ -34,10 +34,14 @@ import java.awt.peer.LabelPeer; import javax.swing.JLabel; import javax.swing.SwingConstants; +import javax.tools.annotation.GenerateNativeHeader; + /** * Lightweight implementation of {@link LabelPeer}. Delegates most of the work * to the {@link JLabel}. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader final class LWLabelPeer extends LWComponentPeer implements LabelPeer { @@ -56,8 +60,8 @@ final class LWLabelPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setText(getTarget().getText()); setAlignment(getTarget().getAlignment()); } diff --git a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java index 89a2ce9e12a..1e6154fd64f 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java @@ -49,8 +49,8 @@ final class LWListPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setMultipleMode(getTarget().isMultipleMode()); final int[] selectedIndices = getTarget().getSelectedIndexes(); synchronized (getDelegateLock()) { @@ -245,6 +245,15 @@ final class LWListPeer } } + @Override + public void setFont(Font font) { + super.setFont(font); + if (getView() != null) { + getView().setFont(font); + LWListPeer.this.revalidate(); + } + } + private final class JListDelegate extends JList { JListDelegate() { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java b/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java index 54cbd332db4..e67b2fa435e 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java @@ -58,9 +58,6 @@ final class LWRepaintArea extends RepaintArea { private static void flushBuffers(final LWComponentPeer peer) { if (peer != null) { - if (!peer.getWindowPeerOrSelf().isOpaque()) { - peer.flushOffscreenGraphics(); - } peer.flushOnscreenGraphics(); } } diff --git a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java index d376a6b1d82..688f9e96f16 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java @@ -54,8 +54,8 @@ final class LWScrollBarPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final Scrollbar target = getTarget(); setValues(target.getValue(), target.getVisibleAmount(), target.getMinimum(), target.getMaximum()); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java b/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java index 1b1bdf5369e..1e386f25725 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java @@ -70,8 +70,8 @@ final class LWScrollPanePeer extends LWContainerPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final int policy = getTarget().getScrollbarDisplayPolicy(); synchronized (getDelegateLock()) { getDelegate().getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java index ebe97745d49..8517313b741 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java @@ -59,8 +59,8 @@ final class LWTextAreaPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final int visibility = getTarget().getScrollbarVisibility(); synchronized (getDelegateLock()) { setScrollBarVisibility(visibility); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java index 5884b119261..f0215d40f75 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java @@ -63,8 +63,8 @@ abstract class LWTextComponentPeer implements TextFieldPeer, ActionListener { @@ -54,8 +58,8 @@ final class LWTextFieldPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setEchoChar(getTarget().getEchoChar()); synchronized (getDelegateLock()) { getDelegate().addActionListener(this); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java index f41a944b17c..04fd4066cfe 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java @@ -522,12 +522,6 @@ public abstract class LWToolkit extends SunToolkit implements Runnable { postEvent(targetToAppContext(event.getSource()), event); } - // use peer's back buffer to implement non-opaque windows. - @Override - public boolean needUpdateWindow() { - return true; - } - @Override public void grab(Window w) { if (w.getPeer() != null) { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java index 9e3796c7083..dd20e87139a 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java @@ -37,6 +37,7 @@ import sun.awt.*; import sun.java2d.*; import sun.java2d.loops.Blit; import sun.java2d.loops.CompositeType; +import sun.java2d.pipe.Region; import sun.util.logging.PlatformLogger; public class LWWindowPeer @@ -50,7 +51,7 @@ public class LWWindowPeer EMBEDDEDFRAME } - private static final sun.util.logging.PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWWindowPeer"); + private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWWindowPeer"); private PlatformWindow platformWindow; @@ -68,7 +69,7 @@ public class LWWindowPeer private Insets insets = new Insets(0, 0, 0, 0); - private int screenOn = -1; + private GraphicsDevice graphicsDevice; private GraphicsConfiguration graphicsConfig; private SurfaceData surfaceData; @@ -101,8 +102,6 @@ public class LWWindowPeer // events between MOUSE_PRESSED and MOUSE_RELEASED for particular button private static int mouseClickButtons = 0; - private volatile boolean cachedFocusableWindow; - private volatile boolean isOpaque = true; private static final Font DEFAULT_FONT = new Font("Lucida Grande", Font.PLAIN, 13); @@ -111,6 +110,10 @@ public class LWWindowPeer private volatile boolean skipNextFocusChange; + private static final Color nonOpaqueBackground = new Color(0, 0, 0, 0); + + private volatile boolean textured; + /** * Current modal blocker or null. * @@ -147,8 +150,6 @@ public class LWWindowPeer // similar to what Apple's Java do. // Since JDK7 we should rely on setOpacity() only. // this.opacity = c.getAlpha(); - // System.out.println("Delegate assigns alpha (we ignore setOpacity()):" - // +this.opacity); } if (!target.isForegroundSet()) { @@ -161,25 +162,34 @@ public class LWWindowPeer } @Override - public void initialize() { + void initializeImpl() { + super.initializeImpl(); if (getTarget() instanceof Frame) { - setTitle(((Frame)getTarget()).getTitle()); - setState(((Frame)getTarget()).getExtendedState()); + setTitle(((Frame) getTarget()).getTitle()); + setState(((Frame) getTarget()).getExtendedState()); } else if (getTarget() instanceof Dialog) { - setTitle(((Dialog)getTarget()).getTitle()); + setTitle(((Dialog) getTarget()).getTitle()); } setAlwaysOnTop(getTarget().isAlwaysOnTop()); updateMinimumSize(); - cachedFocusableWindow = getTarget().isFocusableWindow(); + final Shape shape = getTarget().getShape(); + if (shape != null) { + applyShape(Region.getInstance(shape, null)); + } + + final float opacity = getTarget().getOpacity(); + if (opacity < 1.0f) { + setOpacity(opacity); + } - setOpacity(getTarget().getOpacity()); setOpaque(getTarget().isOpaque()); - super.initialize(); - updateInsets(platformWindow.getInsets()); + if (getSurfaceData() == null) { + replaceSurfaceData(false); + } } // Just a helper method @@ -217,48 +227,29 @@ public class LWWindowPeer } @Override - public void setVisible(final boolean visible) { - if (getSurfaceData() == null) { - replaceSurfaceData(); - } - - if (isVisible() == visible) { - return; - } - super.setVisible(visible); - + protected void setVisibleImpl(final boolean visible) { + super.setVisibleImpl(visible); // TODO: update graphicsConfig, see 4868278 - // TODO: don't notify the delegate if our visibility is unchanged + platformWindow.setVisible(visible); + if (isSimpleWindow()) { + LWKeyboardFocusManagerPeer manager = LWKeyboardFocusManagerPeer. + getInstance(getAppContext()); - // it is important to call this method on EDT - // to prevent the deadlocks during the painting of the lightweight delegates - //TODO: WHY? This is a native-system related call. Perhaps NOT calling - // the painting procedure right from the setVisible(), but rather relying - // on the native Expose event (or, scheduling the repainting asynchronously) - // is better? - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - platformWindow.setVisible(visible); - if (isSimpleWindow()) { - LWKeyboardFocusManagerPeer manager = LWKeyboardFocusManagerPeer. - getInstance(getAppContext()); - - if (visible) { - updateFocusableWindowState(); - changeFocusedWindow(true, true); - - // Focus the owner in case this window is focused. - } else if (manager.getCurrentFocusedWindow() == getTarget()) { - LWWindowPeer owner = getOwnerFrameDialog(LWWindowPeer.this); - if (owner != null) { - // KFM will do all the rest. - owner.changeFocusedWindow(true, false); - } - } + if (visible) { + if (!getTarget().isAutoRequestFocus()) { + return; + } else { + requestWindowFocus(CausedFocusEvent.Cause.ACTIVATION); + } + // Focus the owner in case this window is focused. + } else if (manager.getCurrentFocusedWindow() == getTarget()) { + // Transfer focus to the owner. + LWWindowPeer owner = getOwnerFrameDialog(LWWindowPeer.this); + if (owner != null) { + owner.requestWindowFocus(CausedFocusEvent.Cause.ACTIVATION); } } - }); + } } @Override @@ -299,7 +290,7 @@ public class LWWindowPeer // "buffer", that's why numBuffers - 1 assert numBuffers > 1; - replaceSurfaceData(numBuffers - 1, caps); + replaceSurfaceData(numBuffers - 1, caps, false); } catch (InvalidPipeException z) { throw new AWTException(z.toString()); } @@ -400,7 +391,6 @@ public class LWWindowPeer @Override public void updateFocusableWindowState() { - cachedFocusableWindow = getTarget().isFocusableWindow(); platformWindow.updateFocusableWindowState(); } @@ -409,6 +399,8 @@ public class LWWindowPeer synchronized (getPeerTreeLock()) { this.blocker = blocked ? (LWWindowPeer)blocker.getPeer() : null; } + + platformWindow.setModalBlocked(blocked); } @Override @@ -438,19 +430,44 @@ public class LWWindowPeer public final void setOpaque(final boolean isOpaque) { if (this.isOpaque != isOpaque) { this.isOpaque = isOpaque; - getPlatformWindow().setOpaque(isOpaque); - replaceSurfaceData(); - repaintPeer(); + updateOpaque(); } } - public final boolean isOpaque() { - return isOpaque; + private void updateOpaque() { + getPlatformWindow().setOpaque(!isTranslucent()); + replaceSurfaceData(false); + repaintPeer(); } @Override public void updateWindow() { - flushOffscreenGraphics(); + } + + public final boolean isTextured() { + return textured; + } + + public final void setTextured(final boolean isTextured) { + textured = isTextured; + } + + public final boolean isTranslucent() { + synchronized (getStateLock()) { + /* + * Textured window is a special case of translucent window. + * The difference is only in nswindow background. So when we set + * texture property our peer became fully translucent. It doesn't + * fill background, create non opaque backbuffers and layer etc. + */ + return !isOpaque || isShaped() || isTextured(); + } + } + + @Override + final void applyShapeImpl(final Region shape) { + super.applyShapeImpl(shape); + updateOpaque(); } @Override @@ -605,7 +622,20 @@ public class LWWindowPeer getFont()); if (g != null) { try { - g.clearRect(0, 0, w, h); + if (g instanceof Graphics2D) { + ((Graphics2D) g).setComposite(AlphaComposite.Src); + } + if (isTranslucent()) { + g.setColor(nonOpaqueBackground); + g.fillRect(0, 0, w, h); + } + if (!isTextured()) { + if (g instanceof SunGraphics2D) { + SG2DConstraint((SunGraphics2D) g, getRegion()); + } + g.setColor(getBackground()); + g.fillRect(0, 0, w, h); + } } finally { g.dispose(); } @@ -617,7 +647,7 @@ public class LWWindowPeer } public void notifyActivation(boolean activation) { - changeFocusedWindow(activation, false); + changeFocusedWindow(activation); } // MouseDown in non-client area @@ -869,17 +899,6 @@ public class LWWindowPeer return 0; } - private static GraphicsConfiguration getScreenGraphicsConfig(int screen) { - GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - GraphicsDevice[] gds = ge.getScreenDevices(); - if (screen >= gds.length) { - // This could happen during device addition/removal. Use - // the default screen device in this case - return ge.getDefaultScreenDevice().getDefaultConfiguration(); - } - return gds[screen].getDefaultConfiguration(); - } - /* * This method is called when window's graphics config is changed from * the app code (e.g. when the window is made non-opaque) or when @@ -894,7 +913,7 @@ public class LWWindowPeer } // If window's graphics config is changed from the app code, the // config correspond to the same device as before; when the window - // is moved by user, screenOn is updated in checkIfOnNewScreen(). + // is moved by user, graphicsDevice is updated in checkIfOnNewScreen(). // In either case, there's nothing to do with screenOn here graphicsConfig = gc; } @@ -903,16 +922,17 @@ public class LWWindowPeer } private void checkIfOnNewScreen() { - int windowScreen = platformWindow.getScreenImOn(); + GraphicsDevice newGraphicsDevice = platformWindow.getGraphicsDevice(); synchronized (getStateLock()) { - if (windowScreen == screenOn) { + if (graphicsDevice == newGraphicsDevice) { return; } - screenOn = windowScreen; + graphicsDevice = newGraphicsDevice; } // TODO: DisplayChangedListener stuff - final GraphicsConfiguration newGC = getScreenGraphicsConfig(windowScreen); + final GraphicsConfiguration newGC = newGraphicsDevice.getDefaultConfiguration(); + if (!setGraphicsConfig(newGC)) return; SunToolkit.executeOnEventHandlerThread(getTarget(), new Runnable() { @@ -922,35 +942,6 @@ public class LWWindowPeer }); } - /** - * This method returns a back buffer Graphics to render all the - * peers to. After the peer is painted, the back buffer contents - * should be flushed to the screen. All the target painting - * (Component.paint() method) should be done directly to the screen. - */ - protected final Graphics getOffscreenGraphics(Color fg, Color bg, Font f) { - final Image bb = getBackBuffer(); - if (bb == null) { - return null; - } - if (fg == null) { - fg = SystemColor.windowText; - } - if (bg == null) { - bg = SystemColor.window; - } - if (f == null) { - f = DEFAULT_FONT; - } - final Graphics2D g = (Graphics2D) bb.getGraphics(); - if (g != null) { - g.setColor(fg); - g.setBackground(bg); - g.setFont(f); - } - return g; - } - /* * May be called by delegate to provide SD to Java2D code. */ @@ -961,11 +952,16 @@ public class LWWindowPeer } private void replaceSurfaceData() { - replaceSurfaceData(backBufferCount, backBufferCaps); + replaceSurfaceData(true); + } + + private void replaceSurfaceData(boolean blit) { + replaceSurfaceData(backBufferCount, backBufferCaps, blit); } private void replaceSurfaceData(int newBackBufferCount, - BufferCapabilities newBackBufferCaps) { + BufferCapabilities newBackBufferCaps, + boolean blit) { synchronized (surfaceDataLock) { final SurfaceData oldData = getSurfaceData(); surfaceData = platformWindow.replaceSurfaceData(); @@ -978,7 +974,10 @@ public class LWWindowPeer if (getSurfaceData() != null && oldData != getSurfaceData()) { clearBackground(size.width, size.height); } - blitSurfaceData(oldData, getSurfaceData()); + + if (blit) { + blitSurfaceData(oldData, getSurfaceData()); + } if (oldData != null && oldData != getSurfaceData()) { // TODO: drop oldData for D3D/WGL pipelines @@ -993,8 +992,18 @@ public class LWWindowPeer Graphics g = backBuffer.getGraphics(); try { Rectangle r = getBounds(); - g.setColor(getBackground()); + if (g instanceof Graphics2D) { + ((Graphics2D) g).setComposite(AlphaComposite.Src); + } + g.setColor(nonOpaqueBackground); g.fillRect(0, 0, r.width, r.height); + if (g instanceof SunGraphics2D) { + SG2DConstraint((SunGraphics2D) g, getRegion()); + } + if (!isTextured()) { + g.setColor(getBackground()); + g.fillRect(0, 0, r.width, r.height); + } if (oldBB != null) { // Draw the old back buffer to the new one g.drawImage(oldBB, 0, 0, null); @@ -1018,7 +1027,7 @@ public class LWWindowPeer CompositeType.Src, dst.getSurfaceType()); if (blit != null) { - blit.Blit(src, dst, ((Graphics2D) getGraphics()).getComposite(), + blit.Blit(src, dst, AlphaComposite.Src, getRegion(), 0, 0, 0, 0, size.width, size.height); } } @@ -1063,6 +1072,10 @@ public class LWWindowPeer return lastMouseEventPeer; } + /* + * Requests platform to set native focus on a frame/dialog. + * In case of a simple window, triggers appropriate java focus change. + */ public boolean requestWindowFocus(CausedFocusEvent.Cause cause) { if (focusLog.isLoggable(PlatformLogger.FINE)) { focusLog.fine("requesting native focus to " + this); @@ -1106,14 +1119,14 @@ public class LWWindowPeer } // DKFM will synthesize all the focus/activation events correctly. - changeFocusedWindow(true, false); + changeFocusedWindow(true); return true; // In case the toplevel is active but not focused, change focus directly, // as requesting native focus on it will not have effect. } else if (getTarget() == currentActive && !getTarget().hasFocus()) { - changeFocusedWindow(true, false); + changeFocusedWindow(true); return true; } return platformWindow.requestWindowFocus(); @@ -1122,7 +1135,19 @@ public class LWWindowPeer private boolean focusAllowedFor() { Window window = getTarget(); // TODO: check if modal blocked - return window.isVisible() && window.isEnabled() && window.isFocusableWindow(); + return window.isVisible() && window.isEnabled() && isFocusableWindow(); + } + + private boolean isFocusableWindow() { + boolean focusable = getTarget().isFocusableWindow(); + if (isSimpleWindow()) { + LWWindowPeer ownerPeer = getOwnerFrameDialog(this); + if (ownerPeer == null) { + return false; + } + return focusable && ownerPeer.getTarget().isFocusableWindow(); + } + return focusable; } public boolean isSimpleWindow() { @@ -1131,19 +1156,19 @@ public class LWWindowPeer } /* - * "Delegates" the responsibility of managing focus to keyboard focus manager. + * Changes focused window on java level. */ - private void changeFocusedWindow(boolean becomesFocused, boolean isShowing) { + private void changeFocusedWindow(boolean becomesFocused) { if (focusLog.isLoggable(PlatformLogger.FINE)) { focusLog.fine((becomesFocused?"gaining":"loosing") + " focus window: " + this); } - if (isShowing && !getTarget().isAutoRequestFocus() || skipNextFocusChange) { + if (skipNextFocusChange) { focusLog.fine("skipping focus change"); skipNextFocusChange = false; return; } - - if (!cachedFocusableWindow) { + if (!isFocusableWindow() && becomesFocused) { + focusLog.fine("the window is not focusable"); return; } if (becomesFocused) { @@ -1182,7 +1207,7 @@ public class LWWindowPeer postEvent(windowEvent); } - private static LWWindowPeer getOwnerFrameDialog(LWWindowPeer peer) { + static LWWindowPeer getOwnerFrameDialog(LWWindowPeer peer) { Window owner = (peer != null ? peer.getTarget().getOwner() : null); while (owner != null && !(owner instanceof Frame || owner instanceof Dialog)) { owner = owner.getOwner(); diff --git a/jdk/src/macosx/classes/sun/lwawt/PlatformWindow.java b/jdk/src/macosx/classes/sun/lwawt/PlatformWindow.java index 0d2a8083752..92608b8b2c0 100644 --- a/jdk/src/macosx/classes/sun/lwawt/PlatformWindow.java +++ b/jdk/src/macosx/classes/sun/lwawt/PlatformWindow.java @@ -67,9 +67,9 @@ public interface PlatformWindow { public void setBounds(int x, int y, int w, int h); /* - * Returns the screen number where the window is. + * Returns the graphics device where the window is. */ - public int getScreenImOn(); + public GraphicsDevice getGraphicsDevice(); /* * Returns the location of the window. @@ -108,6 +108,8 @@ public interface PlatformWindow { public void flip(int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction); + public void setModalBlocked(boolean blocked); + public void toFront(); public void toBack(); diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java index 5dd1844d938..fd1512f8e1d 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java @@ -26,6 +26,7 @@ package sun.lwawt.macosx; import java.awt.*; +import java.awt.image.BufferedImage; public class CCustomCursor extends Cursor { static Dimension sMaxCursorSize; @@ -36,7 +37,6 @@ public class CCustomCursor extends Cursor { } Image fImage; - private boolean isImageOk = false; Point fHotspot; public CCustomCursor(final Image cursor, final Point hotSpot, final String name) throws IndexOutOfBoundsException, HeadlessException { @@ -61,21 +61,19 @@ public class CCustomCursor extends Cursor { // Fix for bug 4212593 The Toolkit.createCustomCursor does not // check absence of the image of cursor // If the image is invalid, the cursor will be hidden (made completely - // transparent). In this case, getBestCursorSize() will adjust negative w and h, - // but we need to set the hotspot inside the image here. + // transparent). if (tracker.isErrorAny() || width < 0 || height < 0) { fHotspot.x = fHotspot.y = 0; - isImageOk = false; + width = height = 1; + fImage = createTransparentImage(width, height); } else { - isImageOk = true; - } - - // Scale image to nearest supported size - final Dimension nativeSize = toolkit.getBestCursorSize(width, height); - if (nativeSize.width != width || nativeSize.height != height) { - fImage = fImage.getScaledInstance(nativeSize.width, nativeSize.height, Image.SCALE_DEFAULT); - width = nativeSize.width; - height = nativeSize.height; + // Scale image to nearest supported size + final Dimension nativeSize = toolkit.getBestCursorSize(width, height); + if (nativeSize.width != width || nativeSize.height != height) { + fImage = fImage.getScaledInstance(nativeSize.width, nativeSize.height, Image.SCALE_DEFAULT); + width = nativeSize.width; + height = nativeSize.height; + } } // NOTE: this was removed for 3169146, but in 1.5 the JCK tests for an exception and fails if one isn't thrown. @@ -98,6 +96,21 @@ public class CCustomCursor extends Cursor { } } + private static BufferedImage createTransparentImage(int w, int h) { + GraphicsEnvironment ge = + GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice gs = ge.getDefaultScreenDevice(); + GraphicsConfiguration gc = gs.getDefaultConfiguration(); + + BufferedImage img = gc.createCompatibleImage(w, h, Transparency.BITMASK); + Graphics2D g = (Graphics2D)img.getGraphics(); + g.setBackground(new Color(0, 0, 0, 0)); + g.clearRect(0, 0, w, h); + g.dispose(); + + return img; + } + public static Dimension getBestCursorSize(final int preferredWidth, final int preferredHeight) { // With Panther, cursors have no limit on their size. So give the client their // preferred size, but no larger than half the dimensions of the main screen @@ -111,31 +124,26 @@ public class CCustomCursor extends Cursor { } // Called from native when the cursor is set - // Returns long array of [NSImage ptr, x hotspot, y hotspot] CImage fCImage; long getImageData() { if (fCImage != null) { return fCImage.ptr; } - if (isImageOk) { - try { - fCImage = CImage.getCreator().createFromImage(fImage); - - if (fCImage == null) { - isImageOk = false; - return 0L; - } else { - return fCImage.ptr; - } - } catch (IllegalArgumentException iae) { - // Silently return null - we want to hide cursor by providing an empty - // ByteArray or just null + try { + fCImage = CImage.getCreator().createFromImage(fImage); + if (fCImage == null) { + // Something unexpected happened: CCustomCursor constructor + // takes care of invalid cursor images, yet createFromImage() + // failed to do its job. Return null to keep the cursor unchanged. return 0L; + } else { + return fCImage.ptr; } + } catch (IllegalArgumentException iae) { + // see comment above + return 0L; } - - return 0L; } Point getHotSpot() { diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java index e1e7c9c24c9..cec7c552b94 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java @@ -132,44 +132,31 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer { this.setDefaultDragImage(component); // Get drag image (if any) as BufferedImage and convert that to CImage: - long dragImage; Point dragImageOffset; if (fDragImage != null) { - BufferedImage bi = (fDragImage instanceof BufferedImage ? (BufferedImage) fDragImage : null); - - if (bi == null) { - // Create a new buffered image: - int width = fDragImage.getWidth(null); - int height = fDragImage.getHeight(null); - bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE); - - // Draw drag image into the buffered image: - Graphics g = bi.getGraphics(); - g.drawImage(fDragImage, 0, 0, null); - g.dispose(); + try { + fDragCImage = CImage.getCreator().createFromImageImmediately(fDragImage); + } catch(Exception e) { + // image creation may fail for any reason + throw new InvalidDnDOperationException("Drag image can not be created."); } - /* TODO:BG - fDragCImage = CImage.getCreator().createImage(bi); - dragImage = fDragCImage.getNSImage(); */ - fDragCImage = null; - dragImage = 0L; + if (fDragCImage == null) { + throw new InvalidDnDOperationException("Drag image is not ready."); + } + dragImageOffset = fDragImageOffset; } else { fDragCImage = null; - dragImage = 0L; dragImageOffset = new Point(0, 0); } - // Get NS drag image instance if we have a drag image: - long nsDragImage = 0L; //TODO:BG (fDragCImage != null ? fDragCImage.getNSImage() : 0L); - try { // Create native dragging source: final long nativeDragSource = createNativeDragSource(component, peer, nativeWindowPtr, transferable, triggerEvent, (int) (dragOrigin.getX() + componentOffset.x), (int) (dragOrigin.getY() + componentOffset.y), extModifiers, - clickCount, timestamp, cursor, dragImage, dragImageOffset.x, dragImageOffset.y, + clickCount, timestamp, cursor, fDragCImage, dragImageOffset.x, dragImageOffset.y, getDragSourceContext().getSourceActions(), formats, formatMap); if (nativeDragSource == 0) @@ -495,7 +482,7 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer { // Native support: private native long createNativeDragSource(Component component, ComponentPeer peer, long nativePeer, Transferable transferable, InputEvent triggerEvent, int dragPosX, int dragPosY, int extModifiers, int clickCount, long timestamp, - Cursor cursor, long nsDragImage, int dragImageOffsetX, int dragImageOffsetY, + Cursor cursor, CImage nsDragImage, int dragImageOffsetX, int dragImageOffsetY, int sourceActions, long[] formats, Map formatMap); private native void doDragging(long nativeDragSource); diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java index fa711c9a9d2..2415ff7d8d8 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java @@ -112,28 +112,19 @@ public class CEmbeddedFrame extends EmbeddedFrame { public void handleFocusEvent(boolean focused) { this.focused = focused; - updateOverlayWindowActiveState(); + if (parentWindowActive) { + responder.handleWindowFocusEvent(focused); + } } public void handleWindowFocusEvent(boolean parentWindowActive) { this.parentWindowActive = parentWindowActive; - updateOverlayWindowActiveState(); + if (focused) { + responder.handleWindowFocusEvent(parentWindowActive); + } } public boolean isParentWindowActive() { return parentWindowActive; } - - /* - * May change appearance of contents of window, and generate a - * WINDOW_ACTIVATED event. - */ - private void updateOverlayWindowActiveState() { - final boolean showAsFocused = parentWindowActive && focused; - dispatchEvent( - new FocusEvent(this, showAsFocused ? - FocusEvent.FOCUS_GAINED : - FocusEvent.FOCUS_LOST)); - } - } diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CFileDialog.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CFileDialog.java index 2c55692218e..b905f0bcc93 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CFileDialog.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CFileDialog.java @@ -34,6 +34,7 @@ import java.util.List; import java.io.*; import sun.awt.CausedFocusEvent.Cause; +import sun.awt.AWTAccessor; import sun.java2d.pipe.Region; class CFileDialog implements FileDialogPeer { @@ -53,33 +54,40 @@ class CFileDialog implements FileDialogPeer { title = " "; } - String userFileName = nativeRunFileDialog(title, - dialogMode, navigateApps, + String[] userFileNames = nativeRunFileDialog(title, + dialogMode, + target.isMultipleMode(), + navigateApps, target.getFilenameFilter() != null, target.getDirectory(), target.getFile()); - File file = null; - if (userFileName != null) { - // the dialog wasn't cancelled - file = new File(userFileName); - } + String directory = null; + String file = null; + File[] files = null; - if (file != null) { - // make sure directory always ends in '/' - String parent = file.getParent(); - if (!parent.endsWith(File.separator)) { - parent = parent + File.separator; + if (userFileNames != null) { + // the dialog wasn't cancelled + int filesNumber = userFileNames.length; + files = new File[filesNumber]; + for (int i = 0; i < filesNumber; i++) { + files[i] = new File(userFileNames[i]); } - // store results back in component - target.setDirectory(parent); - target.setFile(file.getName()); - } else { - // setting file name to null is how we tell - // java client that user hit the cancel button - target.setFile(null); + directory = files[0].getParent(); + // make sure directory always ends in '/' + if (!directory.endsWith(File.separator)) { + directory = directory + File.separator; + } + + file = files[0].getName(); // pick any file } + + // store results back in component + AWTAccessor.FileDialogAccessor accessor = AWTAccessor.getFileDialogAccessor(); + accessor.setDirectory(target, directory); + accessor.setFile(target, file); + accessor.setFiles(target, files); } finally { // Java2 Dialog waits for hide to let show() return target.dispose(); @@ -133,8 +141,8 @@ class CFileDialog implements FileDialogPeer { return ret; } - private native String nativeRunFileDialog(String title, int mode, - boolean shouldNavigateApps, boolean hasFilenameFilter, + private native String[] nativeRunFileDialog(String title, int mode, + boolean multipleMode, boolean shouldNavigateApps, boolean hasFilenameFilter, String directory, String file); @Override diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java index 425bd2c3e81..d764b95a454 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java @@ -97,35 +97,55 @@ public class CImage extends CFRetainedResource { return createImageUsingNativeSize(nativeCreateNSImageFromImageName(name)); } - private static int[] imageToArray(Image image) { + private static int[] imageToArray(Image image, boolean prepareImage) { if (image == null) return null; - MediaTracker mt = new MediaTracker(new Label()); - final int id = 0; - mt.addImage(image, id); + if (prepareImage && !(image instanceof BufferedImage)) { + final MediaTracker mt = new MediaTracker(new Label()); + final int id = 0; + mt.addImage(image, id); - try { - mt.waitForID(id); - } catch (InterruptedException e) { - } + try { + mt.waitForID(id); + } catch (InterruptedException e) { + return null; + } - if (mt.isErrorID(id)) { - return null; + if (mt.isErrorID(id)) { + return null; + } } int w = image.getWidth(null); int h = image.getHeight(null); + + if (w < 0 || h < 0) { + return null; + } + BufferedImage bimg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE); Graphics2D g2 = bimg.createGraphics(); g2.setComposite(AlphaComposite.Src); g2.drawImage(image, 0, 0, null); g2.dispose(); + return ((DataBufferInt)bimg.getRaster().getDataBuffer()).getData(); } + public CImage createFromImageImmediately(final Image image) { + int[] buffer = imageToArray(image, false); + + if (buffer == null) { + return null; + } + + return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null), + image.getHeight(null))); + } + // This is used to create a CImage from a Image public CImage createFromImage(final Image image) { - int[] buffer = imageToArray(image); + int[] buffer = imageToArray(image, true); if (buffer == null) { return null; } @@ -146,7 +166,7 @@ public class CImage extends CFRetainedResource { num = 0; for (Image img : images) { - buffers[num] = imageToArray(img); + buffers[num] = imageToArray(img, true); if (buffers[num] == null) { // Unable to process the image continue; diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java index c355445ac83..aeff2833d9a 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java @@ -86,11 +86,10 @@ public class CPlatformEmbeddedFrame implements PlatformWindow { } @Override - public int getScreenImOn() { + public GraphicsDevice getGraphicsDevice() { // REMIND: return the main screen for the initial implementation - CGraphicsConfig gc = (CGraphicsConfig)peer.getGraphicsConfiguration(); - CGraphicsDevice device = gc.getDevice(); - return device.getCoreGraphicsScreen(); + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + return ge.getDefaultScreenDevice(); } @Override @@ -118,7 +117,7 @@ public class CPlatformEmbeddedFrame implements PlatformWindow { Rectangle r = peer.getBounds(); Image im = null; if (!r.isEmpty()) { - int transparency = (peer.isOpaque() ? Transparency.OPAQUE : Transparency.TRANSLUCENT); + int transparency = peer.isTranslucent() ? Transparency.TRANSLUCENT : Transparency.OPAQUE; im = peer.getGraphicsConfiguration().createCompatibleImage(r.width, r.height, transparency); } return im; @@ -205,4 +204,7 @@ public class CPlatformEmbeddedFrame implements PlatformWindow { @Override public void setWindowState(int windowState) {} + + @Override + public void setModalBlocked(boolean blocked) {} } diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java index 739e5679008..059ef01f3c7 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java @@ -109,8 +109,14 @@ final class CPlatformResponder { final long when = System.currentTimeMillis(); final int scrollType = MouseWheelEvent.WHEEL_UNIT_SCROLL; final int scrollAmount = 1; + int wheelRotation = (int) delta; + int signum = (int) Math.signum(delta); + if (signum * delta < 1) { + wheelRotation = signum; + } + // invert the wheelRotation for the peer peer.dispatchMouseWheelEvent(when, x, y, modifiers, scrollType, - scrollAmount, (int) -delta, -delta, null); + scrollAmount, -wheelRotation, -delta, null); } /** @@ -204,4 +210,8 @@ final class CPlatformResponder { } } } + + void handleWindowFocusEvent(boolean gained) { + peer.notifyActivation(gained); + } } diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java index 77a81e0d78f..8439ca67c2d 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java @@ -49,9 +49,9 @@ public class CPlatformView extends CFRetainedResource { super(0, true); } - public void initialize(LWWindowPeer peer) { + public void initialize(LWWindowPeer peer, CPlatformResponder responder) { this.peer = peer; - this.responder = new CPlatformResponder(peer, false); + this.responder = responder; if (!LWCToolkit.getSunAwtDisableCALayers()) { this.windowLayer = new CGLLayer(peer); @@ -64,7 +64,7 @@ public class CPlatformView extends CFRetainedResource { } public boolean isOpaque() { - return peer.isOpaque(); + return !peer.isTranslucent(); } /* diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java index 9f8c8f545d0..b2f0d832999 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java @@ -56,14 +56,15 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo private static native void nativePushNSWindowToBack(long nsWindowPtr); private static native void nativePushNSWindowToFront(long nsWindowPtr); private static native void nativeSetNSWindowTitle(long nsWindowPtr, String title); - private static native void nativeSetNSWindowAlpha(long nsWindowPtr, float alpha); private static native void nativeRevalidateNSWindowShadow(long nsWindowPtr); private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage); private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename); private static native void nativeSetNSWindowSecurityWarningPositioning(long nsWindowPtr, double x, double y, float biasX, float biasY); + private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled); private static native void nativeSynthesizeMouseEnteredExitedEvents(long nsWindowPtr); + private static native void nativeDispose(long nsWindowPtr); - private static native int nativeGetScreenNSWindowIsOn_AppKitThread(long nsWindowPtr); + private static native int nativeGetNSWindowDisplayID_AppKitThread(long nsWindowPtr); // Loger to report issues happened during execution but that do not affect functionality private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow"); @@ -207,6 +208,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo private boolean visible = false; // visibility status from native perspective private boolean undecorated; // initialized in getInitialStyleBits() private Rectangle normalBounds = null; // not-null only for undecorated maximized windows + private CPlatformResponder responder; + private volatile boolean zoomed = false; // from native perspective public CPlatformWindow(final PeerType peerType) { super(0, true); @@ -231,8 +234,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo final long parentNSWindowPtr = (owner != null ? owner.getNSWindowPtr() : 0); String warningString = target.getWarningString(); + responder = new CPlatformResponder(peer, false); contentView = new CPlatformView(); - contentView.initialize(peer); + contentView.initialize(peer, responder); final long nativeWindowPtr = nativeCreateNSWindow(contentView.getAWTView(), styleBits, 0, 0, 0, 0); setPtr(nativeWindowPtr); @@ -240,17 +244,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo // TODO: implement on top of JObjC bridged class // NSWindow window = JObjC.getInstance().AppKit().NSWindow().getInstance(nativeWindowPtr, JObjCRuntime.getInstance()); - // Since JDK7 we have standard way to set opacity, so we should not pick - // background's alpha. - // TODO: set appropriate opacity value - // this.opacity = target.getOpacity(); - // this.setOpacity(this.opacity); - - final float windowAlpha = target.getOpacity(); - if (windowAlpha != 1.0f) { - nativeSetNSWindowAlpha(nativeWindowPtr, windowAlpha); - } - if (target instanceof javax.swing.RootPaneContainer) { final javax.swing.JRootPane rootpane = ((javax.swing.RootPaneContainer)target).getRootPane(); if (rootpane != null) rootpane.addPropertyChangeListener("ancestor", new PropertyChangeListener() { @@ -306,11 +299,15 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo // If the target is a dialog, popup or tooltip we want it to ignore the brushed metal look. if (isPopup) { - styleBits = SET(styleBits, TEXTURED, true); + styleBits = SET(styleBits, TEXTURED, false); // Popups in applets don't activate applet's process styleBits = SET(styleBits, NONACTIVATING, true); } + if (Window.Type.UTILITY.equals(target.getType())) { + styleBits = SET(styleBits, UTILITY, true); + } + if (target instanceof javax.swing.RootPaneContainer) { javax.swing.JRootPane rootpane = ((javax.swing.RootPaneContainer)target).getRootPane(); Object prop = null; @@ -376,6 +373,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } + peer.setTextured(IS(TEXTURED, styleBits)); + return styleBits; } @@ -411,14 +410,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo if (owner != null) { CWrapper.NSWindow.removeChildWindow(owner.getNSWindowPtr(), getNSWindowPtr()); } - // Make sure window is ordered out before it is disposed, we could order it out right here or - // we could postpone the disposal, I think postponing is probably better. - EventQueue.invokeLater(new Runnable() { - public void run() { - contentView.dispose(); - CPlatformWindow.super.dispose(); - } - }); + contentView.dispose(); + nativeDispose(getNSWindowPtr()); + CPlatformWindow.super.dispose(); } @Override // PlatformWindow @@ -445,13 +439,18 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo return new Point(nativeBounds.x, nativeBounds.y); } - @Override // PlatformWindow - public int getScreenImOn() { - // REMIND: we could also acquire screenID from the - // graphicsConfig.getDevice().getCoreGraphicsScreen() - // which might look a bit less natural but don't - // require new native accessor. - return nativeGetScreenNSWindowIsOn_AppKitThread(getNSWindowPtr()); + @Override + public GraphicsDevice getGraphicsDevice() { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + CGraphicsEnvironment cge = (CGraphicsEnvironment)ge; + int displayID = nativeGetNSWindowDisplayID_AppKitThread(getNSWindowPtr()); + GraphicsDevice gd = cge.getScreenDevice(displayID); + if (gd == null) { + // this could possibly happen during device removal + // use the default screen device in this case + gd = ge.getDefaultScreenDevice(); + } + return gd; } @Override // PlatformWindow @@ -471,26 +470,42 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo nativeSetNSWindowBounds(getNSWindowPtr(), x, y, w, h); } - private void zoom() { + private boolean isMaximized() { + return undecorated ? this.normalBounds != null : zoomed; + } + + private void maximize() { + if (isMaximized()) { + return; + } if (!undecorated) { + zoomed = true; CWrapper.NSWindow.zoom(getNSWindowPtr()); } else { - // OS X handles -zoom incorrectly for undecorated windows - final boolean isZoomed = this.normalBounds == null; - deliverZoom(isZoomed); + deliverZoom(true); - Rectangle toBounds; - if (isZoomed) { - this.normalBounds = peer.getBounds(); - long screen = CWrapper.NSWindow.screen(getNSWindowPtr()); - toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds(); - // Flip the y coordinate - Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds(); - toBounds.y = frame.height - toBounds.y - toBounds.height; - } else { - toBounds = normalBounds; - this.normalBounds = null; - } + this.normalBounds = peer.getBounds(); + long screen = CWrapper.NSWindow.screen(getNSWindowPtr()); + Rectangle toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds(); + // Flip the y coordinate + Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds(); + toBounds.y = frame.height - toBounds.y - toBounds.height; + setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height); + } + } + + private void unmaximize() { + if (!isMaximized()) { + return; + } + if (!undecorated) { + zoomed = false; + CWrapper.NSWindow.zoom(getNSWindowPtr()); + } else { + deliverZoom(false); + + Rectangle toBounds = this.normalBounds; + this.normalBounds = null; setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height); } } @@ -503,9 +518,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo public void setVisible(boolean visible) { final long nsWindowPtr = getNSWindowPtr(); - // 1. Process parent-child relationship when hiding + // Process parent-child relationship when hiding if (!visible) { - // 1a. Unparent my children + // Unparent my children for (Window w : target.getOwnedWindows()) { WindowPeer p = (WindowPeer)w.getPeer(); if (p instanceof LWWindowPeer) { @@ -516,30 +531,17 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } - // 1b. Unparent myself + // Unparent myself if (owner != null && owner.isVisible()) { CWrapper.NSWindow.removeChildWindow(owner.getNSWindowPtr(), nsWindowPtr); } } - // 2. Configure stuff + // Configure stuff updateIconImages(); updateFocusabilityForAutoRequestFocus(false); - // 3. Manage the extended state when hiding - if (!visible) { - // Cancel out the current native state of the window - switch (peer.getState()) { - case Frame.ICONIFIED: - CWrapper.NSWindow.deminiaturize(nsWindowPtr); - break; - case Frame.MAXIMIZED_BOTH: - zoom(); - break; - } - } - - // 4. Actually show or hide the window + // Actually show or hide the window LWWindowPeer blocker = peer.getBlocker(); if (blocker == null || !visible) { // If it ain't blocked, or is being hidden, go regular way @@ -568,16 +570,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } this.visible = visible; - // 5. Manage the extended state when showing + // Manage the extended state when showing if (visible) { - // Re-apply the extended state as expected in shared code + // Apply the extended state as expected in shared code if (target instanceof Frame) { switch (((Frame)target).getExtendedState()) { case Frame.ICONIFIED: CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: - zoom(); + maximize(); + break; + default: // NORMAL + unmaximize(); // in case it was maximized, otherwise this is a no-op break; } } @@ -585,12 +590,12 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo nativeSynthesizeMouseEnteredExitedEvents(nsWindowPtr); - // 6. Configure stuff #2 + // Configure stuff #2 updateFocusabilityForAutoRequestFocus(true); - // 7. Manage parent-child relationship when showing + // Manage parent-child relationship when showing if (visible) { - // 7a. Add myself as a child + // Add myself as a child if (owner != null && owner.isVisible()) { CWrapper.NSWindow.addChildWindow(owner.getNSWindowPtr(), nsWindowPtr, CWrapper.NSWindow.NSWindowAbove); if (target.isAlwaysOnTop()) { @@ -598,7 +603,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } - // 7b. Add my own children to myself + // Add my own children to myself for (Window w : target.getOwnedWindows()) { WindowPeer p = (WindowPeer)w.getPeer(); if (p instanceof LWWindowPeer) { @@ -613,7 +618,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } - // 8. Deal with the blocker of the window being shown + // Deal with the blocker of the window being shown if (blocker != null && visible) { // Make sure the blocker is above its siblings ((CPlatformWindow)blocker.getPlatformWindow()).orderAboveSiblings(); @@ -737,10 +742,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo @Override public void setOpaque(boolean isOpaque) { CWrapper.NSWindow.setOpaque(getNSWindowPtr(), isOpaque); - if (!isOpaque) { + if (!isOpaque && !peer.isTextured()) { long clearColor = CWrapper.NSColor.clearColor(); CWrapper.NSWindow.setBackgroundColor(getNSWindowPtr(), clearColor); } + + //This is a temporary workaround. Looks like after 7124236 will be fixed + //the correct place for invalidateShadow() is CGLayer.drawInCGLContext. + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + invalidateShadow(); + } + }); } @Override @@ -771,7 +785,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo if (prevWindowState == Frame.MAXIMIZED_BOTH) { // let's return into the normal states first // the zoom call toggles between the normal and the max states - zoom(); + unmaximize(); } CWrapper.NSWindow.miniaturize(nsWindowPtr); break; @@ -780,14 +794,14 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo // let's return into the normal states first CWrapper.NSWindow.deminiaturize(nsWindowPtr); } - zoom(); + maximize(); break; case Frame.NORMAL: if (prevWindowState == Frame.ICONIFIED) { CWrapper.NSWindow.deminiaturize(nsWindowPtr); } else if (prevWindowState == Frame.MAXIMIZED_BOTH) { // the zoom call toggles between the normal and the max states - zoom(); + unmaximize(); } break; default: @@ -800,6 +814,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo // value when the native notification comes to us } + @Override + public void setModalBlocked(boolean blocked) { + if (target.getModalExclusionType() == Dialog.ModalExclusionType.APPLICATION_EXCLUDE) { + return; + } + + nativeSetEnabled(getNSWindowPtr(), !blocked); + } + + public final void invalidateShadow(){ + nativeRevalidateNSWindowShadow(getNSWindowPtr()); + } + // ---------------------------------------------------------------------- // UTILITY METHODS // ---------------------------------------------------------------------- @@ -851,7 +878,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo focusLogger.fine("the app is inactive, so the notification is ignored"); return; } - peer.notifyActivation(gained); + responder.handleWindowFocusEvent(gained); } private void deliverMoveResizeEvent(int x, int y, int width, int height) { diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java index 2d36a914122..94a74e5174b 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java @@ -27,9 +27,9 @@ package sun.lwawt.macosx; import sun.awt.datatransfer.ToolkitThreadBlockedHandler; -// TODO:BG this class is really a NOOP right now, but should be filled in if needed. - final class CToolkitThreadBlockedHandler implements ToolkitThreadBlockedHandler { + private final LWCToolkit toolkit = (LWCToolkit)java.awt.Toolkit.getDefaultToolkit(); + public void lock() { } @@ -41,9 +41,11 @@ final class CToolkitThreadBlockedHandler implements ToolkitThreadBlockedHandler } public void enter() { + // Execute the next AppKit event while we are waiting for system to + // finish our request - this will save us from biting our own tail + toolkit.executeNextAppKitEvent(); } public void exit() { } - } diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CocoaConstants.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CocoaConstants.java index ca80d435156..a3c48517f59 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CocoaConstants.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CocoaConstants.java @@ -25,6 +25,10 @@ package sun.lwawt.macosx; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class CocoaConstants { private CocoaConstants(){} diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java index 05c4ceeaec8..774d31228d5 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java @@ -63,6 +63,8 @@ public class LWCToolkit extends LWToolkit { private static native void initIDs(); + static native void executeNextAppKitEvent(); + private static CInputMethodDescriptor sInputMethodDescriptor; static { @@ -214,7 +216,6 @@ public class LWCToolkit extends LWToolkit { @Override public SystemTrayPeer createSystemTray(SystemTray target) { SystemTrayPeer peer = new CSystemTray(); - targetCreatedPeer(target, peer); return peer; } @@ -357,9 +358,11 @@ public class LWCToolkit extends LWToolkit { CWrapper.NSObject.release(screen); } // Convert between Cocoa's coordinate system and Java. - return new Insets(fullScreen.height - workArea.height - workArea.y, - workArea.x, workArea.y, - fullScreen.width - workArea.width - workArea.x); + int bottom = workArea.y - fullScreen.y; + int top = fullScreen.height - workArea.height - bottom; + int left = workArea.x - fullScreen.x; + int right = fullScreen.width - workArea.width - left; + return new Insets(top, left, bottom, right); } @Override @@ -746,6 +749,11 @@ public class LWCToolkit extends LWToolkit { (modalityType == Dialog.ModalityType.TOOLKIT_MODAL); } + @Override + public boolean isWindowShapingSupported() { + return true; + } + @Override public boolean isWindowTranslucencySupported() { return true; @@ -756,6 +764,10 @@ public class LWCToolkit extends LWToolkit { return true; } + public boolean isSwingBackbufferTranslucencySupported() { + return true; + } + @Override public boolean enableInputMethodsForTextComponent() { return true; diff --git a/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m b/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m index a564e4bce38..d8bef393ad6 100644 --- a/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m +++ b/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m @@ -641,7 +641,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_removeNode // child must end with '/' -JNIEXPORT void JNICALL +JNIEXPORT Boolean JNICALL Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode (JNIEnv *env, jobject klass, jobject jpath, jobject jchild, jobject jname, jlong juser, jlong jhost) @@ -656,6 +656,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode CFDictionaryRef node; CFStringRef topKey; CFMutableDictionaryRef topValue; + Boolean beforeAdd = false; if (!path || !child || !name) goto badparams; @@ -665,9 +666,12 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode // copyMutableNode creates the node if necessary parent = copyMutableNode(path, name, user, host, &topKey, &topValue); throwIfNull(parent, "copyMutableNode failed"); - + beforeAdd = CFDictionaryContainsKey(parent, child); CFDictionaryAddValue(parent, child, node); - + if (!beforeAdd) + beforeAdd = CFDictionaryContainsKey(parent, child); + else + beforeAdd = false; CFPreferencesSetValue(topKey, topValue, name, user, host); CFRelease(parent); @@ -680,6 +684,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode if (path) CFRelease(path); if (child) CFRelease(child); if (name) CFRelease(name); + return beforeAdd; } diff --git a/jdk/src/macosx/native/jobjc/build.xml b/jdk/src/macosx/native/jobjc/build.xml index 46e726c6278..19e29ad51af 100644 --- a/jdk/src/macosx/native/jobjc/build.xml +++ b/jdk/src/macosx/native/jobjc/build.xml @@ -140,8 +140,16 @@ - + includeantruntime="false"> + + + + + + + + + diff --git a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs b/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs index 544998ee859..2759733ec6f 100644 --- a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs +++ b/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs @@ -2,7 +2,7 @@ {- /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011,2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -196,6 +196,8 @@ sizeofRet nt = c2java ntype = unlines [ "// native " ++ ntypeS ++ " -> java " ++ jprimS, + "/* No native methods here, but the constants are needed in the supporting JNI code */", + "@GenerateNativeHeader", "public static final class " ++ className ++ " extends PrimitiveCoder<" ++ jclassS ++ ">{", "\tpublic static final " ++ className ++ " INST = new " ++ className ++ "();", "\tpublic " ++ className ++ "(){ super("++ffitypeVal ntype++", \"" ++ [encoding ntype] ++ "\", "++jclassS++".class, "++jprimS++".class); }", @@ -246,10 +248,13 @@ main = do putStrLn "package com.apple.jobjc;" putStrLn "import com.apple.jobjc.JObjCRuntime.Width;" + putStrLn "import javax.tools.annotation.GenerateNativeHeader;" putStrLn "// Auto generated by PrimitiveCoder.hs" putStrLn "// Do not edit by hand." + putStrLn "/* No native methods here, but the constants are needed in the supporting JNI code */" + putStrLn "@GenerateNativeHeader" putStrLn "public abstract class PrimitiveCoder extends Coder{" putStrLn "\tpublic PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){" diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java index aeeca30d29e..835b3793538 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class CFType extends Pointer { protected CFType(long ptr) { super(ptr); } protected CFType(Pointer ptr) { super(ptr.ptr); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java index a6a714f3933..f1bc68283ac 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java @@ -35,6 +35,7 @@ import com.apple.jobjc.PrimitiveCoder.SCharCoder; import com.apple.jobjc.PrimitiveCoder.SIntCoder; import com.apple.jobjc.PrimitiveCoder.SLongLongCoder; import com.apple.jobjc.PrimitiveCoder.SShortCoder; +import javax.tools.annotation.GenerateNativeHeader; public abstract class Coder { private static native long getNativeFFITypePtrForCode(final int code); @@ -142,6 +143,8 @@ public abstract class Coder { // + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class VoidCoder extends Coder{ public static final VoidCoder INST = new VoidCoder(); public VoidCoder(){ super(FFI_VOID, "v", Void.class, void.class); } @@ -150,6 +153,8 @@ public abstract class Coder { @Override public void push(JObjCRuntime runtime, long addr, Object x) { throw new RuntimeException("Trying to push a Void."); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class UnknownCoder extends Coder { public static final UnknownCoder INST = new UnknownCoder(); public UnknownCoder(){ super(-1, "?", null, null); } @@ -158,6 +163,8 @@ public abstract class Coder { @Override public Object pop(JObjCRuntime runtime, long addr) { throw new RuntimeException("Coder not implemented"); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class PrimitivePointerCoder extends Coder { public static final PrimitivePointerCoder INST = new PrimitivePointerCoder(); public PrimitivePointerCoder(){ super(Coder.FFI_PTR, "^?", Long.class, long.class); } @@ -187,6 +194,8 @@ public abstract class Coder { @Override public void push(JObjCRuntime runtime, long addr, Long x) { push(runtime, addr, (long) x); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class PointerCoder extends Coder { public static final PointerCoder INST = new PointerCoder(); public PointerCoder(){ super(FFI_PTR, "^?", Pointer.class); } @@ -200,6 +209,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class SELCoder extends Coder { public static final SELCoder INST = new SELCoder(); public SELCoder(){ super(FFI_PTR, ":", SEL.class); } @@ -213,6 +224,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static abstract class StructCoder extends Coder { private final FFIType ffiType; final int sizeof; @@ -254,6 +267,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class IDCoder extends Coder{ public static final IDCoder INST = new IDCoder(); public IDCoder(){ super(FFI_PTR, "@", ID.class); } @@ -272,6 +287,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class NSClassCoder extends Coder{ public static final NSClassCoder INST = new NSClassCoder(); public NSClassCoder(){ super(FFI_PTR, "#", NSClass.class); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java index fcfddd6edec..c045b210c6c 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java @@ -26,6 +26,10 @@ package com.apple.jobjc; import com.apple.jobjc.Coder.PrimitivePointerCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader class FFIType{ private static native void makeFFIType(long ffi_type_buf, long elements_buf); private static native int getFFITypeSizeof(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java index 0acfccce91d..b5257cc83ef 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Function { private static native long getFxnPtrForFunctionName(final String functionName); private static native long getFxnPtrForFunctionNameAndLib(final long libPtr, final String functionName); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java index f2b3718df7e..192e6feafa0 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java @@ -29,6 +29,10 @@ import java.lang.reflect.Constructor; import java.util.LinkedHashMap; import java.util.Map; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class ID extends Pointer{ static native String getNativeDescription(final long objPtr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java index c6cab308a93..19e79ddc165 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java @@ -30,12 +30,18 @@ import com.apple.jobjc.Coder.PrimitivePointerCoder; import com.apple.jobjc.Coder.SELCoder; import com.apple.jobjc.Coder.StructCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class Invoke { public abstract void invoke(NativeArgumentBuffer argBuf); public abstract void invoke(NativeArgumentBuffer buffer, Struct retvalStruct); // + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class FunCall extends Invoke{ static native void invoke(long cifPtr, long fxnPtr, long retValPtr, long argsPtr); @@ -72,6 +78,8 @@ public abstract class Invoke { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class MsgSend extends Invoke{ static{ System.load("/usr/lib/libobjc.dylib"); } @@ -157,6 +165,8 @@ public abstract class Invoke { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class MsgSendSuper extends Invoke{ static{ System.load("/usr/lib/libobjc.dylib"); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java index b5e08478c1c..03f636696b2 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java @@ -31,10 +31,16 @@ import java.util.List; import sun.misc.Unsafe; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class JObjCRuntime { static { System.loadLibrary("JObjC"); } + @GenerateNativeHeader public static enum Arch{ ppc, i386, x86_64 }; + @GenerateNativeHeader public static enum Width{ W32, W64 }; public static final Arch ARCH = getArch(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java index bfc77501db8..09737c80925 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java @@ -25,6 +25,10 @@ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class MacOSXFramework { private static native long retainFramework(final String frameworkName); private static native void releaseFramework(final long frameworkPtr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java index dbc784f6940..15de180200d 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java @@ -27,7 +27,13 @@ package com.apple.jobjc; import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class NSClass extends ID { + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class NSClassNotFoundException extends RuntimeException{ public NSClassNotFoundException(String m){ super(m); } public NSClassNotFoundException(String m, Throwable cause){ super(m, cause); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java index 1e3c42452bf..3a6a792af56 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java @@ -28,6 +28,10 @@ import java.nio.ByteOrder; import com.apple.jobjc.Coder.PrimitivePointerCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class NativeArgumentBuffer{ private static final ThreadLocal threadLocal = new ThreadLocal(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java index ee0ac05d687..f7285f145a5 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java @@ -27,9 +27,13 @@ package com.apple.jobjc; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import javax.tools.annotation.GenerateNativeHeader; + /** * A wrapper around a direct ByteBuffer and its native pointer. For documentation, @see java.nio.ByteBuffer */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class NativeBuffer { static native long getPtrOfBuffer(final ByteBuffer byteBuffer); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java index b4d3dbfe0b8..928f0012425 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class NativeObjectLifecycleManager { private static native void retainNativeObject(final long ptr); private static native void releaseNativeObject(final long ptr); @@ -33,6 +37,8 @@ public abstract class NativeObjectLifecycleManager { abstract void end(final long ptr); boolean shouldPreRetain() { return false; } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class CFRetainRelease extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new CFRetainRelease(); @Override void begin(final long ptr) { retainNativeObject(ptr); } @@ -40,12 +46,16 @@ public abstract class NativeObjectLifecycleManager { @Override boolean shouldPreRetain() { return true; } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Free extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new Free(); @Override void begin(final long ptr) { } @Override void end(final long ptr) { freeNativeObject(ptr); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Nothing extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new Nothing(); @Override void begin(final long ptr) { } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java index cbc5acca39e..82bceb93ce8 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Opaque extends Pointer { protected Opaque(long ptr) { super(ptr); } protected Opaque(Pointer ptr) { super(ptr.ptr); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java index 5d8c3c85c2e..cc0487f2e69 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Pointer implements Comparable>{ long ptr; diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java index 8dcc42482da..975b88848d5 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011,2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,11 @@ */ package com.apple.jobjc; import com.apple.jobjc.JObjCRuntime.Width; +import javax.tools.annotation.GenerateNativeHeader; // Auto generated by PrimitiveCoder.hs // Do not edit by hand. +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class PrimitiveCoder extends Coder{ public PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){ super(ffiTypeCode, objCEncoding, jclass, jprim); @@ -127,6 +130,8 @@ public abstract class PrimitiveCoder extends Coder{ // native BOOL -> java boolean +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class BoolCoder extends PrimitiveCoder{ public static final BoolCoder INST = new BoolCoder(); public BoolCoder(){ super(FFI_SINT8, "B", Boolean.class, boolean.class); } @@ -170,6 +175,8 @@ public static final class BoolCoder extends PrimitiveCoder{ } // native schar -> java byte +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SCharCoder extends PrimitiveCoder{ public static final SCharCoder INST = new SCharCoder(); public SCharCoder(){ super(FFI_SINT8, "c", Byte.class, byte.class); } @@ -213,6 +220,8 @@ public static final class SCharCoder extends PrimitiveCoder{ } // native uchar -> java byte +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UCharCoder extends PrimitiveCoder{ public static final UCharCoder INST = new UCharCoder(); public UCharCoder(){ super(FFI_UINT8, "C", Byte.class, byte.class); } @@ -256,6 +265,8 @@ public static final class UCharCoder extends PrimitiveCoder{ } // native sshort -> java short +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SShortCoder extends PrimitiveCoder{ public static final SShortCoder INST = new SShortCoder(); public SShortCoder(){ super(FFI_SINT16, "s", Short.class, short.class); } @@ -299,6 +310,8 @@ public static final class SShortCoder extends PrimitiveCoder{ } // native ushort -> java short +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UShortCoder extends PrimitiveCoder{ public static final UShortCoder INST = new UShortCoder(); public UShortCoder(){ super(FFI_UINT16, "S", Short.class, short.class); } @@ -342,6 +355,8 @@ public static final class UShortCoder extends PrimitiveCoder{ } // native sint -> java int +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SIntCoder extends PrimitiveCoder{ public static final SIntCoder INST = new SIntCoder(); public SIntCoder(){ super(FFI_SINT32, "i", Integer.class, int.class); } @@ -385,6 +400,8 @@ public static final class SIntCoder extends PrimitiveCoder{ } // native uint -> java int +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UIntCoder extends PrimitiveCoder{ public static final UIntCoder INST = new UIntCoder(); public UIntCoder(){ super(FFI_UINT32, "I", Integer.class, int.class); } @@ -428,6 +445,8 @@ public static final class UIntCoder extends PrimitiveCoder{ } // native slong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SLongCoder extends PrimitiveCoder{ public static final SLongCoder INST = new SLongCoder(); public SLongCoder(){ super((JObjCRuntime.IS64 ? (FFI_SINT64) : (FFI_SINT32)), "l", Long.class, long.class); } @@ -477,6 +496,8 @@ public static final class SLongCoder extends PrimitiveCoder{ } // native ulong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class ULongCoder extends PrimitiveCoder{ public static final ULongCoder INST = new ULongCoder(); public ULongCoder(){ super((JObjCRuntime.IS64 ? (FFI_UINT64) : (FFI_UINT32)), "L", Long.class, long.class); } @@ -526,6 +547,8 @@ public static final class ULongCoder extends PrimitiveCoder{ } // native slonglong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SLongLongCoder extends PrimitiveCoder{ public static final SLongLongCoder INST = new SLongLongCoder(); public SLongLongCoder(){ super(FFI_SINT64, "q", Long.class, long.class); } @@ -569,6 +592,8 @@ public static final class SLongLongCoder extends PrimitiveCoder{ } // native ulonglong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class ULongLongCoder extends PrimitiveCoder{ public static final ULongLongCoder INST = new ULongLongCoder(); public ULongLongCoder(){ super(FFI_UINT64, "Q", Long.class, long.class); } @@ -612,6 +637,8 @@ public static final class ULongLongCoder extends PrimitiveCoder{ } // native float -> java float +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class FloatCoder extends PrimitiveCoder{ public static final FloatCoder INST = new FloatCoder(); public FloatCoder(){ super(FFI_FLOAT, "f", Float.class, float.class); } @@ -655,6 +682,8 @@ public static final class FloatCoder extends PrimitiveCoder{ } // native double -> java double +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class DoubleCoder extends PrimitiveCoder{ public static final DoubleCoder INST = new DoubleCoder(); public DoubleCoder(){ super(FFI_DOUBLE, "d", Double.class, double.class); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java index b6d719e1158..44d679ab539 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class SEL { static native long getSelectorPtr(String selectorName); static native String getSelectorName(long ptr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java index 8329cf17f04..117710402e8 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java @@ -24,9 +24,13 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + /** * A struct is malloced on the C heap and accessed in Java through a ByteBuffer. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class Struct{ protected final NativeBuffer raw; private final JObjCRuntime runtime; diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java index b2084dfd706..d3bfc1b0e41 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java @@ -33,6 +33,10 @@ import com.apple.jobjc.Coder.PrimitivePointerCoder; import com.apple.jobjc.Coder.VoidCoder; import com.apple.jobjc.Invoke.MsgSend; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader final class Subclassing { static native long allocateClassPair(long superClass, String name); static native boolean addIVarForJObj(long clazz); diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java index 20b27b6c548..8a27daaa0af 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java @@ -28,6 +28,7 @@ import java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; +import java.util.TreeSet; import com.apple.internal.jobjc.generator.FunctionGenerator; import com.apple.internal.jobjc.generator.Utils; @@ -130,7 +131,11 @@ public class FrameworkClassFile extends GeneratedClassFile { } } - for (final Clazz clazz : framework.classes) { + /** + * Order classes to get stable output + */ + TreeSet sortedClasses = new TreeSet(framework.classes); + for (final Clazz clazz : sortedClasses) { final String classClassName = clazz.name + "Class"; out.println(JavaLang.makeSingleton("_" + classClassName, clazz.name, classClassName, "getRuntime()")); } diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java index 9dfb8228a82..be4278ffef9 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java @@ -147,4 +147,8 @@ public class Clazz extends Element implements OutputFileGenerator { return null; } + + int compareTo(Clazz o) { + return toString().compareTo(o.toString()); + } } diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java index 11ee8cc9fe3..7ffb14b0f31 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java @@ -25,7 +25,7 @@ package com.apple.internal.jobjc.generator.model.coders; import java.util.HashMap; -import java.util.HashSet; +import java.util.TreeSet; import java.util.Map; import java.util.Set; @@ -40,7 +40,7 @@ import com.apple.jobjc.JObjCRuntime; */ public class ComplexCoderDescriptor extends CoderDescriptor { static Map, ComplexCoderDescriptor> cache = new HashMap, ComplexCoderDescriptor>(); - static Set mixedEncodingDescriptors = new HashSet(); + static Set mixedEncodingDescriptors = new TreeSet(); public static Set getMixedEncoders() { return mixedEncodingDescriptors; } @@ -76,7 +76,7 @@ public class ComplexCoderDescriptor extends CoderDescriptor { // ** Subclasses // ------------- - public static class MixedEncodingDescriptor extends ComplexCoderDescriptor { + public static class MixedEncodingDescriptor extends ComplexCoderDescriptor implements java.lang.Comparable { protected final PrimitiveCoderDescriptor desc32; public MixedEncodingDescriptor(final PrimitiveCoderDescriptor desc32, final PrimitiveCoderDescriptor desc64) { @@ -97,5 +97,6 @@ public class ComplexCoderDescriptor extends CoderDescriptor { } static String getBaseNameOfCoder(final String coderName) { return coderName.substring(0, coderName.indexOf("Coder")); } + public int compareTo(Object _o) { MixedEncodingDescriptor o = (MixedEncodingDescriptor)_o; return getMixedName().compareTo(o.getMixedName()); } } } diff --git a/jdk/src/macosx/native/sun/awt/AWTView.m b/jdk/src/macosx/native/sun/awt/AWTView.m index 896d05c4c72..b4cb30aa13c 100644 --- a/jdk/src/macosx/native/sun/awt/AWTView.m +++ b/jdk/src/macosx/native/sun/awt/AWTView.m @@ -48,7 +48,6 @@ //#define IM_DEBUG TRUE //#define EXTRA_DEBUG - static BOOL shouldUsePressAndHold() { static int shouldUsePressAndHold = -1; if (shouldUsePressAndHold != -1) return shouldUsePressAndHold; @@ -81,7 +80,7 @@ AWT_ASSERT_APPKIT_THREAD; fEnablePressAndHold = shouldUsePressAndHold(); fInPressAndHold = NO; fPAHNeedsToSelect = NO; - + mouseIsOver = NO; if (windowLayer != nil) { @@ -189,7 +188,9 @@ AWT_ASSERT_APPKIT_THREAD; #endif } } else { +#if IM_DEBUG NSLog(@"-> IM does not want to handle event"); +#endif [self deliverJavaMouseEvent: event]; } } @@ -302,16 +303,25 @@ AWT_ASSERT_APPKIT_THREAD; */ -(void) deliverJavaMouseEvent: (NSEvent *) event { - - NSEventType type = [event type]; - + BOOL isEnabled = YES; + NSWindow* window = [self window]; + if ([window isKindOfClass: [AWTWindow_Panel class]] || [window isKindOfClass: [AWTWindow_Normal class]]) { + isEnabled = [(AWTWindow*)[window delegate] isEnabled]; + } + + if (!isEnabled) { + return; + } + + NSEventType type = [event type]; + // check synthesized mouse entered/exited events if ((type == NSMouseEntered && mouseIsOver) || (type == NSMouseExited && !mouseIsOver)) { return; }else if ((type == NSMouseEntered && !mouseIsOver) || (type == NSMouseExited && mouseIsOver)) { mouseIsOver = !mouseIsOver; } - + [AWTToolkit eventCountPlusPlus]; JNIEnv *env = [ThreadUtilities getJNIEnv]; @@ -385,6 +395,14 @@ AWT_ASSERT_APPKIT_THREAD; } -(void) deliverJavaKeyEventHelper: (NSEvent *) event { + static NSEvent* sLastKeyEvent = nil; + if (event == sLastKeyEvent) { + // The event is repeatedly delivered by keyDown: after performKeyEquivalent: + return; + } + [sLastKeyEvent release]; + sLastKeyEvent = [event retain]; + [AWTToolkit eventCountPlusPlus]; JNIEnv *env = [ThreadUtilities getJNIEnv]; diff --git a/jdk/src/macosx/native/sun/awt/AWTWindow.h b/jdk/src/macosx/native/sun/awt/AWTWindow.h index 58280927fbf..991953f0f8f 100644 --- a/jdk/src/macosx/native/sun/awt/AWTWindow.h +++ b/jdk/src/macosx/native/sun/awt/AWTWindow.h @@ -35,28 +35,54 @@ @class AWTView; -@interface AWTWindow : NSPanel { +@interface AWTWindow : NSObject { @private JNFWeakJObjectWrapper *javaPlatformWindow; CMenuBar *javaMenuBar; NSSize javaMinSize; NSSize javaMaxSize; jint styleBits; + BOOL isEnabled; + NSWindow *nsWindow; } +// An instance of either AWTWindow_Normal or AWTWindow_Panel +@property (nonatomic, retain) NSWindow *nsWindow; + @property (nonatomic, retain) JNFWeakJObjectWrapper *javaPlatformWindow; @property (nonatomic, retain) CMenuBar *javaMenuBar; @property (nonatomic) NSSize javaMinSize; @property (nonatomic) NSSize javaMaxSize; @property (nonatomic) jint styleBits; +@property (nonatomic) BOOL isEnabled; - (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)javaPlatformWindow styleBits:(jint)styleBits frameRect:(NSRect)frameRect contentView:(NSView *)contentView; -- (void) adjustGrowBoxWindow; - (BOOL) isTopmostWindowUnderMouse; + +// NSWindow overrides delegate methods +- (BOOL) canBecomeKeyWindow; +- (BOOL) canBecomeMainWindow; +- (BOOL) worksWhenModal; +- (void)sendEvent:(NSEvent *)event; + +@end + +@interface AWTWindow_Normal : NSWindow +- (id) initWithDelegate:(AWTWindow *)delegate + frameRect:(NSRect)rect + styleMask:(NSUInteger)styleMask + contentView:(NSView *)view; +@end + +@interface AWTWindow_Panel : NSPanel +- (id) initWithDelegate:(AWTWindow *)delegate + frameRect:(NSRect)rect + styleMask:(NSUInteger)styleMask + contentView:(NSView *)view; @end #endif _AWTWINDOW_H diff --git a/jdk/src/macosx/native/sun/awt/AWTWindow.m b/jdk/src/macosx/native/sun/awt/AWTWindow.m index 7add839f8e6..48ab428521c 100644 --- a/jdk/src/macosx/native/sun/awt/AWTWindow.m +++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m @@ -51,22 +51,76 @@ static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow"); +// -------------------------------------------------------------- +// NSWindow/NSPanel descendants implementation +#define AWT_NS_WINDOW_IMPLEMENTATION \ +- (id) initWithDelegate:(AWTWindow *)delegate \ + frameRect:(NSRect)contectRect \ + styleMask:(NSUInteger)styleMask \ + contentView:(NSView *)view \ +{ \ + self = [super initWithContentRect:contectRect \ + styleMask:styleMask \ + backing:NSBackingStoreBuffered \ + defer:NO]; \ + \ + if (self == nil) return nil; \ + \ + [self setDelegate:delegate]; \ + [self setContentView:view]; \ + [self setInitialFirstResponder:view]; \ + [self setReleasedWhenClosed:NO]; \ + [self setPreservesContentDuringLiveResize:YES]; \ + \ + return self; \ +} \ + \ +/* NSWindow overrides */ \ +- (BOOL) canBecomeKeyWindow { \ + return [(AWTWindow*)[self delegate] canBecomeKeyWindow]; \ +} \ + \ +- (BOOL) canBecomeMainWindow { \ + return [(AWTWindow*)[self delegate] canBecomeMainWindow]; \ +} \ + \ +- (BOOL) worksWhenModal { \ + return [(AWTWindow*)[self delegate] worksWhenModal]; \ +} \ + \ +- (void)sendEvent:(NSEvent *)event { \ + [(AWTWindow*)[self delegate] sendEvent:event]; \ + [super sendEvent:event]; \ +} + +@implementation AWTWindow_Normal +AWT_NS_WINDOW_IMPLEMENTATION +@end +@implementation AWTWindow_Panel +AWT_NS_WINDOW_IMPLEMENTATION +@end +// END of NSWindow/NSPanel descendants implementation +// -------------------------------------------------------------- + + @implementation AWTWindow +@synthesize nsWindow; @synthesize javaPlatformWindow; @synthesize javaMenuBar; @synthesize javaMinSize; @synthesize javaMaxSize; @synthesize styleBits; +@synthesize isEnabled; - (void) updateMinMaxSize:(BOOL)resizable { if (resizable) { - [self setMinSize:self.javaMinSize]; - [self setMaxSize:self.javaMaxSize]; + [self.nsWindow setMinSize:self.javaMinSize]; + [self.nsWindow setMaxSize:self.javaMaxSize]; } else { - NSRect currentFrame = [self frame]; - [self setMinSize:currentFrame.size]; - [self setMaxSize:currentFrame.size]; + NSRect currentFrame = [self.nsWindow frame]; + [self.nsWindow setMinSize:currentFrame.size]; + [self.nsWindow setMaxSize:currentFrame.size]; } } @@ -97,38 +151,38 @@ static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow"); if (IS(mask, RESIZABLE)) { BOOL resizable = IS(bits, RESIZABLE); [self updateMinMaxSize:resizable]; - [self setShowsResizeIndicator:resizable]; + [self.nsWindow setShowsResizeIndicator:resizable]; } if (IS(mask, HAS_SHADOW)) { - [self setHasShadow:IS(bits, HAS_SHADOW)]; + [self.nsWindow setHasShadow:IS(bits, HAS_SHADOW)]; } if (IS(mask, ZOOMABLE)) { - [[self standardWindowButton:NSWindowZoomButton] setEnabled:IS(bits, ZOOMABLE)]; + [[self.nsWindow standardWindowButton:NSWindowZoomButton] setEnabled:IS(bits, ZOOMABLE)]; } if (IS(mask, ALWAYS_ON_TOP)) { - [self setLevel:IS(bits, ALWAYS_ON_TOP) ? NSFloatingWindowLevel : NSNormalWindowLevel]; + [self.nsWindow setLevel:IS(bits, ALWAYS_ON_TOP) ? NSFloatingWindowLevel : NSNormalWindowLevel]; } if (IS(mask, HIDES_ON_DEACTIVATE)) { - [self setHidesOnDeactivate:IS(bits, HIDES_ON_DEACTIVATE)]; + [self.nsWindow setHidesOnDeactivate:IS(bits, HIDES_ON_DEACTIVATE)]; } if (IS(mask, DRAGGABLE_BACKGROUND)) { - [self setMovableByWindowBackground:IS(bits, DRAGGABLE_BACKGROUND)]; + [self.nsWindow setMovableByWindowBackground:IS(bits, DRAGGABLE_BACKGROUND)]; } if (IS(mask, DOCUMENT_MODIFIED)) { - [self setDocumentEdited:IS(bits, DOCUMENT_MODIFIED)]; + [self.nsWindow setDocumentEdited:IS(bits, DOCUMENT_MODIFIED)]; } - if ([self respondsToSelector:@selector(toggleFullScreen:)]) { + if ([self.nsWindow respondsToSelector:@selector(toggleFullScreen:)]) { if (IS(mask, FULLSCREENABLE)) { - [self setCollectionBehavior:(1 << 7) /*NSWindowCollectionBehaviorFullScreenPrimary*/]; + [self.nsWindow setCollectionBehavior:(1 << 7) /*NSWindowCollectionBehaviorFullScreenPrimary*/]; } else { - [self setCollectionBehavior:NSWindowCollectionBehaviorDefault]; + [self.nsWindow setCollectionBehavior:NSWindowCollectionBehaviorDefault]; } } @@ -150,42 +204,56 @@ AWT_ASSERT_APPKIT_THREAD; contentRect.size.height = 1.0; } - self = [super initWithContentRect:contentRect - styleMask:styleMask - backing:NSBackingStoreBuffered - defer:NO]; + self = [super init]; if (self == nil) return nil; // no hope + if (IS(bits, UTILITY) || + IS(bits, NONACTIVATING) || + IS(bits, HUD) || + IS(bits, HIDES_ON_DEACTIVATE)) + { + self.nsWindow = [[AWTWindow_Panel alloc] initWithDelegate:self + frameRect:contentRect + styleMask:styleMask + contentView:view]; + } + else + { + // These windows will appear in the window list in the dock icon menu + self.nsWindow = [[AWTWindow_Normal alloc] initWithDelegate:self + frameRect:contentRect + styleMask:styleMask + contentView:view]; + } + + if (self.nsWindow == nil) return nil; // no hope either + [self.nsWindow release]; // the property retains the object already + + self.isEnabled = YES; self.javaPlatformWindow = platformWindow; self.styleBits = bits; [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)]; - [self setDelegate:self]; - [self setContentView:view]; - [self setInitialFirstResponder:view]; - [self setReleasedWhenClosed:NO]; - [self setPreservesContentDuringLiveResize:YES]; - return self; } -// checks that this window is under the mouse cursor and this point is not overlapped by others windows +// checks that this window is under the mouse cursor and this point is not overlapped by others windows - (BOOL) isTopmostWindowUnderMouse { - - int currentWinID = [self windowNumber]; - - NSRect screenRect = [[NSScreen mainScreen] frame]; + + int currentWinID = [self.nsWindow windowNumber]; + + NSRect screenRect = [[NSScreen mainScreen] frame]; NSPoint nsMouseLocation = [NSEvent mouseLocation]; - CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y); - + CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y); + NSMutableArray *windows = (NSMutableArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); - - + + for (NSDictionary *window in windows) { int layer = [[window objectForKey:(id)kCGWindowLayer] intValue]; if (layer == 0) { - int winID = [[window objectForKey:(id)kCGWindowNumber] intValue]; + int winID = [[window objectForKey:(id)kCGWindowNumber] intValue]; CGRect rect; CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:(id)kCGWindowBounds], &rect); if (CGRectContainsPoint(rect, cgMouseLocation)) { @@ -199,35 +267,35 @@ AWT_ASSERT_APPKIT_THREAD; } - (void) synthesizeMouseEnteredExitedEvents { - + int eventType = 0; BOOL isUnderMouse = [self isTopmostWindowUnderMouse]; - BOOL mouseIsOver = [[self contentView] mouseIsOver]; - + BOOL mouseIsOver = [[self.nsWindow contentView] mouseIsOver]; + if (isUnderMouse && !mouseIsOver) { eventType = NSMouseEntered; } else if (!isUnderMouse && mouseIsOver) { - eventType = NSMouseExited; + eventType = NSMouseExited; } else { return; } - - NSPoint screenLocation = [NSEvent mouseLocation]; - NSPoint windowLocation = [self convertScreenToBase: screenLocation]; + + NSPoint screenLocation = [NSEvent mouseLocation]; + NSPoint windowLocation = [self.nsWindow convertScreenToBase: screenLocation]; int modifierFlags = (eventType == NSMouseEntered) ? NSMouseEnteredMask : NSMouseExitedMask; - + NSEvent *mouseEvent = [NSEvent enterExitEventWithType: eventType location: windowLocation modifierFlags: modifierFlags timestamp: 0 - windowNumber: [self windowNumber] + windowNumber: [self.nsWindow windowNumber] context: nil eventNumber: 0 trackingNumber: 0 userData: nil ]; - - [[self contentView] deliverJavaMouseEvent: mouseEvent]; + + [[self.nsWindow contentView] deliverJavaMouseEvent: mouseEvent]; } - (void) dealloc { @@ -236,19 +304,20 @@ AWT_ASSERT_APPKIT_THREAD; JNIEnv *env = [ThreadUtilities getJNIEnv]; [self.javaPlatformWindow setJObject:nil withEnv:env]; + self.nsWindow = nil; + [super dealloc]; } - // NSWindow overrides - (BOOL) canBecomeKeyWindow { AWT_ASSERT_APPKIT_THREAD; - return IS(self.styleBits, SHOULD_BECOME_KEY); + return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_KEY); } - (BOOL) canBecomeMainWindow { AWT_ASSERT_APPKIT_THREAD; - return IS(self.styleBits, SHOULD_BECOME_MAIN); + return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_MAIN); } - (BOOL) worksWhenModal { @@ -270,7 +339,7 @@ AWT_ASSERT_APPKIT_THREAD; if (awtWindow != NULL) { // translate the point into Java coordinates NSPoint loc = [event locationInWindow]; - loc.y = [self frame].size.height - loc.y; + loc.y = [self.nsWindow frame].size.height - loc.y; // send up to the GestureHandler to recursively dispatch on the AWT event thread static JNF_CLASS_CACHE(jc_GestureHandler, "com/apple/eawt/event/GestureHandler"); @@ -333,7 +402,7 @@ AWT_ASSERT_APPKIT_THREAD; // TODO: create generic AWT assert } - NSRect frame = ConvertNSScreenRect(env, [self frame]); + NSRect frame = ConvertNSScreenRect(env, [self.nsWindow frame]); static JNF_MEMBER_CACHE(jm_deliverMoveResizeEvent, jc_CPlatformWindow, "deliverMoveResizeEvent", "(IIII)V"); JNFCallVoidMethod(env, platformWindow, jm_deliverMoveResizeEvent, @@ -523,8 +592,8 @@ AWT_ASSERT_APPKIT_THREAD; if ([event type] == NSLeftMouseDown || [event type] == NSRightMouseDown || [event type] == NSOtherMouseDown) { NSPoint p = [NSEvent mouseLocation]; - NSRect frame = [self frame]; - NSRect contentRect = [self contentRectForFrameRect:frame]; + NSRect frame = [self.nsWindow frame]; + NSRect contentRect = [self.nsWindow contentRectForFrameRect:frame]; // Check if the click happened in the non-client area (title bar) if (p.y >= (frame.origin.y + contentRect.size.height)) { @@ -535,15 +604,14 @@ AWT_ASSERT_APPKIT_THREAD; JNFCallVoidMethod(env, platformWindow, jm_deliverNCMouseDown); } } - [super sendEvent:event]; } - (void)constrainSize:(NSSize*)size { float minWidth = 0.f, minHeight = 0.f; if (IS(self.styleBits, DECORATED)) { - NSRect frame = [self frame]; - NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self styleMask]]; + NSRect frame = [self.nsWindow frame]; + NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self.nsWindow styleMask]]; float top = frame.size.height - contentRect.size.height; float left = contentRect.origin.x - frame.origin.x; @@ -562,6 +630,27 @@ AWT_ASSERT_APPKIT_THREAD; size->height = MAX(size->height, minHeight); } +- (void) setEnabled: (BOOL)flag { + self.isEnabled = flag; + + if (IS(self.styleBits, CLOSEABLE)) { + [[self.nsWindow standardWindowButton:NSWindowCloseButton] setEnabled: flag]; + } + + if (IS(self.styleBits, MINIMIZABLE)) { + [[self.nsWindow standardWindowButton:NSWindowMiniaturizeButton] setEnabled: flag]; + } + + if (IS(self.styleBits, ZOOMABLE)) { + [[self.nsWindow standardWindowButton:NSWindowZoomButton] setEnabled: flag]; + } + + if (IS(self.styleBits, RESIZABLE)) { + [self updateMinMaxSize:flag]; + [self.nsWindow setShowsResizeIndicator:flag]; + } +} + @end // AWTWindow @@ -589,14 +678,14 @@ AWT_ASSERT_NOT_APPKIT_THREAD; styleBits:styleBits frameRect:frameRect contentView:contentView]; + // the window is released is CPlatformWindow.nativeDispose() - if (window) CFRetain(window); - [window release]; // GC + if (window) CFRetain(window.nsWindow); }]; JNF_COCOA_EXIT(env); - return ptr_to_jlong(window); + return ptr_to_jlong(window ? window.nsWindow : nil); } /* @@ -610,17 +699,19 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowSt JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + // scans the bit field, and only updates the values requested by the mask // (this implicity handles the _CALLBACK_PROP_BITMASK case, since those are passive reads) jint newBits = window.styleBits & ~mask | bits & mask; // resets the NSWindow's style mask if the mask intersects any of those bits if (mask & MASK(_STYLE_PROP_BITMASK)) { - [window setStyleMask:[AWTWindow styleMaskForStyleBits:newBits]]; + [nsWindow setStyleMask:[AWTWindow styleMaskForStyleBits:newBits]]; } // calls methods on NSWindow to change other properties, based on the mask @@ -645,12 +736,14 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMe JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); CMenuBar *menuBar = OBJC(menuBarPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; - if ([window isKeyWindow]) [window.javaMenuBar deactivate]; + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + + if ([nsWindow isKeyWindow]) [window.javaMenuBar deactivate]; window.javaMenuBar = menuBar; // if ([self isKeyWindow]) { @@ -674,15 +767,15 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindo JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); __block NSRect contentRect = NSZeroRect; __block NSRect frame = NSZeroRect; [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; - frame = [window frame]; - contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[window styleMask]]; + frame = [nsWindow frame]; + contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[nsWindow styleMask]]; }]; jint top = (jint)(frame.size.height - contentRect.size.height); @@ -712,24 +805,26 @@ AWT_ASSERT_NOT_APPKIT_THREAD; NSRect jrect = NSMakeRect(originX, originY, width, height); // TODO: not sure we need displayIfNeeded message in our view - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + NSRect rect = ConvertNSScreenRect(NULL, jrect); [window constrainSize:&rect.size]; - [window setFrame:rect display:YES]; + [nsWindow setFrame:rect display:YES]; // only start tracking events if pointer is above the toplevel // TODO: should post an Entered event if YES. NSPoint mLocation = [NSEvent mouseLocation]; - [window setAcceptsMouseMovedEvents:NSPointInRect(mLocation, rect)]; + [nsWindow setAcceptsMouseMovedEvents:NSPointInRect(mLocation, rect)]; // ensure we repaint the whole window after the resize operation // (this will also re-enable screen updates, which were disabled above) // TODO: send PaintEvent - + [window synthesizeMouseEnteredExitedEvents]; }]; @@ -752,10 +847,12 @@ AWT_ASSERT_NOT_APPKIT_THREAD; if (maxW < 1) maxW = 1; if (maxH < 1) maxH = 1; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + NSSize min = { minW, minH }; NSSize max = { maxW, maxH }; @@ -781,11 +878,11 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativePushNSWindowT JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; - [window orderBack:nil]; + [nsWindow orderBack:nil]; }]; JNF_COCOA_EXIT(env); @@ -802,14 +899,14 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativePushNSWindowT JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; - if (![window isKeyWindow]) { - [window makeKeyAndOrderFront:window]; + if (![nsWindow isKeyWindow]) { + [nsWindow makeKeyAndOrderFront:nsWindow]; } else { - [window orderFront:window]; + [nsWindow orderFront:nsWindow]; } }]; @@ -827,35 +924,14 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowTi JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); - [window performSelectorOnMainThread:@selector(setTitle:) + NSWindow *nsWindow = OBJC(windowPtr); + [nsWindow performSelectorOnMainThread:@selector(setTitle:) withObject:JNFJavaToNSString(env, jtitle) waitUntilDone:NO]; JNF_COCOA_EXIT(env); } -/* - * Class: sun_lwawt_macosx_CPlatformWindow - * Method: nativeSetNSWindowAlpha - * Signature: (JF)V - */ -JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowAlpha -(JNIEnv *env, jclass clazz, jlong windowPtr, jfloat alpha) -{ -JNF_COCOA_ENTER(env); -AWT_ASSERT_NOT_APPKIT_THREAD; - - AWTWindow *window = OBJC(windowPtr); - [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ - AWT_ASSERT_APPKIT_THREAD; - - [window setAlphaValue:alpha]; - }]; - -JNF_COCOA_EXIT(env); -} - /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativeRevalidateNSWindowShadow @@ -865,14 +941,17 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeRevalidateNSW (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); -AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); - [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ - AWT_ASSERT_APPKIT_THREAD; + NSWindow *nsWindow = OBJC(windowPtr); + if ([NSThread isMainThread]) { + [nsWindow invalidateShadow]; + } else { + [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ + AWT_ASSERT_APPKIT_THREAD; - [window invalidateShadow]; - }]; + [nsWindow invalidateShadow]; + }]; + } JNF_COCOA_EXIT(env); } @@ -890,8 +969,8 @@ JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeScreenOn_1App JNF_COCOA_ENTER(env); AWT_ASSERT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); - NSDictionary *props = [[window screen] deviceDescription]; + NSWindow *nsWindow = OBJC(windowPtr); + NSDictionary *props = [[nsWindow screen] deviceDescription]; ret = [[props objectForKey:@"NSScreenNumber"] intValue]; JNF_COCOA_EXIT(env); @@ -910,12 +989,12 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMi JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); NSImage *image = OBJC(nsImagePtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; - [window setMiniwindowImage:image]; + [nsWindow setMiniwindowImage:image]; }]; JNF_COCOA_EXIT(env); @@ -932,12 +1011,12 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowRe JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:JNFNormalizedNSStringForPath(env, filename)]; [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; - [window setRepresentedURL:url]; + [nsWindow setRepresentedURL:url]; }]; JNF_COCOA_EXIT(env); @@ -969,51 +1048,43 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSynthesizeMou { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - - AWTWindow *window = OBJC(windowPtr); + + NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; - + + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + [window synthesizeMouseEnteredExitedEvents]; }]; - + JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_CPlatformWindow - * Method: nativeGetScreenNSWindowIsOn_AppKitThread + * Method: nativeGetDisplayID_AppKitThread * Signature: (J)I */ -JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeGetScreenNSWindowIsOn_1AppKitThread +JNIEXPORT jint JNICALL +Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindowDisplayID_1AppKitThread (JNIEnv *env, jclass clazz, jlong windowPtr) { - jint index = -1; + jint ret; // CGDirectDisplayID JNF_COCOA_ENTER(env); AWT_ASSERT_APPKIT_THREAD; - AWTWindow *window = OBJC(windowPtr); - NSScreen* screen = [window screen]; - - //+++gdb NOTE: This is using a linear search of the screens. If it should - // prove to be a bottleneck, this can definitely be improved. However, - // many screens should prove to be the exception, rather than the rule. - NSArray* screens = [NSScreen screens]; - NSUInteger i; - for (i = 0; i < [screens count]; i++) - { - if ([[screens objectAtIndex:i] isEqualTo:screen]) - { - index = i; - break; - } - } + NSWindow *window = OBJC(windowPtr); + NSScreen *screen = [window screen]; + NSDictionary *deviceDescription = [screen deviceDescription]; + NSNumber *displayID = [deviceDescription objectForKey:@"NSScreenNumber"]; + ret = (jint)[displayID intValue]; JNF_COCOA_EXIT(env); - return 1; -} + return ret; +} /* * Class: sun_lwawt_macosx_CPlatformWindow @@ -1025,12 +1096,12 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow__1toggleFullScreenM { JNF_COCOA_ENTER(env); - AWTWindow *window = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); SEL toggleFullScreenSelector = @selector(toggleFullScreen:); - if (![window respondsToSelector:toggleFullScreenSelector]) return; + if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return; [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ - [window performSelector:toggleFullScreenSelector withObject:nil]; + [nsWindow performSelector:toggleFullScreenSelector withObject:nil]; }]; JNF_COCOA_EXIT(env); @@ -1044,15 +1115,52 @@ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CMouseInfoPeer_nativeIsWindowUn JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; - AWTWindow *aWindow = OBJC(windowPtr); + NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^() { AWT_ASSERT_APPKIT_THREAD; - NSPoint pt = [aWindow mouseLocationOutsideOfEventStream]; - underMouse = [[aWindow contentView] hitTest:pt] != nil; + NSPoint pt = [nsWindow mouseLocationOutsideOfEventStream]; + underMouse = [[nsWindow contentView] hitTest:pt] != nil; }]; JNF_COCOA_EXIT(env); return underMouse; } + +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetEnabled +(JNIEnv *env, jclass clazz, jlong windowPtr, jboolean isEnabled) +{ +JNF_COCOA_ENTER(env); + + NSWindow *nsWindow = OBJC(windowPtr); + [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + + [window setEnabled: isEnabled]; + }]; + +JNF_COCOA_EXIT(env); +} + +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeDispose +(JNIEnv *env, jclass clazz, jlong windowPtr) +{ +JNF_COCOA_ENTER(env); + + NSWindow *nsWindow = OBJC(windowPtr); + [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ + AWTWindow *window = (AWTWindow*)[nsWindow delegate]; + + // AWTWindow holds a reference to the NSWindow in its nsWindow + // property. Unsetting the delegate allows it to be deallocated + // which releases the reference. This, in turn, allows the window + // itself be deallocated. + [nsWindow setDelegate: nil]; + + [window release]; + }]; + +JNF_COCOA_EXIT(env); +} + diff --git a/jdk/src/macosx/native/sun/awt/CDragSource.h b/jdk/src/macosx/native/sun/awt/CDragSource.h index 224bba17a6b..7e880cb529e 100644 --- a/jdk/src/macosx/native/sun/awt/CDragSource.h +++ b/jdk/src/macosx/native/sun/awt/CDragSource.h @@ -63,7 +63,7 @@ transferable:(jobject)jtransferable triggerEvent:(jobject)jtrigger dragPosX:(jint)dragPosX dragPosY:(jint)dragPosY modifiers:(jint)extModifiers clickCount:(jint)clickCount timeStamp:(jlong)timeStamp cursor:(jobject)jcursor - dragImage:(jlong)jnsdragimage dragImageOffsetX:(jint)jdragimageoffsetx dragImageOffsetY:(jint)jdragimageoffsety + dragImage:(jobject)jnsdragimage dragImageOffsetX:(jint)jdragimageoffsetx dragImageOffsetY:(jint)jdragimageoffsety sourceActions:(jint)jsourceactions formats:(jlongArray)jformats formatMap:(jobject)jformatmap; - (void)removeFromView:(JNIEnv *)env; diff --git a/jdk/src/macosx/native/sun/awt/CDragSource.m b/jdk/src/macosx/native/sun/awt/CDragSource.m index 27f505eda91..cbfe6270ceb 100644 --- a/jdk/src/macosx/native/sun/awt/CDragSource.m +++ b/jdk/src/macosx/native/sun/awt/CDragSource.m @@ -70,6 +70,7 @@ static BOOL sIsJavaDragging; JNF_CLASS_CACHE(DataTransfererClass, "sun/awt/datatransfer/DataTransferer"); JNF_CLASS_CACHE(CDragSourceContextPeerClass, "sun/lwawt/macosx/CDragSourceContextPeer"); +JNF_CLASS_CACHE(CImageClass, "sun/lwawt/macosx/CImage"); static NSDragOperation sDragOperation; static NSPoint sDraggingLocation; @@ -87,7 +88,7 @@ static BOOL sNeedsEnter; transferable:(jobject)jtransferable triggerEvent:(jobject)jtrigger dragPosX:(jint)dragPosX dragPosY:(jint)dragPosY modifiers:(jint)extModifiers clickCount:(jint)clickCount timeStamp:(jlong)timeStamp cursor:(jobject)jcursor - dragImage:(jlong)jnsdragimage dragImageOffsetX:(jint)jdragimageoffsetx dragImageOffsetY:(jint)jdragimageoffsety + dragImage:(jobject)jnsdragimage dragImageOffsetX:(jint)jdragimageoffsetx dragImageOffsetY:(jint)jdragimageoffsety sourceActions:(jint)jsourceactions formats:(jlongArray)jformats formatMap:(jobject)jformatmap { self = [super init]; @@ -107,8 +108,14 @@ static BOOL sNeedsEnter; fTriggerEvent = JNFNewGlobalRef(env, jtrigger); fCursor = JNFNewGlobalRef(env, jcursor); - fDragImage = (NSImage*) jlong_to_ptr(jnsdragimage); // Double-casting prevents compiler 'different size' warning. - [fDragImage retain]; + if (jnsdragimage) { + JNF_MEMBER_CACHE(nsImagePtr, CImageClass, "ptr", "J"); + jlong imgPtr = JNFGetLongField(env, jnsdragimage, nsImagePtr); + fDragImage = (NSImage*) jlong_to_ptr(imgPtr); // Double-casting prevents compiler 'd$|// + + [fDragImage retain]; + } + fDragImageOffset = NSMakePoint(jdragimageoffsetx, jdragimageoffsety); fSourceActions = jsourceactions; diff --git a/jdk/src/macosx/native/sun/awt/CDragSourceContextPeer.m b/jdk/src/macosx/native/sun/awt/CDragSourceContextPeer.m index 80d296d2364..e2fedfe35df 100644 --- a/jdk/src/macosx/native/sun/awt/CDragSourceContextPeer.m +++ b/jdk/src/macosx/native/sun/awt/CDragSourceContextPeer.m @@ -39,7 +39,7 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativeDragSource (JNIEnv *env, jobject jthis, jobject jcomponent, jobject jpeer, jlong jnativepeer, jobject jtransferable, jobject jtrigger, jint jdragposx, jint jdragposy, jint jextmodifiers, jint jclickcount, jlong jtimestamp, - jobject jcursor, jlong jnsdragimage, jint jdragimageoffsetx, jint jdragimageoffsety, + jobject jcursor, jobject jnsdragimage, jint jdragimageoffsetx, jint jdragimageoffsety, jint jsourceactions, jlongArray jformats, jobject jformatmap) { id controlObj = (id) jlong_to_ptr(jnativepeer); diff --git a/jdk/src/macosx/native/sun/awt/CFileDialog.h b/jdk/src/macosx/native/sun/awt/CFileDialog.h index c9015899217..14ed63d24bf 100644 --- a/jdk/src/macosx/native/sun/awt/CFileDialog.h +++ b/jdk/src/macosx/native/sun/awt/CFileDialog.h @@ -46,11 +46,14 @@ // File dialog's mode jint fMode; + // Indicates whether the user can select multiple files + BOOL fMultipleMode; + // Should we navigate into apps? BOOL fNavigateApps; - // panel's filename - NSString *fReturnedFilename; + // Contains the absolute paths of the selected files as URLs + NSArray *fURLs; } // Allocator @@ -60,6 +63,7 @@ directory:(NSString *)inPath file:(NSString *)inFile mode:(jint)inMode + multipleMode:(BOOL)inMultipleMode shouldNavigate:(BOOL)inNavigateApps withEnv:(JNIEnv*)env; @@ -69,7 +73,7 @@ // Get dialog return value - (BOOL) userClickedOK; -// Filename user chose -- (NSString *) filename; +// Returns the absolute paths of the selected files as URLs +- (NSArray *) URLs; @end diff --git a/jdk/src/macosx/native/sun/awt/CFileDialog.m b/jdk/src/macosx/native/sun/awt/CFileDialog.m index 129ffd940b5..283cc8cb781 100644 --- a/jdk/src/macosx/native/sun/awt/CFileDialog.m +++ b/jdk/src/macosx/native/sun/awt/CFileDialog.m @@ -41,6 +41,7 @@ directory:(NSString *)inPath file:(NSString *)inFile mode:(jint)inMode + multipleMode:(BOOL)inMultipleMode shouldNavigate:(BOOL)inNavigateApps withEnv:(JNIEnv*)env; { @@ -54,6 +55,7 @@ fTitle = inTitle; [fTitle retain]; fMode = inMode; + fMultipleMode = inMultipleMode; fNavigateApps = inNavigateApps; fPanelResult = NSCancelButton; } @@ -79,8 +81,8 @@ [fTitle release]; fTitle = nil; - [fReturnedFilename release]; - fReturnedFilename = nil; + [fURLs release]; + fURLs = nil; [super dealloc]; } @@ -105,7 +107,7 @@ if (fMode == java_awt_FileDialog_LOAD) { NSOpenPanel *openPanel = (NSOpenPanel *)thePanel; - [openPanel setAllowsMultipleSelection:NO]; + [openPanel setAllowsMultipleSelection:fMultipleMode]; [openPanel setCanChooseFiles:YES]; [openPanel setCanChooseDirectories:NO]; [openPanel setCanCreateDirectories:YES]; @@ -114,8 +116,16 @@ [thePanel setDelegate:self]; fPanelResult = [thePanel runModalForDirectory:fDirectory file:fFile]; [thePanel setDelegate:nil]; - fReturnedFilename = [thePanel filename]; - [fReturnedFilename retain]; + + if ([self userClickedOK]) { + if (fMode == java_awt_FileDialog_LOAD) { + NSOpenPanel *openPanel = (NSOpenPanel *)thePanel; + fURLs = [openPanel URLs]; + } else { + fURLs = [NSArray arrayWithObject:[thePanel URL]]; + } + [fURLs retain]; + } } [self disposer]; @@ -158,8 +168,8 @@ return fPanelResult == NSOKButton; } -- (NSString *)filename { - return [[fReturnedFilename retain] autorelease]; +- (NSArray *)URLs { + return [[fURLs retain] autorelease]; } @end @@ -167,13 +177,14 @@ * Class: sun_lwawt_macosx_CFileDialog * Method: nativeRunFileDialog * Signature: (Ljava/lang/String;ILjava/io/FilenameFilter; - * Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + * Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String; */ -JNIEXPORT jstring JNICALL +JNIEXPORT jobjectArray JNICALL Java_sun_lwawt_macosx_CFileDialog_nativeRunFileDialog -(JNIEnv *env, jobject peer, jstring title, jint mode, jboolean navigateApps, jboolean hasFilter, jstring directory, jstring file) +(JNIEnv *env, jobject peer, jstring title, jint mode, jboolean multipleMode, + jboolean navigateApps, jboolean hasFilter, jstring directory, jstring file) { - jstring returnValue = NULL; + jobjectArray returnValue = NULL; JNF_COCOA_ENTER(env); NSString *dialogTitle = JNFJavaToNSString(env, title); @@ -187,6 +198,7 @@ JNF_COCOA_ENTER(env); directory:JNFJavaToNSString(env, directory) file:JNFJavaToNSString(env, file) mode:mode + multipleMode:multipleMode shouldNavigate:navigateApps withEnv:env]; @@ -196,8 +208,18 @@ JNF_COCOA_ENTER(env); waitUntilDone:YES]; if ([dialogDelegate userClickedOK]) { - NSString *filename = [dialogDelegate filename]; - returnValue = JNFNSToJavaString(env, filename); + NSArray *urls = [dialogDelegate URLs]; + jsize count = [urls count]; + + jclass stringClass = (*env)->FindClass(env, "java/lang/String"); + returnValue = (*env)->NewObjectArray(env, count, stringClass, NULL); + (*env)->DeleteLocalRef(env, stringClass); + + [urls enumerateObjectsUsingBlock:^(id url, NSUInteger index, BOOL *stop) { + jstring filename = JNFNormalizedJavaStringForPath(env, [url path]); + (*env)->SetObjectArrayElement(env, returnValue, index, filename); + (*env)->DeleteLocalRef(env, filename); + }]; } [dialogDelegate release]; diff --git a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m index 0d7846988fc..9bc5393d765 100644 --- a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m +++ b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,89 @@ #include "LWCToolkit.h" +/* + * Convert the mode string to the more convinient bits per pixel value + */ +static int getBPPFromModeString(CFStringRef mode) +{ + if ((CFStringCompare(mode, CFSTR(kIO30BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)) { + // This is a strange mode, where we using 10 bits per RGB component and pack it into 32 bits + // Java is not ready to work with this mode but we have to specify it as supported + return 30; + } + else if (CFStringCompare(mode, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) { + return 32; + } + else if (CFStringCompare(mode, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) { + return 16; + } + else if (CFStringCompare(mode, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) { + return 8; + } + + return 0; +} + +/* + * Find the best possible match in the list of display modes that we can switch to based on + * the provided parameters. + */ +static CGDisplayModeRef getBestModeForParameters(CFArrayRef allModes, int w, int h, int bpp, int refrate) { + CGDisplayModeRef bestGuess = NULL; + CFIndex numModes = CFArrayGetCount(allModes), n; + int thisBpp = 0; + for(n = 0; n < numModes; n++ ) { + CGDisplayModeRef cRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(allModes, n); + if(cRef == NULL) { + continue; + } + CFStringRef modeString = CGDisplayModeCopyPixelEncoding(cRef); + thisBpp = getBPPFromModeString(modeString); + CFRelease(modeString); + if (thisBpp != bpp || (int)CGDisplayModeGetHeight(cRef) != h || (int)CGDisplayModeGetWidth(cRef) != w) { + // One of the key parameters does not match + continue; + } + + if (refrate == 0) { // REFRESH_RATE_UNKNOWN + return cRef; + } + + // Refresh rate might be 0 in display mode and we ask for specific display rate + // but if we do not find exact match then 0 refresh rate might be just Ok + if (CGDisplayModeGetRefreshRate(cRef) == refrate) { + // Exact match + return cRef; + } + if (CGDisplayModeGetRefreshRate(cRef) == 0) { + // Not exactly what was asked for, but may fit our needs if we don't find an exact match + bestGuess = cRef; + } + } + return bestGuess; +} + +/* + * Create a new java.awt.DisplayMode instance based on provided CGDisplayModeRef + */ +static jobject createJavaDisplayMode(CGDisplayModeRef mode, JNIEnv *env, jint displayID) { + jobject ret = NULL; + jint h, w, bpp, refrate; + JNF_COCOA_ENTER(env); + CFStringRef currentBPP = CGDisplayModeCopyPixelEncoding(mode); + bpp = getBPPFromModeString(currentBPP); + refrate = CGDisplayModeGetRefreshRate(mode); + h = CGDisplayModeGetHeight(mode); + w = CGDisplayModeGetWidth(mode); + CFRelease(currentBPP); + static JNF_CLASS_CACHE(jc_DisplayMode, "java/awt/DisplayMode"); + static JNF_CTOR_CACHE(jc_DisplayMode_ctor, jc_DisplayMode, "(IIII)V"); + ret = JNFNewObject(env, jc_DisplayMode_ctor, w, h, bpp, refrate); + JNF_COCOA_EXIT(env); + return ret; +} + + /* * Class: sun_awt_CGraphicsDevice * Method: nativeGetXResolution @@ -62,3 +145,92 @@ Java_sun_awt_CGraphicsDevice_nativeGetYResolution jfloat dpi = rect.size.height / inches; return dpi; } + +/* + * Class: sun_awt_CGraphicsDevice + * Method: nativeSetDisplayMode + * Signature: (IIIII)V + */ +JNIEXPORT void JNICALL +Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode +(JNIEnv *env, jclass class, jint displayID, jint w, jint h, jint bpp, jint refrate) +{ + JNF_COCOA_ENTER(env); + CFArrayRef allModes = CGDisplayCopyAllDisplayModes(displayID, NULL); + CGDisplayModeRef closestMatch = getBestModeForParameters(allModes, (int)w, (int)h, (int)bpp, (int)refrate); + if (closestMatch != NULL) { + [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ + CGDisplayConfigRef config; + CGError retCode = CGBeginDisplayConfiguration(&config); + if (retCode == kCGErrorSuccess) { + CGConfigureDisplayWithDisplayMode(config, displayID, closestMatch, NULL); + CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly); + if (config != NULL) { + CFRelease(config); + } + } + }]; + } else { + [JNFException raise:env as:kIllegalArgumentException reason:"Invalid display mode"]; + } + + CFRelease(allModes); + JNF_COCOA_EXIT(env); +} + +/* + * Class: sun_awt_CGraphicsDevice + * Method: nativeGetDisplayMode + * Signature: (I)Ljava/awt/DisplayMode + */ +JNIEXPORT jobject JNICALL +Java_sun_awt_CGraphicsDevice_nativeGetDisplayMode +(JNIEnv *env, jclass class, jint displayID) +{ + jobject ret = NULL; + CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(displayID); + ret = createJavaDisplayMode(currentMode, env, displayID); + CGDisplayModeRelease(currentMode); + return ret; +} + +/* + * Class: sun_awt_CGraphicsDevice + * Method: nativeGetDisplayMode + * Signature: (I)[Ljava/awt/DisplayModes + */ +JNIEXPORT jobjectArray JNICALL +Java_sun_awt_CGraphicsDevice_nativeGetDisplayModes +(JNIEnv *env, jclass class, jint displayID) +{ + jobjectArray jreturnArray = NULL; + JNF_COCOA_ENTER(env); + CFArrayRef allModes = CGDisplayCopyAllDisplayModes(displayID, NULL); + CFIndex numModes = CFArrayGetCount(allModes); + static JNF_CLASS_CACHE(jc_DisplayMode, "java/awt/DisplayMode"); + + jreturnArray = JNFNewObjectArray(env, &jc_DisplayMode, (jsize) numModes); + if (!jreturnArray) { + NSLog(@"CGraphicsDevice can't create java array of DisplayMode objects"); + return nil; + } + + CFIndex n; + for (n=0; n < numModes; n++) { + CGDisplayModeRef cRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(allModes, n); + if (cRef != NULL) { + jobject oneMode = createJavaDisplayMode(cRef, env, displayID); + (*env)->SetObjectArrayElement(env, jreturnArray, n, oneMode); + if ((*env)->ExceptionOccurred(env)) { + (*env)->ExceptionDescribe(env); + (*env)->ExceptionClear(env); + continue; + } + (*env)->DeleteLocalRef(env, oneMode); + } + } + CFRelease(allModes); + JNF_COCOA_EXIT(env); + + return jreturnArray; +} diff --git a/jdk/src/macosx/native/sun/awt/CImage.m b/jdk/src/macosx/native/sun/awt/CImage.m index 64a6f3c4ec1..330e9943f62 100644 --- a/jdk/src/macosx/native/sun/awt/CImage.m +++ b/jdk/src/macosx/native/sun/awt/CImage.m @@ -163,7 +163,6 @@ AWT_ASSERT_ANY_THREAD; if ([reps count]) { NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(0, 0)]; [nsImage addRepresentations: reps]; - [reps release]; if (nsImage != nil) { CFRetain(nsImage); // GC diff --git a/jdk/src/macosx/native/sun/awt/LWCToolkit.m b/jdk/src/macosx/native/sun/awt/LWCToolkit.m index 8a95cd38d3d..f9b17fca6b7 100644 --- a/jdk/src/macosx/native/sun/awt/LWCToolkit.m +++ b/jdk/src/macosx/native/sun/awt/LWCToolkit.m @@ -456,3 +456,21 @@ Java_sun_font_FontManager_populateFontFileNameMap { } + +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: executeNextAppKitEvent + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_executeNextAppKitEvent +(JNIEnv *env, jclass cls) +{ + // Simply get the next event in native loop and pass it to execution + // We'll be called repeatedly so there's no need to block here + NSRunLoop *theRL = [NSRunLoop currentRunLoop]; + NSApplication * app = [NSApplication sharedApplication]; + NSEvent * event = [app nextEventMatchingMask: 0xFFFFFFFF untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES]; + if (event != nil) { + [app sendEvent: event]; + } +} diff --git a/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m b/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m index ba1f2bc59a1..bbe42519694 100644 --- a/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m +++ b/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m @@ -63,12 +63,14 @@ OGLGC_DestroyOGLGraphicsConfig(jlong pConfigInfo) CGLCtxInfo *ctxinfo = (CGLCtxInfo *)oglc->ctxInfo; if (ctxinfo != NULL) { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; [NSOpenGLContext clearCurrentContext]; [ctxinfo->context clearDrawable]; [ctxinfo->context release]; if (ctxinfo->scratchSurface != 0) { [ctxinfo->scratchSurface release]; } + [pool drain]; free(ctxinfo); } } diff --git a/jdk/src/macosx/native/sun/java2d/opengl/CGLSurfaceData.m b/jdk/src/macosx/native/sun/java2d/opengl/CGLSurfaceData.m index 34ba33c496a..cc8de1aa8ec 100644 --- a/jdk/src/macosx/native/sun/java2d/opengl/CGLSurfaceData.m +++ b/jdk/src/macosx/native/sun/java2d/opengl/CGLSurfaceData.m @@ -204,7 +204,8 @@ JNF_COCOA_ENTER(env); if (!CGLSD_MakeCurrentToScratch(env, oglc)) { return NULL; } - } else if ([NSOpenGLContext currentContext] == nil) { + // make sure our context is current + } else if ([NSOpenGLContext currentContext] != ctxinfo->context) { [ctxinfo->context makeCurrentContext]; } diff --git a/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.h b/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.h index 60751839e08..9b1c75d8eb6 100644 --- a/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.h +++ b/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.h @@ -30,6 +30,8 @@ BOOL fHandlesDocumentTypes; BOOL fHandlesURLTypes; + id realDelegate; + NSMutableArray* queue; } @@ -40,5 +42,9 @@ - (void)processQueuedEventsWithTargetDelegate:(id )delegate; +@property(retain) id realDelegate; + +@property(retain) NSMutableArray* queue; + @end diff --git a/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.m b/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.m index 26d98595bd7..4beab221f13 100644 --- a/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.m +++ b/jdk/src/macosx/native/sun/osxapp/QueuingApplicationDelegate.m @@ -27,8 +27,6 @@ #import "QueuingApplicationDelegate.h" -static id realDelegate = nil; - @interface NSBundle (EAWTOverrides) - (BOOL)_hasEAWTOverride:(NSString *)key; @end @@ -44,6 +42,9 @@ static id realDelegate = nil; @implementation QueuingApplicationDelegate +@synthesize realDelegate; +@synthesize queue; + + (QueuingApplicationDelegate*) sharedDelegate { static QueuingApplicationDelegate * qad = nil; @@ -62,7 +63,7 @@ static id realDelegate = nil; return self; } - self->queue = [[NSMutableArray arrayWithCapacity: 0] retain]; + self.queue = [NSMutableArray arrayWithCapacity: 0]; // If the java application has a bundle with an Info.plist file with // a CFBundleDocumentTypes entry, then it is set up to handle Open Doc @@ -100,8 +101,8 @@ static id realDelegate = nil; Class clz = [QueuingApplicationDelegate class]; [ctr removeObserver:clz]; - [self->queue release]; - self->queue = nil; + self.queue = nil; + self.realDelegate = nil; [super dealloc]; } @@ -109,16 +110,16 @@ static id realDelegate = nil; - (void)_handleOpenURLEvent:(NSAppleEventDescriptor *)openURLEvent withReplyEvent:(NSAppleEventDescriptor *)replyEvent { - [self->queue addObject:^(){ - [realDelegate _handleOpenURLEvent:openURLEvent withReplyEvent:replyEvent]; - }]; + [self.queue addObject:[^(){ + [self.realDelegate _handleOpenURLEvent:openURLEvent withReplyEvent:replyEvent]; + } copy]]; } - (void)application:(NSApplication *)theApplication openFiles:(NSArray *)fileNames { - [self->queue addObject:^(){ - [realDelegate application:theApplication openFiles:fileNames]; - }]; + [self.queue addObject:[^(){ + [self.realDelegate application:theApplication openFiles:fileNames]; + } copy]]; } - (NSApplicationPrintReply)application:(NSApplication *)application printFiles:(NSArray *)fileNames withSettings:(NSDictionary *)printSettings showPrintPanels:(BOOL)showPrintPanels @@ -127,9 +128,9 @@ static id realDelegate = nil; return NSPrintingCancelled; } - [self->queue addObject:^(){ - [realDelegate application:application printFiles:fileNames withSettings:printSettings showPrintPanels:showPrintPanels]; - }]; + [self.queue addObject:[^(){ + [self.realDelegate application:application printFiles:fileNames withSettings:printSettings showPrintPanels:showPrintPanels]; + } copy]]; // well, a bit premature, but what else can we do?.. return NSPrintingSuccess; @@ -137,76 +138,76 @@ static id realDelegate = nil; - (void)_willFinishLaunching { - QueuingApplicationDelegate * q = self; - [self->queue addObject:^(){ - [[realDelegate class] _willFinishLaunching]; - }]; + [self.queue addObject:[^(){ + [[self.realDelegate class] _willFinishLaunching]; + } copy]]; } - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag { - [self->queue addObject:^(){ - [realDelegate applicationShouldHandleReopen:theApplication hasVisibleWindows:flag]; - }]; + [self.queue addObject:[^(){ + [self.realDelegate applicationShouldHandleReopen:theApplication hasVisibleWindows:flag]; + } copy]]; return YES; } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app { - [self->queue addObject:^(){ - [realDelegate applicationShouldTerminate:app]; - }]; + [self.queue addObject:[^(){ + [self.realDelegate applicationShouldTerminate:app]; + } copy]]; return NSTerminateLater; } - (void)_systemWillPowerOff { - [self->queue addObject:^(){ - [[realDelegate class] _systemWillPowerOff]; - }]; + [self.queue addObject:[^(){ + [[self.realDelegate class] _systemWillPowerOff]; + } copy]]; } - (void)_appDidActivate { - [self->queue addObject:^(){ - [[realDelegate class] _appDidActivate]; - }]; + [self.queue addObject:[^(){ + [[self.realDelegate class] _appDidActivate]; + } copy]]; } - (void)_appDidDeactivate { - [self->queue addObject:^(){ - [[realDelegate class] _appDidDeactivate]; - }]; + [self.queue addObject:[^(){ + [[self.realDelegate class] _appDidDeactivate]; + } copy]]; } - (void)_appDidHide { - [self->queue addObject:^(){ - [[realDelegate class] _appDidHide]; - }]; + [self.queue addObject:[^(){ + [[self.realDelegate class] _appDidHide]; + } copy]]; } - (void)_appDidUnhide { - [self->queue addObject:^(){ - [[realDelegate class] _appDidUnhide]; - }]; + [self.queue addObject:[^(){ + [[self.realDelegate class] _appDidUnhide]; + } copy]]; } - (void)processQueuedEventsWithTargetDelegate:(id )delegate { - NSUInteger i; - NSUInteger count = [self->queue count]; + self.realDelegate = delegate; - realDelegate = delegate; + NSUInteger i; + NSUInteger count = [self.queue count]; for (i = 0; i < count; i++) { - void (^event)() = (void (^)())[self->queue objectAtIndex: i]; + void (^event)() = (void (^)())[self.queue objectAtIndex: i]; event(); + [event release]; } - [self->queue removeAllObjects]; + [self.queue removeAllObjects]; } @end diff --git a/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java b/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java index 57aed3d0b0c..bc865c63f47 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/HmacCore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,16 +38,16 @@ import java.security.spec.*; * This class constitutes the core of HMAC- algorithms, where * can be SHA1 or MD5, etc. See RFC 2104 for spec. * - * It also contains the implementation classes for the SHA-256, + * It also contains the implementation classes for SHA-224, SHA-256, * SHA-384, and SHA-512 HMACs. * * @author Jan Luehe */ -final class HmacCore implements Cloneable { +abstract class HmacCore extends MacSpi implements Cloneable { - private final MessageDigest md; - private final byte[] k_ipad; // inner padding - key XORd with ipad - private final byte[] k_opad; // outer padding - key XORd with opad + private MessageDigest md; + private byte[] k_ipad; // inner padding - key XORd with ipad + private byte[] k_opad; // outer padding - key XORd with opad private boolean first; // Is this the first data to be processed? private final int blockLen; @@ -72,23 +72,12 @@ final class HmacCore implements Cloneable { this(MessageDigest.getInstance(digestAlgorithm), bl); } - /** - * Constructor used for cloning. - */ - private HmacCore(HmacCore other) throws CloneNotSupportedException { - this.md = (MessageDigest)other.md.clone(); - this.blockLen = other.blockLen; - this.k_ipad = other.k_ipad.clone(); - this.k_opad = other.k_opad.clone(); - this.first = other.first; - } - /** * Returns the length of the HMAC in bytes. * * @return the HMAC length in bytes. */ - int getDigestLength() { + protected int engineGetMacLength() { return this.md.getDigestLength(); } @@ -103,9 +92,8 @@ final class HmacCore implements Cloneable { * @exception InvalidAlgorithmParameterException if the given algorithm * parameters are inappropriate for this MAC. */ - void init(Key key, AlgorithmParameterSpec params) + protected void engineInit(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException { - if (params != null) { throw new InvalidAlgorithmParameterException ("HMAC does not use parameters"); @@ -140,7 +128,7 @@ final class HmacCore implements Cloneable { Arrays.fill(secret, (byte)0); secret = null; - reset(); + engineReset(); } /** @@ -148,7 +136,7 @@ final class HmacCore implements Cloneable { * * @param input the input byte to be processed. */ - void update(byte input) { + protected void engineUpdate(byte input) { if (first == true) { // compute digest for 1st pass; start with inner pad md.update(k_ipad); @@ -167,7 +155,7 @@ final class HmacCore implements Cloneable { * @param offset the offset in input where the input starts. * @param len the number of bytes to process. */ - void update(byte input[], int offset, int len) { + protected void engineUpdate(byte input[], int offset, int len) { if (first == true) { // compute digest for 1st pass; start with inner pad md.update(k_ipad); @@ -178,7 +166,13 @@ final class HmacCore implements Cloneable { md.update(input, offset, len); } - void update(ByteBuffer input) { + /** + * Processes the input.remaining() bytes in the ByteBuffer + * input. + * + * @param input the input byte buffer. + */ + protected void engineUpdate(ByteBuffer input) { if (first == true) { // compute digest for 1st pass; start with inner pad md.update(k_ipad); @@ -194,7 +188,7 @@ final class HmacCore implements Cloneable { * * @return the HMAC result. */ - byte[] doFinal() { + protected byte[] engineDoFinal() { if (first == true) { // compute digest for 1st pass; start with inner pad md.update(k_ipad); @@ -223,7 +217,7 @@ final class HmacCore implements Cloneable { * Resets the HMAC for further use, maintaining the secret key that the * HMAC was initialized with. */ - void reset() { + protected void engineReset() { if (first == false) { md.reset(); first = true; @@ -234,115 +228,38 @@ final class HmacCore implements Cloneable { * Clones this object. */ public Object clone() throws CloneNotSupportedException { - return new HmacCore(this); + HmacCore copy = (HmacCore) super.clone(); + copy.md = (MessageDigest) md.clone(); + copy.k_ipad = k_ipad.clone(); + copy.k_opad = k_opad.clone(); + return copy; + } + + // nested static class for the HmacSHA224 implementation + public static final class HmacSHA224 extends HmacCore { + public HmacSHA224() throws NoSuchAlgorithmException { + super("SHA-224", 64); + } } // nested static class for the HmacSHA256 implementation - public static final class HmacSHA256 extends MacSpi implements Cloneable { - private final HmacCore core; + public static final class HmacSHA256 extends HmacCore { public HmacSHA256() throws NoSuchAlgorithmException { - core = new HmacCore("SHA-256", 64); - } - private HmacSHA256(HmacSHA256 base) throws CloneNotSupportedException { - core = (HmacCore)base.core.clone(); - } - protected int engineGetMacLength() { - return core.getDigestLength(); - } - protected void engineInit(Key key, AlgorithmParameterSpec params) - throws InvalidKeyException, InvalidAlgorithmParameterException { - core.init(key, params); - } - protected void engineUpdate(byte input) { - core.update(input); - } - protected void engineUpdate(byte input[], int offset, int len) { - core.update(input, offset, len); - } - protected void engineUpdate(ByteBuffer input) { - core.update(input); - } - protected byte[] engineDoFinal() { - return core.doFinal(); - } - protected void engineReset() { - core.reset(); - } - public Object clone() throws CloneNotSupportedException { - return new HmacSHA256(this); + super("SHA-256", 64); } } // nested static class for the HmacSHA384 implementation - public static final class HmacSHA384 extends MacSpi implements Cloneable { - private final HmacCore core; + public static final class HmacSHA384 extends HmacCore { public HmacSHA384() throws NoSuchAlgorithmException { - core = new HmacCore("SHA-384", 128); - } - private HmacSHA384(HmacSHA384 base) throws CloneNotSupportedException { - core = (HmacCore)base.core.clone(); - } - protected int engineGetMacLength() { - return core.getDigestLength(); - } - protected void engineInit(Key key, AlgorithmParameterSpec params) - throws InvalidKeyException, InvalidAlgorithmParameterException { - core.init(key, params); - } - protected void engineUpdate(byte input) { - core.update(input); - } - protected void engineUpdate(byte input[], int offset, int len) { - core.update(input, offset, len); - } - protected void engineUpdate(ByteBuffer input) { - core.update(input); - } - protected byte[] engineDoFinal() { - return core.doFinal(); - } - protected void engineReset() { - core.reset(); - } - public Object clone() throws CloneNotSupportedException { - return new HmacSHA384(this); + super("SHA-384", 128); } } // nested static class for the HmacSHA512 implementation - public static final class HmacSHA512 extends MacSpi implements Cloneable { - private final HmacCore core; + public static final class HmacSHA512 extends HmacCore { public HmacSHA512() throws NoSuchAlgorithmException { - core = new HmacCore("SHA-512", 128); - } - private HmacSHA512(HmacSHA512 base) throws CloneNotSupportedException { - core = (HmacCore)base.core.clone(); - } - protected int engineGetMacLength() { - return core.getDigestLength(); - } - protected void engineInit(Key key, AlgorithmParameterSpec params) - throws InvalidKeyException, InvalidAlgorithmParameterException { - core.init(key, params); - } - protected void engineUpdate(byte input) { - core.update(input); - } - protected void engineUpdate(byte input[], int offset, int len) { - core.update(input, offset, len); - } - protected void engineUpdate(ByteBuffer input) { - core.update(input); - } - protected byte[] engineDoFinal() { - return core.doFinal(); - } - protected void engineReset() { - core.reset(); - } - public Object clone() throws CloneNotSupportedException { - return new HmacSHA512(this); + super("SHA-512", 128); } } - } diff --git a/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java b/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java index a4d9f4d46f4..ccf85561db9 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/HmacMD5.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,97 +37,11 @@ import java.security.spec.*; * * @author Jan Luehe */ -public final class HmacMD5 extends MacSpi implements Cloneable { - - private HmacCore hmac; - private static final int MD5_BLOCK_LENGTH = 64; - +public final class HmacMD5 extends HmacCore { /** * Standard constructor, creates a new HmacMD5 instance. */ public HmacMD5() throws NoSuchAlgorithmException { - hmac = new HmacCore(MessageDigest.getInstance("MD5"), - MD5_BLOCK_LENGTH); - } - - /** - * Returns the length of the HMAC in bytes. - * - * @return the HMAC length in bytes. - */ - protected int engineGetMacLength() { - return hmac.getDigestLength(); - } - - /** - * Initializes the HMAC with the given secret key and algorithm parameters. - * - * @param key the secret key. - * @param params the algorithm parameters. - * - * @exception InvalidKeyException if the given key is inappropriate for - * initializing this MAC. - * @exception InvalidAlgorithmParameterException if the given algorithm - * parameters are inappropriate for this MAC. - */ - protected void engineInit(Key key, AlgorithmParameterSpec params) - throws InvalidKeyException, InvalidAlgorithmParameterException { - hmac.init(key, params); - } - - /** - * Processes the given byte. - * - * @param input the input byte to be processed. - */ - protected void engineUpdate(byte input) { - hmac.update(input); - } - - /** - * Processes the first len bytes in input, - * starting at offset. - * - * @param input the input buffer. - * @param offset the offset in input where the input starts. - * @param len the number of bytes to process. - */ - protected void engineUpdate(byte input[], int offset, int len) { - hmac.update(input, offset, len); - } - - protected void engineUpdate(ByteBuffer input) { - hmac.update(input); - } - - /** - * Completes the HMAC computation and resets the HMAC for further use, - * maintaining the secret key that the HMAC was initialized with. - * - * @return the HMAC result. - */ - protected byte[] engineDoFinal() { - return hmac.doFinal(); - } - - /** - * Resets the HMAC for further use, maintaining the secret key that the - * HMAC was initialized with. - */ - protected void engineReset() { - hmac.reset(); - } - - /* - * Clones this object. - */ - public Object clone() { - HmacMD5 that = null; - try { - that = (HmacMD5) super.clone(); - that.hmac = (HmacCore) this.hmac.clone(); - } catch (CloneNotSupportedException e) { - } - return that; + super("MD5", 64); } } diff --git a/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java b/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java index 9b3413c2416..ef0ef58ee45 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,26 +41,13 @@ import java.security.spec.*; * * @author Valerie Peng */ -public final class HmacPKCS12PBESHA1 extends MacSpi implements Cloneable { - - private HmacCore hmac = null; - private static final int SHA1_BLOCK_LENGTH = 64; +public final class HmacPKCS12PBESHA1 extends HmacCore { /** * Standard constructor, creates a new HmacSHA1 instance. */ public HmacPKCS12PBESHA1() throws NoSuchAlgorithmException { - this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"), - SHA1_BLOCK_LENGTH); - } - - /** - * Returns the length of the HMAC in bytes. - * - * @return the HMAC length in bytes. - */ - protected int engineGetMacLength() { - return hmac.getDigestLength(); + super("SHA1", 64); } /** @@ -71,7 +58,7 @@ public final class HmacPKCS12PBESHA1 extends MacSpi implements Cloneable { * * @exception InvalidKeyException if the given key is inappropriate for * initializing this MAC. - u* @exception InvalidAlgorithmParameterException if the given algorithm + * @exception InvalidAlgorithmParameterException if the given algorithm * parameters are inappropriate for this MAC. */ protected void engineInit(Key key, AlgorithmParameterSpec params) @@ -140,64 +127,8 @@ public final class HmacPKCS12PBESHA1 extends MacSpi implements Cloneable { ("IterationCount must be a positive number"); } byte[] derivedKey = PKCS12PBECipherCore.derive(passwdChars, salt, - iCount, hmac.getDigestLength(), PKCS12PBECipherCore.MAC_KEY); + iCount, engineGetMacLength(), PKCS12PBECipherCore.MAC_KEY); SecretKey cipherKey = new SecretKeySpec(derivedKey, "HmacSHA1"); - hmac.init(cipherKey, null); - } - - /** - * Processes the given byte. - * - * @param input the input byte to be processed. - */ - protected void engineUpdate(byte input) { - hmac.update(input); - } - - /** - * Processes the first len bytes in input, - * starting at offset. - * - * @param input the input buffer. - * @param offset the offset in input where the input starts. - * @param len the number of bytes to process. - */ - protected void engineUpdate(byte input[], int offset, int len) { - hmac.update(input, offset, len); - } - - protected void engineUpdate(ByteBuffer input) { - hmac.update(input); - } - - /** - * Completes the HMAC computation and resets the HMAC for further use, - * maintaining the secret key that the HMAC was initialized with. - * - * @return the HMAC result. - */ - protected byte[] engineDoFinal() { - return hmac.doFinal(); - } - - /** - * Resets the HMAC for further use, maintaining the secret key that the - * HMAC was initialized with. - */ - protected void engineReset() { - hmac.reset(); - } - - /* - * Clones this object. - */ - public Object clone() { - HmacPKCS12PBESHA1 that = null; - try { - that = (HmacPKCS12PBESHA1)super.clone(); - that.hmac = (HmacCore)this.hmac.clone(); - } catch (CloneNotSupportedException e) { - } - return that; + super.engineInit(cipherKey, null); } } diff --git a/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java b/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java index a9a9f6c423d..b79dc9d9658 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/HmacSHA1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,97 +37,11 @@ import java.security.spec.*; * * @author Jan Luehe */ -public final class HmacSHA1 extends MacSpi implements Cloneable { - - private HmacCore hmac = null; - private static final int SHA1_BLOCK_LENGTH = 64; - +public final class HmacSHA1 extends HmacCore { /** * Standard constructor, creates a new HmacSHA1 instance. */ public HmacSHA1() throws NoSuchAlgorithmException { - this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"), - SHA1_BLOCK_LENGTH); - } - - /** - * Returns the length of the HMAC in bytes. - * - * @return the HMAC length in bytes. - */ - protected int engineGetMacLength() { - return hmac.getDigestLength(); - } - - /** - * Initializes the HMAC with the given secret key and algorithm parameters. - * - * @param key the secret key. - * @param params the algorithm parameters. - * - * @exception InvalidKeyException if the given key is inappropriate for - * initializing this MAC. - * @exception InvalidAlgorithmParameterException if the given algorithm - * parameters are inappropriate for this MAC. - */ - protected void engineInit(Key key, AlgorithmParameterSpec params) - throws InvalidKeyException, InvalidAlgorithmParameterException { - hmac.init(key, params); - } - - /** - * Processes the given byte. - * - * @param input the input byte to be processed. - */ - protected void engineUpdate(byte input) { - hmac.update(input); - } - - /** - * Processes the first len bytes in input, - * starting at offset. - * - * @param input the input buffer. - * @param offset the offset in input where the input starts. - * @param len the number of bytes to process. - */ - protected void engineUpdate(byte input[], int offset, int len) { - hmac.update(input, offset, len); - } - - protected void engineUpdate(ByteBuffer input) { - hmac.update(input); - } - - /** - * Completes the HMAC computation and resets the HMAC for further use, - * maintaining the secret key that the HMAC was initialized with. - * - * @return the HMAC result. - */ - protected byte[] engineDoFinal() { - return hmac.doFinal(); - } - - /** - * Resets the HMAC for further use, maintaining the secret key that the - * HMAC was initialized with. - */ - protected void engineReset() { - hmac.reset(); - } - - /* - * Clones this object. - */ - public Object clone() { - HmacSHA1 that = null; - try { - that = (HmacSHA1)super.clone(); - that.hmac = (HmacCore)this.hmac.clone(); - } catch (CloneNotSupportedException e) { - } - return that; + super("SHA1", 64); } } diff --git a/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java b/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java index 708d80ba7db..9593bbfe0b0 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -105,11 +105,11 @@ final class KeyGeneratorCore { return new SecretKeySpec(b, name); } - // nested static class for the HmacSHA256 key generator - public static final class HmacSHA256KG extends KeyGeneratorSpi { + // nested static classes for the HmacSHA-2 family of key generator + abstract static class HmacSHA2KG extends KeyGeneratorSpi { private final KeyGeneratorCore core; - public HmacSHA256KG() { - core = new KeyGeneratorCore("HmacSHA256", 256); + protected HmacSHA2KG(String algoName, int len) { + core = new KeyGeneratorCore(algoName, len); } protected void engineInit(SecureRandom random) { core.implInit(random); @@ -124,47 +124,26 @@ final class KeyGeneratorCore { protected SecretKey engineGenerateKey() { return core.implGenerateKey(); } - } - // nested static class for the HmacSHA384 key generator - public static final class HmacSHA384KG extends KeyGeneratorSpi { - private final KeyGeneratorCore core; - public HmacSHA384KG() { - core = new KeyGeneratorCore("HmacSHA384", 384); + public static final class SHA224 extends HmacSHA2KG { + public SHA224() { + super("HmacSHA224", 224); + } } - protected void engineInit(SecureRandom random) { - core.implInit(random); + public static final class SHA256 extends HmacSHA2KG { + public SHA256() { + super("HmacSHA256", 256); + } } - protected void engineInit(AlgorithmParameterSpec params, - SecureRandom random) throws InvalidAlgorithmParameterException { - core.implInit(params, random); + public static final class SHA384 extends HmacSHA2KG { + public SHA384() { + super("HmacSHA384", 384); + } } - protected void engineInit(int keySize, SecureRandom random) { - core.implInit(keySize, random); - } - protected SecretKey engineGenerateKey() { - return core.implGenerateKey(); - } - } - - // nested static class for the HmacSHA384 key generator - public static final class HmacSHA512KG extends KeyGeneratorSpi { - private final KeyGeneratorCore core; - public HmacSHA512KG() { - core = new KeyGeneratorCore("HmacSHA512", 512); - } - protected void engineInit(SecureRandom random) { - core.implInit(random); - } - protected void engineInit(AlgorithmParameterSpec params, - SecureRandom random) throws InvalidAlgorithmParameterException { - core.implInit(params, random); - } - protected void engineInit(int keySize, SecureRandom random) { - core.implInit(keySize, random); - } - protected SecretKey engineGenerateKey() { - return core.implGenerateKey(); + public static final class SHA512 extends HmacSHA2KG { + public SHA512() { + super("HmacSHA512", 512); + } } } diff --git a/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java b/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java index 61423f0d4e6..9b3cbc27449 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -108,6 +108,8 @@ public final class OAEPParameters extends AlgorithmParametersSpi { private static String convertToStandardName(String internalName) { if (internalName.equals("SHA")) { return "SHA-1"; + } else if (internalName.equals("SHA224")) { + return "SHA-224"; } else if (internalName.equals("SHA256")) { return "SHA-256"; } else if (internalName.equals("SHA384")) { @@ -143,6 +145,8 @@ public final class OAEPParameters extends AlgorithmParametersSpi { String mgfDigestName = convertToStandardName(params.getName()); if (mgfDigestName.equals("SHA-1")) { mgfSpec = MGF1ParameterSpec.SHA1; + } else if (mgfDigestName.equals("SHA-224")) { + mgfSpec = MGF1ParameterSpec.SHA224; } else if (mgfDigestName.equals("SHA-256")) { mgfSpec = MGF1ParameterSpec.SHA256; } else if (mgfDigestName.equals("SHA-384")) { diff --git a/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java b/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java index c58236ba3e6..e7a815283b5 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/SunJCE.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,7 +65,7 @@ import java.security.SecureRandom; * * - Diffie-Hellman Key Agreement * - * - HMAC-MD5, HMAC-SHA1, HMAC-SHA-256, HMAC-SHA-384, HMAC-SHA-512 + * - HMAC-MD5, HMAC-SHA1, HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, HMAC-SHA-512 * */ @@ -113,6 +113,7 @@ public final class SunJCE extends Provider { "NOPADDING|PKCS1PADDING|OAEPWITHMD5ANDMGF1PADDING" + "|OAEPWITHSHA1ANDMGF1PADDING" + "|OAEPWITHSHA-1ANDMGF1PADDING" + + "|OAEPWITHSHA-224ANDMGF1PADDING" + "|OAEPWITHSHA-256ANDMGF1PADDING" + "|OAEPWITHSHA-384ANDMGF1PADDING" + "|OAEPWITHSHA-512ANDMGF1PADDING"); @@ -221,12 +222,25 @@ public final class SunJCE extends Provider { put("KeyGenerator.HmacSHA1", "com.sun.crypto.provider.HmacSHA1KeyGenerator"); + put("KeyGenerator.HmacSHA224", + "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA224"); + put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.8", "HmacSHA224"); + put("Alg.Alias.KeyGenerator.1.2.840.113549.2.8", "HmacSHA224"); + put("KeyGenerator.HmacSHA256", - "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA256KG"); + "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA256"); + put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.9", "HmacSHA256"); + put("Alg.Alias.KeyGenerator.1.2.840.113549.2.9", "HmacSHA256"); + put("KeyGenerator.HmacSHA384", - "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA384KG"); + "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA384"); + put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.10", "HmacSHA384"); + put("Alg.Alias.KeyGenerator.1.2.840.113549.2.10", "HmacSHA384"); + put("KeyGenerator.HmacSHA512", - "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA512KG"); + "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA512"); + put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.11", "HmacSHA512"); + put("Alg.Alias.KeyGenerator.1.2.840.113549.2.11", "HmacSHA512"); put("KeyPairGenerator.DiffieHellman", "com.sun.crypto.provider.DHKeyPairGenerator"); @@ -389,12 +403,23 @@ public final class SunJCE extends Provider { */ put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5"); put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1"); + put("Mac.HmacSHA224", + "com.sun.crypto.provider.HmacCore$HmacSHA224"); + put("Alg.Alias.Mac.OID.1.2.840.113549.2.8", "HmacSHA224"); + put("Alg.Alias.Mac.1.2.840.113549.2.8", "HmacSHA224"); put("Mac.HmacSHA256", "com.sun.crypto.provider.HmacCore$HmacSHA256"); + put("Alg.Alias.Mac.OID.1.2.840.113549.2.9", "HmacSHA256"); + put("Alg.Alias.Mac.1.2.840.113549.2.9", "HmacSHA256"); put("Mac.HmacSHA384", "com.sun.crypto.provider.HmacCore$HmacSHA384"); + put("Alg.Alias.Mac.OID.1.2.840.113549.2.10", "HmacSHA384"); + put("Alg.Alias.Mac.1.2.840.113549.2.10", "HmacSHA384"); put("Mac.HmacSHA512", "com.sun.crypto.provider.HmacCore$HmacSHA512"); + put("Alg.Alias.Mac.OID.1.2.840.113549.2.11", "HmacSHA512"); + put("Alg.Alias.Mac.1.2.840.113549.2.11", "HmacSHA512"); + put("Mac.HmacPBESHA1", "com.sun.crypto.provider.HmacPKCS12PBESHA1"); @@ -405,6 +430,7 @@ public final class SunJCE extends Provider { put("Mac.HmacMD5 SupportedKeyFormats", "RAW"); put("Mac.HmacSHA1 SupportedKeyFormats", "RAW"); + put("Mac.HmacSHA224 SupportedKeyFormats", "RAW"); put("Mac.HmacSHA256 SupportedKeyFormats", "RAW"); put("Mac.HmacSHA384 SupportedKeyFormats", "RAW"); put("Mac.HmacSHA512 SupportedKeyFormats", "RAW"); diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java index fcfb1783605..6fb52a4cd4a 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java @@ -796,9 +796,10 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "Menu.margin", zeroInsets, "Menu.cancelMode", "hideMenuTree", "Menu.alignAcceleratorText", Boolean.FALSE, + "Menu.useMenuBarForTopLevelMenus", Boolean.TRUE, - "MenuBar.windowBindings", new Object[] { + "MenuBar.windowBindings", new Object[] { "F10", "takeFocus" }, "MenuBar.font", new FontLazyValue(Region.MENU_BAR), diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java index 57a816932b0..4a1f429bad0 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java @@ -926,9 +926,20 @@ class GTKPainter extends SynthPainter { int x, int y, int w, int h) { // Text is odd in that it uses the TEXT_BACKGROUND vs BACKGROUND. JComponent c = context.getComponent(); + Container container = c.getParent(); + Container containerParent = null; GTKStyle style = (GTKStyle)context.getStyle(); Region id = context.getRegion(); int state = context.getComponentState(); + + if (c instanceof ListCellRenderer && container != null) { + containerParent = container.getParent(); + if (containerParent instanceof JComboBox + && containerParent.hasFocus()) { + state |= SynthConstants.FOCUSED; + } + } + synchronized (UNIXToolkit.GTK_LOCK) { if (ENGINE.paintCachedImage(g, x, y, w, h, id, state)) { return; @@ -938,9 +949,10 @@ class GTKPainter extends SynthPainter { int focusSize = 0; boolean interiorFocus = style.getClassSpecificBoolValue( context, "interior-focus", true); + + focusSize = style.getClassSpecificIntValue(context, + "focus-line-width",1); if (!interiorFocus && (state & SynthConstants.FOCUSED) != 0) { - focusSize = style.getClassSpecificIntValue(context, - "focus-line-width",1); x += focusSize; y += focusSize; w -= 2 * focusSize; @@ -961,11 +973,25 @@ class GTKPainter extends SynthPainter { h - (2 * yThickness), ColorType.TEXT_BACKGROUND); - if (focusSize > 0) { - x -= focusSize; - y -= focusSize; - w += 2 * focusSize; - h += 2 * focusSize; + if (focusSize > 0 && (state & SynthConstants.FOCUSED) != 0) { + if (!interiorFocus) { + x -= focusSize; + y -= focusSize; + w += 2 * focusSize; + h += 2 * focusSize; + } else { + if (containerParent instanceof JComboBox) { + x += (focusSize + 2); + y += (focusSize + 1); + w -= (2 * focusSize + 1); + h -= (2 * focusSize + 2); + } else { + x += focusSize; + y += focusSize; + w -= 2 * focusSize; + h -= 2 * focusSize; + } + } ENGINE.paintFocus(g, context, id, gtkState, "entry", x, y, w, h); } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java index 5c28db4e23d..cfc2fc3ccb3 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java @@ -92,7 +92,13 @@ class GTKStyleFactory extends SynthStyleFactory { boolean defaultCapable = btn.isDefaultCapable(); key = new ComplexKey(wt, toolButton, defaultCapable); } + } else if (id == Region.MENU) { + if (c instanceof JMenu && ((JMenu) c).isTopLevelMenu() && + UIManager.getBoolean("Menu.useMenuBarForTopLevelMenus")) { + wt = WidgetType.MENU_BAR; + } } + if (key == null) { // Otherwise, just use the WidgetType as the key. key = wt; diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif.properties index d3fee304abe..fed806c17dd 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=Cancel -FileChooser.saveButtonText=Save -FileChooser.openButtonText=OK -FileChooser.saveDialogTitleText=Save -FileChooser.openDialogTitleText=Open -FileChooser.updateButtonText=Update -FileChooser.helpButtonText=Help -FileChooser.pathLabelText=Enter path or folder name: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=Filter -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=Folders -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=Files -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=Enter file name: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=Enter folder name: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=Cancel +FileChooser.saveButton.textAndMnemonic=Save +FileChooser.openButton.textAndMnemonic=OK +FileChooser.saveDialogTitle.textAndMnemonic=Save +FileChooser.openDialogTitle.textAndMnemonic=Open +FileChooser.updateButton.textAndMnemonic=Update +FileChooser.helpButton.textAndMnemonic=Help +FileChooser.pathLabel.textAndMnemonic=Enter &path or folder name: +FileChooser.filterLabel.textAndMnemonic=Filte&r +FileChooser.foldersLabel.textAndMnemonic=Fo&lders +FileChooser.filesLabel.textAndMnemonic=F&iles +FileChooser.enterFileNameLabel.textAndMnemonic=E&nter file name: +FileChooser.enterFolderNameLabel.textAndMnemonic=Enter folder name: -FileChooser.cancelButtonToolTipText=Abort file chooser dialog. -FileChooser.saveButtonToolTipText=Save selected file. -FileChooser.openButtonToolTipText=Open selected file. -FileChooser.updateButtonToolTipText=Update directory listing. -FileChooser.helpButtonToolTipText=FileChooser help. +FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog. +FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file. +FileChooser.openButtonToolTip.textAndMnemonic=Open selected file. +FileChooser.updateButtonToolTip.textAndMnemonic=Update directory listing. +FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser help. diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_de.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_de.properties index e7723574a6d..1d2cc250ed3 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_de.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_de.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=Abbrechen -FileChooser.saveButtonText=Speichern -FileChooser.openButtonText=OK -FileChooser.saveDialogTitleText=Speichern -FileChooser.openDialogTitleText=\u00D6ffnen -FileChooser.updateButtonText=Aktualisieren -FileChooser.helpButtonText=Hilfe -FileChooser.pathLabelText=Pfad- oder Ordnernamen eingeben: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=Filter -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=Ordner -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=Dateien -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=Dateinamen eingeben: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=Ordnernamen eingeben: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=Abbrechen +FileChooser.saveButton.textAndMnemonic=Speichern +FileChooser.openButton.textAndMnemonic=OK +FileChooser.saveDialogTitle.textAndMnemonic=Speichern +FileChooser.openDialogTitle.textAndMnemonic=\u00D6ffnen +FileChooser.updateButton.textAndMnemonic=Aktualisieren +FileChooser.helpButton.textAndMnemonic=Hilfe +FileChooser.pathLabel.textAndMnemonic=&Pfad- oder Ordnernamen eingeben: +FileChooser.filterLabel.textAndMnemonic=Filte&r +FileChooser.foldersLabel.textAndMnemonic=Ordner(&L) +FileChooser.filesLabel.textAndMnemonic=Date&ien +FileChooser.enterFileNameLabel.textAndMnemonic=Datei&namen eingeben: +FileChooser.enterFolderNameLabel.textAndMnemonic=Ordnernamen eingeben: -FileChooser.cancelButtonToolTipText=Dialogfeld f\u00FCr Dateiauswahl schlie\u00DFen. -FileChooser.saveButtonToolTipText=Ausgew\u00E4hlte Datei speichern. -FileChooser.openButtonToolTipText=Ausgew\u00E4hlte Datei \u00F6ffnen. -FileChooser.updateButtonToolTipText=Verzeichnisliste aktualisieren. -FileChooser.helpButtonToolTipText=FileChooser-Hilfe. +FileChooser.cancelButtonToolTip.textAndMnemonic=Dialogfeld f\u00FCr Dateiauswahl schlie\u00DFen. +FileChooser.saveButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei speichern. +FileChooser.openButtonToolTip.textAndMnemonic=Ausgew\u00E4hlte Datei \u00F6ffnen. +FileChooser.updateButtonToolTip.textAndMnemonic=Verzeichnisliste aktualisieren. +FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser-Hilfe. diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_es.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_es.properties index 6d9aa8f16ba..2add8f218bb 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_es.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_es.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=Cancelar -FileChooser.saveButtonText=Guardar -FileChooser.openButtonText=Aceptar -FileChooser.saveDialogTitleText=Guardar -FileChooser.openDialogTitleText=Abrir -FileChooser.updateButtonText=Actualizar -FileChooser.helpButtonText=Ayuda -FileChooser.pathLabelText=Introducir nombre de la ruta de acceso o carpeta: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=Filtro -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=Carpetas -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=Archivos -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=Introducir nombre de archivo: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=Introducir nombre de carpeta: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=Cancelar +FileChooser.saveButton.textAndMnemonic=Guardar +FileChooser.openButton.textAndMnemonic=Aceptar +FileChooser.saveDialogTitle.textAndMnemonic=Guardar +FileChooser.openDialogTitle.textAndMnemonic=Abrir +FileChooser.updateButton.textAndMnemonic=Actualizar +FileChooser.helpButton.textAndMnemonic=Ayuda +FileChooser.pathLabel.textAndMnemonic=Introducir nombre de la ruta de acceso o car&peta: +FileChooser.filterLabel.textAndMnemonic=Filt&ro +FileChooser.foldersLabel.textAndMnemonic=Carpetas(&L) +FileChooser.filesLabel.textAndMnemonic=Arch&ivos +FileChooser.enterFileNameLabel.textAndMnemonic=I&ntroducir nombre de archivo: +FileChooser.enterFolderNameLabel.textAndMnemonic=Introducir nombre de carpeta: -FileChooser.cancelButtonToolTipText=Abortar cuadro de di\u00E1logo del selector de archivos. -FileChooser.saveButtonToolTipText=Guardar archivo seleccionado. -FileChooser.openButtonToolTipText=Abrir archivo seleccionado. -FileChooser.updateButtonToolTipText=Actualizar lista de directorios. -FileChooser.helpButtonToolTipText=Ayuda del selector de archivos. +FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar cuadro de di\u00E1logo del selector de archivos. +FileChooser.saveButtonToolTip.textAndMnemonic=Guardar archivo seleccionado. +FileChooser.openButtonToolTip.textAndMnemonic=Abrir archivo seleccionado. +FileChooser.updateButtonToolTip.textAndMnemonic=Actualizar lista de directorios. +FileChooser.helpButtonToolTip.textAndMnemonic=Ayuda del selector de archivos. diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_fr.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_fr.properties index 392ecee5bd2..2d9f97885dd 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_fr.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_fr.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=Annuler -FileChooser.saveButtonText=Enregistrer -FileChooser.openButtonText=OK -FileChooser.saveDialogTitleText=Enregistrer -FileChooser.openDialogTitleText=Ouvrir -FileChooser.updateButtonText=Mettre \u00E0 jour -FileChooser.helpButtonText=Aide -FileChooser.pathLabelText=Entrez le chemin ou le nom du dossier : -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=Filtre -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=Dossiers -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=Fichiers -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=Entrez le nom du fichier : -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=Entrez le nom du dossier : +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=Annuler +FileChooser.saveButton.textAndMnemonic=Enregistrer +FileChooser.openButton.textAndMnemonic=OK +FileChooser.saveDialogTitle.textAndMnemonic=Enregistrer +FileChooser.openDialogTitle.textAndMnemonic=Ouvrir +FileChooser.updateButton.textAndMnemonic=Mettre \u00E0 jour +FileChooser.helpButton.textAndMnemonic=Aide +FileChooser.pathLabel.textAndMnemonic=Entrez le chemin ou le nom du dossier (&P): +FileChooser.filterLabel.textAndMnemonic=Filt&re +FileChooser.foldersLabel.textAndMnemonic=Dossiers(&L) +FileChooser.filesLabel.textAndMnemonic=F&ichiers +FileChooser.enterFileNameLabel.textAndMnemonic=E&ntrez le nom du fichier : +FileChooser.enterFolderNameLabel.textAndMnemonic=Entrez le nom du dossier : -FileChooser.cancelButtonToolTipText=Ferme la bo\u00EEte de dialogue du s\u00E9lecteur de fichiers. -FileChooser.saveButtonToolTipText=Enregistre le fichier s\u00E9lectionn\u00E9. -FileChooser.openButtonToolTipText=Ouvre le fichier s\u00E9lectionn\u00E9. -FileChooser.updateButtonToolTipText=Met \u00E0 jour la liste des r\u00E9pertoires. -FileChooser.helpButtonToolTipText=Aide du s\u00E9lecteur de fichiers +FileChooser.cancelButtonToolTip.textAndMnemonic=Ferme la bo\u00EEte de dialogue du s\u00E9lecteur de fichiers. +FileChooser.saveButtonToolTip.textAndMnemonic=Enregistre le fichier s\u00E9lectionn\u00E9. +FileChooser.openButtonToolTip.textAndMnemonic=Ouvre le fichier s\u00E9lectionn\u00E9. +FileChooser.updateButtonToolTip.textAndMnemonic=Met \u00E0 jour la liste des r\u00E9pertoires. +FileChooser.helpButtonToolTip.textAndMnemonic=Aide du s\u00E9lecteur de fichiers diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_it.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_it.properties index 9763045aee2..352a9d708cf 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_it.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_it.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=Annulla -FileChooser.saveButtonText=Salva -FileChooser.openButtonText=OK -FileChooser.saveDialogTitleText=Salva -FileChooser.openDialogTitleText=Apri -FileChooser.updateButtonText=Aggiorna -FileChooser.helpButtonText=? -FileChooser.pathLabelText=Percorso o nome cartella: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=Filtro -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=Cartelle -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=File -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=Nome file: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=Nome cartella: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=Annulla +FileChooser.saveButton.textAndMnemonic=Salva +FileChooser.openButton.textAndMnemonic=OK +FileChooser.saveDialogTitle.textAndMnemonic=Salva +FileChooser.openDialogTitle.textAndMnemonic=Apri +FileChooser.updateButton.textAndMnemonic=Aggiorna +FileChooser.helpButton.textAndMnemonic=? +FileChooser.pathLabel.textAndMnemonic=&Percorso o nome cartella: +FileChooser.filterLabel.textAndMnemonic=Filt&ro +FileChooser.foldersLabel.textAndMnemonic=Carte&lle +FileChooser.filesLabel.textAndMnemonic=F&ile +FileChooser.enterFileNameLabel.textAndMnemonic=&Nome file: +FileChooser.enterFolderNameLabel.textAndMnemonic=Nome cartella: -FileChooser.cancelButtonToolTipText=Chiude la finestra di dialogo di selezione file. -FileChooser.saveButtonToolTipText=Salva il file selezionato. -FileChooser.openButtonToolTipText=Apre il file selezionato. -FileChooser.updateButtonToolTipText=Aggiorna lista directory. -FileChooser.helpButtonToolTipText=Guida FileChooser. +FileChooser.cancelButtonToolTip.textAndMnemonic=Chiude la finestra di dialogo di selezione file. +FileChooser.saveButtonToolTip.textAndMnemonic=Salva il file selezionato. +FileChooser.openButtonToolTip.textAndMnemonic=Apre il file selezionato. +FileChooser.updateButtonToolTip.textAndMnemonic=Aggiorna lista directory. +FileChooser.helpButtonToolTip.textAndMnemonic=Guida FileChooser. diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ja.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ja.properties index 97b505b5741..9b28788a645 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ja.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ja.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=\u53D6\u6D88 -FileChooser.saveButtonText=\u4FDD\u5B58 -FileChooser.openButtonText=OK -FileChooser.saveDialogTitleText=\u4FDD\u5B58 -FileChooser.openDialogTitleText=\u958B\u304F -FileChooser.updateButtonText=\u66F4\u65B0 -FileChooser.helpButtonText=\u30D8\u30EB\u30D7 -FileChooser.pathLabelText=\u30D1\u30B9\u307E\u305F\u306F\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u5165\u529B: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=\u30D5\u30A3\u30EB\u30BF -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=\u30D5\u30A9\u30EB\u30C0 -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=\u30D5\u30A1\u30A4\u30EB -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u5165\u529B: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88 +FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58 +FileChooser.openButton.textAndMnemonic=OK +FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58 +FileChooser.openDialogTitle.textAndMnemonic=\u958B\u304F +FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0 +FileChooser.helpButton.textAndMnemonic=\u30D8\u30EB\u30D7 +FileChooser.pathLabel.textAndMnemonic=\u30D1\u30B9\u307E\u305F\u306F\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u5165\u529B(&P): +FileChooser.filterLabel.textAndMnemonic=\u30D5\u30A3\u30EB\u30BF(&R) +FileChooser.foldersLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0(&L) +FileChooser.filesLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB(&I) +FileChooser.enterFileNameLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B(&N): +FileChooser.enterFolderNameLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u5165\u529B: -FileChooser.cancelButtonToolTipText=\u30D5\u30A1\u30A4\u30EB\u30FB\u30C1\u30E5\u30FC\u30B6\u30FB\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002 -FileChooser.saveButtonToolTipText=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u5B58\u3057\u307E\u3059\u3002 -FileChooser.openButtonToolTipText=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304D\u307E\u3059\u3002 -FileChooser.updateButtonToolTipText=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30EA\u30B9\u30C8\u3092\u66F4\u65B0\u3057\u307E\u3059\u3002 -FileChooser.helpButtonToolTipText=FileChooser\u306E\u30D8\u30EB\u30D7\u3067\u3059\u3002 +FileChooser.cancelButtonToolTip.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u30FB\u30C1\u30E5\u30FC\u30B6\u30FB\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002 +FileChooser.saveButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u5B58\u3057\u307E\u3059\u3002 +FileChooser.openButtonToolTip.textAndMnemonic=\u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304D\u307E\u3059\u3002 +FileChooser.updateButtonToolTip.textAndMnemonic=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30EA\u30B9\u30C8\u3092\u66F4\u65B0\u3057\u307E\u3059\u3002 +FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser\u306E\u30D8\u30EB\u30D7\u3067\u3059\u3002 diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties index 61c06c6949d..f7e2625e9c9 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=\uCDE8\uC18C -FileChooser.saveButtonText=\uC800\uC7A5 -FileChooser.openButtonText=\uD655\uC778 -FileChooser.saveDialogTitleText=\uC800\uC7A5 -FileChooser.openDialogTitleText=\uC5F4\uAE30 -FileChooser.updateButtonText=\uAC31\uC2E0 -FileChooser.helpButtonText=\uB3C4\uC6C0\uB9D0 -FileChooser.pathLabelText=\uACBD\uB85C \uB610\uB294 \uD3F4\uB354 \uC774\uB984 \uC785\uB825: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=\uD544\uD130 -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=\uD3F4\uB354 -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=\uD30C\uC77C -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=\uD30C\uC77C \uC774\uB984 \uC785\uB825: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=\uD3F4\uB354 \uC774\uB984 \uC785\uB825: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=\uCDE8\uC18C +FileChooser.saveButton.textAndMnemonic=\uC800\uC7A5 +FileChooser.openButton.textAndMnemonic=\uD655\uC778 +FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5 +FileChooser.openDialogTitle.textAndMnemonic=\uC5F4\uAE30 +FileChooser.updateButton.textAndMnemonic=\uAC31\uC2E0 +FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0 +FileChooser.pathLabel.textAndMnemonic=\uACBD\uB85C \uB610\uB294 \uD3F4\uB354 \uC774\uB984 \uC785\uB825(&P): +FileChooser.filterLabel.textAndMnemonic=\uD544\uD130(&R) +FileChooser.foldersLabel.textAndMnemonic=\uD3F4\uB354(&L) +FileChooser.filesLabel.textAndMnemonic=\uD30C\uC77C(&I) +FileChooser.enterFileNameLabel.textAndMnemonic=\uD30C\uC77C \uC774\uB984 \uC785\uB825(&N): +FileChooser.enterFolderNameLabel.textAndMnemonic=\uD3F4\uB354 \uC774\uB984 \uC785\uB825: -FileChooser.cancelButtonToolTipText=\uD30C\uC77C \uC120\uD0DD\uAE30 \uB300\uD654\uC0C1\uC790\uB97C \uC911\uB2E8\uD569\uB2C8\uB2E4. -FileChooser.saveButtonToolTipText=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4. -FileChooser.openButtonToolTipText=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4. -FileChooser.updateButtonToolTipText=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D\uC744 \uAC31\uC2E0\uD569\uB2C8\uB2E4. -FileChooser.helpButtonToolTipText=FileChooser \uB3C4\uC6C0\uB9D0\uC785\uB2C8\uB2E4. +FileChooser.cancelButtonToolTip.textAndMnemonic=\uD30C\uC77C \uC120\uD0DD\uAE30 \uB300\uD654\uC0C1\uC790\uB97C \uC911\uB2E8\uD569\uB2C8\uB2E4. +FileChooser.saveButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4. +FileChooser.openButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uD30C\uC77C\uC744 \uC5FD\uB2C8\uB2E4. +FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D\uC744 \uAC31\uC2E0\uD569\uB2C8\uB2E4. +FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \uB3C4\uC6C0\uB9D0\uC785\uB2C8\uB2E4. diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties index 6e40ef51c06..a1af5396196 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=Cancelar -FileChooser.saveButtonText=Salvar -FileChooser.openButtonText=OK -FileChooser.saveDialogTitleText=Salvar -FileChooser.openDialogTitleText=Abrir -FileChooser.updateButtonText=Atualizar -FileChooser.helpButtonText=Ajuda -FileChooser.pathLabelText=Informar caminho ou nome da pasta: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=Filtro -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=Pastas -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=Arquivos -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=Informar nome do arquivo: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=Informar nome da pasta: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=Cancelar +FileChooser.saveButton.textAndMnemonic=Salvar +FileChooser.openButton.textAndMnemonic=OK +FileChooser.saveDialogTitle.textAndMnemonic=Salvar +FileChooser.openDialogTitle.textAndMnemonic=Abrir +FileChooser.updateButton.textAndMnemonic=Atualizar +FileChooser.helpButton.textAndMnemonic=Ajuda +FileChooser.pathLabel.textAndMnemonic=Informar caminho ou nome da &pasta: +FileChooser.filterLabel.textAndMnemonic=Filt&ro +FileChooser.foldersLabel.textAndMnemonic=Pastas(&L) +FileChooser.filesLabel.textAndMnemonic=Arqu&ivos +FileChooser.enterFileNameLabel.textAndMnemonic=I&nformar nome do arquivo: +FileChooser.enterFolderNameLabel.textAndMnemonic=Informar nome da pasta: -FileChooser.cancelButtonToolTipText=Abortar caixa de di\u00E1logo do seletor de arquivos. -FileChooser.saveButtonToolTipText=Salvar arquivo selecionado. -FileChooser.openButtonToolTipText=Abrir arquivo selecionado. -FileChooser.updateButtonToolTipText=Atualizar lista de diret\u00F3rios. -FileChooser.helpButtonToolTipText=Ajuda do FileChooser. +FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar caixa de di\u00E1logo do seletor de arquivos. +FileChooser.saveButtonToolTip.textAndMnemonic=Salvar arquivo selecionado. +FileChooser.openButtonToolTip.textAndMnemonic=Abrir arquivo selecionado. +FileChooser.updateButtonToolTip.textAndMnemonic=Atualizar lista de diret\u00F3rios. +FileChooser.helpButtonToolTip.textAndMnemonic=Ajuda do FileChooser. diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_sv.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_sv.properties index 4cd736baa9d..3592f4dca7e 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_sv.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_sv.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=Avbryt -FileChooser.saveButtonText=Spara -FileChooser.openButtonText=OK -FileChooser.saveDialogTitleText=Spara -FileChooser.openDialogTitleText=\u00D6ppna -FileChooser.updateButtonText=Uppdatera -FileChooser.helpButtonText=Hj\u00E4lp -FileChooser.pathLabelText=Ange s\u00F6kv\u00E4g eller mappnamn: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=Filter -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=Mappar -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=Filer -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=Ange filnamn: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=Ange ett mappnamn: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=Avbryt +FileChooser.saveButton.textAndMnemonic=Spara +FileChooser.openButton.textAndMnemonic=OK +FileChooser.saveDialogTitle.textAndMnemonic=Spara +FileChooser.openDialogTitle.textAndMnemonic=\u00D6ppna +FileChooser.updateButton.textAndMnemonic=Uppdatera +FileChooser.helpButton.textAndMnemonic=Hj\u00E4lp +FileChooser.pathLabel.textAndMnemonic=Ange s\u00F6kv\u00E4g eller mappnamn(&P): +FileChooser.filterLabel.textAndMnemonic=Filte&r +FileChooser.foldersLabel.textAndMnemonic=Mappar(&L) +FileChooser.filesLabel.textAndMnemonic=F&iler +FileChooser.enterFileNameLabel.textAndMnemonic=A&nge filnamn: +FileChooser.enterFolderNameLabel.textAndMnemonic=Ange ett mappnamn: -FileChooser.cancelButtonToolTipText=Avbryt dialogrutan Filv\u00E4ljare. -FileChooser.saveButtonToolTipText=Spara vald fil. -FileChooser.openButtonToolTipText=\u00D6ppna vald fil. -FileChooser.updateButtonToolTipText=Uppdatera kataloglistan. -FileChooser.helpButtonToolTipText=Hj\u00E4lp - Filv\u00E4ljare. +FileChooser.cancelButtonToolTip.textAndMnemonic=Avbryt dialogrutan Filv\u00E4ljare. +FileChooser.saveButtonToolTip.textAndMnemonic=Spara vald fil. +FileChooser.openButtonToolTip.textAndMnemonic=\u00D6ppna vald fil. +FileChooser.updateButtonToolTip.textAndMnemonic=Uppdatera kataloglistan. +FileChooser.helpButtonToolTip.textAndMnemonic=Hj\u00E4lp - Filv\u00E4ljare. diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties index 121fe60a8ff..c2c1ecdfc9f 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=\u53D6\u6D88 -FileChooser.saveButtonText=\u4FDD\u5B58 -FileChooser.openButtonText=\u786E\u5B9A -FileChooser.saveDialogTitleText=\u4FDD\u5B58 -FileChooser.openDialogTitleText=\u6253\u5F00 -FileChooser.updateButtonText=\u66F4\u65B0 -FileChooser.helpButtonText=\u5E2E\u52A9 -FileChooser.pathLabelText=\u952E\u5165\u8DEF\u5F84\u6216\u6587\u4EF6\u5939\u540D: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=\u7B5B\u9009\u5668 -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=\u6587\u4EF6\u5939 -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=\u6587\u4EF6 -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=\u952E\u5165\u6587\u4EF6\u540D: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=\u8F93\u5165\u6587\u4EF6\u5939\u540D: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88 +FileChooser.saveButton.textAndMnemonic=\u4FDD\u5B58 +FileChooser.openButton.textAndMnemonic=\u786E\u5B9A +FileChooser.saveDialogTitle.textAndMnemonic=\u4FDD\u5B58 +FileChooser.openDialogTitle.textAndMnemonic=\u6253\u5F00 +FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0 +FileChooser.helpButton.textAndMnemonic=\u5E2E\u52A9 +FileChooser.pathLabel.textAndMnemonic=\u952E\u5165\u8DEF\u5F84\u6216\u6587\u4EF6\u5939\u540D: (&P) +FileChooser.filterLabel.textAndMnemonic=\u7B5B\u9009\u5668(&R) +FileChooser.foldersLabel.textAndMnemonic=\u6587\u4EF6\u5939(&L) +FileChooser.filesLabel.textAndMnemonic=\u6587\u4EF6(&I) +FileChooser.enterFileNameLabel.textAndMnemonic=\u952E\u5165\u6587\u4EF6\u540D: (&N) +FileChooser.enterFolderNameLabel.textAndMnemonic=\u8F93\u5165\u6587\u4EF6\u5939\u540D: -FileChooser.cancelButtonToolTipText=\u4E2D\u6B62\u6587\u4EF6\u9009\u62E9\u5668\u5BF9\u8BDD\u6846\u3002 -FileChooser.saveButtonToolTipText=\u4FDD\u5B58\u6240\u9009\u6587\u4EF6\u3002 -FileChooser.openButtonToolTipText=\u6253\u5F00\u6240\u9009\u6587\u4EF6\u3002 -FileChooser.updateButtonToolTipText=\u66F4\u65B0\u76EE\u5F55\u5217\u8868\u3002 -FileChooser.helpButtonToolTipText=FileChooser \u5E2E\u52A9\u3002 +FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6587\u4EF6\u9009\u62E9\u5668\u5BF9\u8BDD\u6846\u3002 +FileChooser.saveButtonToolTip.textAndMnemonic=\u4FDD\u5B58\u6240\u9009\u6587\u4EF6\u3002 +FileChooser.openButtonToolTip.textAndMnemonic=\u6253\u5F00\u6240\u9009\u6587\u4EF6\u3002 +FileChooser.updateButtonToolTip.textAndMnemonic=\u66F4\u65B0\u76EE\u5F55\u5217\u8868\u3002 +FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \u5E2E\u52A9\u3002 diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties index 1b2d9d76c4b..6e77bbaf126 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties @@ -18,28 +18,23 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.acceptAllFileFilterText=* -FileChooser.cancelButtonText=\u53D6\u6D88 -FileChooser.saveButtonText=\u5132\u5B58 -FileChooser.openButtonText=\u78BA\u5B9A -FileChooser.saveDialogTitleText=\u5132\u5B58 -FileChooser.openDialogTitleText=\u958B\u555F -FileChooser.updateButtonText=\u66F4\u65B0 -FileChooser.helpButtonText=\u8AAA\u660E -FileChooser.pathLabelText=\u8F38\u5165\u8DEF\u5F91\u6216\u8CC7\u6599\u593E\u540D\u7A31: -FileChooser.pathLabelMnemonic=80 -FileChooser.filterLabelText=\u7BE9\u9078 -FileChooser.filterLabelMnemonic=82 -FileChooser.foldersLabelText=\u8CC7\u6599\u593E -FileChooser.foldersLabelMnemonic=76 -FileChooser.filesLabelText=\u6A94\u6848 -FileChooser.filesLabelMnemonic=73 -FileChooser.enterFileNameLabelText=\u8F38\u5165\u6A94\u6848\u540D\u7A31: -FileChooser.enterFileNameLabelMnemonic=78 -FileChooser.enterFolderNameLabelText=\u8F38\u5165\u8CC7\u6599\u593E\u540D\u7A31: +FileChooser.acceptAllFileFilter.textAndMnemonic=* +FileChooser.cancelButton.textAndMnemonic=\u53D6\u6D88 +FileChooser.saveButton.textAndMnemonic=\u5132\u5B58 +FileChooser.openButton.textAndMnemonic=\u78BA\u5B9A +FileChooser.saveDialogTitle.textAndMnemonic=\u5132\u5B58 +FileChooser.openDialogTitle.textAndMnemonic=\u958B\u555F +FileChooser.updateButton.textAndMnemonic=\u66F4\u65B0 +FileChooser.helpButton.textAndMnemonic=\u8AAA\u660E +FileChooser.pathLabel.textAndMnemonic=\u8F38\u5165\u8DEF\u5F91\u6216\u8CC7\u6599\u593E\u540D\u7A31(&P): +FileChooser.filterLabel.textAndMnemonic=\u7BE9\u9078(&R) +FileChooser.foldersLabel.textAndMnemonic=\u8CC7\u6599\u593E(&L) +FileChooser.filesLabel.textAndMnemonic=\u6A94\u6848(&I) +FileChooser.enterFileNameLabel.textAndMnemonic=\u8F38\u5165\u6A94\u6848\u540D\u7A31(&N): +FileChooser.enterFolderNameLabel.textAndMnemonic=\u8F38\u5165\u8CC7\u6599\u593E\u540D\u7A31: -FileChooser.cancelButtonToolTipText=\u4E2D\u6B62\u6A94\u6848\u9078\u64C7\u5668\u5C0D\u8A71\u65B9\u584A\u3002 -FileChooser.saveButtonToolTipText=\u5132\u5B58\u9078\u53D6\u7684\u6A94\u6848\u3002 -FileChooser.openButtonToolTipText=\u958B\u555F\u9078\u53D6\u7684\u6A94\u6848\u3002 -FileChooser.updateButtonToolTipText=\u66F4\u65B0\u76EE\u9304\u6E05\u55AE\u3002 -FileChooser.helpButtonToolTipText=\u300C\u6A94\u6848\u9078\u64C7\u5668\u300D\u8AAA\u660E\u3002 +FileChooser.cancelButtonToolTip.textAndMnemonic=\u4E2D\u6B62\u6A94\u6848\u9078\u64C7\u5668\u5C0D\u8A71\u65B9\u584A\u3002 +FileChooser.saveButtonToolTip.textAndMnemonic=\u5132\u5B58\u9078\u53D6\u7684\u6A94\u6848\u3002 +FileChooser.openButtonToolTip.textAndMnemonic=\u958B\u555F\u9078\u53D6\u7684\u6A94\u6848\u3002 +FileChooser.updateButtonToolTip.textAndMnemonic=\u66F4\u65B0\u76EE\u9304\u6E05\u55AE\u3002 +FileChooser.helpButtonToolTip.textAndMnemonic=\u300C\u6A94\u6848\u9078\u64C7\u5668\u300D\u8AAA\u660E\u3002 diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows.properties index 0f27244f37a..7f36db65a47 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=Look in: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=Save in: -FileChooser.fileNameLabelText=File name: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=Folder name: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=Files of type: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=Up One Level +FileChooser.lookInLabel.textAndMnemonic=Look &in: +FileChooser.saveInLabel.textAndMnemonic=Save in: +FileChooser.fileNameLabel.textAndMnemonic=File &name: +FileChooser.folderNameLabel.textAndMnemonic=Folder &name: +FileChooser.filesOfTypeLabel.textAndMnemonic=Files of &type: +FileChooser.upFolderToolTip.textAndMnemonic=Up One Level FileChooser.upFolderAccessibleName=Up -FileChooser.homeFolderToolTipText=Home +FileChooser.homeFolderToolTip.textAndMnemonic=Home FileChooser.homeFolderAccessibleName=Home -FileChooser.newFolderToolTipText=Create New Folder +FileChooser.newFolderToolTip.textAndMnemonic=Create New Folder FileChooser.newFolderAccessibleName=New Folder -FileChooser.newFolderActionLabelText=New Folder -FileChooser.listViewButtonToolTipText=List +FileChooser.newFolderActionLabel.textAndMnemonic=New Folder +FileChooser.listViewButtonToolTip.textAndMnemonic=List FileChooser.listViewButtonAccessibleName=List -FileChooser.listViewActionLabelText=List -FileChooser.detailsViewButtonToolTipText=Details +FileChooser.listViewActionLabel.textAndMnemonic=List +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details FileChooser.detailsViewButtonAccessibleName=Details FileChooser.viewMenuButtonToolTipText = View Menu FileChooser.viewMenuButtonAccessibleName = View Menu -FileChooser.detailsViewActionLabelText=Details -FileChooser.refreshActionLabelText=Refresh -FileChooser.viewMenuLabelText=View -FileChooser.fileNameHeaderText=Name -FileChooser.fileSizeHeaderText=Size -FileChooser.fileTypeHeaderText=Type -FileChooser.fileDateHeaderText=Modified -FileChooser.fileAttrHeaderText=Attributes +FileChooser.detailsViewActionLabel.textAndMnemonic=Details +FileChooser.refreshActionLabel.textAndMnemonic=Refresh +FileChooser.viewMenuLabel.textAndMnemonic=View +FileChooser.fileNameHeader.textAndMnemonic=Name +FileChooser.fileSizeHeader.textAndMnemonic=Size +FileChooser.fileTypeHeader.textAndMnemonic=Type +FileChooser.fileDateHeader.textAndMnemonic=Modified +FileChooser.fileAttrHeader.textAndMnemonic=Attributes diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_de.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_de.properties index b9d8c341f47..0fb04994737 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_de.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_de.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=Suchen in: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=Speichern in: -FileChooser.fileNameLabelText=Dateiname: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=Ordnername: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=Dateityp: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=Eine Ebene h\u00F6her +FileChooser.lookInLabel.textAndMnemonic=Suchen &in: +FileChooser.saveInLabel.textAndMnemonic=Speichern in: +FileChooser.fileNameLabel.textAndMnemonic=Datei&name: +FileChooser.folderNameLabel.textAndMnemonic=Ord&nername: +FileChooser.filesOfTypeLabel.textAndMnemonic=Da&teityp: +FileChooser.upFolderToolTip.textAndMnemonic=Eine Ebene h\u00F6her FileChooser.upFolderAccessibleName=Nach oben -FileChooser.homeFolderToolTipText=Home +FileChooser.homeFolderToolTip.textAndMnemonic=Home FileChooser.homeFolderAccessibleName=Home -FileChooser.newFolderToolTipText=Neuen Ordner erstellen +FileChooser.newFolderToolTip.textAndMnemonic=Neuen Ordner erstellen FileChooser.newFolderAccessibleName=Neuer Ordner -FileChooser.newFolderActionLabelText=Neuer Ordner -FileChooser.listViewButtonToolTipText=Liste +FileChooser.newFolderActionLabel.textAndMnemonic=Neuer Ordner +FileChooser.listViewButtonToolTip.textAndMnemonic=Liste FileChooser.listViewButtonAccessibleName=Liste -FileChooser.listViewActionLabelText=Liste -FileChooser.detailsViewButtonToolTipText=Details +FileChooser.listViewActionLabel.textAndMnemonic=Liste +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Details FileChooser.detailsViewButtonAccessibleName=Details FileChooser.viewMenuButtonToolTipText = Ansichtsmen\u00FC FileChooser.viewMenuButtonAccessibleName = Ansichtsmen\u00FC -FileChooser.detailsViewActionLabelText=Details -FileChooser.refreshActionLabelText=Aktualisieren -FileChooser.viewMenuLabelText=Ansicht -FileChooser.fileNameHeaderText=Name -FileChooser.fileSizeHeaderText=Gr\u00F6\u00DFe -FileChooser.fileTypeHeaderText=Typ -FileChooser.fileDateHeaderText=Ge\u00E4ndert -FileChooser.fileAttrHeaderText=Attribute +FileChooser.detailsViewActionLabel.textAndMnemonic=Details +FileChooser.refreshActionLabel.textAndMnemonic=Aktualisieren +FileChooser.viewMenuLabel.textAndMnemonic=Ansicht +FileChooser.fileNameHeader.textAndMnemonic=Name +FileChooser.fileSizeHeader.textAndMnemonic=Gr\u00F6\u00DFe +FileChooser.fileTypeHeader.textAndMnemonic=Typ +FileChooser.fileDateHeader.textAndMnemonic=Ge\u00E4ndert +FileChooser.fileAttrHeader.textAndMnemonic=Attribute diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_es.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_es.properties index d7b610e746d..4e68630f090 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_es.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_es.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=Buscar en: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=Guardar en: -FileChooser.fileNameLabelText=Nombre de Archivo: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=Nombre de la Carpeta: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=Archivos de Tipo: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=Subir un Nivel +FileChooser.lookInLabel.textAndMnemonic=Buscar en(&I): +FileChooser.saveInLabel.textAndMnemonic=Guardar en: +FileChooser.fileNameLabel.textAndMnemonic=&Nombre de Archivo: +FileChooser.folderNameLabel.textAndMnemonic=&Nombre de la Carpeta: +FileChooser.filesOfTypeLabel.textAndMnemonic=Archivos de &Tipo: +FileChooser.upFolderToolTip.textAndMnemonic=Subir un Nivel FileChooser.upFolderAccessibleName=Arriba -FileChooser.homeFolderToolTipText=Inicio +FileChooser.homeFolderToolTip.textAndMnemonic=Inicio FileChooser.homeFolderAccessibleName=Inicio -FileChooser.newFolderToolTipText=Crear Nueva Carpeta +FileChooser.newFolderToolTip.textAndMnemonic=Crear Nueva Carpeta FileChooser.newFolderAccessibleName=Nueva Carpeta -FileChooser.newFolderActionLabelText=Nueva Carpeta -FileChooser.listViewButtonToolTipText=Lista +FileChooser.newFolderActionLabel.textAndMnemonic=Nueva Carpeta +FileChooser.listViewButtonToolTip.textAndMnemonic=Lista FileChooser.listViewButtonAccessibleName=Lista -FileChooser.listViewActionLabelText=Lista -FileChooser.detailsViewButtonToolTipText=Detalles +FileChooser.listViewActionLabel.textAndMnemonic=Lista +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalles FileChooser.detailsViewButtonAccessibleName=Detalles FileChooser.viewMenuButtonToolTipText = Men\u00FA Ver FileChooser.viewMenuButtonAccessibleName = Men\u00FA Ver -FileChooser.detailsViewActionLabelText=Detalles -FileChooser.refreshActionLabelText=Refrescar -FileChooser.viewMenuLabelText=Ver -FileChooser.fileNameHeaderText=Nombre -FileChooser.fileSizeHeaderText=Tama\u00F1o -FileChooser.fileTypeHeaderText=Tipo -FileChooser.fileDateHeaderText=Modificado -FileChooser.fileAttrHeaderText=Atributos +FileChooser.detailsViewActionLabel.textAndMnemonic=Detalles +FileChooser.refreshActionLabel.textAndMnemonic=Refrescar +FileChooser.viewMenuLabel.textAndMnemonic=Ver +FileChooser.fileNameHeader.textAndMnemonic=Nombre +FileChooser.fileSizeHeader.textAndMnemonic=Tama\u00F1o +FileChooser.fileTypeHeader.textAndMnemonic=Tipo +FileChooser.fileDateHeader.textAndMnemonic=Modificado +FileChooser.fileAttrHeader.textAndMnemonic=Atributos diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties index 39736484777..b410f5f4926 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=Rechercher dans : -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=Enregistrer dans : -FileChooser.fileNameLabelText=Nom du fichier : -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=Nom du dossier : -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=Fichiers de type : -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=Remonte d'un niveau. +FileChooser.lookInLabel.textAndMnemonic=Rechercher dans (&I): +FileChooser.saveInLabel.textAndMnemonic=Enregistrer dans : +FileChooser.fileNameLabel.textAndMnemonic=&Nom du fichier : +FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier : +FileChooser.filesOfTypeLabel.textAndMnemonic=Fichiers de &type : +FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau. FileChooser.upFolderAccessibleName=Monter -FileChooser.homeFolderToolTipText=R\u00E9pertoire d'origine +FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine -FileChooser.newFolderToolTipText=Cr\u00E9e un dossier. +FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier. FileChooser.newFolderAccessibleName=Nouveau dossier -FileChooser.newFolderActionLabelText=Nouveau dossier -FileChooser.listViewButtonToolTipText=Liste +FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier +FileChooser.listViewButtonToolTip.textAndMnemonic=Liste FileChooser.listViewButtonAccessibleName=Liste -FileChooser.listViewActionLabelText=Liste -FileChooser.detailsViewButtonToolTipText=D\u00E9tails +FileChooser.listViewActionLabel.textAndMnemonic=Liste +FileChooser.detailsViewButtonToolTip.textAndMnemonic=D\u00E9tails FileChooser.detailsViewButtonAccessibleName=D\u00E9tails FileChooser.viewMenuButtonToolTipText = Menu Affichage FileChooser.viewMenuButtonAccessibleName = Menu Affichage -FileChooser.detailsViewActionLabelText=D\u00E9tails -FileChooser.refreshActionLabelText=Actualiser -FileChooser.viewMenuLabelText=Affichage -FileChooser.fileNameHeaderText=Nom -FileChooser.fileSizeHeaderText=Taille -FileChooser.fileTypeHeaderText=Type -FileChooser.fileDateHeaderText=Modifi\u00E9 -FileChooser.fileAttrHeaderText=Attributs +FileChooser.detailsViewActionLabel.textAndMnemonic=D\u00E9tails +FileChooser.refreshActionLabel.textAndMnemonic=Actualiser +FileChooser.viewMenuLabel.textAndMnemonic=Affichage +FileChooser.fileNameHeader.textAndMnemonic=Nom +FileChooser.fileSizeHeader.textAndMnemonic=Taille +FileChooser.fileTypeHeader.textAndMnemonic=Type +FileChooser.fileDateHeader.textAndMnemonic=Modifi\u00E9 +FileChooser.fileAttrHeader.textAndMnemonic=Attributs diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_it.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_it.properties index 5e3e6f12634..dc9e9c02a98 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_it.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_it.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=Cerca in: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=Salva in: -FileChooser.fileNameLabelText=Nome file: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=Nome della cartella: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=Tipo file: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=Cartella superiore +FileChooser.lookInLabel.textAndMnemonic=Cerca &in: +FileChooser.saveInLabel.textAndMnemonic=Salva in: +FileChooser.fileNameLabel.textAndMnemonic=&Nome file: +FileChooser.folderNameLabel.textAndMnemonic=&Nome della cartella: +FileChooser.filesOfTypeLabel.textAndMnemonic=&Tipo file: +FileChooser.upFolderToolTip.textAndMnemonic=Cartella superiore FileChooser.upFolderAccessibleName=Superiore -FileChooser.homeFolderToolTipText=Home +FileChooser.homeFolderToolTip.textAndMnemonic=Home FileChooser.homeFolderAccessibleName=Home -FileChooser.newFolderToolTipText=Crea nuova cartella +FileChooser.newFolderToolTip.textAndMnemonic=Crea nuova cartella FileChooser.newFolderAccessibleName=Nuova cartella -FileChooser.newFolderActionLabelText=Nuova cartella -FileChooser.listViewButtonToolTipText=Lista +FileChooser.newFolderActionLabel.textAndMnemonic=Nuova cartella +FileChooser.listViewButtonToolTip.textAndMnemonic=Lista FileChooser.listViewButtonAccessibleName=Lista -FileChooser.listViewActionLabelText=Lista -FileChooser.detailsViewButtonToolTipText=Dettagli +FileChooser.listViewActionLabel.textAndMnemonic=Lista +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Dettagli FileChooser.detailsViewButtonAccessibleName=Dettagli FileChooser.viewMenuButtonToolTipText = Visualizza menu FileChooser.viewMenuButtonAccessibleName = Visualizza menu -FileChooser.detailsViewActionLabelText=Dettagli -FileChooser.refreshActionLabelText=Aggiorna -FileChooser.viewMenuLabelText=Visualizza -FileChooser.fileNameHeaderText=Nome -FileChooser.fileSizeHeaderText=Dimensioni -FileChooser.fileTypeHeaderText=Tipo -FileChooser.fileDateHeaderText=Modificato -FileChooser.fileAttrHeaderText=Attributi +FileChooser.detailsViewActionLabel.textAndMnemonic=Dettagli +FileChooser.refreshActionLabel.textAndMnemonic=Aggiorna +FileChooser.viewMenuLabel.textAndMnemonic=Visualizza +FileChooser.fileNameHeader.textAndMnemonic=Nome +FileChooser.fileSizeHeader.textAndMnemonic=Dimensioni +FileChooser.fileTypeHeader.textAndMnemonic=Tipo +FileChooser.fileDateHeader.textAndMnemonic=Modificato +FileChooser.fileAttrHeader.textAndMnemonic=Attributi diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ja.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ja.properties index adc5d930d69..edeaac2e862 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ja.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ja.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=\u53C2\u7167: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=\u4FDD\u5B58: -FileChooser.fileNameLabelText=\u30D5\u30A1\u30A4\u30EB\u540D: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=\u30D5\u30A9\u30EB\u30C0\u540D: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=\u30D5\u30A1\u30A4\u30EB\u306E\u30BF\u30A4\u30D7: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=1\u30EC\u30D9\u30EB\u4E0A\u3078 +FileChooser.lookInLabel.textAndMnemonic=\u53C2\u7167(&I): +FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58: +FileChooser.fileNameLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u540D(&N): +FileChooser.folderNameLabel.textAndMnemonic=\u30D5\u30A9\u30EB\u30C0\u540D(&N): +FileChooser.filesOfTypeLabel.textAndMnemonic=\u30D5\u30A1\u30A4\u30EB\u306E\u30BF\u30A4\u30D7(&T): +FileChooser.upFolderToolTip.textAndMnemonic=1\u30EC\u30D9\u30EB\u4E0A\u3078 FileChooser.upFolderAccessibleName=\u4E0A\u3078 -FileChooser.homeFolderToolTipText=\u30DB\u30FC\u30E0 +FileChooser.homeFolderToolTip.textAndMnemonic=\u30DB\u30FC\u30E0 FileChooser.homeFolderAccessibleName=\u30DB\u30FC\u30E0 -FileChooser.newFolderToolTipText=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210 +FileChooser.newFolderToolTip.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210 FileChooser.newFolderAccessibleName=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0 -FileChooser.newFolderActionLabelText=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0 -FileChooser.listViewButtonToolTipText=\u30EA\u30B9\u30C8 +FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0 +FileChooser.listViewButtonToolTip.textAndMnemonic=\u30EA\u30B9\u30C8 FileChooser.listViewButtonAccessibleName=\u30EA\u30B9\u30C8 -FileChooser.listViewActionLabelText=\u30EA\u30B9\u30C8 -FileChooser.detailsViewButtonToolTipText=\u8A73\u7D30 +FileChooser.listViewActionLabel.textAndMnemonic=\u30EA\u30B9\u30C8 +FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30 FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30 FileChooser.viewMenuButtonToolTipText = \u8868\u793A\u30E1\u30CB\u30E5\u30FC FileChooser.viewMenuButtonAccessibleName = \u8868\u793A\u30E1\u30CB\u30E5\u30FC -FileChooser.detailsViewActionLabelText=\u8A73\u7D30 -FileChooser.refreshActionLabelText=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5 -FileChooser.viewMenuLabelText=\u8868\u793A -FileChooser.fileNameHeaderText=\u540D\u524D -FileChooser.fileSizeHeaderText=\u30B5\u30A4\u30BA -FileChooser.fileTypeHeaderText=\u30BF\u30A4\u30D7 -FileChooser.fileDateHeaderText=\u4FEE\u6B63\u65E5 -FileChooser.fileAttrHeaderText=\u5C5E\u6027 +FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30 +FileChooser.refreshActionLabel.textAndMnemonic=\u30EA\u30D5\u30EC\u30C3\u30B7\u30E5 +FileChooser.viewMenuLabel.textAndMnemonic=\u8868\u793A +FileChooser.fileNameHeader.textAndMnemonic=\u540D\u524D +FileChooser.fileSizeHeader.textAndMnemonic=\u30B5\u30A4\u30BA +FileChooser.fileTypeHeader.textAndMnemonic=\u30BF\u30A4\u30D7 +FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6B63\u65E5 +FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027 diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ko.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ko.properties index 6922556c77e..94a1054bcef 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ko.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_ko.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=\uAC80\uC0C9 \uC704\uCE58: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=\uC800\uC7A5 \uC704\uCE58: -FileChooser.fileNameLabelText=\uD30C\uC77C \uC774\uB984: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=\uD3F4\uB354 \uC774\uB984: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=\uD30C\uC77C \uC720\uD615: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=\uD55C \uB808\uBCA8 \uC704\uB85C +FileChooser.lookInLabel.textAndMnemonic=\uAC80\uC0C9 \uC704\uCE58(&I): +FileChooser.saveInLabel.textAndMnemonic=\uC800\uC7A5 \uC704\uCE58: +FileChooser.fileNameLabel.textAndMnemonic=\uD30C\uC77C \uC774\uB984(&N): +FileChooser.folderNameLabel.textAndMnemonic=\uD3F4\uB354 \uC774\uB984(&N): +FileChooser.filesOfTypeLabel.textAndMnemonic=\uD30C\uC77C \uC720\uD615(&T): +FileChooser.upFolderToolTip.textAndMnemonic=\uD55C \uB808\uBCA8 \uC704\uB85C FileChooser.upFolderAccessibleName=\uC704\uB85C -FileChooser.homeFolderToolTipText=\uD648 +FileChooser.homeFolderToolTip.textAndMnemonic=\uD648 FileChooser.homeFolderAccessibleName=\uD648 -FileChooser.newFolderToolTipText=\uC0C8 \uD3F4\uB354 \uC0DD\uC131 +FileChooser.newFolderToolTip.textAndMnemonic=\uC0C8 \uD3F4\uB354 \uC0DD\uC131 FileChooser.newFolderAccessibleName=\uC0C8 \uD3F4\uB354 -FileChooser.newFolderActionLabelText=\uC0C8 \uD3F4\uB354 -FileChooser.listViewButtonToolTipText=\uBAA9\uB85D +FileChooser.newFolderActionLabel.textAndMnemonic=\uC0C8 \uD3F4\uB354 +FileChooser.listViewButtonToolTip.textAndMnemonic=\uBAA9\uB85D FileChooser.listViewButtonAccessibleName=\uBAA9\uB85D -FileChooser.listViewActionLabelText=\uBAA9\uB85D -FileChooser.detailsViewButtonToolTipText=\uC138\uBD80 \uC815\uBCF4 +FileChooser.listViewActionLabel.textAndMnemonic=\uBAA9\uB85D +FileChooser.detailsViewButtonToolTip.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4 FileChooser.detailsViewButtonAccessibleName=\uC138\uBD80 \uC815\uBCF4 FileChooser.viewMenuButtonToolTipText = \uBCF4\uAE30 \uBA54\uB274 FileChooser.viewMenuButtonAccessibleName = \uBCF4\uAE30 \uBA54\uB274 -FileChooser.detailsViewActionLabelText=\uC138\uBD80 \uC815\uBCF4 -FileChooser.refreshActionLabelText=\uC0C8\uB85C \uACE0\uCE68 -FileChooser.viewMenuLabelText=\uBCF4\uAE30 -FileChooser.fileNameHeaderText=\uC774\uB984 -FileChooser.fileSizeHeaderText=\uD06C\uAE30 -FileChooser.fileTypeHeaderText=\uC720\uD615 -FileChooser.fileDateHeaderText=\uC218\uC815 \uB0A0\uC9DC -FileChooser.fileAttrHeaderText=\uC18D\uC131 +FileChooser.detailsViewActionLabel.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4 +FileChooser.refreshActionLabel.textAndMnemonic=\uC0C8\uB85C \uACE0\uCE68 +FileChooser.viewMenuLabel.textAndMnemonic=\uBCF4\uAE30 +FileChooser.fileNameHeader.textAndMnemonic=\uC774\uB984 +FileChooser.fileSizeHeader.textAndMnemonic=\uD06C\uAE30 +FileChooser.fileTypeHeader.textAndMnemonic=\uC720\uD615 +FileChooser.fileDateHeader.textAndMnemonic=\uC218\uC815 \uB0A0\uC9DC +FileChooser.fileAttrHeader.textAndMnemonic=\uC18D\uC131 diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties index 7faf8c19c80..44ecb60ed6e 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=Consultar em: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=Salvar em: -FileChooser.fileNameLabelText=Nome do arquivo: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=Nome da pasta: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=Arquivos do tipo: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=Um N\u00EDvel Acima +FileChooser.lookInLabel.textAndMnemonic=Consultar em(&I): +FileChooser.saveInLabel.textAndMnemonic=Salvar em: +FileChooser.fileNameLabel.textAndMnemonic=&Nome do arquivo: +FileChooser.folderNameLabel.textAndMnemonic=&Nome da pasta: +FileChooser.filesOfTypeLabel.textAndMnemonic=Arquivos do &tipo: +FileChooser.upFolderToolTip.textAndMnemonic=Um N\u00EDvel Acima FileChooser.upFolderAccessibleName=Acima -FileChooser.homeFolderToolTipText=In\u00EDcio +FileChooser.homeFolderToolTip.textAndMnemonic=In\u00EDcio FileChooser.homeFolderAccessibleName=In\u00EDcio -FileChooser.newFolderToolTipText=Criar Nova Pasta +FileChooser.newFolderToolTip.textAndMnemonic=Criar Nova Pasta FileChooser.newFolderAccessibleName=Nova Pasta -FileChooser.newFolderActionLabelText=Nova Pasta -FileChooser.listViewButtonToolTipText=Lista +FileChooser.newFolderActionLabel.textAndMnemonic=Nova Pasta +FileChooser.listViewButtonToolTip.textAndMnemonic=Lista FileChooser.listViewButtonAccessibleName=Lista -FileChooser.listViewActionLabelText=Lista -FileChooser.detailsViewButtonToolTipText=Detalhes +FileChooser.listViewActionLabel.textAndMnemonic=Lista +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detalhes FileChooser.detailsViewButtonAccessibleName=Detalhes FileChooser.viewMenuButtonToolTipText = Exibir Menu FileChooser.viewMenuButtonAccessibleName = Exibir Menu -FileChooser.detailsViewActionLabelText=Detalhes -FileChooser.refreshActionLabelText=Atualizar -FileChooser.viewMenuLabelText=Exibir -FileChooser.fileNameHeaderText=Nome -FileChooser.fileSizeHeaderText=Tamanho -FileChooser.fileTypeHeaderText=Tipo -FileChooser.fileDateHeaderText=Modificado -FileChooser.fileAttrHeaderText=Atributos +FileChooser.detailsViewActionLabel.textAndMnemonic=Detalhes +FileChooser.refreshActionLabel.textAndMnemonic=Atualizar +FileChooser.viewMenuLabel.textAndMnemonic=Exibir +FileChooser.fileNameHeader.textAndMnemonic=Nome +FileChooser.fileSizeHeader.textAndMnemonic=Tamanho +FileChooser.fileTypeHeader.textAndMnemonic=Tipo +FileChooser.fileDateHeader.textAndMnemonic=Modificado +FileChooser.fileAttrHeader.textAndMnemonic=Atributos diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_sv.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_sv.properties index 4e83498093f..e44a096a29e 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_sv.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_sv.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=Leta i: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=Spara i: -FileChooser.fileNameLabelText=Filnamn: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=Mapp: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=Filformat: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=Upp en niv\u00E5 +FileChooser.lookInLabel.textAndMnemonic=Leta &i: +FileChooser.saveInLabel.textAndMnemonic=Spara i: +FileChooser.fileNameLabel.textAndMnemonic=Fil&namn: +FileChooser.folderNameLabel.textAndMnemonic=Mapp(&N): +FileChooser.filesOfTypeLabel.textAndMnemonic=Filforma&t: +FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5 FileChooser.upFolderAccessibleName=Upp -FileChooser.homeFolderToolTipText=Hem +FileChooser.homeFolderToolTip.textAndMnemonic=Hem FileChooser.homeFolderAccessibleName=Hem -FileChooser.newFolderToolTipText=Skapa ny mapp +FileChooser.newFolderToolTip.textAndMnemonic=Skapa ny mapp FileChooser.newFolderAccessibleName=Ny mapp -FileChooser.newFolderActionLabelText=Ny mapp -FileChooser.listViewButtonToolTipText=Lista +FileChooser.newFolderActionLabel.textAndMnemonic=Ny mapp +FileChooser.listViewButtonToolTip.textAndMnemonic=Lista FileChooser.listViewButtonAccessibleName=Lista -FileChooser.listViewActionLabelText=Lista -FileChooser.detailsViewButtonToolTipText=Detaljer +FileChooser.listViewActionLabel.textAndMnemonic=Lista +FileChooser.detailsViewButtonToolTip.textAndMnemonic=Detaljer FileChooser.detailsViewButtonAccessibleName=Detaljer FileChooser.viewMenuButtonToolTipText = Menyn Visa FileChooser.viewMenuButtonAccessibleName = Menyn Visa -FileChooser.detailsViewActionLabelText=Detaljer -FileChooser.refreshActionLabelText=F\u00F6rnya -FileChooser.viewMenuLabelText=Vy -FileChooser.fileNameHeaderText=Namn -FileChooser.fileSizeHeaderText=Storlek -FileChooser.fileTypeHeaderText=Typ -FileChooser.fileDateHeaderText=\u00C4ndrad -FileChooser.fileAttrHeaderText=Attribut +FileChooser.detailsViewActionLabel.textAndMnemonic=Detaljer +FileChooser.refreshActionLabel.textAndMnemonic=F\u00F6rnya +FileChooser.viewMenuLabel.textAndMnemonic=Vy +FileChooser.fileNameHeader.textAndMnemonic=Namn +FileChooser.fileSizeHeader.textAndMnemonic=Storlek +FileChooser.fileTypeHeader.textAndMnemonic=Typ +FileChooser.fileDateHeader.textAndMnemonic=\u00C4ndrad +FileChooser.fileAttrHeader.textAndMnemonic=Attribut diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties index 3a4c0cd6942..3dfa7533aa3 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=\u67E5\u770B: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=\u4FDD\u5B58: -FileChooser.fileNameLabelText=\u6587\u4EF6\u540D: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=\u6587\u4EF6\u5939\u540D: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=\u6587\u4EF6\u7C7B\u578B: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=\u5411\u4E0A\u4E00\u7EA7 +FileChooser.lookInLabel.textAndMnemonic=\u67E5\u770B: (&I) +FileChooser.saveInLabel.textAndMnemonic=\u4FDD\u5B58: +FileChooser.fileNameLabel.textAndMnemonic=\u6587\u4EF6\u540D: (&N) +FileChooser.folderNameLabel.textAndMnemonic=\u6587\u4EF6\u5939\u540D: (&N) +FileChooser.filesOfTypeLabel.textAndMnemonic=\u6587\u4EF6\u7C7B\u578B: (&T) +FileChooser.upFolderToolTip.textAndMnemonic=\u5411\u4E0A\u4E00\u7EA7 FileChooser.upFolderAccessibleName=\u5411\u4E0A -FileChooser.homeFolderToolTipText=\u4E3B\u76EE\u5F55 +FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u5F55 FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u5F55 -FileChooser.newFolderToolTipText=\u521B\u5EFA\u65B0\u6587\u4EF6\u5939 +FileChooser.newFolderToolTip.textAndMnemonic=\u521B\u5EFA\u65B0\u6587\u4EF6\u5939 FileChooser.newFolderAccessibleName=\u65B0\u5EFA\u6587\u4EF6\u5939 -FileChooser.newFolderActionLabelText=\u65B0\u5EFA\u6587\u4EF6\u5939 -FileChooser.listViewButtonToolTipText=\u5217\u8868 +FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u5EFA\u6587\u4EF6\u5939 +FileChooser.listViewButtonToolTip.textAndMnemonic=\u5217\u8868 FileChooser.listViewButtonAccessibleName=\u5217\u8868 -FileChooser.listViewActionLabelText=\u5217\u8868 -FileChooser.detailsViewButtonToolTipText=\u8BE6\u7EC6\u8D44\u6599 +FileChooser.listViewActionLabel.textAndMnemonic=\u5217\u8868 +FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8BE6\u7EC6\u8D44\u6599 FileChooser.detailsViewButtonAccessibleName=\u8BE6\u7EC6\u8D44\u6599 FileChooser.viewMenuButtonToolTipText = \u67E5\u770B\u83DC\u5355 FileChooser.viewMenuButtonAccessibleName = \u67E5\u770B\u83DC\u5355 -FileChooser.detailsViewActionLabelText=\u8BE6\u7EC6\u8D44\u6599 -FileChooser.refreshActionLabelText=\u5237\u65B0 -FileChooser.viewMenuLabelText=\u89C6\u56FE -FileChooser.fileNameHeaderText=\u540D\u79F0 -FileChooser.fileSizeHeaderText=\u5927\u5C0F -FileChooser.fileTypeHeaderText=\u7C7B\u578B -FileChooser.fileDateHeaderText=\u4FEE\u6539\u65E5\u671F -FileChooser.fileAttrHeaderText=\u5C5E\u6027 +FileChooser.detailsViewActionLabel.textAndMnemonic=\u8BE6\u7EC6\u8D44\u6599 +FileChooser.refreshActionLabel.textAndMnemonic=\u5237\u65B0 +FileChooser.viewMenuLabel.textAndMnemonic=\u89C6\u56FE +FileChooser.fileNameHeader.textAndMnemonic=\u540D\u79F0 +FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F +FileChooser.fileTypeHeader.textAndMnemonic=\u7C7B\u578B +FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F +FileChooser.fileAttrHeader.textAndMnemonic=\u5C5E\u6027 diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties index e4c8ad0c081..099caadda8c 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties @@ -18,34 +18,30 @@ ############ FILE CHOOSER STRINGS ############# -FileChooser.lookInLabelText=\u67E5\u8A62: -FileChooser.lookInLabelMnemonic=73 -FileChooser.saveInLabelText=\u5132\u5B58\u65BC: -FileChooser.fileNameLabelText=\u6A94\u6848\u540D\u7A31: -FileChooser.fileNameLabelMnemonic=78 -FileChooser.folderNameLabelText=\u8CC7\u6599\u593E\u540D\u7A31: -FileChooser.folderNameLabelMnemonic=78 -FileChooser.filesOfTypeLabelText=\u6A94\u6848\u985E\u578B: -FileChooser.filesOfTypeLabelMnemonic=84 -FileChooser.upFolderToolTipText=\u5F80\u4E0A\u4E00\u5C64 +FileChooser.lookInLabel.textAndMnemonic=\u67E5\u8A62(&I): +FileChooser.saveInLabel.textAndMnemonic=\u5132\u5B58\u65BC: +FileChooser.fileNameLabel.textAndMnemonic=\u6A94\u6848\u540D\u7A31(&N): +FileChooser.folderNameLabel.textAndMnemonic=\u8CC7\u6599\u593E\u540D\u7A31(&N): +FileChooser.filesOfTypeLabel.textAndMnemonic=\u6A94\u6848\u985E\u578B(&T): +FileChooser.upFolderToolTip.textAndMnemonic=\u5F80\u4E0A\u4E00\u5C64 FileChooser.upFolderAccessibleName=\u5F80\u4E0A -FileChooser.homeFolderToolTipText=\u4E3B\u76EE\u9304 +FileChooser.homeFolderToolTip.textAndMnemonic=\u4E3B\u76EE\u9304 FileChooser.homeFolderAccessibleName=\u4E3B\u76EE\u9304 -FileChooser.newFolderToolTipText=\u5EFA\u7ACB\u65B0\u8CC7\u6599\u593E +FileChooser.newFolderToolTip.textAndMnemonic=\u5EFA\u7ACB\u65B0\u8CC7\u6599\u593E FileChooser.newFolderAccessibleName=\u65B0\u8CC7\u6599\u593E -FileChooser.newFolderActionLabelText=\u65B0\u8CC7\u6599\u593E -FileChooser.listViewButtonToolTipText=\u6E05\u55AE +FileChooser.newFolderActionLabel.textAndMnemonic=\u65B0\u8CC7\u6599\u593E +FileChooser.listViewButtonToolTip.textAndMnemonic=\u6E05\u55AE FileChooser.listViewButtonAccessibleName=\u6E05\u55AE -FileChooser.listViewActionLabelText=\u6E05\u55AE -FileChooser.detailsViewButtonToolTipText=\u8A73\u7D30\u8CC7\u8A0A +FileChooser.listViewActionLabel.textAndMnemonic=\u6E05\u55AE +FileChooser.detailsViewButtonToolTip.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A FileChooser.detailsViewButtonAccessibleName=\u8A73\u7D30\u8CC7\u8A0A FileChooser.viewMenuButtonToolTipText = \u6AA2\u8996\u529F\u80FD\u8868 FileChooser.viewMenuButtonAccessibleName = \u6AA2\u8996\u529F\u80FD\u8868 -FileChooser.detailsViewActionLabelText=\u8A73\u7D30\u8CC7\u8A0A -FileChooser.refreshActionLabelText=\u91CD\u65B0\u6574\u7406 -FileChooser.viewMenuLabelText=\u6AA2\u8996 -FileChooser.fileNameHeaderText=\u540D\u7A31 -FileChooser.fileSizeHeaderText=\u5927\u5C0F -FileChooser.fileTypeHeaderText=\u985E\u578B -FileChooser.fileDateHeaderText=\u4FEE\u6539\u65E5\u671F -FileChooser.fileAttrHeaderText=\u5C6C\u6027 +FileChooser.detailsViewActionLabel.textAndMnemonic=\u8A73\u7D30\u8CC7\u8A0A +FileChooser.refreshActionLabel.textAndMnemonic=\u91CD\u65B0\u6574\u7406 +FileChooser.viewMenuLabel.textAndMnemonic=\u6AA2\u8996 +FileChooser.fileNameHeader.textAndMnemonic=\u540D\u7A31 +FileChooser.fileSizeHeader.textAndMnemonic=\u5927\u5C0F +FileChooser.fileTypeHeader.textAndMnemonic=\u985E\u578B +FileChooser.fileDateHeader.textAndMnemonic=\u4FEE\u6539\u65E5\u671F +FileChooser.fileAttrHeader.textAndMnemonic=\u5C6C\u6027 diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java index 5cf2456bdf1..fd644bf759e 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java @@ -653,8 +653,8 @@ class Attribute implements Comparable { return fixups[0]; // return ref-bearing cookie, if any } - public String layoutForPackageMajver(int majver) { - if (majver <= JAVA5_PACKAGE_MAJOR_VERSION) { + public String layoutForClassVersion(Package.Version vers) { + if (vers.lessThan(JAVA6_MAX_CLASS_VERSION)) { // Disallow layout syntax in the oldest protocol version. return expandCaseDashNotation(layout); } diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java index a63491b9a34..f3d5cec8e48 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java @@ -74,30 +74,27 @@ class BandStructure { abstract protected Index getCPIndex(byte tag); - // Local copy of package version. - private int packageMajver = -1; + // Local copy of highest class version. + private Package.Version highestClassVersion = null; /** Call this exactly once, early, to specify the archive major version. */ - public void initPackageMajver(int packageMajver) throws IOException { - assert(packageMajver > 0 && packageMajver < 0x10000); - if (this.packageMajver > 0) { + public void initHighestClassVersion(Package.Version highestClassVersion) throws IOException { + if (this.highestClassVersion != null) { throw new IOException( - "Package majver is already initialized to " + this.packageMajver+ - "; new setting is " + packageMajver); + "Highest class major version is already initialized to " + + this.highestClassVersion + "; new setting is " + highestClassVersion); } - this.packageMajver = packageMajver; - adjustToMajver(); + this.highestClassVersion = highestClassVersion; + adjustToClassVersion(); } - public int getPackageMajver() { - if (packageMajver < 0) { - throw new RuntimeException("Package majver not yet initialized"); - } - return packageMajver; + + public Package.Version getHighestClassVersion() { + return highestClassVersion; } private final boolean isReader = this instanceof PackageReader; - protected BandStructure() { - } + + protected BandStructure() {} final static Coding BYTE1 = Coding.of(1,256); @@ -1866,20 +1863,12 @@ class BandStructure { attrClassFileVersionMask = (1< 0) Utils.log.fine("Legacy package version"); // Revoke definition of pre-1.6 attribute type. undefineAttribute(CODE_ATTR_StackMapTable, ATTR_CONTEXT_CODE); } - if (getPackageMajver() < JAVA7_PACKAGE_MAJOR_VERSION) { - if (testBit(archiveOptions, AO_HAVE_CP_EXTRAS)) - // this bit was reserved for future use in previous versions - throw new IOException("Format bits for Java 7 must be zero in previous releases"); - } - if (testBit(archiveOptions, AO_UNUSED_MBZ)) { - throw new IOException("High archive option bits are reserved and must be zero: "+Integer.toHexString(archiveOptions)); - } } protected void initAttrIndexLimit() { @@ -1942,21 +1931,14 @@ class BandStructure { } } - protected Attribute makeClassFileVersionAttr(int minver, int majver) { - byte[] bytes = { - (byte)(minver >> 8), (byte)minver, - (byte)(majver >> 8), (byte)majver - }; - return attrClassFileVersion.addContent(bytes); + protected Attribute makeClassFileVersionAttr(Package.Version ver) { + return attrClassFileVersion.addContent(ver.asBytes()); } - protected short[] parseClassFileVersionAttr(Attribute attr) { + protected Package.Version parseClassFileVersionAttr(Attribute attr) { assert(attr.layout() == attrClassFileVersion); assert(attr.size() == 4); - byte[] bytes = attr.bytes(); - int minver = ((bytes[0] & 0xFF) << 8) | (bytes[1] & 0xFF); - int majver = ((bytes[2] & 0xFF) << 8) | (bytes[3] & 0xFF); - return new short[]{ (short) minver, (short) majver }; + return Package.Version.of(attr.bytes()); } private boolean assertBandOKForElems(Band[] ab, Attribute.Layout.Element[] elems) { diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java index 545faab9127..2ca2d0926c6 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java @@ -174,27 +174,31 @@ class ClassReader { ("Bad magic number in class file " +Integer.toHexString(cls.magic), ATTR_CONTEXT_CLASS, "magic-number", "pass"); - cls.minver = (short) readUnsignedShort(); - cls.majver = (short) readUnsignedShort(); + int minver = (short) readUnsignedShort(); + int majver = (short) readUnsignedShort(); + cls.version = Package.Version.of(majver, minver); + //System.out.println("ClassFile.version="+cls.majver+"."+cls.minver); - String bad = checkVersion(cls.majver, cls.minver); + String bad = checkVersion(cls.version); if (bad != null) { throw new Attribute.FormatException ("classfile version too "+bad+": " - +cls.majver+"."+cls.minver+" in "+cls.file, + +cls.version+" in "+cls.file, ATTR_CONTEXT_CLASS, "version", "pass"); } } - private String checkVersion(int majver, int minver) { - if (majver < pkg.min_class_majver || - (majver == pkg.min_class_majver && - minver < pkg.min_class_minver)) { + private String checkVersion(Package.Version ver) { + int majver = ver.major; + int minver = ver.minor; + if (majver < pkg.minClassVersion.major || + (majver == pkg.minClassVersion.major && + minver < pkg.minClassVersion.minor)) { return "small"; } - if (majver > pkg.max_class_majver || - (majver == pkg.max_class_majver && - minver > pkg.max_class_minver)) { + if (majver > pkg.maxClassVersion.major || + (majver == pkg.maxClassVersion.major && + minver > pkg.maxClassVersion.minor)) { return "large"; } return null; // OK diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassWriter.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassWriter.java index dacae44b4d3..deb66252a23 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassWriter.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassWriter.java @@ -113,8 +113,8 @@ class ClassWriter { void writeMagicNumbers() throws IOException { writeInt(cls.magic); - writeShort(cls.minver); - writeShort(cls.majver); + writeShort(cls.version.minor); + writeShort(cls.version.major); } void writeConstantPool() throws IOException { diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java index c7fa00e0f18..c4c3a8f3abb 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java @@ -43,30 +43,40 @@ class Constants { 1.0 to 1.3.X 45,3 1.4 to 1.4.X 46,0 1.5 to 1.5.X 49,0 - 1.6 to 1.5.x 50,0 NOTE Assumed for now + 1.6 to 1.5.x 50,0 + 1.7 to 1.6.x 51,0 */ - public final static short JAVA_MIN_CLASS_MAJOR_VERSION = 45; - public final static short JAVA_MIN_CLASS_MINOR_VERSION = 03; + public final static Package.Version JAVA_MIN_CLASS_VERSION = + Package.Version.of(45, 03); - public final static short JAVA5_MAX_CLASS_MAJOR_VERSION = 49; - public final static short JAVA5_MAX_CLASS_MINOR_VERSION = 0; + public final static Package.Version JAVA5_MAX_CLASS_VERSION = + Package.Version.of(49, 00); - public final static short JAVA6_MAX_CLASS_MAJOR_VERSION = 50; - public final static short JAVA6_MAX_CLASS_MINOR_VERSION = 0; + public final static Package.Version JAVA6_MAX_CLASS_VERSION = + Package.Version.of(50, 00); - public final static short JAVA7_MAX_CLASS_MAJOR_VERSION = 51; - public final static short JAVA7_MAX_CLASS_MINOR_VERSION = 0; + public final static Package.Version JAVA7_MAX_CLASS_VERSION = + Package.Version.of(51, 00); public final static int JAVA_PACKAGE_MAGIC = 0xCAFED00D; - public final static int JAVA5_PACKAGE_MAJOR_VERSION = 150; - public final static int JAVA5_PACKAGE_MINOR_VERSION = 7; - public final static int JAVA6_PACKAGE_MAJOR_VERSION = 160; - public final static int JAVA6_PACKAGE_MINOR_VERSION = 1; + public final static Package.Version JAVA5_PACKAGE_VERSION = + Package.Version.of(150, 7); - public final static int JAVA7_PACKAGE_MAJOR_VERSION = 170; - public final static int JAVA7_PACKAGE_MINOR_VERSION = 1; + public final static Package.Version JAVA6_PACKAGE_VERSION = + Package.Version.of(160, 1); + + public final static Package.Version JAVA7_PACKAGE_VERSION = + Package.Version.of(170, 1); + + // upper limit, should point to the latest class version + public final static Package.Version JAVA_MAX_CLASS_VERSION = + JAVA7_MAX_CLASS_VERSION; + + // upper limit should point to the latest package version, for version info!. + public final static Package.Version MAX_PACKAGE_VERSION = + JAVA7_PACKAGE_VERSION; public final static int CONSTANT_POOL_INDEX_LIMIT = 0x10000; public final static int CONSTANT_POOL_NARROW_LIMIT = 0x00100; diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java index f2ab7f0f1d4..7ecbca05ef2 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,6 +35,8 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.text.MessageFormat; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -380,14 +382,15 @@ class Driver { String prefix = base.getName(); if (prefix.length() < 3) prefix += "tmp"; - File where = base.getParentFile(); + File where = (base.getParentFile() == null && suffix.equals(".bak")) + ? new File(".").getAbsoluteFile() + : base.getParentFile(); - if ( base.getParentFile() == null && suffix.equals(".bak")) - where = new File(".").getAbsoluteFile(); + Path tmpfile = (where == null) + ? Files.createTempFile(prefix, suffix) + : Files.createTempFile(where.toPath(), prefix, suffix); - - File f = File.createTempFile(prefix, suffix, where); - return f; + return tmpfile.toFile(); } static private diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java index fee97f4d964..64f9db5c309 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java @@ -25,6 +25,7 @@ package com.sun.java.util.jar.pack; +import java.util.jar.Pack200; import com.sun.java.util.jar.pack.Attribute.Layout; import com.sun.java.util.jar.pack.ConstantPool.ClassEntry; import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry; @@ -67,46 +68,58 @@ class Package { verbose = pmap.getInteger(Utils.DEBUG_VERBOSE); } - int magic; - int package_minver; - int package_majver; + final int magic = JAVA_PACKAGE_MAGIC; int default_modtime = NO_MODTIME; int default_options = 0; // FO_DEFLATE_HINT - short default_class_majver = -1; // fill in later - short default_class_minver = 0; // fill in later + Version defaultClassVersion = null; // These fields can be adjusted by driver properties. - short min_class_majver = JAVA_MIN_CLASS_MAJOR_VERSION; - short min_class_minver = JAVA_MIN_CLASS_MINOR_VERSION; - short max_class_majver = JAVA7_MAX_CLASS_MAJOR_VERSION; - short max_class_minver = JAVA7_MAX_CLASS_MINOR_VERSION; + final Version minClassVersion; + final Version maxClassVersion; + // null, indicates that consensus rules during package write + final Version packageVersion; + + Version observedHighestClassVersion = null; - short observed_max_class_majver = min_class_majver; - short observed_max_class_minver = min_class_minver; // What constants are used in this unit? ConstantPool.IndexGroup cp = new ConstantPool.IndexGroup(); - Package() { - magic = JAVA_PACKAGE_MAGIC; - package_minver = -1; // fill in later - package_majver = 0; // fill in later + /* + * typically used by the PackageReader to set the defaults, in which + * case we take the defaults. + */ + public Package() { + minClassVersion = JAVA_MIN_CLASS_VERSION; + maxClassVersion = JAVA_MAX_CLASS_VERSION; + packageVersion = null; } - public - void reset() { + + /* + * Typically used by the PackerImpl during before packing, the defaults are + * overridden by the users preferences. + */ + public Package(Version minClassVersion, Version maxClassVersion, Version packageVersion) { + // Fill in permitted range of major/minor version numbers. + this.minClassVersion = minClassVersion == null + ? JAVA_MIN_CLASS_VERSION + : minClassVersion; + this.maxClassVersion = maxClassVersion == null + ? JAVA_MAX_CLASS_VERSION + : maxClassVersion; + this.packageVersion = packageVersion; + } + + + public void reset() { cp = new ConstantPool.IndexGroup(); classes.clear(); files.clear(); BandStructure.nextSeqForDebug = 0; - package_minver = -1; // fill in later - package_majver = 0; // fill in later - } - - int getPackageVersion() { - return (package_majver << 16) + package_minver; + observedHighestClassVersion = null; } // Special empty versions of Code and InnerClasses, used for markers. @@ -128,73 +141,31 @@ class Package { attrDefs = Collections.unmodifiableMap(ad); } - int getDefaultClassVersion() { - return (default_class_majver << 16) + (char)default_class_minver; + Version getDefaultClassVersion() { + return defaultClassVersion; } /** Return the highest version number of all classes, * or 0 if there are no classes. */ - int getHighestClassVersion() { - int res = 0; // initial low value + private void setHighestClassVersion() { + if (observedHighestClassVersion != null) + return; + Version res = JAVA_MIN_CLASS_VERSION; // initial low value for (Class cls : classes) { - int ver = cls.getVersion(); - if (res < ver) res = ver; + Version ver = cls.getVersion(); + if (res.lessThan(ver)) res = ver; } - return res; + observedHighestClassVersion = res; } - /** Convenience function to choose an archive version based - * on the class file versions observed within the archive. - */ - void choosePackageVersion() { - assert(package_majver <= 0); // do not call this twice - int classver = getHighestClassVersion(); - if (classver == 0 || (classver >>> 16) < JAVA6_MAX_CLASS_MAJOR_VERSION) { - // There are only old classfiles in this segment or resources - package_majver = JAVA5_PACKAGE_MAJOR_VERSION; - package_minver = JAVA5_PACKAGE_MINOR_VERSION; - } else if ((classver >>> 16) == JAVA6_MAX_CLASS_MAJOR_VERSION) { - package_majver = JAVA6_PACKAGE_MAJOR_VERSION; - package_minver = JAVA6_PACKAGE_MINOR_VERSION; - } else { - // Normal case. Use the newest archive format, when available - package_majver = JAVA7_PACKAGE_MAJOR_VERSION; - package_minver = JAVA7_PACKAGE_MINOR_VERSION; - } + Version getHighestClassVersion() { + setHighestClassVersion(); + return observedHighestClassVersion; } // What Java classes are in this unit? - // Fixed 6211177, converted to throw IOException - void checkVersion() throws IOException { - if (magic != JAVA_PACKAGE_MAGIC) { - String gotMag = Integer.toHexString(magic); - String expMag = Integer.toHexString(JAVA_PACKAGE_MAGIC); - throw new IOException("Unexpected package magic number: got "+gotMag+"; expected "+expMag); - } - int[] majminFound = null; - for (int[] majmin : new int[][]{ - { JAVA7_PACKAGE_MAJOR_VERSION, JAVA7_PACKAGE_MINOR_VERSION }, - { JAVA6_PACKAGE_MAJOR_VERSION, JAVA6_PACKAGE_MINOR_VERSION }, - { JAVA5_PACKAGE_MAJOR_VERSION, JAVA5_PACKAGE_MINOR_VERSION } - }) { - if (package_majver == majmin[0] && package_minver == majmin[1]) { - majminFound = majmin; - break; - } - } - if (majminFound == null) { - String gotVer = package_majver+"."+package_minver; - String expVer = JAVA7_PACKAGE_MAJOR_VERSION+"."+JAVA7_PACKAGE_MINOR_VERSION+ - " OR "+ - JAVA6_PACKAGE_MAJOR_VERSION+"."+JAVA6_PACKAGE_MINOR_VERSION+ - " OR "+ - JAVA5_PACKAGE_MAJOR_VERSION+"."+JAVA5_PACKAGE_MINOR_VERSION; - throw new IOException("Unexpected package minor version: got "+gotVer+"; expected "+expVer); - } - } - ArrayList classes = new ArrayList<>(); public List getClasses() { @@ -210,7 +181,7 @@ class Package { // File header int magic; - short minver, majver; + Version version; // Local constant pool (one-way mapping of index => package cp). Entry[] cpMap; @@ -231,8 +202,7 @@ class Package { Class(int flags, ClassEntry thisClass, ClassEntry superClass, ClassEntry[] interfaces) { this.magic = JAVA_MAGIC; - this.minver = default_class_minver; - this.majver = default_class_majver; + this.version = defaultClassVersion; this.flags = flags; this.thisClass = thisClass; this.superClass = superClass; @@ -254,11 +224,8 @@ class Package { return thisClass.stringValue(); } - int getVersion() { - return (majver << 16) + (char)minver; - } - String getVersionString() { - return versionStringOf(majver, minver); + Version getVersion() { + return this.version; } // Note: equals and hashCode are identity-based. @@ -1182,13 +1149,6 @@ class Package { } } - public static String versionStringOf(int majver, int minver) { - return majver+"."+minver; - } - public static String versionStringOf(int version) { - return versionStringOf(version >>> 16, (char)version); - } - public void stripConstantFields() { for (Class c : classes) { for (Iterator j = c.fields.iterator(); j.hasNext(); ) { @@ -1342,4 +1302,75 @@ class Package { static final List noFields = Arrays.asList(new Class.Field[0]); static final List noMethods = Arrays.asList(new Class.Method[0]); static final List noInnerClasses = Arrays.asList(new InnerClass[0]); + + protected static final class Version { + + public final short major; + public final short minor; + + private Version(short major, short minor) { + this.major = major; + this.minor = minor; + } + + public String toString() { + return major + "." + minor; + } + + public boolean equals(Object that) { + return that instanceof Version + && major == ((Version)that).major + && minor == ((Version)that).minor; + } + + public int intValue() { + return (major << 16) + minor; + } + + public int hashCode() { + return (major << 16) + 7 + minor; + } + + public static Version of(int major, int minor) { + return new Version((short)major, (short)minor); + } + + public static Version of(byte[] bytes) { + int minor = ((bytes[0] & 0xFF) << 8) | (bytes[1] & 0xFF); + int major = ((bytes[2] & 0xFF) << 8) | (bytes[3] & 0xFF); + return new Version((short)major, (short)minor); + } + + public static Version of(int major_minor) { + short minor = (short)major_minor; + short major = (short)(major_minor >>> 16); + return new Version(major, minor); + } + + public static Version makeVersion(PropMap props, String partialKey) { + int min = props.getInteger(Utils.COM_PREFIX + + partialKey + ".minver", -1); + int maj = props.getInteger(Utils.COM_PREFIX + + partialKey + ".majver", -1); + return min >= 0 && maj >= 0 ? Version.of(maj, min) : null; + } + public byte[] asBytes() { + byte[] bytes = { + (byte) (minor >> 8), (byte) minor, + (byte) (major >> 8), (byte) major + }; + return bytes; + } + public int compareTo(Version that) { + return this.intValue() - that.intValue(); + } + + public boolean lessThan(Version that) { + return compareTo(that) < 0 ; + } + + public boolean greaterThan(Version that) { + return compareTo(that) > 0 ; + } + } } diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java index 8813b5e3f25..26bade85c5d 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java @@ -60,6 +60,7 @@ class PackageReader extends BandStructure { Package pkg; byte[] bytes; LimitedBuffer in; + Package.Version packageVersion; PackageReader(Package pkg, InputStream in) throws IOException { this.pkg = pkg; @@ -220,7 +221,6 @@ class PackageReader extends BandStructure { final static int MAGIC_BYTES = 4; void readArchiveMagic() throws IOException { - // Read a minimum of bytes in the first gulp. in.setReadLimit(MAGIC_BYTES + AH_LENGTH_MIN); @@ -230,10 +230,38 @@ class PackageReader extends BandStructure { archive_magic.readFrom(in); // read and check magic numbers: - pkg.magic = getMagicInt32(); + int magic = getMagicInt32(); + if (pkg.magic != magic) { + throw new IOException("Unexpected package magic number: got " + + magic + "; expected " + pkg.magic); + } archive_magic.doneDisbursing(); } + // Fixed 6211177, converted to throw IOException + void checkArchiveVersion() throws IOException { + Package.Version versionFound = null; + for (Package.Version v : new Package.Version[] { + JAVA7_PACKAGE_VERSION, + JAVA6_PACKAGE_VERSION, + JAVA5_PACKAGE_VERSION + }) { + if (packageVersion.equals(v)) { + versionFound = v; + break; + } + } + if (versionFound == null) { + String expVer = JAVA7_PACKAGE_VERSION.toString() + + " OR " + + JAVA6_PACKAGE_VERSION.toString() + + " OR " + + JAVA5_PACKAGE_VERSION.toString(); + throw new IOException("Unexpected package minor version: got " + + packageVersion.toString() + "; expected " + expVer); + } + } + void readArchiveHeader() throws IOException { // archive_header: // #archive_minver :UNSIGNED5[1] @@ -264,10 +292,11 @@ class PackageReader extends BandStructure { archive_header_0.expectLength(AH_LENGTH_0); archive_header_0.readFrom(in); - pkg.package_minver = archive_header_0.getInt(); - pkg.package_majver = archive_header_0.getInt(); - pkg.checkVersion(); - this.initPackageMajver(pkg.package_majver); + int minver = archive_header_0.getInt(); + int majver = archive_header_0.getInt(); + packageVersion = Package.Version.of(majver, minver); + checkArchiveVersion(); + this.initHighestClassVersion(JAVA7_MAX_CLASS_VERSION); archiveOptions = archive_header_0.getInt(); archive_header_0.doneDisbursing(); @@ -324,8 +353,9 @@ class PackageReader extends BandStructure { numInnerClasses = archive_header_1.getInt(); - pkg.default_class_minver = (short) archive_header_1.getInt(); - pkg.default_class_majver = (short) archive_header_1.getInt(); + minver = (short) archive_header_1.getInt(); + majver = (short) archive_header_1.getInt(); + pkg.defaultClassVersion = Package.Version.of(majver, minver); numClasses = archive_header_1.getInt(); archive_header_1.doneDisbursing(); @@ -414,7 +444,7 @@ class PackageReader extends BandStructure { } void checkLegacy(String bandname) { - if (this.pkg.package_majver < JAVA7_PACKAGE_MAJOR_VERSION) { + if (packageVersion.lessThan(JAVA7_PACKAGE_VERSION)) { throw new RuntimeException("unexpected band " + bandname); } } @@ -947,9 +977,9 @@ class PackageReader extends BandStructure { name.stringValue(), layout.stringValue()); // Check layout string for Java 6 extensions. - String pvLayout = def.layoutForPackageMajver(getPackageMajver()); + String pvLayout = def.layoutForClassVersion(getHighestClassVersion()); if (!pvLayout.equals(def.layout())) { - throw new IOException("Bad attribute layout in version 150 archive: "+def.layout()); + throw new IOException("Bad attribute layout in archive: "+def.layout()); } this.setAttributeLayoutIndex(def, index); if (dump != null) dump.println(index+" "+def); @@ -1140,12 +1170,9 @@ class PackageReader extends BandStructure { Attribute retroVersion = cls.getAttribute(attrClassFileVersion); if (retroVersion != null) { cls.removeAttribute(retroVersion); - short[] minmajver = parseClassFileVersionAttr(retroVersion); - cls.minver = minmajver[0]; - cls.majver = minmajver[1]; + cls.version = parseClassFileVersionAttr(retroVersion); } else { - cls.minver = pkg.default_class_minver; - cls.majver = pkg.default_class_majver; + cls.version = pkg.defaultClassVersion; } // Replace null SourceFile by "obvious" string. diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java index d40a6d3889e..a4a29826135 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java @@ -49,12 +49,13 @@ import static com.sun.java.util.jar.pack.Constants.*; class PackageWriter extends BandStructure { Package pkg; OutputStream finalOut; + Package.Version packageVersion; PackageWriter(Package pkg, OutputStream out) throws IOException { this.pkg = pkg; this.finalOut = out; - // Caller has specified archive version in the package: - initPackageMajver(pkg.package_majver); + // Caller has specified maximum class file version in the package: + initHighestClassVersion(pkg.getHighestClassVersion()); } void write() throws IOException { @@ -118,6 +119,57 @@ class PackageWriter extends BandStructure { collectInnerClasses(); } + /* + * Convenience function to choose an archive version based + * on the class file versions observed within the archive + * or set the user defined version preset via properties. + */ + void chooseDefaultPackageVersion() throws IOException { + if (pkg.packageVersion != null) { + packageVersion = pkg.packageVersion; + if (verbose > 0) { + Utils.log.info("package version overridden with: " + + packageVersion); + } + return; + } + + Package.Version highV = getHighestClassVersion(); + // set the package version now + if (highV.lessThan(JAVA6_MAX_CLASS_VERSION)) { + // There are only old classfiles in this segment or resources + packageVersion = JAVA5_PACKAGE_VERSION; + } else if (highV.equals(JAVA6_MAX_CLASS_VERSION) || + (highV.equals(JAVA7_MAX_CLASS_VERSION) && !pkg.cp.haveExtraTags())) { + // force down the package version if we have jdk7 classes without + // any Indy references, this is because jdk7 class file (52.0) without + // Indy is identical to jdk6 class file (51.0). + packageVersion = JAVA6_PACKAGE_VERSION; + } else { + // Normal case. Use the newest archive format, when available + packageVersion = JAVA7_PACKAGE_VERSION; + } + + if (verbose > 0) { + Utils.log.info("Highest version class file: " + highV + + " package version: " + packageVersion); + } + } + + void checkVersion() throws IOException { + assert(packageVersion != null); + + if (packageVersion.lessThan(JAVA7_PACKAGE_VERSION)) { + // this bit was reserved for future use in previous versions + if (testBit(archiveOptions, AO_HAVE_CP_EXTRAS)) { + throw new IOException("Format bits for Java 7 must be zero in previous releases"); + } + } + if (testBit(archiveOptions, AO_UNUSED_MBZ)) { + throw new IOException("High archive option bits are reserved and must be zero: " + Integer.toHexString(archiveOptions)); + } + } + void setArchiveOptions() { // Decide on some archive options early. // Does not decide on: AO_HAVE_SPECIAL_FORMATS, @@ -168,11 +220,11 @@ class PackageWriter extends BandStructure { } } // Decide on default version number (majority rule). - Map verCounts = new HashMap<>(); + Map verCounts = new HashMap<>(); int bestCount = 0; - int bestVersion = -1; + Package.Version bestVersion = null; for (Class cls : pkg.classes) { - int version = cls.getVersion(); + Package.Version version = cls.getVersion(); int[] var = verCounts.get(version); if (var == null) { var = new int[1]; @@ -186,28 +238,22 @@ class PackageWriter extends BandStructure { } } verCounts.clear(); - if (bestVersion == -1) bestVersion = 0; // degenerate case - int bestMajver = (char)(bestVersion >>> 16); - int bestMinver = (char)(bestVersion); - pkg.default_class_majver = (short) bestMajver; - pkg.default_class_minver = (short) bestMinver; - String bestVerStr = Package.versionStringOf(bestMajver, bestMinver); + if (bestVersion == null) bestVersion = JAVA_MIN_CLASS_VERSION; // degenerate case + pkg.defaultClassVersion = bestVersion; if (verbose > 0) - Utils.log.info("Consensus version number in segment is "+bestVerStr); + Utils.log.info("Consensus version number in segment is " + bestVersion); if (verbose > 0) - Utils.log.info("Highest version number in segment is "+ - Package.versionStringOf(pkg.getHighestClassVersion())); + Utils.log.info("Highest version number in segment is " + + pkg.getHighestClassVersion()); // Now add explicit pseudo-attrs. to classes with odd versions. for (Class cls : pkg.classes) { - if (cls.getVersion() != bestVersion) { - Attribute a = makeClassFileVersionAttr(cls.minver, cls.majver); + if (!cls.getVersion().equals(bestVersion)) { + Attribute a = makeClassFileVersionAttr(cls.getVersion()); if (verbose > 1) { - String clsVer = cls.getVersionString(); - String pkgVer = bestVerStr; - Utils.log.fine("Version "+clsVer+" of "+cls - +" doesn't match package version " - +pkgVer); + Utils.log.fine("Version "+cls.getVersion() + " of " + cls + + " doesn't match package version " + + bestVersion); } // Note: Does not add in "natural" order. (Who cares?) cls.addAttribute(a); @@ -252,7 +298,7 @@ class PackageWriter extends BandStructure { } void writeFileHeader() throws IOException { - pkg.checkVersion(); + chooseDefaultPackageVersion(); writeArchiveMagic(); writeArchiveHeader(); } @@ -322,12 +368,13 @@ class PackageWriter extends BandStructure { if (haveCPExtra) headerSizeForDebug += AH_CP_EXTRA_LEN; - assert(pkg.package_majver > 0); // caller must specify! - archive_header_0.putInt(pkg.package_minver); - archive_header_0.putInt(pkg.package_majver); + // the archiveOptions are all initialized, sanity check now!. + checkVersion(); + + archive_header_0.putInt(packageVersion.minor); + archive_header_0.putInt(packageVersion.major); if (verbose > 0) - Utils.log.info("Package Version for this segment:"+ - Package.versionStringOf(pkg.getPackageVersion())); + Utils.log.info("Package Version for this segment:" + packageVersion); archive_header_0.putInt(archiveOptions); // controls header format assert(archive_header_0.length() == AH_LENGTH_0); @@ -361,8 +408,8 @@ class PackageWriter extends BandStructure { writeConstantPoolCounts(haveNumbers, haveCPExtra); archive_header_1.putInt(pkg.getAllInnerClasses().size()); - archive_header_1.putInt(pkg.default_class_minver); - archive_header_1.putInt(pkg.default_class_majver); + archive_header_1.putInt(pkg.defaultClassVersion.minor); + archive_header_1.putInt(pkg.defaultClassVersion.major); archive_header_1.putInt(pkg.classes.size()); // Sanity: Make sure we came out to 29 (less optional fields): @@ -892,7 +939,7 @@ class PackageWriter extends BandStructure { if (predefIndex == null) { // Make sure the package CP can name the local attribute. Entry ne = ConstantPool.getUtf8Entry(def.name()); - String layout = def.layoutForPackageMajver(getPackageMajver()); + String layout = def.layoutForClassVersion(getHighestClassVersion()); Entry le = ConstantPool.getUtf8Entry(layout); requiredEntries.add(ne); requiredEntries.add(le); @@ -988,7 +1035,7 @@ class PackageWriter extends BandStructure { assert((header & ADH_CONTEXT_MASK) == def.ctype()); attr_definition_headers.putByte(header); attr_definition_name.putRef(ConstantPool.getUtf8Entry(def.name())); - String layout = def.layoutForPackageMajver(getPackageMajver()); + String layout = def.layoutForClassVersion(getHighestClassVersion()); attr_definition_layout.putRef(ConstantPool.getUtf8Entry(layout)); // Check that we are transmitting that correct attribute index: boolean debug = false; @@ -1542,8 +1589,8 @@ class PackageWriter extends BandStructure { break; default: // CONSTANT_MethodHandle, etc. - if (getPackageMajver() < JAVA7_PACKAGE_MAJOR_VERSION) { - throw new IOException("bad package major version for Java 7 ldc"); + if (getHighestClassVersion().lessThan(JAVA7_MAX_CLASS_VERSION)) { + throw new IOException("bad class file major version for Java 7 ldc"); } bc_which = bc_loadablevalueref; switch (bc) { @@ -1581,8 +1628,8 @@ class PackageWriter extends BandStructure { // Make sure the discarded bytes are sane: assert(i.getConstant() == (1+((MemberEntry)ref).descRef.typeRef.computeSize(true)) << 8); } else if (bc == _invokedynamic) { - if (getPackageMajver() < JAVA7_PACKAGE_MAJOR_VERSION) { - throw new IOException("bad package major version for Java 7 invokedynamic"); + if (getHighestClassVersion().lessThan(JAVA7_MAX_CLASS_VERSION)) { + throw new IOException("bad class major version for Java 7 invokedynamic"); } assert(i.getLength() == 5); assert(i.getConstant() == 0); // last 2 bytes MBZ diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java index 93b743bcdc7..c7ef4ee2013 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -164,8 +164,11 @@ public class PackerImpl extends TLGlobals implements Pack200.Packer { if (verbose > 0) Utils.log.info(props.toString()); } - // Here's where the bits are collected before getting packed: - final Package pkg = new Package(); + // Here's where the bits are collected before getting packed, we also + // initialize the version numbers now. + final Package pkg = new Package(Package.Version.makeVersion(props, "min.class"), + Package.Version.makeVersion(props, "max.class"), + Package.Version.makeVersion(props, "package")); final String unknownAttrCommand; { @@ -279,23 +282,6 @@ public class PackerImpl extends TLGlobals implements Pack200.Packer { if (verbose > 0) Utils.log.info("passFiles = " + passFiles); } - { - // Fill in permitted range of major/minor version numbers. - int ver; - if ((ver = props.getInteger(Utils.COM_PREFIX+"min.class.majver")) != 0) - pkg.min_class_majver = (short) ver; - if ((ver = props.getInteger(Utils.COM_PREFIX+"min.class.minver")) != 0) - pkg.min_class_minver = (short) ver; - if ((ver = props.getInteger(Utils.COM_PREFIX+"max.class.majver")) != 0) - pkg.max_class_majver = (short) ver; - if ((ver = props.getInteger(Utils.COM_PREFIX+"max.class.minver")) != 0) - pkg.max_class_minver = (short) ver; - if ((ver = props.getInteger(Utils.COM_PREFIX+"package.minver")) != 0) - pkg.package_minver = (short) ver; - if ((ver = props.getInteger(Utils.COM_PREFIX+"package.majver")) != 0) - pkg.package_majver = (short) ver; - } - { // Hook for testing: Forces use of special archive modes. int opt = props.getInteger(Utils.COM_PREFIX+"archive.options"); @@ -603,9 +589,6 @@ public class PackerImpl extends TLGlobals implements Pack200.Packer { if (props.getBoolean(Utils.COM_PREFIX+"strip.exceptions")) pkg.stripAttributeKind("Exceptions"); if (props.getBoolean(Utils.COM_PREFIX+"strip.innerclasses")) pkg.stripAttributeKind("InnerClasses"); - // Must choose an archive version; PackageWriter does not. - if (pkg.package_majver <= 0) pkg.choosePackageVersion(); - PackageWriter pw = new PackageWriter(pkg, out); pw.archiveNextCount = nextCount; pw.write(); diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PropMap.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PropMap.java index 07887b9c55b..e1a385546c9 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PropMap.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PropMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -193,13 +193,18 @@ final class PropMap implements SortedMap { boolean setBoolean(String s, boolean val) { return toBoolean(setProperty(s, String.valueOf(val))); } - int toInteger(String val) { - if (val == null) return 0; + return toInteger(val, 0); + } + int toInteger(String val, int def) { + if (val == null) return def; if (Pack200.Packer.TRUE.equals(val)) return 1; if (Pack200.Packer.FALSE.equals(val)) return 0; return Integer.parseInt(val); } + int getInteger(String s, int def) { + return toInteger(getProperty(s), def); + } int getInteger(String s) { return toInteger(getProperty(s)); } diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java index 06ecaef5bbf..5edd73e21cb 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java @@ -25,12 +25,6 @@ package com.sun.java.util.jar.pack; -import com.sun.java.util.jar.pack.ConstantPool.ClassEntry; -import com.sun.java.util.jar.pack.ConstantPool.DescriptorEntry; -import com.sun.java.util.jar.pack.ConstantPool.LiteralEntry; -import com.sun.java.util.jar.pack.ConstantPool.MemberEntry; -import com.sun.java.util.jar.pack.ConstantPool.SignatureEntry; -import com.sun.java.util.jar.pack.ConstantPool.Utf8Entry; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; @@ -38,9 +32,8 @@ import java.io.FilterOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.Collections; import java.util.Date; -import java.util.Enumeration; -import java.util.Map; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarInputStream; @@ -211,9 +204,7 @@ class Utils { static String getVersionString() { return "Pack200, Vendor: " + System.getProperty("java.vendor") + - ", Version: " + - Constants.JAVA6_PACKAGE_MAJOR_VERSION + "." + - Constants.JAVA6_PACKAGE_MINOR_VERSION; + ", Version: " + Constants.MAX_PACKAGE_VERSION; } static void markJarFile(JarOutputStream out) throws IOException { @@ -240,8 +231,7 @@ class Utils { } static void copyJarFile(JarFile in, JarOutputStream out) throws IOException { byte[] buffer = new byte[1 << 14]; - for (Enumeration e = in.entries(); e.hasMoreElements(); ) { - JarEntry je = e.nextElement(); + for (JarEntry je : Collections.list(in.entries())) { out.putNextEntry(je); InputStream ein = in.getInputStream(je); for (int nr; 0 < (nr = ein.read(buffer)); ) { diff --git a/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java b/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java index e2665373c91..800c0a53643 100644 --- a/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java +++ b/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,8 +58,22 @@ public class CNCtx implements javax.naming.Context { private final static boolean debug = false; + /* + * Implement one shared ORB among all CNCtx. However, there is a public constructor + * accepting an ORB, so we need the option of using a given ORB. + */ + private static ORB _defaultOrb; ORB _orb; // used by ExceptionMapper and RMI/IIOP factory public NamingContext _nc; // public for accessing underlying NamingContext + + private synchronized static ORB getDefaultOrb() { + if (_defaultOrb == null) { + _defaultOrb = CorbaUtils.getOrb(null, -1, + new Hashtable()); + } + return _defaultOrb; + } + private NameComponent[] _name = null; Hashtable _env; // used by ExceptionMapper @@ -114,8 +128,9 @@ public class CNCtx implements javax.naming.Context { // rest is the INS name // Return the parsed form to prevent subsequent lookup // from parsing the string as a composite name - // The caller should be aware that a toString() of the name - // will yield its INS syntax, rather than a composite syntax + // The caller should be aware that a toString() of the name, + // which came from the environment will yield its INS syntax, + // rather than a composite syntax return new ResolveResult(ctx, parser.parse(rest)); } @@ -135,10 +150,10 @@ public class CNCtx implements javax.naming.Context { if (orb == null || nctx == null) throw new ConfigurationException( "Must supply ORB or NamingContext"); - _orb = orb; - orbTracker = tracker; - if (orbTracker != null) { - orbTracker.incRefCount(); + if (orb != null) { + _orb = orb; + } else { + _orb = getDefaultOrb(); } _nc = nctx; _env = env; @@ -212,10 +227,13 @@ public class CNCtx implements javax.naming.Context { org.omg.CORBA.ORB inOrb = null; String ncIor = null; - if (env != null) { + if (inOrb == null && env != null) { inOrb = (org.omg.CORBA.ORB) env.get("java.naming.corba.orb"); } + if (inOrb == null) + inOrb = getDefaultOrb(); // will create a default ORB if none exists + // Extract PROVIDER_URL from environment String provUrl = null; if (env != null) { @@ -226,13 +244,6 @@ public class CNCtx implements javax.naming.Context { // Initialize the root naming context by using the IOR supplied // in the PROVIDER_URL ncIor = getStringifiedIor(provUrl); - - if (inOrb == null) { - - // no ORB instance specified; create one using env and defaults - inOrb = CorbaUtils.getOrb(null, -1, env); - orbTracker = new OrbReuseTracker(inOrb); - } setOrbAndRootContext(inOrb, ncIor); } else if (provUrl != null) { // Initialize the root naming context by using the URL supplied @@ -258,14 +269,8 @@ public class CNCtx implements javax.naming.Context { } } else { // No PROVIDER_URL supplied; initialize using defaults - if (inOrb == null) { - - // No ORB instance specified; create one using env and defaults - inOrb = CorbaUtils.getOrb(null, -1, env); - orbTracker = new OrbReuseTracker(inOrb); - if (debug) { - System.err.println("Getting default ORB: " + inOrb + env); - } + if (debug) { + System.err.println("Getting default ORB: " + inOrb + env); } setOrbAndRootContext(inOrb, (String)null); } @@ -286,6 +291,10 @@ public class CNCtx implements javax.naming.Context { */ private String initUsingIiopUrl(ORB defOrb, String url, Hashtable env) throws NamingException { + + if (defOrb == null) + defOrb = getDefaultOrb(); + try { IiopUrl parsedUrl = new IiopUrl(url); @@ -294,19 +303,17 @@ public class CNCtx implements javax.naming.Context { for (IiopUrl.Address addr : parsedUrl.getAddresses()) { try { - if (defOrb != null) { - try { - String tmpUrl = "corbaloc:iiop:" + addr.host - + ":" + addr.port + "/NameService"; - if (debug) { - System.err.println("Using url: " + tmpUrl); - } - org.omg.CORBA.Object rootCtx = - defOrb.string_to_object(tmpUrl); - setOrbAndRootContext(defOrb, rootCtx); - return parsedUrl.getStringName(); - } catch (Exception e) {} // keep going - } + try { + String tmpUrl = "corbaloc:iiop:" + addr.host + + ":" + addr.port + "/NameService"; + if (debug) { + System.err.println("Using url: " + tmpUrl); + } + org.omg.CORBA.Object rootCtx = + defOrb.string_to_object(tmpUrl); + setOrbAndRootContext(defOrb, rootCtx); + return parsedUrl.getStringName(); + } catch (Exception e) {} // keep going // Get ORB if (debug) { @@ -314,12 +321,8 @@ public class CNCtx implements javax.naming.Context { + " and port " + addr.port); } - // Get ORB - ORB orb = CorbaUtils.getOrb(addr.host, addr.port, env); - orbTracker = new OrbReuseTracker(orb); - // Assign to fields - setOrbAndRootContext(orb, (String)null); + setOrbAndRootContext(defOrb, (String)null); return parsedUrl.getStringName(); } catch (NamingException ne) { @@ -341,18 +344,16 @@ public class CNCtx implements javax.naming.Context { */ private String initUsingCorbanameUrl(ORB orb, String url, Hashtable env) throws NamingException { + + if (orb == null) + orb = getDefaultOrb(); + try { CorbanameUrl parsedUrl = new CorbanameUrl(url); String corbaloc = parsedUrl.getLocation(); String cosName = parsedUrl.getStringName(); - if (orb == null) { - - // No ORB instance specified; create one using env and defaults - orb = CorbaUtils.getOrb(null, -1, env); - orbTracker = new OrbReuseTracker(orb); - } setOrbAndRootContext(orb, corbaloc); return parsedUrl.getStringName(); @@ -1117,9 +1118,6 @@ public class CNCtx implements javax.naming.Context { } synchronized public void incEnumCount() { - if (orbTracker == null) { - return; - } enumCount++; if (debug) { System.out.println("incEnumCount, new count:" + enumCount); @@ -1128,9 +1126,6 @@ public class CNCtx implements javax.naming.Context { synchronized public void decEnumCount() throws NamingException { - if (orbTracker == null) { - return; - } enumCount--; if (debug) { System.out.println("decEnumCount, new count:" + enumCount + @@ -1142,14 +1137,15 @@ public class CNCtx implements javax.naming.Context { } synchronized public void close() throws NamingException { - if (orbTracker == null) { - return; - } + if (enumCount > 0) { isCloseCalled = true; return; } - orbTracker.decRefCount(); + + // Never destroy an orb in CNCtx. + // The orb we have is either the shared/default orb, or one passed in to a constructor + // from elsewhere, so that orb is somebody else's reponsibility. } protected void finalize() { diff --git a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java index 464e3d1bfdd..2b8b410f4cb 100644 --- a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java +++ b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -680,9 +680,11 @@ public final class Connection implements Runnable { ldr = ldr.next; } } - parent.processConnectionClosure(); } } + if (nparent) { + parent.processConnectionClosure(); + } } diff --git a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java index 0053758c26f..788152929b2 100644 --- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java +++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -488,14 +488,16 @@ public final class LdapClient implements PooledConnection { */ void processConnectionClosure() { // Notify listeners - if (unsolicited.size() > 0) { - String msg; - if (conn != null) { - msg = conn.host + ":" + conn.port + " connection closed"; - } else { - msg = "Connection closed"; + synchronized (unsolicited) { + if (unsolicited.size() > 0) { + String msg; + if (conn != null) { + msg = conn.host + ":" + conn.port + " connection closed"; + } else { + msg = "Connection closed"; + } + notifyUnsolicited(new CommunicationException(msg)); } - notifyUnsolicited(new CommunicationException(msg)); } // Remove from pool diff --git a/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java b/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java index 6987537f2e8..df6cbd0773b 100644 --- a/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java @@ -659,7 +659,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern * us work with drivers that do not support * getObject with a map in fairly sensible way */ - if (map == null) { + if (map == null || map.isEmpty()) { obj = data.getObject(i); } else { obj = data.getObject(i, map); diff --git a/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java b/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java index a18c0ac10bd..20c2743ee4b 100644 --- a/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java @@ -128,7 +128,7 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C for(int rows=this.getRow(); rows<=this.size();rows++) { bool = super.internalNext(); - if( p == null) { + if( !bool || p == null) { return bool; } if(p.evaluate(this)){ diff --git a/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java b/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java index 4737fb329bf..8824f8c0f0a 100644 --- a/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java +++ b/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -812,101 +812,119 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { } } - /** - * Inserts a row that has been inserted into the given - * CachedRowSet object into the data source from which - * the rowset is derived, returning false if the insertion - * was successful. - * - * @param crs the CachedRowSet object that has had a row inserted - * and to whose underlying data source the row will be inserted - * @param pstmt the PreparedStatement object that will be used - * to execute the insertion - * @return false to indicate that the insertion was successful; - * true otherwise - * @throws SQLException if a database access error occurs - */ - private boolean insertNewRow(CachedRowSet crs, - PreparedStatement pstmt, CachedRowSetImpl crsRes) throws SQLException { - int i = 0; - int icolCount = crs.getMetaData().getColumnCount(); + /** + * Inserts a row that has been inserted into the given + * CachedRowSet object into the data source from which + * the rowset is derived, returning false if the insertion + * was successful. + * + * @param crs the CachedRowSet object that has had a row inserted + * and to whose underlying data source the row will be inserted + * @param pstmt the PreparedStatement object that will be used + * to execute the insertion + * @return false to indicate that the insertion was successful; + * true otherwise + * @throws SQLException if a database access error occurs + */ + private boolean insertNewRow(CachedRowSet crs, + PreparedStatement pstmt, CachedRowSetImpl crsRes) throws SQLException { - boolean returnVal = false; - PreparedStatement pstmtSel = con.prepareStatement(selectCmd, - ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs, rs2 = null; - DatabaseMetaData dbmd = con.getMetaData(); - rs = pstmtSel.executeQuery(); - String table = crs.getTableName(); - rs2 = dbmd.getPrimaryKeys(null, null, table); - String [] primaryKeys = new String[icolCount]; - int k = 0; - while(rs2.next()) { - String pkcolname = rs2.getString("COLUMN_NAME"); - primaryKeys[k] = pkcolname; - k++; - } + boolean returnVal = false; - if(rs.next()) { - for(int j=0;jBasicStroke class defines a basic set of rendering * attributes for the outlines of graphics primitives, which are rendered @@ -109,6 +111,8 @@ import java.beans.ConstructorProperties; * @see Graphics2D * @author Jim Graham */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class BasicStroke implements Stroke { /** diff --git a/jdk/src/share/classes/java/awt/Choice.java b/jdk/src/share/classes/java/awt/Choice.java index b98dc2bfa47..d7d55a24dc2 100644 --- a/jdk/src/share/classes/java/awt/Choice.java +++ b/jdk/src/share/classes/java/awt/Choice.java @@ -34,6 +34,8 @@ import java.io.IOException; import javax.accessibility.*; +import javax.tools.annotation.GenerateNativeHeader; + /** * The Choice class presents a pop-up menu of choices. * The current choice is displayed as the title of the menu. @@ -69,6 +71,8 @@ import javax.accessibility.*; * @author Arthur van Hoff * @since JDK1.0 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Choice extends Component implements ItemSelectable, Accessible { /** * The items for the Choice. diff --git a/jdk/src/share/classes/java/awt/Component.java b/jdk/src/share/classes/java/awt/Component.java index 63fe2a80be9..df80032a1a9 100644 --- a/jdk/src/share/classes/java/awt/Component.java +++ b/jdk/src/share/classes/java/awt/Component.java @@ -7169,6 +7169,9 @@ public abstract class Component implements ImageObserver, MenuContainer, * Set from its parent. If all ancestors of this Component have null * specified for the Set, then the current KeyboardFocusManager's default * Set is used. + *

    + * This method may throw a {@code ClassCastException} if any {@code Object} + * in {@code keystrokes} is not an {@code AWTKeyStroke}. * * @param id one of KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, or @@ -7182,8 +7185,7 @@ public abstract class Component implements ImageObserver, MenuContainer, * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, or * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, or if keystrokes - * contains null, or if any Object in keystrokes is not an - * AWTKeyStroke, or if any keystroke represents a KEY_TYPED event, + * contains null, or if any keystroke represents a KEY_TYPED event, * or if any keystroke already maps to another focus traversal * operation for this Component * @since 1.4 @@ -7831,7 +7833,7 @@ public abstract class Component implements ImageObserver, MenuContainer, if (focusLog.isLoggable(PlatformLogger.FINER)) { focusLog.finer("clear global focus owner"); } - KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwnerPriv(); } if (focusLog.isLoggable(PlatformLogger.FINER)) { focusLog.finer("returning result: " + res); @@ -7912,7 +7914,7 @@ public abstract class Component implements ImageObserver, MenuContainer, if (focusLog.isLoggable(PlatformLogger.FINER)) { focusLog.finer("clear global focus owner"); } - KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwnerPriv(); } if (focusLog.isLoggable(PlatformLogger.FINER)) { focusLog.finer("returning result: " + res); @@ -7945,11 +7947,11 @@ public abstract class Component implements ImageObserver, MenuContainer, if (rootAncestor != null) { Container rootAncestorRootAncestor = rootAncestor.getFocusCycleRootAncestor(); + Container fcr = (rootAncestorRootAncestor != null) ? + rootAncestorRootAncestor : rootAncestor; + KeyboardFocusManager.getCurrentKeyboardFocusManager(). - setGlobalCurrentFocusCycleRoot( - (rootAncestorRootAncestor != null) - ? rootAncestorRootAncestor - : rootAncestor); + setGlobalCurrentFocusCycleRootPriv(fcr); rootAncestor.requestFocus(CausedFocusEvent.Cause.TRAVERSAL_UP); } else { Window window = getContainingWindow(); @@ -7959,7 +7961,7 @@ public abstract class Component implements ImageObserver, MenuContainer, getDefaultComponent(window); if (toFocus != null) { KeyboardFocusManager.getCurrentKeyboardFocusManager(). - setGlobalCurrentFocusCycleRoot(window); + setGlobalCurrentFocusCycleRootPriv(window); toFocus.requestFocus(CausedFocusEvent.Cause.TRAVERSAL_UP); } } diff --git a/jdk/src/share/classes/java/awt/Container.java b/jdk/src/share/classes/java/awt/Container.java index 03b0f7faa04..65c7ceaec5f 100644 --- a/jdk/src/share/classes/java/awt/Container.java +++ b/jdk/src/share/classes/java/awt/Container.java @@ -3093,6 +3093,9 @@ public class Container extends Component { * Set from its parent. If all ancestors of this Container have null * specified for the Set, then the current KeyboardFocusManager's default * Set is used. + *

    + * This method may throw a {@code ClassCastException} if any {@code Object} + * in {@code keystrokes} is not an {@code AWTKeyStroke}. * * @param id one of KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, @@ -3109,8 +3112,7 @@ public class Container extends Component { * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, or * KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS, or if keystrokes - * contains null, or if any Object in keystrokes is not an - * AWTKeyStroke, or if any keystroke represents a KEY_TYPED event, + * contains null, or if any keystroke represents a KEY_TYPED event, * or if any keystroke already maps to another focus traversal * operation for this Container * @since 1.4 @@ -3243,7 +3245,7 @@ public class Container extends Component { if (root != currentFocusCycleRoot) { KeyboardFocusManager.getCurrentKeyboardFocusManager(). - setGlobalCurrentFocusCycleRoot(root); + setGlobalCurrentFocusCycleRootPriv(root); } return root; } @@ -3300,7 +3302,7 @@ public class Container extends Component { Container cont = kfm.getCurrentFocusCycleRoot(); if (cont == this || isParentOf(cont)) { - kfm.setGlobalCurrentFocusCycleRoot(null); + kfm.setGlobalCurrentFocusCycleRootPriv(null); } } @@ -3504,7 +3506,7 @@ public class Container extends Component { public void transferFocusDownCycle() { if (isFocusCycleRoot()) { KeyboardFocusManager.getCurrentKeyboardFocusManager(). - setGlobalCurrentFocusCycleRoot(this); + setGlobalCurrentFocusCycleRootPriv(this); Component toFocus = getFocusTraversalPolicy(). getDefaultComponent(this); if (toFocus != null) { diff --git a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java index 4f9ef90f5a4..109e70d9d8a 100644 --- a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java @@ -116,7 +116,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { } else if (fe.getOppositeComponent() != null && doRestoreFocus(fe.getOppositeComponent(), vetoedComponent, false)) { } else { - clearGlobalFocusOwner(); + clearGlobalFocusOwnerPriv(); } } private void restoreFocus(WindowEvent we) { @@ -130,7 +130,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { { // do nothing, everything is done in restoreFocus() } else { - clearGlobalFocusOwner(); + clearGlobalFocusOwnerPriv(); } } private boolean restoreFocus(Window aWindow, Component vetoedComponent, @@ -141,7 +141,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { if (toFocus != null && toFocus != vetoedComponent && doRestoreFocus(toFocus, vetoedComponent, false)) { return true; } else if (clearOnFailure) { - clearGlobalFocusOwner(); + clearGlobalFocusOwnerPriv(); return true; } else { return false; @@ -164,7 +164,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { { return true; } else if (clearOnFailure) { - clearGlobalFocusOwner(); + clearGlobalFocusOwnerPriv(); return true; } else { return false; diff --git a/jdk/src/share/classes/java/awt/Dialog.java b/jdk/src/share/classes/java/awt/Dialog.java index a388c70e7f5..47f2f221c0d 100644 --- a/jdk/src/share/classes/java/awt/Dialog.java +++ b/jdk/src/share/classes/java/awt/Dialog.java @@ -670,7 +670,7 @@ public class Dialog extends Window { this.title = title; setModalityType(modalityType); - SunToolkit.checkAndSetPolicy(this, false); + SunToolkit.checkAndSetPolicy(this); } /** @@ -721,7 +721,7 @@ public class Dialog extends Window { this.title = title; setModalityType(modalityType); - SunToolkit.checkAndSetPolicy(this, false); + SunToolkit.checkAndSetPolicy(this); } /** @@ -1037,7 +1037,7 @@ public class Dialog extends Window { predictedFocusOwner = getMostRecentFocusOwner(); if (conditionalShow(predictedFocusOwner, time)) { modalFilter = ModalEventFilter.createFilterForDialog(this); - Conditional cond = new Conditional() { + final Conditional cond = new Conditional() { @Override public boolean evaluate() { return windowClosingException == null; @@ -1067,7 +1067,12 @@ public class Dialog extends Window { modalityPushed(); try { - EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); + final EventQueue eventQueue = AccessController.doPrivileged( + new PrivilegedAction() { + public EventQueue run() { + return Toolkit.getDefaultToolkit().getSystemEventQueue(); + } + }); secondaryLoop = eventQueue.createSecondaryLoop(cond, modalFilter, 0); if (!secondaryLoop.enter()) { secondaryLoop = null; diff --git a/jdk/src/share/classes/java/awt/DisplayMode.java b/jdk/src/share/classes/java/awt/DisplayMode.java index 45c6e8d401e..a4ca0f18a42 100644 --- a/jdk/src/share/classes/java/awt/DisplayMode.java +++ b/jdk/src/share/classes/java/awt/DisplayMode.java @@ -25,6 +25,8 @@ package java.awt; +import javax.tools.annotation.GenerateNativeHeader; + /** * The DisplayMode class encapsulates the bit depth, height, * width, and refresh rate of a GraphicsDevice. The ability to @@ -43,6 +45,9 @@ package java.awt; * @author Michael Martak * @since 1.4 */ + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class DisplayMode { private Dimension size; diff --git a/jdk/src/share/classes/java/awt/FileDialog.java b/jdk/src/share/classes/java/awt/FileDialog.java index ebff2c45fee..3739570abb5 100644 --- a/jdk/src/share/classes/java/awt/FileDialog.java +++ b/jdk/src/share/classes/java/awt/FileDialog.java @@ -147,8 +147,8 @@ public class FileDialog extends Dialog { static { AWTAccessor.setFileDialogAccessor( new AWTAccessor.FileDialogAccessor() { - public void setFiles(FileDialog fileDialog, String directory, String files[]) { - fileDialog.setFiles(directory, files); + public void setFiles(FileDialog fileDialog, File files[]) { + fileDialog.setFiles(files); } public void setFile(FileDialog fileDialog, String file) { fileDialog.file = ("".equals(file)) ? null : file; @@ -446,13 +446,9 @@ public class FileDialog extends Dialog { * @see #getFiles * @since 1.7 */ - private void setFiles(String directory, String files[]) { + private void setFiles(File files[]) { synchronized (getObjectLock()) { - int filesNumber = (files != null) ? files.length : 0; - this.files = new File[filesNumber]; - for (int i = 0; i < filesNumber; i++) { - this.files[i] = new File(directory, files[i]); - } + this.files = files; } } diff --git a/jdk/src/share/classes/java/awt/Font.java b/jdk/src/share/classes/java/awt/Font.java index e3d48d6a236..4898c8aadc6 100644 --- a/jdk/src/share/classes/java/awt/Font.java +++ b/jdk/src/share/classes/java/awt/Font.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ import java.awt.geom.Rectangle2D; import java.awt.peer.FontPeer; import java.io.*; import java.lang.ref.SoftReference; +import java.nio.file.Files; import java.security.AccessController; import java.security.PrivilegedExceptionAction; import java.text.AttributedCharacterIterator.Attribute; @@ -831,7 +832,7 @@ public class Font implements java.io.Serializable File f = null; boolean hasPerm = false; try { - f = File.createTempFile("+~JT", ".tmp", null); + f = Files.createTempFile("+~JT", ".tmp").toFile(); f.delete(); f = null; hasPerm = true; @@ -881,7 +882,7 @@ public class Font implements java.io.Serializable final File tFile = AccessController.doPrivileged( new PrivilegedExceptionAction() { public File run() throws IOException { - return File.createTempFile("+~JF", ".tmp", null); + return Files.createTempFile("+~JF", ".tmp").toFile(); } } ); diff --git a/jdk/src/share/classes/java/awt/Frame.java b/jdk/src/share/classes/java/awt/Frame.java index 4c6a46938c2..1a3173730e5 100644 --- a/jdk/src/share/classes/java/awt/Frame.java +++ b/jdk/src/share/classes/java/awt/Frame.java @@ -449,7 +449,7 @@ public class Frame extends Window implements MenuContainer { private void init(String title, GraphicsConfiguration gc) { this.title = title; - SunToolkit.checkAndSetPolicy(this, false); + SunToolkit.checkAndSetPolicy(this); } /** diff --git a/jdk/src/share/classes/java/awt/Image.java b/jdk/src/share/classes/java/awt/Image.java index 5094950b21f..521509d2e15 100644 --- a/jdk/src/share/classes/java/awt/Image.java +++ b/jdk/src/share/classes/java/awt/Image.java @@ -33,6 +33,8 @@ import java.awt.image.ReplicateScaleFilter; import sun.awt.image.SurfaceManager; +import javax.tools.annotation.GenerateNativeHeader; + /** * The abstract class Image is the superclass of all * classes that represent graphical images. The image must be @@ -42,6 +44,8 @@ import sun.awt.image.SurfaceManager; * @author Arthur van Hoff * @since JDK1.0 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class Image { /** diff --git a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java index 3ccf5b70d36..15fe15356c2 100644 --- a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -246,15 +246,7 @@ public abstract class KeyboardFocusManager public static void setCurrentKeyboardFocusManager( KeyboardFocusManager newManager) throws SecurityException { - SecurityManager security = System.getSecurityManager(); - if (security != null) { - if (replaceKeyboardFocusManagerPermission == null) { - replaceKeyboardFocusManagerPermission = - new AWTPermission("replaceKeyboardFocusManager"); - } - security. - checkPermission(replaceKeyboardFocusManagerPermission); - } + checkReplaceKFMPermission(); KeyboardFocusManager oldManager = null; @@ -398,11 +390,6 @@ public abstract class KeyboardFocusManager */ private static java.util.Map mostRecentFocusOwners = new WeakHashMap(); - /** - * Error String for initializing SecurityExceptions. - */ - private static final String notPrivileged = "this KeyboardFocusManager is not installed in the current thread's context"; - /** * We cache the permission used to verify that the calling thread is * permitted to access the global focus state. @@ -503,17 +490,13 @@ public abstract class KeyboardFocusManager * @see #setGlobalFocusOwner * @throws SecurityException if this KeyboardFocusManager is not the * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission */ protected Component getGlobalFocusOwner() throws SecurityException { synchronized (KeyboardFocusManager.class) { - if (this == getCurrentKeyboardFocusManager()) { - return focusOwner; - } else { - if (focusLog.isLoggable(PlatformLogger.FINER)) { - focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager()); - } - throw new SecurityException(notPrivileged); - } + checkKFMSecurity(); + return focusOwner; } } @@ -538,15 +521,23 @@ public abstract class KeyboardFocusManager * @see Component#requestFocus() * @see Component#requestFocusInWindow() * @see Component#isFocusable + * @throws SecurityException if this KeyboardFocusManager is not the + * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission * @beaninfo * bound: true */ - protected void setGlobalFocusOwner(Component focusOwner) { + protected void setGlobalFocusOwner(Component focusOwner) + throws SecurityException + { Component oldFocusOwner = null; boolean shouldFire = false; if (focusOwner == null || focusOwner.isFocusable()) { synchronized (KeyboardFocusManager.class) { + checkKFMSecurity(); + oldFocusOwner = getFocusOwner(); try { @@ -570,7 +561,7 @@ public abstract class KeyboardFocusManager rootAncestor = (Container)focusOwner; } if (rootAncestor != null) { - setGlobalCurrentFocusCycleRoot(rootAncestor); + setGlobalCurrentFocusCycleRootPriv(rootAncestor); } } @@ -583,6 +574,27 @@ public abstract class KeyboardFocusManager } } + /** + * Clears the focus owner at both the Java and native levels if the + * focus owner exists and resides in the same context as the calling thread, + * otherwise the method returns silently. + *

    + * The focus owner component will receive a permanent FOCUS_LOST event. + * After this operation completes, the native windowing system will discard + * all user-generated KeyEvents until the user selects a new Component to + * receive focus, or a Component is given focus explicitly via a call to + * {@code requestFocus()}. This operation does not change the focused or + * active Windows. + * + * @see Component#requestFocus() + * @see java.awt.event.FocusEvent#FOCUS_LOST + */ + public void clearFocusOwner() { + if (getFocusOwner() != null) { + clearGlobalFocusOwner(); + } + } + /** * Clears the global focus owner at both the Java and native levels. If * there exists a focus owner, that Component will receive a permanent @@ -591,11 +603,26 @@ public abstract class KeyboardFocusManager * a new Component to receive focus, or a Component is given focus * explicitly via a call to requestFocus(). This operation * does not change the focused or active Windows. + *

    + * If a SecurityManager is installed, the calling thread must be granted + * the "replaceKeyboardFocusManager" AWTPermission. If this permission is + * not granted, this method will throw a SecurityException, and the current + * focus owner will not be cleared. + *

    + * This method is intended to be used only by KeyboardFocusManager set as + * current KeyboardFocusManager for the calling thread's context. It is not + * for general client use. * + * @see KeyboardFocusManager#clearFocusOwner * @see Component#requestFocus() * @see java.awt.event.FocusEvent#FOCUS_LOST + * @throws SecurityException if the calling thread does not have + * "replaceKeyboardFocusManager" permission */ - public void clearGlobalFocusOwner() { + public void clearGlobalFocusOwner() + throws SecurityException + { + checkReplaceKFMPermission(); if (!GraphicsEnvironment.isHeadless()) { // Toolkit must be fully initialized, otherwise // _clearGlobalFocusOwner will crash or throw an exception @@ -609,6 +636,15 @@ public abstract class KeyboardFocusManager peer.clearGlobalFocusOwner(activeWindow); } + void clearGlobalFocusOwnerPriv() { + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { + clearGlobalFocusOwner(); + return null; + } + }); + } + Component getNativeFocusOwner() { return peer.getCurrentFocusOwner(); } @@ -660,29 +696,21 @@ public abstract class KeyboardFocusManager * are equivalent unless a temporary focus change is currently in effect. * In such a situation, the permanent focus owner will again be the focus * owner when the temporary focus change ends. - *

    - * This method will throw a SecurityException if this KeyboardFocusManager - * is not the current KeyboardFocusManager for the calling thread's - * context. * * @return the permanent focus owner * @see #getPermanentFocusOwner * @see #setGlobalPermanentFocusOwner * @throws SecurityException if this KeyboardFocusManager is not the * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission */ protected Component getGlobalPermanentFocusOwner() throws SecurityException { synchronized (KeyboardFocusManager.class) { - if (this == getCurrentKeyboardFocusManager()) { - return permanentFocusOwner; - } else { - if (focusLog.isLoggable(PlatformLogger.FINER)) { - focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager()); - } - throw new SecurityException(notPrivileged); - } + checkKFMSecurity(); + return permanentFocusOwner; } } @@ -708,16 +736,23 @@ public abstract class KeyboardFocusManager * @see Component#requestFocus() * @see Component#requestFocusInWindow() * @see Component#isFocusable + * @throws SecurityException if this KeyboardFocusManager is not the + * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission * @beaninfo * bound: true */ protected void setGlobalPermanentFocusOwner(Component permanentFocusOwner) + throws SecurityException { Component oldPermanentFocusOwner = null; boolean shouldFire = false; if (permanentFocusOwner == null || permanentFocusOwner.isFocusable()) { synchronized (KeyboardFocusManager.class) { + checkKFMSecurity(); + oldPermanentFocusOwner = getPermanentFocusOwner(); try { @@ -770,27 +805,19 @@ public abstract class KeyboardFocusManager * Returns the focused Window, even if the calling thread is in a different * context than the focused Window. The focused Window is the Window that * is or contains the focus owner. - *

    - * This method will throw a SecurityException if this KeyboardFocusManager - * is not the current KeyboardFocusManager for the calling thread's - * context. * * @return the focused Window * @see #getFocusedWindow * @see #setGlobalFocusedWindow * @throws SecurityException if this KeyboardFocusManager is not the * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission */ protected Window getGlobalFocusedWindow() throws SecurityException { synchronized (KeyboardFocusManager.class) { - if (this == getCurrentKeyboardFocusManager()) { - return focusedWindow; - } else { - if (focusLog.isLoggable(PlatformLogger.FINER)) { - focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager()); - } - throw new SecurityException(notPrivileged); - } + checkKFMSecurity(); + return focusedWindow; } } @@ -812,15 +839,23 @@ public abstract class KeyboardFocusManager * @see Component#requestFocus() * @see Component#requestFocusInWindow() * @see Window#isFocusableWindow + * @throws SecurityException if this KeyboardFocusManager is not the + * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission * @beaninfo * bound: true */ - protected void setGlobalFocusedWindow(Window focusedWindow) { + protected void setGlobalFocusedWindow(Window focusedWindow) + throws SecurityException + { Window oldFocusedWindow = null; boolean shouldFire = false; if (focusedWindow == null || focusedWindow.isFocusableWindow()) { synchronized (KeyboardFocusManager.class) { + checkKFMSecurity(); + oldFocusedWindow = getFocusedWindow(); try { @@ -874,27 +909,19 @@ public abstract class KeyboardFocusManager * or its children with special decorations, such as a highlighted title * bar. The active Window is always either the focused Window, or the first * Frame or Dialog that is an owner of the focused Window. - *

    - * This method will throw a SecurityException if this KeyboardFocusManager - * is not the current KeyboardFocusManager for the calling thread's - * context. * * @return the active Window * @see #getActiveWindow * @see #setGlobalActiveWindow * @throws SecurityException if this KeyboardFocusManager is not the * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission */ protected Window getGlobalActiveWindow() throws SecurityException { synchronized (KeyboardFocusManager.class) { - if (this == getCurrentKeyboardFocusManager()) { - return activeWindow; - } else { - if (focusLog.isLoggable(PlatformLogger.FINER)) { - focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager()); - } - throw new SecurityException(notPrivileged); - } + checkKFMSecurity(); + return activeWindow; } } @@ -917,12 +944,20 @@ public abstract class KeyboardFocusManager * @see #getGlobalActiveWindow * @see Component#requestFocus() * @see Component#requestFocusInWindow() + * @throws SecurityException if this KeyboardFocusManager is not the + * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission * @beaninfo * bound: true */ - protected void setGlobalActiveWindow(Window activeWindow) { + protected void setGlobalActiveWindow(Window activeWindow) + throws SecurityException + { Window oldActiveWindow; synchronized (KeyboardFocusManager.class) { + checkKFMSecurity(); + oldActiveWindow = getActiveWindow(); if (focusLog.isLoggable(PlatformLogger.FINER)) { focusLog.finer("Setting global active window to " + activeWindow + ", old active " + oldActiveWindow); @@ -991,12 +1026,12 @@ public abstract class KeyboardFocusManager /** * Sets the default focus traversal keys for a given traversal operation. - * This traversal key Set will be in effect on all - * Windows that have no such Set of - * their own explicitly defined. This Set will also be - * inherited, recursively, by any child Component of - * those Windows that has - * no such Set of its own explicitly defined. + * This traversal key {@code Set} will be in effect on all + * {@code Window}s that have no such {@code Set} of + * their own explicitly defined. This {@code Set} will also be + * inherited, recursively, by any child {@code Component} of + * those {@code Windows} that has + * no such {@code Set} of its own explicitly defined. *

    * The default values for the default focus traversal keys are * implementation-dependent. Sun recommends that all implementations for a @@ -1011,66 +1046,67 @@ public abstract class KeyboardFocusManager * Default * * - * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS + * {@code KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS} * Normal forward keyboard traversal - * TAB on KEY_PRESSED, - * CTRL-TAB on KEY_PRESSED + * {@code TAB} on {@code KEY_PRESSED}, + * {@code CTRL-TAB} on {@code KEY_PRESSED} * * - * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS + * {@code KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS} * Normal reverse keyboard traversal - * SHIFT-TAB on KEY_PRESSED, - * CTRL-SHIFT-TAB on KEY_PRESSED + * {@code SHIFT-TAB} on {@code KEY_PRESSED}, + * {@code CTRL-SHIFT-TAB} on {@code KEY_PRESSED} * * - * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS + * {@code KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS} * Go up one focus traversal cycle * none * * - * KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS + * {@code KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS} * Go down one focus traversal cycle * none * * * - * To disable a traversal key, use an empty Set; - * Collections.EMPTY_SET is recommended. + * To disable a traversal key, use an empty {@code Set}; + * {@code Collections.EMPTY_SET} is recommended. *

    - * Using the AWTKeyStroke API, client code can + * Using the {@code AWTKeyStroke} API, client code can * specify on which of two - * specific KeyEvents, KEY_PRESSED or - * KEY_RELEASED, the focus traversal operation will - * occur. Regardless of which KeyEvent is specified, - * however, all KeyEvents related to the focus - * traversal key, including the associated KEY_TYPED + * specific {@code KeyEvent}s, {@code KEY_PRESSED} or + * {@code KEY_RELEASED}, the focus traversal operation will + * occur. Regardless of which {@code KeyEvent} is specified, + * however, all {@code KeyEvent}s related to the focus + * traversal key, including the associated {@code KEY_TYPED} * event, will be consumed, and will not be dispatched - * to any Component. It is a runtime error to - * specify a KEY_TYPED event as + * to any {@code Component}. It is a runtime error to + * specify a {@code KEY_TYPED} event as * mapping to a focus traversal operation, or to map the same event to * multiple default focus traversal operations. + *

    + * This method may throw a {@code ClassCastException} if any {@code Object} + * in {@code keystrokes} is not an {@code AWTKeyStroke}. * * @param id one of - * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, - * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, - * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, or - * KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS - * @param keystrokes the Set of AWTKeyStrokes for the + * {@code KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS}, + * {@code KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS}, + * {@code KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS}, or + * {@code KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS} + * @param keystrokes the Set of {@code AWTKeyStroke}s for the * specified operation * @see #getDefaultFocusTraversalKeys * @see Component#setFocusTraversalKeys * @see Component#getFocusTraversalKeys * @throws IllegalArgumentException if id is not one of - * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, - * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, - * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, or - * KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS, - * or if keystrokes is null, - * or if keystrokes contains null, - * or if any Object in - * keystrokes is not an AWTKeyStroke, + * {@code KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS}, + * {@code KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS}, + * {@code KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS}, or + * {@code KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS}, + * or if keystrokes is {@code null}, + * or if keystrokes contains {@code null}, * or if any keystroke - * represents a KEY_TYPED event, + * represents a {@code KEY_TYPED} event, * or if any keystroke already maps * to another default focus traversal operation * @beaninfo @@ -1090,20 +1126,12 @@ public abstract class KeyboardFocusManager Set oldKeys; synchronized (this) { - for (Iterator iter = keystrokes.iterator(); iter.hasNext(); ) { - Object obj = iter.next(); + for (AWTKeyStroke keystroke : keystrokes) { - if (obj == null) { + if (keystroke == null) { throw new IllegalArgumentException("cannot set null focus traversal key"); } - // Fix for 6195831: - //According to javadoc this method should throw IAE instead of ClassCastException - if (!(obj instanceof AWTKeyStroke)) { - throw new IllegalArgumentException("object is expected to be AWTKeyStroke"); - } - AWTKeyStroke keystroke = (AWTKeyStroke)obj; - if (keystroke.getKeyChar() != KeyEvent.CHAR_UNDEFINED) { throw new IllegalArgumentException("focus traversal keys cannot map to KEY_TYPED events"); } @@ -1201,10 +1229,6 @@ public abstract class KeyboardFocusManager * Components represent the next and previous Components to focus during * normal focus traversal. In that case, the current focus cycle root is * used to differentiate among the possibilities. - *

    - * This method will throw a SecurityException if this KeyboardFocusManager - * is not the current KeyboardFocusManager for the calling thread's - * context. * * @return the current focus cycle root, or null if the current focus cycle * root is not a member of the calling thread's context @@ -1212,19 +1236,15 @@ public abstract class KeyboardFocusManager * @see #setGlobalCurrentFocusCycleRoot * @throws SecurityException if this KeyboardFocusManager is not the * current KeyboardFocusManager for the calling thread's context + * and if the calling thread does not have "replaceKeyboardFocusManager" + * permission */ protected Container getGlobalCurrentFocusCycleRoot() throws SecurityException { synchronized (KeyboardFocusManager.class) { - if (this == getCurrentKeyboardFocusManager()) { - return currentFocusCycleRoot; - } else { - if (focusLog.isLoggable(PlatformLogger.FINER)) { - focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager()); - } - throw new SecurityException(notPrivileged); - } + checkKFMSecurity(); + return currentFocusCycleRoot; } } @@ -1235,16 +1255,27 @@ public abstract class KeyboardFocusManager * In that case, the current focus cycle root is used to differentiate * among the possibilities. *

    + * If a SecurityManager is installed, the calling thread must be granted + * the "replaceKeyboardFocusManager" AWTPermission. If this permission is + * not granted, this method will throw a SecurityException, and the current + * focus cycle root will not be changed. + *

    * This method is intended to be used only by KeyboardFocusManagers and * focus implementations. It is not for general client use. * * @param newFocusCycleRoot the new focus cycle root * @see #getCurrentFocusCycleRoot * @see #getGlobalCurrentFocusCycleRoot + * @throws SecurityException if the calling thread does not have + * "replaceKeyboardFocusManager" permission * @beaninfo * bound: true */ - public void setGlobalCurrentFocusCycleRoot(Container newFocusCycleRoot) { + public void setGlobalCurrentFocusCycleRoot(Container newFocusCycleRoot) + throws SecurityException + { + checkReplaceKFMPermission(); + Container oldFocusCycleRoot; synchronized (KeyboardFocusManager.class) { @@ -1256,6 +1287,15 @@ public abstract class KeyboardFocusManager newFocusCycleRoot); } + void setGlobalCurrentFocusCycleRootPriv(final Container newFocusCycleRoot) { + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { + setGlobalCurrentFocusCycleRoot(newFocusCycleRoot); + return null; + } + }); + } + /** * Adds a PropertyChangeListener to the listener list. The listener is * registered for all bound properties of this class, including the @@ -3065,4 +3105,39 @@ public abstract class KeyboardFocusManager : null; } } + + private static void checkReplaceKFMPermission() + throws SecurityException + { + SecurityManager security = System.getSecurityManager(); + if (security != null) { + if (replaceKeyboardFocusManagerPermission == null) { + replaceKeyboardFocusManagerPermission = + new AWTPermission("replaceKeyboardFocusManager"); + } + security. + checkPermission(replaceKeyboardFocusManagerPermission); + } + } + + // Checks if this KeyboardFocusManager instance is the current KFM, + // or otherwise checks if the calling thread has "replaceKeyboardFocusManager" + // permission. Here's the reasoning to do so: + // + // A system KFM instance (which is the current KFM by default) may have no + // "replaceKFM" permission when a client code is on the call stack beneath, + // but still it should be able to execute the methods protected by this check + // due to the system KFM is trusted (and so it does like "privileged"). + // + // If this KFM instance is not the current KFM but the client code has all + // permissions we can't throw SecurityException because it would contradict + // the security concepts. In this case the trusted client code is responsible + // for calling the secured methods from KFM instance which is not current. + private void checkKFMSecurity() + throws SecurityException + { + if (this != getCurrentKeyboardFocusManager()) { + checkReplaceKFMPermission(); + } + } } diff --git a/jdk/src/share/classes/java/awt/List.java b/jdk/src/share/classes/java/awt/List.java index d5b60ae56c6..562f4000c88 100644 --- a/jdk/src/share/classes/java/awt/List.java +++ b/jdk/src/share/classes/java/awt/List.java @@ -33,6 +33,7 @@ import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.io.IOException; import javax.accessibility.*; +import javax.tools.annotation.GenerateNativeHeader; /** @@ -106,6 +107,8 @@ import javax.accessibility.*; * @see java.awt.event.ActionListener * @since JDK1.0 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class List extends Component implements ItemSelectable, Accessible { /** * A vector created to contain items which will become diff --git a/jdk/src/share/classes/java/awt/PopupMenu.java b/jdk/src/share/classes/java/awt/PopupMenu.java index bfb741cf165..1c700a181aa 100644 --- a/jdk/src/share/classes/java/awt/PopupMenu.java +++ b/jdk/src/share/classes/java/awt/PopupMenu.java @@ -28,6 +28,8 @@ package java.awt; import java.awt.peer.PopupMenuPeer; import javax.accessibility.*; +import javax.tools.annotation.GenerateNativeHeader; + import sun.awt.AWTAccessor; /** @@ -42,6 +44,8 @@ import sun.awt.AWTAccessor; * * @author Amy Fowler */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class PopupMenu extends Menu { private static final String base = "popup"; diff --git a/jdk/src/share/classes/java/awt/SystemColor.java b/jdk/src/share/classes/java/awt/SystemColor.java index 16bb8e97410..a5e245663e8 100644 --- a/jdk/src/share/classes/java/awt/SystemColor.java +++ b/jdk/src/share/classes/java/awt/SystemColor.java @@ -26,6 +26,8 @@ package java.awt; import java.io.ObjectStreamException; +import javax.tools.annotation.GenerateNativeHeader; + /** * A class to encapsulate symbolic colors representing the color of * native GUI objects on a system. For systems which support the dynamic @@ -47,6 +49,8 @@ import java.io.ObjectStreamException; * @author Carl Quinn * @author Amy Fowler */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class SystemColor extends Color implements java.io.Serializable { /** diff --git a/jdk/src/share/classes/java/awt/TextComponent.java b/jdk/src/share/classes/java/awt/TextComponent.java index beb0b986e0c..c66c3203283 100644 --- a/jdk/src/share/classes/java/awt/TextComponent.java +++ b/jdk/src/share/classes/java/awt/TextComponent.java @@ -35,7 +35,7 @@ import java.text.BreakIterator; import javax.swing.text.AttributeSet; import javax.accessibility.*; import java.awt.im.InputMethodRequests; - +import javax.tools.annotation.GenerateNativeHeader; /** * The TextComponent class is the superclass of @@ -57,6 +57,8 @@ import java.awt.im.InputMethodRequests; * @author Arthur van Hoff * @since JDK1.0 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class TextComponent extends Component implements Accessible { /** diff --git a/jdk/src/share/classes/java/awt/Transparency.java b/jdk/src/share/classes/java/awt/Transparency.java index 2dd5b243bce..e968ebbf6d1 100644 --- a/jdk/src/share/classes/java/awt/Transparency.java +++ b/jdk/src/share/classes/java/awt/Transparency.java @@ -25,10 +25,14 @@ package java.awt; +import javax.tools.annotation.GenerateNativeHeader; + /** * The Transparency interface defines the common transparency * modes for implementing classes. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public interface Transparency { /** diff --git a/jdk/src/share/classes/java/awt/Window.java b/jdk/src/share/classes/java/awt/Window.java index 1e2ee59a09a..984e287bd50 100644 --- a/jdk/src/share/classes/java/awt/Window.java +++ b/jdk/src/share/classes/java/awt/Window.java @@ -506,7 +506,7 @@ public class Window extends Container implements Accessible { modalExclusionType = Dialog.ModalExclusionType.NO_EXCLUDE; - SunToolkit.checkAndSetPolicy(this, false); + SunToolkit.checkAndSetPolicy(this); } /** @@ -2568,7 +2568,7 @@ public class Window extends Container implements Accessible { } } KeyboardFocusManager.getCurrentKeyboardFocusManager(). - clearGlobalFocusOwner(); + clearGlobalFocusOwnerPriv(); } } diff --git a/jdk/src/share/classes/java/awt/color/ColorSpace.java b/jdk/src/share/classes/java/awt/color/ColorSpace.java index 0a622995562..f4ca58b37af 100644 --- a/jdk/src/share/classes/java/awt/color/ColorSpace.java +++ b/jdk/src/share/classes/java/awt/color/ColorSpace.java @@ -35,6 +35,8 @@ package java.awt.color; +import javax.tools.annotation.GenerateNativeHeader; + import sun.java2d.cmm.PCMM; import sun.java2d.cmm.CMSManager; @@ -93,8 +95,8 @@ import sun.java2d.cmm.CMSManager; * @see ICC_ColorSpace */ - - +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class ColorSpace implements java.io.Serializable { static final long serialVersionUID = -409452704308689724L; diff --git a/jdk/src/share/classes/java/awt/color/ICC_Profile.java b/jdk/src/share/classes/java/awt/color/ICC_Profile.java index c06ddf61c97..6a785805b5a 100644 --- a/jdk/src/share/classes/java/awt/color/ICC_Profile.java +++ b/jdk/src/share/classes/java/awt/color/ICC_Profile.java @@ -58,6 +58,7 @@ import java.util.StringTokenizer; import java.security.AccessController; import java.security.PrivilegedAction; +import javax.tools.annotation.GenerateNativeHeader; /** * A representation of color profile data for device independent and @@ -89,6 +90,8 @@ import java.security.PrivilegedAction; */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class ICC_Profile implements Serializable { private static final long serialVersionUID = -3938515861990936766L; diff --git a/jdk/src/share/classes/java/awt/datatransfer/Clipboard.java b/jdk/src/share/classes/java/awt/datatransfer/Clipboard.java index 298e6647b74..d58bd92f3e0 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/Clipboard.java +++ b/jdk/src/share/classes/java/awt/datatransfer/Clipboard.java @@ -35,7 +35,6 @@ import java.io.IOException; import sun.awt.EventListenerAggregate; - /** * A class that implements a mechanism to transfer data using * cut/copy/paste operations. diff --git a/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java b/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java index 1dbd6f5732a..c646015da3a 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java +++ b/jdk/src/share/classes/java/awt/datatransfer/StringSelection.java @@ -27,6 +27,8 @@ package java.awt.datatransfer; import java.io.*; +import javax.tools.annotation.GenerateNativeHeader; + /** * A Transferable which implements the capability required * to transfer a String. @@ -41,6 +43,8 @@ import java.io.*; * @see java.awt.datatransfer.DataFlavor#stringFlavor * @see java.awt.datatransfer.DataFlavor#plainTextFlavor */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class StringSelection implements Transferable, ClipboardOwner { private static final int STRING = 0; diff --git a/jdk/src/share/classes/java/awt/dnd/DnDConstants.java b/jdk/src/share/classes/java/awt/dnd/DnDConstants.java index 11e5ce2b3ce..f49733203c6 100644 --- a/jdk/src/share/classes/java/awt/dnd/DnDConstants.java +++ b/jdk/src/share/classes/java/awt/dnd/DnDConstants.java @@ -25,12 +25,15 @@ package java.awt.dnd; +import javax.tools.annotation.GenerateNativeHeader; + /** * This class contains constant values representing * the type of action(s) to be performed by a Drag and Drop operation. * @since 1.2 */ - +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class DnDConstants { private DnDConstants() {} // define null private constructor. diff --git a/jdk/src/share/classes/java/awt/event/ActionEvent.java b/jdk/src/share/classes/java/awt/event/ActionEvent.java index 7a30d8b7bd4..755de2b31e5 100644 --- a/jdk/src/share/classes/java/awt/event/ActionEvent.java +++ b/jdk/src/share/classes/java/awt/event/ActionEvent.java @@ -27,6 +27,7 @@ package java.awt.event; import java.awt.AWTEvent; import java.awt.Event; +import javax.tools.annotation.GenerateNativeHeader; /** * A semantic event which indicates that a component-defined action occurred. @@ -56,6 +57,8 @@ import java.awt.Event; * @author Carl Quinn * @since 1.1 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class ActionEvent extends AWTEvent { /** diff --git a/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java b/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java index ecf2d736b86..669d292be7e 100644 --- a/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java +++ b/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java @@ -27,6 +27,9 @@ package java.awt.event; import java.awt.Adjustable; import java.awt.AWTEvent; +import javax.tools.annotation.GenerateNativeHeader; + +import javax.tools.annotation.GenerateNativeHeader; /** * The adjustment event emitted by Adjustable objects like @@ -54,6 +57,8 @@ import java.awt.AWTEvent; * @author Amy Fowler * @since 1.1 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class AdjustmentEvent extends AWTEvent { /** diff --git a/jdk/src/share/classes/java/awt/event/ComponentEvent.java b/jdk/src/share/classes/java/awt/event/ComponentEvent.java index 89ba184cbb8..51c2b68192d 100644 --- a/jdk/src/share/classes/java/awt/event/ComponentEvent.java +++ b/jdk/src/share/classes/java/awt/event/ComponentEvent.java @@ -28,6 +28,7 @@ package java.awt.event; import java.awt.AWTEvent; import java.awt.Component; import java.awt.Rectangle; +import javax.tools.annotation.GenerateNativeHeader; /** * A low-level event which indicates that a component moved, changed @@ -64,6 +65,8 @@ import java.awt.Rectangle; * @author Carl Quinn * @since 1.1 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class ComponentEvent extends AWTEvent { /** diff --git a/jdk/src/share/classes/java/awt/event/InputMethodEvent.java b/jdk/src/share/classes/java/awt/event/InputMethodEvent.java index d6d08565876..339078cf9c0 100644 --- a/jdk/src/share/classes/java/awt/event/InputMethodEvent.java +++ b/jdk/src/share/classes/java/awt/event/InputMethodEvent.java @@ -33,6 +33,7 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.text.AttributedCharacterIterator; import java.text.CharacterIterator; +import javax.tools.annotation.GenerateNativeHeader; /** * Input method events contain information about text that is being @@ -55,7 +56,8 @@ import java.text.CharacterIterator; * @author JavaSoft Asia/Pacific * @since 1.2 */ - +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class InputMethodEvent extends AWTEvent { /** diff --git a/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java b/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java index 5b9e8cac037..2d0228ae44c 100644 --- a/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java +++ b/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java @@ -27,6 +27,8 @@ package java.awt.event; import java.awt.Component; +import javax.tools.annotation.GenerateNativeHeader; + /** * An event which indicates that the mouse wheel was rotated in a component. *

    @@ -97,6 +99,8 @@ import java.awt.Component; * @since 1.4 */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class MouseWheelEvent extends MouseEvent { /** diff --git a/jdk/src/share/classes/java/awt/geom/PathIterator.java b/jdk/src/share/classes/java/awt/geom/PathIterator.java index 3a97f9d210f..84eb219839c 100644 --- a/jdk/src/share/classes/java/awt/geom/PathIterator.java +++ b/jdk/src/share/classes/java/awt/geom/PathIterator.java @@ -25,6 +25,8 @@ package java.awt.geom; +import javax.tools.annotation.GenerateNativeHeader; + /** * The PathIterator interface provides the mechanism * for objects that implement the {@link java.awt.Shape Shape} @@ -57,6 +59,8 @@ package java.awt.geom; * * @author Jim Graham */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public interface PathIterator { /** * The winding rule constant for specifying an even-odd rule diff --git a/jdk/src/share/classes/java/awt/image/AffineTransformOp.java b/jdk/src/share/classes/java/awt/image/AffineTransformOp.java index 11549dee2e9..b3f090a4084 100644 --- a/jdk/src/share/classes/java/awt/image/AffineTransformOp.java +++ b/jdk/src/share/classes/java/awt/image/AffineTransformOp.java @@ -34,6 +34,7 @@ import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Transparency; +import javax.tools.annotation.GenerateNativeHeader; import sun.awt.image.ImagingLib; /** @@ -62,6 +63,8 @@ import sun.awt.image.ImagingLib; * @see java.awt.RenderingHints#KEY_COLOR_RENDERING * @see java.awt.RenderingHints#KEY_DITHERING */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class AffineTransformOp implements BufferedImageOp, RasterOp { private AffineTransform xform; RenderingHints hints; diff --git a/jdk/src/share/classes/java/awt/image/ConvolveOp.java b/jdk/src/share/classes/java/awt/image/ConvolveOp.java index c77700509c6..20f1c31a5a2 100644 --- a/jdk/src/share/classes/java/awt/image/ConvolveOp.java +++ b/jdk/src/share/classes/java/awt/image/ConvolveOp.java @@ -30,6 +30,7 @@ import java.awt.geom.Rectangle2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.Point2D; +import javax.tools.annotation.GenerateNativeHeader; import sun.awt.image.ImagingLib; /** @@ -65,6 +66,8 @@ import sun.awt.image.ImagingLib; * @see java.awt.RenderingHints#KEY_COLOR_RENDERING * @see java.awt.RenderingHints#KEY_DITHERING */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class ConvolveOp implements BufferedImageOp, RasterOp { Kernel kernel; int edgeHint; diff --git a/jdk/src/share/classes/java/awt/image/DataBuffer.java b/jdk/src/share/classes/java/awt/image/DataBuffer.java index 4ad66c64ef3..b0e70f2f134 100644 --- a/jdk/src/share/classes/java/awt/image/DataBuffer.java +++ b/jdk/src/share/classes/java/awt/image/DataBuffer.java @@ -41,6 +41,8 @@ import sun.java2d.StateTrackableDelegate; import sun.awt.image.SunWritableRaster; +import javax.tools.annotation.GenerateNativeHeader; + /** * This class exists to wrap one or more data arrays. Each data array in * the DataBuffer is referred to as a bank. Accessor methods for getting @@ -65,6 +67,8 @@ import sun.awt.image.SunWritableRaster; * @see java.awt.image.Raster * @see java.awt.image.SampleModel */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class DataBuffer { /** Tag for unsigned byte data. */ diff --git a/jdk/src/share/classes/java/awt/image/ImageConsumer.java b/jdk/src/share/classes/java/awt/image/ImageConsumer.java index 471f75d5d8b..c14d50aebbd 100644 --- a/jdk/src/share/classes/java/awt/image/ImageConsumer.java +++ b/jdk/src/share/classes/java/awt/image/ImageConsumer.java @@ -27,6 +27,8 @@ package java.awt.image; import java.util.Hashtable; +import javax.tools.annotation.GenerateNativeHeader; + /** * The interface for objects expressing interest in image data through * the ImageProducer interfaces. When a consumer is added to an image @@ -37,6 +39,8 @@ import java.util.Hashtable; * * @author Jim Graham */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public interface ImageConsumer { /** * The dimensions of the source image are reported using the diff --git a/jdk/src/share/classes/java/awt/image/ImageObserver.java b/jdk/src/share/classes/java/awt/image/ImageObserver.java index 08a7b187db6..60db15b4291 100644 --- a/jdk/src/share/classes/java/awt/image/ImageObserver.java +++ b/jdk/src/share/classes/java/awt/image/ImageObserver.java @@ -27,12 +27,16 @@ package java.awt.image; import java.awt.Image; +import javax.tools.annotation.GenerateNativeHeader; + /** * An asynchronous update interface for receiving notifications about * Image information as the Image is constructed. * * @author Jim Graham */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public interface ImageObserver { /** * This method is called when information about an image which was diff --git a/jdk/src/share/classes/java/awt/peer/ComponentPeer.java b/jdk/src/share/classes/java/awt/peer/ComponentPeer.java index 62c43dd1109..43ef8e51269 100644 --- a/jdk/src/share/classes/java/awt/peer/ComponentPeer.java +++ b/jdk/src/share/classes/java/awt/peer/ComponentPeer.java @@ -32,6 +32,7 @@ import java.awt.image.ImageObserver; import java.awt.image.ColorModel; import java.awt.image.VolatileImage; import java.awt.GraphicsConfiguration; +import javax.tools.annotation.GenerateNativeHeader; import sun.awt.CausedFocusEvent; import sun.java2d.pipe.Region; @@ -49,6 +50,8 @@ import sun.java2d.pipe.Region; * nor invoke any of the peer methods directly on the peer * instances. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public interface ComponentPeer { /** diff --git a/jdk/src/share/classes/java/awt/print/PageFormat.java b/jdk/src/share/classes/java/awt/print/PageFormat.java index e2974108e31..8a19b667055 100644 --- a/jdk/src/share/classes/java/awt/print/PageFormat.java +++ b/jdk/src/share/classes/java/awt/print/PageFormat.java @@ -29,10 +29,14 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; +import javax.tools.annotation.GenerateNativeHeader; + /** * The PageFormat class describes the size and * orientation of a page to be printed. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class PageFormat implements Cloneable { diff --git a/jdk/src/share/classes/java/awt/print/Pageable.java b/jdk/src/share/classes/java/awt/print/Pageable.java index 58abd1eb6aa..e98f6f44547 100644 --- a/jdk/src/share/classes/java/awt/print/Pageable.java +++ b/jdk/src/share/classes/java/awt/print/Pageable.java @@ -25,6 +25,8 @@ package java.awt.print; +import javax.tools.annotation.GenerateNativeHeader; + /** * The Pageable implementation represents a set of * pages to be printed. The Pageable object returns @@ -33,6 +35,8 @@ package java.awt.print; * @see java.awt.print.PageFormat * @see java.awt.print.Printable */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public interface Pageable { /** diff --git a/jdk/src/share/classes/java/awt/print/Printable.java b/jdk/src/share/classes/java/awt/print/Printable.java index 807e927e684..dacf917da86 100644 --- a/jdk/src/share/classes/java/awt/print/Printable.java +++ b/jdk/src/share/classes/java/awt/print/Printable.java @@ -27,6 +27,8 @@ package java.awt.print; import java.awt.Graphics; +import javax.tools.annotation.GenerateNativeHeader; + /** * The Printable interface is implemented * by the print methods of the current @@ -98,6 +100,8 @@ import java.awt.Graphics; * @see java.awt.print.PageFormat * @see java.awt.print.PrinterJob */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public interface Printable { /** diff --git a/jdk/src/share/classes/java/io/SerialCallbackContext.java b/jdk/src/share/classes/java/io/SerialCallbackContext.java index fc12cda80eb..748d38edb36 100644 --- a/jdk/src/share/classes/java/io/SerialCallbackContext.java +++ b/jdk/src/share/classes/java/io/SerialCallbackContext.java @@ -1,54 +1,74 @@ - /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. - * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ +/* + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ - package java.io; +package java.io; - /** - * Context during upcalls from object stream to class-defined - * readObject/writeObject methods. - * Holds object currently being deserialized and descriptor for current class. - * - * This context keeps track of the thread it was constructed on, and allows - * only a single call of defaultReadObject, readFields, defaultWriteObject - * or writeFields which must be invoked on the same thread before the class's - * readObject/writeObject method has returned. - * If not set to the current thread, the getObj method throws NotActiveException. - */ - final class SerialCallbackContext { - private final Object obj; - private final ObjectStreamClass desc; - /** - * Thread this context is in use by. - * As this only works in one thread, we do not need to worry about thread-safety. - */ - private Thread thread; +/** + * Context during upcalls from object stream to class-defined + * readObject/writeObject methods. + * Holds object currently being deserialized and descriptor for current class. + * + * This context keeps track of the thread it was constructed on, and allows + * only a single call of defaultReadObject, readFields, defaultWriteObject + * or writeFields which must be invoked on the same thread before the class's + * readObject/writeObject method has returned. + * If not set to the current thread, the getObj method throws NotActiveException. + */ +final class SerialCallbackContext { + private final Object obj; + private final ObjectStreamClass desc; + /** + * Thread this context is in use by. + * As this only works in one thread, we do not need to worry about thread-safety. + */ + private Thread thread; - public SerialCallbackContext(Object obj, ObjectStreamClass desc) { - this.obj = obj; - this.desc = desc; - this.thread = Thread.currentThread(); - } + public SerialCallbackContext(Object obj, ObjectStreamClass desc) { + this.obj = obj; + this.desc = desc; + this.thread = Thread.currentThread(); + } - public Object getObj() throws NotActiveException { - checkAndSetUsed(); - return obj; - } + public Object getObj() throws NotActiveException { + checkAndSetUsed(); + return obj; + } - public ObjectStreamClass getDesc() { - return desc; - } + public ObjectStreamClass getDesc() { + return desc; + } - private void checkAndSetUsed() throws NotActiveException { - if (thread != Thread.currentThread()) { - throw new NotActiveException( - "not in readObject invocation or fields already read"); - } - thread = null; - } + private void checkAndSetUsed() throws NotActiveException { + if (thread != Thread.currentThread()) { + throw new NotActiveException( + "not in readObject invocation or fields already read"); + } + thread = null; + } - public void setUsed() { - thread = null; - } - } + public void setUsed() { + thread = null; + } +} diff --git a/jdk/src/share/classes/java/lang/IllegalArgumentException.java b/jdk/src/share/classes/java/lang/IllegalArgumentException.java index 13ffbf1a524..c29a9d57414 100644 --- a/jdk/src/share/classes/java/lang/IllegalArgumentException.java +++ b/jdk/src/share/classes/java/lang/IllegalArgumentException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,6 @@ package java.lang; * inappropriate argument. * * @author unascribed - * @see java.lang.Thread#setPriority(int) * @since JDK1.0 */ public diff --git a/jdk/src/share/classes/java/lang/Integer.java b/jdk/src/share/classes/java/lang/Integer.java index 88acdfa11da..48ef1bbbbfb 100644 --- a/jdk/src/share/classes/java/lang/Integer.java +++ b/jdk/src/share/classes/java/lang/Integer.java @@ -381,7 +381,7 @@ public final class Integer extends Number implements Comparable { int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i); char[] buf = new char[size]; getChars(i, size, buf); - return new String(0, size, buf); + return new String(buf, true); } /** @@ -780,6 +780,9 @@ public final class Integer extends Number implements Comparable { int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); + + // range [-128, 127] must be interned (JLS7 5.1.7) + assert IntegerCache.high >= 127; } private IntegerCache() {} @@ -801,7 +804,6 @@ public final class Integer extends Number implements Comparable { * @since 1.5 */ public static Integer valueOf(int i) { - assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); diff --git a/jdk/src/share/classes/java/lang/Long.java b/jdk/src/share/classes/java/lang/Long.java index f4dc32dcdff..55f7b1a7e9d 100644 --- a/jdk/src/share/classes/java/lang/Long.java +++ b/jdk/src/share/classes/java/lang/Long.java @@ -373,7 +373,7 @@ public final class Long extends Number implements Comparable { int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i); char[] buf = new char[size]; getChars(i, size, buf); - return new String(0, size, buf); + return new String(buf, true); } /** diff --git a/jdk/src/share/classes/java/lang/NumberFormatException.java b/jdk/src/share/classes/java/lang/NumberFormatException.java index c1d19de7156..ea1ec9fd771 100644 --- a/jdk/src/share/classes/java/lang/NumberFormatException.java +++ b/jdk/src/share/classes/java/lang/NumberFormatException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ package java.lang; * have the appropriate format. * * @author unascribed - * @see java.lang.Integer#toString() + * @see java.lang.Integer#parseInt(String) * @since JDK1.0 */ public diff --git a/jdk/src/share/classes/java/lang/Process.java b/jdk/src/share/classes/java/lang/Process.java index ec0a661d7ce..4e945382465 100644 --- a/jdk/src/share/classes/java/lang/Process.java +++ b/jdk/src/share/classes/java/lang/Process.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ package java.lang; import java.io.*; +import java.util.concurrent.TimeUnit; /** * The {@link ProcessBuilder#start()} and @@ -91,7 +92,7 @@ public abstract class Process { * @return the output stream connected to the normal input of the * subprocess */ - abstract public OutputStream getOutputStream(); + public abstract OutputStream getOutputStream(); /** * Returns the input stream connected to the normal output of the @@ -117,7 +118,7 @@ public abstract class Process { * @return the input stream connected to the normal output of the * subprocess */ - abstract public InputStream getInputStream(); + public abstract InputStream getInputStream(); /** * Returns the input stream connected to the error output of the @@ -138,7 +139,7 @@ public abstract class Process { * @return the input stream connected to the error output of * the subprocess */ - abstract public InputStream getErrorStream(); + public abstract InputStream getErrorStream(); /** * Causes the current thread to wait, if necessary, until the @@ -156,7 +157,51 @@ public abstract class Process { * thread while it is waiting, then the wait is ended and * an {@link InterruptedException} is thrown. */ - abstract public int waitFor() throws InterruptedException; + public abstract int waitFor() throws InterruptedException; + + /** + * Causes the current thread to wait, if necessary, until the + * subprocess represented by this {@code Process} object has + * terminated, or the specified waiting time elapses. + * + *

    If the subprocess has already terminated then this method returns + * immediately with the value {@code true}. If the process has not + * terminated and the timeout value is less than, or equal to, zero, then + * this method returns immediately with the value {@code false}. + * + *

    The default implementation of this methods polls the {@code exitValue} + * to check if the process has terminated. Concrete implementations of this + * class are strongly encouraged to override this method with a more + * efficient implementation. + * + * @param timeout the maximum time to wait + * @param unit the time unit of the {@code timeout} argument + * @return {@code true} if the subprocess has exited and {@code false} if + * the waiting time elapsed before the subprocess has exited. + * @throws InterruptedException if the current thread is interrupted + * while waiting. + * @throws NullPointerException if unit is null + * @since 1.8 + */ + public boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + long startTime = System.nanoTime(); + long rem = unit.toNanos(timeout); + + do { + try { + exitValue(); + return true; + } catch(IllegalThreadStateException ex) { + if (rem > 0) + Thread.sleep( + Math.min(TimeUnit.NANOSECONDS.toMillis(rem) + 1, 100)); + } + rem = unit.toNanos(timeout) - (System.nanoTime() - startTime); + } while (rem > 0); + return false; + } /** * Returns the exit value for the subprocess. @@ -167,11 +212,54 @@ public abstract class Process { * @throws IllegalThreadStateException if the subprocess represented * by this {@code Process} object has not yet terminated */ - abstract public int exitValue(); + public abstract int exitValue(); + + /** + * Kills the subprocess. Whether the subprocess represented by this + * {@code Process} object is forcibly terminated or not is + * implementation dependent. + */ + public abstract void destroy(); /** * Kills the subprocess. The subprocess represented by this * {@code Process} object is forcibly terminated. + * + *

    The default implementation of this method invokes {@link #destroy} + * and so may not forcibly terminate the process. Concrete implementations + * of this class are strongly encouraged to override this method with a + * compliant implementation. Invoking this method on {@code Process} + * objects returned by {@link ProcessBuilder#start} and + * {@link Runtime#exec} will forcibly terminate the process. + * + *

    Note: The subprocess may not terminate immediately. + * i.e. {@code isAlive()} may return true for a brief period + * after {@code destroyForcibly()} is called. This method + * may be chained to {@code waitFor()} if needed. + * + * @return the {@code Process} object representing the + * subprocess to be forcibly destroyed. + * @since 1.8 */ - abstract public void destroy(); + public Process destroyForcibly() { + destroy(); + return this; + } + + /** + * Tests whether the subprocess represented by this {@code Process} is + * alive. + * + * @return {@code true} if the subprocess represented by this + * {@code Process} object has not yet terminated. + * @since 1.8 + */ + public boolean isAlive() { + try { + exitValue(); + return false; + } catch(IllegalThreadStateException e) { + return true; + } + } } diff --git a/jdk/src/share/classes/java/lang/String.java b/jdk/src/share/classes/java/lang/String.java index 79c71d119a5..0b1d55bcd0a 100644 --- a/jdk/src/share/classes/java/lang/String.java +++ b/jdk/src/share/classes/java/lang/String.java @@ -25,7 +25,6 @@ package java.lang; -import java.io.ObjectStreamClass; import java.io.ObjectStreamField; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; @@ -108,17 +107,10 @@ import java.util.regex.PatternSyntaxException; */ public final class String - implements java.io.Serializable, Comparable, CharSequence -{ + implements java.io.Serializable, Comparable, CharSequence { /** The value is used for character storage. */ private final char value[]; - /** The offset is the first index of the storage that is used. */ - private final int offset; - - /** The count is the number of characters in the String. */ - private final int count; - /** Cache the hash code for the string */ private int hash; // Default to 0 @@ -138,7 +130,7 @@ public final class String * string instance within the stream. */ private static final ObjectStreamField[] serialPersistentFields = - new ObjectStreamField[0]; + new ObjectStreamField[0]; /** * Initializes a newly created {@code String} object so that it represents @@ -146,8 +138,6 @@ public final class String * unnecessary since Strings are immutable. */ public String() { - this.offset = 0; - this.count = 0; this.value = new char[0]; } @@ -162,23 +152,8 @@ public final class String * A {@code String} */ public String(String original) { - int size = original.count; - char[] originalValue = original.value; - char[] v; - if (originalValue.length > size) { - // The array representing the String is bigger than the new - // String itself. Perhaps this constructor is being called - // in order to trim the baggage, so make a copy of the array. - int off = original.offset; - v = Arrays.copyOfRange(originalValue, off, off+size); - } else { - // The array representing the String is the same - // size as the String, so no point in making a copy. - v = originalValue; - } - this.offset = 0; - this.count = size; - this.value = v; + this.value = original.value; + this.hash = original.hash; } /** @@ -191,10 +166,7 @@ public final class String * The initial value of the string */ public String(char value[]) { - int size = value.length; - this.offset = 0; - this.count = size; - this.value = Arrays.copyOf(value, size); + this.value = Arrays.copyOf(value, value.length); } /** @@ -229,8 +201,6 @@ public final class String if (offset > value.length - count) { throw new StringIndexOutOfBoundsException(offset + count); } - this.offset = 0; - this.count = count; this.value = Arrays.copyOfRange(value, offset, offset+count); } @@ -293,14 +263,12 @@ public final class String for (int i = offset, j = 0; i < end; i++, j++) { int c = codePoints[i]; if (Character.isBmpCodePoint(c)) - v[j] = (char) c; + v[j] = (char)c; else Character.toSurrogates(c, v, j++); } - this.value = v; - this.count = n; - this.offset = 0; + this.value = v; } /** @@ -348,17 +316,15 @@ public final class String char value[] = new char[count]; if (hibyte == 0) { - for (int i = count ; i-- > 0 ;) { - value[i] = (char) (ascii[i + offset] & 0xff); + for (int i = count; i-- > 0;) { + value[i] = (char)(ascii[i + offset] & 0xff); } } else { hibyte <<= 8; - for (int i = count ; i-- > 0 ;) { - value[i] = (char) (hibyte | (ascii[i + offset] & 0xff)); + for (int i = count; i-- > 0;) { + value[i] = (char)(hibyte | (ascii[i + offset] & 0xff)); } } - this.offset = 0; - this.count = count; this.value = value; } @@ -444,15 +410,11 @@ public final class String * @since JDK1.1 */ public String(byte bytes[], int offset, int length, String charsetName) - throws UnsupportedEncodingException - { + throws UnsupportedEncodingException { if (charsetName == null) throw new NullPointerException("charsetName"); checkBounds(bytes, offset, length); - char[] v = StringCoding.decode(charsetName, bytes, offset, length); - this.offset = 0; - this.count = v.length; - this.value = v; + this.value = StringCoding.decode(charsetName, bytes, offset, length); } /** @@ -489,10 +451,7 @@ public final class String if (charset == null) throw new NullPointerException("charset"); checkBounds(bytes, offset, length); - char[] v = StringCoding.decode(charset, bytes, offset, length); - this.offset = 0; - this.count = v.length; - this.value = v; + this.value = StringCoding.decode(charset, bytes, offset, length); } /** @@ -519,8 +478,7 @@ public final class String * @since JDK1.1 */ public String(byte bytes[], String charsetName) - throws UnsupportedEncodingException - { + throws UnsupportedEncodingException { this(bytes, 0, bytes.length, charsetName); } @@ -576,10 +534,7 @@ public final class String */ public String(byte bytes[], int offset, int length) { checkBounds(bytes, offset, length); - char[] v = StringCoding.decode(bytes, offset, length); - this.offset = 0; - this.count = v.length; - this.value = v; + this.value = StringCoding.decode(bytes, offset, length); } /** @@ -612,10 +567,9 @@ public final class String * A {@code StringBuffer} */ public String(StringBuffer buffer) { - String result = buffer.toString(); - this.value = result.value; - this.count = result.count; - this.offset = result.offset; + synchronized(buffer) { + this.value = Arrays.copyOf(buffer.getValue(), buffer.length()); + } } /** @@ -634,18 +588,18 @@ public final class String * @since 1.5 */ public String(StringBuilder builder) { - String result = builder.toString(); - this.value = result.value; - this.count = result.count; - this.offset = result.offset; + this.value = Arrays.copyOf(builder.getValue(), builder.length()); } - - // Package private constructor which shares value array for speed. - String(int offset, int count, char value[]) { + /* + * Package private constructor which shares value array for speed. + * this constructor is always expected to be called with share==true. + * a separate constructor is needed because we already have a public + * String(char[]) constructor that makes a copy of the given char[]. + */ + String(char[] value, boolean share) { + // assert share : "unshared not supported"; this.value = value; - this.offset = offset; - this.count = count; } /** @@ -657,7 +611,7 @@ public final class String * object. */ public int length() { - return count; + return value.length; } /** @@ -669,7 +623,7 @@ public final class String * @since 1.6 */ public boolean isEmpty() { - return count == 0; + return value.length == 0; } /** @@ -691,10 +645,10 @@ public final class String * string. */ public char charAt(int index) { - if ((index < 0) || (index >= count)) { + if ((index < 0) || (index >= value.length)) { throw new StringIndexOutOfBoundsException(index); } - return value[index + offset]; + return value[index]; } /** @@ -720,10 +674,10 @@ public final class String * @since 1.5 */ public int codePointAt(int index) { - if ((index < 0) || (index >= count)) { + if ((index < 0) || (index >= value.length)) { throw new StringIndexOutOfBoundsException(index); } - return Character.codePointAtImpl(value, offset + index, offset + count); + return Character.codePointAtImpl(value, index, value.length); } /** @@ -750,10 +704,10 @@ public final class String */ public int codePointBefore(int index) { int i = index - 1; - if ((i < 0) || (i >= count)) { + if ((i < 0) || (i >= value.length)) { throw new StringIndexOutOfBoundsException(index); } - return Character.codePointBeforeImpl(value, offset + index, offset); + return Character.codePointBeforeImpl(value, index, 0); } /** @@ -778,10 +732,10 @@ public final class String * @since 1.5 */ public int codePointCount(int beginIndex, int endIndex) { - if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) { + if (beginIndex < 0 || endIndex > value.length || beginIndex > endIndex) { throw new IndexOutOfBoundsException(); } - return Character.codePointCountImpl(value, offset+beginIndex, endIndex-beginIndex); + return Character.codePointCountImpl(value, beginIndex, endIndex - beginIndex); } /** @@ -805,11 +759,11 @@ public final class String * @since 1.5 */ public int offsetByCodePoints(int index, int codePointOffset) { - if (index < 0 || index > count) { + if (index < 0 || index > value.length) { throw new IndexOutOfBoundsException(); } - return Character.offsetByCodePointsImpl(value, offset, count, - offset+index, codePointOffset) - offset; + return Character.offsetByCodePointsImpl(value, 0, value.length, + index, codePointOffset); } /** @@ -817,7 +771,7 @@ public final class String * This method doesn't perform any range checking. */ void getChars(char dst[], int dstBegin) { - System.arraycopy(value, offset, dst, dstBegin, count); + System.arraycopy(value, 0, dst, dstBegin, value.length); } /** @@ -854,14 +808,13 @@ public final class String if (srcBegin < 0) { throw new StringIndexOutOfBoundsException(srcBegin); } - if (srcEnd > count) { + if (srcEnd > value.length) { throw new StringIndexOutOfBoundsException(srcEnd); } if (srcBegin > srcEnd) { throw new StringIndexOutOfBoundsException(srcEnd - srcBegin); } - System.arraycopy(value, offset + srcBegin, dst, dstBegin, - srcEnd - srcBegin); + System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin); } /** @@ -912,15 +865,15 @@ public final class String if (srcBegin < 0) { throw new StringIndexOutOfBoundsException(srcBegin); } - if (srcEnd > count) { + if (srcEnd > value.length) { throw new StringIndexOutOfBoundsException(srcEnd); } if (srcBegin > srcEnd) { throw new StringIndexOutOfBoundsException(srcEnd - srcBegin); } int j = dstBegin; - int n = offset + srcEnd; - int i = offset + srcBegin; + int n = srcEnd; + int i = srcBegin; char[] val = value; /* avoid getfield opcode */ while (i < n) { @@ -949,10 +902,9 @@ public final class String * @since JDK1.1 */ public byte[] getBytes(String charsetName) - throws UnsupportedEncodingException - { + throws UnsupportedEncodingException { if (charsetName == null) throw new NullPointerException(); - return StringCoding.encode(charsetName, value, offset, count); + return StringCoding.encode(charsetName, value, 0, value.length); } /** @@ -975,7 +927,7 @@ public final class String */ public byte[] getBytes(Charset charset) { if (charset == null) throw new NullPointerException(); - return StringCoding.encode(charset, value, offset, count); + return StringCoding.encode(charset, value, 0, value.length); } /** @@ -992,7 +944,7 @@ public final class String * @since JDK1.1 */ public byte[] getBytes() { - return StringCoding.encode(value, offset, count); + return StringCoding.encode(value, 0, value.length); } /** @@ -1015,16 +967,16 @@ public final class String return true; } if (anObject instanceof String) { - String anotherString = (String)anObject; - int n = count; - if (n == anotherString.count) { + String anotherString = (String) anObject; + int n = value.length; + if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; - int i = offset; - int j = anotherString.offset; + int i = 0; while (n-- != 0) { - if (v1[i++] != v2[j++]) - return false; + if (v1[i] != v2[i]) + return false; + i++; } return true; } @@ -1047,8 +999,8 @@ public final class String * @since 1.4 */ public boolean contentEquals(StringBuffer sb) { - synchronized(sb) { - return contentEquals((CharSequence)sb); + synchronized (sb) { + return contentEquals((CharSequence) sb); } } @@ -1067,18 +1019,18 @@ public final class String * @since 1.5 */ public boolean contentEquals(CharSequence cs) { - if (count != cs.length()) + if (value.length != cs.length()) return false; // Argument is a StringBuffer, StringBuilder if (cs instanceof AbstractStringBuilder) { char v1[] = value; - char v2[] = ((AbstractStringBuilder)cs).getValue(); - int i = offset; - int j = 0; - int n = count; + char v2[] = ((AbstractStringBuilder) cs).getValue(); + int i = 0; + int n = value.length; while (n-- != 0) { - if (v1[i++] != v2[j++]) + if (v1[i] != v2[i]) return false; + i++; } return true; } @@ -1087,12 +1039,12 @@ public final class String return true; // Argument is a generic CharSequence char v1[] = value; - int i = offset; - int j = 0; - int n = count; + int i = 0; + int n = value.length; while (n-- != 0) { - if (v1[i++] != cs.charAt(j++)) + if (v1[i] != cs.charAt(i)) return false; + i++; } return true; } @@ -1126,9 +1078,10 @@ public final class String * @see #equals(Object) */ public boolean equalsIgnoreCase(String anotherString) { - return (this == anotherString) ? true : - (anotherString != null) && (anotherString.count == count) && - regionMatches(true, 0, anotherString, 0, count); + return (this == anotherString) ? true + : (anotherString != null) + && (anotherString.value.length == value.length) + && regionMatches(true, 0, anotherString, 0, value.length); } /** @@ -1173,33 +1126,20 @@ public final class String * lexicographically greater than the string argument. */ public int compareTo(String anotherString) { - int len1 = count; - int len2 = anotherString.count; - int n = Math.min(len1, len2); + int len1 = value.length; + int len2 = anotherString.value.length; + int lim = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; - int i = offset; - int j = anotherString.offset; - if (i == j) { - int k = i; - int lim = n + i; - while (k < lim) { - char c1 = v1[k]; - char c2 = v2[k]; - if (c1 != c2) { - return c1 - c2; - } - k++; - } - } else { - while (n-- != 0) { - char c1 = v1[i++]; - char c2 = v2[j++]; - if (c1 != c2) { - return c1 - c2; - } + int k = 0; + while (k < lim) { + char c1 = v1[k]; + char c2 = v2[k]; + if (c1 != c2) { + return c1 - c2; } + k++; } return len1 - len2; } @@ -1219,7 +1159,7 @@ public final class String public static final Comparator CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator(); private static class CaseInsensitiveComparator - implements Comparator, java.io.Serializable { + implements Comparator, java.io.Serializable { // use serialVersionUID from JDK 1.2.2 for interoperability private static final long serialVersionUID = 8575799808933029326L; @@ -1306,14 +1246,15 @@ public final class String * {@code false} otherwise. */ public boolean regionMatches(int toffset, String other, int ooffset, - int len) { + int len) { char ta[] = value; - int to = offset + toffset; + int to = toffset; char pa[] = other.value; - int po = other.offset + ooffset; + int po = ooffset; // Note: toffset, ooffset, or len might be near -1>>>1. - if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len) - || (ooffset > (long)other.count - len)) { + if ((ooffset < 0) || (toffset < 0) + || (toffset > (long)value.length - len) + || (ooffset > (long)other.value.length - len)) { return false; } while (len-- > 0) { @@ -1351,7 +1292,7 @@ public final class String * integer k less than len such that: *

          * Character.toLowerCase(this.charAt(toffset+k)) !=
    -               Character.toLowerCase(other.charAt(ooffset+k))
    +     Character.toLowerCase(other.charAt(ooffset+k))
          * 
    * and: *
    @@ -1375,14 +1316,15 @@ public final class String
          *          argument.
          */
         public boolean regionMatches(boolean ignoreCase, int toffset,
    -                           String other, int ooffset, int len) {
    +            String other, int ooffset, int len) {
             char ta[] = value;
    -        int to = offset + toffset;
    +        int to = toffset;
             char pa[] = other.value;
    -        int po = other.offset + ooffset;
    +        int po = ooffset;
             // Note: toffset, ooffset, or len might be near -1>>>1.
    -        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len) ||
    -                (ooffset > (long)other.count - len)) {
    +        if ((ooffset < 0) || (toffset < 0)
    +                || (toffset > (long)value.length - len)
    +                || (ooffset > (long)other.value.length - len)) {
                 return false;
             }
             while (len-- > 0) {
    @@ -1433,12 +1375,12 @@ public final class String
          */
         public boolean startsWith(String prefix, int toffset) {
             char ta[] = value;
    -        int to = offset + toffset;
    +        int to = toffset;
             char pa[] = prefix.value;
    -        int po = prefix.offset;
    -        int pc = prefix.count;
    +        int po = 0;
    +        int pc = prefix.value.length;
             // Note: toffset might be near -1>>>1.
    -        if ((toffset < 0) || (toffset > count - pc)) {
    +        if ((toffset < 0) || (toffset > value.length - pc)) {
                 return false;
             }
             while (--pc >= 0) {
    @@ -1478,7 +1420,7 @@ public final class String
          *          as determined by the {@link #equals(Object)} method.
          */
         public boolean endsWith(String suffix) {
    -        return startsWith(suffix, count - suffix.count);
    +        return startsWith(suffix, value.length - suffix.value.length);
         }
     
         /**
    @@ -1496,13 +1438,11 @@ public final class String
          */
         public int hashCode() {
             int h = hash;
    -        if (h == 0 && count > 0) {
    -            int off = offset;
    +        if (h == 0 && value.length > 0) {
                 char val[] = value;
    -            int len = count;
     
    -            for (int i = 0; i < len; i++) {
    -                h = 31*h + val[off++];
    +            for (int i = 0; i < value.length; i++) {
    +                h = 31 * h + val[i];
                 }
                 hash = h;
             }
    @@ -1577,9 +1517,10 @@ public final class String
          *          if the character does not occur.
          */
         public int indexOf(int ch, int fromIndex) {
    +        final int max = value.length;
             if (fromIndex < 0) {
                 fromIndex = 0;
    -        } else if (fromIndex >= count) {
    +        } else if (fromIndex >= max) {
                 // Note: fromIndex might be near -1>>>1.
                 return -1;
             }
    @@ -1588,11 +1529,9 @@ public final class String
                 // handle most cases here (ch is a BMP code point or a
                 // negative value (invalid code point))
                 final char[] value = this.value;
    -            final int offset = this.offset;
    -            final int max = offset + count;
    -            for (int i = offset + fromIndex; i < max ; i++) {
    +            for (int i = fromIndex; i < max; i++) {
                     if (value[i] == ch) {
    -                    return i - offset;
    +                    return i;
                     }
                 }
                 return -1;
    @@ -1607,13 +1546,12 @@ public final class String
         private int indexOfSupplementary(int ch, int fromIndex) {
             if (Character.isValidCodePoint(ch)) {
                 final char[] value = this.value;
    -            final int offset = this.offset;
                 final char hi = Character.highSurrogate(ch);
                 final char lo = Character.lowSurrogate(ch);
    -            final int max = offset + count - 1;
    -            for (int i = offset + fromIndex; i < max; i++) {
    -                if (value[i] == hi && value[i+1] == lo) {
    -                    return i - offset;
    +            final int max = value.length - 1;
    +            for (int i = fromIndex; i < max; i++) {
    +                if (value[i] == hi && value[i + 1] == lo) {
    +                    return i;
                     }
                 }
             }
    @@ -1644,7 +1582,7 @@ public final class String
          *          {@code -1} if the character does not occur.
          */
         public int lastIndexOf(int ch) {
    -        return lastIndexOf(ch, count - 1);
    +        return lastIndexOf(ch, value.length - 1);
         }
     
         /**
    @@ -1686,11 +1624,10 @@ public final class String
                 // handle most cases here (ch is a BMP code point or a
                 // negative value (invalid code point))
                 final char[] value = this.value;
    -            final int offset = this.offset;
    -            int i = offset + Math.min(fromIndex, count - 1);
    -            for (; i >= offset ; i--) {
    +            int i = Math.min(fromIndex, value.length - 1);
    +            for (; i >= 0; i--) {
                     if (value[i] == ch) {
    -                    return i - offset;
    +                    return i;
                     }
                 }
                 return -1;
    @@ -1705,13 +1642,12 @@ public final class String
         private int lastIndexOfSupplementary(int ch, int fromIndex) {
             if (Character.isValidCodePoint(ch)) {
                 final char[] value = this.value;
    -            final int offset = this.offset;
                 char hi = Character.highSurrogate(ch);
                 char lo = Character.lowSurrogate(ch);
    -            int i = offset + Math.min(fromIndex, count - 2);
    -            for (; i >= offset; i--) {
    -                if (value[i] == hi && value[i+1] == lo) {
    -                    return i - offset;
    +            int i = Math.min(fromIndex, value.length - 2);
    +            for (; i >= 0; i--) {
    +                if (value[i] == hi && value[i + 1] == lo) {
    +                    return i;
                     }
                 }
             }
    @@ -1753,8 +1689,8 @@ public final class String
          *          or {@code -1} if there is no such occurrence.
          */
         public int indexOf(String str, int fromIndex) {
    -        return indexOf(value, offset, count,
    -                       str.value, str.offset, str.count, fromIndex);
    +        return indexOf(value, 0, value.length,
    +                str.value, 0, str.value.length, fromIndex);
         }
     
         /**
    @@ -1771,8 +1707,8 @@ public final class String
          * @param   fromIndex    the index to begin searching from.
          */
         static int indexOf(char[] source, int sourceOffset, int sourceCount,
    -                       char[] target, int targetOffset, int targetCount,
    -                       int fromIndex) {
    +            char[] target, int targetOffset, int targetCount,
    +            int fromIndex) {
             if (fromIndex >= sourceCount) {
                 return (targetCount == 0 ? sourceCount : -1);
             }
    @@ -1783,7 +1719,7 @@ public final class String
                 return fromIndex;
             }
     
    -        char first  = target[targetOffset];
    +        char first = target[targetOffset];
             int max = sourceOffset + (sourceCount - targetCount);
     
             for (int i = sourceOffset + fromIndex; i <= max; i++) {
    @@ -1796,8 +1732,8 @@ public final class String
                 if (i <= max) {
                     int j = i + 1;
                     int end = j + targetCount - 1;
    -                for (int k = targetOffset + 1; j < end && source[j] ==
    -                         target[k]; j++, k++);
    +                for (int k = targetOffset + 1; j < end && source[j]
    +                        == target[k]; j++, k++);
     
                     if (j == end) {
                         /* Found whole string. */
    @@ -1824,7 +1760,7 @@ public final class String
          *          or {@code -1} if there is no such occurrence.
          */
         public int lastIndexOf(String str) {
    -        return lastIndexOf(str, count);
    +        return lastIndexOf(str, value.length);
         }
     
         /**
    @@ -1844,8 +1780,8 @@ public final class String
          *          or {@code -1} if there is no such occurrence.
          */
         public int lastIndexOf(String str, int fromIndex) {
    -        return lastIndexOf(value, offset, count,
    -                           str.value, str.offset, str.count, fromIndex);
    +        return lastIndexOf(value, 0, value.length,
    +                str.value, 0, str.value.length, fromIndex);
         }
     
         /**
    @@ -1862,8 +1798,8 @@ public final class String
          * @param   fromIndex    the index to begin searching from.
          */
         static int lastIndexOf(char[] source, int sourceOffset, int sourceCount,
    -                           char[] target, int targetOffset, int targetCount,
    -                           int fromIndex) {
    +            char[] target, int targetOffset, int targetCount,
    +            int fromIndex) {
             /*
              * Check arguments; return immediately where possible. For
              * consistency, don't check for null str.
    @@ -1885,7 +1821,7 @@ public final class String
             int min = sourceOffset + targetCount - 1;
             int i = min + fromIndex;
     
    -    startSearchForLastChar:
    +        startSearchForLastChar:
             while (true) {
                 while (i >= min && source[i] != strLastChar) {
                     i--;
    @@ -1925,7 +1861,14 @@ public final class String
          *             length of this {@code String} object.
          */
         public String substring(int beginIndex) {
    -        return substring(beginIndex, count);
    +        if (beginIndex < 0) {
    +            throw new StringIndexOutOfBoundsException(beginIndex);
    +        }
    +        int subLen = value.length - beginIndex;
    +        if (subLen < 0) {
    +            throw new StringIndexOutOfBoundsException(subLen);
    +        }
    +        return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
         }
     
         /**
    @@ -1954,14 +1897,15 @@ public final class String
             if (beginIndex < 0) {
                 throw new StringIndexOutOfBoundsException(beginIndex);
             }
    -        if (endIndex > count) {
    +        if (endIndex > value.length) {
                 throw new StringIndexOutOfBoundsException(endIndex);
             }
    -        if (beginIndex > endIndex) {
    -            throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
    +        int subLen = endIndex - beginIndex;
    +        if (subLen < 0) {
    +            throw new StringIndexOutOfBoundsException(subLen);
             }
    -        return ((beginIndex == 0) && (endIndex == count)) ? this :
    -            new String(offset + beginIndex, endIndex - beginIndex, value);
    +        return ((beginIndex == 0) && (endIndex == value.length)) ? this
    +                : new String(value, beginIndex, subLen);
         }
     
         /**
    @@ -1977,17 +1921,17 @@ public final class String
          * 
          * str.substring(begin, end)
    * - * This method is defined so that the String class can implement + * This method is defined so that the {@code String} class can implement * the {@link CharSequence} interface.

    * - * @param beginIndex the begin index, inclusive. - * @param endIndex the end index, exclusive. - * @return the specified subsequence. + * @param beginIndex the begin index, inclusive. + * @param endIndex the end index, exclusive. + * @return the specified subsequence. * * @throws IndexOutOfBoundsException - * if beginIndex or endIndex are negative, - * if endIndex is greater than length(), - * or if beginIndex is greater than startIndex + * if {@code beginIndex} or {@code endIndex} is negative, + * if {@code endIndex} is greater than {@code length()}, + * or if {@code beginIndex} is greater than {@code endIndex} * * @since 1.4 * @spec JSR-51 @@ -2021,10 +1965,10 @@ public final class String if (otherLen == 0) { return this; } - char buf[] = new char[count + otherLen]; - getChars(0, count, buf, 0); - str.getChars(0, otherLen, buf, count); - return new String(0, count + otherLen, buf); + int len = value.length; + char buf[] = Arrays.copyOf(value, len + otherLen); + str.getChars(buf, len); + return new String(buf, true); } /** @@ -2058,27 +2002,26 @@ public final class String */ public String replace(char oldChar, char newChar) { if (oldChar != newChar) { - int len = count; + int len = value.length; int i = -1; char[] val = value; /* avoid getfield opcode */ - int off = offset; /* avoid getfield opcode */ while (++i < len) { - if (val[off + i] == oldChar) { + if (val[i] == oldChar) { break; } } if (i < len) { char buf[] = new char[len]; - for (int j = 0 ; j < i ; j++) { - buf[j] = val[off+j]; + for (int j = 0; j < i; j++) { + buf[j] = val[j]; } while (i < len) { - char c = val[off + i]; + char c = val[i]; buf[i] = (c == oldChar) ? newChar : c; i++; } - return new String(0, len, buf); + return new String(buf, true); } } return this; @@ -2229,7 +2172,7 @@ public final class String */ public String replace(CharSequence target, CharSequence replacement) { return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( - this).replaceAll(Matcher.quoteReplacement(replacement.toString())); + this).replaceAll(Matcher.quoteReplacement(replacement.toString())); } /** @@ -2314,13 +2257,13 @@ public final class String */ public String[] split(String regex, int limit) { /* fastpath if the regex is a - (1)one-char String and this character is not one of the - RegEx's meta characters ".$|()[{^?*+\\", or - (2)two-char String and the first char is the backslash and - the second is not the ascii digit or ascii letter. - */ + (1)one-char String and this character is not one of the + RegEx's meta characters ".$|()[{^?*+\\", or + (2)two-char String and the first char is the backslash and + the second is not the ascii digit or ascii letter. + */ char ch = 0; - if (((regex.count == 1 && + if (((regex.value.length == 1 && ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) || (regex.length() == 2 && regex.charAt(0) == '\\' && @@ -2340,23 +2283,23 @@ public final class String off = next + 1; } else { // last one //assert (list.size() == limit - 1); - list.add(substring(off, count)); - off = count; + list.add(substring(off, value.length)); + off = value.length; break; } } // If no match was found, return this if (off == 0) - return new String[] { this }; + return new String[]{this}; // Add remaining segment if (!limited || list.size() < limit) - list.add(substring(off, count)); + list.add(substring(off, value.length)); // Construct result int resultSize = list.size(); if (limit == 0) - while (resultSize > 0 && list.get(resultSize-1).length() == 0) + while (resultSize > 0 && list.get(resultSize - 1).length() == 0) resultSize--; String[] result = new String[resultSize]; return list.subList(0, resultSize).toArray(result); @@ -2463,14 +2406,15 @@ public final class String throw new NullPointerException(); } - int firstUpper; + int firstUpper; + final int len = value.length; /* Now check if there are any characters that need to be changed. */ scan: { - for (firstUpper = 0 ; firstUpper < count; ) { - char c = value[offset+firstUpper]; - if ((c >= Character.MIN_HIGH_SURROGATE) && - (c <= Character.MAX_HIGH_SURROGATE)) { + for (firstUpper = 0 ; firstUpper < len; ) { + char c = value[firstUpper]; + if ((c >= Character.MIN_HIGH_SURROGATE) + && (c <= Character.MAX_HIGH_SURROGATE)) { int supplChar = codePointAt(firstUpper); if (supplChar != Character.toLowerCase(supplChar)) { break scan; @@ -2486,24 +2430,24 @@ public final class String return this; } - char[] result = new char[count]; - int resultOffset = 0; /* result may grow, so i+resultOffset - * is the write location in result */ + char[] result = new char[len]; + int resultOffset = 0; /* result may grow, so i+resultOffset + * is the write location in result */ /* Just copy the first few lowerCase characters. */ - System.arraycopy(value, offset, result, 0, firstUpper); + System.arraycopy(value, 0, result, 0, firstUpper); String lang = locale.getLanguage(); boolean localeDependent = - (lang == "tr" || lang == "az" || lang == "lt"); + (lang == "tr" || lang == "az" || lang == "lt"); char[] lowerCharArray; int lowerChar; int srcChar; int srcCount; - for (int i = firstUpper; i < count; i += srcCount) { - srcChar = (int)value[offset+i]; - if ((char)srcChar >= Character.MIN_HIGH_SURROGATE && - (char)srcChar <= Character.MAX_HIGH_SURROGATE) { + for (int i = firstUpper; i < len; i += srcCount) { + srcChar = (int)value[i]; + if ((char)srcChar >= Character.MIN_HIGH_SURROGATE + && (char)srcChar <= Character.MAX_HIGH_SURROGATE) { srcChar = codePointAt(i); srcCount = Character.charCount(srcChar); } else { @@ -2516,16 +2460,16 @@ public final class String } else { lowerChar = Character.toLowerCase(srcChar); } - if ((lowerChar == Character.ERROR) || - (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) { + if ((lowerChar == Character.ERROR) + || (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) { if (lowerChar == Character.ERROR) { - if (!localeDependent && srcChar == '\u0130') { - lowerCharArray = - ConditionalSpecialCasing.toLowerCaseCharArray(this, i, Locale.ENGLISH); - } else { + if (!localeDependent && srcChar == '\u0130') { lowerCharArray = - ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale); - } + ConditionalSpecialCasing.toLowerCaseCharArray(this, i, Locale.ENGLISH); + } else { + lowerCharArray = + ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale); + } } else if (srcCount == 2) { resultOffset += Character.toChars(lowerChar, result, i + resultOffset) - srcCount; continue; @@ -2537,19 +2481,18 @@ public final class String int mapLen = lowerCharArray.length; if (mapLen > srcCount) { char[] result2 = new char[result.length + mapLen - srcCount]; - System.arraycopy(result, 0, result2, 0, - i + resultOffset); + System.arraycopy(result, 0, result2, 0, i + resultOffset); result = result2; } - for (int x=0; x= Character.MIN_HIGH_SURROGATE) && - (c <= Character.MAX_HIGH_SURROGATE)) { + if ((c >= Character.MIN_HIGH_SURROGATE) + && (c <= Character.MAX_HIGH_SURROGATE)) { c = codePointAt(firstLower); srcCount = Character.charCount(c); } else { srcCount = 1; } int upperCaseChar = Character.toUpperCaseEx(c); - if ((upperCaseChar == Character.ERROR) || - (c != upperCaseChar)) { + if ((upperCaseChar == Character.ERROR) + || (c != upperCaseChar)) { break scan; } firstLower += srcCount; @@ -2652,22 +2596,22 @@ public final class String return this; } - char[] result = new char[count]; /* may grow */ - int resultOffset = 0; /* result may grow, so i+resultOffset - * is the write location in result */ + char[] result = new char[len]; /* may grow */ + int resultOffset = 0; /* result may grow, so i+resultOffset + * is the write location in result */ /* Just copy the first few upperCase characters. */ - System.arraycopy(value, offset, result, 0, firstLower); + System.arraycopy(value, 0, result, 0, firstLower); String lang = locale.getLanguage(); boolean localeDependent = - (lang == "tr" || lang == "az" || lang == "lt"); + (lang == "tr" || lang == "az" || lang == "lt"); char[] upperCharArray; int upperChar; int srcChar; int srcCount; - for (int i = firstLower; i < count; i += srcCount) { - srcChar = (int)value[offset+i]; + for (int i = firstLower; i < len; i += srcCount) { + srcChar = (int)value[i]; if ((char)srcChar >= Character.MIN_HIGH_SURROGATE && (char)srcChar <= Character.MAX_HIGH_SURROGATE) { srcChar = codePointAt(i); @@ -2680,12 +2624,12 @@ public final class String } else { upperChar = Character.toUpperCaseEx(srcChar); } - if ((upperChar == Character.ERROR) || - (upperChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) { + if ((upperChar == Character.ERROR) + || (upperChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) { if (upperChar == Character.ERROR) { if (localeDependent) { upperCharArray = - ConditionalSpecialCasing.toUpperCaseCharArray(this, i, locale); + ConditionalSpecialCasing.toUpperCaseCharArray(this, i, locale); } else { upperCharArray = Character.toUpperCaseCharArray(srcChar); } @@ -2700,19 +2644,18 @@ public final class String int mapLen = upperCharArray.length; if (mapLen > srcCount) { char[] result2 = new char[result.length + mapLen - srcCount]; - System.arraycopy(result, 0, result2, 0, - i + resultOffset); + System.arraycopy(result, 0, result2, 0, i + resultOffset); result = result2; } - for (int x=0; x 0) || (len < count)) ? substring(st, len) : this; + return ((st > 0) || (len < value.length)) ? substring(st, len) : this; } /** @@ -2801,8 +2743,9 @@ public final class String * the character sequence represented by this string. */ public char[] toCharArray() { - char result[] = new char[count]; - getChars(0, count, result, 0); + // Cannot use Arrays.copyOf because of class initialization order issues + char result[] = new char[value.length]; + System.arraycopy(value, 0, result, 0, value.length); return result; } @@ -2844,7 +2787,7 @@ public final class String * @see java.util.Formatter * @since 1.5 */ - public static String format(String format, Object ... args) { + public static String format(String format, Object... args) { return new Formatter().format(format, args).toString(); } @@ -2888,7 +2831,7 @@ public final class String * @see java.util.Formatter * @since 1.5 */ - public static String format(Locale l, String format, Object ... args) { + public static String format(Locale l, String format, Object... args) { return new Formatter(l).format(format, args).toString(); } @@ -2968,7 +2911,7 @@ public final class String * character array. */ public static String copyValueOf(char data[]) { - return copyValueOf(data, 0, data.length); + return new String(data); } /** @@ -2993,7 +2936,7 @@ public final class String */ public static String valueOf(char c) { char data[] = {c}; - return new String(0, 1, data); + return new String(data, true); } /** @@ -3077,4 +3020,100 @@ public final class String */ public native String intern(); + /** + * Seed value used for each alternative hash calculated. + */ + private static final int HASHING_SEED; + + static { + long nanos = System.nanoTime(); + long now = System.currentTimeMillis(); + int SEED_MATERIAL[] = { + System.identityHashCode(String.class), + System.identityHashCode(System.class), + (int) (nanos >>> 32), + (int) nanos, + (int) (now >>> 32), + (int) now, + (int) (System.nanoTime() >>> 2) + }; + + // Use murmur3 to scramble the seeding material. + // Inline implementation to avoid loading classes + int h1 = 0; + + // body + for(int k1 : SEED_MATERIAL) { + k1 *= 0xcc9e2d51; + k1 = (k1 << 15) | (k1 >>> 17); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail (always empty, as body is always 32-bit chunks) + + // finalization + + h1 ^= SEED_MATERIAL.length * 4; + + // finalization mix force all bits of a hash block to avalanche + h1 ^= h1 >>> 16; + h1 *= 0x85ebca6b; + h1 ^= h1 >>> 13; + h1 *= 0xc2b2ae35; + h1 ^= h1 >>> 16; + + HASHING_SEED = h1; + } + + /** + * Cached value of the hashing algorithm result + */ + private transient int hash32 = 0; + + /** + * Return a 32-bit hash code value for this object. + *

    + * The general contract of {@code hash32} is: + *

      + *
    • Whenever it is invoked on the same object more than once during + * an execution of a Java application, the {@code hash32} method + * must consistently return the same integer, provided no information + * used in {@code equals} comparisons on the object is modified. + * This integer need not remain consistent from one execution of an + * application to another execution of the same application. + *
    • If two objects are equal according to the {@code equals(Object)} + * method, then calling the {@code hash32} method on each of + * the two objects must produce the same integer result. + *
    • It is not required that if two objects are unequal + * according to the {@link java.lang.Object#equals(java.lang.Object)} + * method, then calling the {@code hash32} method on each of the + * two objects must produce distinct integer results. However, the + * programmer should be aware that producing distinct integer results + * for unequal objects may improve the performance of hash tables. + *
    + *

    + * The hash value will never be zero. + * + * @return a hash code value for this object. + * @see java.lang.Object#equals(java.lang.Object) + */ + public int hash32() { + int h = hash32; + if (0 == h) { + // harmless data race on hash32 here. + h = sun.misc.Hashing.murmur3_32(HASHING_SEED, value, 0, value.length); + + // ensure result is not zero to avoid recalcing + h = (0 != h) ? h : 1; + + hash32 = h; + } + + return h; + } + } diff --git a/jdk/src/share/classes/java/lang/StringBuffer.java b/jdk/src/share/classes/java/lang/StringBuffer.java index e66dbce9b56..4dee96e6795 100644 --- a/jdk/src/share/classes/java/lang/StringBuffer.java +++ b/jdk/src/share/classes/java/lang/StringBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,29 +39,38 @@ package java.lang; * that is consistent with the order of the method calls made by each of * the individual threads involved. *

    - * The principal operations on a StringBuffer are the - * append and insert methods, which are + * The principal operations on a {@code StringBuffer} are the + * {@code append} and {@code insert} methods, which are * overloaded so as to accept data of any type. Each effectively * converts a given datum to a string and then appends or inserts the * characters of that string to the string buffer. The - * append method always adds these characters at the end - * of the buffer; the insert method adds the characters at + * {@code append} method always adds these characters at the end + * of the buffer; the {@code insert} method adds the characters at * a specified point. *

    - * For example, if z refers to a string buffer object - * whose current contents are "start", then - * the method call z.append("le") would cause the string - * buffer to contain "startle", whereas - * z.insert(4, "le") would alter the string buffer to - * contain "starlet". + * For example, if {@code z} refers to a string buffer object + * whose current contents are {@code "start"}, then + * the method call {@code z.append("le")} would cause the string + * buffer to contain {@code "startle"}, whereas + * {@code z.insert(4, "le")} would alter the string buffer to + * contain {@code "starlet"}. *

    - * In general, if sb refers to an instance of a StringBuffer, - * then sb.append(x) has the same effect as - * sb.insert(sb.length(), x). + * In general, if sb refers to an instance of a {@code StringBuffer}, + * then {@code sb.append(x)} has the same effect as + * {@code sb.insert(sb.length(), x)}. *

    * Whenever an operation occurs involving a source sequence (such as - * appending or inserting from a source sequence) this class synchronizes + * appending or inserting from a source sequence), this class synchronizes * only on the string buffer performing the operation, not on the source. + * Note that while {@code StringBuffer} is designed to be safe to use + * concurrently from multiple threads, if the constructor or the + * {@code append} or {@code insert} operation is passed a source sequence + * that is shared across threads, the calling code must ensure + * that the operation has a consistent and unchanging view of the source + * sequence for the duration of the operation. + * This could be satisfied by the caller holding a lock during the + * operation's call, by using an immutable source sequence, or by not + * sharing the source sequence across threads. *

    * Every string buffer has a capacity. As long as the length of the * character sequence contained in the string buffer does not exceed @@ -101,8 +110,8 @@ package java.lang; * the specified initial capacity. * * @param capacity the initial capacity. - * @exception NegativeArraySizeException if the capacity - * argument is less than 0. + * @exception NegativeArraySizeException if the {@code capacity} + * argument is less than {@code 0}. */ public StringBuffer(int capacity) { super(capacity); @@ -111,10 +120,10 @@ package java.lang; /** * Constructs a string buffer initialized to the contents of the * specified string. The initial capacity of the string buffer is - * 16 plus the length of the string argument. + * {@code 16} plus the length of the string argument. * * @param str the initial contents of the buffer. - * @exception NullPointerException if str is null + * @exception NullPointerException if {@code str} is {@code null} */ public StringBuffer(String str) { super(str.length() + 16); @@ -123,16 +132,16 @@ package java.lang; /** * Constructs a string buffer that contains the same characters - * as the specified CharSequence. The initial capacity of - * the string buffer is 16 plus the length of the - * CharSequence argument. + * as the specified {@code CharSequence}. The initial capacity of + * the string buffer is {@code 16} plus the length of the + * {@code CharSequence} argument. *

    - * If the length of the specified CharSequence is + * If the length of the specified {@code CharSequence} is * less than or equal to zero, then an empty buffer of capacity - * 16 is returned. + * {@code 16} is returned. * * @param seq the sequence to copy. - * @exception NullPointerException if seq is null + * @exception NullPointerException if {@code seq} is {@code null} * @since 1.5 */ public StringBuffer(CharSequence seq) { @@ -253,10 +262,10 @@ package java.lang; * the new character sequence is equal to the character at index k * in the old character sequence, if k is less than n; * otherwise, it is equal to the character at index k-n in the - * argument sb. + * argument {@code sb}. *

    - * This method synchronizes on this (the destination) - * object but does not synchronize on the source (sb). + * This method synchronizes on {@code this}, the destination + * object, but does not synchronize on the source ({@code sb}). * * @param sb the StringBuffer to append. * @return a reference to this object. @@ -269,23 +278,23 @@ package java.lang; /** - * Appends the specified CharSequence to this + * Appends the specified {@code CharSequence} to this * sequence. *

    - * The characters of the CharSequence argument are appended, + * The characters of the {@code CharSequence} argument are appended, * in order, increasing the length of this sequence by the length of the * argument. * *

    The result of this method is exactly the same as if it were an * invocation of this.append(s, 0, s.length()); * - *

    This method synchronizes on this (the destination) - * object but does not synchronize on the source (s). + *

    This method synchronizes on {@code this}, the destination + * object, but does not synchronize on the source ({@code s}). * - *

    If s is null, then the four characters - * "null" are appended. + *

    If {@code s} is {@code null}, then the four characters + * {@code "null"} are appended. * - * @param s the CharSequence to append. + * @param s the {@code CharSequence} to append. * @return a reference to this object. * @since 1.5 */ diff --git a/jdk/src/share/classes/java/lang/StringCoding.java b/jdk/src/share/classes/java/lang/StringCoding.java index 95fb45ab659..2c08a0d0bb5 100644 --- a/jdk/src/share/classes/java/lang/StringCoding.java +++ b/jdk/src/share/classes/java/lang/StringCoding.java @@ -250,6 +250,7 @@ class StringCoding { static char[] decode(byte[] ba, int off, int len) { String csn = Charset.defaultCharset().name(); try { + // use charset name decode() variant which provides caching. return decode(csn, ba, off, len); } catch (UnsupportedEncodingException x) { warnUnsupportedCharset(csn); @@ -382,6 +383,7 @@ class StringCoding { static byte[] encode(char[] ca, int off, int len) { String csn = Charset.defaultCharset().name(); try { + // use charset name encode() variant which provides caching. return encode(csn, ca, off, len); } catch (UnsupportedEncodingException x) { warnUnsupportedCharset(csn); diff --git a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java index 58b7e6d507f..536ec64d8ac 100644 --- a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java @@ -407,7 +407,7 @@ public class MethodHandles { * an access$N method. */ Lookup() { - this(getCallerClassAtEntryPoint(), ALL_MODES); + this(getCallerClassAtEntryPoint(false), ALL_MODES); // make sure we haven't accidentally picked up a privileged class: checkUnprivilegedlookupClass(lookupClass); } @@ -461,8 +461,8 @@ public class MethodHandles { && !VerifyAccess.isSamePackageMember(this.lookupClass, requestedLookupClass)) { newModes &= ~PRIVATE; } - if (newModes == PUBLIC - && !VerifyAccess.isClassAccessible(requestedLookupClass, this.lookupClass)) { + if ((newModes & PUBLIC) != 0 + && !VerifyAccess.isClassAccessible(requestedLookupClass, this.lookupClass, allowedModes)) { // The requested class it not accessible from the lookup class. // No permissions. newModes = 0; @@ -540,13 +540,17 @@ public class MethodHandles { } } - // call this from an entry point method in Lookup with extraFrames=0. - private static Class getCallerClassAtEntryPoint() { + /* Obtain the external caller class, when called from Lookup. or a first-level subroutine. */ + private static Class getCallerClassAtEntryPoint(boolean inSubroutine) { final int CALLER_DEPTH = 4; + // Stack for the constructor entry point (inSubroutine=false): // 0: Reflection.getCC, 1: getCallerClassAtEntryPoint, // 2: Lookup., 3: MethodHandles.*, 4: caller + // The stack is slightly different for a subroutine of a Lookup.find* method: + // 2: Lookup.*, 3: Lookup.find*.*, 4: caller // Note: This should be the only use of getCallerClass in this file. - assert(Reflection.getCallerClass(CALLER_DEPTH-1) == MethodHandles.class); + assert(Reflection.getCallerClass(CALLER_DEPTH-2) == Lookup.class); + assert(Reflection.getCallerClass(CALLER_DEPTH-1) == (inSubroutine ? Lookup.class : MethodHandles.class)); return Reflection.getCallerClass(CALLER_DEPTH); } @@ -1087,7 +1091,7 @@ return mh1; void checkSymbolicClass(Class refc) throws IllegalAccessException { Class caller = lookupClassOrNull(); - if (caller != null && !VerifyAccess.isClassAccessible(refc, caller)) + if (caller != null && !VerifyAccess.isClassAccessible(refc, caller, allowedModes)) throw new MemberName(refc).makeAccessException("symbolic reference class is not public", this); } @@ -1102,7 +1106,13 @@ return mh1; // Step 1: smgr.checkMemberAccess(refc, Member.PUBLIC); // Step 2: - if (!VerifyAccess.classLoaderIsAncestor(lookupClass, refc)) + Class callerClass = ((allowedModes & PRIVATE) != 0 + ? lookupClass // for strong access modes, no extra check + // next line does stack walk magic; do not refactor: + : getCallerClassAtEntryPoint(true)); + if (!VerifyAccess.classLoaderIsAncestor(lookupClass, refc) || + (callerClass != lookupClass && + !VerifyAccess.classLoaderIsAncestor(callerClass, refc))) smgr.checkPackageAccess(VerifyAccess.getPackageName(refc)); // Step 3: if (m.isPublic()) return; @@ -1153,9 +1163,10 @@ return mh1; int requestedModes = fixmods(mods); // adjust 0 => PACKAGE if ((requestedModes & allowedModes) != 0 && VerifyAccess.isMemberAccessible(refc, m.getDeclaringClass(), - mods, lookupClass())) + mods, lookupClass(), allowedModes)) return; if (((requestedModes & ~allowedModes) & PROTECTED) != 0 + && (allowedModes & PACKAGE) != 0 && VerifyAccess.isSamePackage(m.getDeclaringClass(), lookupClass())) // Protected members can also be checked as if they were package-private. return; @@ -1170,9 +1181,9 @@ return mh1; (defc == refc || Modifier.isPublic(refc.getModifiers()))); if (!classOK && (allowedModes & PACKAGE) != 0) { - classOK = (VerifyAccess.isClassAccessible(defc, lookupClass()) && + classOK = (VerifyAccess.isClassAccessible(defc, lookupClass(), ALL_MODES) && (defc == refc || - VerifyAccess.isClassAccessible(refc, lookupClass()))); + VerifyAccess.isClassAccessible(refc, lookupClass(), ALL_MODES))); } if (!classOK) return "class is not public"; diff --git a/jdk/src/share/classes/java/net/HttpCookie.java b/jdk/src/share/classes/java/net/HttpCookie.java index 1963e1fc913..fe4edc6ac12 100644 --- a/jdk/src/share/classes/java/net/HttpCookie.java +++ b/jdk/src/share/classes/java/net/HttpCookie.java @@ -137,7 +137,7 @@ public final class HttpCookie implements Cloneable { private HttpCookie(String name, String value, String header) { name = name.trim(); - if (name.length() == 0 || !isToken(name) || isReserved(name)) { + if (name.length() == 0 || !isToken(name)) { throw new IllegalArgumentException("Illegal cookie name"); } @@ -781,33 +781,6 @@ public final class HttpCookie implements Cloneable { return true; } - /* - * @param name - * the name to be tested - * - * @return {@code true} if the name is reserved by cookie specification, - * {@code false} if it is not - */ - private static boolean isReserved(String name) { - if (name.equalsIgnoreCase("Comment") - || name.equalsIgnoreCase("CommentURL") // rfc2965 only - || name.equalsIgnoreCase("Discard") // rfc2965 only - || name.equalsIgnoreCase("Domain") - || name.equalsIgnoreCase("Expires") // netscape draft only - || name.equalsIgnoreCase("Max-Age") - || name.equalsIgnoreCase("Path") - || name.equalsIgnoreCase("Port") // rfc2965 only - || name.equalsIgnoreCase("Secure") - || name.equalsIgnoreCase("Version") - || name.equalsIgnoreCase("HttpOnly") - || name.charAt(0) == '$') - { - return true; - } - - return false; - } - /* * Parse header string to cookie object. * diff --git a/jdk/src/share/classes/java/nio/MappedByteBuffer.java b/jdk/src/share/classes/java/nio/MappedByteBuffer.java index e07ed1e2e0b..b022e1ca0bf 100644 --- a/jdk/src/share/classes/java/nio/MappedByteBuffer.java +++ b/jdk/src/share/classes/java/nio/MappedByteBuffer.java @@ -139,6 +139,9 @@ public abstract class MappedByteBuffer return isLoaded0(mappingAddress(offset), length, Bits.pageCount(length)); } + // not used, but a potential target for a store, see load() for details. + private static byte unused; + /** * Loads this buffer's content into physical memory. * @@ -157,15 +160,20 @@ public abstract class MappedByteBuffer long length = mappingLength(offset); load0(mappingAddress(offset), length); - // touch each page + // Read a byte from each page to bring it into memory. A checksum + // is computed as we go along to prevent the compiler from otherwise + // considering the loop as dead code. Unsafe unsafe = Unsafe.getUnsafe(); int ps = Bits.pageSize(); int count = Bits.pageCount(length); long a = mappingAddress(offset); + byte x = 0; for (int i=0; i signature.length)) { + (length > signature.length - offset)) { throw new IllegalArgumentException("Bad arguments"); } diff --git a/jdk/src/share/classes/java/security/cert/CertPathBuilder.java b/jdk/src/share/classes/java/security/cert/CertPathBuilder.java index 95988d4a3aa..096627d6188 100644 --- a/jdk/src/share/classes/java/security/cert/CertPathBuilder.java +++ b/jdk/src/share/classes/java/security/cert/CertPathBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,15 +45,28 @@ import sun.security.jca.GetInstance.Instance; * one of the static getInstance methods, passing in the * algorithm name of the CertPathBuilder desired and optionally * the name of the provider desired. - *

    - * Once a CertPathBuilder object has been created, certification + * + *

    Once a CertPathBuilder object has been created, certification * paths can be constructed by calling the {@link #build build} method and * passing it an algorithm-specific set of parameters. If successful, the * result (including the CertPath that was built) is returned * in an object that implements the CertPathBuilderResult * interface. * - *

    Every implementation of the Java platform is required to support the + *

    The {@link #getRevocationChecker} method allows an application to specify + * additional algorithm-specific parameters and options used by the + * {@code CertPathBuilder} when checking the revocation status of certificates. + * Here is an example demonstrating how it is used with the PKIX algorithm: + * + *

    + * CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");
    + * PKIXRevocationChecker rc = (PKIXRevocationChecker)cpb.getRevocationChecker();
    + * rc.setOptions(EnumSet.of(Option.PREFER_CRLS));
    + * params.addCertPathChecker(rc);
    + * CertPathBuilderResult cpbr = cpb.build(params);
    + * 
    + * + *

    Every implementation of the Java platform is required to support the * following standard CertPathBuilder algorithm: *

      *
    • PKIX
    • @@ -96,10 +109,9 @@ public class CertPathBuilder { *
    */ private static final String CPB_TYPE = "certpathbuilder.type"; - private static final Debug debug = Debug.getInstance("certpath"); - private CertPathBuilderSpi builderSpi; - private Provider provider; - private String algorithm; + private final CertPathBuilderSpi builderSpi; + private final Provider provider; + private final String algorithm; /** * Creates a CertPathBuilder object of the given algorithm, @@ -290,15 +302,30 @@ public class CertPathBuilder { * if no such property exists. */ public final static String getDefaultType() { - String cpbtype; - cpbtype = AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - return Security.getProperty(CPB_TYPE); - } - }); - if (cpbtype == null) { - cpbtype = "PKIX"; - } - return cpbtype; + String cpbtype = + AccessController.doPrivileged(new PrivilegedAction() { + public String run() { + return Security.getProperty(CPB_TYPE); + } + }); + return (cpbtype == null) ? "PKIX" : cpbtype; + } + + /** + * Returns a {@code CertPathChecker} that the encapsulated + * {@code CertPathBuilderSpi} implementation uses to check the revocation + * status of certificates. A PKIX implementation returns objects of + * type {@code PKIXRevocationChecker}. + * + *

    The primary purpose of this method is to allow callers to specify + * additional input parameters and options specific to revocation checking. + * See the class description for an example. + * + * @throws UnsupportedOperationException if the service provider does not + * support this method + * @since 1.8 + */ + public final CertPathChecker getRevocationChecker() { + return builderSpi.engineGetRevocationChecker(); } } diff --git a/jdk/src/share/classes/java/security/cert/CertPathBuilderSpi.java b/jdk/src/share/classes/java/security/cert/CertPathBuilderSpi.java index 0c10a4d40da..49a35b36e90 100644 --- a/jdk/src/share/classes/java/security/cert/CertPathBuilderSpi.java +++ b/jdk/src/share/classes/java/security/cert/CertPathBuilderSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,4 +72,25 @@ public abstract class CertPathBuilderSpi { */ public abstract CertPathBuilderResult engineBuild(CertPathParameters params) throws CertPathBuilderException, InvalidAlgorithmParameterException; + + /** + * Returns a {@code CertPathChecker} that this implementation uses to + * check the revocation status of certificates. A PKIX implementation + * returns objects of type {@code PKIXRevocationChecker}. + * + *

    The primary purpose of this method is to allow callers to specify + * additional input parameters and options specific to revocation checking. + * See the class description of {@code CertPathBuilder} for an example. + * + *

    This method was added to version 1.8 of the Java Platform Standard + * Edition. In order to maintain backwards compatibility with existing + * service providers, this method cannot be abstract and by default throws + * an {@code UnsupportedOperationException}. + * + * @throws UnsupportedOperationException if this method is not supported + * @since 1.8 + */ + public CertPathChecker engineGetRevocationChecker() { + throw new UnsupportedOperationException(); + } } diff --git a/jdk/src/share/classes/java/security/cert/CertPathChecker.java b/jdk/src/share/classes/java/security/cert/CertPathChecker.java new file mode 100644 index 00000000000..c40a65b6354 --- /dev/null +++ b/jdk/src/share/classes/java/security/cert/CertPathChecker.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.security.cert; + +/** + *

    Performs one or more checks on each {@code Certificate} of a + * {@code CertPath}. + * + *

    A {@code CertPathChecker} implementation is typically created to extend + * a certification path validation algorithm. For example, an implementation + * may check for and process a critical private extension of each certificate + * in a certification path. + * + * @since 1.8 + */ +public interface CertPathChecker { + + /** + * Initializes the internal state of this {@code CertPathChecker}. + * + *

    The {@code forward} flag specifies the order that certificates will + * be passed to the {@link #check check} method (forward or reverse). + * + * @param forward the order that certificates are presented to the + * {@code check} method. If {@code true}, certificates are + * presented from target to trust anchor (forward); if + * {@code false}, from trust anchor to target (reverse). + * @throws CertPathValidatorException if this {@code CertPathChecker} is + * unable to check certificates in the specified order + */ + void init(boolean forward) throws CertPathValidatorException; + + /** + * Indicates if forward checking is supported. Forward checking refers + * to the ability of the {@code CertPathChecker} to perform its checks + * when certificates are presented to the {@code check} method in the + * forward direction (from target to trust anchor). + * + * @return {@code true} if forward checking is supported, {@code false} + * otherwise + */ + boolean isForwardCheckingSupported(); + + /** + * Performs the check(s) on the specified certificate using its internal + * state. The certificates are presented in the order specified by the + * {@code init} method. + * + * @param cert the {@code Certificate} to be checked + * @throws CertPathValidatorException if the specified certificate does + * not pass the check + */ + void check(Certificate cert) throws CertPathValidatorException; +} diff --git a/jdk/src/share/classes/java/security/cert/CertPathValidator.java b/jdk/src/share/classes/java/security/cert/CertPathValidator.java index ddeea9951a6..9d912acdabd 100644 --- a/jdk/src/share/classes/java/security/cert/CertPathValidator.java +++ b/jdk/src/share/classes/java/security/cert/CertPathValidator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,15 +46,29 @@ import sun.security.jca.GetInstance.Instance; * call one of the static getInstance methods, passing in the * algorithm name of the CertPathValidator desired and * optionally the name of the provider desired. - *

    - * Once a CertPathValidator object has been created, it can + * + *

    Once a CertPathValidator object has been created, it can * be used to validate certification paths by calling the {@link #validate * validate} method and passing it the CertPath to be validated * and an algorithm-specific set of parameters. If successful, the result is * returned in an object that implements the * CertPathValidatorResult interface. * - *

    Every implementation of the Java platform is required to support the + *

    The {@link #getRevocationChecker} method allows an application to specify + * additional algorithm-specific parameters and options used by the + * {@code CertPathValidator} when checking the revocation status of + * certificates. Here is an example demonstrating how it is used with the PKIX + * algorithm: + * + *

    + * CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
    + * PKIXRevocationChecker rc = (PKIXRevocationChecker)cpv.getRevocationChecker();
    + * rc.setOptions(EnumSet.of(Option.SOFT_FAIL));
    + * params.addCertPathChecker(rc);
    + * CertPathValidatorResult cpvr = cpv.validate(path, params);
    + * 
    + * + *

    Every implementation of the Java platform is required to support the * following standard CertPathValidator algorithm: *

      *
    • PKIX
    • @@ -96,10 +110,9 @@ public class CertPathValidator { * */ private static final String CPV_TYPE = "certpathvalidator.type"; - private static final Debug debug = Debug.getInstance("certpath"); - private CertPathValidatorSpi validatorSpi; - private Provider provider; - private String algorithm; + private final CertPathValidatorSpi validatorSpi; + private final Provider provider; + private final String algorithm; /** * Creates a CertPathValidator object of the given algorithm, @@ -301,15 +314,30 @@ public class CertPathValidator { * if no such property exists. */ public final static String getDefaultType() { - String cpvtype; - cpvtype = AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - return Security.getProperty(CPV_TYPE); - } - }); - if (cpvtype == null) { - cpvtype = "PKIX"; - } - return cpvtype; + String cpvtype = + AccessController.doPrivileged(new PrivilegedAction() { + public String run() { + return Security.getProperty(CPV_TYPE); + } + }); + return (cpvtype == null) ? "PKIX" : cpvtype; + } + + /** + * Returns a {@code CertPathChecker} that the encapsulated + * {@code CertPathValidatorSpi} implementation uses to check the revocation + * status of certificates. A PKIX implementation returns objects of + * type {@code PKIXRevocationChecker}. + * + *

      The primary purpose of this method is to allow callers to specify + * additional input parameters and options specific to revocation checking. + * See the class description for an example. + * + * @throws UnsupportedOperationException if the service provider does not + * support this method + * @since 1.8 + */ + public final CertPathChecker getRevocationChecker() { + return validatorSpi.engineGetRevocationChecker(); } } diff --git a/jdk/src/share/classes/java/security/cert/CertPathValidatorSpi.java b/jdk/src/share/classes/java/security/cert/CertPathValidatorSpi.java index 6dd4143ba04..6d3bd8c9968 100644 --- a/jdk/src/share/classes/java/security/cert/CertPathValidatorSpi.java +++ b/jdk/src/share/classes/java/security/cert/CertPathValidatorSpi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,4 +82,25 @@ public abstract class CertPathValidatorSpi { public abstract CertPathValidatorResult engineValidate(CertPath certPath, CertPathParameters params) throws CertPathValidatorException, InvalidAlgorithmParameterException; + + /** + * Returns a {@code CertPathChecker} that this implementation uses to + * check the revocation status of certificates. A PKIX implementation + * returns objects of type {@code PKIXRevocationChecker}. + * + *

      The primary purpose of this method is to allow callers to specify + * additional input parameters and options specific to revocation checking. + * See the class description of {@code CertPathValidator} for an example. + * + *

      This method was added to version 1.8 of the Java Platform Standard + * Edition. In order to maintain backwards compatibility with existing + * service providers, this method cannot be abstract and by default throws + * an {@code UnsupportedOperationException}. + * + * @throws UnsupportedOperationException if this method is not supported + * @since 1.8 + */ + public CertPathChecker engineGetRevocationChecker() { + throw new UnsupportedOperationException(); + } } diff --git a/jdk/src/share/classes/java/security/cert/PKIXCertPathChecker.java b/jdk/src/share/classes/java/security/cert/PKIXCertPathChecker.java index 656a51706fd..30b44c37f74 100644 --- a/jdk/src/share/classes/java/security/cert/PKIXCertPathChecker.java +++ b/jdk/src/share/classes/java/security/cert/PKIXCertPathChecker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -87,7 +87,8 @@ import java.util.Set; * @author Yassir Elley * @author Sean Mullan */ -public abstract class PKIXCertPathChecker implements Cloneable { +public abstract class PKIXCertPathChecker + implements CertPathChecker, Cloneable { /** * Default constructor. @@ -111,6 +112,7 @@ public abstract class PKIXCertPathChecker implements Cloneable { * the specified order; it should never be thrown if the forward flag * is false since reverse checking must be supported */ + @Override public abstract void init(boolean forward) throws CertPathValidatorException; @@ -123,6 +125,7 @@ public abstract class PKIXCertPathChecker implements Cloneable { * @return true if forward checking is supported, * false otherwise */ + @Override public abstract boolean isForwardCheckingSupported(); /** @@ -162,6 +165,17 @@ public abstract class PKIXCertPathChecker implements Cloneable { Collection unresolvedCritExts) throws CertPathValidatorException; + /** + * {@inheritDoc} + * + *

      This implementation calls + * {@code check(cert, java.util.Collections.emptySet())}. + */ + @Override + public void check(Certificate cert) throws CertPathValidatorException { + check(cert, java.util.Collections.emptySet()); + } + /** * Returns a clone of this object. Calls the Object.clone() * method. @@ -170,6 +184,7 @@ public abstract class PKIXCertPathChecker implements Cloneable { * * @return a copy of this PKIXCertPathChecker */ + @Override public Object clone() { try { return super.clone(); diff --git a/jdk/src/share/classes/java/security/cert/PKIXRevocationChecker.java b/jdk/src/share/classes/java/security/cert/PKIXRevocationChecker.java new file mode 100644 index 00000000000..a97f834c372 --- /dev/null +++ b/jdk/src/share/classes/java/security/cert/PKIXRevocationChecker.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.security.cert; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +/** + * A {@code PKIXCertPathChecker} for checking the revocation status of + * certificates with the PKIX algorithm. + * + *

      A {@code PKIXRevocationChecker} checks the revocation status of + * certificates with the Online Certificate Status Protocol (OCSP) or + * Certificate Revocation Lists (CRLs). OCSP is described in RFC 2560 and + * is a network protocol for determining the status of a certificate. A CRL + * is a time-stamped list identifying revoked certificates, and RFC 5280 + * describes an algorithm for determining the revocation status of certificates + * using CRLs. + * + *

      Each {@code PKIXRevocationChecker} must be able to check the revocation + * status of certificates with OCSP and CRLs. By default, OCSP is the + * preferred mechanism for checking revocation status, with CRLs as the + * fallback mechanism. However, this preference can be switched to CRLs with + * the {@link Option.PREFER_CRLS} option. + * + *

      A {@code PKIXRevocationChecker} is obtained by calling the + * {@link CertPathValidator#getRevocationChecker getRevocationChecker} method + * of a PKIX {@code CertPathValidator}. Additional parameters and options + * specific to revocation can be set (by calling {@link #setOCSPResponder} + * method for instance). The {@code PKIXRevocationChecker} is added to + * a {@code PKIXParameters} object using the + * {@link PKIXParameters#addCertPathChecker addCertPathChecker} + * or {@link PKIXParameters#setCertPathCheckers setCertPathCheckers} method, + * and then the {@code PKIXParameters} is passed along with the {@code CertPath} + * to be validated to the {@link CertPathValidator#validate validate} method + * of a PKIX {@code CertPathValidator}. When supplying a revocation checker in + * this manner, do not enable the default revocation checking mechanism (by + * calling {@link PKIXParameters#setRevocationEnabled}. + * + *

      Note that when a {@code PKIXRevocationChecker} is added to + * {@code PKIXParameters}, it clones the {@code PKIXRevocationChecker}; + * thus any subsequent modifications to the {@code PKIXRevocationChecker} + * have no effect. + * + *

      Any parameter that is not set (or is set to {@code null}) will be set to + * the default value for that parameter. + * + *

      Concurrent Access + * + *

      Unless otherwise specified, the methods defined in this class are not + * thread-safe. Multiple threads that need to access a single object + * concurrently should synchronize amongst themselves and provide the + * necessary locking. Multiple threads each manipulating separate objects + * need not synchronize. + * + * @since 1.8 + */ +public abstract class PKIXRevocationChecker extends PKIXCertPathChecker { + private URI ocspResponder; + private X509Certificate ocspResponderCert; + private List ocspExtensions = Collections.emptyList(); + private Map ocspStapled = Collections.emptyMap(); + private Set