All of lore.kernel.org
 help / color / mirror / Atom feed
* [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
@ 2015-10-28 18:01 Jens Rehsack
  2015-10-28 19:34 ` Dan McGregor
  2015-10-29  7:41 ` Richard Leitner
  0 siblings, 2 replies; 23+ messages in thread
From: Jens Rehsack @ 2015-10-28 18:01 UTC (permalink / raw)
  To: OE-devel


This adds openjdk-8 for native and target builds and allows a stripped
openjre-8 being built as well instead of trying to cherry-pick jre
components from jdk-image.

The recipes allow building openjdk-8 with or without:
* x11
* cups
* alsa/pulseaudio
and let packager enable unlimited-crypto, if desired.

Since there can be only one PROVIDES for virtual/java-native and virtual/javac-native,
move the provides to openjdk-8-native (I think everyone agrees it's a better
choice than ecj-bootstrap-native).

Plus: Applying a fix from openjdk-9 repository which fixes build issues using gcc5

Signed-off-by: Jens Rehsack <sno@netbsd.org>
---
 README                                             |   13 +-
 recipes-core/cacao/cacao_1.6.1.bb                  |    2 +-
 recipes-core/ecj/ecj-bootstrap-native.bb           |    2 -
 recipes-core/openjdk/openjdk-8-72b00/LICENSE       |  347 +++
 .../dont-expect-fqpn-for-make.patch                |   18 +
 .../openjdk-8-72b00/filter-aclocal-copy-too.patch  |   11 +
 recipes-core/openjdk/openjdk-8-72b00/jvm.cfg       |   41 +
 .../openjdk8-find-compiler-fix-env-respect.patch   |  140 +
 .../openjdk-8-72b00/openjdk8-fix-shark-build.patch |  453 ++++
 .../openjdk8-fix-shark-stdc++11.patch              | 2730 ++++++++++++++++++++
 .../openjdk8-no-genx11-in-headless.patch           |   17 +
 .../openjdk-8-72b00/openjdk8-no-unused-deps.patch  |   94 +
 ...o-in-favour-of-openembedded-package-split.patch |  120 +
 .../openjdk8-restrict-to-staging-dir.patch         |   11 +
 ..._than_returning_address_of_local_variable.patch |   23 +
 .../remove-shell-variables-from-autoheader.patch   |   31 +
 recipes-core/openjdk/openjdk-8-common.inc          |  229 ++
 recipes-core/openjdk/openjdk-8-cross.inc           |  202 ++
 recipes-core/openjdk/openjdk-8-native.inc          |   63 +
 recipes-core/openjdk/openjdk-8-native_72b00.bb     |   16 +
 recipes-core/openjdk/openjdk-8-release-72b00.inc   |   89 +
 recipes-core/openjdk/openjdk-8_72b00.bb            |   36 +
 recipes-core/openjdk/openjre-8_72b00.bb            |   30 +
 23 files changed, 4706 insertions(+), 12 deletions(-)
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/LICENSE
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-common.inc
 create mode 100644 recipes-core/openjdk/openjdk-8-cross.inc
 create mode 100644 recipes-core/openjdk/openjdk-8-native.inc
 create mode 100644 recipes-core/openjdk/openjdk-8-native_72b00.bb
 create mode 100644 recipes-core/openjdk/openjdk-8-release-72b00.inc
 create mode 100644 recipes-core/openjdk/openjdk-8_72b00.bb
 create mode 100644 recipes-core/openjdk/openjre-8_72b00.bb

diff --git a/README b/README
index 3b95c13..7658c23 100644
--- a/README
+++ b/README
@@ -52,15 +52,10 @@ Main layer maintainers:
 Usage instructions
 ------------------
 
-You should define at least the following variables in a distro include file or local.conf
+Since there is a clear bootstrap of the individual java-recipes, there is
+nothing to configure in conf/local.conf nor your individual distro/$name.conf.
 
-PREFERRED_PROVIDER_virtual/java-initial-native = "cacao-initial-native"
-
-PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
-PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
-
-#Sometimes the following is needed:
-PREFERRED_PROVIDER_openjdk-7-jre = "openjdk-7-jre"
+Simply rely on openjdk-7-jre, openjdk-7, openjdk-8 or openjre-8.
 
 For conf/bblayers.conf you have to add
 
@@ -70,7 +65,7 @@ BBLAYERS ?= " \
   path_to_source/sources/meta-java \
   "
 
-Please note that libstdc++ static is needed on your host to compile icedtea6/7-native
+Please note that libstdc++ static is needed on your host to compile icedtea7-native
 (install libstdc++-static on a Fedora).
 
 For debian-based distributions you need the libstdc++6-$compilerversion-dev package.
diff --git a/recipes-core/cacao/cacao_1.6.1.bb b/recipes-core/cacao/cacao_1.6.1.bb
index ae06b50..c97ab09 100644
--- a/recipes-core/cacao/cacao_1.6.1.bb
+++ b/recipes-core/cacao/cacao_1.6.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
 SECTION  = "interpreters"
 
 DEPENDS_class-native = "zlib-native libtool-native ecj-initial-native fastjar-native classpath-native bdwgc-native"
-PROVIDES_class-native = "virtual/java-native"
+#PROVIDES_class-native = "virtual/java-native"
 
 DEPENDS_class-target = " virtual/javac-native "
 
diff --git a/recipes-core/ecj/ecj-bootstrap-native.bb b/recipes-core/ecj/ecj-bootstrap-native.bb
index a4a1c17..28414c2 100644
--- a/recipes-core/ecj/ecj-bootstrap-native.bb
+++ b/recipes-core/ecj/ecj-bootstrap-native.bb
@@ -14,8 +14,6 @@ PR = "r1"
 
 DEPENDS = "libecj-bootstrap-native cacao-native"
 
-PROVIDES = "virtual/javac-native"
-
 SRC_URI = "file://ecj.in"
 
 S = "${WORKDIR}"
diff --git a/recipes-core/openjdk/openjdk-8-72b00/LICENSE b/recipes-core/openjdk/openjdk-8-72b00/LICENSE
new file mode 100644
index 0000000..b40a0f4
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/LICENSE
@@ -0,0 +1,347 @@
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it.  By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.  This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights.  These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have.  You must
+make sure that they, too, receive or can get the source code.  And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.  We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language.  (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope.  The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program).  Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+    a) You must cause the modified files to carry prominent notices stating
+    that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in whole or
+    in part contains or is derived from the Program or any part thereof, to be
+    licensed as a whole at no charge to all third parties under the terms of
+    this License.
+
+    c) If the modified program normally reads commands interactively when run,
+    you must cause it, when started running for such interactive use in the
+    most ordinary way, to print or display an announcement including an
+    appropriate copyright notice and a notice that there is no warranty (or
+    else, saying that you provide a warranty) and that users may redistribute
+    the program under these conditions, and telling the user how to view a copy
+    of this License.  (Exception: if the Program itself is interactive but does
+    not normally print such an announcement, your work based on the Program is
+    not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works.  But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable source
+    code, which must be distributed under the terms of Sections 1 and 2 above
+    on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three years, to
+    give any third party, for a charge no more than your cost of physically
+    performing source distribution, a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of Sections 1
+    and 2 above on a medium customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer to
+    distribute corresponding source code.  (This alternative is allowed only
+    for noncommercial distribution and only if you received the program in
+    object code or executable form with such an offer, in accord with
+    Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it.  For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable.  However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works.  These actions are prohibited by law if you do not
+accept this License.  Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein.  You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License.  If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices.  Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded.  In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time.  Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission.  For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+    One line to give the program's name and a brief idea of what it does.
+
+    Copyright (C) <year> <name of author>
+
+    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
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
+    software, and you are welcome to redistribute it under certain conditions;
+    type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
+is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+    'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+    signature of Ty Coon, 1 April 1989
+
+    Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+    Linking this library statically or dynamically with other modules is making
+    a combined work based on this library.  Thus, the terms and conditions of
+    the GNU General Public License cover the whole combination.
+
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent modules,
+    and to copy and distribute the resulting executable under terms of your
+    choice, provided that you also meet, for each linked independent module,
+    the terms and conditions of the license of that module.  An independent
+    module is a module which is not derived from or based on this library.  If
+    you modify this library, you may extend this exception to your version of
+    the library, but you are not obligated to do so.  If you do not wish to do
+    so, delete this exception statement from your version.
diff --git a/recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch b/recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
new file mode 100644
index 0000000..a8a9c1d
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
@@ -0,0 +1,18 @@
+--- common/autoconf/basics.m4.orig	2015-08-17 19:05:13.122672019 +0200
++++ common/autoconf/basics.m4	2015-08-17 19:13:01.482673782 +0200
+@@ -549,10 +549,12 @@
+   # We need to find a recent version of GNU make. Especially on Solaris, this can be tricky.
+   if test "x$MAKE" != x; then
+     # User has supplied a make, test it.
+-    if test ! -f "$MAKE"; then
+-      AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not found.])
++    if test -a `dirname "$MAKE"` = "." -a ! -f "$MAKE"; then
++      AC_PATH_PROGS(CHECK_MAKE, $MAKE)
++    else
++      CHECK_MAKE="${MAKE}"
+     fi
+-    BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE])
++    BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [user supplied MAKE=$MAKE])
+     if test "x$FOUND_MAKE" = x; then
+       AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer.])
+     fi
diff --git a/recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch b/recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
new file mode 100644
index 0000000..4679c9d
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
@@ -0,0 +1,11 @@
+--- common/autoconf/basics.m4.orig	2015-08-17 18:31:50.598664481 +0200
++++ common/autoconf/basics.m4	2015-08-17 18:31:57.554664507 +0200
+@@ -442,7 +442,7 @@
+       files_present=`$LS $OUTPUT_ROOT`
+       # Configure has already touched config.log and confdefs.h in the current dir when this check
+       # is performed.
+-      filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's/ //g' \
++      filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's,aclocal-copy,,g' -e 's/ //g' \
+       | $TR -d '\n'`
+       if test "x$filtered_files" != x; then
+         AC_MSG_NOTICE([Current directory is $CURDIR.])
diff --git a/recipes-core/openjdk/openjdk-8-72b00/jvm.cfg b/recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
new file mode 100644
index 0000000..1a55ec6
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
@@ -0,0 +1,41 @@
+# Copyright 2003 Sun Microsystems, Inc.  All Rights Reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+# 
+# List of JVMs that can be used as an option to java, javac, etc.
+# Order is important -- first in this list is the default JVM.
+# NOTE that this both this file and its format are UNSUPPORTED and
+# WILL GO AWAY in a future release.
+#
+# You may also select a JVM in an arbitrary location with the
+# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
+# and may not be available in a future release.
+#
+-server ERROR
+-client IGNORE
+-hotspot ERROR
+-classic WARN
+-native ERROR
+-green ERROR
+-zero ALIASED_TO -server
+-shark ERROR
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
new file mode 100644
index 0000000..b31deae
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
@@ -0,0 +1,140 @@
+--- common/autoconf/toolchain.m4.orig	2015-08-07 20:52:38.000000000 +0200
++++ common/autoconf/toolchain.m4	2015-10-27 13:57:19.708566525 +0100
+@@ -27,7 +27,7 @@
+ # $2 = human readable name of compiler (C or C++)
+ AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION],
+ [
+-  COMPILER=[$]$1
++  COMPILER="[$]$1"
+   COMPILER_NAME=$2
+ 
+   if test "x$OPENJDK_TARGET_OS" = xsolaris; then
+@@ -123,64 +123,37 @@
+ [
+   COMPILER_NAME=$2
+ 
+-  $1=
++  FOUND_$1=
++
++  if test "x[$]$1" != "x"; then
++    FOUND_$1="[$]$1"
++  fi
++
+   # If TOOLS_DIR is set, check for all compiler names in there first
+   # before checking the rest of the PATH.
+-  if test -n "$TOOLS_DIR"; then
++  if test "x[$]FOUND_$1" = x -a -n "$TOOLS_DIR"; then
+     PATH_save="$PATH"
+     PATH="$TOOLS_DIR"
+     AC_PATH_PROGS(TOOLS_DIR_$1, $3)
+-    $1=$TOOLS_DIR_$1
++    FOUND_$1=$TOOLS_DIR_$1
+     PATH="$PATH_save"
+   fi
+ 
+   # AC_PATH_PROGS can't be run multiple times with the same variable,
+   # so create a new name for this run.
+-  if test "x[$]$1" = x; then
++  if test "x[$]FOUND_$1" = x; then
+     AC_PATH_PROGS(POTENTIAL_$1, $3)
+-    $1=$POTENTIAL_$1
++    FOUND_$1=$POTENTIAL_$1
+   fi
+ 
+-  if test "x[$]$1" = x; then
++  if test "x[$]FOUND_$1" = x; then
+     HELP_MSG_MISSING_DEPENDENCY([devkit])
+     AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG])
+   fi
+-  BASIC_FIXUP_EXECUTABLE($1)
+-  TEST_COMPILER="[$]$1"
+-  # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links
+-  # to 'xlc' but it is crucial that we invoke the compiler with the right name!
+-  if test "x$OPENJDK_BUILD_OS" != xaix; then
+-    AC_MSG_CHECKING([resolved symbolic links for $1])
+-    BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER)
+-    AC_MSG_RESULT([$TEST_COMPILER])
+-  fi
+-  AC_MSG_CHECKING([if $1 is disguised ccache])
+-
+-  COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"`
+-  if test "x$COMPILER_BASENAME" = "xccache"; then
+-    AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler])
+-    # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache.
+-    # We want to control ccache invocation ourselves, so ignore this cc and try
+-    # searching again.
+-
+-    # Remove the path to the fake ccache cc from the PATH
+-    RETRY_COMPILER_SAVED_PATH="$PATH"
+-    COMPILER_DIRNAME=`$DIRNAME [$]$1`
+-    PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`"
+-
+-    # Try again looking for our compiler
+-    AC_CHECK_TOOLS(PROPER_COMPILER_$1, $3)
+-    BASIC_FIXUP_EXECUTABLE(PROPER_COMPILER_$1)
+-    PATH="$RETRY_COMPILER_SAVED_PATH"
+-
+-    AC_MSG_CHECKING([for resolved symbolic links for $1])
+-    BASIC_REMOVE_SYMBOLIC_LINKS(PROPER_COMPILER_$1)
+-    AC_MSG_RESULT([$PROPER_COMPILER_$1])
+-    $1="$PROPER_COMPILER_$1"
+-  else
+-    AC_MSG_RESULT([no, keeping $1])
+-    $1="$TEST_COMPILER"
+-  fi
++  BASIC_FIXUP_EXECUTABLE(FOUND_$1)
++  TEST_COMPILER="[$]FOUND_$1"
++
++  $1="$TEST_COMPILER"
+   TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME])
+ ])
+ 
+@@ -214,12 +187,12 @@
+     # otherwise we might pick up cross-compilers which don't use standard naming.
+     # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have
+     # to wait until they are properly discovered.
+-    AC_PATH_PROGS(BUILD_CC, [cl cc gcc])
+-    BASIC_FIXUP_EXECUTABLE(BUILD_CC)
+-    AC_PATH_PROGS(BUILD_CXX, [cl CC g++])
+-    BASIC_FIXUP_EXECUTABLE(BUILD_CXX)
+-    AC_PATH_PROG(BUILD_LD, ld)
+-    BASIC_FIXUP_EXECUTABLE(BUILD_LD)
++    AS_IF([test "x${BUILD_CC}" = "x"], [AC_PATH_PROGS(BUILD_CC, [cl cc gcc])
++    BASIC_FIXUP_EXECUTABLE(BUILD_CC)])
++    AS_IF([test "x${BUILD_CXX}" = "x"], [AC_PATH_PROGS(BUILD_CXX, [cl CC g++])
++    BASIC_FIXUP_EXECUTABLE(BUILD_CXX)])
++    AS_IF([test "x${BUILD_LD}" = "x"], [AC_PATH_PROG(BUILD_LD, ld)
++    BASIC_FIXUP_EXECUTABLE(BUILD_LD)])
+   fi
+   AC_SUBST(BUILD_CC)
+   AC_SUBST(BUILD_CXX)
+--- common/autoconf/basics.m4.orig	2015-08-31 15:03:54.942975387 +0200
++++ common/autoconf/basics.m4	2015-08-31 15:02:25.090975049 +0200
+@@ -171,8 +171,15 @@
+       fi
+     fi
+ 
++    # First separate the path from the arguments. This will split at the first
++    # space.
++    complete="[$]$1"
++    path="${complete%% *}"
++    tmp="$complete EOL"
++    arguments="${tmp#* }"
++
+     if test "x$READLINK" != x; then
+-      $1=`$READLINK -f [$]$1`
++      new_path=`$READLINK -f $path`
+     else
+       # Save the current directory for restoring afterwards
+       STARTDIR=$PWD
+@@ -198,8 +205,9 @@
+         let COUNTER=COUNTER+1
+       done
+       cd $STARTDIR
+-      $1=$sym_link_dir/$sym_link_file
++      new_path=$sym_link_dir/$sym_link_file
+     fi
++    $1="$new_path ${arguments% *}"
+   fi
+ ])
+ 
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
new file mode 100644
index 0000000..889c323
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
@@ -0,0 +1,453 @@
+--- hotspot/make/Makefile.orig	2015-08-31 19:44:44.459038814 +0200
++++ hotspot/make/Makefile	2015-08-31 19:44:58.511038867 +0200
+@@ -525,7 +525,7 @@
+ # Unix
+ $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_BUILD_DIR)/%.$(LIBRARY_SUFFIX)
+ 	$(install-file)
+-$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo):	$(SHARK_BUILD_DIR)/%.debuginfo
++$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo:		$(SHARK_BUILD_DIR)/%.debuginfo
+ 	$(install-file)
+ $(EXPORT_JRE_LIB_ARCH_DIR)/%.diz:		$(SHARK_BUILD_DIR)/%.diz
+ 	$(install-file)
+--- hotspot/src/share/vm/ci/ciTypeFlow.cpp.orig	2015-08-31 19:45:28.611038980 +0200
++++ hotspot/src/share/vm/ci/ciTypeFlow.cpp	2015-08-31 19:47:17.539039390 +0200
+@@ -35,7 +35,9 @@
+ #include "interpreter/bytecode.hpp"
+ #include "interpreter/bytecodes.hpp"
+ #include "memory/allocation.inline.hpp"
+-#include "opto/compile.hpp"
++#ifdef COMPILER2
++#include "opto/compile.hpp"
+ #include "opto/node.hpp"
++#endif
+ #include "runtime/deoptimization.hpp"
+ #include "utilities/growableArray.hpp"
+@@ -2647,6 +2649,7 @@
+       assert (!blk->has_pre_order(), "");
+       blk->set_next_pre_order();
+ 
++#ifdef COMPILER2
+       if (_next_pre_order >= (int)Compile::current()->max_node_limit() / 2) {
+         // Too many basic blocks.  Bail out.
+         // This can happen when try/finally constructs are nested to depth N,
+@@ -2656,6 +2659,7 @@
+         record_failure("too many basic blocks");
+         return;
+       }
++#endif
+       if (do_flow) {
+         flow_block(blk, temp_vector, temp_set);
+         if (failing()) return; // Watch for bailouts.
+--- hotspot/src/share/vm/classfile/systemDictionary.cpp.orig	2015-08-31 19:50:00.367040003 +0200
++++ hotspot/src/share/vm/classfile/systemDictionary.cpp	2015-08-31 19:51:28.323040334 +0200
+@@ -2276,6 +2276,7 @@
+     spe = NULL;
+     // Must create lots of stuff here, but outside of the SystemDictionary lock.
+     m = Method::make_method_handle_intrinsic(iid, signature, CHECK_(empty));
++#ifndef SHARK
+     if (!Arguments::is_interpreter_only()) {
+       // Generate a compiled form of the MH intrinsic.
+       AdapterHandlerLibrary::create_native_wrapper(m);
+@@ -2285,6 +2286,7 @@
+                    "out of space in CodeCache for method handle intrinsic", empty);
+       }
+     }
++#endif
+     // Now grab the lock.  We might have to throw away the new method,
+     // if a racing thread has managed to install one at the same time.
+     {
+@@ -2298,9 +2300,11 @@
+   }
+ 
+   assert(spe != NULL && spe->method() != NULL, "");
++#ifndef SHARK
+   assert(Arguments::is_interpreter_only() || (spe->method()->has_compiled_code() &&
+          spe->method()->code()->entry_point() == spe->method()->from_compiled_entry()),
+          "MH intrinsic invariant");
++#endif
+   return spe->method();
+ }
+ 
+--- hotspot/src/share/vm/runtime/handles.inline.hpp.orig	2015-08-31 20:01:39.295042634 +0200
++++ hotspot/src/share/vm/runtime/handles.inline.hpp	2015-08-31 20:04:31.331043282 +0200
+@@ -51,6 +51,12 @@
+ }
+ #endif // ASSERT
+ 
++#ifdef SHARK
++#define assert_on_stack(expr) (void)(expr)
++#else
++#define assert_on_stack(expr) assert((expr), "not on stack?")
++#endif
++
+ // Constructors for metadata handles
+ #define DEF_METADATA_HANDLE_FN(name, type) \
+ inline name##Handle::name##Handle(type* obj) : _value(obj), _thread(NULL) {       \
+@@ -79,7 +85,7 @@
+     } else {                                                           \
+       _thread = Thread::current();                                     \
+     }                                                                  \
+-    assert (_thread->is_in_stack((address)this), "not on stack?");     \
++    assert_on_stack (_thread->is_in_stack((address)this));             \
+     _thread->metadata_handles()->push((Metadata*)_value);              \
+   } else {                                                             \
+     _thread = NULL;                                                    \
+--- hotspot/src/cpu/zero/vm/entry_zero.hpp.orig	2015-08-31 20:53:40.743054385 +0200
++++ hotspot/src/cpu/zero/vm/entry_zero.hpp	2015-08-31 20:53:54.459054436 +0200
+@@ -26,6 +26,10 @@
+ #ifndef CPU_ZERO_VM_ENTRY_ZERO_HPP
+ #define CPU_ZERO_VM_ENTRY_ZERO_HPP
+
++#include "utilities/globalDefinitions.hpp"
++#include "utilities/exceptions.hpp"
++#include "interpreter/cppInterpreter.hpp"
++
+ class ZeroEntry {
+  public:
+   ZeroEntry() {
+--- hotspot/src/share/vm/shark/sharkEntry.hpp.orig	2015-08-31 20:47:13.091052925 +0200
++++ hotspot/src/share/vm/shark/sharkEntry.hpp	2015-08-31 20:49:42.755053489 +0200
+@@ -27,6 +27,7 @@
+ #define SHARE_VM_SHARK_SHARKENTRY_HPP
+ 
+ #include "shark/llvmHeaders.hpp"
++#include "entry_zero.hpp"
+ 
+ class SharkContext;
+ 
+--- hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp.orig	2015-08-31 21:01:14.847056094 +0200
++++ hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp	2015-08-31 21:01:24.459056130 +0200
+@@ -30,6 +30,10 @@
+ 
+ #ifdef CC_INTERP
+ 
++#ifdef TARGET_ARCH_zero
++#include "entry_zero.hpp"
++#endif
++
+ class CppInterpreterGenerator: public AbstractInterpreterGenerator {
+   protected:
+   // shared code sequences
+--- hotspot/src/cpu/zero/vm/nativeInst_zero.cpp.orig	2015-08-31 21:07:21.643057475 +0200
++++ hotspot/src/cpu/zero/vm/nativeInst_zero.cpp	2015-08-31 21:14:49.019059159 +0200
+@@ -26,6 +26,9 @@
+ #include "precompiled.hpp"
+ #include "assembler_zero.inline.hpp"
+ #include "memory/resourceArea.hpp"
++#ifdef CC_INTERP
++#include "entry_zero.hpp"
++#endif
+ #include "nativeInst_zero.hpp"
+ #include "oops/oop.inline.hpp"
+ #include "runtime/handles.hpp"
+--- hotspot/src/share/vm/shark/llvmHeaders.hpp.orig	2015-09-01 14:17:09.793868541 +0200
++++ hotspot/src/share/vm/shark/llvmHeaders.hpp	2015-09-01 16:20:25.653868618 +0200
+@@ -35,7 +35,11 @@
+   #undef DEBUG
+ #endif
+ 
++#if SHARK_LLVM_VERSION <= 34
+ #include <llvm/Analysis/Verifier.h>
++#else
++#include <llvm-c/Analysis.h>
++#endif
+ #include <llvm/ExecutionEngine/ExecutionEngine.h>
+ 
+ // includes specific to each version
+--- common/autoconf/libraries.m4.orig	2015-09-01 16:53:51.821868486 +0200
++++ common/autoconf/libraries.m4	2015-09-01 16:55:27.653868542 +0200
+@@ -847,8 +847,9 @@
+         fi
+       fi
+     done
+-    llvm_version=$("${LLVM_CONFIG}" --version | sed 's/\.//; s/svn.*//')
++    llvm_version=$("${LLVM_CONFIG}" --version | sed 's/\.//; s/svn.*//; s/\..*$//')
+     LLVM_CFLAGS="${LLVM_CFLAGS} -DSHARK_LLVM_VERSION=${llvm_version}"
++    AS_IF([test $llvm_version -ge 34], [LLVM_CFLAGS="${LLVM_CFLAGS} -std=gnu++11"])
+ 
+     unset LLVM_LDFLAGS
+     for flag in $("${LLVM_CONFIG}" --ldflags); do
+@@ -862,7 +862,7 @@
+     done
+ 
+     unset LLVM_LIBS
+-    for flag in $("${LLVM_CONFIG}" --libs ${llvm_components}); do
++    for flag in $("${LLVM_CONFIG}" --libs --system-libs ${llvm_components}); do
+       if echo "${flag}" | grep -q '^-l'; then
+         if test "${LLVM_LIBS}" != ""; then
+           LLVM_LIBS="${LLVM_LIBS} "
+--- hotspot/src/share/vm/shark/sharkIntrinsics.cpp.orig	2015-09-02 16:58:17.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkIntrinsics.cpp	2015-09-02 17:09:26.000000000 +0200
+@@ -265,7 +265,11 @@
+     "addr");
+ 
+   // Perform the operation
++#if SHARK_LLVM_VERSION <= 34
+   Value *result = builder()->CreateAtomicCmpXchg(addr, e, x, llvm::SequentiallyConsistent);
++#else
++  Value *result = builder()->CreateAtomicCmpXchg(addr, e, x, llvm::SequentiallyConsistent, llvm::SequentiallyConsistent);
++  #endif
+   // Push the result
+   state()->push(
+     SharkValue::create_jint(
+--- hotspot/src/share/vm/shark/sharkRuntime.cpp.orig	2015-09-02 17:11:58.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkRuntime.cpp	2015-09-02 17:12:57.000000000 +0200
+@@ -32,6 +32,7 @@
+ #ifdef TARGET_ARCH_zero
+ # include "stack_zero.inline.hpp"
+ #endif
++#include "memory/oopFactory.hpp"
+ 
+ using namespace llvm;
+ 
+--- hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp.orig	2015-09-02 17:23:07.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp	2015-09-02 17:43:20.000000000 +0200
+@@ -1732,7 +1732,11 @@
+     heap_object = builder()->CreateIntToPtr(
+       old_top, SharkType::oop_type(), "heap_object");
+ 
++#if SHARK_LLVM_VERSION <= 34
+     Value *check = builder()->CreateAtomicCmpXchg(top_addr, old_top, new_top, llvm::SequentiallyConsistent);
++#else
++    Value *check = builder()->CreateAtomicCmpXchg(top_addr, old_top, new_top, llvm::SequentiallyConsistent, llvm::SequentiallyConsistent);
++#endif
+     builder()->CreateCondBr(
+       builder()->CreateICmpEQ(old_top, check),
+       initialize, retry);
+@@ -1933,7 +1937,11 @@
+ 
+   Value *lock = builder()->CreatePtrToInt(
+     monitor_header_addr, SharkType::intptr_type());
++#if SHARK_LLVM_VERSION <= 34
+   Value *check = builder()->CreateAtomicCmpXchg(mark_addr, disp, lock, llvm::Acquire);
++#else
++  Value *check = builder()->CreateAtomicCmpXchg(mark_addr, disp, lock, llvm::Acquire, llvm::Acquire);
++#endif
+   builder()->CreateCondBr(
+     builder()->CreateICmpEQ(disp, check),
+     acquired_fast, try_recursive);
+@@ -2018,7 +2026,11 @@
+     PointerType::getUnqual(SharkType::intptr_type()),
+     "mark_addr");
+ 
++#if SHARK_LLVM_VERSION <= 34
+   Value *check = builder()->CreateAtomicCmpXchg(mark_addr, lock, disp, llvm::Release);
++#else
++  Value *check = builder()->CreateAtomicCmpXchg(mark_addr, lock, disp, llvm::Release, llvm::Monotonic);
++#endif
+   builder()->CreateCondBr(
+     builder()->CreateICmpEQ(lock, check),
+     released_fast, slow_path);
+--- hotspot/src/cpu/zero/vm/interpreter_zero.cpp.orig	2015-09-14 20:13:25.539432044 +0200
++++ hotspot/src/cpu/zero/vm/interpreter_zero.cpp	2015-09-14 20:13:46.107432122 +0200
+@@ -49,7 +49,7 @@
+ #ifdef COMPILER1
+ #include "c1/c1_Runtime1.hpp"
+ #endif
+-#ifdef CC_INTERP
++#if defined(CC_INTERP) || defined(SHARK)
+ #include "interpreter/cppInterpreter.hpp"
+ #endif
+ 
+--- hotspot/src/share/vm/shark/sharkCompiler.hpp.orig	2015-08-31 20:08:44.723044236 +0200
++++ hotspot/src/share/vm/shark/sharkCompiler.hpp	2015-08-31 20:08:59.387044291 +0200
+@@ -40,6 +40,8 @@
+   // Creation
+   SharkCompiler();
+ 
++  void init_llvm();
++
+   // Name of this compiler
+   const char *name()     { return "shark"; }
+ 
+--- hotspot/src/share/vm/shark/sharkCompiler.cpp.orig	2015-09-19 12:19:21.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkCompiler.cpp	2015-09-19 12:27:17.000000000 +0200
+@@ -61,11 +61,25 @@
+   : AbstractCompiler() {
+   // Create the lock to protect the memory manager and execution engine
+   _execution_engine_lock = new Monitor(Mutex::leaf, "SharkExecutionEngineLock");
+-  MutexLocker locker(execution_engine_lock());
++  {
++    MutexLocker locker(execution_engine_lock());
++    init_llvm();
++  }
++  // All done
++  set_state(initialized);
++}
+ 
++void SharkCompiler::init_llvm() {
++  // with llvm 3.5, Multi-threading can only be enabled/disabled with the
++  // compile time define LLVM_ENABLE_THREADS
++#if SHARK_LLVM_VERSION <= 34
+   // Make LLVM safe for multithreading
+   if (!llvm_start_multithreaded())
+     fatal("llvm_start_multithreaded() failed");
++#else
++  if (!llvm_is_multithreaded())
++    fatal("llvm_is_multithreaded() tells no multithreading support in llvm");
++#endif
+ 
+   // Initialize the native target
+   InitializeNativeTarget();
+@@ -83,7 +97,7 @@
+   // Finetune LLVM for the current host CPU.
+   StringMap<bool> Features;
+   bool gotCpuFeatures = llvm::sys::getHostCPUFeatures(Features);
+-  std::string cpu("-mcpu=" + llvm::sys::getHostCPUName());
++  std::string cpu("-mcpu=" + std::string(llvm::sys::getHostCPUName()));
+ 
+   std::vector<const char*> args;
+   args.push_back(""); // program name
+@@ -112,6 +126,9 @@
+   builder.setMAttrs(MAttrs);
+   builder.setJITMemoryManager(memory_manager());
+   builder.setEngineKind(EngineKind::JIT);
++#if SHARK_LLVM_VERSION > 34
++  builder.setUseMCJIT(true);
++#endif
+   builder.setErrorStr(&ErrorMsg);
+   if (! fnmatch(SharkOptimizationLevel, "None", 0)) {
+     tty->print_cr("Shark optimization level set to: None");
+@@ -134,9 +151,10 @@
+   }
+ 
++#if SHARK_LLVM_VERSION > 34
++  _native_context->execution_engine(_execution_engine);
++  _normal_context->execution_engine(_execution_engine);
++#endif
+   execution_engine()->addModule(_native_context->module());
+-
+-  // All done
+-  set_state(initialized);
+ }
+ 
+ void SharkCompiler::initialize() {
+@@ -165,7 +179,7 @@
+   }
+ 
+   // Create the recorders
+-  Arena arena;
++  Arena arena(mtCompiler);
+   env->set_oop_recorder(new OopRecorder(&arena));
+   OopMapSet oopmaps;
+   env->set_debug_info(new DebugInformationRecorder(env->oop_recorder()));
+@@ -268,7 +282,12 @@
+ 
+   if (SharkVerifyFunction != NULL) {
+     if (!fnmatch(SharkVerifyFunction, name, 0)) {
++#if SHARK_LLVM_VERSION <= 34
+       verifyFunction(*function);
++#else
++      LLVMValueRef F = wrap(function);
++      LLVMVerifyFunction(F, LLVMAbortProcessAction);
++#endif
+     }
+   }
+ 
+@@ -298,7 +317,11 @@
+ #endif
+ #endif // !NDEBUG
+     memory_manager()->set_entry_for_function(function, entry);
++#if SHARK_LLVM_VERSION <= 34
+     code = (address) execution_engine()->getPointerToFunction(function);
++#else
++    code = (address) execution_engine()->getFunctionAddress(name);
++#endif
+   }
+   assert(code != NULL, "code must be != NULL");
+   entry->set_entry_point(code);
+--- hotspot/src/share/vm/shark/sharkContext.cpp.orig	2015-09-21 11:22:51.707813194 +0200
++++ hotspot/src/share/vm/shark/sharkContext.cpp	2015-09-21 13:47:56.243845961 +0200
+@@ -34,8 +34,13 @@
+ using namespace llvm;
+ 
+ SharkContext::SharkContext(const char* name)
+-  : LLVMContext(),
+-    _free_queue(NULL) {
++  : LLVMContext()
++  , _free_queue(0)
++#if SHARK_LLVM_VERSION > 34
++  , _ee(0)
++  , func_mod_map()
++#endif
++{
+   // Create a module to build our functions into
+   _module = new Module(name, *this);
+ 
+--- hotspot/src/share/vm/shark/sharkContext.hpp.orig	2015-09-21 10:58:37.195807719 +0200
++++ hotspot/src/share/vm/shark/sharkContext.hpp	2015-09-21 13:50:48.459846609 +0200
+@@ -29,6 +29,8 @@
+ #include "shark/llvmHeaders.hpp"
+ #include "shark/sharkCompiler.hpp"
+ 
++#include <map>
++
+ // The LLVMContext class allows multiple instances of LLVM to operate
+ // independently of each other in a multithreaded context.  We extend
+ // this here to store things in Shark that are LLVMContext-specific.
+@@ -41,12 +43,28 @@
+ 
+  private:
+   llvm::Module* _module;
++#if SHARK_LLVM_VERSION > 34
++  llvm::ExecutionEngine *_ee;
++  std::map<std::string, llvm::Module *> func_mod_map;
++#endif
+ 
+  public:
+   llvm::Module* module() const {
+     return _module;
+   }
+ 
++#if SHARK_LLVM_VERSION > 34
++  llvm::ExecutionEngine *execution_engine(llvm::ExecutionEngine *ee) {
++      llvm::ExecutionEngine *oee = _ee;
++      _ee = ee;
++      return oee;
++  }
++
++  llvm::ExecutionEngine *execution_engine() const {
++      return _ee;
++  }
++#endif
++
+   // Get this thread's SharkContext
+  public:
+   static SharkContext& current() {
+@@ -55,12 +73,35 @@
+ 
+   // Module accessors
+  public:
+-  void add_function(llvm::Function* function) const {
++  void add_function(llvm::Function* function) {
++#if SHARK_LLVM_VERSION <= 34
+     module()->getFunctionList().push_back(function);
++#else
++    // shark compiles modules, not functions
++    std::map<std::string, llvm::Module *>::iterator i = func_mod_map.find(function->getName().str());
++    if(func_mod_map.end() == i) {
++	llvm::Module *mod4fun = new llvm::Module(function->getName(), *this);
++	func_mod_map.insert(std::pair<std::string, llvm::Module *>(function->getName().str(), mod4fun));
++	mod4fun->getFunctionList().push_back(function);
++	_ee->addModule(mod4fun);
++    }
++#endif
+   }
+   llvm::Constant* get_external(const char*               name,
+                                llvm::FunctionType* sig) {
++    // XXX see whether we need additional module map, too
++#if SHARK_LLVM_VERSION <= 34
+     return module()->getOrInsertFunction(name, sig);
++#else
++    // shark compiles modules, not functions
++    std::map<std::string, llvm::Module *>::iterator i = func_mod_map.find(name);
++    if(func_mod_map.end() == i) {
++	llvm::Module *mod4fun = new llvm::Module(name, *this);
++	func_mod_map.insert(std::pair<std::string, llvm::Module *>(name, mod4fun));
++	mod4fun->getOrInsertFunction(name, sig);
++	_ee->addModule(mod4fun);
++    }
++#endif
+   }
+ 
+   // Basic types
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
new file mode 100644
index 0000000..31234cb
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
@@ -0,0 +1,2730 @@
+--- hotspot/src/share/vm/memory/cardTableModRefBS.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/memory/cardTableModRefBS.hpp	2015-09-02 09:46:59.000000000 +0200
+@@ -158,8 +158,8 @@
+   // Mapping from address to card marking array entry
+   jbyte* byte_for(const void* p) const {
+     assert(_whole_heap.contains(p),
+-           err_msg("Attempt to access p = "PTR_FORMAT" out of bounds of "
+-                   " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")",
++           err_msg("Attempt to access p = " PTR_FORMAT " out of bounds of "
++                   " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")",
+                    p2i(p), p2i(_whole_heap.start()), p2i(_whole_heap.end())));
+     jbyte* result = &byte_map_base[uintptr_t(p) >> card_shift];
+     assert(result >= _byte_map && result < _byte_map + _byte_map_size,
+@@ -436,8 +436,8 @@
+     size_t delta = pointer_delta(p, byte_map_base, sizeof(jbyte));
+     HeapWord* result = (HeapWord*) (delta << card_shift);
+     assert(_whole_heap.contains(result),
+-           err_msg("Returning result = "PTR_FORMAT" out of bounds of "
+-                   " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")",
++           err_msg("Returning result = " PTR_FORMAT " out of bounds of "
++                   " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")",
+                    p2i(result), p2i(_whole_heap.start()), p2i(_whole_heap.end())));
+     return result;
+   }
+@@ -445,8 +445,8 @@
+   // Mapping from address to card marking array index.
+   size_t index_for(void* p) {
+     assert(_whole_heap.contains(p),
+-           err_msg("Attempt to access p = "PTR_FORMAT" out of bounds of "
+-                   " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")",
++           err_msg("Attempt to access p = " PTR_FORMAT " out of bounds of "
++                   " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")",
+                    p2i(p), p2i(_whole_heap.start()), p2i(_whole_heap.end())));
+     return byte_for(p) - _byte_map;
+   }
+--- hotspot/src/share/vm/memory/generation.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/memory/generation.hpp	2015-09-02 09:47:36.000000000 +0200
+@@ -422,7 +422,7 @@
+     // have to guard against non-monotonicity.
+     NOT_PRODUCT(
+       if (now < _time_of_last_gc) {
+-        warning("time warp: "INT64_FORMAT" to "INT64_FORMAT, (int64_t)_time_of_last_gc, (int64_t)now);
++        warning("time warp: " INT64_FORMAT " to " INT64_FORMAT, (int64_t)_time_of_last_gc, (int64_t)now);
+       }
+     )
+     return _time_of_last_gc;
+--- hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp	2015-09-02 09:48:07.000000000 +0200
+@@ -94,10 +94,10 @@
+ 
+   if (PrintTLAB && Verbose) {
+     Thread* thrd = myThread();
+-    gclog_or_tty->print("TLAB: %s thread: "INTPTR_FORMAT" [id: %2d]"
+-                        " obj: "SIZE_FORMAT
+-                        " free: "SIZE_FORMAT
+-                        " waste: "SIZE_FORMAT"\n",
++    gclog_or_tty->print("TLAB: %s thread: " INTPTR_FORMAT " [id: %2d]"
++                        " obj: " SIZE_FORMAT
++                        " free: " SIZE_FORMAT
++                        " waste: " SIZE_FORMAT "\n",
+                         "slow", p2i(thrd), thrd->osthread()->thread_id(),
+                         obj_size, free(), refill_waste_limit());
+   }
+--- hotspot/src/share/vm/trace/traceStream.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/trace/traceStream.hpp	2015-09-02 09:49:16.000000000 +0200
+@@ -40,31 +40,31 @@
+   TraceStream(outputStream& stream): _st(stream) {}
+ 
+   void print_val(const char* label, u1 val) {
+-    _st.print("%s = "UINT32_FORMAT, label, val);
++    _st.print("%s = " UINT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, u2 val) {
+-    _st.print("%s = "UINT32_FORMAT, label, val);
++    _st.print("%s = " UINT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, s2 val) {
+-    _st.print("%s = "INT32_FORMAT, label, val);
++    _st.print("%s = " INT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, u4 val) {
+-    _st.print("%s = "UINT32_FORMAT, label, val);
++    _st.print("%s = " UINT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, s4 val) {
+-    _st.print("%s = "INT32_FORMAT, label, val);
++    _st.print("%s = " INT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, u8 val) {
+-    _st.print("%s = "UINT64_FORMAT, label, val);
++    _st.print("%s = " UINT64_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, s8 val) {
+-    _st.print("%s = "INT64_FORMAT, label, (int64_t) val);
++    _st.print("%s = " INT64_FORMAT, label, (int64_t) val);
+   }
+ 
+   void print_val(const char* label, bool val) {
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp	2015-09-02 10:04:07.000000000 +0200
+@@ -31,9 +31,9 @@
+ 
+ inline HeapRegion* HeapRegionManager::addr_to_region(HeapWord* addr) const {
+   assert(addr < heap_end(),
+-        err_msg("addr: "PTR_FORMAT" end: "PTR_FORMAT, p2i(addr), p2i(heap_end())));
++        err_msg("addr: " PTR_FORMAT " end: " PTR_FORMAT, p2i(addr), p2i(heap_end())));
+   assert(addr >= heap_bottom(),
+-        err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, p2i(addr), p2i(heap_bottom())));
++        err_msg("addr: " PTR_FORMAT " bottom: " PTR_FORMAT, p2i(addr), p2i(heap_bottom())));
+ 
+   HeapRegion* hr = _regions.get_by_address(addr);
+   return hr;
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp	2015-09-02 10:03:44.000000000 +0200
+@@ -112,7 +112,7 @@
+ 
+   assert(ClassUnloadingWithConcurrentMark,
+       err_msg("All blocks should be objects if G1 Class Unloading isn't used. "
+-              "HR: ["PTR_FORMAT", "PTR_FORMAT", "PTR_FORMAT") "
++              "HR: [" PTR_FORMAT ", " PTR_FORMAT ", " PTR_FORMAT ") "
+               "addr: " PTR_FORMAT,
+               p2i(bottom()), p2i(top()), p2i(end()), p2i(addr)));
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp	2015-09-02 10:03:17.000000000 +0200
+@@ -52,7 +52,7 @@
+ class HeapRegionSetBase;
+ class nmethod;
+ 
+-#define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]"
++#define HR_FORMAT "%u:(%s)[" PTR_FORMAT "," PTR_FORMAT "," PTR_FORMAT "]"
+ #define HR_FORMAT_PARAMS(_hr_) \
+                 (_hr_)->hrm_index(), \
+                 (_hr_)->get_short_type_str(), \
+@@ -542,8 +542,8 @@
+   void set_containing_set(HeapRegionSetBase* containing_set) {
+     assert((containing_set == NULL && _containing_set != NULL) ||
+            (containing_set != NULL && _containing_set == NULL),
+-           err_msg("containing_set: "PTR_FORMAT" "
+-                   "_containing_set: "PTR_FORMAT,
++           err_msg("containing_set: " PTR_FORMAT " "
++                   "_containing_set: " PTR_FORMAT,
+                    p2i(containing_set), p2i(_containing_set)));
+ 
+     _containing_set = containing_set;
+--- hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp	2015-09-02 10:02:55.000000000 +0200
+@@ -46,7 +46,7 @@
+ 
+ inline uint G1CollectedHeap::addr_to_region(HeapWord* addr) const {
+   assert(is_in_reserved(addr),
+-         err_msg("Cannot calculate region index for address "PTR_FORMAT" that is outside of the heap ["PTR_FORMAT", "PTR_FORMAT")",
++         err_msg("Cannot calculate region index for address " PTR_FORMAT " that is outside of the heap [" PTR_FORMAT ", " PTR_FORMAT ")",
+                  p2i(addr), p2i(_reserved.start()), p2i(_reserved.end())));
+   return (uint)(pointer_delta(addr, _reserved.start(), sizeof(uint8_t)) >> HeapRegion::LogOfHRGrainBytes);
+ }
+@@ -59,7 +59,7 @@
+ inline HeapRegion* G1CollectedHeap::heap_region_containing_raw(const T addr) const {
+   assert(addr != NULL, "invariant");
+   assert(is_in_g1_reserved((const void*) addr),
+-      err_msg("Address "PTR_FORMAT" is outside of the heap ranging from ["PTR_FORMAT" to "PTR_FORMAT")",
++      err_msg("Address " PTR_FORMAT " is outside of the heap ranging from [" PTR_FORMAT " to " PTR_FORMAT ")",
+           p2i((void*)addr), p2i(g1_reserved().start()), p2i(g1_reserved().end())));
+   return _hrm.addr_to_region((HeapWord*) addr);
+ }
+--- hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp.orig	2015-09-02 09:59:22.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp	2015-09-02 10:01:43.000000000 +0200
+@@ -47,15 +47,15 @@
+   }
+ }
+ 
+-#define check_index(index, msg)                                                \
+-  assert((index) < (_reserved.word_size() >> LogN_words),                      \
+-         err_msg("%s - index: "SIZE_FORMAT", _vs.committed_size: "SIZE_FORMAT, \
+-                 msg, (index), (_reserved.word_size() >> LogN_words)));        \
+-  assert(G1CollectedHeap::heap()->is_in_exact(address_for_index_raw(index)),   \
+-         err_msg("Index "SIZE_FORMAT" corresponding to "PTR_FORMAT             \
+-                 " (%u) is not in committed area.",                            \
+-                 (index),                                                      \
+-                 p2i(address_for_index_raw(index)),                            \
++#define check_index(index, msg)                                                   \
++  assert((index) < (_reserved.word_size() >> LogN_words),                         \
++         err_msg("%s - index: " SIZE_FORMAT ", _vs.committed_size: " SIZE_FORMAT, \
++                 msg, (index), (_reserved.word_size() >> LogN_words)));           \
++  assert(G1CollectedHeap::heap()->is_in_exact(address_for_index_raw(index)),      \
++         err_msg("Index " SIZE_FORMAT " corresponding to " PTR_FORMAT             \
++                 " (%u) is not in committed area.",                               \
++                 (index),                                                         \
++                 p2i(address_for_index_raw(index)),                               \
+                  G1CollectedHeap::heap()->addr_to_region(address_for_index_raw(index))));
+ 
+ u_char G1BlockOffsetSharedArray::offset_array(size_t index) const {
+--- hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp.orig	2015-09-02 09:59:22.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp	2015-09-02 10:00:36.000000000 +0200
+@@ -78,7 +78,7 @@
+ 
+    void decrease_used(size_t bytes) {
+      assert(_summary_bytes_used >= bytes,
+-            err_msg("invariant: _summary_bytes_used: "SIZE_FORMAT" should be >= bytes: "SIZE_FORMAT,
++            err_msg("invariant: _summary_bytes_used: " SIZE_FORMAT " should be >= bytes: " SIZE_FORMAT,
+                 _summary_bytes_used, bytes));
+      _summary_bytes_used -= bytes;
+    }
+--- hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp.orig	2015-09-02 09:59:22.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp	2015-09-02 10:00:20.000000000 +0200
+@@ -92,7 +92,7 @@
+     regions_at_put(_curr_index, NULL);
+     assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
+            err_msg("remaining reclaimable bytes inconsistent "
+-                   "from region: "SIZE_FORMAT" remaining: "SIZE_FORMAT,
++                   "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
+                    hr->reclaimable_bytes(), _remaining_reclaimable_bytes));
+     _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
+     _curr_index += 1;
+--- hotspot/src/share/vm/compiler/compileBroker.cpp.orig	2015-09-02 10:08:43.000000000 +0200
++++ hotspot/src/share/vm/compiler/compileBroker.cpp	2015-09-02 10:09:37.000000000 +0200
+@@ -203,7 +203,7 @@
+   }
+ 
+   void log_nmethod(JavaThread* thread, nmethod* nm) {
+-    log(thread, "nmethod %d%s " INTPTR_FORMAT " code ["INTPTR_FORMAT ", " INTPTR_FORMAT "]",
++    log(thread, "nmethod %d%s " INTPTR_FORMAT " code [" INTPTR_FORMAT ", " INTPTR_FORMAT "]",
+         nm->compile_id(), nm->is_osr_method() ? "%" : "",
+         p2i(nm), p2i(nm->code_begin()), p2i(nm->code_end()));
+   }
+--- hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp.orig	2015-09-02 10:08:44.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp	2015-09-02 10:09:56.000000000 +0200
+@@ -121,15 +121,15 @@
+ // Single parameter format strings
+ #define ergo_format_str(_name_)      ", " _name_ ": %s"
+ #define ergo_format_region(_name_)   ", " _name_ ": %u regions"
+-#define ergo_format_byte(_name_)     ", " _name_ ": "SIZE_FORMAT" bytes"
++#define ergo_format_byte(_name_)     ", " _name_ ": " SIZE_FORMAT " bytes"
+ #define ergo_format_double(_name_)   ", " _name_ ": %1.2f"
+ #define ergo_format_perc(_name_)     ", " _name_ ": %1.2f %%"
+ #define ergo_format_ms(_name_)       ", " _name_ ": %1.2f ms"
+-#define ergo_format_size(_name_)     ", " _name_ ": "SIZE_FORMAT
++#define ergo_format_size(_name_)     ", " _name_ ": " SIZE_FORMAT
+ 
+ // Double parameter format strings
+ #define ergo_format_byte_perc(_name_)                                   \
+-                             ", " _name_ ": "SIZE_FORMAT" bytes (%1.2f %%)"
++                             ", " _name_ ": " SIZE_FORMAT " bytes (%1.2f %%)"
+ 
+ // Generates the format string
+ #define ergo_format(_extra_format_)                           \
+--- hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp.orig	2015-09-02 10:12:49.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp	2015-09-02 10:21:24.000000000 +0200
+@@ -196,8 +196,8 @@
+   assert(_bmStartWord <= (addr) && (addr) < (_bmStartWord + _bmWordSize),      \
+          "outside underlying space?");                                         \
+   assert(G1CollectedHeap::heap()->is_in_exact(addr),                           \
+-         err_msg("Trying to access not available bitmap "PTR_FORMAT            \
+-                 " corresponding to "PTR_FORMAT" (%u)",                        \
++         err_msg("Trying to access not available bitmap " PTR_FORMAT           \
++                 " corresponding to " PTR_FORMAT " (%u)",                      \
+                  p2i(this), p2i(addr), G1CollectedHeap::heap()->addr_to_region(addr)));
+ 
+ inline void CMBitMap::mark(HeapWord* addr) {
+@@ -270,7 +270,7 @@
+ 
+ inline void CMTask::deal_with_reference(oop obj) {
+   if (_cm->verbose_high()) {
+-    gclog_or_tty->print_cr("[%u] we're dealing with reference = "PTR_FORMAT,
++    gclog_or_tty->print_cr("[%u] we're dealing with reference = " PTR_FORMAT,
+                            _worker_id, p2i((void*) obj));
+   }
+ 
+@@ -374,7 +374,7 @@
+   // assert that word_size is under an upper bound which is its
+   // containing region's capacity.
+   assert(word_size * HeapWordSize <= hr->capacity(),
+-         err_msg("size: "SIZE_FORMAT" capacity: "SIZE_FORMAT" "HR_FORMAT,
++         err_msg("size: " SIZE_FORMAT " capacity: " SIZE_FORMAT " " HR_FORMAT,
+                  word_size * HeapWordSize, hr->capacity(),
+                  HR_FORMAT_PARAMS(hr)));
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.hpp.orig	2015-09-02 10:12:49.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.hpp	2015-09-02 10:21:38.000000000 +0200
+@@ -91,7 +91,7 @@
+ 
+   jbyte* card_num_2_ptr(size_t card_num) {
+     assert(card_num >= 0 && card_num < _reserved_max_card_num,
+-           err_msg("card num out of range: "SIZE_FORMAT, card_num));
++           err_msg("card num out of range: " SIZE_FORMAT, card_num));
+     return (jbyte*) (_ct_bot + card_num);
+   }
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp.orig	2015-09-02 10:24:04.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp	2015-09-02 10:24:14.000000000 +0200
+@@ -118,7 +118,7 @@
+   oop obj = oopDesc::load_decode_heap_oop(p);
+   if (_cm->verbose_high()) {
+     gclog_or_tty->print_cr("[%u] we're looking at location "
+-                           "*"PTR_FORMAT" = "PTR_FORMAT,
++                           "*" PTR_FORMAT " = " PTR_FORMAT,
+                            _task->worker_id(), p2i(p), p2i((void*) obj));
+   }
+   _task->deal_with_reference(obj);
+--- hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp.orig	2015-09-06 14:02:06.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	2015-09-10 12:03:16.130020385 +0200
+@@ -284,7 +284,7 @@
+     if (PrintGCDetails && Verbose) {
+       // Failed to double capacity, continue;
+       gclog_or_tty->print(" (benign) Failed to expand marking stack capacity from "
+-                          SIZE_FORMAT"K to " SIZE_FORMAT"K",
++                          SIZE_FORMAT "K to " SIZE_FORMAT "K",
+                           _capacity / K, new_capacity / K);
+     }
+   }
+@@ -581,7 +581,7 @@
+   _verbose_level = verbose_level;
+ 
+   if (verbose_low()) {
+-    gclog_or_tty->print_cr("[global] init, heap start = "PTR_FORMAT", "
++    gclog_or_tty->print_cr("[global] init, heap start = " PTR_FORMAT ", "
+                            "heap end = " INTPTR_FORMAT, p2i(_heap_start), p2i(_heap_end));
+   }
+ 
+@@ -838,7 +838,7 @@
+     // in a STW phase.
+     assert(!concurrent_marking_in_progress(), "invariant");
+     assert(out_of_regions(),
+-           err_msg("only way to get here: _finger: "PTR_FORMAT", _heap_end: "PTR_FORMAT,
++           err_msg("only way to get here: _finger: " PTR_FORMAT ", _heap_end: " PTR_FORMAT,
+                    p2i(_finger), p2i(_heap_end)));
+   }
+ }
+@@ -1453,7 +1453,7 @@
+ 
+     assert(start <= hr->end() && start <= ntams && ntams <= hr->end(),
+            err_msg("Preconditions not met - "
+-                   "start: "PTR_FORMAT", ntams: "PTR_FORMAT", end: "PTR_FORMAT,
++                   "start: " PTR_FORMAT ", ntams: " PTR_FORMAT ", end: " PTR_FORMAT,
+                    p2i(start), p2i(ntams), p2i(hr->end())));
+ 
+     // Find the first marked object at or after "start".
+@@ -1770,10 +1770,10 @@
+       }
+ 
+       assert(end_idx <= _card_bm->size(),
+-             err_msg("oob: end_idx=  "SIZE_FORMAT", bitmap size= "SIZE_FORMAT,
++             err_msg("oob: end_idx=  " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT,
+                      end_idx, _card_bm->size()));
+       assert(start_idx < _card_bm->size(),
+-             err_msg("oob: start_idx=  "SIZE_FORMAT", bitmap size= "SIZE_FORMAT,
++             err_msg("oob: start_idx=  " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT,
+                      start_idx, _card_bm->size()));
+ 
+       _cm->set_card_bitmap_range(_card_bm, start_idx, end_idx, true /* is_par */);
+@@ -2278,7 +2278,7 @@
+       oop obj = oopDesc::load_decode_heap_oop(p);
+       if (_cm->verbose_high()) {
+         gclog_or_tty->print_cr("\t[%u] we're looking at location "
+-                               "*"PTR_FORMAT" = "PTR_FORMAT,
++                               "*" PTR_FORMAT " = " PTR_FORMAT,
+                                _task->worker_id(), p2i(p), p2i((void*) obj));
+       }
+ 
+@@ -2847,7 +2847,7 @@
+       }
+     }
+ 
+-    _out->print_cr("  "PTR_FORMAT": "PTR_FORMAT"%s%s",
++    _out->print_cr("  " PTR_FORMAT ": " PTR_FORMAT "%s%s",
+                    p2i(p), p2i((void*) obj), str, str2);
+   }
+ };
+@@ -2874,7 +2874,7 @@
+     bool print_it = _all || over_tams || marked;
+ 
+     if (print_it) {
+-      _out->print_cr(" "PTR_FORMAT"%s",
++      _out->print_cr(" " PTR_FORMAT "%s",
+                      p2i((void *)o), (over_tams) ? " >" : (marked) ? " M" : "");
+       PrintReachableOopClosure oopCl(_out, _vo, _all);
+       o->oop_iterate_no_header(&oopCl);
+@@ -2895,7 +2895,7 @@
+     HeapWord* e = hr->end();
+     HeapWord* t = hr->top();
+     HeapWord* p = _g1h->top_at_mark_start(hr, _vo);
+-    _out->print_cr("** ["PTR_FORMAT", "PTR_FORMAT"] top: "PTR_FORMAT" "
++    _out->print_cr("** [" PTR_FORMAT ", " PTR_FORMAT "] top: " PTR_FORMAT " "
+                    "TAMS: " PTR_FORMAT, p2i(b), p2i(e), p2i(t), p2i(p));
+     _out->cr();
+ 
+@@ -3019,9 +3019,9 @@
+       HeapWord*   limit         = curr_region->next_top_at_mark_start();
+ 
+       if (verbose_low()) {
+-        gclog_or_tty->print_cr("[%u] curr_region = "PTR_FORMAT" "
+-                               "["PTR_FORMAT", "PTR_FORMAT"), "
+-                               "limit = "PTR_FORMAT,
++        gclog_or_tty->print_cr("[%u] curr_region = " PTR_FORMAT " "
++                               "[" PTR_FORMAT ", " PTR_FORMAT "), "
++                               "limit = " PTR_FORMAT,
+                                worker_id, p2i(curr_region), p2i(bottom), p2i(end), p2i(limit));
+       }
+ 
+@@ -3036,7 +3036,7 @@
+ 
+       if (limit > bottom) {
+         if (verbose_low()) {
+-          gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is not empty, "
++          gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is not empty, "
+                                  "returning it ", worker_id, p2i(curr_region));
+         }
+         return curr_region;
+@@ -3044,7 +3044,7 @@
+         assert(limit == bottom,
+                "the region limit should be at bottom");
+         if (verbose_low()) {
+-          gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is empty, "
++          gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is empty, "
+                                  "returning NULL", worker_id, p2i(curr_region));
+         }
+         // we return NULL and the caller should try calling
+@@ -3056,13 +3056,13 @@
+       if (verbose_low()) {
+         if (curr_region == NULL) {
+           gclog_or_tty->print_cr("[%u] found uncommitted region, moving finger, "
+-                                 "global finger = "PTR_FORMAT", "
+-                                 "our finger = "PTR_FORMAT,
++                                 "global finger = " PTR_FORMAT ", "
++                                 "our finger = " PTR_FORMAT,
+                                  worker_id, p2i(_finger), p2i(finger));
+         } else {
+           gclog_or_tty->print_cr("[%u] somebody else moved the finger, "
+-                                 "global finger = "PTR_FORMAT", "
+-                                 "our finger = "PTR_FORMAT,
++                                 "global finger = " PTR_FORMAT ", "
++                                 "our finger = " PTR_FORMAT,
+                                  worker_id, p2i(_finger), p2i(finger));
+         }
+       }
+@@ -3098,7 +3098,7 @@
+ 
+   void do_object_work(oop obj) {
+     guarantee(!_g1h->obj_in_cs(obj),
+-              err_msg("obj: "PTR_FORMAT" in CSet, phase: %s, info: %d",
++              err_msg("obj: " PTR_FORMAT " in CSet, phase: %s, info: %d",
+                       p2i((void*) obj), phase_str(), _info));
+   }
+ 
+@@ -3159,7 +3159,7 @@
+     // here.
+     HeapRegion* global_hr = _g1h->heap_region_containing_raw(global_finger);
+     guarantee(global_hr == NULL || global_finger == global_hr->bottom(),
+-              err_msg("global finger: "PTR_FORMAT" region: "HR_FORMAT,
++              err_msg("global finger: " PTR_FORMAT " region: " HR_FORMAT,
+                       p2i(global_finger), HR_FORMAT_PARAMS(global_hr)));
+   }
+ 
+@@ -3173,7 +3173,7 @@
+       HeapRegion* task_hr = _g1h->heap_region_containing_raw(task_finger);
+       guarantee(task_hr == NULL || task_finger == task_hr->bottom() ||
+                 !task_hr->in_collection_set(),
+-                err_msg("task finger: "PTR_FORMAT" region: "HR_FORMAT,
++                err_msg("task finger: " PTR_FORMAT " region: " HR_FORMAT,
+                         p2i(task_finger), HR_FORMAT_PARAMS(task_hr)));
+     }
+   }
+@@ -3215,8 +3215,8 @@
+ 
+     assert(start <= limit && limit <= hr->top() && hr->top() <= hr->end(),
+            err_msg("Preconditions not met - "
+-                   "start: "PTR_FORMAT", limit: "PTR_FORMAT", "
+-                   "top: "PTR_FORMAT", end: "PTR_FORMAT,
++                   "start: " PTR_FORMAT ", limit: " PTR_FORMAT ", "
++                   "top: " PTR_FORMAT ", end: " PTR_FORMAT,
+                    p2i(start), p2i(limit), p2i(hr->top()), p2i(hr->end())));
+ 
+     assert(hr->next_marked_bytes() == 0, "Precondition");
+@@ -3495,7 +3495,7 @@
+ #ifndef PRODUCT
+ // for debugging purposes
+ void ConcurrentMark::print_finger() {
+-  gclog_or_tty->print_cr("heap ["PTR_FORMAT", "PTR_FORMAT"), global finger = "PTR_FORMAT,
++  gclog_or_tty->print_cr("heap [" PTR_FORMAT ", " PTR_FORMAT "), global finger = " PTR_FORMAT,
+                          p2i(_heap_start), p2i(_heap_end), p2i(_finger));
+   for (uint i = 0; i < _max_worker_id; ++i) {
+     gclog_or_tty->print("   %u: " PTR_FORMAT, i, p2i(_tasks[i]->finger()));
+@@ -3580,7 +3580,7 @@
+         "claim_region() should have filtered out continues humongous regions");
+ 
+   if (_cm->verbose_low()) {
+-    gclog_or_tty->print_cr("[%u] setting up for region "PTR_FORMAT,
++    gclog_or_tty->print_cr("[%u] setting up for region " PTR_FORMAT,
+                            _worker_id, p2i(hr));
+   }
+ 
+@@ -3597,7 +3597,7 @@
+   if (limit == bottom) {
+     if (_cm->verbose_low()) {
+       gclog_or_tty->print_cr("[%u] found an empty region "
+-                             "["PTR_FORMAT", "PTR_FORMAT")",
++                             "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                              _worker_id, p2i(bottom), p2i(limit));
+     }
+     // The region was collected underneath our feet.
+@@ -3629,7 +3629,7 @@
+ void CMTask::giveup_current_region() {
+   assert(_curr_region != NULL, "invariant");
+   if (_cm->verbose_low()) {
+-    gclog_or_tty->print_cr("[%u] giving up region "PTR_FORMAT,
++    gclog_or_tty->print_cr("[%u] giving up region " PTR_FORMAT,
+                            _worker_id, p2i(_curr_region));
+   }
+   clear_region_fields();
+@@ -3751,7 +3751,7 @@
+ 
+   if (_cm->verbose_medium()) {
+       gclog_or_tty->print_cr("[%u] regular clock, interval = %1.2lfms, "
+-                        "scanned = "SIZE_FORMAT"%s, refs reached = "SIZE_FORMAT"%s",
++                        "scanned = " SIZE_FORMAT "%s, refs reached = " SIZE_FORMAT "%s",
+                         _worker_id, last_interval_ms,
+                         _words_scanned,
+                         (_words_scanned >= _words_scanned_limit) ? " (*)" : "",
+@@ -3920,7 +3920,7 @@
+       statsOnly( ++_local_pops );
+ 
+       if (_cm->verbose_high()) {
+-        gclog_or_tty->print_cr("[%u] popped "PTR_FORMAT, _worker_id,
++        gclog_or_tty->print_cr("[%u] popped " PTR_FORMAT, _worker_id,
+                                p2i((void*) obj));
+       }
+ 
+@@ -4273,8 +4273,8 @@
+ 
+       if (_cm->verbose_low()) {
+         gclog_or_tty->print_cr("[%u] we're scanning part "
+-                               "["PTR_FORMAT", "PTR_FORMAT") "
+-                               "of region "HR_FORMAT,
++                               "[" PTR_FORMAT ", " PTR_FORMAT ") "
++                               "of region " HR_FORMAT,
+                                _worker_id, p2i(_finger), p2i(_region_limit),
+                                HR_FORMAT_PARAMS(_curr_region));
+       }
+@@ -4361,7 +4361,7 @@
+ 
+         if (_cm->verbose_low()) {
+           gclog_or_tty->print_cr("[%u] we successfully claimed "
+-                                 "region "PTR_FORMAT,
++                                 "region " PTR_FORMAT,
+                                  _worker_id, p2i(claimed_region));
+         }
+ 
+@@ -4422,7 +4422,7 @@
+ 
+       if (_cm->try_stealing(_worker_id, &_hash_seed, obj)) {
+         if (_cm->verbose_medium()) {
+-          gclog_or_tty->print_cr("[%u] stolen "PTR_FORMAT" successfully",
++          gclog_or_tty->print_cr("[%u] stolen " PTR_FORMAT " successfully",
+                                  _worker_id, p2i((void*) obj));
+         }
+ 
+@@ -4630,7 +4630,7 @@
+ // identify them easily in a large log file.
+ #define G1PPRL_LINE_PREFIX            "###"
+ 
+-#define G1PPRL_ADDR_BASE_FORMAT    " "PTR_FORMAT"-"PTR_FORMAT
++#define G1PPRL_ADDR_BASE_FORMAT    " " PTR_FORMAT "-" PTR_FORMAT
+ #ifdef _LP64
+ #define G1PPRL_ADDR_BASE_H_FORMAT  " %37s"
+ #else // _LP64
+@@ -4640,16 +4640,16 @@
+ // For per-region info
+ #define G1PPRL_TYPE_FORMAT            "   %-4s"
+ #define G1PPRL_TYPE_H_FORMAT          "   %4s"
+-#define G1PPRL_BYTE_FORMAT            "  "SIZE_FORMAT_W(9)
++#define G1PPRL_BYTE_FORMAT            "  " SIZE_FORMAT_W(9)
+ #define G1PPRL_BYTE_H_FORMAT          "  %9s"
+ #define G1PPRL_DOUBLE_FORMAT          "  %14.1f"
+ #define G1PPRL_DOUBLE_H_FORMAT        "  %14s"
+ 
+ // For summary info
+-#define G1PPRL_SUM_ADDR_FORMAT(tag)    "  "tag":"G1PPRL_ADDR_BASE_FORMAT
+-#define G1PPRL_SUM_BYTE_FORMAT(tag)    "  "tag": "SIZE_FORMAT
+-#define G1PPRL_SUM_MB_FORMAT(tag)      "  "tag": %1.2f MB"
+-#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag)" / %1.2f %%"
++#define G1PPRL_SUM_ADDR_FORMAT(tag)    "  " tag ":" G1PPRL_ADDR_BASE_FORMAT
++#define G1PPRL_SUM_BYTE_FORMAT(tag)    "  " tag ": " SIZE_FORMAT
++#define G1PPRL_SUM_MB_FORMAT(tag)      "  " tag ": %1.2f MB"
++#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag) " / %1.2f %%"
+ 
+ G1PrintRegionLivenessInfoClosure::
+ G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name)
+--- hotspot/src/share/vm/oops/constantPool.cpp.orig	2015-09-02 10:35:07.000000000 +0200
++++ hotspot/src/share/vm/oops/constantPool.cpp	2015-09-02 10:36:03.000000000 +0200
+@@ -1494,7 +1494,7 @@
+       }
+       case JVM_CONSTANT_Long: {
+         u8 val = Bytes::get_Java_u8(bytes);
+-        printf("long         "INT64_FORMAT, (int64_t) *(jlong *) &val);
++        printf("long         " INT64_FORMAT, (int64_t) *(jlong *) &val);
+         ent_size = 8;
+         idx++; // Long takes two cpool slots
+         break;
+--- hotspot/src/share/vm/oops/cpCache.cpp.orig	2015-09-02 10:35:13.000000000 +0200
++++ hotspot/src/share/vm/oops/cpCache.cpp	2015-09-02 10:36:48.000000000 +0200
+@@ -305,7 +305,7 @@
+                    adapter->size_of_parameters());
+ 
+   if (TraceInvokeDynamic) {
+-    tty->print_cr("set_method_handle bc=%d appendix="PTR_FORMAT"%s method_type="PTR_FORMAT"%s method="PTR_FORMAT" ",
++    tty->print_cr("set_method_handle bc=%d appendix=" PTR_FORMAT "%s method_type=" PTR_FORMAT "%s method=" PTR_FORMAT " ",
+                   invoke_code,
+                   (void *)appendix(),    (has_appendix    ? "" : " (unused)"),
+                   (void *)method_type(), (has_method_type ? "" : " (unused)"),
+@@ -540,12 +540,12 @@
+   // print separator
+   if (index == 0) st->print_cr("                 -------------");
+   // print entry
+-  st->print("%3d  ("PTR_FORMAT")  ", index, (intptr_t)this);
++  st->print("%3d  (" PTR_FORMAT ")  ", index, (intptr_t)this);
+   st->print_cr("[%02x|%02x|%5d]", bytecode_2(), bytecode_1(),
+                constant_pool_index());
+-  st->print_cr("                 [   "PTR_FORMAT"]", (intptr_t)_f1);
+-  st->print_cr("                 [   "PTR_FORMAT"]", (intptr_t)_f2);
+-  st->print_cr("                 [   "PTR_FORMAT"]", (intptr_t)_flags);
++  st->print_cr("                 [   " PTR_FORMAT "]", (intptr_t)_f1);
++  st->print_cr("                 [   " PTR_FORMAT "]", (intptr_t)_f2);
++  st->print_cr("                 [   " PTR_FORMAT "]", (intptr_t)_flags);
+   st->print_cr("                 -------------");
+ }
+ 
+--- hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp.orig	2015-09-02 10:12:48.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	2015-09-02 10:39:26.000000000 +0200
+@@ -838,18 +838,18 @@
+   GenCollectedHeap* gch = GenCollectedHeap::heap();
+   if (PrintGCDetails) {
+     if (Verbose) {
+-      gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"("SIZE_FORMAT")]",
++      gclog_or_tty->print("[%d %s-%s: " SIZE_FORMAT "(" SIZE_FORMAT ")]",
+         level(), short_name(), s, used(), capacity());
+     } else {
+-      gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"K("SIZE_FORMAT"K)]",
++      gclog_or_tty->print("[%d %s-%s: " SIZE_FORMAT "K(" SIZE_FORMAT "K)]",
+         level(), short_name(), s, used() / K, capacity() / K);
+     }
+   }
+   if (Verbose) {
+-    gclog_or_tty->print(" "SIZE_FORMAT"("SIZE_FORMAT")",
++    gclog_or_tty->print(" " SIZE_FORMAT "(" SIZE_FORMAT ")",
+               gch->used(), gch->capacity());
+   } else {
+-    gclog_or_tty->print(" "SIZE_FORMAT"K("SIZE_FORMAT"K)",
++    gclog_or_tty->print(" " SIZE_FORMAT "K(" SIZE_FORMAT "K)",
+               gch->used() / K, gch->capacity() / K);
+   }
+ }
+@@ -879,8 +879,8 @@
+   bool   res = (available >= av_promo) || (available >= max_promotion_in_bytes);
+   if (Verbose && PrintGCDetails) {
+     gclog_or_tty->print_cr(
+-      "CMS: promo attempt is%s safe: available("SIZE_FORMAT") %s av_promo("SIZE_FORMAT"),"
+-      "max_promo("SIZE_FORMAT")",
++      "CMS: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT "),"
++      "max_promo(" SIZE_FORMAT ")",
+       res? "":" not", available, res? ">=":"<",
+       av_promo, max_promotion_in_bytes);
+   }
+@@ -966,8 +966,8 @@
+         desired_free_percentage);
+       gclog_or_tty->print_cr("  Maximum free fraction %f",
+         maximum_free_percentage);
+-      gclog_or_tty->print_cr("  Capactiy "SIZE_FORMAT, capacity()/1000);
+-      gclog_or_tty->print_cr("  Desired capacity "SIZE_FORMAT,
++      gclog_or_tty->print_cr("  Capactiy " SIZE_FORMAT, capacity()/1000);
++      gclog_or_tty->print_cr("  Desired capacity " SIZE_FORMAT,
+         desired_capacity/1000);
+       int prev_level = level() - 1;
+       if (prev_level >= 0) {
+@@ -975,14 +975,14 @@
+         GenCollectedHeap* gch = GenCollectedHeap::heap();
+         Generation* prev_gen = gch->_gens[prev_level];
+         prev_size = prev_gen->capacity();
+-          gclog_or_tty->print_cr("  Younger gen size "SIZE_FORMAT,
++          gclog_or_tty->print_cr("  Younger gen size " SIZE_FORMAT,
+                                  prev_size/1000);
+       }
+-      gclog_or_tty->print_cr("  unsafe_max_alloc_nogc "SIZE_FORMAT,
++      gclog_or_tty->print_cr("  unsafe_max_alloc_nogc " SIZE_FORMAT,
+         unsafe_max_alloc_nogc()/1000);
+-      gclog_or_tty->print_cr("  contiguous available "SIZE_FORMAT,
++      gclog_or_tty->print_cr("  contiguous available " SIZE_FORMAT,
+         contiguous_available()/1000);
+-      gclog_or_tty->print_cr("  Expand by "SIZE_FORMAT" (bytes)",
++      gclog_or_tty->print_cr("  Expand by " SIZE_FORMAT " (bytes)",
+         expand_bytes);
+     }
+     // safe if expansion fails
+@@ -1513,8 +1513,8 @@
+     stats().print_on(gclog_or_tty);
+     gclog_or_tty->print_cr("time_until_cms_gen_full %3.7f",
+       stats().time_until_cms_gen_full());
+-    gclog_or_tty->print_cr("free="SIZE_FORMAT, _cmsGen->free());
+-    gclog_or_tty->print_cr("contiguous_available="SIZE_FORMAT,
++    gclog_or_tty->print_cr("free=" SIZE_FORMAT, _cmsGen->free());
++    gclog_or_tty->print_cr("contiguous_available=" SIZE_FORMAT,
+                            _cmsGen->contiguous_available());
+     gclog_or_tty->print_cr("promotion_rate=%g", stats().promotion_rate());
+     gclog_or_tty->print_cr("cms_allocation_rate=%g", stats().cms_allocation_rate());
+@@ -2792,7 +2792,7 @@
+     assert(_numObjectsPromoted == 0, "check");
+     assert(_numWordsPromoted   == 0, "check");
+     if (Verbose && PrintGC) {
+-      gclog_or_tty->print("Allocated "SIZE_FORMAT" objects, "
++      gclog_or_tty->print("Allocated " SIZE_FORMAT " objects, "
+                           SIZE_FORMAT" bytes concurrently",
+       _numObjectsAllocated, _numWordsAllocated*sizeof(HeapWord));
+     }
+@@ -2879,7 +2879,7 @@
+     assert(_numObjectsAllocated == 0, "check");
+     assert(_numWordsAllocated == 0, "check");
+     if (Verbose && PrintGC) {
+-      gclog_or_tty->print("Promoted "SIZE_FORMAT" objects, "
++      gclog_or_tty->print("Promoted " SIZE_FORMAT " objects, "
+                           SIZE_FORMAT" bytes",
+                  _numObjectsPromoted, _numWordsPromoted*sizeof(HeapWord));
+     }
+@@ -2890,7 +2890,7 @@
+   if (PrintGC && Verbose) {
+     // Call down the chain in contiguous_available needs the freelistLock
+     // so print this out before releasing the freeListLock.
+-    gclog_or_tty->print(" Contiguous available "SIZE_FORMAT" bytes ",
++    gclog_or_tty->print(" Contiguous available " SIZE_FORMAT " bytes ",
+                         contiguous_available());
+   }
+ }
+@@ -2978,7 +2978,7 @@
+     HeapWord* addr = _marks->offsetToHeapWord(offset);
+     if (!_marks->isMarked(addr)) {
+       oop(addr)->print_on(gclog_or_tty);
+-      gclog_or_tty->print_cr(" ("INTPTR_FORMAT" should have been marked)", addr);
++      gclog_or_tty->print_cr(" (" INTPTR_FORMAT " should have been marked)", addr);
+       _failed = true;
+     }
+     return true;
+@@ -5037,7 +5037,7 @@
+ 
+   SpecializationStats::clear();
+   if (PrintGCDetails) {
+-    gclog_or_tty->print("[YG occupancy: "SIZE_FORMAT" K ("SIZE_FORMAT" K)]",
++    gclog_or_tty->print("[YG occupancy: " SIZE_FORMAT " K (" SIZE_FORMAT " K)]",
+                         _young_gen->used() / K,
+                         _young_gen->capacity() / K);
+   }
+@@ -5170,8 +5170,8 @@
+   if (ser_ovflw > 0) {
+     if (PrintCMSStatistics != 0) {
+       gclog_or_tty->print_cr("Marking stack overflow (benign) "
+-        "(pmc_pc="SIZE_FORMAT", pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT
+-        ", kac_preclean="SIZE_FORMAT")",
++        "(pmc_pc=" SIZE_FORMAT ", pmc_rm=" SIZE_FORMAT ", kac=" SIZE_FORMAT
++        ", kac_preclean=" SIZE_FORMAT ")",
+         _ser_pmc_preclean_ovflw, _ser_pmc_remark_ovflw,
+         _ser_kac_ovflw, _ser_kac_preclean_ovflw);
+     }
+@@ -5184,7 +5184,7 @@
+   if (_par_pmc_remark_ovflw > 0 || _par_kac_ovflw > 0) {
+     if (PrintCMSStatistics != 0) {
+       gclog_or_tty->print_cr("Work queue overflow (benign) "
+-        "(pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT")",
++        "(pmc_rm=" SIZE_FORMAT ", kac=" SIZE_FORMAT ")",
+         _par_pmc_remark_ovflw, _par_kac_ovflw);
+     }
+     _par_pmc_remark_ovflw = 0;
+@@ -5192,12 +5192,12 @@
+   }
+   if (PrintCMSStatistics != 0) {
+      if (_markStack._hit_limit > 0) {
+-       gclog_or_tty->print_cr(" (benign) Hit max stack size limit ("SIZE_FORMAT")",
++       gclog_or_tty->print_cr(" (benign) Hit max stack size limit (" SIZE_FORMAT ")",
+                               _markStack._hit_limit);
+      }
+      if (_markStack._failed_double > 0) {
+-       gclog_or_tty->print_cr(" (benign) Failed stack doubling ("SIZE_FORMAT"),"
+-                              " current capacity "SIZE_FORMAT,
++       gclog_or_tty->print_cr(" (benign) Failed stack doubling (" SIZE_FORMAT "),"
++                              " current capacity " SIZE_FORMAT,
+                               _markStack._failed_double,
+                               _markStack.capacity());
+      }
+@@ -5961,7 +5961,7 @@
+                                                &markFromDirtyCardsClosure);
+       verify_work_stacks_empty();
+       if (PrintCMSStatistics != 0) {
+-        gclog_or_tty->print(" (re-scanned "SIZE_FORMAT" dirty cards in cms gen) ",
++        gclog_or_tty->print(" (re-scanned " SIZE_FORMAT " dirty cards in cms gen) ",
+           markFromDirtyCardsClosure.num_dirty_cards());
+       }
+     }
+@@ -6892,7 +6892,7 @@
+   } else if (_failed_double++ == 0 && !CMSConcurrentMTEnabled && PrintGCDetails) {
+     // Failed to double capacity, continue;
+     // we print a detail message only once per CMS cycle.
+-    gclog_or_tty->print(" (benign) Failed to expand marking stack from "SIZE_FORMAT"K to "
++    gclog_or_tty->print(" (benign) Failed to expand marking stack from " SIZE_FORMAT "K to "
+             SIZE_FORMAT"K",
+             _capacity / K, new_capacity / K);
+   }
+@@ -8215,25 +8215,25 @@
+     ShouldNotReachHere();
+   }
+   if (Verbose && PrintGC) {
+-    gclog_or_tty->print("Collected "SIZE_FORMAT" objects, " SIZE_FORMAT " bytes",
++    gclog_or_tty->print("Collected " SIZE_FORMAT " objects, " SIZE_FORMAT " bytes",
+                         _numObjectsFreed, _numWordsFreed*sizeof(HeapWord));
+-    gclog_or_tty->print_cr("\nLive "SIZE_FORMAT" objects,  "
++    gclog_or_tty->print_cr("\nLive " SIZE_FORMAT " objects,  "
+                            SIZE_FORMAT" bytes  "
+-      "Already free "SIZE_FORMAT" objects, "SIZE_FORMAT" bytes",
++      "Already free " SIZE_FORMAT " objects, " SIZE_FORMAT " bytes",
+       _numObjectsLive, _numWordsLive*sizeof(HeapWord),
+       _numObjectsAlreadyFree, _numWordsAlreadyFree*sizeof(HeapWord));
+     size_t totalBytes = (_numWordsFreed + _numWordsLive + _numWordsAlreadyFree)
+                         * sizeof(HeapWord);
+-    gclog_or_tty->print_cr("Total sweep: "SIZE_FORMAT" bytes", totalBytes);
++    gclog_or_tty->print_cr("Total sweep: " SIZE_FORMAT " bytes", totalBytes);
+ 
+     if (PrintCMSStatistics && CMSVerifyReturnedBytes) {
+       size_t indexListReturnedBytes = _sp->sumIndexedFreeListArrayReturnedBytes();
+       size_t dict_returned_bytes = _sp->dictionary()->sum_dict_returned_bytes();
+       size_t returned_bytes = indexListReturnedBytes + dict_returned_bytes;
+-      gclog_or_tty->print("Returned "SIZE_FORMAT" bytes", returned_bytes);
+-      gclog_or_tty->print("   Indexed List Returned "SIZE_FORMAT" bytes",
++      gclog_or_tty->print("Returned " SIZE_FORMAT " bytes", returned_bytes);
++      gclog_or_tty->print("   Indexed List Returned " SIZE_FORMAT " bytes",
+         indexListReturnedBytes);
+-      gclog_or_tty->print_cr("        Dictionary Returned "SIZE_FORMAT" bytes",
++      gclog_or_tty->print_cr("        Dictionary Returned " SIZE_FORMAT " bytes",
+         dict_returned_bytes);
+     }
+   }
+@@ -8312,13 +8312,13 @@
+     // coalesced chunk to the appropriate free list.
+     if (inFreeRange()) {
+       assert(freeFinger() >= _sp->bottom() && freeFinger() < _limit,
+-             err_msg("freeFinger() " PTR_FORMAT" is out-of-bounds", freeFinger()));
++             err_msg("freeFinger() " PTR_FORMAT " is out-of-bounds", freeFinger()));
+       flush_cur_free_chunk(freeFinger(),
+                            pointer_delta(addr, freeFinger()));
+       if (CMSTraceSweeper) {
+         gclog_or_tty->print("Sweep: last chunk: ");
+-        gclog_or_tty->print("put_free_blk 0x%x ("SIZE_FORMAT") "
+-                   "[coalesced:"SIZE_FORMAT"]\n",
++        gclog_or_tty->print("put_free_blk 0x%x (" SIZE_FORMAT ") "
++                   "[coalesced:" SIZE_FORMAT "]\n",
+                    freeFinger(), pointer_delta(addr, freeFinger()),
+                    lastFreeRangeCoalesced());
+       }
+--- hotspot/src/share/vm/classfile/dictionary.hpp.orig	2015-09-02 10:40:01.000000000 +0200
++++ hotspot/src/share/vm/classfile/dictionary.hpp	2015-09-02 10:40:32.000000000 +0200
+@@ -370,7 +370,7 @@
+ 
+   void print_on(outputStream* st) const {
+     symbol()->print_value_on(st);
+-    st->print("/mode="INTX_FORMAT, symbol_mode());
++    st->print("/mode=" INTX_FORMAT, symbol_mode());
+     st->print(" -> ");
+     bool printed = false;
+     if (method() != NULL) {
+--- hotspot/src/share/vm/compiler/disassembler.cpp.orig	2015-09-02 10:40:09.000000000 +0200
++++ hotspot/src/share/vm/compiler/disassembler.cpp	2015-09-02 10:41:33.000000000 +0200
+@@ -60,7 +60,7 @@
+ Disassembler::decode_func_virtual Disassembler::_decode_instructions_virtual = NULL;
+ Disassembler::decode_func Disassembler::_decode_instructions = NULL;
+ 
+-static const char hsdis_library_name[] = "hsdis-"HOTSPOT_LIB_ARCH;
++static const char hsdis_library_name[] = "hsdis-" HOTSPOT_LIB_ARCH;
+ static const char decode_instructions_virtual_name[] = "decode_instructions_virtual";
+ static const char decode_instructions_name[] = "decode_instructions";
+ static bool use_new_version = true;
+--- hotspot/src/share/vm/code/exceptionHandlerTable.cpp.orig	2015-09-02 10:44:06.000000000 +0200
++++ hotspot/src/share/vm/code/exceptionHandlerTable.cpp	2015-09-02 10:44:32.000000000 +0200
+@@ -186,7 +186,7 @@
+ void ImplicitExceptionTable::print(address base) const {
+   tty->print("{");
+   for( uint i=0; i<len(); i++ )
+-    tty->print("< "INTPTR_FORMAT", "INTPTR_FORMAT" > ",base + *adr(i), base + *(adr(i)+1));
++    tty->print("< " INTPTR_FORMAT ", " INTPTR_FORMAT " > ",base + *adr(i), base + *(adr(i)+1));
+   tty->print_cr("}");
+ }
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp.orig	2015-09-02 10:47:14.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp	2015-09-02 10:47:49.000000000 +0200
+@@ -140,7 +140,7 @@
+ }
+ 
+ void G1AllocRegion::fill_in_ext_msg(ar_ext_msg* msg, const char* message) {
+-  msg->append("[%s] %s c: %u b: %s r: "PTR_FORMAT" u: "SIZE_FORMAT,
++  msg->append("[%s] %s c: %u b: %s r: " PTR_FORMAT " u: " SIZE_FORMAT,
+               _name, message, _count, BOOL_TO_STR(_bot_updates),
+               p2i(_alloc_region), _used_bytes_before);
+ }
+@@ -217,7 +217,7 @@
+ 
+     if (G1_ALLOC_REGION_TRACING > 1) {
+       if (result != NULL) {
+-        jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT" "PTR_FORMAT,
++        jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT " " PTR_FORMAT,
+                      word_size, result);
+       } else if (word_size != 0) {
+         jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT, word_size);
+--- hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp.orig	2015-09-02 10:47:14.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp	2015-09-02 10:53:32.000000000 +0200
+@@ -385,11 +385,11 @@
+     HeapWord* card_addr = _array->address_for_index(card);
+     HeapWord* block_start = block_start_const(card_addr);
+     if (block_start != obj_start) {
+-      gclog_or_tty->print_cr("block start: "PTR_FORMAT" is incorrect - "
+-                             "card index: "SIZE_FORMAT" "
+-                             "card addr: "PTR_FORMAT" BOT entry: %u "
+-                             "obj: "PTR_FORMAT" word size: "SIZE_FORMAT" "
+-                             "cards: ["SIZE_FORMAT","SIZE_FORMAT"]",
++      gclog_or_tty->print_cr("block start: " PTR_FORMAT " is incorrect - "
++                             "card index: " SIZE_FORMAT " "
++                             "card addr: " PTR_FORMAT " BOT entry: %u "
++                             "obj: " PTR_FORMAT " word size: " SIZE_FORMAT " "
++                             "cards: [" SIZE_FORMAT "," SIZE_FORMAT "]",
+                              block_start, card, card_addr,
+                              _array->offset_array(card),
+                              obj_start, word_size, first_card, last_card);
+@@ -404,11 +404,11 @@
+ G1BlockOffsetArray::print_on(outputStream* out) {
+   size_t from_index = _array->index_for(_bottom);
+   size_t to_index = _array->index_for(_end);
+-  out->print_cr(">> BOT for area ["PTR_FORMAT","PTR_FORMAT") "
+-                "cards ["SIZE_FORMAT","SIZE_FORMAT")",
++  out->print_cr(">> BOT for area [" PTR_FORMAT "," PTR_FORMAT ") "
++                "cards [" SIZE_FORMAT "," SIZE_FORMAT ")",
+                 _bottom, _end, from_index, to_index);
+   for (size_t i = from_index; i < to_index; ++i) {
+-    out->print_cr("  entry "SIZE_FORMAT_W(8)" | "PTR_FORMAT" : %3u",
++    out->print_cr("  entry " SIZE_FORMAT_W(8) " | " PTR_FORMAT " : %3u",
+                   i, _array->address_for_index(i),
+                   (uint) _array->offset_array(i));
+   }
+@@ -488,7 +488,7 @@
+ void
+ G1BlockOffsetArrayContigSpace::print_on(outputStream* out) {
+   G1BlockOffsetArray::print_on(out);
+-  out->print_cr("  next offset threshold: "PTR_FORMAT, _next_offset_threshold);
+-  out->print_cr("  next offset index:     "SIZE_FORMAT, _next_offset_index);
++  out->print_cr("  next offset threshold: " PTR_FORMAT, _next_offset_threshold);
++  out->print_cr("  next offset index:     " SIZE_FORMAT, _next_offset_index);
+ }
+ #endif // !PRODUCT
+--- hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp.orig	2015-09-02 10:47:15.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp	2015-09-02 10:54:04.000000000 +0200
+@@ -44,7 +44,7 @@
+ void G1CardCounts::clear_range(size_t from_card_num, size_t to_card_num) {
+   if (has_count_table()) {
+     assert(from_card_num < to_card_num,
+-           err_msg("Wrong order? from: " SIZE_FORMAT ", to: "SIZE_FORMAT,
++           err_msg("Wrong order? from: " SIZE_FORMAT ", to: " SIZE_FORMAT,
+                    from_card_num, to_card_num));
+     Copy::fill_to_bytes(&_card_counts[from_card_num], (to_card_num - from_card_num));
+   }
+@@ -87,7 +87,7 @@
+   if (has_count_table()) {
+     size_t card_num = ptr_2_card_num(card_ptr);
+     assert(card_num < _reserved_max_card_num,
+-           err_msg("Card "SIZE_FORMAT" outside of card counts table (max size "SIZE_FORMAT")",
++           err_msg("Card " SIZE_FORMAT " outside of card counts table (max size " SIZE_FORMAT ")",
+                    card_num, _reserved_max_card_num));
+     count = (uint) _card_counts[card_num];
+     if (count < G1ConcRSHotCardLimit) {
+--- hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp.orig	2015-09-02 10:57:01.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	2015-09-02 11:02:01.000000000 +0200
+@@ -199,7 +199,7 @@
+   const size_t region_size = HeapRegion::GrainWords;
+   if (YoungPLABSize > region_size || OldPLABSize > region_size) {
+     char buffer[128];
+-    jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most "SIZE_FORMAT,
++    jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most " SIZE_FORMAT,
+                  OldPLABSize > region_size ? "Old" : "Young", region_size);
+     vm_exit_during_initialization(buffer);
+   }
+@@ -846,7 +846,7 @@
+   update_survivors_policy();
+ 
+   assert(_g1->used() == _g1->recalculate_used(),
+-         err_msg("sanity, used: "SIZE_FORMAT" recalculate_used: "SIZE_FORMAT,
++         err_msg("sanity, used: " SIZE_FORMAT " recalculate_used: " SIZE_FORMAT,
+                  _g1->used(), _g1->recalculate_used()));
+ 
+   double s_w_t_ms = (start_time_sec - _stop_world_start) * 1000.0;
+@@ -1231,10 +1231,10 @@
+     (_young_list_target_length * HeapRegion::GrainBytes) - survivor_used_bytes_after_gc;
+ 
+   gclog_or_tty->print(
+-    "   [Eden: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT") "
+-    "Survivors: "EXT_SIZE_FORMAT"->"EXT_SIZE_FORMAT" "
+-    "Heap: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"
+-    EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")]",
++    "   [Eden: " EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")->" EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ") "
++    "Survivors: " EXT_SIZE_FORMAT "->" EXT_SIZE_FORMAT " "
++    "Heap: " EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")->"
++    EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")]",
+     EXT_SIZE_PARAMS(_eden_used_bytes_before_gc),
+     EXT_SIZE_PARAMS(_eden_capacity_bytes_before_gc),
+     EXT_SIZE_PARAMS(eden_used_bytes_after_gc),
+@@ -1863,7 +1863,7 @@
+   while (csr != NULL) {
+     HeapRegion* next = csr->next_in_collection_set();
+     assert(csr->in_collection_set(), "bad CS");
+-    st->print_cr("  "HR_FORMAT", P: "PTR_FORMAT "N: "PTR_FORMAT", age: %4d",
++    st->print_cr("  " HR_FORMAT ", P: " PTR_FORMAT "N: " PTR_FORMAT ", age: %4d",
+                  HR_FORMAT_PARAMS(csr),
+                  csr->prev_top_at_mark_start(), csr->next_top_at_mark_start(),
+                  csr->age_in_surv_rate_group_cond());
+--- hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp.orig	2015-09-06 14:02:06.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp	2015-09-10 13:33:10.594040691 +0200
+@@ -330,7 +330,7 @@
+ }
+ 
+ void G1GCPhaseTimes::print_stats(int level, const char* str, size_t value) {
+-  LineBuffer(level).append_and_print_cr("[%s: "SIZE_FORMAT"]", str, value);
++  LineBuffer(level).append_and_print_cr("[%s: " SIZE_FORMAT "]", str, value);
+ }
+ 
+ void G1GCPhaseTimes::print_stats(int level, const char* str, double value, uint workers) {
+@@ -450,7 +450,7 @@
+ 
+     if (phase->_thread_work_items != NULL) {
+       LineBuffer buf2(phase->_thread_work_items->_indent_level);
+-      buf2.append_and_print_cr("[%s:  "SIZE_FORMAT"]", phase->_thread_work_items->_title, _phase_times->sum_thread_work_items(phase_id));
++      buf2.append_and_print_cr("[%s:  " SIZE_FORMAT "]", phase->_thread_work_items->_title, _phase_times->sum_thread_work_items(phase_id));
+     }
+   }
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp.orig	2015-09-02 10:57:01.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp	2015-09-02 11:03:16.000000000 +0200
+@@ -84,18 +84,18 @@
+ 
+   if (type_str != NULL) {
+     if (top != NULL) {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT" "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) " PTR_FORMAT " " PTR_FORMAT,
+                              action_str, type_str, bottom, top);
+     } else {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) " PTR_FORMAT,
+                              action_str, type_str, bottom);
+     }
+   } else {
+     if (top != NULL) {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT" "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s " PTR_FORMAT " " PTR_FORMAT,
+                              action_str, bottom, top);
+     } else {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s " PTR_FORMAT,
+                              action_str, bottom);
+     }
+   }
+@@ -104,11 +104,11 @@
+ void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) {
+   const char* action_str = action_name(action);
+ 
+-  gclog_or_tty->print_cr(G1HR_PREFIX" %s ["PTR_FORMAT","PTR_FORMAT"]",
++  gclog_or_tty->print_cr(G1HR_PREFIX" %s [" PTR_FORMAT "," PTR_FORMAT "]",
+                          action_str, bottom, end);
+ }
+ 
+ void G1HRPrinter::print(PhaseType phase, size_t phase_num) {
+   const char* phase_str = phase_name(phase);
+-  gclog_or_tty->print_cr(G1HR_PREFIX" #%s "SIZE_FORMAT, phase_str, phase_num);
++  gclog_or_tty->print_cr(G1HR_PREFIX" #%s " SIZE_FORMAT, phase_str, phase_num);
+ }
+--- hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp.orig	2015-09-06 14:02:06.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	2015-09-10 12:46:24.202030127 +0200
+@@ -230,7 +230,7 @@
+   HeapRegion* last = NULL;
+   while (curr != NULL) {
+     if (!curr->is_young()) {
+-      gclog_or_tty->print_cr("### YOUNG REGION "PTR_FORMAT"-"PTR_FORMAT" "
++      gclog_or_tty->print_cr("### YOUNG REGION " PTR_FORMAT "-" PTR_FORMAT " "
+                              "incorrectly tagged (y: %d, surv: %d)",
+                              curr->bottom(), curr->end(),
+                              curr->is_young(), curr->is_survivor());
+@@ -359,7 +359,7 @@
+     if (curr == NULL)
+       gclog_or_tty->print_cr("  empty");
+     while (curr != NULL) {
+-      gclog_or_tty->print_cr("  "HR_FORMAT", P: "PTR_FORMAT ", N: "PTR_FORMAT", age: %4d",
++      gclog_or_tty->print_cr("  " HR_FORMAT ", P: " PTR_FORMAT ", N: " PTR_FORMAT ", age: %4d",
+                              HR_FORMAT_PARAMS(curr),
+                              curr->prev_top_at_mark_start(),
+                              curr->next_top_at_mark_start(),
+@@ -490,7 +490,7 @@
+   gclog_or_tty->print_cr("Log entries = %d, dirty cards = %d.",
+                          clear.num_processed(), orig_count);
+   guarantee(redirty.num_processed() == clear.num_processed(),
+-            err_msg("Redirtied "SIZE_FORMAT" cards, bug cleared "SIZE_FORMAT,
++            err_msg("Redirtied " SIZE_FORMAT " cards, bug cleared " SIZE_FORMAT,
+                     redirty.num_processed(), clear.num_processed()));
+ 
+   CountNonCleanMemRegionClosure count3(this);
+@@ -528,7 +528,7 @@
+       HeapRegion* res = _hrm.allocate_free_region(is_old);
+       if (G1ConcRegionFreeingVerbose) {
+         gclog_or_tty->print_cr("G1ConcRegionFreeing [region alloc] : "
+-                               "allocated "HR_FORMAT" from secondary_free_list",
++                               "allocated " HR_FORMAT " from secondary_free_list",
+                                HR_FORMAT_PARAMS(res));
+       }
+       return res;
+@@ -1597,8 +1597,8 @@
+   // This assert only makes sense here, before we adjust them
+   // with respect to the min and max heap size.
+   assert(minimum_desired_capacity <= maximum_desired_capacity,
+-         err_msg("minimum_desired_capacity = "SIZE_FORMAT", "
+-                 "maximum_desired_capacity = "SIZE_FORMAT,
++         err_msg("minimum_desired_capacity = " SIZE_FORMAT ", "
++                 "maximum_desired_capacity = " SIZE_FORMAT,
+                  minimum_desired_capacity, maximum_desired_capacity));
+ 
+   // Should not be greater than the heap max size. No need to adjust
+@@ -2256,7 +2256,7 @@
+   virtual bool doHeapRegion(HeapRegion* hr) {
+     unsigned region_gc_time_stamp = hr->get_gc_time_stamp();
+     if (_gc_time_stamp != region_gc_time_stamp) {
+-      gclog_or_tty->print_cr("Region "HR_FORMAT" has GC time stamp = %d, "
++      gclog_or_tty->print_cr("Region " HR_FORMAT " has GC time stamp = %d, "
+                              "expected %d", HR_FORMAT_PARAMS(hr),
+                              region_gc_time_stamp, _gc_time_stamp);
+       _failures = true;
+@@ -2678,7 +2678,7 @@
+     } else if (r->continuesHumongous()) {
+       if (r->humongous_start_region() != _sh_region) {
+         gclog_or_tty->print_cr("Region " HR_FORMAT ", "
+-                               "HS = "PTR_FORMAT", should be "PTR_FORMAT,
++                               "HS = " PTR_FORMAT ", should be " PTR_FORMAT,
+                                HR_FORMAT_PARAMS(r),
+                                r->humongous_start_region(),
+                                _sh_region);
+@@ -2990,10 +2990,10 @@
+     if (!oopDesc::is_null(heap_oop)) {
+       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+       if (_g1h->is_obj_dead_cond(obj, _vo)) {
+-        gclog_or_tty->print_cr("Root location "PTR_FORMAT" "
+-                              "points to dead obj "PTR_FORMAT, p, (void*) obj);
++        gclog_or_tty->print_cr("Root location " PTR_FORMAT " "
++                              "points to dead obj " PTR_FORMAT, p, (void*) obj);
+         if (_vo == VerifyOption_G1UseMarkWord) {
+-          gclog_or_tty->print_cr("  Mark word: "PTR_FORMAT, (void*)(obj->mark()));
++          gclog_or_tty->print_cr("  Mark word: " PTR_FORMAT, (void*)(obj->mark()));
+         }
+         obj->print_on(gclog_or_tty);
+         _failures = true;
+@@ -3040,9 +3040,9 @@
+       // Verify that the strong code root list for this region
+       // contains the nmethod
+       if (!hrrs->strong_code_roots_list_contains(_nm)) {
+-        gclog_or_tty->print_cr("Code root location "PTR_FORMAT" "
+-                              "from nmethod "PTR_FORMAT" not in strong "
+-                              "code roots for region ["PTR_FORMAT","PTR_FORMAT")",
++        gclog_or_tty->print_cr("Code root location " PTR_FORMAT " "
++                              "from nmethod " PTR_FORMAT " not in strong "
++                              "code roots for region [" PTR_FORMAT "," PTR_FORMAT ")",
+                               p, _nm, hr->bottom(), hr->end());
+         _failures = true;
+       }
+@@ -3172,7 +3172,7 @@
+     if (o != NULL) {
+       HeapWord *start = (HeapWord *) o;
+       size_t word_sz = o->size();
+-      gclog_or_tty->print("\nPrinting obj "PTR_FORMAT" of size " SIZE_FORMAT
++      gclog_or_tty->print("\nPrinting obj " PTR_FORMAT " of size " SIZE_FORMAT
+                           " isMarkedPrev %d isMarkedNext %d isAllocSince %d\n",
+                           (void*) o, word_sz,
+                           _g1->isMarkedPrev(o),
+@@ -3183,7 +3183,7 @@
+       int *val;
+       for (cur = start; cur < end; cur++) {
+         val = (int *) cur;
+-        gclog_or_tty->print("\t "PTR_FORMAT":"PTR_FORMAT"\n", val, *val);
++        gclog_or_tty->print("\t " PTR_FORMAT ":" PTR_FORMAT "\n", val, *val);
+       }
+     }
+   }
+@@ -3218,9 +3218,9 @@
+         r->object_iterate(&not_dead_yet_cl);
+         if (_vo != VerifyOption_G1UseNextMarking) {
+           if (r->max_live_bytes() < not_dead_yet_cl.live_bytes()) {
+-            gclog_or_tty->print_cr("["PTR_FORMAT","PTR_FORMAT"] "
+-                                   "max_live_bytes "SIZE_FORMAT" "
+-                                   "< calculated "SIZE_FORMAT,
++            gclog_or_tty->print_cr("[" PTR_FORMAT "," PTR_FORMAT "] "
++                                   "max_live_bytes " SIZE_FORMAT " "
++                                   "< calculated " SIZE_FORMAT,
+                                    r->bottom(), r->end(),
+                                    r->max_live_bytes(),
+                                  not_dead_yet_cl.live_bytes());
+@@ -3532,7 +3532,7 @@
+     size_t occupied = hrrs->occupied();
+     _occupied_sum += occupied;
+ 
+-    gclog_or_tty->print_cr("Printing RSet for region "HR_FORMAT,
++    gclog_or_tty->print_cr("Printing RSet for region " HR_FORMAT,
+                            HR_FORMAT_PARAMS(r));
+     if (occupied == 0) {
+       gclog_or_tty->print_cr("  RSet is empty");
+@@ -3551,7 +3551,7 @@
+   }
+ 
+   ~PrintRSetsClosure() {
+-    gclog_or_tty->print_cr("Occupied Sum: "SIZE_FORMAT, _occupied_sum);
++    gclog_or_tty->print_cr("Occupied Sum: " SIZE_FORMAT, _occupied_sum);
+     gclog_or_tty->print_cr("========================================");
+     gclog_or_tty->cr();
+   }
+@@ -4372,7 +4372,7 @@
+ G1CollectedHeap::handle_evacuation_failure_par(G1ParScanThreadState* _par_scan_state,
+                                                oop old) {
+   assert(obj_in_cs(old),
+-         err_msg("obj: "PTR_FORMAT" should still be in the CSet",
++         err_msg("obj: " PTR_FORMAT " should still be in the CSet",
+                  (HeapWord*) old));
+   markOop m = old->mark();
+   oop forward_ptr = old->forward_to_atomic(old);
+@@ -4406,7 +4406,7 @@
+     // space for this object (old != forward_ptr) or they beat us in
+     // self-forwarding it (old == forward_ptr).
+     assert(old == forward_ptr || !obj_in_cs(forward_ptr),
+-           err_msg("obj: "PTR_FORMAT" forwarded to: "PTR_FORMAT" "
++           err_msg("obj: " PTR_FORMAT " forwarded to: " PTR_FORMAT " "
+                    "should not be in the CSet",
+                    (HeapWord*) old, (HeapWord*) forward_ptr));
+     return forward_ptr;
+@@ -4793,16 +4793,16 @@
+ 
+   ~G1StringSymbolTableUnlinkTask() {
+     guarantee(!_process_strings || !_do_in_parallel || StringTable::parallel_claimed_index() >= _initial_string_table_size,
+-              err_msg("claim value "INT32_FORMAT" after unlink less than initial string table size "INT32_FORMAT,
++              err_msg("claim value " INT32_FORMAT " after unlink less than initial string table size " INT32_FORMAT,
+                       StringTable::parallel_claimed_index(), _initial_string_table_size));
+     guarantee(!_process_symbols || !_do_in_parallel || SymbolTable::parallel_claimed_index() >= _initial_symbol_table_size,
+-              err_msg("claim value "INT32_FORMAT" after unlink less than initial symbol table size "INT32_FORMAT,
++              err_msg("claim value " INT32_FORMAT " after unlink less than initial symbol table size " INT32_FORMAT,
+                       SymbolTable::parallel_claimed_index(), _initial_symbol_table_size));
+ 
+     if (G1TraceStringSymbolTableScrubbing) {
+       gclog_or_tty->print_cr("Cleaned string and symbol table, "
+-                             "strings: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed, "
+-                             "symbols: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed",
++                             "strings: " SIZE_FORMAT " processed, " SIZE_FORMAT " removed, "
++                             "symbols: " SIZE_FORMAT " processed, " SIZE_FORMAT " removed",
+                              strings_processed(), strings_removed(),
+                              symbols_processed(), symbols_removed());
+     }
+@@ -6001,13 +6001,13 @@
+ bool G1CollectedHeap::verify_no_bits_over_tams(const char* bitmap_name, CMBitMapRO* bitmap,
+                                                HeapWord* tams, HeapWord* end) {
+   guarantee(tams <= end,
+-            err_msg("tams: "PTR_FORMAT" end: "PTR_FORMAT, tams, end));
++            err_msg("tams: " PTR_FORMAT " end: " PTR_FORMAT, tams, end));
+   HeapWord* result = bitmap->getNextMarkedWordAddress(tams, end);
+   if (result < end) {
+     gclog_or_tty->cr();
+-    gclog_or_tty->print_cr("## wrong marked address on %s bitmap: "PTR_FORMAT,
++    gclog_or_tty->print_cr("## wrong marked address on %s bitmap: " PTR_FORMAT,
+                            bitmap_name, result);
+-    gclog_or_tty->print_cr("## %s tams: "PTR_FORMAT" end: "PTR_FORMAT,
++    gclog_or_tty->print_cr("## %s tams: " PTR_FORMAT " end: " PTR_FORMAT,
+                            bitmap_name, tams, end);
+     return false;
+   }
+@@ -6033,7 +6033,7 @@
+     res_n = verify_no_bits_over_tams("next", next_bitmap, ntams, end);
+   }
+   if (!res_p || !res_n) {
+-    gclog_or_tty->print_cr("#### Bitmap verification failed for "HR_FORMAT,
++    gclog_or_tty->print_cr("#### Bitmap verification failed for " HR_FORMAT,
+                            HR_FORMAT_PARAMS(hr));
+     gclog_or_tty->print_cr("#### Caller: %s", caller);
+     return false;
+@@ -6345,7 +6345,7 @@
+         !r->rem_set()->is_empty()) {
+ 
+       if (G1TraceEagerReclaimHumongousObjects) {
+-        gclog_or_tty->print_cr("Live humongous region %u size "SIZE_FORMAT" start "PTR_FORMAT" length "UINT32_FORMAT" with remset "SIZE_FORMAT" code roots "SIZE_FORMAT" is marked %d reclaim candidate %d type array %d",
++        gclog_or_tty->print_cr("Live humongous region %u size " SIZE_FORMAT " start " PTR_FORMAT " length " UINT32_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d",
+                                region_idx,
+                                obj->size()*HeapWordSize,
+                                r->bottom(),
+@@ -6367,7 +6367,7 @@
+                       r->bottom()));
+ 
+     if (G1TraceEagerReclaimHumongousObjects) {
+-      gclog_or_tty->print_cr("Dead humongous region %u size "SIZE_FORMAT" start "PTR_FORMAT" length "UINT32_FORMAT" with remset "SIZE_FORMAT" code roots "SIZE_FORMAT" is marked %d reclaim candidate %d type array %d",
++      gclog_or_tty->print_cr("Dead humongous region %u size " SIZE_FORMAT " start " PTR_FORMAT " length " UINT32_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d",
+                              region_idx,
+                              obj->size()*HeapWordSize,
+                              r->bottom(),
+@@ -6523,7 +6523,7 @@
+   NoYoungRegionsClosure() : _success(true) { }
+   bool doHeapRegion(HeapRegion* r) {
+     if (r->is_young()) {
+-      gclog_or_tty->print_cr("Region ["PTR_FORMAT", "PTR_FORMAT") tagged as young",
++      gclog_or_tty->print_cr("Region [" PTR_FORMAT ", " PTR_FORMAT ") tagged as young",
+                              r->bottom(), r->end());
+       _success = false;
+     }
+@@ -6652,7 +6652,7 @@
+   }
+   assert(_allocator->used_unlocked() == recalculate_used(),
+          err_msg("inconsistent _allocator->used_unlocked(), "
+-                 "value: "SIZE_FORMAT" recalculated: "SIZE_FORMAT,
++                 "value: " SIZE_FORMAT " recalculated: " SIZE_FORMAT,
+                  _allocator->used_unlocked(), recalculate_used()));
+ }
+ 
+@@ -6873,8 +6873,8 @@
+       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+       HeapRegion* hr = _g1h->heap_region_containing(obj);
+       assert(!hr->continuesHumongous(),
+-             err_msg("trying to add code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
+-                     " starting at "HR_FORMAT,
++             err_msg("trying to add code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT
++                     " starting at " HR_FORMAT,
+                      _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
+ 
+       // HeapRegion::add_strong_code_root_locked() avoids adding duplicate entries.
+@@ -6900,8 +6900,8 @@
+       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+       HeapRegion* hr = _g1h->heap_region_containing(obj);
+       assert(!hr->continuesHumongous(),
+-             err_msg("trying to remove code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
+-                     " starting at "HR_FORMAT,
++             err_msg("trying to remove code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT
++                     " starting at " HR_FORMAT,
+                      _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
+ 
+       hr->remove_strong_code_root(_nm);
+--- hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp.orig	2015-09-02 11:07:35.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp	2015-09-02 11:08:48.000000000 +0200
+@@ -475,7 +475,7 @@
+ bool G1RemSet::refine_card(jbyte* card_ptr, uint worker_i,
+                            bool check_for_refs_into_cset) {
+   assert(_g1->is_in_exact(_ct_bs->addr_for(card_ptr)),
+-         err_msg("Card at "PTR_FORMAT" index "SIZE_FORMAT" representing heap at "PTR_FORMAT" (%u) must be in committed heap",
++         err_msg("Card at " PTR_FORMAT " index " SIZE_FORMAT " representing heap at " PTR_FORMAT " (%u) must be in committed heap",
+                  p2i(card_ptr),
+                  _ct_bs->index_for(_ct_bs->addr_for(card_ptr)),
+                  _ct_bs->addr_for(card_ptr),
+--- hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp.orig	2015-09-02 11:13:52.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp	2015-09-02 11:15:30.000000000 +0200
+@@ -187,22 +187,22 @@
+   size_t code_root_elems() const { return _code_root_elems; }
+ 
+   void print_rs_mem_info_on(outputStream * out, size_t total) {
+-    out->print_cr("    "SIZE_FORMAT_W(8)"K (%5.1f%%) by "SIZE_FORMAT" %s regions",
++    out->print_cr("    " SIZE_FORMAT_W(8) "K (%5.1f%%) by " SIZE_FORMAT " %s regions",
+         round_to_K(rs_mem_size()), rs_mem_size_percent_of(total), amount(), _name);
+   }
+ 
+   void print_cards_occupied_info_on(outputStream * out, size_t total) {
+-    out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) entries by "SIZE_FORMAT" %s regions",
++    out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) entries by " SIZE_FORMAT " %s regions",
+         cards_occupied(), cards_occupied_percent_of(total), amount(), _name);
+   }
+ 
+   void print_code_root_mem_info_on(outputStream * out, size_t total) {
+-    out->print_cr("    "SIZE_FORMAT_W(8)"K (%5.1f%%) by "SIZE_FORMAT" %s regions",
++    out->print_cr("    " SIZE_FORMAT_W(8) "K (%5.1f%%) by " SIZE_FORMAT " %s regions",
+         round_to_K(code_root_mem_size()), code_root_mem_size_percent_of(total), amount(), _name);
+   }
+ 
+   void print_code_root_elems_info_on(outputStream * out, size_t total) {
+-    out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) elements by "SIZE_FORMAT" %s regions",
++    out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) elements by " SIZE_FORMAT " %s regions",
+         code_root_elems(), code_root_elems_percent_of(total), amount(), _name);
+   }
+ };
+@@ -280,19 +280,19 @@
+     RegionTypeCounter* counters[] = { &_young, &_humonguous, &_free, &_old, NULL };
+ 
+     out->print_cr("\n Current rem set statistics");
+-    out->print_cr("  Total per region rem sets sizes = "SIZE_FORMAT"K."
+-                  " Max = "SIZE_FORMAT"K.",
++    out->print_cr("  Total per region rem sets sizes = " SIZE_FORMAT "K."
++                  " Max = " SIZE_FORMAT "K.",
+                   round_to_K(total_rs_mem_sz()), round_to_K(max_rs_mem_sz()));
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_rs_mem_info_on(out, total_rs_mem_sz());
+     }
+ 
+-    out->print_cr("   Static structures = "SIZE_FORMAT"K,"
+-                  " free_lists = "SIZE_FORMAT"K.",
++    out->print_cr("   Static structures = " SIZE_FORMAT "K,"
++                  " free_lists = " SIZE_FORMAT "K.",
+                   round_to_K(HeapRegionRemSet::static_mem_size()),
+                   round_to_K(HeapRegionRemSet::fl_mem_size()));
+ 
+-    out->print_cr("    "SIZE_FORMAT" occupied cards represented.",
++    out->print_cr("    " SIZE_FORMAT " occupied cards represented.",
+                   total_cards_occupied());
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_cards_occupied_info_on(out, total_cards_occupied());
+@@ -301,29 +301,29 @@
+     // Largest sized rem set region statistics
+     HeapRegionRemSet* rem_set = max_rs_mem_sz_region()->rem_set();
+     out->print_cr("    Region with largest rem set = "HR_FORMAT", "
+-                  "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
++                  "size = " SIZE_FORMAT "K, occupied = " SIZE_FORMAT "K.",
+                   HR_FORMAT_PARAMS(max_rs_mem_sz_region()),
+                   round_to_K(rem_set->mem_size()),
+                   round_to_K(rem_set->occupied()));
+ 
+     // Strong code root statistics
+     HeapRegionRemSet* max_code_root_rem_set = max_code_root_mem_sz_region()->rem_set();
+-    out->print_cr("  Total heap region code root sets sizes = "SIZE_FORMAT"K."
+-                  "  Max = "SIZE_FORMAT"K.",
++    out->print_cr("  Total heap region code root sets sizes = " SIZE_FORMAT "K."
++                  "  Max = " SIZE_FORMAT "K.",
+                   round_to_K(total_code_root_mem_sz()),
+                   round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()));
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_code_root_mem_info_on(out, total_code_root_mem_sz());
+     }
+ 
+-    out->print_cr("    "SIZE_FORMAT" code roots represented.",
++    out->print_cr("    " SIZE_FORMAT " code roots represented.",
+                   total_code_root_elems());
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_code_root_elems_info_on(out, total_code_root_elems());
+     }
+ 
+-    out->print_cr("    Region with largest amount of code roots = "HR_FORMAT", "
+-                  "size = "SIZE_FORMAT "K, num_elems = "SIZE_FORMAT".",
++    out->print_cr("    Region with largest amount of code roots = " HR_FORMAT ", "
++                  "size = " SIZE_FORMAT "K, num_elems = " SIZE_FORMAT ".",
+                   HR_FORMAT_PARAMS(max_code_root_mem_sz_region()),
+                   round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()),
+                   round_to_K(max_code_root_rem_set->strong_code_roots_list_length()));
+@@ -332,16 +332,16 @@
+ 
+ void G1RemSetSummary::print_on(outputStream* out) {
+   out->print_cr("\n Recent concurrent refinement statistics");
+-  out->print_cr("  Processed "SIZE_FORMAT" cards",
++  out->print_cr("  Processed " SIZE_FORMAT " cards",
+                 num_concurrent_refined_cards());
+-  out->print_cr("  Of "SIZE_FORMAT" completed buffers:", num_processed_buf_total());
+-  out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) by concurrent RS threads.",
++  out->print_cr("  Of " SIZE_FORMAT " completed buffers:", num_processed_buf_total());
++  out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) by concurrent RS threads.",
+                 num_processed_buf_total(),
+                 percent_of(num_processed_buf_rs_threads(), num_processed_buf_total()));
+-  out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) by mutator threads.",
++  out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) by mutator threads.",
+                 num_processed_buf_mutator(),
+                 percent_of(num_processed_buf_mutator(), num_processed_buf_total()));
+-  out->print_cr("  Did "SIZE_FORMAT" coarsenings.", num_coarsenings());
++  out->print_cr("  Did " SIZE_FORMAT " coarsenings.", num_coarsenings());
+   out->print_cr("  Concurrent RS threads times (s)");
+   out->print("     ");
+   for (uint i = 0; i < _num_vtimes; i++) {
+--- hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp.orig	2015-09-02 11:13:52.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp	2015-09-02 11:15:44.000000000 +0200
+@@ -151,7 +151,7 @@
+ void G1StringDedupQueue::print_statistics(outputStream* st) {
+   st->print_cr(
+     "   [Queue]\n"
+-    "      [Dropped: "UINTX_FORMAT"]", _queue->_dropped);
++    "      [Dropped: " UINTX_FORMAT "]", _queue->_dropped);
+ }
+ 
+ void G1StringDedupQueue::verify() {
+--- hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp.orig	2015-09-02 11:13:52.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp	2015-09-02 11:18:07.000000000 +0200
+@@ -80,8 +80,8 @@
+   st->stamp(PrintGCTimeStamps);
+   st->print_cr(
+     "[GC concurrent-string-deduplication, "
+-    G1_STRDEDUP_BYTES_FORMAT_NS"->"G1_STRDEDUP_BYTES_FORMAT_NS"("G1_STRDEDUP_BYTES_FORMAT_NS"), avg "
+-    G1_STRDEDUP_PERCENT_FORMAT_NS", "G1_STRDEDUP_TIME_FORMAT"]",
++    G1_STRDEDUP_BYTES_FORMAT_NS "->" G1_STRDEDUP_BYTES_FORMAT_NS "(" G1_STRDEDUP_BYTES_FORMAT_NS "), avg "
++    G1_STRDEDUP_PERCENT_FORMAT_NS ", " G1_STRDEDUP_TIME_FORMAT "]",
+     G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes),
+     G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes - last_stat._deduped_bytes),
+     G1_STRDEDUP_BYTES_PARAM(last_stat._deduped_bytes),
+@@ -135,22 +135,22 @@
+ 
+   if (total) {
+     st->print_cr(
+-      "   [Total Exec: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT", Idle: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT", Blocked: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT"]",
++      "   [Total Exec: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Idle: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]",
+       stat._exec, stat._exec_elapsed, stat._idle, stat._idle_elapsed, stat._block, stat._block_elapsed);
+   } else {
+     st->print_cr(
+-      "   [Last Exec: "G1_STRDEDUP_TIME_FORMAT", Idle: "G1_STRDEDUP_TIME_FORMAT", Blocked: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT"]",
++      "   [Last Exec: " G1_STRDEDUP_TIME_FORMAT ", Idle: " G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]",
+       stat._exec_elapsed, stat._idle_elapsed, stat._block, stat._block_elapsed);
+   }
+   st->print_cr(
+-    "      [Inspected:    "G1_STRDEDUP_OBJECTS_FORMAT"]\n"
+-    "         [Skipped:   "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Hashed:    "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Known:     "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [New:       "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"]\n"
+-    "      [Deduplicated: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Young:     "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Old:       "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]",
++    "      [Inspected:    " G1_STRDEDUP_OBJECTS_FORMAT "]\n"
++    "         [Skipped:   " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Hashed:    " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Known:     " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [New:       " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "]\n"
++    "      [Deduplicated: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Young:     " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Old:       " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]",
+     stat._inspected,
+     stat._skipped, skipped_percent,
+     stat._hashed, hashed_percent,
+--- hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp.orig	2015-09-02 12:36:40.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp	2015-09-02 12:37:19.000000000 +0200
+@@ -300,7 +300,7 @@
+ 
+     // Largest sized rem set region statistics
+     HeapRegionRemSet* rem_set = max_rs_mem_sz_region()->rem_set();
+-    out->print_cr("    Region with largest rem set = "HR_FORMAT", "
++    out->print_cr("    Region with largest rem set = " HR_FORMAT ", "
+                   "size = " SIZE_FORMAT "K, occupied = " SIZE_FORMAT "K.",
+                   HR_FORMAT_PARAMS(max_rs_mem_sz_region()),
+                   round_to_K(rem_set->mem_size()),
+--- hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp.orig	2015-09-02 12:36:40.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp	2015-09-02 12:41:56.000000000 +0200
+@@ -554,12 +554,12 @@
+ void G1StringDedupTable::print_statistics(outputStream* st) {
+   st->print_cr(
+     "   [Table]\n"
+-    "      [Memory Usage: "G1_STRDEDUP_BYTES_FORMAT_NS"]\n"
+-    "      [Size: "SIZE_FORMAT", Min: "SIZE_FORMAT", Max: "SIZE_FORMAT"]\n"
+-    "      [Entries: "UINTX_FORMAT", Load: "G1_STRDEDUP_PERCENT_FORMAT_NS", Cached: " UINTX_FORMAT ", Added: "UINTX_FORMAT", Removed: "UINTX_FORMAT"]\n"
+-    "      [Resize Count: "UINTX_FORMAT", Shrink Threshold: "UINTX_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT_NS"), Grow Threshold: "UINTX_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT_NS")]\n"
+-    "      [Rehash Count: "UINTX_FORMAT", Rehash Threshold: "UINTX_FORMAT", Hash Seed: 0x%x]\n"
+-    "      [Age Threshold: "UINTX_FORMAT"]",
++    "      [Memory Usage: " G1_STRDEDUP_BYTES_FORMAT_NS "]\n"
++    "      [Size: " SIZE_FORMAT ", Min: " SIZE_FORMAT ", Max: " SIZE_FORMAT "]\n"
++    "      [Entries: " UINTX_FORMAT ", Load: " G1_STRDEDUP_PERCENT_FORMAT_NS ", Cached: " UINTX_FORMAT ", Added: " UINTX_FORMAT ", Removed: " UINTX_FORMAT "]\n"
++    "      [Resize Count: " UINTX_FORMAT ", Shrink Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS "), Grow Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS ")]\n"
++    "      [Rehash Count: " UINTX_FORMAT ", Rehash Threshold: " UINTX_FORMAT ", Hash Seed: 0x%x]\n"
++    "      [Age Threshold: " UINTX_FORMAT "]",
+     G1_STRDEDUP_BYTES_PARAM(_table->_size * sizeof(G1StringDedupEntry*) + (_table->_entries + _entry_cache->size()) * sizeof(G1StringDedupEntry)),
+     _table->_size, _min_size, _max_size,
+     _table->_entries, (double)_table->_entries / (double)_table->_size * 100.0, _entry_cache->size(), _entries_added, _entries_removed,
+--- hotspot/src/share/vm/memory/genCollectedHeap.cpp.orig	2015-09-02 12:51:37.000000000 +0200
++++ hotspot/src/share/vm/memory/genCollectedHeap.cpp	2015-09-02 12:52:12.000000000 +0200
+@@ -1315,7 +1315,7 @@
+   // back a time later than 'now'.
+   jlong retVal = now - tolgc_cl.time();
+   if (retVal < 0) {
+-    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, (int64_t) retVal);)
++    NOT_PRODUCT(warning("time warp: " INT64_FORMAT, (int64_t) retVal);)
+     return 0;
+   }
+   return retVal;
+--- hotspot/src/share/vm/memory/generation.cpp.orig	2015-09-02 12:51:38.000000000 +0200
++++ hotspot/src/share/vm/memory/generation.cpp	2015-09-02 12:52:33.000000000 +0200
+@@ -187,7 +187,7 @@
+   bool   res = (available >= max_promotion_in_bytes);
+   if (PrintGC && Verbose) {
+     gclog_or_tty->print_cr(
+-      "Generation: promo attempt is%s safe: available("SIZE_FORMAT") %s max_promo("SIZE_FORMAT")",
++      "Generation: promo attempt is%s safe: available(" SIZE_FORMAT ") %s max_promo(" SIZE_FORMAT ")",
+       res? "":" not", available, res? ">=":"<",
+       max_promotion_in_bytes);
+   }
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp	2015-09-02 13:00:29.000000000 +0200
+@@ -371,7 +371,7 @@
+                                                   bool during_conc_mark,
+                                                   size_t marked_bytes) {
+   assert(0 <= marked_bytes && marked_bytes <= used(),
+-         err_msg("marked: "SIZE_FORMAT" used: "SIZE_FORMAT,
++         err_msg("marked: " SIZE_FORMAT " used: " SIZE_FORMAT,
+                  marked_bytes, used()));
+   _prev_top_at_mark_start = top();
+   _prev_marked_bytes = marked_bytes;
+@@ -559,9 +559,9 @@
+         // Object is in the region. Check that its less than top
+         if (_hr->top() <= (HeapWord*)obj) {
+           // Object is above top
+-          gclog_or_tty->print_cr("Object "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT") is above "
+-                                 "top "PTR_FORMAT,
++          gclog_or_tty->print_cr("Object " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ") is above "
++                                 "top " PTR_FORMAT,
+                                  (void *)obj, _hr->bottom(), _hr->end(), _hr->top());
+           _failures = true;
+           return;
+@@ -595,22 +595,22 @@
+     if (nm != NULL) {
+       // Verify that the nemthod is live
+       if (!nm->is_alive()) {
+-        gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has dead nmethod "
+-                               PTR_FORMAT" in its strong code roots",
++        gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has dead nmethod "
++                               PTR_FORMAT " in its strong code roots",
+                                _hr->bottom(), _hr->end(), nm);
+         _failures = true;
+       } else {
+         VerifyStrongCodeRootOopClosure oop_cl(_hr, nm);
+         nm->oops_do(&oop_cl);
+         if (!oop_cl.has_oops_in_region()) {
+-          gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has nmethod "
+-                                 PTR_FORMAT" in its strong code roots "
++          gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has nmethod "
++                                 PTR_FORMAT " in its strong code roots "
+                                  "with no pointers into region",
+                                  _hr->bottom(), _hr->end(), nm);
+           _failures = true;
+         } else if (oop_cl.failures()) {
+-          gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has other "
+-                                 "failures for nmethod "PTR_FORMAT,
++          gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has other "
++                                 "failures for nmethod " PTR_FORMAT,
+                                  _hr->bottom(), _hr->end(), nm);
+           _failures = true;
+         }
+@@ -644,8 +644,8 @@
+   // on its strong code root list
+   if (is_empty()) {
+     if (strong_code_roots_length > 0) {
+-      gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is empty "
+-                             "but has "SIZE_FORMAT" code root entries",
++      gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] is empty "
++                             "but has " SIZE_FORMAT " code root entries",
+                              bottom(), end(), strong_code_roots_length);
+       *failures = true;
+     }
+@@ -654,8 +654,8 @@
+ 
+   if (continuesHumongous()) {
+     if (strong_code_roots_length > 0) {
+-      gclog_or_tty->print_cr("region "HR_FORMAT" is a continuation of a humongous "
+-                             "region but has "SIZE_FORMAT" code root entries",
++      gclog_or_tty->print_cr("region " HR_FORMAT " is a continuation of a humongous "
++                             "region but has " SIZE_FORMAT " code root entries",
+                              HR_FORMAT_PARAMS(this), strong_code_roots_length);
+       *failures = true;
+     }
+@@ -679,7 +679,7 @@
+   else
+     st->print("   ");
+   st->print(" TS %5d", _gc_time_stamp);
+-  st->print(" PTAMS "PTR_FORMAT" NTAMS "PTR_FORMAT,
++  st->print(" PTAMS " PTR_FORMAT " NTAMS " PTR_FORMAT,
+             prev_top_at_mark_start(), next_top_at_mark_start());
+   G1OffsetTableContigSpace::print_on(st);
+ }
+@@ -744,25 +744,25 @@
+         }
+         if (!_g1h->is_in_closed_subset(obj)) {
+           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
+-          gclog_or_tty->print_cr("Field "PTR_FORMAT
+-                                 " of live obj "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT")",
++          gclog_or_tty->print_cr("Field " PTR_FORMAT
++                                 " of live obj " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                                  p, (void*) _containing_obj,
+                                  from->bottom(), from->end());
+           print_object(gclog_or_tty, _containing_obj);
+-          gclog_or_tty->print_cr("points to obj "PTR_FORMAT" not in the heap",
++          gclog_or_tty->print_cr("points to obj " PTR_FORMAT " not in the heap",
+                                  (void*) obj);
+         } else {
+           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
+           HeapRegion* to   = _g1h->heap_region_containing((HeapWord*)obj);
+-          gclog_or_tty->print_cr("Field "PTR_FORMAT
+-                                 " of live obj "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT")",
++          gclog_or_tty->print_cr("Field " PTR_FORMAT
++                                 " of live obj " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                                  p, (void*) _containing_obj,
+                                  from->bottom(), from->end());
+           print_object(gclog_or_tty, _containing_obj);
+-          gclog_or_tty->print_cr("points to dead obj "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT")",
++          gclog_or_tty->print_cr("points to dead obj " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                                  (void*) obj, to->bottom(), to->end());
+           print_object(gclog_or_tty, obj);
+         }
+@@ -798,14 +798,14 @@
+               gclog_or_tty->print_cr("----------");
+             }
+             gclog_or_tty->print_cr("Missing rem set entry:");
+-            gclog_or_tty->print_cr("Field "PTR_FORMAT" "
+-                                   "of obj "PTR_FORMAT", "
+-                                   "in region "HR_FORMAT,
++            gclog_or_tty->print_cr("Field " PTR_FORMAT " "
++                                   "of obj " PTR_FORMAT ", "
++                                   "in region " HR_FORMAT,
+                                    p, (void*) _containing_obj,
+                                    HR_FORMAT_PARAMS(from));
+             _containing_obj->print_on(gclog_or_tty);
+-            gclog_or_tty->print_cr("points to obj "PTR_FORMAT" "
+-                                   "in region "HR_FORMAT,
++            gclog_or_tty->print_cr("points to obj " PTR_FORMAT " "
++                                   "in region " HR_FORMAT,
+                                    (void*) obj,
+                                    HR_FORMAT_PARAMS(to));
+             obj->print_on(gclog_or_tty);
+@@ -842,8 +842,8 @@
+ 
+     if (is_humongous != g1->isHumongous(obj_size) &&
+         !g1->is_obj_dead(obj, this)) { // Dead objects may have bigger block_size since they span several objects.
+-      gclog_or_tty->print_cr("obj "PTR_FORMAT" is of %shumongous size ("
+-                             SIZE_FORMAT" words) in a %shumongous region",
++      gclog_or_tty->print_cr("obj " PTR_FORMAT " is of %shumongous size ("
++                             SIZE_FORMAT " words) in a %shumongous region",
+                              p, g1->isHumongous(obj_size) ? "" : "non-",
+                              obj_size, is_humongous ? "" : "non-");
+        *failures = true;
+@@ -866,12 +866,12 @@
+                                    (vo == VerifyOption_G1UsePrevMarking &&
+                                    ClassLoaderDataGraph::unload_list_contains(klass));
+         if (!is_metaspace_object) {
+-          gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" "
++          gclog_or_tty->print_cr("klass " PTR_FORMAT " of object " PTR_FORMAT " "
+                                  "not metadata", klass, (void *)obj);
+           *failures = true;
+           return;
+         } else if (!klass->is_klass()) {
+-          gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" "
++          gclog_or_tty->print_cr("klass " PTR_FORMAT " of object " PTR_FORMAT " "
+                                  "not a klass", klass, (void *)obj);
+           *failures = true;
+           return;
+@@ -887,7 +887,7 @@
+           }
+         }
+       } else {
+-        gclog_or_tty->print_cr(PTR_FORMAT" no an oop", (void *)obj);
++        gclog_or_tty->print_cr(PTR_FORMAT " no an oop", (void *)obj);
+         *failures = true;
+         return;
+       }
+@@ -897,8 +897,8 @@
+   }
+ 
+   if (p != top()) {
+-    gclog_or_tty->print_cr("end of last object "PTR_FORMAT" "
+-                           "does not match top "PTR_FORMAT, p, top());
++    gclog_or_tty->print_cr("end of last object " PTR_FORMAT " "
++                           "does not match top " PTR_FORMAT, p, top());
+     *failures = true;
+     return;
+   }
+@@ -913,8 +913,8 @@
+     HeapWord* addr_1 = p;
+     HeapWord* b_start_1 = _offsets.block_start_const(addr_1);
+     if (b_start_1 != p) {
+-      gclog_or_tty->print_cr("BOT look up for top: "PTR_FORMAT" "
+-                             " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++      gclog_or_tty->print_cr("BOT look up for top: " PTR_FORMAT " "
++                             " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                              addr_1, b_start_1, p);
+       *failures = true;
+       return;
+@@ -925,8 +925,8 @@
+     if (addr_2 < the_end) {
+       HeapWord* b_start_2 = _offsets.block_start_const(addr_2);
+       if (b_start_2 != p) {
+-        gclog_or_tty->print_cr("BOT look up for top + 1: "PTR_FORMAT" "
+-                               " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++        gclog_or_tty->print_cr("BOT look up for top + 1: " PTR_FORMAT " "
++                               " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                                addr_2, b_start_2, p);
+         *failures = true;
+         return;
+@@ -939,8 +939,8 @@
+     if (addr_3 < the_end) {
+       HeapWord* b_start_3 = _offsets.block_start_const(addr_3);
+       if (b_start_3 != p) {
+-        gclog_or_tty->print_cr("BOT look up for top + diff: "PTR_FORMAT" "
+-                               " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++        gclog_or_tty->print_cr("BOT look up for top + diff: " PTR_FORMAT " "
++                               " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                                addr_3, b_start_3, p);
+         *failures = true;
+         return;
+@@ -951,8 +951,8 @@
+     HeapWord* addr_4 = the_end - 1;
+     HeapWord* b_start_4 = _offsets.block_start_const(addr_4);
+     if (b_start_4 != p) {
+-      gclog_or_tty->print_cr("BOT look up for end - 1: "PTR_FORMAT" "
+-                             " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++      gclog_or_tty->print_cr("BOT look up for end - 1: " PTR_FORMAT " "
++                             " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                              addr_4, b_start_4, p);
+       *failures = true;
+       return;
+@@ -960,8 +960,8 @@
+   }
+ 
+   if (is_humongous && object_num > 1) {
+-    gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is humongous "
+-                           "but has "SIZE_FORMAT", objects",
++    gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] is humongous "
++                           "but has " SIZE_FORMAT ", objects",
+                            bottom(), end(), object_num);
+     *failures = true;
+     return;
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp	2015-09-02 13:01:10.000000000 +0200
+@@ -414,7 +414,7 @@
+     HeapRegion* hr = _regions.get_by_index(i);
+     guarantee(hr != NULL, err_msg("invariant: i: %u", i));
+     guarantee(!prev_committed || hr->bottom() == prev_end,
+-              err_msg("invariant i: %u "HR_FORMAT" prev_end: "PTR_FORMAT,
++              err_msg("invariant i: %u " HR_FORMAT " prev_end: " PTR_FORMAT,
+                       i, HR_FORMAT_PARAMS(hr), p2i(prev_end)));
+     guarantee(hr->hrm_index() == i,
+               err_msg("invariant: i: %u hrm_index(): %u", i, hr->hrm_index()));
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp	2015-09-02 13:03:44.000000000 +0200
+@@ -91,7 +91,7 @@
+     // concurrency.
+ 
+     if (G1TraceHeapRegionRememberedSet) {
+-      gclog_or_tty->print_cr("    PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").",
++      gclog_or_tty->print_cr("    PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").",
+                              from,
+                              UseCompressedOops
+                              ? (void *)oopDesc::load_decode_heap_oop((narrowOop*)from)
+@@ -377,7 +377,7 @@
+ 
+ void FromCardCache::invalidate(uint start_idx, size_t new_num_regions) {
+   guarantee((size_t)start_idx + new_num_regions <= max_uintx,
+-            err_msg("Trying to invalidate beyond maximum region, from %u size "SIZE_FORMAT,
++            err_msg("Trying to invalidate beyond maximum region, from %u size " SIZE_FORMAT,
+                     start_idx, new_num_regions));
+   for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) {
+     uint end_idx = (start_idx + (uint)new_num_regions);
+@@ -392,7 +392,7 @@
+ void FromCardCache::print(outputStream* out) {
+   for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) {
+     for (uint j = 0; j < _max_regions; j++) {
+-      out->print_cr("_from_card_cache["UINT32_FORMAT"]["UINT32_FORMAT"] = "INT32_FORMAT".",
++      out->print_cr("_from_card_cache[" UINT32_FORMAT "][" UINT32_FORMAT "] = " INT32_FORMAT ".",
+                     i, j, at(i, j));
+     }
+   }
+@@ -432,7 +432,7 @@
+   int from_card = (int)(uintptr_t(from) >> CardTableModRefBS::card_shift);
+ 
+   if (G1TraceHeapRegionRememberedSet) {
+-    gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = "INT32_FORMAT")",
++    gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = " INT32_FORMAT ")",
+                   hr()->bottom(), from_card,
+                   FromCardCache::at((uint)tid, cur_hrm_ind));
+   }
+@@ -637,13 +637,13 @@
+ 
+   assert(_coarse_map.size() == region_bm->size(), "Precondition");
+   if (G1RSScrubVerbose) {
+-    gclog_or_tty->print("   Coarse map: before = "SIZE_FORMAT"...",
++    gclog_or_tty->print("   Coarse map: before = " SIZE_FORMAT "...",
+                         _n_coarse_entries);
+   }
+   _coarse_map.set_intersection(*region_bm);
+   _n_coarse_entries = _coarse_map.count_one_bits();
+   if (G1RSScrubVerbose) {
+-    gclog_or_tty->print_cr("   after = "SIZE_FORMAT".", _n_coarse_entries);
++    gclog_or_tty->print_cr("   after = " SIZE_FORMAT ".", _n_coarse_entries);
+   }
+ 
+   // Now do the fine-grained maps.
+@@ -1027,7 +1027,7 @@
+ 
+   card_index = _cur_region_card_offset + _cur_card_in_prt;
+   guarantee(_cur_card_in_prt < HeapRegion::CardsPerRegion,
+-            err_msg("Card index "SIZE_FORMAT" must be within the region", _cur_card_in_prt));
++            err_msg("Card index " SIZE_FORMAT " must be within the region", _cur_card_in_prt));
+   return true;
+ }
+ 
+@@ -1196,8 +1196,8 @@
+ 
+   size_t min_prt_size = sizeof(void*) + dummy->bm()->size_in_words() * HeapWordSize;
+   assert(dummy->mem_size() > min_prt_size,
+-         err_msg("PerRegionTable memory usage is suspiciously small, only has "SIZE_FORMAT" bytes. "
+-                 "Should be at least "SIZE_FORMAT" bytes.", dummy->mem_size(), min_prt_size));
++         err_msg("PerRegionTable memory usage is suspiciously small, only has " SIZE_FORMAT " bytes. "
++                 "Should be at least " SIZE_FORMAT " bytes.", dummy->mem_size(), min_prt_size));
+   free(dummy);
+   guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size");
+   // try to reset the state
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp	2015-09-02 13:04:36.000000000 +0200
+@@ -32,7 +32,7 @@
+ uint FreeRegionList::_unrealistically_long_length = 0;
+ 
+ void HeapRegionSetBase::fill_in_ext_msg(hrs_ext_msg* msg, const char* message) {
+-  msg->append("[%s] %s ln: %u cy: "SIZE_FORMAT,
++  msg->append("[%s] %s ln: %u cy: " SIZE_FORMAT,
+               name(), message, length(), total_capacity_bytes());
+   fill_in_ext_msg_extra(msg);
+ }
+@@ -84,13 +84,13 @@
+ 
+ void HeapRegionSetBase::print_on(outputStream* out, bool print_contents) {
+   out->cr();
+-  out->print_cr("Set: %s ("PTR_FORMAT")", name(), this);
++  out->print_cr("Set: %s (" PTR_FORMAT ")", name(), this);
+   out->print_cr("  Region Assumptions");
+   out->print_cr("    humongous         : %s", BOOL_TO_STR(regions_humongous()));
+   out->print_cr("    free              : %s", BOOL_TO_STR(regions_free()));
+   out->print_cr("  Attributes");
+   out->print_cr("    length            : %14u", length());
+-  out->print_cr("    total capacity    : "SIZE_FORMAT_W(14)" bytes",
++  out->print_cr("    total capacity    : " SIZE_FORMAT_W(14) " bytes",
+                 total_capacity_bytes());
+ }
+ 
+@@ -106,7 +106,7 @@
+ }
+ 
+ void FreeRegionList::fill_in_ext_msg_extra(hrs_ext_msg* msg) {
+-  msg->append(" hd: "PTR_FORMAT" tl: "PTR_FORMAT, _head, _tail);
++  msg->append(" hd: " PTR_FORMAT " tl: " PTR_FORMAT, _head, _tail);
+ }
+ 
+ void FreeRegionList::remove_all() {
+@@ -277,8 +277,8 @@
+ void FreeRegionList::print_on(outputStream* out, bool print_contents) {
+   HeapRegionSetBase::print_on(out, print_contents);
+   out->print_cr("  Linking");
+-  out->print_cr("    head              : "PTR_FORMAT, _head);
+-  out->print_cr("    tail              : "PTR_FORMAT, _tail);
++  out->print_cr("    head              : " PTR_FORMAT, _head);
++  out->print_cr("    tail              : " PTR_FORMAT, _tail);
+ 
+   if (print_contents) {
+     out->print_cr("  Contents");
+@@ -306,7 +306,7 @@
+ 
+     count++;
+     guarantee(count < _unrealistically_long_length,
+-        hrs_err_msg("[%s] the calculated length: %u seems very long, is there maybe a cycle? curr: "PTR_FORMAT" prev0: "PTR_FORMAT" " "prev1: "PTR_FORMAT" length: %u", name(), count, curr, prev0, prev1, length()));
++        hrs_err_msg("[%s] the calculated length: %u seems very long, is there maybe a cycle? curr: " PTR_FORMAT " prev0: " PTR_FORMAT " " "prev1: " PTR_FORMAT " length: %u", name(), count, curr, prev0, prev1, length()));
+ 
+     if (curr->next() != NULL) {
+       guarantee(curr->next()->prev() == curr, "Next or prev pointers messed up");
+--- hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp.orig	2015-09-02 13:07:15.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp	2015-09-02 13:10:48.000000000 +0200
+@@ -86,7 +86,7 @@
+         while (words_left_to_fill > 0) {
+           size_t words_to_fill = MIN2(words_left_to_fill, CollectedHeap::filler_array_max_size());
+           assert(words_to_fill >= CollectedHeap::min_fill_size(),
+-            err_msg("Remaining size ("SIZE_FORMAT ") is too small to fill (based on " SIZE_FORMAT " and " SIZE_FORMAT ")",
++            err_msg("Remaining size (" SIZE_FORMAT ") is too small to fill (based on " SIZE_FORMAT " and " SIZE_FORMAT ")",
+             words_to_fill, words_left_to_fill, CollectedHeap::filler_array_max_size()));
+           CollectedHeap::fill_with_object((HeapWord*)cur_top, words_to_fill);
+           if (!os::numa_has_static_binding()) {
+--- hotspot/src/share/vm/prims/methodHandles.cpp.orig	2015-09-02 13:07:15.000000000 +0200
++++ hotspot/src/share/vm/prims/methodHandles.cpp	2015-09-02 13:10:16.000000000 +0200
+@@ -1300,27 +1300,27 @@
+ 
+ // These are the native methods on java.lang.invoke.MethodHandleNatives.
+ static JNINativeMethod MHN_methods[] = {
+-  {CC"init",                      CC"("MEM""OBJ")V",                     FN_PTR(MHN_init_Mem)},
+-  {CC"expand",                    CC"("MEM")V",                          FN_PTR(MHN_expand_Mem)},
+-  {CC"resolve",                   CC"("MEM""CLS")"MEM,                   FN_PTR(MHN_resolve_Mem)},
+-  {CC"getConstant",               CC"(I)I",                              FN_PTR(MHN_getConstant)},
++  {CC "init",                      CC "(" MEM "" OBJ ")V",                     FN_PTR(MHN_init_Mem)},
++  {CC "expand",                    CC "(" MEM ")V",                          FN_PTR(MHN_expand_Mem)},
++  {CC "resolve",                   CC "(" MEM "" CLS ")" MEM,                   FN_PTR(MHN_resolve_Mem)},
++  {CC "getConstant",               CC "(I)I",                              FN_PTR(MHN_getConstant)},
+   //  static native int getNamedCon(int which, Object[] name)
+-  {CC"getNamedCon",               CC"(I["OBJ")I",                        FN_PTR(MHN_getNamedCon)},
++  {CC "getNamedCon",               CC "(I[" OBJ ")I",                        FN_PTR(MHN_getNamedCon)},
+   //  static native int getMembers(Class<?> defc, String matchName, String matchSig,
+   //          int matchFlags, Class<?> caller, int skip, MemberName[] results);
+-  {CC"getMembers",                CC"("CLS""STRG""STRG"I"CLS"I["MEM")I", FN_PTR(MHN_getMembers)},
+-  {CC"objectFieldOffset",         CC"("MEM")J",                          FN_PTR(MHN_objectFieldOffset)},
+-  {CC"setCallSiteTargetNormal",   CC"("CS""MH")V",                       FN_PTR(MHN_setCallSiteTargetNormal)},
+-  {CC"setCallSiteTargetVolatile", CC"("CS""MH")V",                       FN_PTR(MHN_setCallSiteTargetVolatile)},
+-  {CC"staticFieldOffset",         CC"("MEM")J",                          FN_PTR(MHN_staticFieldOffset)},
+-  {CC"staticFieldBase",           CC"("MEM")"OBJ,                        FN_PTR(MHN_staticFieldBase)},
+-  {CC"getMemberVMInfo",           CC"("MEM")"OBJ,                        FN_PTR(MHN_getMemberVMInfo)}
++  {CC "getMembers",                CC "(" CLS "" STRG "" STRG "I" CLS "I[" MEM ")I", FN_PTR(MHN_getMembers)},
++  {CC "objectFieldOffset",         CC "(" MEM ")J",                          FN_PTR(MHN_objectFieldOffset)},
++  {CC "setCallSiteTargetNormal",   CC "(" CS "" MH ")V",                       FN_PTR(MHN_setCallSiteTargetNormal)},
++  {CC "setCallSiteTargetVolatile", CC "(" CS "" MH ")V",                       FN_PTR(MHN_setCallSiteTargetVolatile)},
++  {CC "staticFieldOffset",         CC "(" MEM ")J",                          FN_PTR(MHN_staticFieldOffset)},
++  {CC "staticFieldBase",           CC "(" MEM ")" OBJ,                        FN_PTR(MHN_staticFieldBase)},
++  {CC "getMemberVMInfo",           CC "(" MEM ")" OBJ,                        FN_PTR(MHN_getMemberVMInfo)}
+ };
+ 
+ static JNINativeMethod MH_methods[] = {
+   // UnsupportedOperationException throwers
+-  {CC"invoke",                    CC"(["OBJ")"OBJ,                       FN_PTR(MH_invoke_UOE)},
+-  {CC"invokeExact",               CC"(["OBJ")"OBJ,                       FN_PTR(MH_invokeExact_UOE)}
++  {CC"invoke",                    CC "([" OBJ ")" OBJ,                       FN_PTR(MH_invoke_UOE)},
++  {CC"invokeExact",               CC "([" OBJ ")" OBJ,                       FN_PTR(MH_invokeExact_UOE)}
+ };
+ 
+ /**
+--- hotspot/src/share/vm/oops/objArrayKlass.cpp.orig	2015-09-02 13:19:26.000000000 +0200
++++ hotspot/src/share/vm/oops/objArrayKlass.cpp	2015-09-02 13:22:11.000000000 +0200
+@@ -657,7 +657,7 @@
+       if (i > max_objArray_print_length) {
+         st->print("..."); break;
+       }
+-      st->print(" "INTPTR_FORMAT, (intptr_t)(void*)objArrayOop(obj)->obj_at(i));
++      st->print(" " INTPTR_FORMAT, (intptr_t)(void*)objArrayOop(obj)->obj_at(i));
+     }
+     st->print(" }");
+   }
+--- hotspot/src/share/vm/oops/oop.cpp.orig	2015-09-02 13:19:26.000000000 +0200
++++ hotspot/src/share/vm/oops/oop.cpp	2015-09-02 13:22:22.000000000 +0200
+@@ -46,7 +46,7 @@
+ 
+ void oopDesc::print_address_on(outputStream* st) const {
+   if (PrintOopAddress) {
+-    st->print("{"INTPTR_FORMAT"}", this);
++    st->print("{" INTPTR_FORMAT "}", this);
+   }
+ }
+ 
+--- hotspot/src/os/posix/vm/os_posix.cpp.orig	2015-09-02 13:32:01.000000000 +0200
++++ hotspot/src/os/posix/vm/os_posix.cpp	2015-09-02 13:33:42.000000000 +0200
+@@ -594,7 +594,7 @@
+   strncpy(buffer, "none", size);
+ 
+   const struct {
+-    int i;
++    unsigned i;
+     const char* s;
+   } flaginfo [] = {
+     { SA_NOCLDSTOP, "SA_NOCLDSTOP" },
+--- hotspot/src/share/vm/code/nmethod.cpp.orig	2015-09-02 13:19:26.000000000 +0200
++++ hotspot/src/share/vm/code/nmethod.cpp	2015-09-02 13:27:23.000000000 +0200
+@@ -2303,7 +2303,7 @@
+   void maybe_print(oop* p) {
+     if (_print_nm == NULL)  return;
+     if (!_detected_scavenge_root)  _print_nm->print_on(tty, "new scavenge root");
+-    tty->print_cr(""PTR_FORMAT"[offset=%d] detected scavengable oop "PTR_FORMAT" (found at "PTR_FORMAT")",
++    tty->print_cr("" PTR_FORMAT "[offset=%d] detected scavengable oop " PTR_FORMAT " (found at " PTR_FORMAT ")",
+                   _print_nm, (int)((intptr_t)p - (intptr_t)_print_nm),
+                   (void *)(*p), (intptr_t)p);
+     (*p)->print();
+@@ -2684,7 +2684,7 @@
+       _nm->print_nmethod(true);
+       _ok = false;
+     }
+-    tty->print_cr("*** non-oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)",
++    tty->print_cr("*** non-oop " PTR_FORMAT " found at " PTR_FORMAT " (offset %d)",
+                   (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
+   }
+   virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); }
+@@ -2808,7 +2808,7 @@
+       _nm->print_nmethod(true);
+       _ok = false;
+     }
+-    tty->print_cr("*** scavengable oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)",
++    tty->print_cr("*** scavengable oop " PTR_FORMAT " found at " PTR_FORMAT " (offset %d)",
+                   (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
+     (*p)->print();
+   }
+@@ -2853,7 +2853,7 @@
+   print_on(tty, NULL);
+ 
+   if (WizardMode) {
+-    tty->print("((nmethod*) "INTPTR_FORMAT ") ", this);
++    tty->print("((nmethod*) " INTPTR_FORMAT ") ", this);
+     tty->print(" for method " INTPTR_FORMAT , (address)method());
+     tty->print(" { ");
+     if (is_in_use())      tty->print("in_use ");
+--- hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp.orig	2015-09-02 13:28:16.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp	2015-09-02 13:31:09.000000000 +0200
+@@ -98,10 +98,10 @@
+   if (_allocated == 0) {
+     assert(_unused == 0,
+            err_msg("Inconsistency in PLAB stats: "
+-                   "_allocated: "SIZE_FORMAT", "
+-                   "_wasted: "SIZE_FORMAT", "
+-                   "_unused: "SIZE_FORMAT", "
+-                   "_used  : "SIZE_FORMAT,
++                   "_allocated: " SIZE_FORMAT ", "
++                   "_wasted: " SIZE_FORMAT ", "
++                   "_unused: " SIZE_FORMAT ", "
++                   "_used  : " SIZE_FORMAT,
+                    _allocated, _wasted, _unused, _used));
+ 
+     _allocated = 1;
+--- hotspot/src/share/vm/utilities/ostream.cpp.orig	2015-09-02 13:28:16.000000000 +0200
++++ hotspot/src/share/vm/utilities/ostream.cpp	2015-09-02 13:34:57.000000000 +0200
+@@ -277,7 +277,7 @@
+   size_t limit = (len + 16) / 16 * 16;
+   for (size_t i = 0; i < limit; ++i) {
+     if (i % 16 == 0) {
+-      indent().print(SIZE_FORMAT_HEX_W(07)":", i);
++      indent().print(SIZE_FORMAT_HEX_W(07) ":", i);
+     }
+     if (i % 2 == 0) {
+       print(" ");
+@@ -945,7 +945,7 @@
+     // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if
+     // we ever get round to introduce that method on the os class
+     xs->head("hotspot_log version='%d %d'"
+-             " process='%d' time_ms='"INT64_FORMAT"'",
++             " process='%d' time_ms='" INT64_FORMAT "'",
+              LOG_MAJOR_VERSION, LOG_MINOR_VERSION,
+              os::current_process_id(), (int64_t)time_ms);
+     // Write VM version header immediately.
+--- hotspot/src/share/vm/prims/perf.cpp.orig	2015-09-02 13:36:01.000000000 +0200
++++ hotspot/src/share/vm/prims/perf.cpp	2015-09-02 13:37:33.000000000 +0200
+@@ -290,17 +290,17 @@
+ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f)
+ #define BB "Ljava/nio/ByteBuffer;"
+ #define JLS "Ljava/lang/String;"
+-#define CL_ARGS     CC"("JLS"IIJ)"BB
+-#define CBA_ARGS    CC"("JLS"II[BI)"BB
++#define CL_ARGS     CC "(" JLS "IIJ)" BB
++#define CBA_ARGS    CC "(" JLS "II[BI)" BB
+ 
+ static JNINativeMethod perfmethods[] = {
+ 
+-  {CC"attach",              CC"("JLS"II)"BB,  FN_PTR(Perf_Attach)},
+-  {CC"detach",              CC"("BB")V",      FN_PTR(Perf_Detach)},
+-  {CC"createLong",          CL_ARGS,          FN_PTR(Perf_CreateLong)},
+-  {CC"createByteArray",     CBA_ARGS,         FN_PTR(Perf_CreateByteArray)},
+-  {CC"highResCounter",      CC"()J",          FN_PTR(Perf_HighResCounter)},
+-  {CC"highResFrequency",    CC"()J",          FN_PTR(Perf_HighResFrequency)}
++  {CC"attach",              CC "(" JLS "II)" BB, FN_PTR(Perf_Attach)},
++  {CC"detach",              CC "(" BB ")V",      FN_PTR(Perf_Detach)},
++  {CC"createLong",          CL_ARGS,             FN_PTR(Perf_CreateLong)},
++  {CC"createByteArray",     CBA_ARGS,            FN_PTR(Perf_CreateByteArray)},
++  {CC"highResCounter",      CC "()J",            FN_PTR(Perf_HighResCounter)},
++  {CC"highResFrequency",    CC "()J",            FN_PTR(Perf_HighResFrequency)}
+ };
+ 
+ #undef CBA_ARGS
+--- hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp.orig	2015-09-02 13:39:42.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp	2015-09-02 13:40:05.000000000 +0200
+@@ -669,7 +669,7 @@
+   jlong ret_val = now - _time_of_last_gc;
+   // XXX See note in genCollectedHeap::millis_since_last_gc().
+   if (ret_val < 0) {
+-    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, ret_val);)
++    NOT_PRODUCT(warning("time warp: " INT64_FORMAT, ret_val);)
+     return 0;
+   }
+   return ret_val;
+--- hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp.orig	2015-09-02 13:39:42.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	2015-09-02 13:40:50.000000000 +0200
+@@ -3292,7 +3292,7 @@
+   jlong ret_val = now - _time_of_last_gc;
+   // XXX See note in genCollectedHeap::millis_since_last_gc().
+   if (ret_val < 0) {
+-    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, ret_val);)
++    NOT_PRODUCT(warning("time warp: " INT64_FORMAT, ret_val);)
+     return 0;
+   }
+   return ret_val;
+--- hotspot/src/share/vm/memory/referenceProcessor.cpp.orig	2015-09-02 13:42:24.000000000 +0200
++++ hotspot/src/share/vm/memory/referenceProcessor.cpp	2015-09-02 13:42:55.000000000 +0200
+@@ -161,7 +161,7 @@
+ 
+   NOT_PRODUCT(
+   if (now < _soft_ref_timestamp_clock) {
+-    warning("time warp: "INT64_FORMAT" to "INT64_FORMAT,
++    warning("time warp: " INT64_FORMAT " to " INT64_FORMAT,
+             _soft_ref_timestamp_clock, now);
+   }
+   )
+--- hotspot/src/share/vm/runtime/safepoint.cpp.orig	2015-09-02 14:51:21.000000000 +0200
++++ hotspot/src/share/vm/runtime/safepoint.cpp	2015-09-02 14:52:56.000000000 +0200
+@@ -983,7 +983,7 @@
+ 
+     case _running:
+     default:
+-       tty->print_cr("restart thread "INTPTR_FORMAT" with state %d",
++       tty->print_cr("restart thread " INTPTR_FORMAT " with state %d",
+                       _thread, _type);
+        _thread->print();
+       ShouldNotReachHere();
+@@ -1340,14 +1340,14 @@
+ 
+   for (int index = 0; index < VM_Operation::VMOp_Terminating; index++) {
+     if (_safepoint_reasons[index] != 0) {
+-      tty->print_cr("%-26s"UINT64_FORMAT_W(10), VM_Operation::name(index),
++      tty->print_cr("%-26s" UINT64_FORMAT_W(10), VM_Operation::name(index),
+                     _safepoint_reasons[index]);
+     }
+   }
+ 
+   tty->print_cr(UINT64_FORMAT_W(5)" VM operations coalesced during safepoint",
+                 _coalesced_vmop_count);
+-  tty->print_cr("Maximum sync time  "INT64_FORMAT_W(5)" ms",
++  tty->print_cr("Maximum sync time  " INT64_FORMAT_W(5) " ms",
+                 _max_sync_time / MICROUNITS);
+   tty->print_cr("Maximum vm operation time (except for Exit VM operation)  "
+                 INT64_FORMAT_W(5)" ms",
+--- hotspot/src/share/vm/memory/tenuredGeneration.cpp.orig	2015-09-02 18:11:24.000000000 +0200
++++ hotspot/src/share/vm/memory/tenuredGeneration.cpp	2015-09-02 18:11:32.000000000 +0200
+@@ -292,8 +292,8 @@
+   bool   res = (available >= av_promo) || (available >= max_promotion_in_bytes);
+   if (PrintGC && Verbose) {
+     gclog_or_tty->print_cr(
+-      "Tenured: promo attempt is%s safe: available("SIZE_FORMAT") %s av_promo("SIZE_FORMAT"),"
+-      "max_promo("SIZE_FORMAT")",
++      "Tenured: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT "),"
++      "max_promo(" SIZE_FORMAT ")",
+       res? "":" not", available, res? ">=":"<",
+       av_promo, max_promotion_in_bytes);
+   }
+--- hotspot/src/share/vm/services/threadService.cpp.orig	2015-09-02 18:11:24.000000000 +0200
++++ hotspot/src/share/vm/services/threadService.cpp	2015-09-02 18:11:32.000000000 +0200
+@@ -889,7 +889,7 @@
+       st->print("  waiting to lock monitor " INTPTR_FORMAT, waitingToLockMonitor);
+       oop obj = (oop)waitingToLockMonitor->object();
+       if (obj != NULL) {
+-        st->print(" (object "INTPTR_FORMAT ", a %s)", (address)obj,
++        st->print(" (object " INTPTR_FORMAT ", a %s)", (address)obj,
+                    (InstanceKlass::cast(obj->klass()))->external_name());
+ 
+         if (!currentThread->current_pending_monitor_is_from_java()) {
+--- hotspot/src/share/vm/memory/universe.cpp.orig	2015-09-02 18:25:28.000000000 +0200
++++ hotspot/src/share/vm/memory/universe.cpp	2015-09-02 18:26:04.000000000 +0200
+@@ -919,7 +919,7 @@
+ // Reserve the Java heap, which is now the same for all GCs.
+ ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) {
+   assert(alignment <= Arguments::conservative_max_heap_alignment(),
+-      err_msg("actual alignment "SIZE_FORMAT" must be within maximum heap alignment "SIZE_FORMAT,
++      err_msg("actual alignment " SIZE_FORMAT " must be within maximum heap alignment " SIZE_FORMAT,
+           alignment, Arguments::conservative_max_heap_alignment()));
+   size_t total_reserved = align_size_up(heap_size, alignment);
+   assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())),
+--- hotspot/src/share/vm/prims/unsafe.cpp.orig	2015-09-02 18:25:32.000000000 +0200
++++ hotspot/src/share/vm/prims/unsafe.cpp	2015-09-02 18:47:09.000000000 +0200
+@@ -977,7 +977,7 @@
+ UNSAFE_END
+ 
+ 
+-#define DAC_Args CLS"[B["OBJ
++#define DAC_Args CLS "[B[" OBJ
+ // define a class but do not make it known to the class loader or system dictionary
+ // - host_class:  supplies context for linkage, access control, protection domain, and class loader
+ // - data:  bytes of a class file, a raw memory address (length gives the number of bytes)
+@@ -1337,47 +1337,47 @@
+ 
+ #define LANG "Ljava/lang/"
+ 
+-#define OBJ LANG"Object;"
+-#define CLS LANG"Class;"
+-#define CTR LANG"reflect/Constructor;"
+-#define FLD LANG"reflect/Field;"
+-#define MTH LANG"reflect/Method;"
+-#define THR LANG"Throwable;"
++#define OBJ LANG "Object;"
++#define CLS LANG "Class;"
++#define CTR LANG "reflect/Constructor;"
++#define FLD LANG "reflect/Field;"
++#define MTH LANG "reflect/Method;"
++#define THR LANG "Throwable;"
+ 
+-#define DC0_Args LANG"String;[BII"
+-#define DC_Args  DC0_Args LANG"ClassLoader;" "Ljava/security/ProtectionDomain;"
++#define DC0_Args LANG "String;[BII"
++#define DC_Args  DC0_Args LANG "ClassLoader;" "Ljava/security/ProtectionDomain;"
+ 
+ #define CC (char*)  /*cast a literal from (const char*)*/
+ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f)
+ 
+ // define deprecated accessors for compabitility with 1.4.0
+ #define DECLARE_GETSETOOP_140(Boolean, Z) \
+-    {CC"get"#Boolean,      CC"("OBJ"I)"#Z,      FN_PTR(Unsafe_Get##Boolean##140)}, \
+-    {CC"put"#Boolean,      CC"("OBJ"I"#Z")V",   FN_PTR(Unsafe_Set##Boolean##140)}
++    {CC"get"#Boolean,      CC"(" OBJ "I)" #Z,      FN_PTR(Unsafe_Get##Boolean##140)}, \
++    {CC"put"#Boolean,      CC"(" OBJ "I" #Z ")V",   FN_PTR(Unsafe_Set##Boolean##140)}
+ 
+ // Note:  In 1.4.1, getObject and kin take both int and long offsets.
+ #define DECLARE_GETSETOOP_141(Boolean, Z) \
+-    {CC"get"#Boolean,      CC"("OBJ"J)"#Z,      FN_PTR(Unsafe_Get##Boolean)}, \
+-    {CC"put"#Boolean,      CC"("OBJ"J"#Z")V",   FN_PTR(Unsafe_Set##Boolean)}
++    {CC"get"#Boolean,      CC"(" OBJ "J)" #Z,      FN_PTR(Unsafe_Get##Boolean)}, \
++    {CC"put"#Boolean,      CC"(" OBJ "J" #Z ")V",   FN_PTR(Unsafe_Set##Boolean)}
+ 
+ // Note:  In 1.5.0, there are volatile versions too
+ #define DECLARE_GETSETOOP(Boolean, Z) \
+-    {CC"get"#Boolean,      CC"("OBJ"J)"#Z,      FN_PTR(Unsafe_Get##Boolean)}, \
+-    {CC"put"#Boolean,      CC"("OBJ"J"#Z")V",   FN_PTR(Unsafe_Set##Boolean)}, \
+-    {CC"get"#Boolean"Volatile",      CC"("OBJ"J)"#Z,      FN_PTR(Unsafe_Get##Boolean##Volatile)}, \
+-    {CC"put"#Boolean"Volatile",      CC"("OBJ"J"#Z")V",   FN_PTR(Unsafe_Set##Boolean##Volatile)}
++    {CC"get"#Boolean,      CC"(" OBJ "J)" #Z,      FN_PTR(Unsafe_Get##Boolean)}, \
++    {CC"put"#Boolean,      CC"(" OBJ "J" #Z ")V",   FN_PTR(Unsafe_Set##Boolean)}, \
++    {CC"get"#Boolean "Volatile",      CC"(" OBJ "J)" #Z,      FN_PTR(Unsafe_Get##Boolean##Volatile)}, \
++    {CC"put"#Boolean "Volatile",      CC"(" OBJ "J" #Z ")V",   FN_PTR(Unsafe_Set##Boolean##Volatile)}
+ 
+ 
+ #define DECLARE_GETSETNATIVE(Byte, B) \
+-    {CC"get"#Byte,         CC"("ADR")"#B,       FN_PTR(Unsafe_GetNative##Byte)}, \
+-    {CC"put"#Byte,         CC"("ADR#B")V",      FN_PTR(Unsafe_SetNative##Byte)}
++    {CC"get"#Byte,         CC"(" ADR ")" #B,       FN_PTR(Unsafe_GetNative##Byte)}, \
++    {CC"put"#Byte,         CC"(" ADR #B ")V",      FN_PTR(Unsafe_SetNative##Byte)}
+ 
+ 
+ 
+ // These are the methods for 1.4.0
+ static JNINativeMethod methods_140[] = {
+-    {CC"getObject",        CC"("OBJ"I)"OBJ"",   FN_PTR(Unsafe_GetObject140)},
+-    {CC"putObject",        CC"("OBJ"I"OBJ")V",  FN_PTR(Unsafe_SetObject140)},
++    {CC"getObject",        CC"(" OBJ "I)" OBJ "",   FN_PTR(Unsafe_GetObject140)},
++    {CC"putObject",        CC"(" OBJ "I" OBJ ")V",  FN_PTR(Unsafe_SetObject140)},
+ 
+     DECLARE_GETSETOOP_140(Boolean, Z),
+     DECLARE_GETSETOOP_140(Byte, B),
+@@ -1396,33 +1396,33 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"fieldOffset",        CC"("FLD")I",               FN_PTR(Unsafe_FieldOffset)},
+-    {CC"staticFieldBase",    CC"("CLS")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromClass)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"fieldOffset",        CC"(" FLD ")I",               FN_PTR(Unsafe_FieldOffset)},
++    {CC"staticFieldBase",    CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromClass)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)}
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)}
+ };
+ 
+ // These are the methods prior to the JSR 166 changes in 1.5.0
+ static JNINativeMethod methods_141[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
+ 
+     DECLARE_GETSETOOP_141(Boolean, Z),
+     DECLARE_GETSETOOP_141(Byte, B),
+@@ -1441,37 +1441,37 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)}
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)}
+ 
+ };
+ 
+ // These are the methods prior to the JSR 166 changes in 1.6.0
+ static JNINativeMethod methods_15[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
+-    {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObjectVolatile)},
+-    {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObjectVolatile",CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObjectVolatile)},
++    {CC"putObjectVolatile",CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
+ 
+ 
+     DECLARE_GETSETOOP(Boolean, Z),
+@@ -1491,42 +1491,42 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)},
+-    {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
+-    {CC"compareAndSwapInt",  CC"("OBJ"J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
+-    {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)},
++    {CC"compareAndSwapObject", CC"(" OBJ "J" OBJ "" OBJ ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
++    {CC"compareAndSwapInt",  CC"(" OBJ "J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
++    {CC"compareAndSwapLong", CC"(" OBJ "J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
+     {CC"park",               CC"(ZJ)V",                  FN_PTR(Unsafe_Park)},
+-    {CC"unpark",             CC"("OBJ")V",               FN_PTR(Unsafe_Unpark)}
++    {CC"unpark",             CC"(" OBJ ")V",               FN_PTR(Unsafe_Unpark)}
+ 
+ };
+ 
+ // These are the methods for 1.6.0 and 1.7.0
+ static JNINativeMethod methods_16[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
+-    {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObjectVolatile)},
+-    {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObjectVolatile",CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObjectVolatile)},
++    {CC"putObjectVolatile",CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
+ 
+     DECLARE_GETSETOOP(Boolean, Z),
+     DECLARE_GETSETOOP(Byte, B),
+@@ -1545,45 +1545,45 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"tryMonitorEnter",    CC"("OBJ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)},
+-    {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
+-    {CC"compareAndSwapInt",  CC"("OBJ"J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
+-    {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
+-    {CC"putOrderedObject",   CC"("OBJ"J"OBJ")V",         FN_PTR(Unsafe_SetOrderedObject)},
+-    {CC"putOrderedInt",      CC"("OBJ"JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
+-    {CC"putOrderedLong",     CC"("OBJ"JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"tryMonitorEnter",    CC"(" OBJ ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)},
++    {CC"compareAndSwapObject", CC"(" OBJ "J" OBJ "" OBJ ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
++    {CC"compareAndSwapInt",  CC"(" OBJ "J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
++    {CC"compareAndSwapLong", CC"(" OBJ "J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
++    {CC"putOrderedObject",   CC"(" OBJ "J" OBJ ")V",         FN_PTR(Unsafe_SetOrderedObject)},
++    {CC"putOrderedInt",      CC"(" OBJ "JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
++    {CC"putOrderedLong",     CC"(" OBJ "JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
+     {CC"park",               CC"(ZJ)V",                  FN_PTR(Unsafe_Park)},
+-    {CC"unpark",             CC"("OBJ")V",               FN_PTR(Unsafe_Unpark)}
++    {CC"unpark",             CC"(" OBJ ")V",               FN_PTR(Unsafe_Unpark)}
+ };
+ 
+ // These are the methods for 1.8.0
+ static JNINativeMethod methods_18[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
+-    {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObjectVolatile)},
+-    {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObjectVolatile",CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObjectVolatile)},
++    {CC"putObjectVolatile",CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
+ 
+     DECLARE_GETSETOOP(Boolean, Z),
+     DECLARE_GETSETOOP(Byte, B),
+@@ -1602,36 +1602,36 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"tryMonitorEnter",    CC"("OBJ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)},
+-    {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
+-    {CC"compareAndSwapInt",  CC"("OBJ"J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
+-    {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
+-    {CC"putOrderedObject",   CC"("OBJ"J"OBJ")V",         FN_PTR(Unsafe_SetOrderedObject)},
+-    {CC"putOrderedInt",      CC"("OBJ"JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
+-    {CC"putOrderedLong",     CC"("OBJ"JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"tryMonitorEnter",    CC"(" OBJ ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)},
++    {CC"compareAndSwapObject", CC"(" OBJ "J" OBJ "" OBJ ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
++    {CC"compareAndSwapInt",  CC"(" OBJ "J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
++    {CC"compareAndSwapLong", CC"(" OBJ "J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
++    {CC"putOrderedObject",   CC"(" OBJ "J" OBJ ")V",         FN_PTR(Unsafe_SetOrderedObject)},
++    {CC"putOrderedInt",      CC"(" OBJ "JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
++    {CC"putOrderedLong",     CC"(" OBJ "JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
+     {CC"park",               CC"(ZJ)V",                  FN_PTR(Unsafe_Park)},
+-    {CC"unpark",             CC"("OBJ")V",               FN_PTR(Unsafe_Unpark)}
++    {CC"unpark",             CC"(" OBJ ")V",               FN_PTR(Unsafe_Unpark)}
+ };
+ 
+ JNINativeMethod loadavg_method[] = {
+@@ -1639,28 +1639,28 @@
+ };
+ 
+ JNINativeMethod prefetch_methods[] = {
+-    {CC"prefetchRead",       CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchRead)},
+-    {CC"prefetchWrite",      CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchWrite)},
+-    {CC"prefetchReadStatic", CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchRead)},
+-    {CC"prefetchWriteStatic",CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchWrite)}
++    {CC"prefetchRead",       CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchRead)},
++    {CC"prefetchWrite",      CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchWrite)},
++    {CC"prefetchReadStatic", CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchRead)},
++    {CC"prefetchWriteStatic",CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchWrite)}
+ };
+ 
+ JNINativeMethod memcopy_methods_17[] = {
+-    {CC"copyMemory",         CC"("OBJ"J"OBJ"JJ)V",       FN_PTR(Unsafe_CopyMemory2)},
+-    {CC"setMemory",          CC"("OBJ"JJB)V",            FN_PTR(Unsafe_SetMemory2)}
++    {CC"copyMemory",         CC"(" OBJ "J" OBJ "JJ)V",       FN_PTR(Unsafe_CopyMemory2)},
++    {CC"setMemory",          CC"(" OBJ "JJB)V",            FN_PTR(Unsafe_SetMemory2)}
+ };
+ 
+ JNINativeMethod memcopy_methods_15[] = {
+-    {CC"setMemory",          CC"("ADR"JB)V",             FN_PTR(Unsafe_SetMemory)},
+-    {CC"copyMemory",         CC"("ADR ADR"J)V",          FN_PTR(Unsafe_CopyMemory)}
++    {CC"setMemory",          CC"(" ADR "JB)V",             FN_PTR(Unsafe_SetMemory)},
++    {CC"copyMemory",         CC"(" ADR ADR "J)V",          FN_PTR(Unsafe_CopyMemory)}
+ };
+ 
+ JNINativeMethod anonk_methods[] = {
+-    {CC"defineAnonymousClass", CC"("DAC_Args")"CLS,      FN_PTR(Unsafe_DefineAnonymousClass)},
++    {CC"defineAnonymousClass", CC"(" DAC_Args ")" CLS,      FN_PTR(Unsafe_DefineAnonymousClass)},
+ };
+ 
+ JNINativeMethod lform_methods[] = {
+-    {CC"shouldBeInitialized",CC"("CLS")Z",               FN_PTR(Unsafe_ShouldBeInitialized)},
++    {CC"shouldBeInitialized",CC"(" CLS ")Z",               FN_PTR(Unsafe_ShouldBeInitialized)},
+ };
+ 
+ JNINativeMethod fence_methods[] = {
+--- hotspot/src/share/vm/prims/whitebox.cpp.orig	2015-09-02 18:55:43.000000000 +0200
++++ hotspot/src/share/vm/prims/whitebox.cpp	2015-09-02 18:58:04.000000000 +0200
+@@ -157,8 +157,8 @@
+ 
+ WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
+   CollectorPolicy * p = Universe::heap()->collector_policy();
+-  gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
+-    SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
++  gclog_or_tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap "
++    SIZE_FORMAT " Maximum heap " SIZE_FORMAT " Min alignment " SIZE_FORMAT " Max alignment " SIZE_FORMAT,
+     p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
+     p->space_alignment(), p->heap_alignment());
+ }
+@@ -193,8 +193,8 @@
+          Universe::narrow_oop_use_implicit_null_checks() )) {
+     tty->print_cr("WB_ReadFromNoaccessArea method is useless:\n "
+                   "\tUseCompressedOops is %d\n"
+-                  "\trhs.base() is "PTR_FORMAT"\n"
+-                  "\tUniverse::narrow_oop_base() is "PTR_FORMAT"\n"
++                  "\trhs.base() is " PTR_FORMAT "\n"
++                  "\tUniverse::narrow_oop_base() is " PTR_FORMAT "\n"
+                   "\tUniverse::narrow_oop_use_implicit_null_checks() is %d",
+                   UseCompressedOops,
+                   rhs.base(),
+@@ -247,8 +247,8 @@
+ 
+ WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o,
+         jlong reserved_space_size, jlong magnitude, jlong iterations))
+-  tty->print_cr("reservedSpaceSize="JLONG_FORMAT", magnitude="JLONG_FORMAT", "
+-                "iterations="JLONG_FORMAT"\n", reserved_space_size, magnitude,
++  tty->print_cr("reservedSpaceSize=" JLONG_FORMAT ", magnitude=" JLONG_FORMAT ", "
++                "iterations=" JLONG_FORMAT "\n", reserved_space_size, magnitude,
+                 iterations);
+   if (reserved_space_size < 0 || magnitude < 0 || iterations < 0) {
+     tty->print_cr("One of variables printed above is negative. Can't proceed.\n");
+--- hotspot/src/share/vm/oops/markOop.cpp.orig	2015-09-10 13:28:34.918039653 +0200
++++ hotspot/src/share/vm/oops/markOop.cpp	2015-09-10 13:29:26.890039849 +0200
+@@ -49,7 +49,7 @@
+         st->print("monitor=NULL");
+       else {
+         BasicLock * bl = (BasicLock *) mon->owner();
+-        st->print("monitor={count="INTPTR_FORMAT",waiters="INTPTR_FORMAT",recursions="INTPTR_FORMAT",owner="INTPTR_FORMAT"}",
++        st->print("monitor={count=" INTPTR_FORMAT ",waiters=" INTPTR_FORMAT ",recursions=" INTPTR_FORMAT ",owner=" INTPTR_FORMAT "}",
+                 mon->count(), mon->waiters(), mon->recursions(), p2i(bl));
+       }
+     } else {
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
new file mode 100644
index 0000000..8086142
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
@@ -0,0 +1,17 @@
+--- jdk/make/GenerateSources.gmk.orig	2015-08-24 11:23:34.720648954 +0200
++++ jdk/make/GenerateSources.gmk	2015-08-24 11:24:41.376649205 +0200
+@@ -73,9 +73,11 @@
+     GENSRC += $(GENSRC_OSX_ICONS)
+   endif
+ 
+-  ifneq ($(OPENJDK_TARGET_OS), macosx)
+-    include gensrc/GensrcX11Wrappers.gmk
+-    GENSRC += $(GENSRC_X11WRAPPERS)
++  ifndef BUILD_HEADLESS_ONLY
++    ifneq ($(OPENJDK_TARGET_OS), macosx)
++      include gensrc/GensrcX11Wrappers.gmk
++      GENSRC += $(GENSRC_X11WRAPPERS)
++    endif
+   endif
+ endif
+ 
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
new file mode 100644
index 0000000..10f55d6
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
@@ -0,0 +1,94 @@
+--- jdk/make/lib/Awt2dLibraries.gmk.orig	2015-09-03 15:05:21.429981848 +0200
++++ jdk/make/lib/Awt2dLibraries.gmk	2015-09-03 15:05:44.705981936 +0200
+@@ -235,6 +235,10 @@
+   LIBAWT_DIRS += $(JDK_TOPDIR)/src/aix/porting
+ endif
+ 
++ifdef BUILD_HEADLESS_ONLY
++LIBAWT_CFLAGS += -DHEADLESS=true
++endif
++
+ LIBAWT_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \
+     $(X_CFLAGS) \
+     $(foreach dir, $(LIBAWT_DIRS), -I$(dir))
+@@ -1126,17 +1130,28 @@
+           -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks
+     endif
+ 
+-    LIBAWT_HEADLESS_FILES := \
+-        awt_Font.c \
+-        HeadlessToolkit.c \
+-        fontpath.c \
+-        VDrawingArea.c \
++    ifndef X11_NOT_NEEDED
++    LIBAWT_HEADLESS_X11_FILES := \
+         X11Color.c \
+         X11Renderer.c \
+         X11PMBlitLoops.c \
+         X11SurfaceData.c \
+         X11FontScaler_md.c \
+         X11TextRenderer_md.c \
++        GLXGraphicsConfig.c \
++        GLXSurfaceData.c
++    endif
++
++    ifndef CUPS_NOT_NEEDED
++    LIBAWT_HEADLESS_CUPS_FILES := \
++        CUPSfuncs.c
++    endif
++
++    LIBAWT_HEADLESS_FILES := \
++        awt_Font.c \
++        HeadlessToolkit.c \
++        fontpath.c \
++        VDrawingArea.c \
+         OGLBlitLoops.c \
+         OGLBufImgOps.c \
+         OGLContext.c \
+@@ -1149,10 +1164,9 @@
+         OGLSurfaceData.c \
+         OGLTextRenderer.c \
+         OGLVertexCache.c \
+-        GLXGraphicsConfig.c \
+-        GLXSurfaceData.c \
+         AccelGlyphCache.c \
+-        CUPSfuncs.c
++	$(LIBAWT_HEADLESS_X11_FILES) \
++	$(LIBAWT_HEADLESS_CUPS_FILES)
+ 
+     LIBAWT_HEADLESS_REORDER :=
+     ifeq ($(OPENJDK_TARGET_OS), solaris)
+--- jdk/make/CompileNativeLibraries.gmk.orig	2015-08-24 13:35:55.320678845 +0200
++++ jdk/make/CompileNativeLibraries.gmk	2015-08-24 13:36:22.776678949 +0200
+@@ -85,7 +85,9 @@
+ 
+ include lib/Awt2dLibraries.gmk
+ 
++ifndef BUILD_SOUNDLESS_ONLY
+ include lib/SoundLibraries.gmk
++endif
+ 
+ # Include the corresponding custom file, if present. 
+ -include $(CUSTOM_MAKE_DIR)/CompileNativeLibraries.gmk
+--- jdk/src/solaris/native/sun/awt/jawt.c.orig	2015-08-24 14:12:29.376687104 +0200
++++ jdk/src/solaris/native/sun/awt/jawt.c	2015-08-24 14:16:20.420687974 +0200
+@@ -33,7 +33,7 @@
+  */
+ JNIEXPORT jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt)
+ {
+-#if defined(JAVASE_EMBEDDED) && defined(HEADLESS)
++#if defined(JAVASE_EMBEDDED) || defined(HEADLESS)
+     /* there are no AWT libs available at all */
+     return JNI_FALSE;
+ #else
+--- jdk/src/solaris/native/sun/awt/utility/rect.h.orig	2015-09-03 14:45:40.717977403 +0200
++++ jdk/src/solaris/native/sun/awt/utility/rect.h	2015-09-03 14:46:46.337977650 +0200
+@@ -28,7 +28,7 @@
+ #ifndef _AWT_RECT_H
+ #define _AWT_RECT_H
+ 
+-#ifndef MACOSX
++#if !(defined(MACOSX) || defined(HEADLESS))
+ #include <X11/Xlib.h>
+ typedef XRectangle RECT_T;
+ #else
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
new file mode 100644
index 0000000..bc5dd7e
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
@@ -0,0 +1,120 @@
+--- make/common/NativeCompilation.gmk.orig	2015-09-09 17:15:33.869765681 +0200
++++ make/common/NativeCompilation.gmk	2015-09-09 17:55:26.485774688 +0200
+@@ -434,58 +434,6 @@
+           $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
+ 		$(CP) $$< $$@
+         endif
+-
+-        ifneq ($(OPENJDK_TARGET_OS), macosx)   # OBJCOPY is not used on MacOS X
+-          ifneq ($(OPENJDK_TARGET_OS), windows)  # nor on Windows
+-            ifeq ($(OPENJDK_TARGET_OS), solaris)
+-              # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
+-              # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
+-              # empty section headers until a fixed $(OBJCOPY) is available.
+-              # An empty section header has sh_addr == 0 and sh_size == 0.
+-              # This problem has only been seen on Solaris X64, but we call this tool
+-              # on all Solaris builds just in case.
+-              #
+-              # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
+-              # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
+-              $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \
+-				$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
+-		$(RM) $$@
+-		$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
+-            else # not solaris
+-              $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET)
+-		$(RM) $$@
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
+-            endif # Touch to not retrigger rule on rebuild
+-		$(TOUCH) $$@
+-          endif # !windows
+-        endif # !macosx
+-
+-        ifeq ($(ZIP_DEBUGINFO_FILES), true)
+-ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
+-          $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz
+-
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $$($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
+-endif # no MacOS X support yet
+-        else
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \
+-                $$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb
+-          else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
+-            $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
+-          endif
+-        endif
+       endif
+     endif
+ 
+@@ -518,58 +466,6 @@
+           $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
+ 		$(CP) $$< $$@
+         endif
+-
+-        ifneq ($(OPENJDK_TARGET_OS), macosx)   # OBJCOPY is not used on MacOS X
+-          ifneq ($(OPENJDK_TARGET_OS), windows)  # nor on Windows
+-            ifeq ($(OPENJDK_TARGET_OS), solaris)
+-              # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
+-              # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
+-              # empty section headers until a fixed $(OBJCOPY) is available.
+-              # An empty section header has sh_addr == 0 and sh_size == 0.
+-              # This problem has only been seen on Solaris X64, but we call this tool
+-              # on all Solaris builds just in case.
+-              #
+-              # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
+-              # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
+-              $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \
+-				$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
+-		$(RM) $$@
+-		$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
+-            else # not solaris
+-              $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET)
+-		$(RM) $$@
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
+-            endif
+-		$(TOUCH) $$@
+-          endif # !windows
+-        endif # !macosx
+-
+-        ifeq ($(ZIP_DEBUGINFO_FILES), true)
+-ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
+-          $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz
+-
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $$($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
+-endif # no MacOS X support yet
+-        else
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \
+-                $$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb
+-          else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
+-            $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo
+-          endif
+-        endif
+       endif
+     endif
+ 
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
new file mode 100644
index 0000000..d33dc96
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
@@ -0,0 +1,11 @@
+--- hotspot/make/linux/makefiles/dtrace.make.orig	2015-09-01 08:00:59.737868760 +0200
++++ hotspot/make/linux/makefiles/dtrace.make	2015-09-01 08:01:24.049859677 +0200
+@@ -40,7 +40,7 @@
+ ifneq ($(ALT_SDT_H),)
+   SDT_H_FILE = $(ALT_SDT_H)
+ else
+-  SDT_H_FILE = /usr/include/sys/sdt.h
++  SDT_H_FILE = $(SYS_ROOT)/usr/include/sys/sdt.h
+ endif
+ DTRACE_ENABLED = $(shell test -f $(SDT_H_FILE) && echo $(SDT_H_FILE))
+ REASON = "$(SDT_H_FILE) not found"
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
new file mode 100644
index 0000000..9e1d204
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
@@ -0,0 +1,23 @@
+# HG changeset patch
+# User sgehwolf
+# Date 1434121785 -3600
+# Node ID 6217fd2c767b467641bf7b41a9c37273e8fa0cbd
+# Parent  ff0929a59ced0e144201aa05819ae2e47d6f2c61
+8087120: [GCC5] java.lang.StackOverflowError on Zero JVM initialization on non x86 platforms.
+Summary: Use __builtin_frame_address(0) rather than returning address of local variable.
+Reviewed-by: dholmes
+
+diff -r ff0929a59ced -r 6217fd2c767b src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+--- hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp.orig	Thu Jun 11 20:19:26 2015 -0700
++++ hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp	Fri Jun 12 16:09:45 2015 +0100
+@@ -59,8 +59,8 @@
+ extern sigjmp_buf* get_jmp_buf_for_continuation();
+ 
+ address os::current_stack_pointer() {
+-  address dummy = (address) &dummy;
+-  return dummy;
++  // return the address of the current function
++  return (address)__builtin_frame_address(0);
+ }
+ 
+ frame os::get_sender_for_C_frame(frame* fr) {
diff --git a/recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch b/recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch
new file mode 100644
index 0000000..61eddc7
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch
@@ -0,0 +1,31 @@
+--- common/autoconf/basics.m4.orig	2015-08-17 18:02:01.642657746 +0200
++++ common/autoconf/basics.m4	2015-08-17 18:14:44.046660616 +0200
+@@ -466,21 +466,21 @@
+   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])
++  AC_CONFIG_HEADERS([config.h: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])
++  AC_CONFIG_FILES([spec.gmk:spec.gmk.in])
+   # The hotspot-spec.gmk file contains legacy variables for the hotspot make system.
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/hotspot-spec.gmk:$AUTOCONF_DIR/hotspot-spec.gmk.in])
++  AC_CONFIG_FILES([hotspot-spec.gmk:hotspot-spec.gmk.in])
+   # The bootcycle-spec.gmk file contains support for boot cycle builds.
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in])
++  AC_CONFIG_FILES([bootcycle-spec.gmk:bootcycle-spec.gmk.in])
+   # The compare.sh is used to compare the build output to other builds.
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/compare.sh:$AUTOCONF_DIR/compare.sh.in])
++  AC_CONFIG_FILES([compare.sh:compare.sh.in])
+   # Spec.sh is currently used by compare-objects.sh
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in])
++  AC_CONFIG_FILES([spec.sh: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])
++  AC_CONFIG_FILES([Makefile:Makefile.in])
+ 
+   # Save the arguments given to us
+   echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments
diff --git a/recipes-core/openjdk/openjdk-8-common.inc b/recipes-core/openjdk/openjdk-8-common.inc
new file mode 100644
index 0000000..b943718
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-common.inc
@@ -0,0 +1,229 @@
+DESCRIPTION = "Java runtime based upon the OpenJDK Project"
+HOMEPAGE = "http://http://openjdk.java.net/"
+LICENSE  = "GPL-2.0-with-classpath-exception"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7b4baeedfe2d40cb03536573bc2c89b1"
+
+inherit java autotools gettext qemu pkgconfig
+
+AUTOTOOLS_SCRIPT_PATH = "${S}/common/autoconf/"
+export AUTOCONF_DIR="${AUTOTOOLS_SCRIPT_PATH}"
+
+# for weird openjdk-common.inc
+S = "${WORKDIR}/${OPENJDK_HG_U}-${OPENJDK_CHANGESET}"
+
+SRC_URI = " \
+  ${OPENJDK_URI} \
+  ${HOTSPOT_URI} \
+  ${CORBA_URI} \
+  ${JAXP_URI} \
+  ${JAXWS_URI} \
+  ${JDK_URI} \
+  ${LANGTOOLS_URI} \
+  ${NASHORN_URI} \
+  file://LICENSE \
+  ${PATCHES_URI} \
+  "
+
+do_unpack_extract_submodules () {
+    cd "${S}"
+    # tar --transform
+    tar xjf ${WORKDIR}/${CORBA_FILE} --transform "s,-${CORBA_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${HOTSPOT_FILE} --transform "s,-${HOTSPOT_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${JAXP_FILE} --transform "s,-${JAXP_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${JAXWS_FILE} --transform "s,-${JAXWS_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${JDK_FILE} --transform "s,-${JDK_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${LANGTOOLS_FILE} --transform "s,-${LANGTOOLS_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${NASHORN_FILE} --transform "s,-${NASHORN_CHANGESET},,g"
+}
+
+def package_config_option_cleanup(d):
+    distro_x11 = bb.utils.contains('DISTRO_FEATURES', 'x11', True, False, d)
+    distro_alsa = bb.utils.contains('DISTRO_FEATURES', 'alsa', True, False, d)
+    distro_pulseaudio = bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', True, False, d)
+
+    with_x11 = bb.utils.contains('PACKAGECONFIG', 'x11', True, False, d)
+    with_cups = bb.utils.contains('PACKAGECONFIG', 'cups', True, False, d)
+    with_alsa = bb.utils.contains('PACKAGECONFIG', 'alsa', True, False, d)
+    with_pulseaudio = bb.utils.contains('PACKAGECONFIG', 'pulseaudio', True, False, d)
+
+    option_headless = bb.utils.contains('PACKAGECONFIG', 'headless', True, False, d)
+    option_headful = bb.utils.contains('PACKAGECONFIG', 'headful', True, False, d)
+    option_soundless = bb.utils.contains('PACKAGECONFIG', 'soundless', True, False, d)
+
+    if option_headless and option_headful:
+        option_headless = False
+
+    if option_headful and not with_x11:
+        with_x11 = True
+
+    if option_headful and not with_cups:
+        with_cups = True
+
+    if option_soundless and with_alsa:
+        with_alsa = False
+
+    if option_soundless and with_pulseaudio:
+        with_pulseaudio = False
+
+    if with_x11 and not distro_x11:
+        with_x11 = False
+
+    if with_alsa and not distro_alsa:
+        with_alsa = False
+
+    if with_pulseaudio and not distro_pulseaudio:
+        with_pulseaudio = False
+
+    if option_headful and not with_x11:
+        option_headful = False
+
+    if option_headful and not with_cups:
+        option_headful = False
+
+    if not option_headless and not with_x11:
+        option_headless = True
+
+    if not option_headless and not with_cups:
+        option_headless = True
+
+    if not option_soundless and not with_alsa:
+        option_soundless = True
+
+    if not option_soundless and not with_pulseaudio:
+        option_soundless = True
+
+    options = {'make': [], 'cpp': [], 'env': [], 'configure': ["--disable-ccache"] }
+
+    if option_headful:
+        options['configure'].append("--enable-headful")
+
+    if option_headless:
+        options['configure'].append("--disable-headful")
+        options['make'].append("BUILD_HEADLESS_ONLY=1")
+        options['make'].append("BUILD_HEADLESS=true")
+        options['cpp'].append("-DHEADLESS=true")
+
+    if option_soundless:
+        options['make'].append("BUILD_SOUNDLESS_ONLY=1")
+
+    if not with_x11:
+        options['make'].append("X11_NOT_NEEDED=1")
+        options['env'].append("X11_NOT_NEEDED=yes")
+
+    if not with_cups:
+        options['make'].append("CUPS_NOT_NEEDED=1")
+        options['env'].append("CUPS_NOT_NEEDED=yes")
+
+    if not with_alsa:
+        options['make'].append("ALSA_NOT_NEEDED=1")
+        options['env'].append("ALSA_NOT_NEEDED=yes")
+
+    if not with_pulseaudio:
+        options['make'].append("PULSE_NOT_NEEDED=1")
+        options['env'].append("PULSE_NOT_NEEDED=yes")
+
+    options = [ ' '.join(options['make']), ' '.join(options['cpp']), ' '.join(options['env']), ' '.join(options['configure']) ]
+
+    return options
+
+def jdk_make_options(d):
+    options = package_config_option_cleanup(d)
+    return options[0]
+
+def jdk_cpp_options(d):
+    options = package_config_option_cleanup(d)
+    if not options[1]:
+        return ""
+
+    return " " + options[1]
+
+def jdk_environment_options(d):
+    options = package_config_option_cleanup(d)
+    return options[2]
+
+def jdk_configure_options(d):
+    options = package_config_option_cleanup(d)
+    return options[3]
+
+do_unpack[postfuncs] += "do_unpack_extract_submodules"
+
+POST_CONFIGURE_CLEAN_X11 = "${@base_contains('PACKAGECONFIG', 'x11', '', 'rm -f jdk/src/solaris/classes/sun/awt/X11/*.java', d)}"
+
+do_patch_openjdk8() {
+	olddir=`pwd`
+	cd "${S}"
+	${POST_CONFIGURE_CLEAN_X11}
+	for OJ8P in ${WORKDIR}/openjdk8-*.patch; do
+		patch -p0 < ${OJ8P}
+	done
+}
+
+do_patch[postfuncs] += "do_patch_openjdk8"
+
+do_configure_prepend() {
+	export ${@jdk_environment_options(d)}
+}
+
+# OpenJDK supports parallel compilation but uses a plain number for this.
+# In OE we have PARALLEL_MAKE which is the actual option passed to make,
+# e.g. "-j 4".
+OPENJDK8_PARALLEL_MAKE := "${PARALLEL_MAKE}"
+PARALLEL_MAKE = ""
+def get_jdk8_native_jobs(d):
+    import bb
+
+    pm = bb.data.getVar('OPENJDK8_PARALLEL_MAKE', d, 1);
+    if not pm:
+        return "1"
+
+    pm = pm.split("j");
+    if (len(pm) == 2):
+        return pm[1].strip()
+
+    # Whatever found in PARALLEL_MAKE was not suitable.
+    return "1"
+
+# A function that is needed in the Shark builds.
+def get_llvm_configure_arch(d):
+    import bb;
+
+    arch = bb.data.getVar('TRANSLATED_TARGET_ARCH', d, 1)
+    if arch == "x86-64" or arch == "i486" or arch == "i586" or arch == "i686":
+        arch = "x86"
+    elif arch == "arm":
+        arch = "arm"
+    elif arch == "mipsel" or arch == "mips":
+        arch = "mips"
+    elif arch == "powerpc" or arch == "powerpc64":
+        arch = "powerpc"
+    else:
+        bb.warn("%s does not support %s yet" % (bb.data.getVar('PN', d, 1), arch) );
+
+    return arch
+
+# Provides the target architecture to the configure script.
+export LLVM_CONFIGURE_ARCH="${@get_llvm_configure_arch(d)}"
+
+# OpenJDK uses slightly different names for certain arches. We need to know
+#	this to create some files which are expected by the build.
+def get_jdk_arch(d):
+    import bb
+
+    jdk_arch = bb.data.getVar('TRANSLATED_TARGET_ARCH', d, 1)
+    if jdk_arch == "x86-64":
+        jdk_arch = "amd64"
+    elif jdk_arch == "powerpc":
+        jdk_arch = "ppc"
+    elif jdk_arch == "powerpc64":
+        jdk_arch = "ppc64"
+    elif (jdk_arch == "i486" or jdk_arch == "i586" or jdk_arch == "i686"):
+        jdk_arch = "i386"
+
+    return jdk_arch
+
+JDK_ARCH = "${@get_jdk_arch(d)}"
+
+export DEBUG_BINARIES = "true"
+
+ALTERNATIVE_PRIORITY = "50"
diff --git a/recipes-core/openjdk/openjdk-8-cross.inc b/recipes-core/openjdk/openjdk-8-cross.inc
new file mode 100644
index 0000000..f3ae65b
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-cross.inc
@@ -0,0 +1,202 @@
+JDKPN = "openjdk-8"
+JREPN = "openjre-8"
+
+JDK_HOME = "${libdir_jvm}/${JDKPN}"
+JRE_HOME = "${libdir_jvm}/${JREPN}"
+
+DEPENDS = "openjdk-8-native \
+	   zip-native ant-native \
+           libxslt \
+	   jpeg libpng \
+	   krb5 libffi \
+	   fontconfig freetype \
+          "
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x11] = "--with-x,,libx11 xproto libxt libxext libxrender"
+PACKAGECONFIG[cups] = "--with-cups,,cups"
+PACKAGECONFIG[alsa] = "--with-alsa,,alsa-lib-native"
+
+PACKAGECONFIG[jce] = "--enable-unlimited-crypto,,"
+
+PACKAGECONFIG[zip] = "--with-zlib=system,--with-zlib=bundled,zlib,"
+PACKAGECONFIG[gif] = "--with-giflib=system,--with-giflib=bundled,giflib,"
+
+export WANT_LLVM_RELEASE = "3.5.2"
+PACKAGECONFIG[zero] = "--with-jvm-variants=zero,,,"
+PACKAGECONFIG[shark] = "--with-jvm-variants=zeroshark,,llvm3.5,"
+
+require openjdk-8-common.inc
+
+JAVA_HOME[unexport] = "1"
+
+SRC_URI_append = "\
+	file://jvm.cfg \
+       "
+
+# do not use --wth-extra-cflags, it breaks building demos for jdk
+# maybe disabling demos is more reasonable than avoiding --wth-extra-cflags
+# needs discussion
+EXTRA_OECONF_append = "\
+	--with-jobs=${@get_jdk8_native_jobs(d)} \
+	\
+	--with-sys-root=${STAGING_DIR} \
+	--with-tools-dir=${STAGING_DIR_NATIVE} \
+	--with-boot-jdk=${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native \
+	\
+	--disable-precompiled-headers \
+	--disable-zip-debug-info \
+	\
+	${@jdk_configure_options(d)} \
+  "
+
+do_configure_append() {
+	sed -i -e 's,POST_STRIP_CMD:=.*,POST_STRIP_CMD:=,g' ${B}/spec.gmk
+}
+
+export MAKE_VERBOSE = "y"
+export MFLAGS="${@jdk_make_options(d)} MAKE_VERBOSE=y QUIETLY= VERBOSE=-s LOG_LEVEL=trace STRIP_POLICY=no_strip"
+
+BUILD_LD="${BUILD_CCLD}"
+
+EXTRA_OEMAKE_append = ' \
+                OE_CFLAGS="${CFLAGS}" \
+                OE_CPPFLAGS="${CPPFLAGS}" \
+                OE_CXXFLAGS="${CXXFLAGS}" \
+                OE_LDFLAGS="${LDFLAGS}" \
+		${@jdk_make_options(d)} \
+		ALT_SDT_H="${STAGING_INCDIR}" \
+		ALT_CUPS_HEADERS_PATH="${STAGING_INCDIR}" \
+		ALT_FREETYPE_HEADERS_PATH="${STAGING_INCDIR}/freetype2" \
+		ALT_FREETYPE_LIB_PATH="${STAGING_LIBDIR}" \
+		STRIP_POLICY=no_strip \
+		MAKE_VERBOSE=y VERBOSE=-s LOG_LEVEL=trace \
+		QUIETLY= \
+		images \
+               '
+
+FILES_${JREPN}_append = "\
+	${JRE_HOME}/bin/[a-z]* \
+	${JRE_HOME}/lib/[a-z]* \
+	${JRE_HOME}/LICENSE \
+	${JRE_HOME}/release \
+       "
+
+FILES_${JDKPN}_append = "\
+	${JDK_HOME}/bin/[a-z]* \
+	${JDK_HOME}/lib/[a-z]* \
+	${JDK_HOME}/jre/bin/[a-z]* \
+	${JDK_HOME}/jre/lib/[a-z]* \
+	${JDK_HOME}/LICENSE \
+	${JDK_HOME}/jre/LICENSE \
+	${JDK_HOME}/release \
+       "
+
+FILES_${JDKPN}-dev_append = "\
+	${JDK_HOME}/include \
+       "
+
+FILES_${JDKPN}-dbg_append = "\
+	${JDK_HOME}/bin/.debug/ \
+	${JDK_HOME}/lib/.debug/ \
+	${JDK_HOME}/lib/${JDK_ARCH}/.debug/ \
+	${JDK_HOME}/lib/${JDK_ARCH}/jli/.debug/ \
+	${JDK_HOME}/jre/bin/.debug/ \
+	${JDK_HOME}/jre/lib/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/jli/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/native_threads/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/server/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/headless/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/xawt/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/client/.debug/ \
+       "
+
+FILES_${JREPN}-dbg_append = "\
+	${JRE_HOME}/bin/.debug/ \
+	${JRE_HOME}/lib/.debug/ \
+	${JRE_HOME}/lib/${JDK_ARCH}/.debug/ \
+	${JRE_HOME}/lib/${JDK_ARCH}/jli/.debug/ \
+	${JRE_HOME}/lib/${JDK_ARCH}/server/.debug/ \
+       "
+
+FILES_${JDKPN}-demo = " ${JDK_HOME}/demo ${JDK_HOME}/sample "
+RDEPENDS_${JDKPN}-demo = " ${JDKPN} "
+
+FILES_${JDKPN}-demo-dbg = "\
+	${JDK_HOME}/demo/jvmti/gctest/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/heapTracker/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/heapViewer/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/hprof/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/minst/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/mtrace/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/versionCheck/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/waiters/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/compiledMethodLoad/lib/.debug/ \
+       "
+
+FILES_${JDKPN}-doc_append = "\
+	${JDK_HOME}/man \
+	${JDK_HOME}/ASSEMBLY_EXCEPTION \
+	${JDK_HOME}/THIRD_PARTY_README \
+	${JDK_HOME}/jre/ASSEMBLY_EXCEPTION \
+	${JDK_HOME}/jre/THIRD_PARTY_README \
+       "
+FILES_${JREPN}-doc_append = "\
+	${JRE_HOME}/man \
+	${JRE_HOME}/ASSEMBLY_EXCEPTION \
+	${JRE_HOME}/THIRD_PARTY_README \
+       "
+
+FILES_${JDKPN}-source = " ${JDK_HOME}/src.zip "
+
+# Even though a vm is a hard dependency it is set as RRECOMMENDS so a single vm can get uninstalled:
+# root@beaglebone:~/java# opkg remove openjdk-7-vm-shark
+# No packages removed.
+# Collected errors:
+#  * print_dependents_warning: Package openjdk-7-vm-shark is depended upon by packages:
+#  * print_dependents_warning: 	openjdk-7-java
+#  * print_dependents_warning: These might cease to work if package openjdk-7-vm-shark is removed.
+#RRECOMMENDS_${JDKPN}-java = "java2-vm"
+
+# There is a symlink to a .so but this one is valid.
+INSANE_SKIP_${JDKPN}-common = "dev-so"
+
+FILES_${JDKPN}-doc_append = "${JDK_HOME}/man"
+
+do_compile_append() {
+    find ${B}/images/j2sdk-image -name "*.jar" -print0 | \
+      xargs -0 -n1 ${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native/bin/pack200 --repack --effort=9 --segment-limit=-1 --modification-time=latest
+    find ${B}/images/j2re-image -name "*.jar" -print0 | \
+      xargs -0 -n1 ${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native/bin/pack200 --repack --effort=9 --segment-limit=-1 --modification-time=latest --strip-debug 
+}
+
+do_install_jdk() {
+	rm -rf ${D}${JDK_HOME}
+    	mkdir -p ${D}${JDK_HOME}
+	cp -rp ${B}/images/j2sdk-image/* ${D}${JDK_HOME}
+	install -m644 ${WORKDIR}/jvm.cfg  ${D}${JDK_HOME}/jre/lib/${JDK_ARCH}/
+	find ${D}${JDK_HOME} -name "*.debuginfo" -print0 | xargs -0 rm
+}
+
+do_install_jre() {
+	rm -rf ${D}${JRE_HOME}
+    	mkdir -p ${D}${JRE_HOME}
+	cp -rp ${B}/images/j2re-image/* ${D}${JRE_HOME}
+	install -m644 ${WORKDIR}/jvm.cfg  ${D}${JRE_HOME}/lib/${JDK_ARCH}/
+	find ${D}${JRE_HOME} -name "*.debuginfo" -print0 | xargs -0 rm
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_${JDKPN} = "java"
+ALTERNATIVE_TARGET_${JDKPN} = "${JDK_HOME}/bin/java"
+
+ALTERNATIVE_${JREPN} = "java"
+ALTERNATIVE_TARGET_${JREPN} = "${JRE_HOME}/bin/java"
+
+ALTERNATIVE_${JDKPN}-jdk = "javac"
+ALTERNATIVE_TARGET_${JDKPN}-jdk = "${JDK_HOME}/bin/javac"
+
+ALTERNATIVE_LINK_NAME[java] = "${bindir}/java"
+ALTERNATIVE_LINK_NAME[javac] = "${bindir}/javac"
diff --git a/recipes-core/openjdk/openjdk-8-native.inc b/recipes-core/openjdk/openjdk-8-native.inc
new file mode 100644
index 0000000..b8fa9f2
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-native.inc
@@ -0,0 +1,63 @@
+JDK_DIR = "openjdk-8-native"
+DEPENDS = " \
+	   icedtea7-native ant-native \
+	   libxslt-native attr-native \
+	   giflib-native jpeg-native libpng-native \
+	   glib-2.0-native freetype-native fontconfig-native \
+	   zlib-native zip-native \
+	   unzip-native make-native \
+          "
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x11] = "--with-x,,libx11-native xproto-native libxt-native libxext-native libxrender-native"
+PACKAGECONFIG[cups] = "--with-cups,,cups"
+PACKAGECONFIG[alsa] = "--with-alsa,,alsa-lib-native"
+PACKAGECONFIG[jce] = "--enable-unlimited-crypto,,"
+
+# do not use --wth-extra-cflags, it breaks building demos for jdk
+# maybe disabling demos is more reasonable than avoiding --wth-extra-cflags
+# needs discussion
+EXTRA_OECONF_append = "\
+	--with-jobs=${@get_jdk8_native_jobs(d)} \
+	\
+	--with-sys-root=${STAGING_DIR_NATIVE} \
+	--with-tools-dir=${STAGING_DIR_NATIVE} \
+	--with-boot-jdk=${STAGING_LIBDIR_NATIVE}/jvm/icedtea7-native \
+	${@jdk_configure_options(d)} \
+  "
+# --with-boot-jdk=${WORKDIR}/fake-jdk
+
+inherit native
+
+require openjdk-8-common.inc
+
+CFLAGS_append = "${@jdk_cpp_options(d)}"
+CPPFLAGS_append = "${@jdk_cpp_options(d)}"
+CXXFLAGS_append = "${@jdk_cpp_options(d)}"
+
+export MAKE_VERBOSE = "y"
+export MFLAGS="${@jdk_make_options(d)} MAKE_VERBOSE=y QUIETLY= VERBOSE=-s LOG_LEVEL=trace"
+
+EXTRA_OEMAKE_append = ' \
+                OE_CFLAGS="${CFLAGS}" \
+                OE_CPPFLAGS="${CPPFLAGS}" \
+                OE_CXXFLAGS="${CXXFLAGS}" \
+                OE_LDFLAGS="${LDFLAGS}" \
+		${@jdk_make_options(d)} \
+		MAKE_VERBOSE=y VERBOSE=-s LOG_LEVEL=trace \
+		QUIETLY= \
+		images \
+               '
+
+do_install() {
+	rm -rf ${STAGING_LIBDIR_NATIVE}/jvm/${JDK_DIR}
+    	mkdir -p ${STAGING_LIBDIR_NATIVE}/jvm/${JDK_DIR}
+	cp -rp ${B}/images/j2sdk-image/* ${STAGING_LIBDIR_NATIVE}/jvm/${JDK_DIR}
+
+	# clean up the mess from bootstrap
+	rm -f ${STAGING_BINDIR_NATIVE}/java
+	rm -f ${STAGING_BINDIR_NATIVE}/javac
+
+	ln -sf "../lib/jvm/${JDK_DIR}/bin/java" ${STAGING_BINDIR_NATIVE}/java
+	ln -sf "../lib/jvm/${JDK_DIR}/bin/javac" ${STAGING_BINDIR_NATIVE}/javac
+}
diff --git a/recipes-core/openjdk/openjdk-8-native_72b00.bb b/recipes-core/openjdk/openjdk-8-native_72b00.bb
new file mode 100644
index 0000000..1da7411
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-native_72b00.bb
@@ -0,0 +1,16 @@
+require openjdk-8-release-72b00.inc
+require openjdk-8-native.inc
+
+PROVIDES = "virtual/java-native virtual/javac-native"
+
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "java javac"
+ALTERNATIVE_LINK[java] = "${bindir}/java"
+ALTERNATIVE_TARGET[java] = "${JDK_HOME}/bin/java"
+ALTERNATIVE_PRIORITY[java] = "100"
+ALTERNATIVE_LINK[javac] = "${bindir}/javac"
+ALTERNATIVE_TARGET[javac] = "${JDK_HOME}/bin/javac"
+ALTERNATIVE_PRIORITY[javac] = "100"
+
+# PR = "${INC_PR}.1"
diff --git a/recipes-core/openjdk/openjdk-8-release-72b00.inc b/recipes-core/openjdk/openjdk-8-release-72b00.inc
new file mode 100644
index 0000000..201977e
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-release-72b00.inc
@@ -0,0 +1,89 @@
+FILESPATH =. "${FILE_DIRNAME}/openjdk-8-72b00:"
+
+PATCHES_URI="\
+  file://remove-shell-variables-from-autoheader.patch;striplevel=0 \
+  file://filter-aclocal-copy-too.patch;striplevel=0 \
+  file://dont-expect-fqpn-for-make.patch;striplevel=0 \
+  file://openjdk8-no-genx11-in-headless.patch;apply=no \
+  file://openjdk8-no-unused-deps.patch;apply=no \
+  file://openjdk8-find-compiler-fix-env-respect.patch;apply=no \
+  file://openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch;apply=no \
+"
+
+# Name of the directory containing the compiled output
+BUILD_DIR = "openjdk.build"
+BUILD_DIR_ECJ = "openjdk.build-ecj"
+
+# Force arm mode for now
+ARM_INSTRUCTION_SET_armv4t = "ARM"
+
+CORBA_CHANGESET = "f0c760a2a888"
+SRC_URI[corba.md5sum] = "8f3449008b075f388eccf64236bb3039"
+SRC_URI[corba.sha256sum] = "591fa4cd2b6115c754362c7fd310c0abeaf50523cccbdd19eca925cb2cadcae3"
+
+JAXP_CHANGESET = "176a2ce2e2d6"
+SRC_URI[jaxp.md5sum] = "fc6c36203ea8702a0d8d88e63f4f984a"
+SRC_URI[jaxp.sha256sum] = "45842a92f48b7b190d4a532bdeafa7b7ec6e7ac13932d4709a52eb7d16c3a02f"
+
+JAXWS_CHANGESET = "121e784f01d1"
+SRC_URI[jaxws.md5sum] = "47958e1021cf9af555ba1d473e1ba3a1"
+SRC_URI[jaxws.sha256sum] = "de6552e3fce8f47524156d59fc5667caa5f07ff41342a9570fff90be064bd5be"
+
+JDK_CHANGESET = "97b3a4fc3290"
+SRC_URI[jdk.md5sum] = "c513a840f2d9bbe8158b0cba2f95e1bf"
+SRC_URI[jdk.sha256sum] = "fff6d7c086a0cada2b7564783a3fc0d2f266332a4ec3c46892f9d82b8590ffcd"
+
+LANGTOOLS_CHANGESET = "14891e981af0"
+SRC_URI[langtools.md5sum] = "88269f92d4caf952cf94ea5a1355f7ed"
+SRC_URI[langtools.sha256sum] = "8c0a44f467a65500864208d59f9bbbf49ccd19864d2c149765e8ac0b515542ac"
+
+NASHORN_CHANGESET = "3f4320a01539"
+SRC_URI[nashorn.md5sum] = "99e7cf1ff097dd9643167412dfdbd7e7"
+SRC_URI[nashorn.sha256sum] = "10e6f81e70a3af76e8519faaaedb09bc2f4e4c8e9d648c1a7b2d2a8db674e90b"
+
+OPENJDK_CHANGESET = "d0afaafe3790"
+SRC_URI[openjdk.md5sum] = "a74c9c24487cea8766c3e81f9d6a2940"
+SRC_URI[openjdk.sha256sum] = "17ae39738277af1ea41c418a2d56e53abae2b4b5b14d4378f3d6648033021b92"
+
+HOTSPOT_CHANGESET = "c1374141598c"
+SRC_URI[hotspot.md5sum] = "fbf11c395dc8aa8483d577abad98808a"
+SRC_URI[hotspot.sha256sum] = "278fbb51944582fb38d3e2dafe9aff85e17ca991a6c93c69d5d98c40a86c3d4b"
+
+OPENJDK_HG_U = "jdk8u"
+OPENJDK_HG_URL = "http://hg.openjdk.java.net/jdk8u/${OPENJDK_HG_U}"
+
+OPENJDK_FILE = "${OPENJDK_CHANGESET}.tar.bz2"
+OPENJDK_URI = "${OPENJDK_HG_URL}/archive/${OPENJDK_FILE};name=openjdk"
+
+HOTSPOT_FILE = "${HOTSPOT_CHANGESET}.tar.bz2"
+HOTSPOT_URI = "${OPENJDK_HG_URL}/hotspot/archive/${HOTSPOT_FILE};name=hotspot;unpack=false"
+
+CORBA_FILE = "${CORBA_CHANGESET}.tar.bz2"
+CORBA_URI = "${OPENJDK_HG_URL}/corba/archive/${CORBA_FILE};name=corba;unpack=false"
+
+JAXP_FILE = "${JAXP_CHANGESET}.tar.bz2"
+JAXP_URI = "${OPENJDK_HG_URL}/jaxp/archive/${JAXP_FILE};name=jaxp;unpack=false"
+
+JAXWS_FILE = "${JAXWS_CHANGESET}.tar.bz2"
+JAXWS_URI = "${OPENJDK_HG_URL}/jaxws/archive/${JAXWS_FILE};name=jaxws;unpack=false"
+
+JDK_FILE = "${JDK_CHANGESET}.tar.bz2"
+JDK_URI = "${OPENJDK_HG_URL}/jdk/archive/${JDK_FILE};name=jdk;unpack=false"
+
+LANGTOOLS_FILE = "${LANGTOOLS_CHANGESET}.tar.bz2"
+LANGTOOLS_URI = "${OPENJDK_HG_URL}/langtools/archive/${LANGTOOLS_FILE};name=langtools;unpack=false"
+
+NASHORN_FILE = "${NASHORN_CHANGESET}.tar.bz2"
+NASHORN_URI = "${OPENJDK_HG_URL}/nashorn/archive/${NASHORN_FILE};name=nashorn;unpack=false"
+#
+#CACAO_VERSION = "e215e36be9fc"
+#CACAO_FILE = "${CACAO_VERSION}.tar.gz"
+#CACAO_URI = "http://icedtea.wildebeest.org/download/drops/cacao/${CACAO_FILE};name=cacao;unpack=false"
+#SRC_URI[cacao.md5sum] = "79f95f0aea4ba04cf2f1a8632ac66d14"
+#SRC_URI[cacao.sha256sum] = "4966514c72ee7ed108b882d9b6e65c3adf8a8f9c2dccb029f971b3c8cb4870ab"
+#
+#JAMVM_VERSION = "ec18fb9e49e62dce16c5094ef1527eed619463aa"
+#JAMVM_FILE = "jamvm-${JAMVM_VERSION}.tar.gz"
+#JAMVM_URI = "http://icedtea.wildebeest.org/download/drops/jamvm/${JAMVM_FILE};name=jamvm;unpack=false"
+#SRC_URI[jamvm.md5sum] = "d50ae193d01a9251e10679c7a2cc6ff1"
+#SRC_URI[jamvm.sha256sum] = "31810266666c23822942aac62a78019c2c4589e1c5ee48329cbf42652d4437bc"
diff --git a/recipes-core/openjdk/openjdk-8_72b00.bb b/recipes-core/openjdk/openjdk-8_72b00.bb
new file mode 100644
index 0000000..673d435
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8_72b00.bb
@@ -0,0 +1,36 @@
+require openjdk-8-release-72b00.inc
+require openjdk-8-cross.inc
+
+# some patches extracted from http://cr.openjdk.java.net/~rkennke/shark-build-hotspot/webrev.01/hotspot.patch
+# reported via http://mail.openjdk.java.net/pipermail/build-dev/2015-January/013972.html
+# by Roman Kennke (rkennke at redhat.com)
+PATCHES_URI_append = "\
+  file://openjdk8-restrict-to-staging-dir.patch;apply=no \
+  file://openjdk8-fix-shark-build.patch;apply=no \
+  file://openjdk8-fix-shark-stdc++11.patch;apply=no \
+  file://openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch;apply=no \
+"
+
+do_install() {
+    do_install_jdk
+}
+
+PACKAGES_append = " \
+            ${JDKPN}-demo-dbg \
+            ${JDKPN}-demo \
+            ${JDKPN}-source \
+           "
+
+RPROVIDES_${JDKPN} = "java2-vm"
+PROVIDES_${JDKPN} = "java2-vm"
+RPROVIDES_${JDKPN} = "java2-runtime"
+PROVIDES_${JDKPN} = "java2-runtime"
+
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "java"
+ALTERNATIVE_LINK = "${bindir}/java"
+ALTERNATIVE_TARGET = "${JDK_HOME}/bin/java"
+ALTERNATIVE_PRIORITY = "100"
+
+# PR = "${INC_PR}.1"
diff --git a/recipes-core/openjdk/openjre-8_72b00.bb b/recipes-core/openjdk/openjre-8_72b00.bb
new file mode 100644
index 0000000..aa4af40
--- /dev/null
+++ b/recipes-core/openjdk/openjre-8_72b00.bb
@@ -0,0 +1,30 @@
+require openjdk-8-release-72b00.inc
+require openjdk-8-cross.inc
+
+# some patches extracted from http://cr.openjdk.java.net/~rkennke/shark-build-hotspot/webrev.01/hotspot.patch
+# reported via http://mail.openjdk.java.net/pipermail/build-dev/2015-January/013972.html
+# by Roman Kennke (rkennke at redhat.com)
+PATCHES_URI_append = "\
+  file://openjdk8-restrict-to-staging-dir.patch;apply=no \
+  file://openjdk8-fix-shark-build.patch;apply=no \
+  file://openjdk8-fix-shark-stdc++11.patch;apply=no \
+  file://openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch;apply=no \
+"
+
+do_install() {
+    do_install_jre
+}
+
+RPROVIDES_${JREPN} = "java2-vm"
+PROVIDES_${JREPN} = "java2-vm"
+RPROVIDES_${JREPN} = "java2-runtime"
+PROVIDES_${JREPN} = "java2-runtime"
+
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "java"
+ALTERNATIVE_LINK = "${bindir}/java"
+ALTERNATIVE_TARGET = "${JRE_HOME}/bin/java"
+ALTERNATIVE_PRIORITY = "100"
+
+# PR = "${INC_PR}.1"
-- 
1.9.1


-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-28 18:01 [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8 Jens Rehsack
@ 2015-10-28 19:34 ` Dan McGregor
  2015-10-28 19:59   ` Jens Rehsack
  2015-10-29  7:41 ` Richard Leitner
  1 sibling, 1 reply; 23+ messages in thread
From: Dan McGregor @ 2015-10-28 19:34 UTC (permalink / raw)
  To: openembeded-devel

On 28 October 2015 at 12:01, Jens Rehsack <rehsack@gmail.com> wrote:
>
> This adds openjdk-8 for native and target builds and allows a stripped
> openjre-8 being built as well instead of trying to cherry-pick jre
> components from jdk-image.
>
> The recipes allow building openjdk-8 with or without:
> * x11
> * cups
> * alsa/pulseaudio
> and let packager enable unlimited-crypto, if desired.
>
> Since there can be only one PROVIDES for virtual/java-native and virtual/javac-native,
> move the provides to openjdk-8-native (I think everyone agrees it's a better
> choice than ecj-bootstrap-native).
>
> Plus: Applying a fix from openjdk-9 repository which fixes build issues using gcc5
>
> Signed-off-by: Jens Rehsack <sno@netbsd.org>

My biggest issue with this patchset (I haven't looked at it too
closely yet, but it does seem to work) is
that the new recipes and recipe include files have inconsistent
whitespace. This matches the openjdk-7
recipes, but I'd rather not see it perpetuated with new recipes. How
you feel about doing a tab kill and
using spaces?

< snip >
> --
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-28 19:34 ` Dan McGregor
@ 2015-10-28 19:59   ` Jens Rehsack
  0 siblings, 0 replies; 23+ messages in thread
From: Jens Rehsack @ 2015-10-28 19:59 UTC (permalink / raw)
  To: openembedded-devel


> Am 28.10.2015 um 20:34 schrieb Dan McGregor <danismostlikely@gmail.com>:
> 
> On 28 October 2015 at 12:01, Jens Rehsack <rehsack@gmail.com> wrote:
>> 
>> This adds openjdk-8 for native and target builds and allows a stripped
>> openjre-8 being built as well instead of trying to cherry-pick jre
>> components from jdk-image.
>> 
>> The recipes allow building openjdk-8 with or without:
>> * x11
>> * cups
>> * alsa/pulseaudio
>> and let packager enable unlimited-crypto, if desired.
>> 
>> Since there can be only one PROVIDES for virtual/java-native and virtual/javac-native,
>> move the provides to openjdk-8-native (I think everyone agrees it's a better
>> choice than ecj-bootstrap-native).
>> 
>> Plus: Applying a fix from openjdk-9 repository which fixes build issues using gcc5
>> 
>> Signed-off-by: Jens Rehsack <sno@netbsd.org>
> 
> My biggest issue with this patchset (I haven't looked at it too
> closely yet, but it does seem to work) is
> that the new recipes and recipe include files have inconsistent
> whitespace. This matches the openjdk-7
> recipes, but I'd rather not see it perpetuated with new recipes. How
> you feel about doing a tab kill and
> using spaces?

Fine with me ;)

Cheers
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-28 18:01 [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8 Jens Rehsack
  2015-10-28 19:34 ` Dan McGregor
@ 2015-10-29  7:41 ` Richard Leitner
  2015-10-29  9:22   ` Jens Rehsack
  1 sibling, 1 reply; 23+ messages in thread
From: Richard Leitner @ 2015-10-29  7:41 UTC (permalink / raw)
  To: openembedded-devel

On 10/28/2015 07:01 PM, Jens Rehsack wrote:
> This adds openjdk-8 for native and target builds and allows a stripped
> openjre-8 being built as well instead of trying to cherry-pick jre
> components from jdk-image.
> 
> The recipes allow building openjdk-8 with or without:
> * x11
> * cups
> * alsa/pulseaudio
> and let packager enable unlimited-crypto, if desired.
> 
> Since there can be only one PROVIDES for virtual/java-native and virtual/javac-native,
> move the provides to openjdk-8-native (I think everyone agrees it's a better
> choice than ecj-bootstrap-native).
> 
> Plus: Applying a fix from openjdk-9 repository which fixes build issues using gcc5
> 
> Signed-off-by: Jens Rehsack <sno@netbsd.org>
> ---
>  README                                             |   13 +-
>  recipes-core/cacao/cacao_1.6.1.bb                  |    2 +-
>  recipes-core/ecj/ecj-bootstrap-native.bb           |    2 -
>  recipes-core/openjdk/openjdk-8-72b00/LICENSE       |  347 +++
>  .../dont-expect-fqpn-for-make.patch                |   18 +
>  .../openjdk-8-72b00/filter-aclocal-copy-too.patch  |   11 +
>  recipes-core/openjdk/openjdk-8-72b00/jvm.cfg       |   41 +
>  .../openjdk8-find-compiler-fix-env-respect.patch   |  140 +
>  .../openjdk-8-72b00/openjdk8-fix-shark-build.patch |  453 ++++
>  .../openjdk8-fix-shark-stdc++11.patch              | 2730 ++++++++++++++++++++
>  .../openjdk8-no-genx11-in-headless.patch           |   17 +
>  .../openjdk-8-72b00/openjdk8-no-unused-deps.patch  |   94 +
>  ...o-in-favour-of-openembedded-package-split.patch |  120 +
>  .../openjdk8-restrict-to-staging-dir.patch         |   11 +
>  ..._than_returning_address_of_local_variable.patch |   23 +
>  .../remove-shell-variables-from-autoheader.patch   |   31 +
>  recipes-core/openjdk/openjdk-8-common.inc          |  229 ++
>  recipes-core/openjdk/openjdk-8-cross.inc           |  202 ++
>  recipes-core/openjdk/openjdk-8-native.inc          |   63 +
>  recipes-core/openjdk/openjdk-8-native_72b00.bb     |   16 +
>  recipes-core/openjdk/openjdk-8-release-72b00.inc   |   89 +
>  recipes-core/openjdk/openjdk-8_72b00.bb            |   36 +
>  recipes-core/openjdk/openjre-8_72b00.bb            |   30 +
>  23 files changed, 4706 insertions(+), 12 deletions(-)
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/LICENSE
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
>  create mode 100644 recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch

IMHO a version independent patches directory like for openjdk-7 would
also be good here.

To cite Otavio:
We could rename the patches directory for openjdk-7 and avoid the
version number on it. This would make easier for upgrades and to see
the diff between the patches.

>  create mode 100644 recipes-core/openjdk/openjdk-8-common.inc
>  create mode 100644 recipes-core/openjdk/openjdk-8-cross.inc
>  create mode 100644 recipes-core/openjdk/openjdk-8-native.inc
>  create mode 100644 recipes-core/openjdk/openjdk-8-native_72b00.bb
>  create mode 100644 recipes-core/openjdk/openjdk-8-release-72b00.inc
>  create mode 100644 recipes-core/openjdk/openjdk-8_72b00.bb
>  create mode 100644 recipes-core/openjdk/openjre-8_72b00.bb

Furthermore I had problems building OpenJDK-7 with this patch applied.
But I will verify that again and come back to you!

best regards,
Richard L


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29  7:41 ` Richard Leitner
@ 2015-10-29  9:22   ` Jens Rehsack
  2015-10-29 10:46     ` Otavio Salvador
  0 siblings, 1 reply; 23+ messages in thread
From: Jens Rehsack @ 2015-10-29  9:22 UTC (permalink / raw)
  To: openembedded-devel


> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
> 
> On 10/28/2015 07:01 PM, Jens Rehsack wrote:
>> This adds openjdk-8 for native and target builds and allows a stripped
>> openjre-8 being built as well instead of trying to cherry-pick jre
>> components from jdk-image.
>> 
>> The recipes allow building openjdk-8 with or without:
>> * x11
>> * cups
>> * alsa/pulseaudio
>> and let packager enable unlimited-crypto, if desired.
>> 
>> Since there can be only one PROVIDES for virtual/java-native and virtual/javac-native,
>> move the provides to openjdk-8-native (I think everyone agrees it's a better
>> choice than ecj-bootstrap-native).
>> 
>> Plus: Applying a fix from openjdk-9 repository which fixes build issues using gcc5
>> 
>> Signed-off-by: Jens Rehsack <sno@netbsd.org>
>> ---
>> README                                             |   13 +-
>> recipes-core/cacao/cacao_1.6.1.bb                  |    2 +-
>> recipes-core/ecj/ecj-bootstrap-native.bb           |    2 -
>> recipes-core/openjdk/openjdk-8-72b00/LICENSE       |  347 +++
>> .../dont-expect-fqpn-for-make.patch                |   18 +
>> .../openjdk-8-72b00/filter-aclocal-copy-too.patch  |   11 +
>> recipes-core/openjdk/openjdk-8-72b00/jvm.cfg       |   41 +
>> .../openjdk8-find-compiler-fix-env-respect.patch   |  140 +
>> .../openjdk-8-72b00/openjdk8-fix-shark-build.patch |  453 ++++
>> .../openjdk8-fix-shark-stdc++11.patch              | 2730 ++++++++++++++++++++
>> .../openjdk8-no-genx11-in-headless.patch           |   17 +
>> .../openjdk-8-72b00/openjdk8-no-unused-deps.patch  |   94 +
>> ...o-in-favour-of-openembedded-package-split.patch |  120 +
>> .../openjdk8-restrict-to-staging-dir.patch         |   11 +
>> ..._than_returning_address_of_local_variable.patch |   23 +
>> .../remove-shell-variables-from-autoheader.patch   |   31 +
>> recipes-core/openjdk/openjdk-8-common.inc          |  229 ++
>> recipes-core/openjdk/openjdk-8-cross.inc           |  202 ++
>> recipes-core/openjdk/openjdk-8-native.inc          |   63 +
>> recipes-core/openjdk/openjdk-8-native_72b00.bb     |   16 +
>> recipes-core/openjdk/openjdk-8-release-72b00.inc   |   89 +
>> recipes-core/openjdk/openjdk-8_72b00.bb            |   36 +
>> recipes-core/openjdk/openjre-8_72b00.bb            |   30 +
>> 23 files changed, 4706 insertions(+), 12 deletions(-)
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/LICENSE
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
>> create mode 100644 recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch
> 
> IMHO a version independent patches directory like for openjdk-7 would
> also be good here.
> 
> To cite Otavio:
> We could rename the patches directory for openjdk-7 and avoid the
> version number on it. This would make easier for upgrades and to see
> the diff between the patches.

So git diff -M doesn't work for you? I don't understand the reasoning.

>> create mode 100644 recipes-core/openjdk/openjdk-8-common.inc
>> create mode 100644 recipes-core/openjdk/openjdk-8-cross.inc
>> create mode 100644 recipes-core/openjdk/openjdk-8-native.inc
>> create mode 100644 recipes-core/openjdk/openjdk-8-native_72b00.bb
>> create mode 100644 recipes-core/openjdk/openjdk-8-release-72b00.inc
>> create mode 100644 recipes-core/openjdk/openjdk-8_72b00.bb
>> create mode 100644 recipes-core/openjdk/openjre-8_72b00.bb
> 
> Furthermore I had problems building OpenJDK-7 with this patch applied.
> But I will verify that again and come back to you!

Yes, please :)

I'm sorry that I cannot verify on own, because OpenJDK-7 still requires X11
and I have no X11 available in my distro and not enough resources to create
a playground for such things :(

But with sane errors I'm happy to dig and fix.

Cheers
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29  9:22   ` Jens Rehsack
@ 2015-10-29 10:46     ` Otavio Salvador
  2015-10-29 11:24       ` Jens Rehsack
  0 siblings, 1 reply; 23+ messages in thread
From: Otavio Salvador @ 2015-10-29 10:46 UTC (permalink / raw)
  To: OpenEmbedded Devel List

On Thu, Oct 29, 2015 at 7:22 AM, Jens Rehsack <rehsack@gmail.com> wrote:
>> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
>> To cite Otavio:
>> We could rename the patches directory for openjdk-7 and avoid the
>> version number on it. This would make easier for upgrades and to see
>> the diff between the patches.
>
> So git diff -M doesn't work for you? I don't understand the reasoning.

It does but reusing the directory easy the upgrade and as the
openjdk-8 is in maintenance it is expected that it does not change
much in the patches.

>>> create mode 100644 recipes-core/openjdk/openjdk-8-common.inc
>>> create mode 100644 recipes-core/openjdk/openjdk-8-cross.inc
>>> create mode 100644 recipes-core/openjdk/openjdk-8-native.inc
>>> create mode 100644 recipes-core/openjdk/openjdk-8-native_72b00.bb
>>> create mode 100644 recipes-core/openjdk/openjdk-8-release-72b00.inc
>>> create mode 100644 recipes-core/openjdk/openjdk-8_72b00.bb
>>> create mode 100644 recipes-core/openjdk/openjre-8_72b00.bb
>>
>> Furthermore I had problems building OpenJDK-7 with this patch applied.
>> But I will verify that again and come back to you!
>
> Yes, please :)
>
> I'm sorry that I cannot verify on own, because OpenJDK-7 still requires X11
> and I have no X11 available in my distro and not enough resources to create
> a playground for such things :(
>
> But with sane errors I'm happy to dig and fix.

Once we merge this, I would like to try to simplify the recipes a
little. Maybe avoiding the .inc files as much as possible as it makes
harder to follow the code and in fact we just support (and this should
not change) a single version for each openjdk major version.


-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 10:46     ` Otavio Salvador
@ 2015-10-29 11:24       ` Jens Rehsack
  2015-10-29 11:54         ` Richard Leitner
  0 siblings, 1 reply; 23+ messages in thread
From: Jens Rehsack @ 2015-10-29 11:24 UTC (permalink / raw)
  To: openembedded-devel


> Am 29.10.2015 um 11:46 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
> 
> On Thu, Oct 29, 2015 at 7:22 AM, Jens Rehsack <rehsack@gmail.com> wrote:
>>> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
>>> To cite Otavio:
>>> We could rename the patches directory for openjdk-7 and avoid the
>>> version number on it. This would make easier for upgrades and to see
>>> the diff between the patches.
>> 
>> So git diff -M doesn't work for you? I don't understand the reasoning.
> 
> It does but reusing the directory easy the upgrade and as the
> openjdk-8 is in maintenance it is expected that it does not change
> much in the patches.

Partial. As I told you, I updated OpenJDK from 8u40 to 8u72 when I first
encountered massive crashes on the target device with zeroshark until
llvm guys told me, that legacy JIT for ARM was utterly broken and they
force people to MCJIT.

Having both directories during the upgrade helped me massively to
avoid breaking patches by fixing against new upstream adoptions.

Surely, this could be handled developer-side by keeping an foo.old
directory - but it smells the same smell ;)

I don't fight against renaming the directory, I just argue, both
way have their own kind of smell.

>>>> create mode 100644 recipes-core/openjdk/openjdk-8-common.inc
>>>> create mode 100644 recipes-core/openjdk/openjdk-8-cross.inc
>>>> create mode 100644 recipes-core/openjdk/openjdk-8-native.inc
>>>> create mode 100644 recipes-core/openjdk/openjdk-8-native_72b00.bb
>>>> create mode 100644 recipes-core/openjdk/openjdk-8-release-72b00.inc
>>>> create mode 100644 recipes-core/openjdk/openjdk-8_72b00.bb
>>>> create mode 100644 recipes-core/openjdk/openjre-8_72b00.bb
>>> 
>>> Furthermore I had problems building OpenJDK-7 with this patch applied.
>>> But I will verify that again and come back to you!
>> 
>> Yes, please :)
>> 
>> I'm sorry that I cannot verify on own, because OpenJDK-7 still requires X11
>> and I have no X11 available in my distro and not enough resources to create
>> a playground for such things :(
>> 
>> But with sane errors I'm happy to dig and fix.
> 
> Once we merge this, I would like to try to simplify the recipes a
> little. Maybe avoiding the .inc files as much as possible as it makes
> harder to follow the code and in fact we just support (and this should
> not change) a single version for each openjdk major version.

I tried to reuse as much as possible from existing *.inc files, but

OpenJDK-7 is derived from icedtea-2.1 - which has a complete different
approach to build. OpenJDK-8 is plain, pure OpenJDK with it's own set
of pitfalls, smells and edges. Unfortunately figuring that all out costs
me days to adopt code from common.inc in a way both can use until I
finally gave up because of to many weird assumptions in openjdk-common.inc :/

Cheers
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 11:24       ` Jens Rehsack
@ 2015-10-29 11:54         ` Richard Leitner
  2015-10-29 12:08           ` Jens Rehsack
  2015-10-29 12:24           ` Otavio Salvador
  0 siblings, 2 replies; 23+ messages in thread
From: Richard Leitner @ 2015-10-29 11:54 UTC (permalink / raw)
  To: openembedded-devel

On 10/29/2015 12:24 PM, Jens Rehsack wrote:
> 
>> Am 29.10.2015 um 11:46 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
>>
>> On Thu, Oct 29, 2015 at 7:22 AM, Jens Rehsack <rehsack@gmail.com> wrote:
>>>> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
>>>> To cite Otavio:
>>>> We could rename the patches directory for openjdk-7 and avoid the
>>>> version number on it. This would make easier for upgrades and to see
>>>> the diff between the patches.
>>>
>>> So git diff -M doesn't work for you? I don't understand the reasoning.
>>
>> It does but reusing the directory easy the upgrade and as the
>> openjdk-8 is in maintenance it is expected that it does not change
>> much in the patches.
> 
> Partial. As I told you, I updated OpenJDK from 8u40 to 8u72 when I first
> encountered massive crashes on the target device with zeroshark until
> llvm guys told me, that legacy JIT for ARM was utterly broken and they
> force people to MCJIT.
> 
> Having both directories during the upgrade helped me massively to
> avoid breaking patches by fixing against new upstream adoptions.
> 
> Surely, this could be handled developer-side by keeping an foo.old
> directory - but it smells the same smell ;)
> 
> I don't fight against renaming the directory, I just argue, both
> way have their own kind of smell.
> 

I really understand both sides... But for me, due to the fact we want to
support only one version of each OpenJDK release, the patch directory
without version has "a better smell" ;-)

I would also go one step further and omit the version from
openjdk-7-release-*.inc. Then the version number is only included in the
name of the openjdk-7_*.bb file.

But I'm open to any discussion! So what do you think about it?


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 11:54         ` Richard Leitner
@ 2015-10-29 12:08           ` Jens Rehsack
  2015-10-29 15:51             ` Richard Leitner
  2015-10-29 12:24           ` Otavio Salvador
  1 sibling, 1 reply; 23+ messages in thread
From: Jens Rehsack @ 2015-10-29 12:08 UTC (permalink / raw)
  To: openembedded-devel


> Am 29.10.2015 um 12:54 schrieb Richard Leitner <richard.leitner@skidata.com>:
> 
> On 10/29/2015 12:24 PM, Jens Rehsack wrote:
>> 
>>> Am 29.10.2015 um 11:46 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
>>> 
>>> On Thu, Oct 29, 2015 at 7:22 AM, Jens Rehsack <rehsack@gmail.com> wrote:
>>>>> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
>>>>> To cite Otavio:
>>>>> We could rename the patches directory for openjdk-7 and avoid the
>>>>> version number on it. This would make easier for upgrades and to see
>>>>> the diff between the patches.
>>>> 
>>>> So git diff -M doesn't work for you? I don't understand the reasoning.
>>> 
>>> It does but reusing the directory easy the upgrade and as the
>>> openjdk-8 is in maintenance it is expected that it does not change
>>> much in the patches.
>> 
>> Partial. As I told you, I updated OpenJDK from 8u40 to 8u72 when I first
>> encountered massive crashes on the target device with zeroshark until
>> llvm guys told me, that legacy JIT for ARM was utterly broken and they
>> force people to MCJIT.
>> 
>> Having both directories during the upgrade helped me massively to
>> avoid breaking patches by fixing against new upstream adoptions.
>> 
>> Surely, this could be handled developer-side by keeping an foo.old
>> directory - but it smells the same smell ;)
>> 
>> I don't fight against renaming the directory, I just argue, both
>> way have their own kind of smell.
>> 
> 
> I really understand both sides... But for me, due to the fact we want to
> support only one version of each OpenJDK release, the patch directory
> without version has "a better smell" ;-)
> 
> I would also go one step further and omit the version from
> openjdk-7-release-*.inc. Then the version number is only included in the
> name of the openjdk-7_*.bb file.
> 
> But I'm open to any discussion! So what do you think about it?

I'm fine with both when you assure that you handle any request regarding
that topic ;)

So when I'm going to rename the files (fine for me), than you have to
fight with requests about file/patch-dir names from community ... :P

Cheers
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 11:54         ` Richard Leitner
  2015-10-29 12:08           ` Jens Rehsack
@ 2015-10-29 12:24           ` Otavio Salvador
  2015-10-29 15:49             ` Richard Leitner
  1 sibling, 1 reply; 23+ messages in thread
From: Otavio Salvador @ 2015-10-29 12:24 UTC (permalink / raw)
  To: OpenEmbedded Devel List

On Thu, Oct 29, 2015 at 9:54 AM, Richard Leitner
<richard.leitner@skidata.com> wrote:
> On 10/29/2015 12:24 PM, Jens Rehsack wrote:
>>
>>> Am 29.10.2015 um 11:46 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
>>>
>>> On Thu, Oct 29, 2015 at 7:22 AM, Jens Rehsack <rehsack@gmail.com> wrote:
>>>>> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
>>>>> To cite Otavio:
>>>>> We could rename the patches directory for openjdk-7 and avoid the
>>>>> version number on it. This would make easier for upgrades and to see
>>>>> the diff between the patches.
>>>>
>>>> So git diff -M doesn't work for you? I don't understand the reasoning.
>>>
>>> It does but reusing the directory easy the upgrade and as the
>>> openjdk-8 is in maintenance it is expected that it does not change
>>> much in the patches.
>>
>> Partial. As I told you, I updated OpenJDK from 8u40 to 8u72 when I first
>> encountered massive crashes on the target device with zeroshark until
>> llvm guys told me, that legacy JIT for ARM was utterly broken and they
>> force people to MCJIT.
>>
>> Having both directories during the upgrade helped me massively to
>> avoid breaking patches by fixing against new upstream adoptions.
>>
>> Surely, this could be handled developer-side by keeping an foo.old
>> directory - but it smells the same smell ;)
>>
>> I don't fight against renaming the directory, I just argue, both
>> way have their own kind of smell.
>>
>
> I really understand both sides... But for me, due to the fact we want to
> support only one version of each OpenJDK release, the patch directory
> without version has "a better smell" ;-)
>
> I would also go one step further and omit the version from
> openjdk-7-release-*.inc. Then the version number is only included in the
> name of the openjdk-7_*.bb file.
>
> But I'm open to any discussion! So what do you think about it?

I agree; and if we possible fix the indenting and reduce the
indirection (reducing the number .inc files, for example) I would
support :-D


-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 12:24           ` Otavio Salvador
@ 2015-10-29 15:49             ` Richard Leitner
  2015-10-29 16:03               ` Otavio Salvador
  0 siblings, 1 reply; 23+ messages in thread
From: Richard Leitner @ 2015-10-29 15:49 UTC (permalink / raw)
  To: openembedded-devel

On 10/29/2015 01:24 PM, Otavio Salvador wrote:
> On Thu, Oct 29, 2015 at 9:54 AM, Richard Leitner
> <richard.leitner@skidata.com> wrote:
>> On 10/29/2015 12:24 PM, Jens Rehsack wrote:
>>>
>>>> Am 29.10.2015 um 11:46 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
>>>>
>>>> On Thu, Oct 29, 2015 at 7:22 AM, Jens Rehsack <rehsack@gmail.com> wrote:
>>>>>> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
>>>>>> To cite Otavio:
>>>>>> We could rename the patches directory for openjdk-7 and avoid the
>>>>>> version number on it. This would make easier for upgrades and to see
>>>>>> the diff between the patches.
>>>>>
>>>>> So git diff -M doesn't work for you? I don't understand the reasoning.
>>>>
>>>> It does but reusing the directory easy the upgrade and as the
>>>> openjdk-8 is in maintenance it is expected that it does not change
>>>> much in the patches.
>>>
>>> Partial. As I told you, I updated OpenJDK from 8u40 to 8u72 when I first
>>> encountered massive crashes on the target device with zeroshark until
>>> llvm guys told me, that legacy JIT for ARM was utterly broken and they
>>> force people to MCJIT.
>>>
>>> Having both directories during the upgrade helped me massively to
>>> avoid breaking patches by fixing against new upstream adoptions.
>>>
>>> Surely, this could be handled developer-side by keeping an foo.old
>>> directory - but it smells the same smell ;)
>>>
>>> I don't fight against renaming the directory, I just argue, both
>>> way have their own kind of smell.
>>>
>>
>> I really understand both sides... But for me, due to the fact we want to
>> support only one version of each OpenJDK release, the patch directory
>> without version has "a better smell" ;-)
>>
>> I would also go one step further and omit the version from
>> openjdk-7-release-*.inc. Then the version number is only included in the
>> name of the openjdk-7_*.bb file.
>>
>> But I'm open to any discussion! So what do you think about it?
> 
> I agree; and if we possible fix the indenting and reduce the
> indirection (reducing the number .inc files, for example) I would
> support :-D
> 

Ok, i will prepare a patch for fixing the filenames in openjdk-7.

What indentation should be chosen? Tabs? Spaces (how much)?
Maybe I have also time to fix that in the recipes-core.

best regards;
Richard L


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 12:08           ` Jens Rehsack
@ 2015-10-29 15:51             ` Richard Leitner
  0 siblings, 0 replies; 23+ messages in thread
From: Richard Leitner @ 2015-10-29 15:51 UTC (permalink / raw)
  To: openembedded-devel

On 10/29/2015 01:08 PM, Jens Rehsack wrote:
> 
> I'm fine with both when you assure that you handle any request regarding
> that topic ;)
> 
> So when I'm going to rename the files (fine for me), than you have to
> fight with requests about file/patch-dir names from community ... :P
> 

Fine!
I think Otavio will also support us ;-)


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 15:49             ` Richard Leitner
@ 2015-10-29 16:03               ` Otavio Salvador
  2015-10-29 18:51                 ` Richard Leitner
  0 siblings, 1 reply; 23+ messages in thread
From: Otavio Salvador @ 2015-10-29 16:03 UTC (permalink / raw)
  To: OpenEmbedded Devel List

On Thu, Oct 29, 2015 at 1:49 PM, Richard Leitner
<richard.leitner@skidata.com> wrote:
> On 10/29/2015 01:24 PM, Otavio Salvador wrote:
>> On Thu, Oct 29, 2015 at 9:54 AM, Richard Leitner
>> <richard.leitner@skidata.com> wrote:
>>> On 10/29/2015 12:24 PM, Jens Rehsack wrote:
>>>>
>>>>> Am 29.10.2015 um 11:46 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
>>>>>
>>>>> On Thu, Oct 29, 2015 at 7:22 AM, Jens Rehsack <rehsack@gmail.com> wrote:
>>>>>>> Am 29.10.2015 um 08:41 schrieb Richard Leitner <richard.leitner@skidata.com>:
>>>>>>> To cite Otavio:
>>>>>>> We could rename the patches directory for openjdk-7 and avoid the
>>>>>>> version number on it. This would make easier for upgrades and to see
>>>>>>> the diff between the patches.
>>>>>>
>>>>>> So git diff -M doesn't work for you? I don't understand the reasoning.
>>>>>
>>>>> It does but reusing the directory easy the upgrade and as the
>>>>> openjdk-8 is in maintenance it is expected that it does not change
>>>>> much in the patches.
>>>>
>>>> Partial. As I told you, I updated OpenJDK from 8u40 to 8u72 when I first
>>>> encountered massive crashes on the target device with zeroshark until
>>>> llvm guys told me, that legacy JIT for ARM was utterly broken and they
>>>> force people to MCJIT.
>>>>
>>>> Having both directories during the upgrade helped me massively to
>>>> avoid breaking patches by fixing against new upstream adoptions.
>>>>
>>>> Surely, this could be handled developer-side by keeping an foo.old
>>>> directory - but it smells the same smell ;)
>>>>
>>>> I don't fight against renaming the directory, I just argue, both
>>>> way have their own kind of smell.
>>>>
>>>
>>> I really understand both sides... But for me, due to the fact we want to
>>> support only one version of each OpenJDK release, the patch directory
>>> without version has "a better smell" ;-)
>>>
>>> I would also go one step further and omit the version from
>>> openjdk-7-release-*.inc. Then the version number is only included in the
>>> name of the openjdk-7_*.bb file.
>>>
>>> But I'm open to any discussion! So what do you think about it?
>>
>> I agree; and if we possible fix the indenting and reduce the
>> indirection (reducing the number .inc files, for example) I would
>> support :-D
>>
>
> Ok, i will prepare a patch for fixing the filenames in openjdk-7.
>
> What indentation should be chosen? Tabs? Spaces (how much)?
> Maybe I have also time to fix that in the recipes-core.

I would prefer 4 spaces.

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 16:03               ` Otavio Salvador
@ 2015-10-29 18:51                 ` Richard Leitner
  2015-10-29 18:59                   ` Otavio Salvador
  0 siblings, 1 reply; 23+ messages in thread
From: Richard Leitner @ 2015-10-29 18:51 UTC (permalink / raw)
  To: openembedded-devel

On 10/29/2015 05:03 PM, Otavio Salvador wrote:
> On Thu, Oct 29, 2015 at 1:49 PM, Richard Leitner
> <richard.leitner@skidata.com> wrote:
>>
>> What indentation should be chosen? Tabs? Spaces (how much)?
>> Maybe I have also time to fix that in the recipes-core.
> 
> I would prefer 4 spaces.
> 

Generally I prefer real tabs displayed with 8 spaces width (like the
linux kernel coding style). But of course I will stick to the formatting
rules if we have one in OE layers ;-)

Is there a generally considered rule/advisory across all OE layers or
meta-java?
If yes, where do I find it?
If no, wouldn't that be a good idea? (and of course write it down!)

best regards,
Richard L


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 18:51                 ` Richard Leitner
@ 2015-10-29 18:59                   ` Otavio Salvador
  2015-11-03 10:25                     ` Jens Rehsack
  0 siblings, 1 reply; 23+ messages in thread
From: Otavio Salvador @ 2015-10-29 18:59 UTC (permalink / raw)
  To: OpenEmbedded Devel List

On Thu, Oct 29, 2015 at 4:51 PM, Richard Leitner
<richard.leitner@skidata.com> wrote:
> On 10/29/2015 05:03 PM, Otavio Salvador wrote:
>> On Thu, Oct 29, 2015 at 1:49 PM, Richard Leitner
>> <richard.leitner@skidata.com> wrote:
>>>
>>> What indentation should be chosen? Tabs? Spaces (how much)?
>>> Maybe I have also time to fix that in the recipes-core.
>>
>> I would prefer 4 spaces.
>>
>
> Generally I prefer real tabs displayed with 8 spaces width (like the
> linux kernel coding style). But of course I will stick to the formatting
> rules if we have one in OE layers ;-)
>
> Is there a generally considered rule/advisory across all OE layers or
> meta-java?
> If yes, where do I find it?
> If no, wouldn't that be a good idea? (and of course write it down!)

http://www.openembedded.org/wiki/Styleguide

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-29 18:59                   ` Otavio Salvador
@ 2015-11-03 10:25                     ` Jens Rehsack
  0 siblings, 0 replies; 23+ messages in thread
From: Jens Rehsack @ 2015-11-03 10:25 UTC (permalink / raw)
  To: openembedded-devel


> Am 29.10.2015 um 19:59 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
> 
> On Thu, Oct 29, 2015 at 4:51 PM, Richard Leitner
> <richard.leitner@skidata.com> wrote:
>> On 10/29/2015 05:03 PM, Otavio Salvador wrote:
>>> On Thu, Oct 29, 2015 at 1:49 PM, Richard Leitner
>>> <richard.leitner@skidata.com> wrote:
>>>> 
>>>> What indentation should be chosen? Tabs? Spaces (how much)?
>>>> Maybe I have also time to fix that in the recipes-core.
>>> 
>>> I would prefer 4 spaces.
>>> 
>> 
>> Generally I prefer real tabs displayed with 8 spaces width (like the
>> linux kernel coding style). But of course I will stick to the formatting
>> rules if we have one in OE layers ;-)
>> 
>> Is there a generally considered rule/advisory across all OE layers or
>> meta-java?
>> If yes, where do I find it?
>> If no, wouldn't that be a good idea? (and of course write it down!)
> 
> http://www.openembedded.org/wiki/Styleguide

I reformatted the indent to 4 spaces and renamed the patch directory.

The include files can't be reduced in a sane way, because openjdk-8 patch
provides 3 recipes at once:

* openjdk-8-native - which is provided for Java7 with recipes-core/icedtea7 instead of embedding it into recipes-core/openjdk
* openjdk-8 - provides full JDK for target (compiled j2sdk image)
* openjre-8 - provides the plain JRE (compiled j2re image)

That's a huge difference to the existing icedtea7/openjdk-7 combo, which provides 2 recipes and a dedicated package for openjdk-7-jre which contains some jdk relicts. 

So all 3 recipes includes the include file for the concrete HG URI's and checksums for the given release, then either the native or cross inc for building and they have shared code in common inc. Theoretically the URI's and checksums can be moved into common.inc - but this increases entropy in common.inc for decreasing entropy in directory, but mixing information that don't belong together.

Best regards
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-30 12:59       ` Otavio Salvador
@ 2015-10-30 13:26         ` Jens Rehsack
  0 siblings, 0 replies; 23+ messages in thread
From: Jens Rehsack @ 2015-10-30 13:26 UTC (permalink / raw)
  To: openembedded-devel


> Am 30.10.2015 um 13:59 schrieb Otavio Salvador <otavio.salvador@ossystems.com.br>:
> 
> On Fri, Oct 30, 2015 at 10:41 AM, Kaaria, Erkka <erkka.kaaria@intel.com> wrote:
>> I don't know if there are actually any issues when bootstrapping with openjdk-8-native. I just wanted to raise the issue as the openjdk build readme warns against this.
> 
> Use a "-c cleanall" for openjdk-8 and confirm the binary files are
> updated. Jens, please do the same.
> 
> So we guarantee the md5 are real.

I don't get what I shall do now beside a rebuild and an "ls -l".
Can someone explain me more detailed what is expected?

Cheers
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-30 12:41     ` Kaaria, Erkka
  2015-10-30 12:59       ` Otavio Salvador
@ 2015-10-30 13:23       ` Jens Rehsack
  1 sibling, 0 replies; 23+ messages in thread
From: Jens Rehsack @ 2015-10-30 13:23 UTC (permalink / raw)
  To: openembedded-devel


> Am 30.10.2015 um 13:41 schrieb Kaaria, Erkka <erkka.kaaria@intel.com>:
> 
>> -----Original Message-----
>> From: openembedded-devel-bounces@lists.openembedded.org
>> [mailto:openembedded-devel-bounces@lists.openembedded.org] On
>> Behalf Of Jens Rehsack
>> Sent: Friday, October 30, 2015 1:47 PM
>> To: openembedded-devel@lists.openembedded.org
>> Subject: Re: [oe] [meta-java][PATCH 4/4] openjdk-8: add recipes for
>> openjdk-8 and openjre-8
>> 
>> <snip>
>> 
>>> Also, the openjdk-8-cross.inc currently uses openjdk-8-native as the
>> boostrap jdk for the openjkd/openjre-8. The build readme
>> (http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html)
>> however suggests  that you should use the previous jdk version as the
>> boostrap jdk and that using openjdk 8 to boostrap openjdk 8 may introduce
>> unwanted dependencies. Perhaps using icedtea7-native would be better
>> here?
>> 
>> openjdk-8-native uses icedtea7-native to bootstrap, openjdk-8 and openjre-
>> 8 use openjdk-8-native to bootstrap.
>> Can you explain which unwanted dependency openjdk-8-native might
>> introduce you don't even have by using icedtea7-native?
>> 
>> Cheers
>> --
>> Jens Rehsack - rehsack@gmail.com
>> 
>> --
>> _______________________________________________
>> Openembedded-devel mailing list
>> Openembedded-devel@lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-devel
> 
> Hi, 
> 
> I don't know if there are actually any issues when bootstrapping with openjdk-8-native. I just wanted to raise the issue as the openjdk build readme warns against this. 

Wow, the exact phrasing is:

> Building JDK 8 requires use of a version of JDK 7 that is at Update 7 or newer. JDK 8 developers should not use JDK 8 as the boot JDK, to ensure that JDK 8 dependencies are not introduced into the parts of the system that are built with JDK 7.


So: If you intend to develop on JDK 8, don't use JDK 8 as boot JDK.

That is, to avoid that building JDK 8 requires JDK 8.

We're packagers, we're not the target for neither the warning nor use-case ;)

Best regards
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-30 12:41     ` Kaaria, Erkka
@ 2015-10-30 12:59       ` Otavio Salvador
  2015-10-30 13:26         ` Jens Rehsack
  2015-10-30 13:23       ` Jens Rehsack
  1 sibling, 1 reply; 23+ messages in thread
From: Otavio Salvador @ 2015-10-30 12:59 UTC (permalink / raw)
  To: OpenEmbedded Devel List

On Fri, Oct 30, 2015 at 10:41 AM, Kaaria, Erkka <erkka.kaaria@intel.com> wrote:
> I don't know if there are actually any issues when bootstrapping with openjdk-8-native. I just wanted to raise the issue as the openjdk build readme warns against this.

Use a "-c cleanall" for openjdk-8 and confirm the binary files are
updated. Jens, please do the same.

So we guarantee the md5 are real.

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-30 11:46   ` Jens Rehsack
@ 2015-10-30 12:41     ` Kaaria, Erkka
  2015-10-30 12:59       ` Otavio Salvador
  2015-10-30 13:23       ` Jens Rehsack
  0 siblings, 2 replies; 23+ messages in thread
From: Kaaria, Erkka @ 2015-10-30 12:41 UTC (permalink / raw)
  To: openembedded-devel

> -----Original Message-----
> From: openembedded-devel-bounces@lists.openembedded.org
> [mailto:openembedded-devel-bounces@lists.openembedded.org] On
> Behalf Of Jens Rehsack
> Sent: Friday, October 30, 2015 1:47 PM
> To: openembedded-devel@lists.openembedded.org
> Subject: Re: [oe] [meta-java][PATCH 4/4] openjdk-8: add recipes for
> openjdk-8 and openjre-8
> 
> <snip>
>
> > Also, the openjdk-8-cross.inc currently uses openjdk-8-native as the
> boostrap jdk for the openjkd/openjre-8. The build readme
> (http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html)
> however suggests  that you should use the previous jdk version as the
> boostrap jdk and that using openjdk 8 to boostrap openjdk 8 may introduce
> unwanted dependencies. Perhaps using icedtea7-native would be better
> here?
> 
> openjdk-8-native uses icedtea7-native to bootstrap, openjdk-8 and openjre-
> 8 use openjdk-8-native to bootstrap.
> Can you explain which unwanted dependency openjdk-8-native might
> introduce you don't even have by using icedtea7-native?
> 
> Cheers
> --
> Jens Rehsack - rehsack@gmail.com
> 
> --
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel

Hi, 

I don't know if there are actually any issues when bootstrapping with openjdk-8-native. I just wanted to raise the issue as the openjdk build readme warns against this. 

Best Regards,
Erkka Kääriä
---------------------------------------------------------------------
Intel Finland Oy
Registered Address: PL 281, 00181 Helsinki 
Business Identity Code: 0357606 - 4 
Domiciled in Helsinki 

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-30  9:09 ` Kaaria, Erkka
@ 2015-10-30 11:46   ` Jens Rehsack
  2015-10-30 12:41     ` Kaaria, Erkka
  0 siblings, 1 reply; 23+ messages in thread
From: Jens Rehsack @ 2015-10-30 11:46 UTC (permalink / raw)
  To: openembedded-devel


> Am 30.10.2015 um 10:09 schrieb Kaaria, Erkka <erkka.kaaria@intel.com>:
> 
>> -----Original Message-----
>> From: openembedded-devel-bounces@lists.openembedded.org
>> [mailto:openembedded-devel-bounces@lists.openembedded.org] On
>> Behalf Of Jens Rehsack
>> Sent: Tuesday, October 27, 2015 10:32 PM
>> To: OE-devel <openembedded-devel@lists.openembedded.org>
>> Subject: [oe] [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8
>> and openjre-8
>> 
>> 
>> This adds openjdk-8 for native and target builds and allows a stripped
>> openjre-8 being built as well instead of trying to cherry-pick jre
>> components from jdk-image.
>> 
>> The recipes allow building openjdk-8 with or without:
>> * x11
>> * cups
>> * alsa/pulseaudio
>> and let packager enable unlimited-crypto, if desired.
>> 
>> Since there can be only one PROVIDES for virtual/java-native and
>> virtual/javac-native,
>> move the provides to openjdk-8-native (I think everyone agrees it's a better
>> choice than ecj-bootstrap-native).
>> 
>> Plus: Applying a fix from openjdk-9 repository which fixes build issues using
>> gcc5
>> 
>> Signed-off-by: Jens Rehsack <sno@netbsd.org>
>> ---
>> <snip>
>> Jens Rehsack - rehsack@gmail.com
>> 
>> --
>> _______________________________________________
>> Openembedded-devel mailing list
>> Openembedded-devel@lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-devel
> 
> Hi,
> 
> I tried applying this patch, but openjdk-8 do_fetch task failed due to multiple incorrect checksums (corba, jaxp, jaxws, openjdk).

Weird. Can this happen when a tag is rewritten?
I have several company-intern customers who didn't report that - even the last of them build last Monday (2015-10-26) for the first time.

> After fixing the checksums manually, openjdk8-fix-shark-build.patch failed due to hotspot/make/Makefile portion not applying.

Maybe I should update to a recent tag and fix those issues...

> Also, the openjdk-8-cross.inc currently uses openjdk-8-native as the boostrap jdk for the openjkd/openjre-8. The build readme (http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html) however suggests  that you should use the previous jdk version as the boostrap jdk and that using openjdk 8 to boostrap openjdk 8 may introduce unwanted dependencies. Perhaps using icedtea7-native would be better here?

openjdk-8-native uses icedtea7-native to bootstrap, openjdk-8 and openjre-8 use openjdk-8-native to bootstrap.
Can you explain which unwanted dependency openjdk-8-native might introduce you don't even have by using icedtea7-native?

Cheers
-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
  2015-10-27 20:31 Jens Rehsack
@ 2015-10-30  9:09 ` Kaaria, Erkka
  2015-10-30 11:46   ` Jens Rehsack
  0 siblings, 1 reply; 23+ messages in thread
From: Kaaria, Erkka @ 2015-10-30  9:09 UTC (permalink / raw)
  To: openembedded-devel

> -----Original Message-----
> From: openembedded-devel-bounces@lists.openembedded.org
> [mailto:openembedded-devel-bounces@lists.openembedded.org] On
> Behalf Of Jens Rehsack
> Sent: Tuesday, October 27, 2015 10:32 PM
> To: OE-devel <openembedded-devel@lists.openembedded.org>
> Subject: [oe] [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8
> and openjre-8
> 
> 
> This adds openjdk-8 for native and target builds and allows a stripped
> openjre-8 being built as well instead of trying to cherry-pick jre
> components from jdk-image.
> 
> The recipes allow building openjdk-8 with or without:
> * x11
> * cups
> * alsa/pulseaudio
> and let packager enable unlimited-crypto, if desired.
> 
> Since there can be only one PROVIDES for virtual/java-native and
> virtual/javac-native,
> move the provides to openjdk-8-native (I think everyone agrees it's a better
> choice than ecj-bootstrap-native).
> 
> Plus: Applying a fix from openjdk-9 repository which fixes build issues using
> gcc5
> 
> Signed-off-by: Jens Rehsack <sno@netbsd.org>
> ---
> <snip>
> Jens Rehsack - rehsack@gmail.com
> 
> --
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel

Hi,

I tried applying this patch, but openjdk-8 do_fetch task failed due to multiple incorrect checksums (corba, jaxp, jaxws, openjdk).

After fixing the checksums manually, openjdk8-fix-shark-build.patch failed due to hotspot/make/Makefile portion not applying.

Also, the openjdk-8-cross.inc currently uses openjdk-8-native as the boostrap jdk for the openjkd/openjre-8. The build readme (http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html) however suggests  that you should use the previous jdk version as the boostrap jdk and that using openjdk 8 to boostrap openjdk 8 may introduce unwanted dependencies. Perhaps using icedtea7-native would be better here?

Best Regards,
Erkka Kääriä
---------------------------------------------------------------------
Intel Finland Oy
Registered Address: PL 281, 00181 Helsinki 
Business Identity Code: 0357606 - 4 
Domiciled in Helsinki 

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8
@ 2015-10-27 20:31 Jens Rehsack
  2015-10-30  9:09 ` Kaaria, Erkka
  0 siblings, 1 reply; 23+ messages in thread
From: Jens Rehsack @ 2015-10-27 20:31 UTC (permalink / raw)
  To: OE-devel


This adds openjdk-8 for native and target builds and allows a stripped
openjre-8 being built as well instead of trying to cherry-pick jre
components from jdk-image.

The recipes allow building openjdk-8 with or without:
* x11
* cups
* alsa/pulseaudio
and let packager enable unlimited-crypto, if desired.

Since there can be only one PROVIDES for virtual/java-native and virtual/javac-native,
move the provides to openjdk-8-native (I think everyone agrees it's a better
choice than ecj-bootstrap-native).

Plus: Applying a fix from openjdk-9 repository which fixes build issues using gcc5

Signed-off-by: Jens Rehsack <sno@netbsd.org>
---
 README                                             |   26 +-
 recipes-core/cacao/cacao_1.6.1.bb                  |    2 +-
 recipes-core/ecj/ecj-bootstrap-native.bb           |    2 -
 recipes-core/openjdk/openjdk-8-72b00/LICENSE       |  347 +++
 .../dont-expect-fqpn-for-make.patch                |   18 +
 .../openjdk-8-72b00/filter-aclocal-copy-too.patch  |   11 +
 recipes-core/openjdk/openjdk-8-72b00/jvm.cfg       |   41 +
 .../openjdk8-find-compiler-fix-env-respect.patch   |  140 +
 .../openjdk-8-72b00/openjdk8-fix-shark-build.patch |  453 ++++
 .../openjdk8-fix-shark-stdc++11.patch              | 2730 ++++++++++++++++++++
 .../openjdk8-no-genx11-in-headless.patch           |   17 +
 .../openjdk-8-72b00/openjdk8-no-unused-deps.patch  |   94 +
 ...o-in-favour-of-openembedded-package-split.patch |  120 +
 .../openjdk8-restrict-to-staging-dir.patch         |   11 +
 ..._than_returning_address_of_local_variable.patch |   23 +
 .../remove-shell-variables-from-autoheader.patch   |   31 +
 recipes-core/openjdk/openjdk-8-common.inc          |  229 ++
 recipes-core/openjdk/openjdk-8-cross.inc           |  202 ++
 recipes-core/openjdk/openjdk-8-native.inc          |   63 +
 recipes-core/openjdk/openjdk-8-native_72b00.bb     |   16 +
 recipes-core/openjdk/openjdk-8-release-72b00.inc   |   89 +
 recipes-core/openjdk/openjdk-8_72b00.bb            |   36 +
 recipes-core/openjdk/openjre-8_72b00.bb            |   30 +
 23 files changed, 4706 insertions(+), 25 deletions(-)
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/LICENSE
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch
 create mode 100644 recipes-core/openjdk/openjdk-8-common.inc
 create mode 100644 recipes-core/openjdk/openjdk-8-cross.inc
 create mode 100644 recipes-core/openjdk/openjdk-8-native.inc
 create mode 100644 recipes-core/openjdk/openjdk-8-native_72b00.bb
 create mode 100644 recipes-core/openjdk/openjdk-8-release-72b00.inc
 create mode 100644 recipes-core/openjdk/openjdk-8_72b00.bb
 create mode 100644 recipes-core/openjdk/openjre-8_72b00.bb

diff --git a/README b/README
index f031021..6cd5ee1 100644
--- a/README
+++ b/README
@@ -52,28 +52,10 @@ Main layer maintainers:
 Usage instructions
 ------------------
 
-You should define at least the following variables in a distro include file or local.conf
+Since there is a clear bootstrap of the individual java-recipes, there is
+nothing to configure in conf/local.conf nor your individual distro/$name.conf.
 
-PREFERRED_PROVIDER_virtual/java-initial-native = "cacao-initial-native"
-
-PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
-PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
-
-#For openjdk6:
-#PREFERRED_VERSION_openjdk-6-jre = "6b24-1.11.9"
-#or
-#PREFERRED_VERSION_openjdk-6-jre = "6b27-1.12.8"
-#or
-PREFERRED_VERSION_openjdk-6-jre = "6b32-1.13.4"
-PREFERRED_VERSION_icedtea6-native = "1.8.11"
-
-#For openjdk7:
-PREFERRED_VERSION_openjdk-7-jre = "85b01-2.6.1"
-PREFERRED_VERSION_icedtea7-native = "2.1.3"
-
-#Sometimes the following is needed:
-PREFERRED_PROVIDER_openjdk-6-jre = "openjdk-6-jre"
-PREFERRED_PROVIDER_openjdk-7-jre = "openjdk-7-jre"
+Simply rely on openjdk-7-jre, openjdk-7, openjdk-8 or openjre-8.
 
 For conf/bblayers.conf you have to add
 
@@ -83,7 +65,7 @@ BBLAYERS ?= " \
   path_to_source/sources/meta-java \
   "
 
-Please note that libstdc++ static is needed on your host to compile icedtea6/7-native
+Please note that libstdc++ static is needed on your host to compile icedtea7-native
 (install libstdc++-static on a Fedora).
 
 For debian-based distributions you need the libstdc++6-$compilerversion-dev package.
diff --git a/recipes-core/cacao/cacao_1.6.1.bb b/recipes-core/cacao/cacao_1.6.1.bb
index ae06b50..c97ab09 100644
--- a/recipes-core/cacao/cacao_1.6.1.bb
+++ b/recipes-core/cacao/cacao_1.6.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
 SECTION  = "interpreters"
 
 DEPENDS_class-native = "zlib-native libtool-native ecj-initial-native fastjar-native classpath-native bdwgc-native"
-PROVIDES_class-native = "virtual/java-native"
+#PROVIDES_class-native = "virtual/java-native"
 
 DEPENDS_class-target = " virtual/javac-native "
 
diff --git a/recipes-core/ecj/ecj-bootstrap-native.bb b/recipes-core/ecj/ecj-bootstrap-native.bb
index a4a1c17..28414c2 100644
--- a/recipes-core/ecj/ecj-bootstrap-native.bb
+++ b/recipes-core/ecj/ecj-bootstrap-native.bb
@@ -14,8 +14,6 @@ PR = "r1"
 
 DEPENDS = "libecj-bootstrap-native cacao-native"
 
-PROVIDES = "virtual/javac-native"
-
 SRC_URI = "file://ecj.in"
 
 S = "${WORKDIR}"
diff --git a/recipes-core/openjdk/openjdk-8-72b00/LICENSE b/recipes-core/openjdk/openjdk-8-72b00/LICENSE
new file mode 100644
index 0000000..b40a0f4
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/LICENSE
@@ -0,0 +1,347 @@
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it.  By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.  This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights.  These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have.  You must
+make sure that they, too, receive or can get the source code.  And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.  We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language.  (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope.  The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program).  Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+    a) You must cause the modified files to carry prominent notices stating
+    that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in whole or
+    in part contains or is derived from the Program or any part thereof, to be
+    licensed as a whole at no charge to all third parties under the terms of
+    this License.
+
+    c) If the modified program normally reads commands interactively when run,
+    you must cause it, when started running for such interactive use in the
+    most ordinary way, to print or display an announcement including an
+    appropriate copyright notice and a notice that there is no warranty (or
+    else, saying that you provide a warranty) and that users may redistribute
+    the program under these conditions, and telling the user how to view a copy
+    of this License.  (Exception: if the Program itself is interactive but does
+    not normally print such an announcement, your work based on the Program is
+    not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works.  But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable source
+    code, which must be distributed under the terms of Sections 1 and 2 above
+    on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three years, to
+    give any third party, for a charge no more than your cost of physically
+    performing source distribution, a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of Sections 1
+    and 2 above on a medium customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer to
+    distribute corresponding source code.  (This alternative is allowed only
+    for noncommercial distribution and only if you received the program in
+    object code or executable form with such an offer, in accord with
+    Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it.  For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable.  However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works.  These actions are prohibited by law if you do not
+accept this License.  Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein.  You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License.  If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices.  Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded.  In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time.  Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission.  For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+    One line to give the program's name and a brief idea of what it does.
+
+    Copyright (C) <year> <name of author>
+
+    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
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
+    software, and you are welcome to redistribute it under certain conditions;
+    type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
+is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+    'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+    signature of Ty Coon, 1 April 1989
+
+    Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+    Linking this library statically or dynamically with other modules is making
+    a combined work based on this library.  Thus, the terms and conditions of
+    the GNU General Public License cover the whole combination.
+
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent modules,
+    and to copy and distribute the resulting executable under terms of your
+    choice, provided that you also meet, for each linked independent module,
+    the terms and conditions of the license of that module.  An independent
+    module is a module which is not derived from or based on this library.  If
+    you modify this library, you may extend this exception to your version of
+    the library, but you are not obligated to do so.  If you do not wish to do
+    so, delete this exception statement from your version.
diff --git a/recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch b/recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
new file mode 100644
index 0000000..a8a9c1d
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/dont-expect-fqpn-for-make.patch
@@ -0,0 +1,18 @@
+--- common/autoconf/basics.m4.orig	2015-08-17 19:05:13.122672019 +0200
++++ common/autoconf/basics.m4	2015-08-17 19:13:01.482673782 +0200
+@@ -549,10 +549,12 @@
+   # We need to find a recent version of GNU make. Especially on Solaris, this can be tricky.
+   if test "x$MAKE" != x; then
+     # User has supplied a make, test it.
+-    if test ! -f "$MAKE"; then
+-      AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not found.])
++    if test -a `dirname "$MAKE"` = "." -a ! -f "$MAKE"; then
++      AC_PATH_PROGS(CHECK_MAKE, $MAKE)
++    else
++      CHECK_MAKE="${MAKE}"
+     fi
+-    BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE])
++    BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [user supplied MAKE=$MAKE])
+     if test "x$FOUND_MAKE" = x; then
+       AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer.])
+     fi
diff --git a/recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch b/recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
new file mode 100644
index 0000000..4679c9d
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/filter-aclocal-copy-too.patch
@@ -0,0 +1,11 @@
+--- common/autoconf/basics.m4.orig	2015-08-17 18:31:50.598664481 +0200
++++ common/autoconf/basics.m4	2015-08-17 18:31:57.554664507 +0200
+@@ -442,7 +442,7 @@
+       files_present=`$LS $OUTPUT_ROOT`
+       # Configure has already touched config.log and confdefs.h in the current dir when this check
+       # is performed.
+-      filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's/ //g' \
++      filtered_files=`$ECHO "$files_present" | $SED -e 's/config.log//g' -e 's/confdefs.h//g' -e 's,aclocal-copy,,g' -e 's/ //g' \
+       | $TR -d '\n'`
+       if test "x$filtered_files" != x; then
+         AC_MSG_NOTICE([Current directory is $CURDIR.])
diff --git a/recipes-core/openjdk/openjdk-8-72b00/jvm.cfg b/recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
new file mode 100644
index 0000000..1a55ec6
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/jvm.cfg
@@ -0,0 +1,41 @@
+# Copyright 2003 Sun Microsystems, Inc.  All Rights Reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+# 
+# List of JVMs that can be used as an option to java, javac, etc.
+# Order is important -- first in this list is the default JVM.
+# NOTE that this both this file and its format are UNSUPPORTED and
+# WILL GO AWAY in a future release.
+#
+# You may also select a JVM in an arbitrary location with the
+# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
+# and may not be available in a future release.
+#
+-server ERROR
+-client IGNORE
+-hotspot ERROR
+-classic WARN
+-native ERROR
+-green ERROR
+-zero ALIASED_TO -server
+-shark ERROR
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
new file mode 100644
index 0000000..b31deae
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-find-compiler-fix-env-respect.patch
@@ -0,0 +1,140 @@
+--- common/autoconf/toolchain.m4.orig	2015-08-07 20:52:38.000000000 +0200
++++ common/autoconf/toolchain.m4	2015-10-27 13:57:19.708566525 +0100
+@@ -27,7 +27,7 @@
+ # $2 = human readable name of compiler (C or C++)
+ AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION],
+ [
+-  COMPILER=[$]$1
++  COMPILER="[$]$1"
+   COMPILER_NAME=$2
+ 
+   if test "x$OPENJDK_TARGET_OS" = xsolaris; then
+@@ -123,64 +123,37 @@
+ [
+   COMPILER_NAME=$2
+ 
+-  $1=
++  FOUND_$1=
++
++  if test "x[$]$1" != "x"; then
++    FOUND_$1="[$]$1"
++  fi
++
+   # If TOOLS_DIR is set, check for all compiler names in there first
+   # before checking the rest of the PATH.
+-  if test -n "$TOOLS_DIR"; then
++  if test "x[$]FOUND_$1" = x -a -n "$TOOLS_DIR"; then
+     PATH_save="$PATH"
+     PATH="$TOOLS_DIR"
+     AC_PATH_PROGS(TOOLS_DIR_$1, $3)
+-    $1=$TOOLS_DIR_$1
++    FOUND_$1=$TOOLS_DIR_$1
+     PATH="$PATH_save"
+   fi
+ 
+   # AC_PATH_PROGS can't be run multiple times with the same variable,
+   # so create a new name for this run.
+-  if test "x[$]$1" = x; then
++  if test "x[$]FOUND_$1" = x; then
+     AC_PATH_PROGS(POTENTIAL_$1, $3)
+-    $1=$POTENTIAL_$1
++    FOUND_$1=$POTENTIAL_$1
+   fi
+ 
+-  if test "x[$]$1" = x; then
++  if test "x[$]FOUND_$1" = x; then
+     HELP_MSG_MISSING_DEPENDENCY([devkit])
+     AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG])
+   fi
+-  BASIC_FIXUP_EXECUTABLE($1)
+-  TEST_COMPILER="[$]$1"
+-  # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links
+-  # to 'xlc' but it is crucial that we invoke the compiler with the right name!
+-  if test "x$OPENJDK_BUILD_OS" != xaix; then
+-    AC_MSG_CHECKING([resolved symbolic links for $1])
+-    BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER)
+-    AC_MSG_RESULT([$TEST_COMPILER])
+-  fi
+-  AC_MSG_CHECKING([if $1 is disguised ccache])
+-
+-  COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"`
+-  if test "x$COMPILER_BASENAME" = "xccache"; then
+-    AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler])
+-    # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache.
+-    # We want to control ccache invocation ourselves, so ignore this cc and try
+-    # searching again.
+-
+-    # Remove the path to the fake ccache cc from the PATH
+-    RETRY_COMPILER_SAVED_PATH="$PATH"
+-    COMPILER_DIRNAME=`$DIRNAME [$]$1`
+-    PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`"
+-
+-    # Try again looking for our compiler
+-    AC_CHECK_TOOLS(PROPER_COMPILER_$1, $3)
+-    BASIC_FIXUP_EXECUTABLE(PROPER_COMPILER_$1)
+-    PATH="$RETRY_COMPILER_SAVED_PATH"
+-
+-    AC_MSG_CHECKING([for resolved symbolic links for $1])
+-    BASIC_REMOVE_SYMBOLIC_LINKS(PROPER_COMPILER_$1)
+-    AC_MSG_RESULT([$PROPER_COMPILER_$1])
+-    $1="$PROPER_COMPILER_$1"
+-  else
+-    AC_MSG_RESULT([no, keeping $1])
+-    $1="$TEST_COMPILER"
+-  fi
++  BASIC_FIXUP_EXECUTABLE(FOUND_$1)
++  TEST_COMPILER="[$]FOUND_$1"
++
++  $1="$TEST_COMPILER"
+   TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME])
+ ])
+ 
+@@ -214,12 +187,12 @@
+     # otherwise we might pick up cross-compilers which don't use standard naming.
+     # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have
+     # to wait until they are properly discovered.
+-    AC_PATH_PROGS(BUILD_CC, [cl cc gcc])
+-    BASIC_FIXUP_EXECUTABLE(BUILD_CC)
+-    AC_PATH_PROGS(BUILD_CXX, [cl CC g++])
+-    BASIC_FIXUP_EXECUTABLE(BUILD_CXX)
+-    AC_PATH_PROG(BUILD_LD, ld)
+-    BASIC_FIXUP_EXECUTABLE(BUILD_LD)
++    AS_IF([test "x${BUILD_CC}" = "x"], [AC_PATH_PROGS(BUILD_CC, [cl cc gcc])
++    BASIC_FIXUP_EXECUTABLE(BUILD_CC)])
++    AS_IF([test "x${BUILD_CXX}" = "x"], [AC_PATH_PROGS(BUILD_CXX, [cl CC g++])
++    BASIC_FIXUP_EXECUTABLE(BUILD_CXX)])
++    AS_IF([test "x${BUILD_LD}" = "x"], [AC_PATH_PROG(BUILD_LD, ld)
++    BASIC_FIXUP_EXECUTABLE(BUILD_LD)])
+   fi
+   AC_SUBST(BUILD_CC)
+   AC_SUBST(BUILD_CXX)
+--- common/autoconf/basics.m4.orig	2015-08-31 15:03:54.942975387 +0200
++++ common/autoconf/basics.m4	2015-08-31 15:02:25.090975049 +0200
+@@ -171,8 +171,15 @@
+       fi
+     fi
+ 
++    # First separate the path from the arguments. This will split at the first
++    # space.
++    complete="[$]$1"
++    path="${complete%% *}"
++    tmp="$complete EOL"
++    arguments="${tmp#* }"
++
+     if test "x$READLINK" != x; then
+-      $1=`$READLINK -f [$]$1`
++      new_path=`$READLINK -f $path`
+     else
+       # Save the current directory for restoring afterwards
+       STARTDIR=$PWD
+@@ -198,8 +205,9 @@
+         let COUNTER=COUNTER+1
+       done
+       cd $STARTDIR
+-      $1=$sym_link_dir/$sym_link_file
++      new_path=$sym_link_dir/$sym_link_file
+     fi
++    $1="$new_path ${arguments% *}"
+   fi
+ ])
+ 
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
new file mode 100644
index 0000000..889c323
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-build.patch
@@ -0,0 +1,453 @@
+--- hotspot/make/Makefile.orig	2015-08-31 19:44:44.459038814 +0200
++++ hotspot/make/Makefile	2015-08-31 19:44:58.511038867 +0200
+@@ -525,7 +525,7 @@
+ # Unix
+ $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_BUILD_DIR)/%.$(LIBRARY_SUFFIX)
+ 	$(install-file)
+-$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo):	$(SHARK_BUILD_DIR)/%.debuginfo
++$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo:		$(SHARK_BUILD_DIR)/%.debuginfo
+ 	$(install-file)
+ $(EXPORT_JRE_LIB_ARCH_DIR)/%.diz:		$(SHARK_BUILD_DIR)/%.diz
+ 	$(install-file)
+--- hotspot/src/share/vm/ci/ciTypeFlow.cpp.orig	2015-08-31 19:45:28.611038980 +0200
++++ hotspot/src/share/vm/ci/ciTypeFlow.cpp	2015-08-31 19:47:17.539039390 +0200
+@@ -35,7 +35,9 @@
+ #include "interpreter/bytecode.hpp"
+ #include "interpreter/bytecodes.hpp"
+ #include "memory/allocation.inline.hpp"
+-#include "opto/compile.hpp"
++#ifdef COMPILER2
++#include "opto/compile.hpp"
+ #include "opto/node.hpp"
++#endif
+ #include "runtime/deoptimization.hpp"
+ #include "utilities/growableArray.hpp"
+@@ -2647,6 +2649,7 @@
+       assert (!blk->has_pre_order(), "");
+       blk->set_next_pre_order();
+ 
++#ifdef COMPILER2
+       if (_next_pre_order >= (int)Compile::current()->max_node_limit() / 2) {
+         // Too many basic blocks.  Bail out.
+         // This can happen when try/finally constructs are nested to depth N,
+@@ -2656,6 +2659,7 @@
+         record_failure("too many basic blocks");
+         return;
+       }
++#endif
+       if (do_flow) {
+         flow_block(blk, temp_vector, temp_set);
+         if (failing()) return; // Watch for bailouts.
+--- hotspot/src/share/vm/classfile/systemDictionary.cpp.orig	2015-08-31 19:50:00.367040003 +0200
++++ hotspot/src/share/vm/classfile/systemDictionary.cpp	2015-08-31 19:51:28.323040334 +0200
+@@ -2276,6 +2276,7 @@
+     spe = NULL;
+     // Must create lots of stuff here, but outside of the SystemDictionary lock.
+     m = Method::make_method_handle_intrinsic(iid, signature, CHECK_(empty));
++#ifndef SHARK
+     if (!Arguments::is_interpreter_only()) {
+       // Generate a compiled form of the MH intrinsic.
+       AdapterHandlerLibrary::create_native_wrapper(m);
+@@ -2285,6 +2286,7 @@
+                    "out of space in CodeCache for method handle intrinsic", empty);
+       }
+     }
++#endif
+     // Now grab the lock.  We might have to throw away the new method,
+     // if a racing thread has managed to install one at the same time.
+     {
+@@ -2298,9 +2300,11 @@
+   }
+ 
+   assert(spe != NULL && spe->method() != NULL, "");
++#ifndef SHARK
+   assert(Arguments::is_interpreter_only() || (spe->method()->has_compiled_code() &&
+          spe->method()->code()->entry_point() == spe->method()->from_compiled_entry()),
+          "MH intrinsic invariant");
++#endif
+   return spe->method();
+ }
+ 
+--- hotspot/src/share/vm/runtime/handles.inline.hpp.orig	2015-08-31 20:01:39.295042634 +0200
++++ hotspot/src/share/vm/runtime/handles.inline.hpp	2015-08-31 20:04:31.331043282 +0200
+@@ -51,6 +51,12 @@
+ }
+ #endif // ASSERT
+ 
++#ifdef SHARK
++#define assert_on_stack(expr) (void)(expr)
++#else
++#define assert_on_stack(expr) assert((expr), "not on stack?")
++#endif
++
+ // Constructors for metadata handles
+ #define DEF_METADATA_HANDLE_FN(name, type) \
+ inline name##Handle::name##Handle(type* obj) : _value(obj), _thread(NULL) {       \
+@@ -79,7 +85,7 @@
+     } else {                                                           \
+       _thread = Thread::current();                                     \
+     }                                                                  \
+-    assert (_thread->is_in_stack((address)this), "not on stack?");     \
++    assert_on_stack (_thread->is_in_stack((address)this));             \
+     _thread->metadata_handles()->push((Metadata*)_value);              \
+   } else {                                                             \
+     _thread = NULL;                                                    \
+--- hotspot/src/cpu/zero/vm/entry_zero.hpp.orig	2015-08-31 20:53:40.743054385 +0200
++++ hotspot/src/cpu/zero/vm/entry_zero.hpp	2015-08-31 20:53:54.459054436 +0200
+@@ -26,6 +26,10 @@
+ #ifndef CPU_ZERO_VM_ENTRY_ZERO_HPP
+ #define CPU_ZERO_VM_ENTRY_ZERO_HPP
+
++#include "utilities/globalDefinitions.hpp"
++#include "utilities/exceptions.hpp"
++#include "interpreter/cppInterpreter.hpp"
++
+ class ZeroEntry {
+  public:
+   ZeroEntry() {
+--- hotspot/src/share/vm/shark/sharkEntry.hpp.orig	2015-08-31 20:47:13.091052925 +0200
++++ hotspot/src/share/vm/shark/sharkEntry.hpp	2015-08-31 20:49:42.755053489 +0200
+@@ -27,6 +27,7 @@
+ #define SHARE_VM_SHARK_SHARKENTRY_HPP
+ 
+ #include "shark/llvmHeaders.hpp"
++#include "entry_zero.hpp"
+ 
+ class SharkContext;
+ 
+--- hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp.orig	2015-08-31 21:01:14.847056094 +0200
++++ hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp	2015-08-31 21:01:24.459056130 +0200
+@@ -30,6 +30,10 @@
+ 
+ #ifdef CC_INTERP
+ 
++#ifdef TARGET_ARCH_zero
++#include "entry_zero.hpp"
++#endif
++
+ class CppInterpreterGenerator: public AbstractInterpreterGenerator {
+   protected:
+   // shared code sequences
+--- hotspot/src/cpu/zero/vm/nativeInst_zero.cpp.orig	2015-08-31 21:07:21.643057475 +0200
++++ hotspot/src/cpu/zero/vm/nativeInst_zero.cpp	2015-08-31 21:14:49.019059159 +0200
+@@ -26,6 +26,9 @@
+ #include "precompiled.hpp"
+ #include "assembler_zero.inline.hpp"
+ #include "memory/resourceArea.hpp"
++#ifdef CC_INTERP
++#include "entry_zero.hpp"
++#endif
+ #include "nativeInst_zero.hpp"
+ #include "oops/oop.inline.hpp"
+ #include "runtime/handles.hpp"
+--- hotspot/src/share/vm/shark/llvmHeaders.hpp.orig	2015-09-01 14:17:09.793868541 +0200
++++ hotspot/src/share/vm/shark/llvmHeaders.hpp	2015-09-01 16:20:25.653868618 +0200
+@@ -35,7 +35,11 @@
+   #undef DEBUG
+ #endif
+ 
++#if SHARK_LLVM_VERSION <= 34
+ #include <llvm/Analysis/Verifier.h>
++#else
++#include <llvm-c/Analysis.h>
++#endif
+ #include <llvm/ExecutionEngine/ExecutionEngine.h>
+ 
+ // includes specific to each version
+--- common/autoconf/libraries.m4.orig	2015-09-01 16:53:51.821868486 +0200
++++ common/autoconf/libraries.m4	2015-09-01 16:55:27.653868542 +0200
+@@ -847,8 +847,9 @@
+         fi
+       fi
+     done
+-    llvm_version=$("${LLVM_CONFIG}" --version | sed 's/\.//; s/svn.*//')
++    llvm_version=$("${LLVM_CONFIG}" --version | sed 's/\.//; s/svn.*//; s/\..*$//')
+     LLVM_CFLAGS="${LLVM_CFLAGS} -DSHARK_LLVM_VERSION=${llvm_version}"
++    AS_IF([test $llvm_version -ge 34], [LLVM_CFLAGS="${LLVM_CFLAGS} -std=gnu++11"])
+ 
+     unset LLVM_LDFLAGS
+     for flag in $("${LLVM_CONFIG}" --ldflags); do
+@@ -862,7 +862,7 @@
+     done
+ 
+     unset LLVM_LIBS
+-    for flag in $("${LLVM_CONFIG}" --libs ${llvm_components}); do
++    for flag in $("${LLVM_CONFIG}" --libs --system-libs ${llvm_components}); do
+       if echo "${flag}" | grep -q '^-l'; then
+         if test "${LLVM_LIBS}" != ""; then
+           LLVM_LIBS="${LLVM_LIBS} "
+--- hotspot/src/share/vm/shark/sharkIntrinsics.cpp.orig	2015-09-02 16:58:17.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkIntrinsics.cpp	2015-09-02 17:09:26.000000000 +0200
+@@ -265,7 +265,11 @@
+     "addr");
+ 
+   // Perform the operation
++#if SHARK_LLVM_VERSION <= 34
+   Value *result = builder()->CreateAtomicCmpXchg(addr, e, x, llvm::SequentiallyConsistent);
++#else
++  Value *result = builder()->CreateAtomicCmpXchg(addr, e, x, llvm::SequentiallyConsistent, llvm::SequentiallyConsistent);
++  #endif
+   // Push the result
+   state()->push(
+     SharkValue::create_jint(
+--- hotspot/src/share/vm/shark/sharkRuntime.cpp.orig	2015-09-02 17:11:58.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkRuntime.cpp	2015-09-02 17:12:57.000000000 +0200
+@@ -32,6 +32,7 @@
+ #ifdef TARGET_ARCH_zero
+ # include "stack_zero.inline.hpp"
+ #endif
++#include "memory/oopFactory.hpp"
+ 
+ using namespace llvm;
+ 
+--- hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp.orig	2015-09-02 17:23:07.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp	2015-09-02 17:43:20.000000000 +0200
+@@ -1732,7 +1732,11 @@
+     heap_object = builder()->CreateIntToPtr(
+       old_top, SharkType::oop_type(), "heap_object");
+ 
++#if SHARK_LLVM_VERSION <= 34
+     Value *check = builder()->CreateAtomicCmpXchg(top_addr, old_top, new_top, llvm::SequentiallyConsistent);
++#else
++    Value *check = builder()->CreateAtomicCmpXchg(top_addr, old_top, new_top, llvm::SequentiallyConsistent, llvm::SequentiallyConsistent);
++#endif
+     builder()->CreateCondBr(
+       builder()->CreateICmpEQ(old_top, check),
+       initialize, retry);
+@@ -1933,7 +1937,11 @@
+ 
+   Value *lock = builder()->CreatePtrToInt(
+     monitor_header_addr, SharkType::intptr_type());
++#if SHARK_LLVM_VERSION <= 34
+   Value *check = builder()->CreateAtomicCmpXchg(mark_addr, disp, lock, llvm::Acquire);
++#else
++  Value *check = builder()->CreateAtomicCmpXchg(mark_addr, disp, lock, llvm::Acquire, llvm::Acquire);
++#endif
+   builder()->CreateCondBr(
+     builder()->CreateICmpEQ(disp, check),
+     acquired_fast, try_recursive);
+@@ -2018,7 +2026,11 @@
+     PointerType::getUnqual(SharkType::intptr_type()),
+     "mark_addr");
+ 
++#if SHARK_LLVM_VERSION <= 34
+   Value *check = builder()->CreateAtomicCmpXchg(mark_addr, lock, disp, llvm::Release);
++#else
++  Value *check = builder()->CreateAtomicCmpXchg(mark_addr, lock, disp, llvm::Release, llvm::Monotonic);
++#endif
+   builder()->CreateCondBr(
+     builder()->CreateICmpEQ(lock, check),
+     released_fast, slow_path);
+--- hotspot/src/cpu/zero/vm/interpreter_zero.cpp.orig	2015-09-14 20:13:25.539432044 +0200
++++ hotspot/src/cpu/zero/vm/interpreter_zero.cpp	2015-09-14 20:13:46.107432122 +0200
+@@ -49,7 +49,7 @@
+ #ifdef COMPILER1
+ #include "c1/c1_Runtime1.hpp"
+ #endif
+-#ifdef CC_INTERP
++#if defined(CC_INTERP) || defined(SHARK)
+ #include "interpreter/cppInterpreter.hpp"
+ #endif
+ 
+--- hotspot/src/share/vm/shark/sharkCompiler.hpp.orig	2015-08-31 20:08:44.723044236 +0200
++++ hotspot/src/share/vm/shark/sharkCompiler.hpp	2015-08-31 20:08:59.387044291 +0200
+@@ -40,6 +40,8 @@
+   // Creation
+   SharkCompiler();
+ 
++  void init_llvm();
++
+   // Name of this compiler
+   const char *name()     { return "shark"; }
+ 
+--- hotspot/src/share/vm/shark/sharkCompiler.cpp.orig	2015-09-19 12:19:21.000000000 +0200
++++ hotspot/src/share/vm/shark/sharkCompiler.cpp	2015-09-19 12:27:17.000000000 +0200
+@@ -61,11 +61,25 @@
+   : AbstractCompiler() {
+   // Create the lock to protect the memory manager and execution engine
+   _execution_engine_lock = new Monitor(Mutex::leaf, "SharkExecutionEngineLock");
+-  MutexLocker locker(execution_engine_lock());
++  {
++    MutexLocker locker(execution_engine_lock());
++    init_llvm();
++  }
++  // All done
++  set_state(initialized);
++}
+ 
++void SharkCompiler::init_llvm() {
++  // with llvm 3.5, Multi-threading can only be enabled/disabled with the
++  // compile time define LLVM_ENABLE_THREADS
++#if SHARK_LLVM_VERSION <= 34
+   // Make LLVM safe for multithreading
+   if (!llvm_start_multithreaded())
+     fatal("llvm_start_multithreaded() failed");
++#else
++  if (!llvm_is_multithreaded())
++    fatal("llvm_is_multithreaded() tells no multithreading support in llvm");
++#endif
+ 
+   // Initialize the native target
+   InitializeNativeTarget();
+@@ -83,7 +97,7 @@
+   // Finetune LLVM for the current host CPU.
+   StringMap<bool> Features;
+   bool gotCpuFeatures = llvm::sys::getHostCPUFeatures(Features);
+-  std::string cpu("-mcpu=" + llvm::sys::getHostCPUName());
++  std::string cpu("-mcpu=" + std::string(llvm::sys::getHostCPUName()));
+ 
+   std::vector<const char*> args;
+   args.push_back(""); // program name
+@@ -112,6 +126,9 @@
+   builder.setMAttrs(MAttrs);
+   builder.setJITMemoryManager(memory_manager());
+   builder.setEngineKind(EngineKind::JIT);
++#if SHARK_LLVM_VERSION > 34
++  builder.setUseMCJIT(true);
++#endif
+   builder.setErrorStr(&ErrorMsg);
+   if (! fnmatch(SharkOptimizationLevel, "None", 0)) {
+     tty->print_cr("Shark optimization level set to: None");
+@@ -134,9 +151,10 @@
+   }
+ 
++#if SHARK_LLVM_VERSION > 34
++  _native_context->execution_engine(_execution_engine);
++  _normal_context->execution_engine(_execution_engine);
++#endif
+   execution_engine()->addModule(_native_context->module());
+-
+-  // All done
+-  set_state(initialized);
+ }
+ 
+ void SharkCompiler::initialize() {
+@@ -165,7 +179,7 @@
+   }
+ 
+   // Create the recorders
+-  Arena arena;
++  Arena arena(mtCompiler);
+   env->set_oop_recorder(new OopRecorder(&arena));
+   OopMapSet oopmaps;
+   env->set_debug_info(new DebugInformationRecorder(env->oop_recorder()));
+@@ -268,7 +282,12 @@
+ 
+   if (SharkVerifyFunction != NULL) {
+     if (!fnmatch(SharkVerifyFunction, name, 0)) {
++#if SHARK_LLVM_VERSION <= 34
+       verifyFunction(*function);
++#else
++      LLVMValueRef F = wrap(function);
++      LLVMVerifyFunction(F, LLVMAbortProcessAction);
++#endif
+     }
+   }
+ 
+@@ -298,7 +317,11 @@
+ #endif
+ #endif // !NDEBUG
+     memory_manager()->set_entry_for_function(function, entry);
++#if SHARK_LLVM_VERSION <= 34
+     code = (address) execution_engine()->getPointerToFunction(function);
++#else
++    code = (address) execution_engine()->getFunctionAddress(name);
++#endif
+   }
+   assert(code != NULL, "code must be != NULL");
+   entry->set_entry_point(code);
+--- hotspot/src/share/vm/shark/sharkContext.cpp.orig	2015-09-21 11:22:51.707813194 +0200
++++ hotspot/src/share/vm/shark/sharkContext.cpp	2015-09-21 13:47:56.243845961 +0200
+@@ -34,8 +34,13 @@
+ using namespace llvm;
+ 
+ SharkContext::SharkContext(const char* name)
+-  : LLVMContext(),
+-    _free_queue(NULL) {
++  : LLVMContext()
++  , _free_queue(0)
++#if SHARK_LLVM_VERSION > 34
++  , _ee(0)
++  , func_mod_map()
++#endif
++{
+   // Create a module to build our functions into
+   _module = new Module(name, *this);
+ 
+--- hotspot/src/share/vm/shark/sharkContext.hpp.orig	2015-09-21 10:58:37.195807719 +0200
++++ hotspot/src/share/vm/shark/sharkContext.hpp	2015-09-21 13:50:48.459846609 +0200
+@@ -29,6 +29,8 @@
+ #include "shark/llvmHeaders.hpp"
+ #include "shark/sharkCompiler.hpp"
+ 
++#include <map>
++
+ // The LLVMContext class allows multiple instances of LLVM to operate
+ // independently of each other in a multithreaded context.  We extend
+ // this here to store things in Shark that are LLVMContext-specific.
+@@ -41,12 +43,28 @@
+ 
+  private:
+   llvm::Module* _module;
++#if SHARK_LLVM_VERSION > 34
++  llvm::ExecutionEngine *_ee;
++  std::map<std::string, llvm::Module *> func_mod_map;
++#endif
+ 
+  public:
+   llvm::Module* module() const {
+     return _module;
+   }
+ 
++#if SHARK_LLVM_VERSION > 34
++  llvm::ExecutionEngine *execution_engine(llvm::ExecutionEngine *ee) {
++      llvm::ExecutionEngine *oee = _ee;
++      _ee = ee;
++      return oee;
++  }
++
++  llvm::ExecutionEngine *execution_engine() const {
++      return _ee;
++  }
++#endif
++
+   // Get this thread's SharkContext
+  public:
+   static SharkContext& current() {
+@@ -55,12 +73,35 @@
+ 
+   // Module accessors
+  public:
+-  void add_function(llvm::Function* function) const {
++  void add_function(llvm::Function* function) {
++#if SHARK_LLVM_VERSION <= 34
+     module()->getFunctionList().push_back(function);
++#else
++    // shark compiles modules, not functions
++    std::map<std::string, llvm::Module *>::iterator i = func_mod_map.find(function->getName().str());
++    if(func_mod_map.end() == i) {
++	llvm::Module *mod4fun = new llvm::Module(function->getName(), *this);
++	func_mod_map.insert(std::pair<std::string, llvm::Module *>(function->getName().str(), mod4fun));
++	mod4fun->getFunctionList().push_back(function);
++	_ee->addModule(mod4fun);
++    }
++#endif
+   }
+   llvm::Constant* get_external(const char*               name,
+                                llvm::FunctionType* sig) {
++    // XXX see whether we need additional module map, too
++#if SHARK_LLVM_VERSION <= 34
+     return module()->getOrInsertFunction(name, sig);
++#else
++    // shark compiles modules, not functions
++    std::map<std::string, llvm::Module *>::iterator i = func_mod_map.find(name);
++    if(func_mod_map.end() == i) {
++	llvm::Module *mod4fun = new llvm::Module(name, *this);
++	func_mod_map.insert(std::pair<std::string, llvm::Module *>(name, mod4fun));
++	mod4fun->getOrInsertFunction(name, sig);
++	_ee->addModule(mod4fun);
++    }
++#endif
+   }
+ 
+   // Basic types
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
new file mode 100644
index 0000000..31234cb
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-fix-shark-stdc++11.patch
@@ -0,0 +1,2730 @@
+--- hotspot/src/share/vm/memory/cardTableModRefBS.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/memory/cardTableModRefBS.hpp	2015-09-02 09:46:59.000000000 +0200
+@@ -158,8 +158,8 @@
+   // Mapping from address to card marking array entry
+   jbyte* byte_for(const void* p) const {
+     assert(_whole_heap.contains(p),
+-           err_msg("Attempt to access p = "PTR_FORMAT" out of bounds of "
+-                   " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")",
++           err_msg("Attempt to access p = " PTR_FORMAT " out of bounds of "
++                   " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")",
+                    p2i(p), p2i(_whole_heap.start()), p2i(_whole_heap.end())));
+     jbyte* result = &byte_map_base[uintptr_t(p) >> card_shift];
+     assert(result >= _byte_map && result < _byte_map + _byte_map_size,
+@@ -436,8 +436,8 @@
+     size_t delta = pointer_delta(p, byte_map_base, sizeof(jbyte));
+     HeapWord* result = (HeapWord*) (delta << card_shift);
+     assert(_whole_heap.contains(result),
+-           err_msg("Returning result = "PTR_FORMAT" out of bounds of "
+-                   " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")",
++           err_msg("Returning result = " PTR_FORMAT " out of bounds of "
++                   " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")",
+                    p2i(result), p2i(_whole_heap.start()), p2i(_whole_heap.end())));
+     return result;
+   }
+@@ -445,8 +445,8 @@
+   // Mapping from address to card marking array index.
+   size_t index_for(void* p) {
+     assert(_whole_heap.contains(p),
+-           err_msg("Attempt to access p = "PTR_FORMAT" out of bounds of "
+-                   " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")",
++           err_msg("Attempt to access p = " PTR_FORMAT " out of bounds of "
++                   " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")",
+                    p2i(p), p2i(_whole_heap.start()), p2i(_whole_heap.end())));
+     return byte_for(p) - _byte_map;
+   }
+--- hotspot/src/share/vm/memory/generation.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/memory/generation.hpp	2015-09-02 09:47:36.000000000 +0200
+@@ -422,7 +422,7 @@
+     // have to guard against non-monotonicity.
+     NOT_PRODUCT(
+       if (now < _time_of_last_gc) {
+-        warning("time warp: "INT64_FORMAT" to "INT64_FORMAT, (int64_t)_time_of_last_gc, (int64_t)now);
++        warning("time warp: " INT64_FORMAT " to " INT64_FORMAT, (int64_t)_time_of_last_gc, (int64_t)now);
+       }
+     )
+     return _time_of_last_gc;
+--- hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp	2015-09-02 09:48:07.000000000 +0200
+@@ -94,10 +94,10 @@
+ 
+   if (PrintTLAB && Verbose) {
+     Thread* thrd = myThread();
+-    gclog_or_tty->print("TLAB: %s thread: "INTPTR_FORMAT" [id: %2d]"
+-                        " obj: "SIZE_FORMAT
+-                        " free: "SIZE_FORMAT
+-                        " waste: "SIZE_FORMAT"\n",
++    gclog_or_tty->print("TLAB: %s thread: " INTPTR_FORMAT " [id: %2d]"
++                        " obj: " SIZE_FORMAT
++                        " free: " SIZE_FORMAT
++                        " waste: " SIZE_FORMAT "\n",
+                         "slow", p2i(thrd), thrd->osthread()->thread_id(),
+                         obj_size, free(), refill_waste_limit());
+   }
+--- hotspot/src/share/vm/trace/traceStream.hpp.orig	2015-09-02 09:45:31.000000000 +0200
++++ hotspot/src/share/vm/trace/traceStream.hpp	2015-09-02 09:49:16.000000000 +0200
+@@ -40,31 +40,31 @@
+   TraceStream(outputStream& stream): _st(stream) {}
+ 
+   void print_val(const char* label, u1 val) {
+-    _st.print("%s = "UINT32_FORMAT, label, val);
++    _st.print("%s = " UINT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, u2 val) {
+-    _st.print("%s = "UINT32_FORMAT, label, val);
++    _st.print("%s = " UINT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, s2 val) {
+-    _st.print("%s = "INT32_FORMAT, label, val);
++    _st.print("%s = " INT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, u4 val) {
+-    _st.print("%s = "UINT32_FORMAT, label, val);
++    _st.print("%s = " UINT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, s4 val) {
+-    _st.print("%s = "INT32_FORMAT, label, val);
++    _st.print("%s = " INT32_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, u8 val) {
+-    _st.print("%s = "UINT64_FORMAT, label, val);
++    _st.print("%s = " UINT64_FORMAT, label, val);
+   }
+ 
+   void print_val(const char* label, s8 val) {
+-    _st.print("%s = "INT64_FORMAT, label, (int64_t) val);
++    _st.print("%s = " INT64_FORMAT, label, (int64_t) val);
+   }
+ 
+   void print_val(const char* label, bool val) {
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp	2015-09-02 10:04:07.000000000 +0200
+@@ -31,9 +31,9 @@
+ 
+ inline HeapRegion* HeapRegionManager::addr_to_region(HeapWord* addr) const {
+   assert(addr < heap_end(),
+-        err_msg("addr: "PTR_FORMAT" end: "PTR_FORMAT, p2i(addr), p2i(heap_end())));
++        err_msg("addr: " PTR_FORMAT " end: " PTR_FORMAT, p2i(addr), p2i(heap_end())));
+   assert(addr >= heap_bottom(),
+-        err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, p2i(addr), p2i(heap_bottom())));
++        err_msg("addr: " PTR_FORMAT " bottom: " PTR_FORMAT, p2i(addr), p2i(heap_bottom())));
+ 
+   HeapRegion* hr = _regions.get_by_address(addr);
+   return hr;
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp	2015-09-02 10:03:44.000000000 +0200
+@@ -112,7 +112,7 @@
+ 
+   assert(ClassUnloadingWithConcurrentMark,
+       err_msg("All blocks should be objects if G1 Class Unloading isn't used. "
+-              "HR: ["PTR_FORMAT", "PTR_FORMAT", "PTR_FORMAT") "
++              "HR: [" PTR_FORMAT ", " PTR_FORMAT ", " PTR_FORMAT ") "
+               "addr: " PTR_FORMAT,
+               p2i(bottom()), p2i(top()), p2i(end()), p2i(addr)));
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp	2015-09-02 10:03:17.000000000 +0200
+@@ -52,7 +52,7 @@
+ class HeapRegionSetBase;
+ class nmethod;
+ 
+-#define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]"
++#define HR_FORMAT "%u:(%s)[" PTR_FORMAT "," PTR_FORMAT "," PTR_FORMAT "]"
+ #define HR_FORMAT_PARAMS(_hr_) \
+                 (_hr_)->hrm_index(), \
+                 (_hr_)->get_short_type_str(), \
+@@ -542,8 +542,8 @@
+   void set_containing_set(HeapRegionSetBase* containing_set) {
+     assert((containing_set == NULL && _containing_set != NULL) ||
+            (containing_set != NULL && _containing_set == NULL),
+-           err_msg("containing_set: "PTR_FORMAT" "
+-                   "_containing_set: "PTR_FORMAT,
++           err_msg("containing_set: " PTR_FORMAT " "
++                   "_containing_set: " PTR_FORMAT,
+                    p2i(containing_set), p2i(_containing_set)));
+ 
+     _containing_set = containing_set;
+--- hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp.orig	2015-09-02 09:59:23.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp	2015-09-02 10:02:55.000000000 +0200
+@@ -46,7 +46,7 @@
+ 
+ inline uint G1CollectedHeap::addr_to_region(HeapWord* addr) const {
+   assert(is_in_reserved(addr),
+-         err_msg("Cannot calculate region index for address "PTR_FORMAT" that is outside of the heap ["PTR_FORMAT", "PTR_FORMAT")",
++         err_msg("Cannot calculate region index for address " PTR_FORMAT " that is outside of the heap [" PTR_FORMAT ", " PTR_FORMAT ")",
+                  p2i(addr), p2i(_reserved.start()), p2i(_reserved.end())));
+   return (uint)(pointer_delta(addr, _reserved.start(), sizeof(uint8_t)) >> HeapRegion::LogOfHRGrainBytes);
+ }
+@@ -59,7 +59,7 @@
+ inline HeapRegion* G1CollectedHeap::heap_region_containing_raw(const T addr) const {
+   assert(addr != NULL, "invariant");
+   assert(is_in_g1_reserved((const void*) addr),
+-      err_msg("Address "PTR_FORMAT" is outside of the heap ranging from ["PTR_FORMAT" to "PTR_FORMAT")",
++      err_msg("Address " PTR_FORMAT " is outside of the heap ranging from [" PTR_FORMAT " to " PTR_FORMAT ")",
+           p2i((void*)addr), p2i(g1_reserved().start()), p2i(g1_reserved().end())));
+   return _hrm.addr_to_region((HeapWord*) addr);
+ }
+--- hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp.orig	2015-09-02 09:59:22.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp	2015-09-02 10:01:43.000000000 +0200
+@@ -47,15 +47,15 @@
+   }
+ }
+ 
+-#define check_index(index, msg)                                                \
+-  assert((index) < (_reserved.word_size() >> LogN_words),                      \
+-         err_msg("%s - index: "SIZE_FORMAT", _vs.committed_size: "SIZE_FORMAT, \
+-                 msg, (index), (_reserved.word_size() >> LogN_words)));        \
+-  assert(G1CollectedHeap::heap()->is_in_exact(address_for_index_raw(index)),   \
+-         err_msg("Index "SIZE_FORMAT" corresponding to "PTR_FORMAT             \
+-                 " (%u) is not in committed area.",                            \
+-                 (index),                                                      \
+-                 p2i(address_for_index_raw(index)),                            \
++#define check_index(index, msg)                                                   \
++  assert((index) < (_reserved.word_size() >> LogN_words),                         \
++         err_msg("%s - index: " SIZE_FORMAT ", _vs.committed_size: " SIZE_FORMAT, \
++                 msg, (index), (_reserved.word_size() >> LogN_words)));           \
++  assert(G1CollectedHeap::heap()->is_in_exact(address_for_index_raw(index)),      \
++         err_msg("Index " SIZE_FORMAT " corresponding to " PTR_FORMAT             \
++                 " (%u) is not in committed area.",                               \
++                 (index),                                                         \
++                 p2i(address_for_index_raw(index)),                               \
+                  G1CollectedHeap::heap()->addr_to_region(address_for_index_raw(index))));
+ 
+ u_char G1BlockOffsetSharedArray::offset_array(size_t index) const {
+--- hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp.orig	2015-09-02 09:59:22.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp	2015-09-02 10:00:36.000000000 +0200
+@@ -78,7 +78,7 @@
+ 
+    void decrease_used(size_t bytes) {
+      assert(_summary_bytes_used >= bytes,
+-            err_msg("invariant: _summary_bytes_used: "SIZE_FORMAT" should be >= bytes: "SIZE_FORMAT,
++            err_msg("invariant: _summary_bytes_used: " SIZE_FORMAT " should be >= bytes: " SIZE_FORMAT,
+                 _summary_bytes_used, bytes));
+      _summary_bytes_used -= bytes;
+    }
+--- hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp.orig	2015-09-02 09:59:22.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp	2015-09-02 10:00:20.000000000 +0200
+@@ -92,7 +92,7 @@
+     regions_at_put(_curr_index, NULL);
+     assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
+            err_msg("remaining reclaimable bytes inconsistent "
+-                   "from region: "SIZE_FORMAT" remaining: "SIZE_FORMAT,
++                   "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT,
+                    hr->reclaimable_bytes(), _remaining_reclaimable_bytes));
+     _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
+     _curr_index += 1;
+--- hotspot/src/share/vm/compiler/compileBroker.cpp.orig	2015-09-02 10:08:43.000000000 +0200
++++ hotspot/src/share/vm/compiler/compileBroker.cpp	2015-09-02 10:09:37.000000000 +0200
+@@ -203,7 +203,7 @@
+   }
+ 
+   void log_nmethod(JavaThread* thread, nmethod* nm) {
+-    log(thread, "nmethod %d%s " INTPTR_FORMAT " code ["INTPTR_FORMAT ", " INTPTR_FORMAT "]",
++    log(thread, "nmethod %d%s " INTPTR_FORMAT " code [" INTPTR_FORMAT ", " INTPTR_FORMAT "]",
+         nm->compile_id(), nm->is_osr_method() ? "%" : "",
+         p2i(nm), p2i(nm->code_begin()), p2i(nm->code_end()));
+   }
+--- hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp.orig	2015-09-02 10:08:44.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp	2015-09-02 10:09:56.000000000 +0200
+@@ -121,15 +121,15 @@
+ // Single parameter format strings
+ #define ergo_format_str(_name_)      ", " _name_ ": %s"
+ #define ergo_format_region(_name_)   ", " _name_ ": %u regions"
+-#define ergo_format_byte(_name_)     ", " _name_ ": "SIZE_FORMAT" bytes"
++#define ergo_format_byte(_name_)     ", " _name_ ": " SIZE_FORMAT " bytes"
+ #define ergo_format_double(_name_)   ", " _name_ ": %1.2f"
+ #define ergo_format_perc(_name_)     ", " _name_ ": %1.2f %%"
+ #define ergo_format_ms(_name_)       ", " _name_ ": %1.2f ms"
+-#define ergo_format_size(_name_)     ", " _name_ ": "SIZE_FORMAT
++#define ergo_format_size(_name_)     ", " _name_ ": " SIZE_FORMAT
+ 
+ // Double parameter format strings
+ #define ergo_format_byte_perc(_name_)                                   \
+-                             ", " _name_ ": "SIZE_FORMAT" bytes (%1.2f %%)"
++                             ", " _name_ ": " SIZE_FORMAT " bytes (%1.2f %%)"
+ 
+ // Generates the format string
+ #define ergo_format(_extra_format_)                           \
+--- hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp.orig	2015-09-02 10:12:49.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp	2015-09-02 10:21:24.000000000 +0200
+@@ -196,8 +196,8 @@
+   assert(_bmStartWord <= (addr) && (addr) < (_bmStartWord + _bmWordSize),      \
+          "outside underlying space?");                                         \
+   assert(G1CollectedHeap::heap()->is_in_exact(addr),                           \
+-         err_msg("Trying to access not available bitmap "PTR_FORMAT            \
+-                 " corresponding to "PTR_FORMAT" (%u)",                        \
++         err_msg("Trying to access not available bitmap " PTR_FORMAT           \
++                 " corresponding to " PTR_FORMAT " (%u)",                      \
+                  p2i(this), p2i(addr), G1CollectedHeap::heap()->addr_to_region(addr)));
+ 
+ inline void CMBitMap::mark(HeapWord* addr) {
+@@ -270,7 +270,7 @@
+ 
+ inline void CMTask::deal_with_reference(oop obj) {
+   if (_cm->verbose_high()) {
+-    gclog_or_tty->print_cr("[%u] we're dealing with reference = "PTR_FORMAT,
++    gclog_or_tty->print_cr("[%u] we're dealing with reference = " PTR_FORMAT,
+                            _worker_id, p2i((void*) obj));
+   }
+ 
+@@ -374,7 +374,7 @@
+   // assert that word_size is under an upper bound which is its
+   // containing region's capacity.
+   assert(word_size * HeapWordSize <= hr->capacity(),
+-         err_msg("size: "SIZE_FORMAT" capacity: "SIZE_FORMAT" "HR_FORMAT,
++         err_msg("size: " SIZE_FORMAT " capacity: " SIZE_FORMAT " " HR_FORMAT,
+                  word_size * HeapWordSize, hr->capacity(),
+                  HR_FORMAT_PARAMS(hr)));
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.hpp.orig	2015-09-02 10:12:49.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.hpp	2015-09-02 10:21:38.000000000 +0200
+@@ -91,7 +91,7 @@
+ 
+   jbyte* card_num_2_ptr(size_t card_num) {
+     assert(card_num >= 0 && card_num < _reserved_max_card_num,
+-           err_msg("card num out of range: "SIZE_FORMAT, card_num));
++           err_msg("card num out of range: " SIZE_FORMAT, card_num));
+     return (jbyte*) (_ct_bot + card_num);
+   }
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp.orig	2015-09-02 10:24:04.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp	2015-09-02 10:24:14.000000000 +0200
+@@ -118,7 +118,7 @@
+   oop obj = oopDesc::load_decode_heap_oop(p);
+   if (_cm->verbose_high()) {
+     gclog_or_tty->print_cr("[%u] we're looking at location "
+-                           "*"PTR_FORMAT" = "PTR_FORMAT,
++                           "*" PTR_FORMAT " = " PTR_FORMAT,
+                            _task->worker_id(), p2i(p), p2i((void*) obj));
+   }
+   _task->deal_with_reference(obj);
+--- hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp.orig	2015-09-06 14:02:06.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	2015-09-10 12:03:16.130020385 +0200
+@@ -284,7 +284,7 @@
+     if (PrintGCDetails && Verbose) {
+       // Failed to double capacity, continue;
+       gclog_or_tty->print(" (benign) Failed to expand marking stack capacity from "
+-                          SIZE_FORMAT"K to " SIZE_FORMAT"K",
++                          SIZE_FORMAT "K to " SIZE_FORMAT "K",
+                           _capacity / K, new_capacity / K);
+     }
+   }
+@@ -581,7 +581,7 @@
+   _verbose_level = verbose_level;
+ 
+   if (verbose_low()) {
+-    gclog_or_tty->print_cr("[global] init, heap start = "PTR_FORMAT", "
++    gclog_or_tty->print_cr("[global] init, heap start = " PTR_FORMAT ", "
+                            "heap end = " INTPTR_FORMAT, p2i(_heap_start), p2i(_heap_end));
+   }
+ 
+@@ -838,7 +838,7 @@
+     // in a STW phase.
+     assert(!concurrent_marking_in_progress(), "invariant");
+     assert(out_of_regions(),
+-           err_msg("only way to get here: _finger: "PTR_FORMAT", _heap_end: "PTR_FORMAT,
++           err_msg("only way to get here: _finger: " PTR_FORMAT ", _heap_end: " PTR_FORMAT,
+                    p2i(_finger), p2i(_heap_end)));
+   }
+ }
+@@ -1453,7 +1453,7 @@
+ 
+     assert(start <= hr->end() && start <= ntams && ntams <= hr->end(),
+            err_msg("Preconditions not met - "
+-                   "start: "PTR_FORMAT", ntams: "PTR_FORMAT", end: "PTR_FORMAT,
++                   "start: " PTR_FORMAT ", ntams: " PTR_FORMAT ", end: " PTR_FORMAT,
+                    p2i(start), p2i(ntams), p2i(hr->end())));
+ 
+     // Find the first marked object at or after "start".
+@@ -1770,10 +1770,10 @@
+       }
+ 
+       assert(end_idx <= _card_bm->size(),
+-             err_msg("oob: end_idx=  "SIZE_FORMAT", bitmap size= "SIZE_FORMAT,
++             err_msg("oob: end_idx=  " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT,
+                      end_idx, _card_bm->size()));
+       assert(start_idx < _card_bm->size(),
+-             err_msg("oob: start_idx=  "SIZE_FORMAT", bitmap size= "SIZE_FORMAT,
++             err_msg("oob: start_idx=  " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT,
+                      start_idx, _card_bm->size()));
+ 
+       _cm->set_card_bitmap_range(_card_bm, start_idx, end_idx, true /* is_par */);
+@@ -2278,7 +2278,7 @@
+       oop obj = oopDesc::load_decode_heap_oop(p);
+       if (_cm->verbose_high()) {
+         gclog_or_tty->print_cr("\t[%u] we're looking at location "
+-                               "*"PTR_FORMAT" = "PTR_FORMAT,
++                               "*" PTR_FORMAT " = " PTR_FORMAT,
+                                _task->worker_id(), p2i(p), p2i((void*) obj));
+       }
+ 
+@@ -2847,7 +2847,7 @@
+       }
+     }
+ 
+-    _out->print_cr("  "PTR_FORMAT": "PTR_FORMAT"%s%s",
++    _out->print_cr("  " PTR_FORMAT ": " PTR_FORMAT "%s%s",
+                    p2i(p), p2i((void*) obj), str, str2);
+   }
+ };
+@@ -2874,7 +2874,7 @@
+     bool print_it = _all || over_tams || marked;
+ 
+     if (print_it) {
+-      _out->print_cr(" "PTR_FORMAT"%s",
++      _out->print_cr(" " PTR_FORMAT "%s",
+                      p2i((void *)o), (over_tams) ? " >" : (marked) ? " M" : "");
+       PrintReachableOopClosure oopCl(_out, _vo, _all);
+       o->oop_iterate_no_header(&oopCl);
+@@ -2895,7 +2895,7 @@
+     HeapWord* e = hr->end();
+     HeapWord* t = hr->top();
+     HeapWord* p = _g1h->top_at_mark_start(hr, _vo);
+-    _out->print_cr("** ["PTR_FORMAT", "PTR_FORMAT"] top: "PTR_FORMAT" "
++    _out->print_cr("** [" PTR_FORMAT ", " PTR_FORMAT "] top: " PTR_FORMAT " "
+                    "TAMS: " PTR_FORMAT, p2i(b), p2i(e), p2i(t), p2i(p));
+     _out->cr();
+ 
+@@ -3019,9 +3019,9 @@
+       HeapWord*   limit         = curr_region->next_top_at_mark_start();
+ 
+       if (verbose_low()) {
+-        gclog_or_tty->print_cr("[%u] curr_region = "PTR_FORMAT" "
+-                               "["PTR_FORMAT", "PTR_FORMAT"), "
+-                               "limit = "PTR_FORMAT,
++        gclog_or_tty->print_cr("[%u] curr_region = " PTR_FORMAT " "
++                               "[" PTR_FORMAT ", " PTR_FORMAT "), "
++                               "limit = " PTR_FORMAT,
+                                worker_id, p2i(curr_region), p2i(bottom), p2i(end), p2i(limit));
+       }
+ 
+@@ -3036,7 +3036,7 @@
+ 
+       if (limit > bottom) {
+         if (verbose_low()) {
+-          gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is not empty, "
++          gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is not empty, "
+                                  "returning it ", worker_id, p2i(curr_region));
+         }
+         return curr_region;
+@@ -3044,7 +3044,7 @@
+         assert(limit == bottom,
+                "the region limit should be at bottom");
+         if (verbose_low()) {
+-          gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is empty, "
++          gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is empty, "
+                                  "returning NULL", worker_id, p2i(curr_region));
+         }
+         // we return NULL and the caller should try calling
+@@ -3056,13 +3056,13 @@
+       if (verbose_low()) {
+         if (curr_region == NULL) {
+           gclog_or_tty->print_cr("[%u] found uncommitted region, moving finger, "
+-                                 "global finger = "PTR_FORMAT", "
+-                                 "our finger = "PTR_FORMAT,
++                                 "global finger = " PTR_FORMAT ", "
++                                 "our finger = " PTR_FORMAT,
+                                  worker_id, p2i(_finger), p2i(finger));
+         } else {
+           gclog_or_tty->print_cr("[%u] somebody else moved the finger, "
+-                                 "global finger = "PTR_FORMAT", "
+-                                 "our finger = "PTR_FORMAT,
++                                 "global finger = " PTR_FORMAT ", "
++                                 "our finger = " PTR_FORMAT,
+                                  worker_id, p2i(_finger), p2i(finger));
+         }
+       }
+@@ -3098,7 +3098,7 @@
+ 
+   void do_object_work(oop obj) {
+     guarantee(!_g1h->obj_in_cs(obj),
+-              err_msg("obj: "PTR_FORMAT" in CSet, phase: %s, info: %d",
++              err_msg("obj: " PTR_FORMAT " in CSet, phase: %s, info: %d",
+                       p2i((void*) obj), phase_str(), _info));
+   }
+ 
+@@ -3159,7 +3159,7 @@
+     // here.
+     HeapRegion* global_hr = _g1h->heap_region_containing_raw(global_finger);
+     guarantee(global_hr == NULL || global_finger == global_hr->bottom(),
+-              err_msg("global finger: "PTR_FORMAT" region: "HR_FORMAT,
++              err_msg("global finger: " PTR_FORMAT " region: " HR_FORMAT,
+                       p2i(global_finger), HR_FORMAT_PARAMS(global_hr)));
+   }
+ 
+@@ -3173,7 +3173,7 @@
+       HeapRegion* task_hr = _g1h->heap_region_containing_raw(task_finger);
+       guarantee(task_hr == NULL || task_finger == task_hr->bottom() ||
+                 !task_hr->in_collection_set(),
+-                err_msg("task finger: "PTR_FORMAT" region: "HR_FORMAT,
++                err_msg("task finger: " PTR_FORMAT " region: " HR_FORMAT,
+                         p2i(task_finger), HR_FORMAT_PARAMS(task_hr)));
+     }
+   }
+@@ -3215,8 +3215,8 @@
+ 
+     assert(start <= limit && limit <= hr->top() && hr->top() <= hr->end(),
+            err_msg("Preconditions not met - "
+-                   "start: "PTR_FORMAT", limit: "PTR_FORMAT", "
+-                   "top: "PTR_FORMAT", end: "PTR_FORMAT,
++                   "start: " PTR_FORMAT ", limit: " PTR_FORMAT ", "
++                   "top: " PTR_FORMAT ", end: " PTR_FORMAT,
+                    p2i(start), p2i(limit), p2i(hr->top()), p2i(hr->end())));
+ 
+     assert(hr->next_marked_bytes() == 0, "Precondition");
+@@ -3495,7 +3495,7 @@
+ #ifndef PRODUCT
+ // for debugging purposes
+ void ConcurrentMark::print_finger() {
+-  gclog_or_tty->print_cr("heap ["PTR_FORMAT", "PTR_FORMAT"), global finger = "PTR_FORMAT,
++  gclog_or_tty->print_cr("heap [" PTR_FORMAT ", " PTR_FORMAT "), global finger = " PTR_FORMAT,
+                          p2i(_heap_start), p2i(_heap_end), p2i(_finger));
+   for (uint i = 0; i < _max_worker_id; ++i) {
+     gclog_or_tty->print("   %u: " PTR_FORMAT, i, p2i(_tasks[i]->finger()));
+@@ -3580,7 +3580,7 @@
+         "claim_region() should have filtered out continues humongous regions");
+ 
+   if (_cm->verbose_low()) {
+-    gclog_or_tty->print_cr("[%u] setting up for region "PTR_FORMAT,
++    gclog_or_tty->print_cr("[%u] setting up for region " PTR_FORMAT,
+                            _worker_id, p2i(hr));
+   }
+ 
+@@ -3597,7 +3597,7 @@
+   if (limit == bottom) {
+     if (_cm->verbose_low()) {
+       gclog_or_tty->print_cr("[%u] found an empty region "
+-                             "["PTR_FORMAT", "PTR_FORMAT")",
++                             "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                              _worker_id, p2i(bottom), p2i(limit));
+     }
+     // The region was collected underneath our feet.
+@@ -3629,7 +3629,7 @@
+ void CMTask::giveup_current_region() {
+   assert(_curr_region != NULL, "invariant");
+   if (_cm->verbose_low()) {
+-    gclog_or_tty->print_cr("[%u] giving up region "PTR_FORMAT,
++    gclog_or_tty->print_cr("[%u] giving up region " PTR_FORMAT,
+                            _worker_id, p2i(_curr_region));
+   }
+   clear_region_fields();
+@@ -3751,7 +3751,7 @@
+ 
+   if (_cm->verbose_medium()) {
+       gclog_or_tty->print_cr("[%u] regular clock, interval = %1.2lfms, "
+-                        "scanned = "SIZE_FORMAT"%s, refs reached = "SIZE_FORMAT"%s",
++                        "scanned = " SIZE_FORMAT "%s, refs reached = " SIZE_FORMAT "%s",
+                         _worker_id, last_interval_ms,
+                         _words_scanned,
+                         (_words_scanned >= _words_scanned_limit) ? " (*)" : "",
+@@ -3920,7 +3920,7 @@
+       statsOnly( ++_local_pops );
+ 
+       if (_cm->verbose_high()) {
+-        gclog_or_tty->print_cr("[%u] popped "PTR_FORMAT, _worker_id,
++        gclog_or_tty->print_cr("[%u] popped " PTR_FORMAT, _worker_id,
+                                p2i((void*) obj));
+       }
+ 
+@@ -4273,8 +4273,8 @@
+ 
+       if (_cm->verbose_low()) {
+         gclog_or_tty->print_cr("[%u] we're scanning part "
+-                               "["PTR_FORMAT", "PTR_FORMAT") "
+-                               "of region "HR_FORMAT,
++                               "[" PTR_FORMAT ", " PTR_FORMAT ") "
++                               "of region " HR_FORMAT,
+                                _worker_id, p2i(_finger), p2i(_region_limit),
+                                HR_FORMAT_PARAMS(_curr_region));
+       }
+@@ -4361,7 +4361,7 @@
+ 
+         if (_cm->verbose_low()) {
+           gclog_or_tty->print_cr("[%u] we successfully claimed "
+-                                 "region "PTR_FORMAT,
++                                 "region " PTR_FORMAT,
+                                  _worker_id, p2i(claimed_region));
+         }
+ 
+@@ -4422,7 +4422,7 @@
+ 
+       if (_cm->try_stealing(_worker_id, &_hash_seed, obj)) {
+         if (_cm->verbose_medium()) {
+-          gclog_or_tty->print_cr("[%u] stolen "PTR_FORMAT" successfully",
++          gclog_or_tty->print_cr("[%u] stolen " PTR_FORMAT " successfully",
+                                  _worker_id, p2i((void*) obj));
+         }
+ 
+@@ -4630,7 +4630,7 @@
+ // identify them easily in a large log file.
+ #define G1PPRL_LINE_PREFIX            "###"
+ 
+-#define G1PPRL_ADDR_BASE_FORMAT    " "PTR_FORMAT"-"PTR_FORMAT
++#define G1PPRL_ADDR_BASE_FORMAT    " " PTR_FORMAT "-" PTR_FORMAT
+ #ifdef _LP64
+ #define G1PPRL_ADDR_BASE_H_FORMAT  " %37s"
+ #else // _LP64
+@@ -4640,16 +4640,16 @@
+ // For per-region info
+ #define G1PPRL_TYPE_FORMAT            "   %-4s"
+ #define G1PPRL_TYPE_H_FORMAT          "   %4s"
+-#define G1PPRL_BYTE_FORMAT            "  "SIZE_FORMAT_W(9)
++#define G1PPRL_BYTE_FORMAT            "  " SIZE_FORMAT_W(9)
+ #define G1PPRL_BYTE_H_FORMAT          "  %9s"
+ #define G1PPRL_DOUBLE_FORMAT          "  %14.1f"
+ #define G1PPRL_DOUBLE_H_FORMAT        "  %14s"
+ 
+ // For summary info
+-#define G1PPRL_SUM_ADDR_FORMAT(tag)    "  "tag":"G1PPRL_ADDR_BASE_FORMAT
+-#define G1PPRL_SUM_BYTE_FORMAT(tag)    "  "tag": "SIZE_FORMAT
+-#define G1PPRL_SUM_MB_FORMAT(tag)      "  "tag": %1.2f MB"
+-#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag)" / %1.2f %%"
++#define G1PPRL_SUM_ADDR_FORMAT(tag)    "  " tag ":" G1PPRL_ADDR_BASE_FORMAT
++#define G1PPRL_SUM_BYTE_FORMAT(tag)    "  " tag ": " SIZE_FORMAT
++#define G1PPRL_SUM_MB_FORMAT(tag)      "  " tag ": %1.2f MB"
++#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag) " / %1.2f %%"
+ 
+ G1PrintRegionLivenessInfoClosure::
+ G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name)
+--- hotspot/src/share/vm/oops/constantPool.cpp.orig	2015-09-02 10:35:07.000000000 +0200
++++ hotspot/src/share/vm/oops/constantPool.cpp	2015-09-02 10:36:03.000000000 +0200
+@@ -1494,7 +1494,7 @@
+       }
+       case JVM_CONSTANT_Long: {
+         u8 val = Bytes::get_Java_u8(bytes);
+-        printf("long         "INT64_FORMAT, (int64_t) *(jlong *) &val);
++        printf("long         " INT64_FORMAT, (int64_t) *(jlong *) &val);
+         ent_size = 8;
+         idx++; // Long takes two cpool slots
+         break;
+--- hotspot/src/share/vm/oops/cpCache.cpp.orig	2015-09-02 10:35:13.000000000 +0200
++++ hotspot/src/share/vm/oops/cpCache.cpp	2015-09-02 10:36:48.000000000 +0200
+@@ -305,7 +305,7 @@
+                    adapter->size_of_parameters());
+ 
+   if (TraceInvokeDynamic) {
+-    tty->print_cr("set_method_handle bc=%d appendix="PTR_FORMAT"%s method_type="PTR_FORMAT"%s method="PTR_FORMAT" ",
++    tty->print_cr("set_method_handle bc=%d appendix=" PTR_FORMAT "%s method_type=" PTR_FORMAT "%s method=" PTR_FORMAT " ",
+                   invoke_code,
+                   (void *)appendix(),    (has_appendix    ? "" : " (unused)"),
+                   (void *)method_type(), (has_method_type ? "" : " (unused)"),
+@@ -540,12 +540,12 @@
+   // print separator
+   if (index == 0) st->print_cr("                 -------------");
+   // print entry
+-  st->print("%3d  ("PTR_FORMAT")  ", index, (intptr_t)this);
++  st->print("%3d  (" PTR_FORMAT ")  ", index, (intptr_t)this);
+   st->print_cr("[%02x|%02x|%5d]", bytecode_2(), bytecode_1(),
+                constant_pool_index());
+-  st->print_cr("                 [   "PTR_FORMAT"]", (intptr_t)_f1);
+-  st->print_cr("                 [   "PTR_FORMAT"]", (intptr_t)_f2);
+-  st->print_cr("                 [   "PTR_FORMAT"]", (intptr_t)_flags);
++  st->print_cr("                 [   " PTR_FORMAT "]", (intptr_t)_f1);
++  st->print_cr("                 [   " PTR_FORMAT "]", (intptr_t)_f2);
++  st->print_cr("                 [   " PTR_FORMAT "]", (intptr_t)_flags);
+   st->print_cr("                 -------------");
+ }
+ 
+--- hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp.orig	2015-09-02 10:12:48.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	2015-09-02 10:39:26.000000000 +0200
+@@ -838,18 +838,18 @@
+   GenCollectedHeap* gch = GenCollectedHeap::heap();
+   if (PrintGCDetails) {
+     if (Verbose) {
+-      gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"("SIZE_FORMAT")]",
++      gclog_or_tty->print("[%d %s-%s: " SIZE_FORMAT "(" SIZE_FORMAT ")]",
+         level(), short_name(), s, used(), capacity());
+     } else {
+-      gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"K("SIZE_FORMAT"K)]",
++      gclog_or_tty->print("[%d %s-%s: " SIZE_FORMAT "K(" SIZE_FORMAT "K)]",
+         level(), short_name(), s, used() / K, capacity() / K);
+     }
+   }
+   if (Verbose) {
+-    gclog_or_tty->print(" "SIZE_FORMAT"("SIZE_FORMAT")",
++    gclog_or_tty->print(" " SIZE_FORMAT "(" SIZE_FORMAT ")",
+               gch->used(), gch->capacity());
+   } else {
+-    gclog_or_tty->print(" "SIZE_FORMAT"K("SIZE_FORMAT"K)",
++    gclog_or_tty->print(" " SIZE_FORMAT "K(" SIZE_FORMAT "K)",
+               gch->used() / K, gch->capacity() / K);
+   }
+ }
+@@ -879,8 +879,8 @@
+   bool   res = (available >= av_promo) || (available >= max_promotion_in_bytes);
+   if (Verbose && PrintGCDetails) {
+     gclog_or_tty->print_cr(
+-      "CMS: promo attempt is%s safe: available("SIZE_FORMAT") %s av_promo("SIZE_FORMAT"),"
+-      "max_promo("SIZE_FORMAT")",
++      "CMS: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT "),"
++      "max_promo(" SIZE_FORMAT ")",
+       res? "":" not", available, res? ">=":"<",
+       av_promo, max_promotion_in_bytes);
+   }
+@@ -966,8 +966,8 @@
+         desired_free_percentage);
+       gclog_or_tty->print_cr("  Maximum free fraction %f",
+         maximum_free_percentage);
+-      gclog_or_tty->print_cr("  Capactiy "SIZE_FORMAT, capacity()/1000);
+-      gclog_or_tty->print_cr("  Desired capacity "SIZE_FORMAT,
++      gclog_or_tty->print_cr("  Capactiy " SIZE_FORMAT, capacity()/1000);
++      gclog_or_tty->print_cr("  Desired capacity " SIZE_FORMAT,
+         desired_capacity/1000);
+       int prev_level = level() - 1;
+       if (prev_level >= 0) {
+@@ -975,14 +975,14 @@
+         GenCollectedHeap* gch = GenCollectedHeap::heap();
+         Generation* prev_gen = gch->_gens[prev_level];
+         prev_size = prev_gen->capacity();
+-          gclog_or_tty->print_cr("  Younger gen size "SIZE_FORMAT,
++          gclog_or_tty->print_cr("  Younger gen size " SIZE_FORMAT,
+                                  prev_size/1000);
+       }
+-      gclog_or_tty->print_cr("  unsafe_max_alloc_nogc "SIZE_FORMAT,
++      gclog_or_tty->print_cr("  unsafe_max_alloc_nogc " SIZE_FORMAT,
+         unsafe_max_alloc_nogc()/1000);
+-      gclog_or_tty->print_cr("  contiguous available "SIZE_FORMAT,
++      gclog_or_tty->print_cr("  contiguous available " SIZE_FORMAT,
+         contiguous_available()/1000);
+-      gclog_or_tty->print_cr("  Expand by "SIZE_FORMAT" (bytes)",
++      gclog_or_tty->print_cr("  Expand by " SIZE_FORMAT " (bytes)",
+         expand_bytes);
+     }
+     // safe if expansion fails
+@@ -1513,8 +1513,8 @@
+     stats().print_on(gclog_or_tty);
+     gclog_or_tty->print_cr("time_until_cms_gen_full %3.7f",
+       stats().time_until_cms_gen_full());
+-    gclog_or_tty->print_cr("free="SIZE_FORMAT, _cmsGen->free());
+-    gclog_or_tty->print_cr("contiguous_available="SIZE_FORMAT,
++    gclog_or_tty->print_cr("free=" SIZE_FORMAT, _cmsGen->free());
++    gclog_or_tty->print_cr("contiguous_available=" SIZE_FORMAT,
+                            _cmsGen->contiguous_available());
+     gclog_or_tty->print_cr("promotion_rate=%g", stats().promotion_rate());
+     gclog_or_tty->print_cr("cms_allocation_rate=%g", stats().cms_allocation_rate());
+@@ -2792,7 +2792,7 @@
+     assert(_numObjectsPromoted == 0, "check");
+     assert(_numWordsPromoted   == 0, "check");
+     if (Verbose && PrintGC) {
+-      gclog_or_tty->print("Allocated "SIZE_FORMAT" objects, "
++      gclog_or_tty->print("Allocated " SIZE_FORMAT " objects, "
+                           SIZE_FORMAT" bytes concurrently",
+       _numObjectsAllocated, _numWordsAllocated*sizeof(HeapWord));
+     }
+@@ -2879,7 +2879,7 @@
+     assert(_numObjectsAllocated == 0, "check");
+     assert(_numWordsAllocated == 0, "check");
+     if (Verbose && PrintGC) {
+-      gclog_or_tty->print("Promoted "SIZE_FORMAT" objects, "
++      gclog_or_tty->print("Promoted " SIZE_FORMAT " objects, "
+                           SIZE_FORMAT" bytes",
+                  _numObjectsPromoted, _numWordsPromoted*sizeof(HeapWord));
+     }
+@@ -2890,7 +2890,7 @@
+   if (PrintGC && Verbose) {
+     // Call down the chain in contiguous_available needs the freelistLock
+     // so print this out before releasing the freeListLock.
+-    gclog_or_tty->print(" Contiguous available "SIZE_FORMAT" bytes ",
++    gclog_or_tty->print(" Contiguous available " SIZE_FORMAT " bytes ",
+                         contiguous_available());
+   }
+ }
+@@ -2978,7 +2978,7 @@
+     HeapWord* addr = _marks->offsetToHeapWord(offset);
+     if (!_marks->isMarked(addr)) {
+       oop(addr)->print_on(gclog_or_tty);
+-      gclog_or_tty->print_cr(" ("INTPTR_FORMAT" should have been marked)", addr);
++      gclog_or_tty->print_cr(" (" INTPTR_FORMAT " should have been marked)", addr);
+       _failed = true;
+     }
+     return true;
+@@ -5037,7 +5037,7 @@
+ 
+   SpecializationStats::clear();
+   if (PrintGCDetails) {
+-    gclog_or_tty->print("[YG occupancy: "SIZE_FORMAT" K ("SIZE_FORMAT" K)]",
++    gclog_or_tty->print("[YG occupancy: " SIZE_FORMAT " K (" SIZE_FORMAT " K)]",
+                         _young_gen->used() / K,
+                         _young_gen->capacity() / K);
+   }
+@@ -5170,8 +5170,8 @@
+   if (ser_ovflw > 0) {
+     if (PrintCMSStatistics != 0) {
+       gclog_or_tty->print_cr("Marking stack overflow (benign) "
+-        "(pmc_pc="SIZE_FORMAT", pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT
+-        ", kac_preclean="SIZE_FORMAT")",
++        "(pmc_pc=" SIZE_FORMAT ", pmc_rm=" SIZE_FORMAT ", kac=" SIZE_FORMAT
++        ", kac_preclean=" SIZE_FORMAT ")",
+         _ser_pmc_preclean_ovflw, _ser_pmc_remark_ovflw,
+         _ser_kac_ovflw, _ser_kac_preclean_ovflw);
+     }
+@@ -5184,7 +5184,7 @@
+   if (_par_pmc_remark_ovflw > 0 || _par_kac_ovflw > 0) {
+     if (PrintCMSStatistics != 0) {
+       gclog_or_tty->print_cr("Work queue overflow (benign) "
+-        "(pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT")",
++        "(pmc_rm=" SIZE_FORMAT ", kac=" SIZE_FORMAT ")",
+         _par_pmc_remark_ovflw, _par_kac_ovflw);
+     }
+     _par_pmc_remark_ovflw = 0;
+@@ -5192,12 +5192,12 @@
+   }
+   if (PrintCMSStatistics != 0) {
+      if (_markStack._hit_limit > 0) {
+-       gclog_or_tty->print_cr(" (benign) Hit max stack size limit ("SIZE_FORMAT")",
++       gclog_or_tty->print_cr(" (benign) Hit max stack size limit (" SIZE_FORMAT ")",
+                               _markStack._hit_limit);
+      }
+      if (_markStack._failed_double > 0) {
+-       gclog_or_tty->print_cr(" (benign) Failed stack doubling ("SIZE_FORMAT"),"
+-                              " current capacity "SIZE_FORMAT,
++       gclog_or_tty->print_cr(" (benign) Failed stack doubling (" SIZE_FORMAT "),"
++                              " current capacity " SIZE_FORMAT,
+                               _markStack._failed_double,
+                               _markStack.capacity());
+      }
+@@ -5961,7 +5961,7 @@
+                                                &markFromDirtyCardsClosure);
+       verify_work_stacks_empty();
+       if (PrintCMSStatistics != 0) {
+-        gclog_or_tty->print(" (re-scanned "SIZE_FORMAT" dirty cards in cms gen) ",
++        gclog_or_tty->print(" (re-scanned " SIZE_FORMAT " dirty cards in cms gen) ",
+           markFromDirtyCardsClosure.num_dirty_cards());
+       }
+     }
+@@ -6892,7 +6892,7 @@
+   } else if (_failed_double++ == 0 && !CMSConcurrentMTEnabled && PrintGCDetails) {
+     // Failed to double capacity, continue;
+     // we print a detail message only once per CMS cycle.
+-    gclog_or_tty->print(" (benign) Failed to expand marking stack from "SIZE_FORMAT"K to "
++    gclog_or_tty->print(" (benign) Failed to expand marking stack from " SIZE_FORMAT "K to "
+             SIZE_FORMAT"K",
+             _capacity / K, new_capacity / K);
+   }
+@@ -8215,25 +8215,25 @@
+     ShouldNotReachHere();
+   }
+   if (Verbose && PrintGC) {
+-    gclog_or_tty->print("Collected "SIZE_FORMAT" objects, " SIZE_FORMAT " bytes",
++    gclog_or_tty->print("Collected " SIZE_FORMAT " objects, " SIZE_FORMAT " bytes",
+                         _numObjectsFreed, _numWordsFreed*sizeof(HeapWord));
+-    gclog_or_tty->print_cr("\nLive "SIZE_FORMAT" objects,  "
++    gclog_or_tty->print_cr("\nLive " SIZE_FORMAT " objects,  "
+                            SIZE_FORMAT" bytes  "
+-      "Already free "SIZE_FORMAT" objects, "SIZE_FORMAT" bytes",
++      "Already free " SIZE_FORMAT " objects, " SIZE_FORMAT " bytes",
+       _numObjectsLive, _numWordsLive*sizeof(HeapWord),
+       _numObjectsAlreadyFree, _numWordsAlreadyFree*sizeof(HeapWord));
+     size_t totalBytes = (_numWordsFreed + _numWordsLive + _numWordsAlreadyFree)
+                         * sizeof(HeapWord);
+-    gclog_or_tty->print_cr("Total sweep: "SIZE_FORMAT" bytes", totalBytes);
++    gclog_or_tty->print_cr("Total sweep: " SIZE_FORMAT " bytes", totalBytes);
+ 
+     if (PrintCMSStatistics && CMSVerifyReturnedBytes) {
+       size_t indexListReturnedBytes = _sp->sumIndexedFreeListArrayReturnedBytes();
+       size_t dict_returned_bytes = _sp->dictionary()->sum_dict_returned_bytes();
+       size_t returned_bytes = indexListReturnedBytes + dict_returned_bytes;
+-      gclog_or_tty->print("Returned "SIZE_FORMAT" bytes", returned_bytes);
+-      gclog_or_tty->print("   Indexed List Returned "SIZE_FORMAT" bytes",
++      gclog_or_tty->print("Returned " SIZE_FORMAT " bytes", returned_bytes);
++      gclog_or_tty->print("   Indexed List Returned " SIZE_FORMAT " bytes",
+         indexListReturnedBytes);
+-      gclog_or_tty->print_cr("        Dictionary Returned "SIZE_FORMAT" bytes",
++      gclog_or_tty->print_cr("        Dictionary Returned " SIZE_FORMAT " bytes",
+         dict_returned_bytes);
+     }
+   }
+@@ -8312,13 +8312,13 @@
+     // coalesced chunk to the appropriate free list.
+     if (inFreeRange()) {
+       assert(freeFinger() >= _sp->bottom() && freeFinger() < _limit,
+-             err_msg("freeFinger() " PTR_FORMAT" is out-of-bounds", freeFinger()));
++             err_msg("freeFinger() " PTR_FORMAT " is out-of-bounds", freeFinger()));
+       flush_cur_free_chunk(freeFinger(),
+                            pointer_delta(addr, freeFinger()));
+       if (CMSTraceSweeper) {
+         gclog_or_tty->print("Sweep: last chunk: ");
+-        gclog_or_tty->print("put_free_blk 0x%x ("SIZE_FORMAT") "
+-                   "[coalesced:"SIZE_FORMAT"]\n",
++        gclog_or_tty->print("put_free_blk 0x%x (" SIZE_FORMAT ") "
++                   "[coalesced:" SIZE_FORMAT "]\n",
+                    freeFinger(), pointer_delta(addr, freeFinger()),
+                    lastFreeRangeCoalesced());
+       }
+--- hotspot/src/share/vm/classfile/dictionary.hpp.orig	2015-09-02 10:40:01.000000000 +0200
++++ hotspot/src/share/vm/classfile/dictionary.hpp	2015-09-02 10:40:32.000000000 +0200
+@@ -370,7 +370,7 @@
+ 
+   void print_on(outputStream* st) const {
+     symbol()->print_value_on(st);
+-    st->print("/mode="INTX_FORMAT, symbol_mode());
++    st->print("/mode=" INTX_FORMAT, symbol_mode());
+     st->print(" -> ");
+     bool printed = false;
+     if (method() != NULL) {
+--- hotspot/src/share/vm/compiler/disassembler.cpp.orig	2015-09-02 10:40:09.000000000 +0200
++++ hotspot/src/share/vm/compiler/disassembler.cpp	2015-09-02 10:41:33.000000000 +0200
+@@ -60,7 +60,7 @@
+ Disassembler::decode_func_virtual Disassembler::_decode_instructions_virtual = NULL;
+ Disassembler::decode_func Disassembler::_decode_instructions = NULL;
+ 
+-static const char hsdis_library_name[] = "hsdis-"HOTSPOT_LIB_ARCH;
++static const char hsdis_library_name[] = "hsdis-" HOTSPOT_LIB_ARCH;
+ static const char decode_instructions_virtual_name[] = "decode_instructions_virtual";
+ static const char decode_instructions_name[] = "decode_instructions";
+ static bool use_new_version = true;
+--- hotspot/src/share/vm/code/exceptionHandlerTable.cpp.orig	2015-09-02 10:44:06.000000000 +0200
++++ hotspot/src/share/vm/code/exceptionHandlerTable.cpp	2015-09-02 10:44:32.000000000 +0200
+@@ -186,7 +186,7 @@
+ void ImplicitExceptionTable::print(address base) const {
+   tty->print("{");
+   for( uint i=0; i<len(); i++ )
+-    tty->print("< "INTPTR_FORMAT", "INTPTR_FORMAT" > ",base + *adr(i), base + *(adr(i)+1));
++    tty->print("< " INTPTR_FORMAT ", " INTPTR_FORMAT " > ",base + *adr(i), base + *(adr(i)+1));
+   tty->print_cr("}");
+ }
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp.orig	2015-09-02 10:47:14.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp	2015-09-02 10:47:49.000000000 +0200
+@@ -140,7 +140,7 @@
+ }
+ 
+ void G1AllocRegion::fill_in_ext_msg(ar_ext_msg* msg, const char* message) {
+-  msg->append("[%s] %s c: %u b: %s r: "PTR_FORMAT" u: "SIZE_FORMAT,
++  msg->append("[%s] %s c: %u b: %s r: " PTR_FORMAT " u: " SIZE_FORMAT,
+               _name, message, _count, BOOL_TO_STR(_bot_updates),
+               p2i(_alloc_region), _used_bytes_before);
+ }
+@@ -217,7 +217,7 @@
+ 
+     if (G1_ALLOC_REGION_TRACING > 1) {
+       if (result != NULL) {
+-        jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT" "PTR_FORMAT,
++        jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT " " PTR_FORMAT,
+                      word_size, result);
+       } else if (word_size != 0) {
+         jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT, word_size);
+--- hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp.orig	2015-09-02 10:47:14.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp	2015-09-02 10:53:32.000000000 +0200
+@@ -385,11 +385,11 @@
+     HeapWord* card_addr = _array->address_for_index(card);
+     HeapWord* block_start = block_start_const(card_addr);
+     if (block_start != obj_start) {
+-      gclog_or_tty->print_cr("block start: "PTR_FORMAT" is incorrect - "
+-                             "card index: "SIZE_FORMAT" "
+-                             "card addr: "PTR_FORMAT" BOT entry: %u "
+-                             "obj: "PTR_FORMAT" word size: "SIZE_FORMAT" "
+-                             "cards: ["SIZE_FORMAT","SIZE_FORMAT"]",
++      gclog_or_tty->print_cr("block start: " PTR_FORMAT " is incorrect - "
++                             "card index: " SIZE_FORMAT " "
++                             "card addr: " PTR_FORMAT " BOT entry: %u "
++                             "obj: " PTR_FORMAT " word size: " SIZE_FORMAT " "
++                             "cards: [" SIZE_FORMAT "," SIZE_FORMAT "]",
+                              block_start, card, card_addr,
+                              _array->offset_array(card),
+                              obj_start, word_size, first_card, last_card);
+@@ -404,11 +404,11 @@
+ G1BlockOffsetArray::print_on(outputStream* out) {
+   size_t from_index = _array->index_for(_bottom);
+   size_t to_index = _array->index_for(_end);
+-  out->print_cr(">> BOT for area ["PTR_FORMAT","PTR_FORMAT") "
+-                "cards ["SIZE_FORMAT","SIZE_FORMAT")",
++  out->print_cr(">> BOT for area [" PTR_FORMAT "," PTR_FORMAT ") "
++                "cards [" SIZE_FORMAT "," SIZE_FORMAT ")",
+                 _bottom, _end, from_index, to_index);
+   for (size_t i = from_index; i < to_index; ++i) {
+-    out->print_cr("  entry "SIZE_FORMAT_W(8)" | "PTR_FORMAT" : %3u",
++    out->print_cr("  entry " SIZE_FORMAT_W(8) " | " PTR_FORMAT " : %3u",
+                   i, _array->address_for_index(i),
+                   (uint) _array->offset_array(i));
+   }
+@@ -488,7 +488,7 @@
+ void
+ G1BlockOffsetArrayContigSpace::print_on(outputStream* out) {
+   G1BlockOffsetArray::print_on(out);
+-  out->print_cr("  next offset threshold: "PTR_FORMAT, _next_offset_threshold);
+-  out->print_cr("  next offset index:     "SIZE_FORMAT, _next_offset_index);
++  out->print_cr("  next offset threshold: " PTR_FORMAT, _next_offset_threshold);
++  out->print_cr("  next offset index:     " SIZE_FORMAT, _next_offset_index);
+ }
+ #endif // !PRODUCT
+--- hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp.orig	2015-09-02 10:47:15.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp	2015-09-02 10:54:04.000000000 +0200
+@@ -44,7 +44,7 @@
+ void G1CardCounts::clear_range(size_t from_card_num, size_t to_card_num) {
+   if (has_count_table()) {
+     assert(from_card_num < to_card_num,
+-           err_msg("Wrong order? from: " SIZE_FORMAT ", to: "SIZE_FORMAT,
++           err_msg("Wrong order? from: " SIZE_FORMAT ", to: " SIZE_FORMAT,
+                    from_card_num, to_card_num));
+     Copy::fill_to_bytes(&_card_counts[from_card_num], (to_card_num - from_card_num));
+   }
+@@ -87,7 +87,7 @@
+   if (has_count_table()) {
+     size_t card_num = ptr_2_card_num(card_ptr);
+     assert(card_num < _reserved_max_card_num,
+-           err_msg("Card "SIZE_FORMAT" outside of card counts table (max size "SIZE_FORMAT")",
++           err_msg("Card " SIZE_FORMAT " outside of card counts table (max size " SIZE_FORMAT ")",
+                    card_num, _reserved_max_card_num));
+     count = (uint) _card_counts[card_num];
+     if (count < G1ConcRSHotCardLimit) {
+--- hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp.orig	2015-09-02 10:57:01.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	2015-09-02 11:02:01.000000000 +0200
+@@ -199,7 +199,7 @@
+   const size_t region_size = HeapRegion::GrainWords;
+   if (YoungPLABSize > region_size || OldPLABSize > region_size) {
+     char buffer[128];
+-    jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most "SIZE_FORMAT,
++    jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most " SIZE_FORMAT,
+                  OldPLABSize > region_size ? "Old" : "Young", region_size);
+     vm_exit_during_initialization(buffer);
+   }
+@@ -846,7 +846,7 @@
+   update_survivors_policy();
+ 
+   assert(_g1->used() == _g1->recalculate_used(),
+-         err_msg("sanity, used: "SIZE_FORMAT" recalculate_used: "SIZE_FORMAT,
++         err_msg("sanity, used: " SIZE_FORMAT " recalculate_used: " SIZE_FORMAT,
+                  _g1->used(), _g1->recalculate_used()));
+ 
+   double s_w_t_ms = (start_time_sec - _stop_world_start) * 1000.0;
+@@ -1231,10 +1231,10 @@
+     (_young_list_target_length * HeapRegion::GrainBytes) - survivor_used_bytes_after_gc;
+ 
+   gclog_or_tty->print(
+-    "   [Eden: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT") "
+-    "Survivors: "EXT_SIZE_FORMAT"->"EXT_SIZE_FORMAT" "
+-    "Heap: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"
+-    EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")]",
++    "   [Eden: " EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")->" EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ") "
++    "Survivors: " EXT_SIZE_FORMAT "->" EXT_SIZE_FORMAT " "
++    "Heap: " EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")->"
++    EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")]",
+     EXT_SIZE_PARAMS(_eden_used_bytes_before_gc),
+     EXT_SIZE_PARAMS(_eden_capacity_bytes_before_gc),
+     EXT_SIZE_PARAMS(eden_used_bytes_after_gc),
+@@ -1863,7 +1863,7 @@
+   while (csr != NULL) {
+     HeapRegion* next = csr->next_in_collection_set();
+     assert(csr->in_collection_set(), "bad CS");
+-    st->print_cr("  "HR_FORMAT", P: "PTR_FORMAT "N: "PTR_FORMAT", age: %4d",
++    st->print_cr("  " HR_FORMAT ", P: " PTR_FORMAT "N: " PTR_FORMAT ", age: %4d",
+                  HR_FORMAT_PARAMS(csr),
+                  csr->prev_top_at_mark_start(), csr->next_top_at_mark_start(),
+                  csr->age_in_surv_rate_group_cond());
+--- hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp.orig	2015-09-06 14:02:06.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp	2015-09-10 13:33:10.594040691 +0200
+@@ -330,7 +330,7 @@
+ }
+ 
+ void G1GCPhaseTimes::print_stats(int level, const char* str, size_t value) {
+-  LineBuffer(level).append_and_print_cr("[%s: "SIZE_FORMAT"]", str, value);
++  LineBuffer(level).append_and_print_cr("[%s: " SIZE_FORMAT "]", str, value);
+ }
+ 
+ void G1GCPhaseTimes::print_stats(int level, const char* str, double value, uint workers) {
+@@ -450,7 +450,7 @@
+ 
+     if (phase->_thread_work_items != NULL) {
+       LineBuffer buf2(phase->_thread_work_items->_indent_level);
+-      buf2.append_and_print_cr("[%s:  "SIZE_FORMAT"]", phase->_thread_work_items->_title, _phase_times->sum_thread_work_items(phase_id));
++      buf2.append_and_print_cr("[%s:  " SIZE_FORMAT "]", phase->_thread_work_items->_title, _phase_times->sum_thread_work_items(phase_id));
+     }
+   }
+ 
+--- hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp.orig	2015-09-02 10:57:01.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp	2015-09-02 11:03:16.000000000 +0200
+@@ -84,18 +84,18 @@
+ 
+   if (type_str != NULL) {
+     if (top != NULL) {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT" "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) " PTR_FORMAT " " PTR_FORMAT,
+                              action_str, type_str, bottom, top);
+     } else {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) " PTR_FORMAT,
+                              action_str, type_str, bottom);
+     }
+   } else {
+     if (top != NULL) {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT" "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s " PTR_FORMAT " " PTR_FORMAT,
+                              action_str, bottom, top);
+     } else {
+-      gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT,
++      gclog_or_tty->print_cr(G1HR_PREFIX" %s " PTR_FORMAT,
+                              action_str, bottom);
+     }
+   }
+@@ -104,11 +104,11 @@
+ void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) {
+   const char* action_str = action_name(action);
+ 
+-  gclog_or_tty->print_cr(G1HR_PREFIX" %s ["PTR_FORMAT","PTR_FORMAT"]",
++  gclog_or_tty->print_cr(G1HR_PREFIX" %s [" PTR_FORMAT "," PTR_FORMAT "]",
+                          action_str, bottom, end);
+ }
+ 
+ void G1HRPrinter::print(PhaseType phase, size_t phase_num) {
+   const char* phase_str = phase_name(phase);
+-  gclog_or_tty->print_cr(G1HR_PREFIX" #%s "SIZE_FORMAT, phase_str, phase_num);
++  gclog_or_tty->print_cr(G1HR_PREFIX" #%s " SIZE_FORMAT, phase_str, phase_num);
+ }
+--- hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp.orig	2015-09-06 14:02:06.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	2015-09-10 12:46:24.202030127 +0200
+@@ -230,7 +230,7 @@
+   HeapRegion* last = NULL;
+   while (curr != NULL) {
+     if (!curr->is_young()) {
+-      gclog_or_tty->print_cr("### YOUNG REGION "PTR_FORMAT"-"PTR_FORMAT" "
++      gclog_or_tty->print_cr("### YOUNG REGION " PTR_FORMAT "-" PTR_FORMAT " "
+                              "incorrectly tagged (y: %d, surv: %d)",
+                              curr->bottom(), curr->end(),
+                              curr->is_young(), curr->is_survivor());
+@@ -359,7 +359,7 @@
+     if (curr == NULL)
+       gclog_or_tty->print_cr("  empty");
+     while (curr != NULL) {
+-      gclog_or_tty->print_cr("  "HR_FORMAT", P: "PTR_FORMAT ", N: "PTR_FORMAT", age: %4d",
++      gclog_or_tty->print_cr("  " HR_FORMAT ", P: " PTR_FORMAT ", N: " PTR_FORMAT ", age: %4d",
+                              HR_FORMAT_PARAMS(curr),
+                              curr->prev_top_at_mark_start(),
+                              curr->next_top_at_mark_start(),
+@@ -490,7 +490,7 @@
+   gclog_or_tty->print_cr("Log entries = %d, dirty cards = %d.",
+                          clear.num_processed(), orig_count);
+   guarantee(redirty.num_processed() == clear.num_processed(),
+-            err_msg("Redirtied "SIZE_FORMAT" cards, bug cleared "SIZE_FORMAT,
++            err_msg("Redirtied " SIZE_FORMAT " cards, bug cleared " SIZE_FORMAT,
+                     redirty.num_processed(), clear.num_processed()));
+ 
+   CountNonCleanMemRegionClosure count3(this);
+@@ -528,7 +528,7 @@
+       HeapRegion* res = _hrm.allocate_free_region(is_old);
+       if (G1ConcRegionFreeingVerbose) {
+         gclog_or_tty->print_cr("G1ConcRegionFreeing [region alloc] : "
+-                               "allocated "HR_FORMAT" from secondary_free_list",
++                               "allocated " HR_FORMAT " from secondary_free_list",
+                                HR_FORMAT_PARAMS(res));
+       }
+       return res;
+@@ -1597,8 +1597,8 @@
+   // This assert only makes sense here, before we adjust them
+   // with respect to the min and max heap size.
+   assert(minimum_desired_capacity <= maximum_desired_capacity,
+-         err_msg("minimum_desired_capacity = "SIZE_FORMAT", "
+-                 "maximum_desired_capacity = "SIZE_FORMAT,
++         err_msg("minimum_desired_capacity = " SIZE_FORMAT ", "
++                 "maximum_desired_capacity = " SIZE_FORMAT,
+                  minimum_desired_capacity, maximum_desired_capacity));
+ 
+   // Should not be greater than the heap max size. No need to adjust
+@@ -2256,7 +2256,7 @@
+   virtual bool doHeapRegion(HeapRegion* hr) {
+     unsigned region_gc_time_stamp = hr->get_gc_time_stamp();
+     if (_gc_time_stamp != region_gc_time_stamp) {
+-      gclog_or_tty->print_cr("Region "HR_FORMAT" has GC time stamp = %d, "
++      gclog_or_tty->print_cr("Region " HR_FORMAT " has GC time stamp = %d, "
+                              "expected %d", HR_FORMAT_PARAMS(hr),
+                              region_gc_time_stamp, _gc_time_stamp);
+       _failures = true;
+@@ -2678,7 +2678,7 @@
+     } else if (r->continuesHumongous()) {
+       if (r->humongous_start_region() != _sh_region) {
+         gclog_or_tty->print_cr("Region " HR_FORMAT ", "
+-                               "HS = "PTR_FORMAT", should be "PTR_FORMAT,
++                               "HS = " PTR_FORMAT ", should be " PTR_FORMAT,
+                                HR_FORMAT_PARAMS(r),
+                                r->humongous_start_region(),
+                                _sh_region);
+@@ -2990,10 +2990,10 @@
+     if (!oopDesc::is_null(heap_oop)) {
+       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+       if (_g1h->is_obj_dead_cond(obj, _vo)) {
+-        gclog_or_tty->print_cr("Root location "PTR_FORMAT" "
+-                              "points to dead obj "PTR_FORMAT, p, (void*) obj);
++        gclog_or_tty->print_cr("Root location " PTR_FORMAT " "
++                              "points to dead obj " PTR_FORMAT, p, (void*) obj);
+         if (_vo == VerifyOption_G1UseMarkWord) {
+-          gclog_or_tty->print_cr("  Mark word: "PTR_FORMAT, (void*)(obj->mark()));
++          gclog_or_tty->print_cr("  Mark word: " PTR_FORMAT, (void*)(obj->mark()));
+         }
+         obj->print_on(gclog_or_tty);
+         _failures = true;
+@@ -3040,9 +3040,9 @@
+       // Verify that the strong code root list for this region
+       // contains the nmethod
+       if (!hrrs->strong_code_roots_list_contains(_nm)) {
+-        gclog_or_tty->print_cr("Code root location "PTR_FORMAT" "
+-                              "from nmethod "PTR_FORMAT" not in strong "
+-                              "code roots for region ["PTR_FORMAT","PTR_FORMAT")",
++        gclog_or_tty->print_cr("Code root location " PTR_FORMAT " "
++                              "from nmethod " PTR_FORMAT " not in strong "
++                              "code roots for region [" PTR_FORMAT "," PTR_FORMAT ")",
+                               p, _nm, hr->bottom(), hr->end());
+         _failures = true;
+       }
+@@ -3172,7 +3172,7 @@
+     if (o != NULL) {
+       HeapWord *start = (HeapWord *) o;
+       size_t word_sz = o->size();
+-      gclog_or_tty->print("\nPrinting obj "PTR_FORMAT" of size " SIZE_FORMAT
++      gclog_or_tty->print("\nPrinting obj " PTR_FORMAT " of size " SIZE_FORMAT
+                           " isMarkedPrev %d isMarkedNext %d isAllocSince %d\n",
+                           (void*) o, word_sz,
+                           _g1->isMarkedPrev(o),
+@@ -3183,7 +3183,7 @@
+       int *val;
+       for (cur = start; cur < end; cur++) {
+         val = (int *) cur;
+-        gclog_or_tty->print("\t "PTR_FORMAT":"PTR_FORMAT"\n", val, *val);
++        gclog_or_tty->print("\t " PTR_FORMAT ":" PTR_FORMAT "\n", val, *val);
+       }
+     }
+   }
+@@ -3218,9 +3218,9 @@
+         r->object_iterate(&not_dead_yet_cl);
+         if (_vo != VerifyOption_G1UseNextMarking) {
+           if (r->max_live_bytes() < not_dead_yet_cl.live_bytes()) {
+-            gclog_or_tty->print_cr("["PTR_FORMAT","PTR_FORMAT"] "
+-                                   "max_live_bytes "SIZE_FORMAT" "
+-                                   "< calculated "SIZE_FORMAT,
++            gclog_or_tty->print_cr("[" PTR_FORMAT "," PTR_FORMAT "] "
++                                   "max_live_bytes " SIZE_FORMAT " "
++                                   "< calculated " SIZE_FORMAT,
+                                    r->bottom(), r->end(),
+                                    r->max_live_bytes(),
+                                  not_dead_yet_cl.live_bytes());
+@@ -3532,7 +3532,7 @@
+     size_t occupied = hrrs->occupied();
+     _occupied_sum += occupied;
+ 
+-    gclog_or_tty->print_cr("Printing RSet for region "HR_FORMAT,
++    gclog_or_tty->print_cr("Printing RSet for region " HR_FORMAT,
+                            HR_FORMAT_PARAMS(r));
+     if (occupied == 0) {
+       gclog_or_tty->print_cr("  RSet is empty");
+@@ -3551,7 +3551,7 @@
+   }
+ 
+   ~PrintRSetsClosure() {
+-    gclog_or_tty->print_cr("Occupied Sum: "SIZE_FORMAT, _occupied_sum);
++    gclog_or_tty->print_cr("Occupied Sum: " SIZE_FORMAT, _occupied_sum);
+     gclog_or_tty->print_cr("========================================");
+     gclog_or_tty->cr();
+   }
+@@ -4372,7 +4372,7 @@
+ G1CollectedHeap::handle_evacuation_failure_par(G1ParScanThreadState* _par_scan_state,
+                                                oop old) {
+   assert(obj_in_cs(old),
+-         err_msg("obj: "PTR_FORMAT" should still be in the CSet",
++         err_msg("obj: " PTR_FORMAT " should still be in the CSet",
+                  (HeapWord*) old));
+   markOop m = old->mark();
+   oop forward_ptr = old->forward_to_atomic(old);
+@@ -4406,7 +4406,7 @@
+     // space for this object (old != forward_ptr) or they beat us in
+     // self-forwarding it (old == forward_ptr).
+     assert(old == forward_ptr || !obj_in_cs(forward_ptr),
+-           err_msg("obj: "PTR_FORMAT" forwarded to: "PTR_FORMAT" "
++           err_msg("obj: " PTR_FORMAT " forwarded to: " PTR_FORMAT " "
+                    "should not be in the CSet",
+                    (HeapWord*) old, (HeapWord*) forward_ptr));
+     return forward_ptr;
+@@ -4793,16 +4793,16 @@
+ 
+   ~G1StringSymbolTableUnlinkTask() {
+     guarantee(!_process_strings || !_do_in_parallel || StringTable::parallel_claimed_index() >= _initial_string_table_size,
+-              err_msg("claim value "INT32_FORMAT" after unlink less than initial string table size "INT32_FORMAT,
++              err_msg("claim value " INT32_FORMAT " after unlink less than initial string table size " INT32_FORMAT,
+                       StringTable::parallel_claimed_index(), _initial_string_table_size));
+     guarantee(!_process_symbols || !_do_in_parallel || SymbolTable::parallel_claimed_index() >= _initial_symbol_table_size,
+-              err_msg("claim value "INT32_FORMAT" after unlink less than initial symbol table size "INT32_FORMAT,
++              err_msg("claim value " INT32_FORMAT " after unlink less than initial symbol table size " INT32_FORMAT,
+                       SymbolTable::parallel_claimed_index(), _initial_symbol_table_size));
+ 
+     if (G1TraceStringSymbolTableScrubbing) {
+       gclog_or_tty->print_cr("Cleaned string and symbol table, "
+-                             "strings: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed, "
+-                             "symbols: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed",
++                             "strings: " SIZE_FORMAT " processed, " SIZE_FORMAT " removed, "
++                             "symbols: " SIZE_FORMAT " processed, " SIZE_FORMAT " removed",
+                              strings_processed(), strings_removed(),
+                              symbols_processed(), symbols_removed());
+     }
+@@ -6001,13 +6001,13 @@
+ bool G1CollectedHeap::verify_no_bits_over_tams(const char* bitmap_name, CMBitMapRO* bitmap,
+                                                HeapWord* tams, HeapWord* end) {
+   guarantee(tams <= end,
+-            err_msg("tams: "PTR_FORMAT" end: "PTR_FORMAT, tams, end));
++            err_msg("tams: " PTR_FORMAT " end: " PTR_FORMAT, tams, end));
+   HeapWord* result = bitmap->getNextMarkedWordAddress(tams, end);
+   if (result < end) {
+     gclog_or_tty->cr();
+-    gclog_or_tty->print_cr("## wrong marked address on %s bitmap: "PTR_FORMAT,
++    gclog_or_tty->print_cr("## wrong marked address on %s bitmap: " PTR_FORMAT,
+                            bitmap_name, result);
+-    gclog_or_tty->print_cr("## %s tams: "PTR_FORMAT" end: "PTR_FORMAT,
++    gclog_or_tty->print_cr("## %s tams: " PTR_FORMAT " end: " PTR_FORMAT,
+                            bitmap_name, tams, end);
+     return false;
+   }
+@@ -6033,7 +6033,7 @@
+     res_n = verify_no_bits_over_tams("next", next_bitmap, ntams, end);
+   }
+   if (!res_p || !res_n) {
+-    gclog_or_tty->print_cr("#### Bitmap verification failed for "HR_FORMAT,
++    gclog_or_tty->print_cr("#### Bitmap verification failed for " HR_FORMAT,
+                            HR_FORMAT_PARAMS(hr));
+     gclog_or_tty->print_cr("#### Caller: %s", caller);
+     return false;
+@@ -6345,7 +6345,7 @@
+         !r->rem_set()->is_empty()) {
+ 
+       if (G1TraceEagerReclaimHumongousObjects) {
+-        gclog_or_tty->print_cr("Live humongous region %u size "SIZE_FORMAT" start "PTR_FORMAT" length "UINT32_FORMAT" with remset "SIZE_FORMAT" code roots "SIZE_FORMAT" is marked %d reclaim candidate %d type array %d",
++        gclog_or_tty->print_cr("Live humongous region %u size " SIZE_FORMAT " start " PTR_FORMAT " length " UINT32_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d",
+                                region_idx,
+                                obj->size()*HeapWordSize,
+                                r->bottom(),
+@@ -6367,7 +6367,7 @@
+                       r->bottom()));
+ 
+     if (G1TraceEagerReclaimHumongousObjects) {
+-      gclog_or_tty->print_cr("Dead humongous region %u size "SIZE_FORMAT" start "PTR_FORMAT" length "UINT32_FORMAT" with remset "SIZE_FORMAT" code roots "SIZE_FORMAT" is marked %d reclaim candidate %d type array %d",
++      gclog_or_tty->print_cr("Dead humongous region %u size " SIZE_FORMAT " start " PTR_FORMAT " length " UINT32_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d",
+                              region_idx,
+                              obj->size()*HeapWordSize,
+                              r->bottom(),
+@@ -6523,7 +6523,7 @@
+   NoYoungRegionsClosure() : _success(true) { }
+   bool doHeapRegion(HeapRegion* r) {
+     if (r->is_young()) {
+-      gclog_or_tty->print_cr("Region ["PTR_FORMAT", "PTR_FORMAT") tagged as young",
++      gclog_or_tty->print_cr("Region [" PTR_FORMAT ", " PTR_FORMAT ") tagged as young",
+                              r->bottom(), r->end());
+       _success = false;
+     }
+@@ -6652,7 +6652,7 @@
+   }
+   assert(_allocator->used_unlocked() == recalculate_used(),
+          err_msg("inconsistent _allocator->used_unlocked(), "
+-                 "value: "SIZE_FORMAT" recalculated: "SIZE_FORMAT,
++                 "value: " SIZE_FORMAT " recalculated: " SIZE_FORMAT,
+                  _allocator->used_unlocked(), recalculate_used()));
+ }
+ 
+@@ -6873,8 +6873,8 @@
+       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+       HeapRegion* hr = _g1h->heap_region_containing(obj);
+       assert(!hr->continuesHumongous(),
+-             err_msg("trying to add code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
+-                     " starting at "HR_FORMAT,
++             err_msg("trying to add code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT
++                     " starting at " HR_FORMAT,
+                      _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
+ 
+       // HeapRegion::add_strong_code_root_locked() avoids adding duplicate entries.
+@@ -6900,8 +6900,8 @@
+       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
+       HeapRegion* hr = _g1h->heap_region_containing(obj);
+       assert(!hr->continuesHumongous(),
+-             err_msg("trying to remove code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
+-                     " starting at "HR_FORMAT,
++             err_msg("trying to remove code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT
++                     " starting at " HR_FORMAT,
+                      _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
+ 
+       hr->remove_strong_code_root(_nm);
+--- hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp.orig	2015-09-02 11:07:35.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp	2015-09-02 11:08:48.000000000 +0200
+@@ -475,7 +475,7 @@
+ bool G1RemSet::refine_card(jbyte* card_ptr, uint worker_i,
+                            bool check_for_refs_into_cset) {
+   assert(_g1->is_in_exact(_ct_bs->addr_for(card_ptr)),
+-         err_msg("Card at "PTR_FORMAT" index "SIZE_FORMAT" representing heap at "PTR_FORMAT" (%u) must be in committed heap",
++         err_msg("Card at " PTR_FORMAT " index " SIZE_FORMAT " representing heap at " PTR_FORMAT " (%u) must be in committed heap",
+                  p2i(card_ptr),
+                  _ct_bs->index_for(_ct_bs->addr_for(card_ptr)),
+                  _ct_bs->addr_for(card_ptr),
+--- hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp.orig	2015-09-02 11:13:52.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp	2015-09-02 11:15:30.000000000 +0200
+@@ -187,22 +187,22 @@
+   size_t code_root_elems() const { return _code_root_elems; }
+ 
+   void print_rs_mem_info_on(outputStream * out, size_t total) {
+-    out->print_cr("    "SIZE_FORMAT_W(8)"K (%5.1f%%) by "SIZE_FORMAT" %s regions",
++    out->print_cr("    " SIZE_FORMAT_W(8) "K (%5.1f%%) by " SIZE_FORMAT " %s regions",
+         round_to_K(rs_mem_size()), rs_mem_size_percent_of(total), amount(), _name);
+   }
+ 
+   void print_cards_occupied_info_on(outputStream * out, size_t total) {
+-    out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) entries by "SIZE_FORMAT" %s regions",
++    out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) entries by " SIZE_FORMAT " %s regions",
+         cards_occupied(), cards_occupied_percent_of(total), amount(), _name);
+   }
+ 
+   void print_code_root_mem_info_on(outputStream * out, size_t total) {
+-    out->print_cr("    "SIZE_FORMAT_W(8)"K (%5.1f%%) by "SIZE_FORMAT" %s regions",
++    out->print_cr("    " SIZE_FORMAT_W(8) "K (%5.1f%%) by " SIZE_FORMAT " %s regions",
+         round_to_K(code_root_mem_size()), code_root_mem_size_percent_of(total), amount(), _name);
+   }
+ 
+   void print_code_root_elems_info_on(outputStream * out, size_t total) {
+-    out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) elements by "SIZE_FORMAT" %s regions",
++    out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) elements by " SIZE_FORMAT " %s regions",
+         code_root_elems(), code_root_elems_percent_of(total), amount(), _name);
+   }
+ };
+@@ -280,19 +280,19 @@
+     RegionTypeCounter* counters[] = { &_young, &_humonguous, &_free, &_old, NULL };
+ 
+     out->print_cr("\n Current rem set statistics");
+-    out->print_cr("  Total per region rem sets sizes = "SIZE_FORMAT"K."
+-                  " Max = "SIZE_FORMAT"K.",
++    out->print_cr("  Total per region rem sets sizes = " SIZE_FORMAT "K."
++                  " Max = " SIZE_FORMAT "K.",
+                   round_to_K(total_rs_mem_sz()), round_to_K(max_rs_mem_sz()));
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_rs_mem_info_on(out, total_rs_mem_sz());
+     }
+ 
+-    out->print_cr("   Static structures = "SIZE_FORMAT"K,"
+-                  " free_lists = "SIZE_FORMAT"K.",
++    out->print_cr("   Static structures = " SIZE_FORMAT "K,"
++                  " free_lists = " SIZE_FORMAT "K.",
+                   round_to_K(HeapRegionRemSet::static_mem_size()),
+                   round_to_K(HeapRegionRemSet::fl_mem_size()));
+ 
+-    out->print_cr("    "SIZE_FORMAT" occupied cards represented.",
++    out->print_cr("    " SIZE_FORMAT " occupied cards represented.",
+                   total_cards_occupied());
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_cards_occupied_info_on(out, total_cards_occupied());
+@@ -301,29 +301,29 @@
+     // Largest sized rem set region statistics
+     HeapRegionRemSet* rem_set = max_rs_mem_sz_region()->rem_set();
+     out->print_cr("    Region with largest rem set = "HR_FORMAT", "
+-                  "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
++                  "size = " SIZE_FORMAT "K, occupied = " SIZE_FORMAT "K.",
+                   HR_FORMAT_PARAMS(max_rs_mem_sz_region()),
+                   round_to_K(rem_set->mem_size()),
+                   round_to_K(rem_set->occupied()));
+ 
+     // Strong code root statistics
+     HeapRegionRemSet* max_code_root_rem_set = max_code_root_mem_sz_region()->rem_set();
+-    out->print_cr("  Total heap region code root sets sizes = "SIZE_FORMAT"K."
+-                  "  Max = "SIZE_FORMAT"K.",
++    out->print_cr("  Total heap region code root sets sizes = " SIZE_FORMAT "K."
++                  "  Max = " SIZE_FORMAT "K.",
+                   round_to_K(total_code_root_mem_sz()),
+                   round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()));
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_code_root_mem_info_on(out, total_code_root_mem_sz());
+     }
+ 
+-    out->print_cr("    "SIZE_FORMAT" code roots represented.",
++    out->print_cr("    " SIZE_FORMAT " code roots represented.",
+                   total_code_root_elems());
+     for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
+       (*current)->print_code_root_elems_info_on(out, total_code_root_elems());
+     }
+ 
+-    out->print_cr("    Region with largest amount of code roots = "HR_FORMAT", "
+-                  "size = "SIZE_FORMAT "K, num_elems = "SIZE_FORMAT".",
++    out->print_cr("    Region with largest amount of code roots = " HR_FORMAT ", "
++                  "size = " SIZE_FORMAT "K, num_elems = " SIZE_FORMAT ".",
+                   HR_FORMAT_PARAMS(max_code_root_mem_sz_region()),
+                   round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()),
+                   round_to_K(max_code_root_rem_set->strong_code_roots_list_length()));
+@@ -332,16 +332,16 @@
+ 
+ void G1RemSetSummary::print_on(outputStream* out) {
+   out->print_cr("\n Recent concurrent refinement statistics");
+-  out->print_cr("  Processed "SIZE_FORMAT" cards",
++  out->print_cr("  Processed " SIZE_FORMAT " cards",
+                 num_concurrent_refined_cards());
+-  out->print_cr("  Of "SIZE_FORMAT" completed buffers:", num_processed_buf_total());
+-  out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) by concurrent RS threads.",
++  out->print_cr("  Of " SIZE_FORMAT " completed buffers:", num_processed_buf_total());
++  out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) by concurrent RS threads.",
+                 num_processed_buf_total(),
+                 percent_of(num_processed_buf_rs_threads(), num_processed_buf_total()));
+-  out->print_cr("     "SIZE_FORMAT_W(8)" (%5.1f%%) by mutator threads.",
++  out->print_cr("     " SIZE_FORMAT_W(8) " (%5.1f%%) by mutator threads.",
+                 num_processed_buf_mutator(),
+                 percent_of(num_processed_buf_mutator(), num_processed_buf_total()));
+-  out->print_cr("  Did "SIZE_FORMAT" coarsenings.", num_coarsenings());
++  out->print_cr("  Did " SIZE_FORMAT " coarsenings.", num_coarsenings());
+   out->print_cr("  Concurrent RS threads times (s)");
+   out->print("     ");
+   for (uint i = 0; i < _num_vtimes; i++) {
+--- hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp.orig	2015-09-02 11:13:52.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp	2015-09-02 11:15:44.000000000 +0200
+@@ -151,7 +151,7 @@
+ void G1StringDedupQueue::print_statistics(outputStream* st) {
+   st->print_cr(
+     "   [Queue]\n"
+-    "      [Dropped: "UINTX_FORMAT"]", _queue->_dropped);
++    "      [Dropped: " UINTX_FORMAT "]", _queue->_dropped);
+ }
+ 
+ void G1StringDedupQueue::verify() {
+--- hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp.orig	2015-09-02 11:13:52.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp	2015-09-02 11:18:07.000000000 +0200
+@@ -80,8 +80,8 @@
+   st->stamp(PrintGCTimeStamps);
+   st->print_cr(
+     "[GC concurrent-string-deduplication, "
+-    G1_STRDEDUP_BYTES_FORMAT_NS"->"G1_STRDEDUP_BYTES_FORMAT_NS"("G1_STRDEDUP_BYTES_FORMAT_NS"), avg "
+-    G1_STRDEDUP_PERCENT_FORMAT_NS", "G1_STRDEDUP_TIME_FORMAT"]",
++    G1_STRDEDUP_BYTES_FORMAT_NS "->" G1_STRDEDUP_BYTES_FORMAT_NS "(" G1_STRDEDUP_BYTES_FORMAT_NS "), avg "
++    G1_STRDEDUP_PERCENT_FORMAT_NS ", " G1_STRDEDUP_TIME_FORMAT "]",
+     G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes),
+     G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes - last_stat._deduped_bytes),
+     G1_STRDEDUP_BYTES_PARAM(last_stat._deduped_bytes),
+@@ -135,22 +135,22 @@
+ 
+   if (total) {
+     st->print_cr(
+-      "   [Total Exec: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT", Idle: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT", Blocked: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT"]",
++      "   [Total Exec: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Idle: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]",
+       stat._exec, stat._exec_elapsed, stat._idle, stat._idle_elapsed, stat._block, stat._block_elapsed);
+   } else {
+     st->print_cr(
+-      "   [Last Exec: "G1_STRDEDUP_TIME_FORMAT", Idle: "G1_STRDEDUP_TIME_FORMAT", Blocked: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT"]",
++      "   [Last Exec: " G1_STRDEDUP_TIME_FORMAT ", Idle: " G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]",
+       stat._exec_elapsed, stat._idle_elapsed, stat._block, stat._block_elapsed);
+   }
+   st->print_cr(
+-    "      [Inspected:    "G1_STRDEDUP_OBJECTS_FORMAT"]\n"
+-    "         [Skipped:   "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Hashed:    "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Known:     "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [New:       "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"]\n"
+-    "      [Deduplicated: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Young:     "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n"
+-    "         [Old:       "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]",
++    "      [Inspected:    " G1_STRDEDUP_OBJECTS_FORMAT "]\n"
++    "         [Skipped:   " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Hashed:    " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Known:     " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [New:       " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "]\n"
++    "      [Deduplicated: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Young:     " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n"
++    "         [Old:       " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]",
+     stat._inspected,
+     stat._skipped, skipped_percent,
+     stat._hashed, hashed_percent,
+--- hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp.orig	2015-09-02 12:36:40.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp	2015-09-02 12:37:19.000000000 +0200
+@@ -300,7 +300,7 @@
+ 
+     // Largest sized rem set region statistics
+     HeapRegionRemSet* rem_set = max_rs_mem_sz_region()->rem_set();
+-    out->print_cr("    Region with largest rem set = "HR_FORMAT", "
++    out->print_cr("    Region with largest rem set = " HR_FORMAT ", "
+                   "size = " SIZE_FORMAT "K, occupied = " SIZE_FORMAT "K.",
+                   HR_FORMAT_PARAMS(max_rs_mem_sz_region()),
+                   round_to_K(rem_set->mem_size()),
+--- hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp.orig	2015-09-02 12:36:40.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp	2015-09-02 12:41:56.000000000 +0200
+@@ -554,12 +554,12 @@
+ void G1StringDedupTable::print_statistics(outputStream* st) {
+   st->print_cr(
+     "   [Table]\n"
+-    "      [Memory Usage: "G1_STRDEDUP_BYTES_FORMAT_NS"]\n"
+-    "      [Size: "SIZE_FORMAT", Min: "SIZE_FORMAT", Max: "SIZE_FORMAT"]\n"
+-    "      [Entries: "UINTX_FORMAT", Load: "G1_STRDEDUP_PERCENT_FORMAT_NS", Cached: " UINTX_FORMAT ", Added: "UINTX_FORMAT", Removed: "UINTX_FORMAT"]\n"
+-    "      [Resize Count: "UINTX_FORMAT", Shrink Threshold: "UINTX_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT_NS"), Grow Threshold: "UINTX_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT_NS")]\n"
+-    "      [Rehash Count: "UINTX_FORMAT", Rehash Threshold: "UINTX_FORMAT", Hash Seed: 0x%x]\n"
+-    "      [Age Threshold: "UINTX_FORMAT"]",
++    "      [Memory Usage: " G1_STRDEDUP_BYTES_FORMAT_NS "]\n"
++    "      [Size: " SIZE_FORMAT ", Min: " SIZE_FORMAT ", Max: " SIZE_FORMAT "]\n"
++    "      [Entries: " UINTX_FORMAT ", Load: " G1_STRDEDUP_PERCENT_FORMAT_NS ", Cached: " UINTX_FORMAT ", Added: " UINTX_FORMAT ", Removed: " UINTX_FORMAT "]\n"
++    "      [Resize Count: " UINTX_FORMAT ", Shrink Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS "), Grow Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS ")]\n"
++    "      [Rehash Count: " UINTX_FORMAT ", Rehash Threshold: " UINTX_FORMAT ", Hash Seed: 0x%x]\n"
++    "      [Age Threshold: " UINTX_FORMAT "]",
+     G1_STRDEDUP_BYTES_PARAM(_table->_size * sizeof(G1StringDedupEntry*) + (_table->_entries + _entry_cache->size()) * sizeof(G1StringDedupEntry)),
+     _table->_size, _min_size, _max_size,
+     _table->_entries, (double)_table->_entries / (double)_table->_size * 100.0, _entry_cache->size(), _entries_added, _entries_removed,
+--- hotspot/src/share/vm/memory/genCollectedHeap.cpp.orig	2015-09-02 12:51:37.000000000 +0200
++++ hotspot/src/share/vm/memory/genCollectedHeap.cpp	2015-09-02 12:52:12.000000000 +0200
+@@ -1315,7 +1315,7 @@
+   // back a time later than 'now'.
+   jlong retVal = now - tolgc_cl.time();
+   if (retVal < 0) {
+-    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, (int64_t) retVal);)
++    NOT_PRODUCT(warning("time warp: " INT64_FORMAT, (int64_t) retVal);)
+     return 0;
+   }
+   return retVal;
+--- hotspot/src/share/vm/memory/generation.cpp.orig	2015-09-02 12:51:38.000000000 +0200
++++ hotspot/src/share/vm/memory/generation.cpp	2015-09-02 12:52:33.000000000 +0200
+@@ -187,7 +187,7 @@
+   bool   res = (available >= max_promotion_in_bytes);
+   if (PrintGC && Verbose) {
+     gclog_or_tty->print_cr(
+-      "Generation: promo attempt is%s safe: available("SIZE_FORMAT") %s max_promo("SIZE_FORMAT")",
++      "Generation: promo attempt is%s safe: available(" SIZE_FORMAT ") %s max_promo(" SIZE_FORMAT ")",
+       res? "":" not", available, res? ">=":"<",
+       max_promotion_in_bytes);
+   }
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp	2015-09-02 13:00:29.000000000 +0200
+@@ -371,7 +371,7 @@
+                                                   bool during_conc_mark,
+                                                   size_t marked_bytes) {
+   assert(0 <= marked_bytes && marked_bytes <= used(),
+-         err_msg("marked: "SIZE_FORMAT" used: "SIZE_FORMAT,
++         err_msg("marked: " SIZE_FORMAT " used: " SIZE_FORMAT,
+                  marked_bytes, used()));
+   _prev_top_at_mark_start = top();
+   _prev_marked_bytes = marked_bytes;
+@@ -559,9 +559,9 @@
+         // Object is in the region. Check that its less than top
+         if (_hr->top() <= (HeapWord*)obj) {
+           // Object is above top
+-          gclog_or_tty->print_cr("Object "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT") is above "
+-                                 "top "PTR_FORMAT,
++          gclog_or_tty->print_cr("Object " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ") is above "
++                                 "top " PTR_FORMAT,
+                                  (void *)obj, _hr->bottom(), _hr->end(), _hr->top());
+           _failures = true;
+           return;
+@@ -595,22 +595,22 @@
+     if (nm != NULL) {
+       // Verify that the nemthod is live
+       if (!nm->is_alive()) {
+-        gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has dead nmethod "
+-                               PTR_FORMAT" in its strong code roots",
++        gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has dead nmethod "
++                               PTR_FORMAT " in its strong code roots",
+                                _hr->bottom(), _hr->end(), nm);
+         _failures = true;
+       } else {
+         VerifyStrongCodeRootOopClosure oop_cl(_hr, nm);
+         nm->oops_do(&oop_cl);
+         if (!oop_cl.has_oops_in_region()) {
+-          gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has nmethod "
+-                                 PTR_FORMAT" in its strong code roots "
++          gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has nmethod "
++                                 PTR_FORMAT " in its strong code roots "
+                                  "with no pointers into region",
+                                  _hr->bottom(), _hr->end(), nm);
+           _failures = true;
+         } else if (oop_cl.failures()) {
+-          gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has other "
+-                                 "failures for nmethod "PTR_FORMAT,
++          gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has other "
++                                 "failures for nmethod " PTR_FORMAT,
+                                  _hr->bottom(), _hr->end(), nm);
+           _failures = true;
+         }
+@@ -644,8 +644,8 @@
+   // on its strong code root list
+   if (is_empty()) {
+     if (strong_code_roots_length > 0) {
+-      gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is empty "
+-                             "but has "SIZE_FORMAT" code root entries",
++      gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] is empty "
++                             "but has " SIZE_FORMAT " code root entries",
+                              bottom(), end(), strong_code_roots_length);
+       *failures = true;
+     }
+@@ -654,8 +654,8 @@
+ 
+   if (continuesHumongous()) {
+     if (strong_code_roots_length > 0) {
+-      gclog_or_tty->print_cr("region "HR_FORMAT" is a continuation of a humongous "
+-                             "region but has "SIZE_FORMAT" code root entries",
++      gclog_or_tty->print_cr("region " HR_FORMAT " is a continuation of a humongous "
++                             "region but has " SIZE_FORMAT " code root entries",
+                              HR_FORMAT_PARAMS(this), strong_code_roots_length);
+       *failures = true;
+     }
+@@ -679,7 +679,7 @@
+   else
+     st->print("   ");
+   st->print(" TS %5d", _gc_time_stamp);
+-  st->print(" PTAMS "PTR_FORMAT" NTAMS "PTR_FORMAT,
++  st->print(" PTAMS " PTR_FORMAT " NTAMS " PTR_FORMAT,
+             prev_top_at_mark_start(), next_top_at_mark_start());
+   G1OffsetTableContigSpace::print_on(st);
+ }
+@@ -744,25 +744,25 @@
+         }
+         if (!_g1h->is_in_closed_subset(obj)) {
+           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
+-          gclog_or_tty->print_cr("Field "PTR_FORMAT
+-                                 " of live obj "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT")",
++          gclog_or_tty->print_cr("Field " PTR_FORMAT
++                                 " of live obj " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                                  p, (void*) _containing_obj,
+                                  from->bottom(), from->end());
+           print_object(gclog_or_tty, _containing_obj);
+-          gclog_or_tty->print_cr("points to obj "PTR_FORMAT" not in the heap",
++          gclog_or_tty->print_cr("points to obj " PTR_FORMAT " not in the heap",
+                                  (void*) obj);
+         } else {
+           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
+           HeapRegion* to   = _g1h->heap_region_containing((HeapWord*)obj);
+-          gclog_or_tty->print_cr("Field "PTR_FORMAT
+-                                 " of live obj "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT")",
++          gclog_or_tty->print_cr("Field " PTR_FORMAT
++                                 " of live obj " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                                  p, (void*) _containing_obj,
+                                  from->bottom(), from->end());
+           print_object(gclog_or_tty, _containing_obj);
+-          gclog_or_tty->print_cr("points to dead obj "PTR_FORMAT" in region "
+-                                 "["PTR_FORMAT", "PTR_FORMAT")",
++          gclog_or_tty->print_cr("points to dead obj " PTR_FORMAT " in region "
++                                 "[" PTR_FORMAT ", " PTR_FORMAT ")",
+                                  (void*) obj, to->bottom(), to->end());
+           print_object(gclog_or_tty, obj);
+         }
+@@ -798,14 +798,14 @@
+               gclog_or_tty->print_cr("----------");
+             }
+             gclog_or_tty->print_cr("Missing rem set entry:");
+-            gclog_or_tty->print_cr("Field "PTR_FORMAT" "
+-                                   "of obj "PTR_FORMAT", "
+-                                   "in region "HR_FORMAT,
++            gclog_or_tty->print_cr("Field " PTR_FORMAT " "
++                                   "of obj " PTR_FORMAT ", "
++                                   "in region " HR_FORMAT,
+                                    p, (void*) _containing_obj,
+                                    HR_FORMAT_PARAMS(from));
+             _containing_obj->print_on(gclog_or_tty);
+-            gclog_or_tty->print_cr("points to obj "PTR_FORMAT" "
+-                                   "in region "HR_FORMAT,
++            gclog_or_tty->print_cr("points to obj " PTR_FORMAT " "
++                                   "in region " HR_FORMAT,
+                                    (void*) obj,
+                                    HR_FORMAT_PARAMS(to));
+             obj->print_on(gclog_or_tty);
+@@ -842,8 +842,8 @@
+ 
+     if (is_humongous != g1->isHumongous(obj_size) &&
+         !g1->is_obj_dead(obj, this)) { // Dead objects may have bigger block_size since they span several objects.
+-      gclog_or_tty->print_cr("obj "PTR_FORMAT" is of %shumongous size ("
+-                             SIZE_FORMAT" words) in a %shumongous region",
++      gclog_or_tty->print_cr("obj " PTR_FORMAT " is of %shumongous size ("
++                             SIZE_FORMAT " words) in a %shumongous region",
+                              p, g1->isHumongous(obj_size) ? "" : "non-",
+                              obj_size, is_humongous ? "" : "non-");
+        *failures = true;
+@@ -866,12 +866,12 @@
+                                    (vo == VerifyOption_G1UsePrevMarking &&
+                                    ClassLoaderDataGraph::unload_list_contains(klass));
+         if (!is_metaspace_object) {
+-          gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" "
++          gclog_or_tty->print_cr("klass " PTR_FORMAT " of object " PTR_FORMAT " "
+                                  "not metadata", klass, (void *)obj);
+           *failures = true;
+           return;
+         } else if (!klass->is_klass()) {
+-          gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" "
++          gclog_or_tty->print_cr("klass " PTR_FORMAT " of object " PTR_FORMAT " "
+                                  "not a klass", klass, (void *)obj);
+           *failures = true;
+           return;
+@@ -887,7 +887,7 @@
+           }
+         }
+       } else {
+-        gclog_or_tty->print_cr(PTR_FORMAT" no an oop", (void *)obj);
++        gclog_or_tty->print_cr(PTR_FORMAT " no an oop", (void *)obj);
+         *failures = true;
+         return;
+       }
+@@ -897,8 +897,8 @@
+   }
+ 
+   if (p != top()) {
+-    gclog_or_tty->print_cr("end of last object "PTR_FORMAT" "
+-                           "does not match top "PTR_FORMAT, p, top());
++    gclog_or_tty->print_cr("end of last object " PTR_FORMAT " "
++                           "does not match top " PTR_FORMAT, p, top());
+     *failures = true;
+     return;
+   }
+@@ -913,8 +913,8 @@
+     HeapWord* addr_1 = p;
+     HeapWord* b_start_1 = _offsets.block_start_const(addr_1);
+     if (b_start_1 != p) {
+-      gclog_or_tty->print_cr("BOT look up for top: "PTR_FORMAT" "
+-                             " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++      gclog_or_tty->print_cr("BOT look up for top: " PTR_FORMAT " "
++                             " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                              addr_1, b_start_1, p);
+       *failures = true;
+       return;
+@@ -925,8 +925,8 @@
+     if (addr_2 < the_end) {
+       HeapWord* b_start_2 = _offsets.block_start_const(addr_2);
+       if (b_start_2 != p) {
+-        gclog_or_tty->print_cr("BOT look up for top + 1: "PTR_FORMAT" "
+-                               " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++        gclog_or_tty->print_cr("BOT look up for top + 1: " PTR_FORMAT " "
++                               " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                                addr_2, b_start_2, p);
+         *failures = true;
+         return;
+@@ -939,8 +939,8 @@
+     if (addr_3 < the_end) {
+       HeapWord* b_start_3 = _offsets.block_start_const(addr_3);
+       if (b_start_3 != p) {
+-        gclog_or_tty->print_cr("BOT look up for top + diff: "PTR_FORMAT" "
+-                               " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++        gclog_or_tty->print_cr("BOT look up for top + diff: " PTR_FORMAT " "
++                               " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                                addr_3, b_start_3, p);
+         *failures = true;
+         return;
+@@ -951,8 +951,8 @@
+     HeapWord* addr_4 = the_end - 1;
+     HeapWord* b_start_4 = _offsets.block_start_const(addr_4);
+     if (b_start_4 != p) {
+-      gclog_or_tty->print_cr("BOT look up for end - 1: "PTR_FORMAT" "
+-                             " yielded "PTR_FORMAT", expecting "PTR_FORMAT,
++      gclog_or_tty->print_cr("BOT look up for end - 1: " PTR_FORMAT " "
++                             " yielded " PTR_FORMAT ", expecting " PTR_FORMAT,
+                              addr_4, b_start_4, p);
+       *failures = true;
+       return;
+@@ -960,8 +960,8 @@
+   }
+ 
+   if (is_humongous && object_num > 1) {
+-    gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is humongous "
+-                           "but has "SIZE_FORMAT", objects",
++    gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] is humongous "
++                           "but has " SIZE_FORMAT ", objects",
+                            bottom(), end(), object_num);
+     *failures = true;
+     return;
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp	2015-09-02 13:01:10.000000000 +0200
+@@ -414,7 +414,7 @@
+     HeapRegion* hr = _regions.get_by_index(i);
+     guarantee(hr != NULL, err_msg("invariant: i: %u", i));
+     guarantee(!prev_committed || hr->bottom() == prev_end,
+-              err_msg("invariant i: %u "HR_FORMAT" prev_end: "PTR_FORMAT,
++              err_msg("invariant i: %u " HR_FORMAT " prev_end: " PTR_FORMAT,
+                       i, HR_FORMAT_PARAMS(hr), p2i(prev_end)));
+     guarantee(hr->hrm_index() == i,
+               err_msg("invariant: i: %u hrm_index(): %u", i, hr->hrm_index()));
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp	2015-09-02 13:03:44.000000000 +0200
+@@ -91,7 +91,7 @@
+     // concurrency.
+ 
+     if (G1TraceHeapRegionRememberedSet) {
+-      gclog_or_tty->print_cr("    PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").",
++      gclog_or_tty->print_cr("    PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").",
+                              from,
+                              UseCompressedOops
+                              ? (void *)oopDesc::load_decode_heap_oop((narrowOop*)from)
+@@ -377,7 +377,7 @@
+ 
+ void FromCardCache::invalidate(uint start_idx, size_t new_num_regions) {
+   guarantee((size_t)start_idx + new_num_regions <= max_uintx,
+-            err_msg("Trying to invalidate beyond maximum region, from %u size "SIZE_FORMAT,
++            err_msg("Trying to invalidate beyond maximum region, from %u size " SIZE_FORMAT,
+                     start_idx, new_num_regions));
+   for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) {
+     uint end_idx = (start_idx + (uint)new_num_regions);
+@@ -392,7 +392,7 @@
+ void FromCardCache::print(outputStream* out) {
+   for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) {
+     for (uint j = 0; j < _max_regions; j++) {
+-      out->print_cr("_from_card_cache["UINT32_FORMAT"]["UINT32_FORMAT"] = "INT32_FORMAT".",
++      out->print_cr("_from_card_cache[" UINT32_FORMAT "][" UINT32_FORMAT "] = " INT32_FORMAT ".",
+                     i, j, at(i, j));
+     }
+   }
+@@ -432,7 +432,7 @@
+   int from_card = (int)(uintptr_t(from) >> CardTableModRefBS::card_shift);
+ 
+   if (G1TraceHeapRegionRememberedSet) {
+-    gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = "INT32_FORMAT")",
++    gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = " INT32_FORMAT ")",
+                   hr()->bottom(), from_card,
+                   FromCardCache::at((uint)tid, cur_hrm_ind));
+   }
+@@ -637,13 +637,13 @@
+ 
+   assert(_coarse_map.size() == region_bm->size(), "Precondition");
+   if (G1RSScrubVerbose) {
+-    gclog_or_tty->print("   Coarse map: before = "SIZE_FORMAT"...",
++    gclog_or_tty->print("   Coarse map: before = " SIZE_FORMAT "...",
+                         _n_coarse_entries);
+   }
+   _coarse_map.set_intersection(*region_bm);
+   _n_coarse_entries = _coarse_map.count_one_bits();
+   if (G1RSScrubVerbose) {
+-    gclog_or_tty->print_cr("   after = "SIZE_FORMAT".", _n_coarse_entries);
++    gclog_or_tty->print_cr("   after = " SIZE_FORMAT ".", _n_coarse_entries);
+   }
+ 
+   // Now do the fine-grained maps.
+@@ -1027,7 +1027,7 @@
+ 
+   card_index = _cur_region_card_offset + _cur_card_in_prt;
+   guarantee(_cur_card_in_prt < HeapRegion::CardsPerRegion,
+-            err_msg("Card index "SIZE_FORMAT" must be within the region", _cur_card_in_prt));
++            err_msg("Card index " SIZE_FORMAT " must be within the region", _cur_card_in_prt));
+   return true;
+ }
+ 
+@@ -1196,8 +1196,8 @@
+ 
+   size_t min_prt_size = sizeof(void*) + dummy->bm()->size_in_words() * HeapWordSize;
+   assert(dummy->mem_size() > min_prt_size,
+-         err_msg("PerRegionTable memory usage is suspiciously small, only has "SIZE_FORMAT" bytes. "
+-                 "Should be at least "SIZE_FORMAT" bytes.", dummy->mem_size(), min_prt_size));
++         err_msg("PerRegionTable memory usage is suspiciously small, only has " SIZE_FORMAT " bytes. "
++                 "Should be at least " SIZE_FORMAT " bytes.", dummy->mem_size(), min_prt_size));
+   free(dummy);
+   guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size");
+   // try to reset the state
+--- hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp.orig	2015-09-02 12:57:25.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp	2015-09-02 13:04:36.000000000 +0200
+@@ -32,7 +32,7 @@
+ uint FreeRegionList::_unrealistically_long_length = 0;
+ 
+ void HeapRegionSetBase::fill_in_ext_msg(hrs_ext_msg* msg, const char* message) {
+-  msg->append("[%s] %s ln: %u cy: "SIZE_FORMAT,
++  msg->append("[%s] %s ln: %u cy: " SIZE_FORMAT,
+               name(), message, length(), total_capacity_bytes());
+   fill_in_ext_msg_extra(msg);
+ }
+@@ -84,13 +84,13 @@
+ 
+ void HeapRegionSetBase::print_on(outputStream* out, bool print_contents) {
+   out->cr();
+-  out->print_cr("Set: %s ("PTR_FORMAT")", name(), this);
++  out->print_cr("Set: %s (" PTR_FORMAT ")", name(), this);
+   out->print_cr("  Region Assumptions");
+   out->print_cr("    humongous         : %s", BOOL_TO_STR(regions_humongous()));
+   out->print_cr("    free              : %s", BOOL_TO_STR(regions_free()));
+   out->print_cr("  Attributes");
+   out->print_cr("    length            : %14u", length());
+-  out->print_cr("    total capacity    : "SIZE_FORMAT_W(14)" bytes",
++  out->print_cr("    total capacity    : " SIZE_FORMAT_W(14) " bytes",
+                 total_capacity_bytes());
+ }
+ 
+@@ -106,7 +106,7 @@
+ }
+ 
+ void FreeRegionList::fill_in_ext_msg_extra(hrs_ext_msg* msg) {
+-  msg->append(" hd: "PTR_FORMAT" tl: "PTR_FORMAT, _head, _tail);
++  msg->append(" hd: " PTR_FORMAT " tl: " PTR_FORMAT, _head, _tail);
+ }
+ 
+ void FreeRegionList::remove_all() {
+@@ -277,8 +277,8 @@
+ void FreeRegionList::print_on(outputStream* out, bool print_contents) {
+   HeapRegionSetBase::print_on(out, print_contents);
+   out->print_cr("  Linking");
+-  out->print_cr("    head              : "PTR_FORMAT, _head);
+-  out->print_cr("    tail              : "PTR_FORMAT, _tail);
++  out->print_cr("    head              : " PTR_FORMAT, _head);
++  out->print_cr("    tail              : " PTR_FORMAT, _tail);
+ 
+   if (print_contents) {
+     out->print_cr("  Contents");
+@@ -306,7 +306,7 @@
+ 
+     count++;
+     guarantee(count < _unrealistically_long_length,
+-        hrs_err_msg("[%s] the calculated length: %u seems very long, is there maybe a cycle? curr: "PTR_FORMAT" prev0: "PTR_FORMAT" " "prev1: "PTR_FORMAT" length: %u", name(), count, curr, prev0, prev1, length()));
++        hrs_err_msg("[%s] the calculated length: %u seems very long, is there maybe a cycle? curr: " PTR_FORMAT " prev0: " PTR_FORMAT " " "prev1: " PTR_FORMAT " length: %u", name(), count, curr, prev0, prev1, length()));
+ 
+     if (curr->next() != NULL) {
+       guarantee(curr->next()->prev() == curr, "Next or prev pointers messed up");
+--- hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp.orig	2015-09-02 13:07:15.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp	2015-09-02 13:10:48.000000000 +0200
+@@ -86,7 +86,7 @@
+         while (words_left_to_fill > 0) {
+           size_t words_to_fill = MIN2(words_left_to_fill, CollectedHeap::filler_array_max_size());
+           assert(words_to_fill >= CollectedHeap::min_fill_size(),
+-            err_msg("Remaining size ("SIZE_FORMAT ") is too small to fill (based on " SIZE_FORMAT " and " SIZE_FORMAT ")",
++            err_msg("Remaining size (" SIZE_FORMAT ") is too small to fill (based on " SIZE_FORMAT " and " SIZE_FORMAT ")",
+             words_to_fill, words_left_to_fill, CollectedHeap::filler_array_max_size()));
+           CollectedHeap::fill_with_object((HeapWord*)cur_top, words_to_fill);
+           if (!os::numa_has_static_binding()) {
+--- hotspot/src/share/vm/prims/methodHandles.cpp.orig	2015-09-02 13:07:15.000000000 +0200
++++ hotspot/src/share/vm/prims/methodHandles.cpp	2015-09-02 13:10:16.000000000 +0200
+@@ -1300,27 +1300,27 @@
+ 
+ // These are the native methods on java.lang.invoke.MethodHandleNatives.
+ static JNINativeMethod MHN_methods[] = {
+-  {CC"init",                      CC"("MEM""OBJ")V",                     FN_PTR(MHN_init_Mem)},
+-  {CC"expand",                    CC"("MEM")V",                          FN_PTR(MHN_expand_Mem)},
+-  {CC"resolve",                   CC"("MEM""CLS")"MEM,                   FN_PTR(MHN_resolve_Mem)},
+-  {CC"getConstant",               CC"(I)I",                              FN_PTR(MHN_getConstant)},
++  {CC "init",                      CC "(" MEM "" OBJ ")V",                     FN_PTR(MHN_init_Mem)},
++  {CC "expand",                    CC "(" MEM ")V",                          FN_PTR(MHN_expand_Mem)},
++  {CC "resolve",                   CC "(" MEM "" CLS ")" MEM,                   FN_PTR(MHN_resolve_Mem)},
++  {CC "getConstant",               CC "(I)I",                              FN_PTR(MHN_getConstant)},
+   //  static native int getNamedCon(int which, Object[] name)
+-  {CC"getNamedCon",               CC"(I["OBJ")I",                        FN_PTR(MHN_getNamedCon)},
++  {CC "getNamedCon",               CC "(I[" OBJ ")I",                        FN_PTR(MHN_getNamedCon)},
+   //  static native int getMembers(Class<?> defc, String matchName, String matchSig,
+   //          int matchFlags, Class<?> caller, int skip, MemberName[] results);
+-  {CC"getMembers",                CC"("CLS""STRG""STRG"I"CLS"I["MEM")I", FN_PTR(MHN_getMembers)},
+-  {CC"objectFieldOffset",         CC"("MEM")J",                          FN_PTR(MHN_objectFieldOffset)},
+-  {CC"setCallSiteTargetNormal",   CC"("CS""MH")V",                       FN_PTR(MHN_setCallSiteTargetNormal)},
+-  {CC"setCallSiteTargetVolatile", CC"("CS""MH")V",                       FN_PTR(MHN_setCallSiteTargetVolatile)},
+-  {CC"staticFieldOffset",         CC"("MEM")J",                          FN_PTR(MHN_staticFieldOffset)},
+-  {CC"staticFieldBase",           CC"("MEM")"OBJ,                        FN_PTR(MHN_staticFieldBase)},
+-  {CC"getMemberVMInfo",           CC"("MEM")"OBJ,                        FN_PTR(MHN_getMemberVMInfo)}
++  {CC "getMembers",                CC "(" CLS "" STRG "" STRG "I" CLS "I[" MEM ")I", FN_PTR(MHN_getMembers)},
++  {CC "objectFieldOffset",         CC "(" MEM ")J",                          FN_PTR(MHN_objectFieldOffset)},
++  {CC "setCallSiteTargetNormal",   CC "(" CS "" MH ")V",                       FN_PTR(MHN_setCallSiteTargetNormal)},
++  {CC "setCallSiteTargetVolatile", CC "(" CS "" MH ")V",                       FN_PTR(MHN_setCallSiteTargetVolatile)},
++  {CC "staticFieldOffset",         CC "(" MEM ")J",                          FN_PTR(MHN_staticFieldOffset)},
++  {CC "staticFieldBase",           CC "(" MEM ")" OBJ,                        FN_PTR(MHN_staticFieldBase)},
++  {CC "getMemberVMInfo",           CC "(" MEM ")" OBJ,                        FN_PTR(MHN_getMemberVMInfo)}
+ };
+ 
+ static JNINativeMethod MH_methods[] = {
+   // UnsupportedOperationException throwers
+-  {CC"invoke",                    CC"(["OBJ")"OBJ,                       FN_PTR(MH_invoke_UOE)},
+-  {CC"invokeExact",               CC"(["OBJ")"OBJ,                       FN_PTR(MH_invokeExact_UOE)}
++  {CC"invoke",                    CC "([" OBJ ")" OBJ,                       FN_PTR(MH_invoke_UOE)},
++  {CC"invokeExact",               CC "([" OBJ ")" OBJ,                       FN_PTR(MH_invokeExact_UOE)}
+ };
+ 
+ /**
+--- hotspot/src/share/vm/oops/objArrayKlass.cpp.orig	2015-09-02 13:19:26.000000000 +0200
++++ hotspot/src/share/vm/oops/objArrayKlass.cpp	2015-09-02 13:22:11.000000000 +0200
+@@ -657,7 +657,7 @@
+       if (i > max_objArray_print_length) {
+         st->print("..."); break;
+       }
+-      st->print(" "INTPTR_FORMAT, (intptr_t)(void*)objArrayOop(obj)->obj_at(i));
++      st->print(" " INTPTR_FORMAT, (intptr_t)(void*)objArrayOop(obj)->obj_at(i));
+     }
+     st->print(" }");
+   }
+--- hotspot/src/share/vm/oops/oop.cpp.orig	2015-09-02 13:19:26.000000000 +0200
++++ hotspot/src/share/vm/oops/oop.cpp	2015-09-02 13:22:22.000000000 +0200
+@@ -46,7 +46,7 @@
+ 
+ void oopDesc::print_address_on(outputStream* st) const {
+   if (PrintOopAddress) {
+-    st->print("{"INTPTR_FORMAT"}", this);
++    st->print("{" INTPTR_FORMAT "}", this);
+   }
+ }
+ 
+--- hotspot/src/os/posix/vm/os_posix.cpp.orig	2015-09-02 13:32:01.000000000 +0200
++++ hotspot/src/os/posix/vm/os_posix.cpp	2015-09-02 13:33:42.000000000 +0200
+@@ -594,7 +594,7 @@
+   strncpy(buffer, "none", size);
+ 
+   const struct {
+-    int i;
++    unsigned i;
+     const char* s;
+   } flaginfo [] = {
+     { SA_NOCLDSTOP, "SA_NOCLDSTOP" },
+--- hotspot/src/share/vm/code/nmethod.cpp.orig	2015-09-02 13:19:26.000000000 +0200
++++ hotspot/src/share/vm/code/nmethod.cpp	2015-09-02 13:27:23.000000000 +0200
+@@ -2303,7 +2303,7 @@
+   void maybe_print(oop* p) {
+     if (_print_nm == NULL)  return;
+     if (!_detected_scavenge_root)  _print_nm->print_on(tty, "new scavenge root");
+-    tty->print_cr(""PTR_FORMAT"[offset=%d] detected scavengable oop "PTR_FORMAT" (found at "PTR_FORMAT")",
++    tty->print_cr("" PTR_FORMAT "[offset=%d] detected scavengable oop " PTR_FORMAT " (found at " PTR_FORMAT ")",
+                   _print_nm, (int)((intptr_t)p - (intptr_t)_print_nm),
+                   (void *)(*p), (intptr_t)p);
+     (*p)->print();
+@@ -2684,7 +2684,7 @@
+       _nm->print_nmethod(true);
+       _ok = false;
+     }
+-    tty->print_cr("*** non-oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)",
++    tty->print_cr("*** non-oop " PTR_FORMAT " found at " PTR_FORMAT " (offset %d)",
+                   (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
+   }
+   virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); }
+@@ -2808,7 +2808,7 @@
+       _nm->print_nmethod(true);
+       _ok = false;
+     }
+-    tty->print_cr("*** scavengable oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)",
++    tty->print_cr("*** scavengable oop " PTR_FORMAT " found at " PTR_FORMAT " (offset %d)",
+                   (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm));
+     (*p)->print();
+   }
+@@ -2853,7 +2853,7 @@
+   print_on(tty, NULL);
+ 
+   if (WizardMode) {
+-    tty->print("((nmethod*) "INTPTR_FORMAT ") ", this);
++    tty->print("((nmethod*) " INTPTR_FORMAT ") ", this);
+     tty->print(" for method " INTPTR_FORMAT , (address)method());
+     tty->print(" { ");
+     if (is_in_use())      tty->print("in_use ");
+--- hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp.orig	2015-09-02 13:28:16.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp	2015-09-02 13:31:09.000000000 +0200
+@@ -98,10 +98,10 @@
+   if (_allocated == 0) {
+     assert(_unused == 0,
+            err_msg("Inconsistency in PLAB stats: "
+-                   "_allocated: "SIZE_FORMAT", "
+-                   "_wasted: "SIZE_FORMAT", "
+-                   "_unused: "SIZE_FORMAT", "
+-                   "_used  : "SIZE_FORMAT,
++                   "_allocated: " SIZE_FORMAT ", "
++                   "_wasted: " SIZE_FORMAT ", "
++                   "_unused: " SIZE_FORMAT ", "
++                   "_used  : " SIZE_FORMAT,
+                    _allocated, _wasted, _unused, _used));
+ 
+     _allocated = 1;
+--- hotspot/src/share/vm/utilities/ostream.cpp.orig	2015-09-02 13:28:16.000000000 +0200
++++ hotspot/src/share/vm/utilities/ostream.cpp	2015-09-02 13:34:57.000000000 +0200
+@@ -277,7 +277,7 @@
+   size_t limit = (len + 16) / 16 * 16;
+   for (size_t i = 0; i < limit; ++i) {
+     if (i % 16 == 0) {
+-      indent().print(SIZE_FORMAT_HEX_W(07)":", i);
++      indent().print(SIZE_FORMAT_HEX_W(07) ":", i);
+     }
+     if (i % 2 == 0) {
+       print(" ");
+@@ -945,7 +945,7 @@
+     // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if
+     // we ever get round to introduce that method on the os class
+     xs->head("hotspot_log version='%d %d'"
+-             " process='%d' time_ms='"INT64_FORMAT"'",
++             " process='%d' time_ms='" INT64_FORMAT "'",
+              LOG_MAJOR_VERSION, LOG_MINOR_VERSION,
+              os::current_process_id(), (int64_t)time_ms);
+     // Write VM version header immediately.
+--- hotspot/src/share/vm/prims/perf.cpp.orig	2015-09-02 13:36:01.000000000 +0200
++++ hotspot/src/share/vm/prims/perf.cpp	2015-09-02 13:37:33.000000000 +0200
+@@ -290,17 +290,17 @@
+ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f)
+ #define BB "Ljava/nio/ByteBuffer;"
+ #define JLS "Ljava/lang/String;"
+-#define CL_ARGS     CC"("JLS"IIJ)"BB
+-#define CBA_ARGS    CC"("JLS"II[BI)"BB
++#define CL_ARGS     CC "(" JLS "IIJ)" BB
++#define CBA_ARGS    CC "(" JLS "II[BI)" BB
+ 
+ static JNINativeMethod perfmethods[] = {
+ 
+-  {CC"attach",              CC"("JLS"II)"BB,  FN_PTR(Perf_Attach)},
+-  {CC"detach",              CC"("BB")V",      FN_PTR(Perf_Detach)},
+-  {CC"createLong",          CL_ARGS,          FN_PTR(Perf_CreateLong)},
+-  {CC"createByteArray",     CBA_ARGS,         FN_PTR(Perf_CreateByteArray)},
+-  {CC"highResCounter",      CC"()J",          FN_PTR(Perf_HighResCounter)},
+-  {CC"highResFrequency",    CC"()J",          FN_PTR(Perf_HighResFrequency)}
++  {CC"attach",              CC "(" JLS "II)" BB, FN_PTR(Perf_Attach)},
++  {CC"detach",              CC "(" BB ")V",      FN_PTR(Perf_Detach)},
++  {CC"createLong",          CL_ARGS,             FN_PTR(Perf_CreateLong)},
++  {CC"createByteArray",     CBA_ARGS,            FN_PTR(Perf_CreateByteArray)},
++  {CC"highResCounter",      CC "()J",            FN_PTR(Perf_HighResCounter)},
++  {CC"highResFrequency",    CC "()J",            FN_PTR(Perf_HighResFrequency)}
+ };
+ 
+ #undef CBA_ARGS
+--- hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp.orig	2015-09-02 13:39:42.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp	2015-09-02 13:40:05.000000000 +0200
+@@ -669,7 +669,7 @@
+   jlong ret_val = now - _time_of_last_gc;
+   // XXX See note in genCollectedHeap::millis_since_last_gc().
+   if (ret_val < 0) {
+-    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, ret_val);)
++    NOT_PRODUCT(warning("time warp: " INT64_FORMAT, ret_val);)
+     return 0;
+   }
+   return ret_val;
+--- hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp.orig	2015-09-02 13:39:42.000000000 +0200
++++ hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	2015-09-02 13:40:50.000000000 +0200
+@@ -3292,7 +3292,7 @@
+   jlong ret_val = now - _time_of_last_gc;
+   // XXX See note in genCollectedHeap::millis_since_last_gc().
+   if (ret_val < 0) {
+-    NOT_PRODUCT(warning("time warp: "INT64_FORMAT, ret_val);)
++    NOT_PRODUCT(warning("time warp: " INT64_FORMAT, ret_val);)
+     return 0;
+   }
+   return ret_val;
+--- hotspot/src/share/vm/memory/referenceProcessor.cpp.orig	2015-09-02 13:42:24.000000000 +0200
++++ hotspot/src/share/vm/memory/referenceProcessor.cpp	2015-09-02 13:42:55.000000000 +0200
+@@ -161,7 +161,7 @@
+ 
+   NOT_PRODUCT(
+   if (now < _soft_ref_timestamp_clock) {
+-    warning("time warp: "INT64_FORMAT" to "INT64_FORMAT,
++    warning("time warp: " INT64_FORMAT " to " INT64_FORMAT,
+             _soft_ref_timestamp_clock, now);
+   }
+   )
+--- hotspot/src/share/vm/runtime/safepoint.cpp.orig	2015-09-02 14:51:21.000000000 +0200
++++ hotspot/src/share/vm/runtime/safepoint.cpp	2015-09-02 14:52:56.000000000 +0200
+@@ -983,7 +983,7 @@
+ 
+     case _running:
+     default:
+-       tty->print_cr("restart thread "INTPTR_FORMAT" with state %d",
++       tty->print_cr("restart thread " INTPTR_FORMAT " with state %d",
+                       _thread, _type);
+        _thread->print();
+       ShouldNotReachHere();
+@@ -1340,14 +1340,14 @@
+ 
+   for (int index = 0; index < VM_Operation::VMOp_Terminating; index++) {
+     if (_safepoint_reasons[index] != 0) {
+-      tty->print_cr("%-26s"UINT64_FORMAT_W(10), VM_Operation::name(index),
++      tty->print_cr("%-26s" UINT64_FORMAT_W(10), VM_Operation::name(index),
+                     _safepoint_reasons[index]);
+     }
+   }
+ 
+   tty->print_cr(UINT64_FORMAT_W(5)" VM operations coalesced during safepoint",
+                 _coalesced_vmop_count);
+-  tty->print_cr("Maximum sync time  "INT64_FORMAT_W(5)" ms",
++  tty->print_cr("Maximum sync time  " INT64_FORMAT_W(5) " ms",
+                 _max_sync_time / MICROUNITS);
+   tty->print_cr("Maximum vm operation time (except for Exit VM operation)  "
+                 INT64_FORMAT_W(5)" ms",
+--- hotspot/src/share/vm/memory/tenuredGeneration.cpp.orig	2015-09-02 18:11:24.000000000 +0200
++++ hotspot/src/share/vm/memory/tenuredGeneration.cpp	2015-09-02 18:11:32.000000000 +0200
+@@ -292,8 +292,8 @@
+   bool   res = (available >= av_promo) || (available >= max_promotion_in_bytes);
+   if (PrintGC && Verbose) {
+     gclog_or_tty->print_cr(
+-      "Tenured: promo attempt is%s safe: available("SIZE_FORMAT") %s av_promo("SIZE_FORMAT"),"
+-      "max_promo("SIZE_FORMAT")",
++      "Tenured: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT "),"
++      "max_promo(" SIZE_FORMAT ")",
+       res? "":" not", available, res? ">=":"<",
+       av_promo, max_promotion_in_bytes);
+   }
+--- hotspot/src/share/vm/services/threadService.cpp.orig	2015-09-02 18:11:24.000000000 +0200
++++ hotspot/src/share/vm/services/threadService.cpp	2015-09-02 18:11:32.000000000 +0200
+@@ -889,7 +889,7 @@
+       st->print("  waiting to lock monitor " INTPTR_FORMAT, waitingToLockMonitor);
+       oop obj = (oop)waitingToLockMonitor->object();
+       if (obj != NULL) {
+-        st->print(" (object "INTPTR_FORMAT ", a %s)", (address)obj,
++        st->print(" (object " INTPTR_FORMAT ", a %s)", (address)obj,
+                    (InstanceKlass::cast(obj->klass()))->external_name());
+ 
+         if (!currentThread->current_pending_monitor_is_from_java()) {
+--- hotspot/src/share/vm/memory/universe.cpp.orig	2015-09-02 18:25:28.000000000 +0200
++++ hotspot/src/share/vm/memory/universe.cpp	2015-09-02 18:26:04.000000000 +0200
+@@ -919,7 +919,7 @@
+ // Reserve the Java heap, which is now the same for all GCs.
+ ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) {
+   assert(alignment <= Arguments::conservative_max_heap_alignment(),
+-      err_msg("actual alignment "SIZE_FORMAT" must be within maximum heap alignment "SIZE_FORMAT,
++      err_msg("actual alignment " SIZE_FORMAT " must be within maximum heap alignment " SIZE_FORMAT,
+           alignment, Arguments::conservative_max_heap_alignment()));
+   size_t total_reserved = align_size_up(heap_size, alignment);
+   assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())),
+--- hotspot/src/share/vm/prims/unsafe.cpp.orig	2015-09-02 18:25:32.000000000 +0200
++++ hotspot/src/share/vm/prims/unsafe.cpp	2015-09-02 18:47:09.000000000 +0200
+@@ -977,7 +977,7 @@
+ UNSAFE_END
+ 
+ 
+-#define DAC_Args CLS"[B["OBJ
++#define DAC_Args CLS "[B[" OBJ
+ // define a class but do not make it known to the class loader or system dictionary
+ // - host_class:  supplies context for linkage, access control, protection domain, and class loader
+ // - data:  bytes of a class file, a raw memory address (length gives the number of bytes)
+@@ -1337,47 +1337,47 @@
+ 
+ #define LANG "Ljava/lang/"
+ 
+-#define OBJ LANG"Object;"
+-#define CLS LANG"Class;"
+-#define CTR LANG"reflect/Constructor;"
+-#define FLD LANG"reflect/Field;"
+-#define MTH LANG"reflect/Method;"
+-#define THR LANG"Throwable;"
++#define OBJ LANG "Object;"
++#define CLS LANG "Class;"
++#define CTR LANG "reflect/Constructor;"
++#define FLD LANG "reflect/Field;"
++#define MTH LANG "reflect/Method;"
++#define THR LANG "Throwable;"
+ 
+-#define DC0_Args LANG"String;[BII"
+-#define DC_Args  DC0_Args LANG"ClassLoader;" "Ljava/security/ProtectionDomain;"
++#define DC0_Args LANG "String;[BII"
++#define DC_Args  DC0_Args LANG "ClassLoader;" "Ljava/security/ProtectionDomain;"
+ 
+ #define CC (char*)  /*cast a literal from (const char*)*/
+ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f)
+ 
+ // define deprecated accessors for compabitility with 1.4.0
+ #define DECLARE_GETSETOOP_140(Boolean, Z) \
+-    {CC"get"#Boolean,      CC"("OBJ"I)"#Z,      FN_PTR(Unsafe_Get##Boolean##140)}, \
+-    {CC"put"#Boolean,      CC"("OBJ"I"#Z")V",   FN_PTR(Unsafe_Set##Boolean##140)}
++    {CC"get"#Boolean,      CC"(" OBJ "I)" #Z,      FN_PTR(Unsafe_Get##Boolean##140)}, \
++    {CC"put"#Boolean,      CC"(" OBJ "I" #Z ")V",   FN_PTR(Unsafe_Set##Boolean##140)}
+ 
+ // Note:  In 1.4.1, getObject and kin take both int and long offsets.
+ #define DECLARE_GETSETOOP_141(Boolean, Z) \
+-    {CC"get"#Boolean,      CC"("OBJ"J)"#Z,      FN_PTR(Unsafe_Get##Boolean)}, \
+-    {CC"put"#Boolean,      CC"("OBJ"J"#Z")V",   FN_PTR(Unsafe_Set##Boolean)}
++    {CC"get"#Boolean,      CC"(" OBJ "J)" #Z,      FN_PTR(Unsafe_Get##Boolean)}, \
++    {CC"put"#Boolean,      CC"(" OBJ "J" #Z ")V",   FN_PTR(Unsafe_Set##Boolean)}
+ 
+ // Note:  In 1.5.0, there are volatile versions too
+ #define DECLARE_GETSETOOP(Boolean, Z) \
+-    {CC"get"#Boolean,      CC"("OBJ"J)"#Z,      FN_PTR(Unsafe_Get##Boolean)}, \
+-    {CC"put"#Boolean,      CC"("OBJ"J"#Z")V",   FN_PTR(Unsafe_Set##Boolean)}, \
+-    {CC"get"#Boolean"Volatile",      CC"("OBJ"J)"#Z,      FN_PTR(Unsafe_Get##Boolean##Volatile)}, \
+-    {CC"put"#Boolean"Volatile",      CC"("OBJ"J"#Z")V",   FN_PTR(Unsafe_Set##Boolean##Volatile)}
++    {CC"get"#Boolean,      CC"(" OBJ "J)" #Z,      FN_PTR(Unsafe_Get##Boolean)}, \
++    {CC"put"#Boolean,      CC"(" OBJ "J" #Z ")V",   FN_PTR(Unsafe_Set##Boolean)}, \
++    {CC"get"#Boolean "Volatile",      CC"(" OBJ "J)" #Z,      FN_PTR(Unsafe_Get##Boolean##Volatile)}, \
++    {CC"put"#Boolean "Volatile",      CC"(" OBJ "J" #Z ")V",   FN_PTR(Unsafe_Set##Boolean##Volatile)}
+ 
+ 
+ #define DECLARE_GETSETNATIVE(Byte, B) \
+-    {CC"get"#Byte,         CC"("ADR")"#B,       FN_PTR(Unsafe_GetNative##Byte)}, \
+-    {CC"put"#Byte,         CC"("ADR#B")V",      FN_PTR(Unsafe_SetNative##Byte)}
++    {CC"get"#Byte,         CC"(" ADR ")" #B,       FN_PTR(Unsafe_GetNative##Byte)}, \
++    {CC"put"#Byte,         CC"(" ADR #B ")V",      FN_PTR(Unsafe_SetNative##Byte)}
+ 
+ 
+ 
+ // These are the methods for 1.4.0
+ static JNINativeMethod methods_140[] = {
+-    {CC"getObject",        CC"("OBJ"I)"OBJ"",   FN_PTR(Unsafe_GetObject140)},
+-    {CC"putObject",        CC"("OBJ"I"OBJ")V",  FN_PTR(Unsafe_SetObject140)},
++    {CC"getObject",        CC"(" OBJ "I)" OBJ "",   FN_PTR(Unsafe_GetObject140)},
++    {CC"putObject",        CC"(" OBJ "I" OBJ ")V",  FN_PTR(Unsafe_SetObject140)},
+ 
+     DECLARE_GETSETOOP_140(Boolean, Z),
+     DECLARE_GETSETOOP_140(Byte, B),
+@@ -1396,33 +1396,33 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"fieldOffset",        CC"("FLD")I",               FN_PTR(Unsafe_FieldOffset)},
+-    {CC"staticFieldBase",    CC"("CLS")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromClass)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"fieldOffset",        CC"(" FLD ")I",               FN_PTR(Unsafe_FieldOffset)},
++    {CC"staticFieldBase",    CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromClass)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)}
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)}
+ };
+ 
+ // These are the methods prior to the JSR 166 changes in 1.5.0
+ static JNINativeMethod methods_141[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
+ 
+     DECLARE_GETSETOOP_141(Boolean, Z),
+     DECLARE_GETSETOOP_141(Byte, B),
+@@ -1441,37 +1441,37 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)}
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)}
+ 
+ };
+ 
+ // These are the methods prior to the JSR 166 changes in 1.6.0
+ static JNINativeMethod methods_15[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
+-    {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObjectVolatile)},
+-    {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObjectVolatile",CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObjectVolatile)},
++    {CC"putObjectVolatile",CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
+ 
+ 
+     DECLARE_GETSETOOP(Boolean, Z),
+@@ -1491,42 +1491,42 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)},
+-    {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
+-    {CC"compareAndSwapInt",  CC"("OBJ"J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
+-    {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)},
++    {CC"compareAndSwapObject", CC"(" OBJ "J" OBJ "" OBJ ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
++    {CC"compareAndSwapInt",  CC"(" OBJ "J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
++    {CC"compareAndSwapLong", CC"(" OBJ "J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
+     {CC"park",               CC"(ZJ)V",                  FN_PTR(Unsafe_Park)},
+-    {CC"unpark",             CC"("OBJ")V",               FN_PTR(Unsafe_Unpark)}
++    {CC"unpark",             CC"(" OBJ ")V",               FN_PTR(Unsafe_Unpark)}
+ 
+ };
+ 
+ // These are the methods for 1.6.0 and 1.7.0
+ static JNINativeMethod methods_16[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
+-    {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObjectVolatile)},
+-    {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObjectVolatile",CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObjectVolatile)},
++    {CC"putObjectVolatile",CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
+ 
+     DECLARE_GETSETOOP(Boolean, Z),
+     DECLARE_GETSETOOP(Byte, B),
+@@ -1545,45 +1545,45 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC0_Args")"CLS,        FN_PTR(Unsafe_DefineClass0)},
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"tryMonitorEnter",    CC"("OBJ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)},
+-    {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
+-    {CC"compareAndSwapInt",  CC"("OBJ"J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
+-    {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
+-    {CC"putOrderedObject",   CC"("OBJ"J"OBJ")V",         FN_PTR(Unsafe_SetOrderedObject)},
+-    {CC"putOrderedInt",      CC"("OBJ"JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
+-    {CC"putOrderedLong",     CC"("OBJ"JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
++    {CC"defineClass",        CC"(" DC0_Args ")" CLS,        FN_PTR(Unsafe_DefineClass0)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"tryMonitorEnter",    CC"(" OBJ ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)},
++    {CC"compareAndSwapObject", CC"(" OBJ "J" OBJ "" OBJ ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
++    {CC"compareAndSwapInt",  CC"(" OBJ "J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
++    {CC"compareAndSwapLong", CC"(" OBJ "J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
++    {CC"putOrderedObject",   CC"(" OBJ "J" OBJ ")V",         FN_PTR(Unsafe_SetOrderedObject)},
++    {CC"putOrderedInt",      CC"(" OBJ "JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
++    {CC"putOrderedLong",     CC"(" OBJ "JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
+     {CC"park",               CC"(ZJ)V",                  FN_PTR(Unsafe_Park)},
+-    {CC"unpark",             CC"("OBJ")V",               FN_PTR(Unsafe_Unpark)}
++    {CC"unpark",             CC"(" OBJ ")V",               FN_PTR(Unsafe_Unpark)}
+ };
+ 
+ // These are the methods for 1.8.0
+ static JNINativeMethod methods_18[] = {
+-    {CC"getObject",        CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObject)},
+-    {CC"putObject",        CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObject)},
+-    {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"",   FN_PTR(Unsafe_GetObjectVolatile)},
+-    {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
++    {CC"getObject",        CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObject)},
++    {CC"putObject",        CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObject)},
++    {CC"getObjectVolatile",CC"(" OBJ "J)" OBJ "",   FN_PTR(Unsafe_GetObjectVolatile)},
++    {CC"putObjectVolatile",CC"(" OBJ "J" OBJ ")V",  FN_PTR(Unsafe_SetObjectVolatile)},
+ 
+     DECLARE_GETSETOOP(Boolean, Z),
+     DECLARE_GETSETOOP(Byte, B),
+@@ -1602,36 +1602,36 @@
+     DECLARE_GETSETNATIVE(Float, F),
+     DECLARE_GETSETNATIVE(Double, D),
+ 
+-    {CC"getAddress",         CC"("ADR")"ADR,             FN_PTR(Unsafe_GetNativeAddress)},
+-    {CC"putAddress",         CC"("ADR""ADR")V",          FN_PTR(Unsafe_SetNativeAddress)},
++    {CC"getAddress",         CC"(" ADR ")" ADR,             FN_PTR(Unsafe_GetNativeAddress)},
++    {CC"putAddress",         CC"(" ADR "" ADR ")V",          FN_PTR(Unsafe_SetNativeAddress)},
+ 
+-    {CC"allocateMemory",     CC"(J)"ADR,                 FN_PTR(Unsafe_AllocateMemory)},
+-    {CC"reallocateMemory",   CC"("ADR"J)"ADR,            FN_PTR(Unsafe_ReallocateMemory)},
+-    {CC"freeMemory",         CC"("ADR")V",               FN_PTR(Unsafe_FreeMemory)},
+-
+-    {CC"objectFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
+-    {CC"staticFieldOffset",  CC"("FLD")J",               FN_PTR(Unsafe_StaticFieldOffset)},
+-    {CC"staticFieldBase",    CC"("FLD")"OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
+-    {CC"ensureClassInitialized",CC"("CLS")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
+-    {CC"arrayBaseOffset",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
+-    {CC"arrayIndexScale",    CC"("CLS")I",               FN_PTR(Unsafe_ArrayIndexScale)},
++    {CC"allocateMemory",     CC"(J)" ADR,                 FN_PTR(Unsafe_AllocateMemory)},
++    {CC"reallocateMemory",   CC"(" ADR "J)" ADR,            FN_PTR(Unsafe_ReallocateMemory)},
++    {CC"freeMemory",         CC"(" ADR ")V",               FN_PTR(Unsafe_FreeMemory)},
++
++    {CC"objectFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_ObjectFieldOffset)},
++    {CC"staticFieldOffset",  CC"(" FLD ")J",               FN_PTR(Unsafe_StaticFieldOffset)},
++    {CC"staticFieldBase",    CC"(" FLD ")" OBJ,             FN_PTR(Unsafe_StaticFieldBaseFromField)},
++    {CC"ensureClassInitialized",CC"(" CLS ")V",            FN_PTR(Unsafe_EnsureClassInitialized)},
++    {CC"arrayBaseOffset",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayBaseOffset)},
++    {CC"arrayIndexScale",    CC"(" CLS ")I",               FN_PTR(Unsafe_ArrayIndexScale)},
+     {CC"addressSize",        CC"()I",                    FN_PTR(Unsafe_AddressSize)},
+     {CC"pageSize",           CC"()I",                    FN_PTR(Unsafe_PageSize)},
+ 
+-    {CC"defineClass",        CC"("DC_Args")"CLS,         FN_PTR(Unsafe_DefineClass)},
+-    {CC"allocateInstance",   CC"("CLS")"OBJ,             FN_PTR(Unsafe_AllocateInstance)},
+-    {CC"monitorEnter",       CC"("OBJ")V",               FN_PTR(Unsafe_MonitorEnter)},
+-    {CC"monitorExit",        CC"("OBJ")V",               FN_PTR(Unsafe_MonitorExit)},
+-    {CC"tryMonitorEnter",    CC"("OBJ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
+-    {CC"throwException",     CC"("THR")V",               FN_PTR(Unsafe_ThrowException)},
+-    {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
+-    {CC"compareAndSwapInt",  CC"("OBJ"J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
+-    {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
+-    {CC"putOrderedObject",   CC"("OBJ"J"OBJ")V",         FN_PTR(Unsafe_SetOrderedObject)},
+-    {CC"putOrderedInt",      CC"("OBJ"JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
+-    {CC"putOrderedLong",     CC"("OBJ"JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
++    {CC"defineClass",        CC"(" DC_Args ")" CLS,         FN_PTR(Unsafe_DefineClass)},
++    {CC"allocateInstance",   CC"(" CLS ")" OBJ,             FN_PTR(Unsafe_AllocateInstance)},
++    {CC"monitorEnter",       CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorEnter)},
++    {CC"monitorExit",        CC"(" OBJ ")V",               FN_PTR(Unsafe_MonitorExit)},
++    {CC"tryMonitorEnter",    CC"(" OBJ ")Z",               FN_PTR(Unsafe_TryMonitorEnter)},
++    {CC"throwException",     CC"(" THR ")V",               FN_PTR(Unsafe_ThrowException)},
++    {CC"compareAndSwapObject", CC"(" OBJ "J" OBJ "" OBJ ")Z",  FN_PTR(Unsafe_CompareAndSwapObject)},
++    {CC"compareAndSwapInt",  CC"(" OBJ "J""I""I"")Z",      FN_PTR(Unsafe_CompareAndSwapInt)},
++    {CC"compareAndSwapLong", CC"(" OBJ "J""J""J"")Z",      FN_PTR(Unsafe_CompareAndSwapLong)},
++    {CC"putOrderedObject",   CC"(" OBJ "J" OBJ ")V",         FN_PTR(Unsafe_SetOrderedObject)},
++    {CC"putOrderedInt",      CC"(" OBJ "JI)V",             FN_PTR(Unsafe_SetOrderedInt)},
++    {CC"putOrderedLong",     CC"(" OBJ "JJ)V",             FN_PTR(Unsafe_SetOrderedLong)},
+     {CC"park",               CC"(ZJ)V",                  FN_PTR(Unsafe_Park)},
+-    {CC"unpark",             CC"("OBJ")V",               FN_PTR(Unsafe_Unpark)}
++    {CC"unpark",             CC"(" OBJ ")V",               FN_PTR(Unsafe_Unpark)}
+ };
+ 
+ JNINativeMethod loadavg_method[] = {
+@@ -1639,28 +1639,28 @@
+ };
+ 
+ JNINativeMethod prefetch_methods[] = {
+-    {CC"prefetchRead",       CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchRead)},
+-    {CC"prefetchWrite",      CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchWrite)},
+-    {CC"prefetchReadStatic", CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchRead)},
+-    {CC"prefetchWriteStatic",CC"("OBJ"J)V",              FN_PTR(Unsafe_PrefetchWrite)}
++    {CC"prefetchRead",       CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchRead)},
++    {CC"prefetchWrite",      CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchWrite)},
++    {CC"prefetchReadStatic", CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchRead)},
++    {CC"prefetchWriteStatic",CC"(" OBJ "J)V",              FN_PTR(Unsafe_PrefetchWrite)}
+ };
+ 
+ JNINativeMethod memcopy_methods_17[] = {
+-    {CC"copyMemory",         CC"("OBJ"J"OBJ"JJ)V",       FN_PTR(Unsafe_CopyMemory2)},
+-    {CC"setMemory",          CC"("OBJ"JJB)V",            FN_PTR(Unsafe_SetMemory2)}
++    {CC"copyMemory",         CC"(" OBJ "J" OBJ "JJ)V",       FN_PTR(Unsafe_CopyMemory2)},
++    {CC"setMemory",          CC"(" OBJ "JJB)V",            FN_PTR(Unsafe_SetMemory2)}
+ };
+ 
+ JNINativeMethod memcopy_methods_15[] = {
+-    {CC"setMemory",          CC"("ADR"JB)V",             FN_PTR(Unsafe_SetMemory)},
+-    {CC"copyMemory",         CC"("ADR ADR"J)V",          FN_PTR(Unsafe_CopyMemory)}
++    {CC"setMemory",          CC"(" ADR "JB)V",             FN_PTR(Unsafe_SetMemory)},
++    {CC"copyMemory",         CC"(" ADR ADR "J)V",          FN_PTR(Unsafe_CopyMemory)}
+ };
+ 
+ JNINativeMethod anonk_methods[] = {
+-    {CC"defineAnonymousClass", CC"("DAC_Args")"CLS,      FN_PTR(Unsafe_DefineAnonymousClass)},
++    {CC"defineAnonymousClass", CC"(" DAC_Args ")" CLS,      FN_PTR(Unsafe_DefineAnonymousClass)},
+ };
+ 
+ JNINativeMethod lform_methods[] = {
+-    {CC"shouldBeInitialized",CC"("CLS")Z",               FN_PTR(Unsafe_ShouldBeInitialized)},
++    {CC"shouldBeInitialized",CC"(" CLS ")Z",               FN_PTR(Unsafe_ShouldBeInitialized)},
+ };
+ 
+ JNINativeMethod fence_methods[] = {
+--- hotspot/src/share/vm/prims/whitebox.cpp.orig	2015-09-02 18:55:43.000000000 +0200
++++ hotspot/src/share/vm/prims/whitebox.cpp	2015-09-02 18:58:04.000000000 +0200
+@@ -157,8 +157,8 @@
+ 
+ WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
+   CollectorPolicy * p = Universe::heap()->collector_policy();
+-  gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
+-    SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
++  gclog_or_tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap "
++    SIZE_FORMAT " Maximum heap " SIZE_FORMAT " Min alignment " SIZE_FORMAT " Max alignment " SIZE_FORMAT,
+     p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
+     p->space_alignment(), p->heap_alignment());
+ }
+@@ -193,8 +193,8 @@
+          Universe::narrow_oop_use_implicit_null_checks() )) {
+     tty->print_cr("WB_ReadFromNoaccessArea method is useless:\n "
+                   "\tUseCompressedOops is %d\n"
+-                  "\trhs.base() is "PTR_FORMAT"\n"
+-                  "\tUniverse::narrow_oop_base() is "PTR_FORMAT"\n"
++                  "\trhs.base() is " PTR_FORMAT "\n"
++                  "\tUniverse::narrow_oop_base() is " PTR_FORMAT "\n"
+                   "\tUniverse::narrow_oop_use_implicit_null_checks() is %d",
+                   UseCompressedOops,
+                   rhs.base(),
+@@ -247,8 +247,8 @@
+ 
+ WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o,
+         jlong reserved_space_size, jlong magnitude, jlong iterations))
+-  tty->print_cr("reservedSpaceSize="JLONG_FORMAT", magnitude="JLONG_FORMAT", "
+-                "iterations="JLONG_FORMAT"\n", reserved_space_size, magnitude,
++  tty->print_cr("reservedSpaceSize=" JLONG_FORMAT ", magnitude=" JLONG_FORMAT ", "
++                "iterations=" JLONG_FORMAT "\n", reserved_space_size, magnitude,
+                 iterations);
+   if (reserved_space_size < 0 || magnitude < 0 || iterations < 0) {
+     tty->print_cr("One of variables printed above is negative. Can't proceed.\n");
+--- hotspot/src/share/vm/oops/markOop.cpp.orig	2015-09-10 13:28:34.918039653 +0200
++++ hotspot/src/share/vm/oops/markOop.cpp	2015-09-10 13:29:26.890039849 +0200
+@@ -49,7 +49,7 @@
+         st->print("monitor=NULL");
+       else {
+         BasicLock * bl = (BasicLock *) mon->owner();
+-        st->print("monitor={count="INTPTR_FORMAT",waiters="INTPTR_FORMAT",recursions="INTPTR_FORMAT",owner="INTPTR_FORMAT"}",
++        st->print("monitor={count=" INTPTR_FORMAT ",waiters=" INTPTR_FORMAT ",recursions=" INTPTR_FORMAT ",owner=" INTPTR_FORMAT "}",
+                 mon->count(), mon->waiters(), mon->recursions(), p2i(bl));
+       }
+     } else {
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
new file mode 100644
index 0000000..8086142
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-genx11-in-headless.patch
@@ -0,0 +1,17 @@
+--- jdk/make/GenerateSources.gmk.orig	2015-08-24 11:23:34.720648954 +0200
++++ jdk/make/GenerateSources.gmk	2015-08-24 11:24:41.376649205 +0200
+@@ -73,9 +73,11 @@
+     GENSRC += $(GENSRC_OSX_ICONS)
+   endif
+ 
+-  ifneq ($(OPENJDK_TARGET_OS), macosx)
+-    include gensrc/GensrcX11Wrappers.gmk
+-    GENSRC += $(GENSRC_X11WRAPPERS)
++  ifndef BUILD_HEADLESS_ONLY
++    ifneq ($(OPENJDK_TARGET_OS), macosx)
++      include gensrc/GensrcX11Wrappers.gmk
++      GENSRC += $(GENSRC_X11WRAPPERS)
++    endif
+   endif
+ endif
+ 
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
new file mode 100644
index 0000000..10f55d6
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-no-unused-deps.patch
@@ -0,0 +1,94 @@
+--- jdk/make/lib/Awt2dLibraries.gmk.orig	2015-09-03 15:05:21.429981848 +0200
++++ jdk/make/lib/Awt2dLibraries.gmk	2015-09-03 15:05:44.705981936 +0200
+@@ -235,6 +235,10 @@
+   LIBAWT_DIRS += $(JDK_TOPDIR)/src/aix/porting
+ endif
+ 
++ifdef BUILD_HEADLESS_ONLY
++LIBAWT_CFLAGS += -DHEADLESS=true
++endif
++
+ LIBAWT_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \
+     $(X_CFLAGS) \
+     $(foreach dir, $(LIBAWT_DIRS), -I$(dir))
+@@ -1126,17 +1130,28 @@
+           -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks
+     endif
+ 
+-    LIBAWT_HEADLESS_FILES := \
+-        awt_Font.c \
+-        HeadlessToolkit.c \
+-        fontpath.c \
+-        VDrawingArea.c \
++    ifndef X11_NOT_NEEDED
++    LIBAWT_HEADLESS_X11_FILES := \
+         X11Color.c \
+         X11Renderer.c \
+         X11PMBlitLoops.c \
+         X11SurfaceData.c \
+         X11FontScaler_md.c \
+         X11TextRenderer_md.c \
++        GLXGraphicsConfig.c \
++        GLXSurfaceData.c
++    endif
++
++    ifndef CUPS_NOT_NEEDED
++    LIBAWT_HEADLESS_CUPS_FILES := \
++        CUPSfuncs.c
++    endif
++
++    LIBAWT_HEADLESS_FILES := \
++        awt_Font.c \
++        HeadlessToolkit.c \
++        fontpath.c \
++        VDrawingArea.c \
+         OGLBlitLoops.c \
+         OGLBufImgOps.c \
+         OGLContext.c \
+@@ -1149,10 +1164,9 @@
+         OGLSurfaceData.c \
+         OGLTextRenderer.c \
+         OGLVertexCache.c \
+-        GLXGraphicsConfig.c \
+-        GLXSurfaceData.c \
+         AccelGlyphCache.c \
+-        CUPSfuncs.c
++	$(LIBAWT_HEADLESS_X11_FILES) \
++	$(LIBAWT_HEADLESS_CUPS_FILES)
+ 
+     LIBAWT_HEADLESS_REORDER :=
+     ifeq ($(OPENJDK_TARGET_OS), solaris)
+--- jdk/make/CompileNativeLibraries.gmk.orig	2015-08-24 13:35:55.320678845 +0200
++++ jdk/make/CompileNativeLibraries.gmk	2015-08-24 13:36:22.776678949 +0200
+@@ -85,7 +85,9 @@
+ 
+ include lib/Awt2dLibraries.gmk
+ 
++ifndef BUILD_SOUNDLESS_ONLY
+ include lib/SoundLibraries.gmk
++endif
+ 
+ # Include the corresponding custom file, if present. 
+ -include $(CUSTOM_MAKE_DIR)/CompileNativeLibraries.gmk
+--- jdk/src/solaris/native/sun/awt/jawt.c.orig	2015-08-24 14:12:29.376687104 +0200
++++ jdk/src/solaris/native/sun/awt/jawt.c	2015-08-24 14:16:20.420687974 +0200
+@@ -33,7 +33,7 @@
+  */
+ JNIEXPORT jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt)
+ {
+-#if defined(JAVASE_EMBEDDED) && defined(HEADLESS)
++#if defined(JAVASE_EMBEDDED) || defined(HEADLESS)
+     /* there are no AWT libs available at all */
+     return JNI_FALSE;
+ #else
+--- jdk/src/solaris/native/sun/awt/utility/rect.h.orig	2015-09-03 14:45:40.717977403 +0200
++++ jdk/src/solaris/native/sun/awt/utility/rect.h	2015-09-03 14:46:46.337977650 +0200
+@@ -28,7 +28,7 @@
+ #ifndef _AWT_RECT_H
+ #define _AWT_RECT_H
+ 
+-#ifndef MACOSX
++#if !(defined(MACOSX) || defined(HEADLESS))
+ #include <X11/Xlib.h>
+ typedef XRectangle RECT_T;
+ #else
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
new file mode 100644
index 0000000..bc5dd7e
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch
@@ -0,0 +1,120 @@
+--- make/common/NativeCompilation.gmk.orig	2015-09-09 17:15:33.869765681 +0200
++++ make/common/NativeCompilation.gmk	2015-09-09 17:55:26.485774688 +0200
+@@ -434,58 +434,6 @@
+           $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
+ 		$(CP) $$< $$@
+         endif
+-
+-        ifneq ($(OPENJDK_TARGET_OS), macosx)   # OBJCOPY is not used on MacOS X
+-          ifneq ($(OPENJDK_TARGET_OS), windows)  # nor on Windows
+-            ifeq ($(OPENJDK_TARGET_OS), solaris)
+-              # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
+-              # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
+-              # empty section headers until a fixed $(OBJCOPY) is available.
+-              # An empty section header has sh_addr == 0 and sh_size == 0.
+-              # This problem has only been seen on Solaris X64, but we call this tool
+-              # on all Solaris builds just in case.
+-              #
+-              # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
+-              # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
+-              $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \
+-				$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
+-		$(RM) $$@
+-		$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
+-            else # not solaris
+-              $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET)
+-		$(RM) $$@
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
+-            endif # Touch to not retrigger rule on rebuild
+-		$(TOUCH) $$@
+-          endif # !windows
+-        endif # !macosx
+-
+-        ifeq ($(ZIP_DEBUGINFO_FILES), true)
+-ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
+-          $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz
+-
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $$($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
+-endif # no MacOS X support yet
+-        else
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \
+-                $$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb
+-          else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
+-            $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
+-          endif
+-        endif
+       endif
+     endif
+ 
+@@ -518,58 +466,6 @@
+           $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
+ 		$(CP) $$< $$@
+         endif
+-
+-        ifneq ($(OPENJDK_TARGET_OS), macosx)   # OBJCOPY is not used on MacOS X
+-          ifneq ($(OPENJDK_TARGET_OS), windows)  # nor on Windows
+-            ifeq ($(OPENJDK_TARGET_OS), solaris)
+-              # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
+-              # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
+-              # empty section headers until a fixed $(OBJCOPY) is available.
+-              # An empty section header has sh_addr == 0 and sh_size == 0.
+-              # This problem has only been seen on Solaris X64, but we call this tool
+-              # on all Solaris builds just in case.
+-              #
+-              # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
+-              # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
+-              $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \
+-				$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
+-		$(RM) $$@
+-		$(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$<
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$<
+-            else # not solaris
+-              $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET)
+-		$(RM) $$@
+-		$(OBJCOPY) --only-keep-debug $$< $$@
+-		$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
+-            endif
+-		$(TOUCH) $$@
+-          endif # !windows
+-        endif # !macosx
+-
+-        ifeq ($(ZIP_DEBUGINFO_FILES), true)
+-ifneq ($(OPENJDK_TARGET_OS), macosx) # no MacOS X support yet
+-          $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz
+-
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $$($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
+-endif # no MacOS X support yet
+-        else
+-          ifeq ($(OPENJDK_TARGET_OS), windows)
+-            $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \
+-                $$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb
+-          else ifneq ($(OPENJDK_TARGET_OS), macosx) # MacOS X does not use .debuginfo files
+-            $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo
+-          endif
+-        endif
+       endif
+     endif
+ 
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
new file mode 100644
index 0000000..d33dc96
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-restrict-to-staging-dir.patch
@@ -0,0 +1,11 @@
+--- hotspot/make/linux/makefiles/dtrace.make.orig	2015-09-01 08:00:59.737868760 +0200
++++ hotspot/make/linux/makefiles/dtrace.make	2015-09-01 08:01:24.049859677 +0200
+@@ -40,7 +40,7 @@
+ ifneq ($(ALT_SDT_H),)
+   SDT_H_FILE = $(ALT_SDT_H)
+ else
+-  SDT_H_FILE = /usr/include/sys/sdt.h
++  SDT_H_FILE = $(SYS_ROOT)/usr/include/sys/sdt.h
+ endif
+ DTRACE_ENABLED = $(shell test -f $(SDT_H_FILE) && echo $(SDT_H_FILE))
+ REASON = "$(SDT_H_FILE) not found"
diff --git a/recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
new file mode 100644
index 0000000..9e1d204
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch
@@ -0,0 +1,23 @@
+# HG changeset patch
+# User sgehwolf
+# Date 1434121785 -3600
+# Node ID 6217fd2c767b467641bf7b41a9c37273e8fa0cbd
+# Parent  ff0929a59ced0e144201aa05819ae2e47d6f2c61
+8087120: [GCC5] java.lang.StackOverflowError on Zero JVM initialization on non x86 platforms.
+Summary: Use __builtin_frame_address(0) rather than returning address of local variable.
+Reviewed-by: dholmes
+
+diff -r ff0929a59ced -r 6217fd2c767b src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+--- hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp.orig	Thu Jun 11 20:19:26 2015 -0700
++++ hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp	Fri Jun 12 16:09:45 2015 +0100
+@@ -59,8 +59,8 @@
+ extern sigjmp_buf* get_jmp_buf_for_continuation();
+ 
+ address os::current_stack_pointer() {
+-  address dummy = (address) &dummy;
+-  return dummy;
++  // return the address of the current function
++  return (address)__builtin_frame_address(0);
+ }
+ 
+ frame os::get_sender_for_C_frame(frame* fr) {
diff --git a/recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch b/recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch
new file mode 100644
index 0000000..61eddc7
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-72b00/remove-shell-variables-from-autoheader.patch
@@ -0,0 +1,31 @@
+--- common/autoconf/basics.m4.orig	2015-08-17 18:02:01.642657746 +0200
++++ common/autoconf/basics.m4	2015-08-17 18:14:44.046660616 +0200
+@@ -466,21 +466,21 @@
+   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])
++  AC_CONFIG_HEADERS([config.h: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])
++  AC_CONFIG_FILES([spec.gmk:spec.gmk.in])
+   # The hotspot-spec.gmk file contains legacy variables for the hotspot make system.
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/hotspot-spec.gmk:$AUTOCONF_DIR/hotspot-spec.gmk.in])
++  AC_CONFIG_FILES([hotspot-spec.gmk:hotspot-spec.gmk.in])
+   # The bootcycle-spec.gmk file contains support for boot cycle builds.
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in])
++  AC_CONFIG_FILES([bootcycle-spec.gmk:bootcycle-spec.gmk.in])
+   # The compare.sh is used to compare the build output to other builds.
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/compare.sh:$AUTOCONF_DIR/compare.sh.in])
++  AC_CONFIG_FILES([compare.sh:compare.sh.in])
+   # Spec.sh is currently used by compare-objects.sh
+-  AC_CONFIG_FILES([$OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in])
++  AC_CONFIG_FILES([spec.sh: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])
++  AC_CONFIG_FILES([Makefile:Makefile.in])
+ 
+   # Save the arguments given to us
+   echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments
diff --git a/recipes-core/openjdk/openjdk-8-common.inc b/recipes-core/openjdk/openjdk-8-common.inc
new file mode 100644
index 0000000..b943718
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-common.inc
@@ -0,0 +1,229 @@
+DESCRIPTION = "Java runtime based upon the OpenJDK Project"
+HOMEPAGE = "http://http://openjdk.java.net/"
+LICENSE  = "GPL-2.0-with-classpath-exception"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7b4baeedfe2d40cb03536573bc2c89b1"
+
+inherit java autotools gettext qemu pkgconfig
+
+AUTOTOOLS_SCRIPT_PATH = "${S}/common/autoconf/"
+export AUTOCONF_DIR="${AUTOTOOLS_SCRIPT_PATH}"
+
+# for weird openjdk-common.inc
+S = "${WORKDIR}/${OPENJDK_HG_U}-${OPENJDK_CHANGESET}"
+
+SRC_URI = " \
+  ${OPENJDK_URI} \
+  ${HOTSPOT_URI} \
+  ${CORBA_URI} \
+  ${JAXP_URI} \
+  ${JAXWS_URI} \
+  ${JDK_URI} \
+  ${LANGTOOLS_URI} \
+  ${NASHORN_URI} \
+  file://LICENSE \
+  ${PATCHES_URI} \
+  "
+
+do_unpack_extract_submodules () {
+    cd "${S}"
+    # tar --transform
+    tar xjf ${WORKDIR}/${CORBA_FILE} --transform "s,-${CORBA_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${HOTSPOT_FILE} --transform "s,-${HOTSPOT_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${JAXP_FILE} --transform "s,-${JAXP_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${JAXWS_FILE} --transform "s,-${JAXWS_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${JDK_FILE} --transform "s,-${JDK_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${LANGTOOLS_FILE} --transform "s,-${LANGTOOLS_CHANGESET},,g"
+    tar xjf ${WORKDIR}/${NASHORN_FILE} --transform "s,-${NASHORN_CHANGESET},,g"
+}
+
+def package_config_option_cleanup(d):
+    distro_x11 = bb.utils.contains('DISTRO_FEATURES', 'x11', True, False, d)
+    distro_alsa = bb.utils.contains('DISTRO_FEATURES', 'alsa', True, False, d)
+    distro_pulseaudio = bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', True, False, d)
+
+    with_x11 = bb.utils.contains('PACKAGECONFIG', 'x11', True, False, d)
+    with_cups = bb.utils.contains('PACKAGECONFIG', 'cups', True, False, d)
+    with_alsa = bb.utils.contains('PACKAGECONFIG', 'alsa', True, False, d)
+    with_pulseaudio = bb.utils.contains('PACKAGECONFIG', 'pulseaudio', True, False, d)
+
+    option_headless = bb.utils.contains('PACKAGECONFIG', 'headless', True, False, d)
+    option_headful = bb.utils.contains('PACKAGECONFIG', 'headful', True, False, d)
+    option_soundless = bb.utils.contains('PACKAGECONFIG', 'soundless', True, False, d)
+
+    if option_headless and option_headful:
+        option_headless = False
+
+    if option_headful and not with_x11:
+        with_x11 = True
+
+    if option_headful and not with_cups:
+        with_cups = True
+
+    if option_soundless and with_alsa:
+        with_alsa = False
+
+    if option_soundless and with_pulseaudio:
+        with_pulseaudio = False
+
+    if with_x11 and not distro_x11:
+        with_x11 = False
+
+    if with_alsa and not distro_alsa:
+        with_alsa = False
+
+    if with_pulseaudio and not distro_pulseaudio:
+        with_pulseaudio = False
+
+    if option_headful and not with_x11:
+        option_headful = False
+
+    if option_headful and not with_cups:
+        option_headful = False
+
+    if not option_headless and not with_x11:
+        option_headless = True
+
+    if not option_headless and not with_cups:
+        option_headless = True
+
+    if not option_soundless and not with_alsa:
+        option_soundless = True
+
+    if not option_soundless and not with_pulseaudio:
+        option_soundless = True
+
+    options = {'make': [], 'cpp': [], 'env': [], 'configure': ["--disable-ccache"] }
+
+    if option_headful:
+        options['configure'].append("--enable-headful")
+
+    if option_headless:
+        options['configure'].append("--disable-headful")
+        options['make'].append("BUILD_HEADLESS_ONLY=1")
+        options['make'].append("BUILD_HEADLESS=true")
+        options['cpp'].append("-DHEADLESS=true")
+
+    if option_soundless:
+        options['make'].append("BUILD_SOUNDLESS_ONLY=1")
+
+    if not with_x11:
+        options['make'].append("X11_NOT_NEEDED=1")
+        options['env'].append("X11_NOT_NEEDED=yes")
+
+    if not with_cups:
+        options['make'].append("CUPS_NOT_NEEDED=1")
+        options['env'].append("CUPS_NOT_NEEDED=yes")
+
+    if not with_alsa:
+        options['make'].append("ALSA_NOT_NEEDED=1")
+        options['env'].append("ALSA_NOT_NEEDED=yes")
+
+    if not with_pulseaudio:
+        options['make'].append("PULSE_NOT_NEEDED=1")
+        options['env'].append("PULSE_NOT_NEEDED=yes")
+
+    options = [ ' '.join(options['make']), ' '.join(options['cpp']), ' '.join(options['env']), ' '.join(options['configure']) ]
+
+    return options
+
+def jdk_make_options(d):
+    options = package_config_option_cleanup(d)
+    return options[0]
+
+def jdk_cpp_options(d):
+    options = package_config_option_cleanup(d)
+    if not options[1]:
+        return ""
+
+    return " " + options[1]
+
+def jdk_environment_options(d):
+    options = package_config_option_cleanup(d)
+    return options[2]
+
+def jdk_configure_options(d):
+    options = package_config_option_cleanup(d)
+    return options[3]
+
+do_unpack[postfuncs] += "do_unpack_extract_submodules"
+
+POST_CONFIGURE_CLEAN_X11 = "${@base_contains('PACKAGECONFIG', 'x11', '', 'rm -f jdk/src/solaris/classes/sun/awt/X11/*.java', d)}"
+
+do_patch_openjdk8() {
+	olddir=`pwd`
+	cd "${S}"
+	${POST_CONFIGURE_CLEAN_X11}
+	for OJ8P in ${WORKDIR}/openjdk8-*.patch; do
+		patch -p0 < ${OJ8P}
+	done
+}
+
+do_patch[postfuncs] += "do_patch_openjdk8"
+
+do_configure_prepend() {
+	export ${@jdk_environment_options(d)}
+}
+
+# OpenJDK supports parallel compilation but uses a plain number for this.
+# In OE we have PARALLEL_MAKE which is the actual option passed to make,
+# e.g. "-j 4".
+OPENJDK8_PARALLEL_MAKE := "${PARALLEL_MAKE}"
+PARALLEL_MAKE = ""
+def get_jdk8_native_jobs(d):
+    import bb
+
+    pm = bb.data.getVar('OPENJDK8_PARALLEL_MAKE', d, 1);
+    if not pm:
+        return "1"
+
+    pm = pm.split("j");
+    if (len(pm) == 2):
+        return pm[1].strip()
+
+    # Whatever found in PARALLEL_MAKE was not suitable.
+    return "1"
+
+# A function that is needed in the Shark builds.
+def get_llvm_configure_arch(d):
+    import bb;
+
+    arch = bb.data.getVar('TRANSLATED_TARGET_ARCH', d, 1)
+    if arch == "x86-64" or arch == "i486" or arch == "i586" or arch == "i686":
+        arch = "x86"
+    elif arch == "arm":
+        arch = "arm"
+    elif arch == "mipsel" or arch == "mips":
+        arch = "mips"
+    elif arch == "powerpc" or arch == "powerpc64":
+        arch = "powerpc"
+    else:
+        bb.warn("%s does not support %s yet" % (bb.data.getVar('PN', d, 1), arch) );
+
+    return arch
+
+# Provides the target architecture to the configure script.
+export LLVM_CONFIGURE_ARCH="${@get_llvm_configure_arch(d)}"
+
+# OpenJDK uses slightly different names for certain arches. We need to know
+#	this to create some files which are expected by the build.
+def get_jdk_arch(d):
+    import bb
+
+    jdk_arch = bb.data.getVar('TRANSLATED_TARGET_ARCH', d, 1)
+    if jdk_arch == "x86-64":
+        jdk_arch = "amd64"
+    elif jdk_arch == "powerpc":
+        jdk_arch = "ppc"
+    elif jdk_arch == "powerpc64":
+        jdk_arch = "ppc64"
+    elif (jdk_arch == "i486" or jdk_arch == "i586" or jdk_arch == "i686"):
+        jdk_arch = "i386"
+
+    return jdk_arch
+
+JDK_ARCH = "${@get_jdk_arch(d)}"
+
+export DEBUG_BINARIES = "true"
+
+ALTERNATIVE_PRIORITY = "50"
diff --git a/recipes-core/openjdk/openjdk-8-cross.inc b/recipes-core/openjdk/openjdk-8-cross.inc
new file mode 100644
index 0000000..f3ae65b
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-cross.inc
@@ -0,0 +1,202 @@
+JDKPN = "openjdk-8"
+JREPN = "openjre-8"
+
+JDK_HOME = "${libdir_jvm}/${JDKPN}"
+JRE_HOME = "${libdir_jvm}/${JREPN}"
+
+DEPENDS = "openjdk-8-native \
+	   zip-native ant-native \
+           libxslt \
+	   jpeg libpng \
+	   krb5 libffi \
+	   fontconfig freetype \
+          "
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x11] = "--with-x,,libx11 xproto libxt libxext libxrender"
+PACKAGECONFIG[cups] = "--with-cups,,cups"
+PACKAGECONFIG[alsa] = "--with-alsa,,alsa-lib-native"
+
+PACKAGECONFIG[jce] = "--enable-unlimited-crypto,,"
+
+PACKAGECONFIG[zip] = "--with-zlib=system,--with-zlib=bundled,zlib,"
+PACKAGECONFIG[gif] = "--with-giflib=system,--with-giflib=bundled,giflib,"
+
+export WANT_LLVM_RELEASE = "3.5.2"
+PACKAGECONFIG[zero] = "--with-jvm-variants=zero,,,"
+PACKAGECONFIG[shark] = "--with-jvm-variants=zeroshark,,llvm3.5,"
+
+require openjdk-8-common.inc
+
+JAVA_HOME[unexport] = "1"
+
+SRC_URI_append = "\
+	file://jvm.cfg \
+       "
+
+# do not use --wth-extra-cflags, it breaks building demos for jdk
+# maybe disabling demos is more reasonable than avoiding --wth-extra-cflags
+# needs discussion
+EXTRA_OECONF_append = "\
+	--with-jobs=${@get_jdk8_native_jobs(d)} \
+	\
+	--with-sys-root=${STAGING_DIR} \
+	--with-tools-dir=${STAGING_DIR_NATIVE} \
+	--with-boot-jdk=${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native \
+	\
+	--disable-precompiled-headers \
+	--disable-zip-debug-info \
+	\
+	${@jdk_configure_options(d)} \
+  "
+
+do_configure_append() {
+	sed -i -e 's,POST_STRIP_CMD:=.*,POST_STRIP_CMD:=,g' ${B}/spec.gmk
+}
+
+export MAKE_VERBOSE = "y"
+export MFLAGS="${@jdk_make_options(d)} MAKE_VERBOSE=y QUIETLY= VERBOSE=-s LOG_LEVEL=trace STRIP_POLICY=no_strip"
+
+BUILD_LD="${BUILD_CCLD}"
+
+EXTRA_OEMAKE_append = ' \
+                OE_CFLAGS="${CFLAGS}" \
+                OE_CPPFLAGS="${CPPFLAGS}" \
+                OE_CXXFLAGS="${CXXFLAGS}" \
+                OE_LDFLAGS="${LDFLAGS}" \
+		${@jdk_make_options(d)} \
+		ALT_SDT_H="${STAGING_INCDIR}" \
+		ALT_CUPS_HEADERS_PATH="${STAGING_INCDIR}" \
+		ALT_FREETYPE_HEADERS_PATH="${STAGING_INCDIR}/freetype2" \
+		ALT_FREETYPE_LIB_PATH="${STAGING_LIBDIR}" \
+		STRIP_POLICY=no_strip \
+		MAKE_VERBOSE=y VERBOSE=-s LOG_LEVEL=trace \
+		QUIETLY= \
+		images \
+               '
+
+FILES_${JREPN}_append = "\
+	${JRE_HOME}/bin/[a-z]* \
+	${JRE_HOME}/lib/[a-z]* \
+	${JRE_HOME}/LICENSE \
+	${JRE_HOME}/release \
+       "
+
+FILES_${JDKPN}_append = "\
+	${JDK_HOME}/bin/[a-z]* \
+	${JDK_HOME}/lib/[a-z]* \
+	${JDK_HOME}/jre/bin/[a-z]* \
+	${JDK_HOME}/jre/lib/[a-z]* \
+	${JDK_HOME}/LICENSE \
+	${JDK_HOME}/jre/LICENSE \
+	${JDK_HOME}/release \
+       "
+
+FILES_${JDKPN}-dev_append = "\
+	${JDK_HOME}/include \
+       "
+
+FILES_${JDKPN}-dbg_append = "\
+	${JDK_HOME}/bin/.debug/ \
+	${JDK_HOME}/lib/.debug/ \
+	${JDK_HOME}/lib/${JDK_ARCH}/.debug/ \
+	${JDK_HOME}/lib/${JDK_ARCH}/jli/.debug/ \
+	${JDK_HOME}/jre/bin/.debug/ \
+	${JDK_HOME}/jre/lib/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/jli/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/native_threads/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/server/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/headless/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/xawt/.debug/ \
+	${JDK_HOME}/jre/lib/${JDK_ARCH}/client/.debug/ \
+       "
+
+FILES_${JREPN}-dbg_append = "\
+	${JRE_HOME}/bin/.debug/ \
+	${JRE_HOME}/lib/.debug/ \
+	${JRE_HOME}/lib/${JDK_ARCH}/.debug/ \
+	${JRE_HOME}/lib/${JDK_ARCH}/jli/.debug/ \
+	${JRE_HOME}/lib/${JDK_ARCH}/server/.debug/ \
+       "
+
+FILES_${JDKPN}-demo = " ${JDK_HOME}/demo ${JDK_HOME}/sample "
+RDEPENDS_${JDKPN}-demo = " ${JDKPN} "
+
+FILES_${JDKPN}-demo-dbg = "\
+	${JDK_HOME}/demo/jvmti/gctest/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/heapTracker/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/heapViewer/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/hprof/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/minst/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/mtrace/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/versionCheck/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/waiters/lib/.debug/ \
+	${JDK_HOME}/demo/jvmti/compiledMethodLoad/lib/.debug/ \
+       "
+
+FILES_${JDKPN}-doc_append = "\
+	${JDK_HOME}/man \
+	${JDK_HOME}/ASSEMBLY_EXCEPTION \
+	${JDK_HOME}/THIRD_PARTY_README \
+	${JDK_HOME}/jre/ASSEMBLY_EXCEPTION \
+	${JDK_HOME}/jre/THIRD_PARTY_README \
+       "
+FILES_${JREPN}-doc_append = "\
+	${JRE_HOME}/man \
+	${JRE_HOME}/ASSEMBLY_EXCEPTION \
+	${JRE_HOME}/THIRD_PARTY_README \
+       "
+
+FILES_${JDKPN}-source = " ${JDK_HOME}/src.zip "
+
+# Even though a vm is a hard dependency it is set as RRECOMMENDS so a single vm can get uninstalled:
+# root@beaglebone:~/java# opkg remove openjdk-7-vm-shark
+# No packages removed.
+# Collected errors:
+#  * print_dependents_warning: Package openjdk-7-vm-shark is depended upon by packages:
+#  * print_dependents_warning: 	openjdk-7-java
+#  * print_dependents_warning: These might cease to work if package openjdk-7-vm-shark is removed.
+#RRECOMMENDS_${JDKPN}-java = "java2-vm"
+
+# There is a symlink to a .so but this one is valid.
+INSANE_SKIP_${JDKPN}-common = "dev-so"
+
+FILES_${JDKPN}-doc_append = "${JDK_HOME}/man"
+
+do_compile_append() {
+    find ${B}/images/j2sdk-image -name "*.jar" -print0 | \
+      xargs -0 -n1 ${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native/bin/pack200 --repack --effort=9 --segment-limit=-1 --modification-time=latest
+    find ${B}/images/j2re-image -name "*.jar" -print0 | \
+      xargs -0 -n1 ${STAGING_LIBDIR_NATIVE}/jvm/openjdk-8-native/bin/pack200 --repack --effort=9 --segment-limit=-1 --modification-time=latest --strip-debug 
+}
+
+do_install_jdk() {
+	rm -rf ${D}${JDK_HOME}
+    	mkdir -p ${D}${JDK_HOME}
+	cp -rp ${B}/images/j2sdk-image/* ${D}${JDK_HOME}
+	install -m644 ${WORKDIR}/jvm.cfg  ${D}${JDK_HOME}/jre/lib/${JDK_ARCH}/
+	find ${D}${JDK_HOME} -name "*.debuginfo" -print0 | xargs -0 rm
+}
+
+do_install_jre() {
+	rm -rf ${D}${JRE_HOME}
+    	mkdir -p ${D}${JRE_HOME}
+	cp -rp ${B}/images/j2re-image/* ${D}${JRE_HOME}
+	install -m644 ${WORKDIR}/jvm.cfg  ${D}${JRE_HOME}/lib/${JDK_ARCH}/
+	find ${D}${JRE_HOME} -name "*.debuginfo" -print0 | xargs -0 rm
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_${JDKPN} = "java"
+ALTERNATIVE_TARGET_${JDKPN} = "${JDK_HOME}/bin/java"
+
+ALTERNATIVE_${JREPN} = "java"
+ALTERNATIVE_TARGET_${JREPN} = "${JRE_HOME}/bin/java"
+
+ALTERNATIVE_${JDKPN}-jdk = "javac"
+ALTERNATIVE_TARGET_${JDKPN}-jdk = "${JDK_HOME}/bin/javac"
+
+ALTERNATIVE_LINK_NAME[java] = "${bindir}/java"
+ALTERNATIVE_LINK_NAME[javac] = "${bindir}/javac"
diff --git a/recipes-core/openjdk/openjdk-8-native.inc b/recipes-core/openjdk/openjdk-8-native.inc
new file mode 100644
index 0000000..b8fa9f2
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-native.inc
@@ -0,0 +1,63 @@
+JDK_DIR = "openjdk-8-native"
+DEPENDS = " \
+	   icedtea7-native ant-native \
+	   libxslt-native attr-native \
+	   giflib-native jpeg-native libpng-native \
+	   glib-2.0-native freetype-native fontconfig-native \
+	   zlib-native zip-native \
+	   unzip-native make-native \
+          "
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x11] = "--with-x,,libx11-native xproto-native libxt-native libxext-native libxrender-native"
+PACKAGECONFIG[cups] = "--with-cups,,cups"
+PACKAGECONFIG[alsa] = "--with-alsa,,alsa-lib-native"
+PACKAGECONFIG[jce] = "--enable-unlimited-crypto,,"
+
+# do not use --wth-extra-cflags, it breaks building demos for jdk
+# maybe disabling demos is more reasonable than avoiding --wth-extra-cflags
+# needs discussion
+EXTRA_OECONF_append = "\
+	--with-jobs=${@get_jdk8_native_jobs(d)} \
+	\
+	--with-sys-root=${STAGING_DIR_NATIVE} \
+	--with-tools-dir=${STAGING_DIR_NATIVE} \
+	--with-boot-jdk=${STAGING_LIBDIR_NATIVE}/jvm/icedtea7-native \
+	${@jdk_configure_options(d)} \
+  "
+# --with-boot-jdk=${WORKDIR}/fake-jdk
+
+inherit native
+
+require openjdk-8-common.inc
+
+CFLAGS_append = "${@jdk_cpp_options(d)}"
+CPPFLAGS_append = "${@jdk_cpp_options(d)}"
+CXXFLAGS_append = "${@jdk_cpp_options(d)}"
+
+export MAKE_VERBOSE = "y"
+export MFLAGS="${@jdk_make_options(d)} MAKE_VERBOSE=y QUIETLY= VERBOSE=-s LOG_LEVEL=trace"
+
+EXTRA_OEMAKE_append = ' \
+                OE_CFLAGS="${CFLAGS}" \
+                OE_CPPFLAGS="${CPPFLAGS}" \
+                OE_CXXFLAGS="${CXXFLAGS}" \
+                OE_LDFLAGS="${LDFLAGS}" \
+		${@jdk_make_options(d)} \
+		MAKE_VERBOSE=y VERBOSE=-s LOG_LEVEL=trace \
+		QUIETLY= \
+		images \
+               '
+
+do_install() {
+	rm -rf ${STAGING_LIBDIR_NATIVE}/jvm/${JDK_DIR}
+    	mkdir -p ${STAGING_LIBDIR_NATIVE}/jvm/${JDK_DIR}
+	cp -rp ${B}/images/j2sdk-image/* ${STAGING_LIBDIR_NATIVE}/jvm/${JDK_DIR}
+
+	# clean up the mess from bootstrap
+	rm -f ${STAGING_BINDIR_NATIVE}/java
+	rm -f ${STAGING_BINDIR_NATIVE}/javac
+
+	ln -sf "../lib/jvm/${JDK_DIR}/bin/java" ${STAGING_BINDIR_NATIVE}/java
+	ln -sf "../lib/jvm/${JDK_DIR}/bin/javac" ${STAGING_BINDIR_NATIVE}/javac
+}
diff --git a/recipes-core/openjdk/openjdk-8-native_72b00.bb b/recipes-core/openjdk/openjdk-8-native_72b00.bb
new file mode 100644
index 0000000..1da7411
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-native_72b00.bb
@@ -0,0 +1,16 @@
+require openjdk-8-release-72b00.inc
+require openjdk-8-native.inc
+
+PROVIDES = "virtual/java-native virtual/javac-native"
+
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "java javac"
+ALTERNATIVE_LINK[java] = "${bindir}/java"
+ALTERNATIVE_TARGET[java] = "${JDK_HOME}/bin/java"
+ALTERNATIVE_PRIORITY[java] = "100"
+ALTERNATIVE_LINK[javac] = "${bindir}/javac"
+ALTERNATIVE_TARGET[javac] = "${JDK_HOME}/bin/javac"
+ALTERNATIVE_PRIORITY[javac] = "100"
+
+# PR = "${INC_PR}.1"
diff --git a/recipes-core/openjdk/openjdk-8-release-72b00.inc b/recipes-core/openjdk/openjdk-8-release-72b00.inc
new file mode 100644
index 0000000..201977e
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8-release-72b00.inc
@@ -0,0 +1,89 @@
+FILESPATH =. "${FILE_DIRNAME}/openjdk-8-72b00:"
+
+PATCHES_URI="\
+  file://remove-shell-variables-from-autoheader.patch;striplevel=0 \
+  file://filter-aclocal-copy-too.patch;striplevel=0 \
+  file://dont-expect-fqpn-for-make.patch;striplevel=0 \
+  file://openjdk8-no-genx11-in-headless.patch;apply=no \
+  file://openjdk8-no-unused-deps.patch;apply=no \
+  file://openjdk8-find-compiler-fix-env-respect.patch;apply=no \
+  file://openjdk8-prevent-debuginfo-in-favour-of-openembedded-package-split.patch;apply=no \
+"
+
+# Name of the directory containing the compiled output
+BUILD_DIR = "openjdk.build"
+BUILD_DIR_ECJ = "openjdk.build-ecj"
+
+# Force arm mode for now
+ARM_INSTRUCTION_SET_armv4t = "ARM"
+
+CORBA_CHANGESET = "f0c760a2a888"
+SRC_URI[corba.md5sum] = "8f3449008b075f388eccf64236bb3039"
+SRC_URI[corba.sha256sum] = "591fa4cd2b6115c754362c7fd310c0abeaf50523cccbdd19eca925cb2cadcae3"
+
+JAXP_CHANGESET = "176a2ce2e2d6"
+SRC_URI[jaxp.md5sum] = "fc6c36203ea8702a0d8d88e63f4f984a"
+SRC_URI[jaxp.sha256sum] = "45842a92f48b7b190d4a532bdeafa7b7ec6e7ac13932d4709a52eb7d16c3a02f"
+
+JAXWS_CHANGESET = "121e784f01d1"
+SRC_URI[jaxws.md5sum] = "47958e1021cf9af555ba1d473e1ba3a1"
+SRC_URI[jaxws.sha256sum] = "de6552e3fce8f47524156d59fc5667caa5f07ff41342a9570fff90be064bd5be"
+
+JDK_CHANGESET = "97b3a4fc3290"
+SRC_URI[jdk.md5sum] = "c513a840f2d9bbe8158b0cba2f95e1bf"
+SRC_URI[jdk.sha256sum] = "fff6d7c086a0cada2b7564783a3fc0d2f266332a4ec3c46892f9d82b8590ffcd"
+
+LANGTOOLS_CHANGESET = "14891e981af0"
+SRC_URI[langtools.md5sum] = "88269f92d4caf952cf94ea5a1355f7ed"
+SRC_URI[langtools.sha256sum] = "8c0a44f467a65500864208d59f9bbbf49ccd19864d2c149765e8ac0b515542ac"
+
+NASHORN_CHANGESET = "3f4320a01539"
+SRC_URI[nashorn.md5sum] = "99e7cf1ff097dd9643167412dfdbd7e7"
+SRC_URI[nashorn.sha256sum] = "10e6f81e70a3af76e8519faaaedb09bc2f4e4c8e9d648c1a7b2d2a8db674e90b"
+
+OPENJDK_CHANGESET = "d0afaafe3790"
+SRC_URI[openjdk.md5sum] = "a74c9c24487cea8766c3e81f9d6a2940"
+SRC_URI[openjdk.sha256sum] = "17ae39738277af1ea41c418a2d56e53abae2b4b5b14d4378f3d6648033021b92"
+
+HOTSPOT_CHANGESET = "c1374141598c"
+SRC_URI[hotspot.md5sum] = "fbf11c395dc8aa8483d577abad98808a"
+SRC_URI[hotspot.sha256sum] = "278fbb51944582fb38d3e2dafe9aff85e17ca991a6c93c69d5d98c40a86c3d4b"
+
+OPENJDK_HG_U = "jdk8u"
+OPENJDK_HG_URL = "http://hg.openjdk.java.net/jdk8u/${OPENJDK_HG_U}"
+
+OPENJDK_FILE = "${OPENJDK_CHANGESET}.tar.bz2"
+OPENJDK_URI = "${OPENJDK_HG_URL}/archive/${OPENJDK_FILE};name=openjdk"
+
+HOTSPOT_FILE = "${HOTSPOT_CHANGESET}.tar.bz2"
+HOTSPOT_URI = "${OPENJDK_HG_URL}/hotspot/archive/${HOTSPOT_FILE};name=hotspot;unpack=false"
+
+CORBA_FILE = "${CORBA_CHANGESET}.tar.bz2"
+CORBA_URI = "${OPENJDK_HG_URL}/corba/archive/${CORBA_FILE};name=corba;unpack=false"
+
+JAXP_FILE = "${JAXP_CHANGESET}.tar.bz2"
+JAXP_URI = "${OPENJDK_HG_URL}/jaxp/archive/${JAXP_FILE};name=jaxp;unpack=false"
+
+JAXWS_FILE = "${JAXWS_CHANGESET}.tar.bz2"
+JAXWS_URI = "${OPENJDK_HG_URL}/jaxws/archive/${JAXWS_FILE};name=jaxws;unpack=false"
+
+JDK_FILE = "${JDK_CHANGESET}.tar.bz2"
+JDK_URI = "${OPENJDK_HG_URL}/jdk/archive/${JDK_FILE};name=jdk;unpack=false"
+
+LANGTOOLS_FILE = "${LANGTOOLS_CHANGESET}.tar.bz2"
+LANGTOOLS_URI = "${OPENJDK_HG_URL}/langtools/archive/${LANGTOOLS_FILE};name=langtools;unpack=false"
+
+NASHORN_FILE = "${NASHORN_CHANGESET}.tar.bz2"
+NASHORN_URI = "${OPENJDK_HG_URL}/nashorn/archive/${NASHORN_FILE};name=nashorn;unpack=false"
+#
+#CACAO_VERSION = "e215e36be9fc"
+#CACAO_FILE = "${CACAO_VERSION}.tar.gz"
+#CACAO_URI = "http://icedtea.wildebeest.org/download/drops/cacao/${CACAO_FILE};name=cacao;unpack=false"
+#SRC_URI[cacao.md5sum] = "79f95f0aea4ba04cf2f1a8632ac66d14"
+#SRC_URI[cacao.sha256sum] = "4966514c72ee7ed108b882d9b6e65c3adf8a8f9c2dccb029f971b3c8cb4870ab"
+#
+#JAMVM_VERSION = "ec18fb9e49e62dce16c5094ef1527eed619463aa"
+#JAMVM_FILE = "jamvm-${JAMVM_VERSION}.tar.gz"
+#JAMVM_URI = "http://icedtea.wildebeest.org/download/drops/jamvm/${JAMVM_FILE};name=jamvm;unpack=false"
+#SRC_URI[jamvm.md5sum] = "d50ae193d01a9251e10679c7a2cc6ff1"
+#SRC_URI[jamvm.sha256sum] = "31810266666c23822942aac62a78019c2c4589e1c5ee48329cbf42652d4437bc"
diff --git a/recipes-core/openjdk/openjdk-8_72b00.bb b/recipes-core/openjdk/openjdk-8_72b00.bb
new file mode 100644
index 0000000..673d435
--- /dev/null
+++ b/recipes-core/openjdk/openjdk-8_72b00.bb
@@ -0,0 +1,36 @@
+require openjdk-8-release-72b00.inc
+require openjdk-8-cross.inc
+
+# some patches extracted from http://cr.openjdk.java.net/~rkennke/shark-build-hotspot/webrev.01/hotspot.patch
+# reported via http://mail.openjdk.java.net/pipermail/build-dev/2015-January/013972.html
+# by Roman Kennke (rkennke at redhat.com)
+PATCHES_URI_append = "\
+  file://openjdk8-restrict-to-staging-dir.patch;apply=no \
+  file://openjdk8-fix-shark-build.patch;apply=no \
+  file://openjdk8-fix-shark-stdc++11.patch;apply=no \
+  file://openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch;apply=no \
+"
+
+do_install() {
+    do_install_jdk
+}
+
+PACKAGES_append = " \
+            ${JDKPN}-demo-dbg \
+            ${JDKPN}-demo \
+            ${JDKPN}-source \
+           "
+
+RPROVIDES_${JDKPN} = "java2-vm"
+PROVIDES_${JDKPN} = "java2-vm"
+RPROVIDES_${JDKPN} = "java2-runtime"
+PROVIDES_${JDKPN} = "java2-runtime"
+
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "java"
+ALTERNATIVE_LINK = "${bindir}/java"
+ALTERNATIVE_TARGET = "${JDK_HOME}/bin/java"
+ALTERNATIVE_PRIORITY = "100"
+
+# PR = "${INC_PR}.1"
diff --git a/recipes-core/openjdk/openjre-8_72b00.bb b/recipes-core/openjdk/openjre-8_72b00.bb
new file mode 100644
index 0000000..aa4af40
--- /dev/null
+++ b/recipes-core/openjdk/openjre-8_72b00.bb
@@ -0,0 +1,30 @@
+require openjdk-8-release-72b00.inc
+require openjdk-8-cross.inc
+
+# some patches extracted from http://cr.openjdk.java.net/~rkennke/shark-build-hotspot/webrev.01/hotspot.patch
+# reported via http://mail.openjdk.java.net/pipermail/build-dev/2015-January/013972.html
+# by Roman Kennke (rkennke at redhat.com)
+PATCHES_URI_append = "\
+  file://openjdk8-restrict-to-staging-dir.patch;apply=no \
+  file://openjdk8-fix-shark-build.patch;apply=no \
+  file://openjdk8-fix-shark-stdc++11.patch;apply=no \
+  file://openjdk8-use_builtin_frame_address_0_rather_than_returning_address_of_local_variable.patch;apply=no \
+"
+
+do_install() {
+    do_install_jre
+}
+
+RPROVIDES_${JREPN} = "java2-vm"
+PROVIDES_${JREPN} = "java2-vm"
+RPROVIDES_${JREPN} = "java2-runtime"
+PROVIDES_${JREPN} = "java2-runtime"
+
+inherit update-alternatives
+
+ALTERNATIVE_${PN} = "java"
+ALTERNATIVE_LINK = "${bindir}/java"
+ALTERNATIVE_TARGET = "${JRE_HOME}/bin/java"
+ALTERNATIVE_PRIORITY = "100"
+
+# PR = "${INC_PR}.1"
-- 
1.9.1


-- 
Jens Rehsack - rehsack@gmail.com



^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2015-11-03 10:25 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-28 18:01 [meta-java][PATCH 4/4] openjdk-8: add recipes for openjdk-8 and openjre-8 Jens Rehsack
2015-10-28 19:34 ` Dan McGregor
2015-10-28 19:59   ` Jens Rehsack
2015-10-29  7:41 ` Richard Leitner
2015-10-29  9:22   ` Jens Rehsack
2015-10-29 10:46     ` Otavio Salvador
2015-10-29 11:24       ` Jens Rehsack
2015-10-29 11:54         ` Richard Leitner
2015-10-29 12:08           ` Jens Rehsack
2015-10-29 15:51             ` Richard Leitner
2015-10-29 12:24           ` Otavio Salvador
2015-10-29 15:49             ` Richard Leitner
2015-10-29 16:03               ` Otavio Salvador
2015-10-29 18:51                 ` Richard Leitner
2015-10-29 18:59                   ` Otavio Salvador
2015-11-03 10:25                     ` Jens Rehsack
  -- strict thread matches above, loose matches on Subject: below --
2015-10-27 20:31 Jens Rehsack
2015-10-30  9:09 ` Kaaria, Erkka
2015-10-30 11:46   ` Jens Rehsack
2015-10-30 12:41     ` Kaaria, Erkka
2015-10-30 12:59       ` Otavio Salvador
2015-10-30 13:26         ` Jens Rehsack
2015-10-30 13:23       ` Jens Rehsack

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.