This commit is contained in:
Lana Steuck 2017-04-06 04:48:39 +00:00
commit cbdcedbd50
4675 changed files with 53804 additions and 29103 deletions
.hgtags.hgtags-top-repo
.jcheck
common
corba
.hgtags
.jcheck
README
src/java.corba/share/classes
hotspot
.hgignore.hgtags
.jcheck
.mx.jvmci
README
make
src
cpu
jdk.aot
jdk.hotspot.agent
jdk.internal.vm.ci/share/classes

@ -1,3 +1,8 @@
fd1497902bbe3aa24b21f270ecdcb8de5f7aa9ac jdk-9+159
6aa8be0c4e054fe8b3ab016ae00d16d680f92145 jdk-9+160
f6883b1a5a6478437cd4181c4bd45328ab24feaf jdk-9+161
fa3e76b477829afc4476f0b725cfaa440a6fd917 jdk-9+157
b5015f742ba648184bb7fc547197bd33ebfde30d jdk-9+158
1cc8dd79fd1cd13d36b385196271a29632c67c3b jdk7-b24
bf2517e15f0c0f950e5b3143c4ca11e2df73dcc1 jdk7-b25
5ae7db536e3fcf6be78e45b240a9058095e0ed38 jdk7-b26
@ -399,3 +404,6 @@ d7034ff7f8e257e81c9f95c7785dd4eaaa3c2afc jdk-9+153
8c70d170e62c0c58b5bc3ba666bd140399b98c9c jdk-10+0
45b751afd11e6c05991cf4913c5a0ac3304fcc4e jdk-9+154
f4aff695ffe05cfdb69d8af25a4ddc6a029754ea jdk-9+155
06bce0388880b5ff8e040e4a9d72a3ea11dac321 jdk-9+156
74116beae88a8f17a80301aa6c83865c82f10ece jdk-10+1
4a79ad46e578112fce68f1af9dd931025cc235cb jdk-10+2

@ -396,6 +396,7 @@ b119012d1c2ab2570fe8718633840d0c1f1f441d jdk-9+149
71a766d4c18041a7f833ee22823125b02e1a7f1e jdk-9+151
ef056360ddf3977d7d2ddbeb456a4d612d19ea05 jdk-9+152
816a6d03a7c44edfbd8780110529f1bdc3964fb9 jdk-9+153
8d22611ffb6540bc1ace64a00c048c8b82d8c69a jdk-10+0
8d26916eaa21b689835ffc1c0dbf12470aa9be61 jdk-9+154
688a3863c00ebc089ab17ee1fc46272cbbd96815 jdk-9+155
783ec7542cf7154e5d2b87f55bb97d28f81e9ada jdk-9+156

@ -1 +1 @@
project=jdk9
project=jdk10

@ -1098,6 +1098,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
BASIC_PATH_PROGS(HG, hg)
BASIC_PATH_PROGS(STAT, stat)
BASIC_PATH_PROGS(TIME, time)
BASIC_PATH_PROGS(FLOCK, flock)
# Dtrace is usually found in /usr/sbin on Solaris, but that directory may not
# be in the user path.
BASIC_PATH_PROGS(DTRACE, dtrace, $PATH:/usr/sbin)

@ -932,6 +932,7 @@ DSYMUTIL
IS_GNU_TIME
PATCH
DTRACE
FLOCK
TIME
STAT
HG
@ -1293,6 +1294,7 @@ READELF
HG
STAT
TIME
FLOCK
DTRACE
PATCH
DSYMUTIL
@ -2257,6 +2259,7 @@ Some influential environment variables:
HG Override default value for HG
STAT Override default value for STAT
TIME Override default value for TIME
FLOCK Override default value for FLOCK
DTRACE Override default value for DTRACE
PATCH Override default value for PATCH
DSYMUTIL Override default value for DSYMUTIL
@ -5174,7 +5177,7 @@ VS_SDK_PLATFORM_NAME_2013=
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
DATE_WHEN_GENERATED=1490856742
DATE_WHEN_GENERATED=1490900744
###############################################################################
#
@ -23059,6 +23062,203 @@ $as_echo "$tool_specified" >&6; }
fi
# Publish this variable in the help.
if [ -z "${FLOCK+x}" ]; then
# The variable is not set by user, try to locate tool using the code snippet
for ac_prog in flock
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_FLOCK+:} false; then :
$as_echo_n "(cached) " >&6
else
case $FLOCK in
[\\/]* | ?:[\\/]*)
ac_cv_path_FLOCK="$FLOCK" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_FLOCK="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
FLOCK=$ac_cv_path_FLOCK
if test -n "$FLOCK"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLOCK" >&5
$as_echo "$FLOCK" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$FLOCK" && break
done
else
# The variable is set, but is it from the command line or the environment?
# Try to remove the string !FLOCK! from our list.
try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!FLOCK!/}
if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
# If it failed, the variable was not from the command line. Ignore it,
# but warn the user (except for BASH, which is always set by the calling BASH).
if test "xFLOCK" != xBASH; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring value of FLOCK from the environment. Use command line variables instead." >&5
$as_echo "$as_me: WARNING: Ignoring value of FLOCK from the environment. Use command line variables instead." >&2;}
fi
# Try to locate tool using the code snippet
for ac_prog in flock
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_FLOCK+:} false; then :
$as_echo_n "(cached) " >&6
else
case $FLOCK in
[\\/]* | ?:[\\/]*)
ac_cv_path_FLOCK="$FLOCK" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_FLOCK="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
FLOCK=$ac_cv_path_FLOCK
if test -n "$FLOCK"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLOCK" >&5
$as_echo "$FLOCK" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$FLOCK" && break
done
else
# If it succeeded, then it was overridden by the user. We will use it
# for the tool.
# First remove it from the list of overridden variables, so we can test
# for unknown variables in the end.
CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
# Check if we try to supply an empty value
if test "x$FLOCK" = x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: Setting user supplied tool FLOCK= (no value)" >&5
$as_echo "$as_me: Setting user supplied tool FLOCK= (no value)" >&6;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLOCK" >&5
$as_echo_n "checking for FLOCK... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
$as_echo "disabled" >&6; }
else
# Check if the provided tool contains a complete path.
tool_specified="$FLOCK"
tool_basename="${tool_specified##*/}"
if test "x$tool_basename" = "x$tool_specified"; then
# A command without a complete path is provided, search $PATH.
{ $as_echo "$as_me:${as_lineno-$LINENO}: Will search for user supplied tool FLOCK=$tool_basename" >&5
$as_echo "$as_me: Will search for user supplied tool FLOCK=$tool_basename" >&6;}
# Extract the first word of "$tool_basename", so it can be a program name with args.
set dummy $tool_basename; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_FLOCK+:} false; then :
$as_echo_n "(cached) " >&6
else
case $FLOCK in
[\\/]* | ?:[\\/]*)
ac_cv_path_FLOCK="$FLOCK" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_FLOCK="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
FLOCK=$ac_cv_path_FLOCK
if test -n "$FLOCK"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLOCK" >&5
$as_echo "$FLOCK" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$FLOCK" = x; then
as_fn_error $? "User supplied tool $tool_basename could not be found" "$LINENO" 5
fi
else
# Otherwise we believe it is a complete path. Use it as it is.
{ $as_echo "$as_me:${as_lineno-$LINENO}: Will use user supplied tool FLOCK=$tool_specified" >&5
$as_echo "$as_me: Will use user supplied tool FLOCK=$tool_specified" >&6;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLOCK" >&5
$as_echo_n "checking for FLOCK... " >&6; }
if test ! -x "$tool_specified"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
as_fn_error $? "User supplied tool FLOCK=$tool_specified does not exist or is not executable" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tool_specified" >&5
$as_echo "$tool_specified" >&6; }
fi
fi
fi
fi
# Dtrace is usually found in /usr/sbin on Solaris, but that directory may not
# be in the user path.

@ -48,7 +48,7 @@ MAKE := @MAKE@
# The default make arguments
MAKE_ARGS = $(MAKE_LOG_FLAGS) -r -R -I $(TOPDIR)/make/common SPEC=$(SPEC) \
MAKE_LOG_FLAGS="$(MAKE_LOG_FLAGS)" LOG_LEVEL=$(LOG_LEVEL)
MAKE_LOG_FLAGS="$(MAKE_LOG_FLAGS)" $(MAKE_LOG_VARS)
OUTPUT_SYNC_SUPPORTED:=@OUTPUT_SYNC_SUPPORTED@
OUTPUT_SYNC:=@OUTPUT_SYNC@
@ -637,6 +637,7 @@ DIRNAME:=@DIRNAME@
DSYMUTIL:=@DSYMUTIL@
FIND:=@FIND@
FIND_DELETE:=@FIND_DELETE@
FLOCK:=@FLOCK@
ECHO:=@ECHO@
EGREP:=@EGREP@
FGREP:=@FGREP@

@ -1,5 +1,5 @@
#
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@ -25,7 +25,7 @@
# Default version numbers to use unless overridden by configure
DEFAULT_VERSION_MAJOR=9
DEFAULT_VERSION_MAJOR=10
DEFAULT_VERSION_MINOR=0
DEFAULT_VERSION_SECURITY=0
DEFAULT_VERSION_PATCH=0

@ -22,26 +22,48 @@
# questions.
#
# Usage: sh shell-tracer.sh <TIME_CMD> <OUTPUT_FILE> <OLD_SHELL> <shell command line>
# Usage: sh shell-tracer.sh <TIME_CMD_TYPE> <TIME_CMD> <OUTPUT_FILE> <shell command line>
#
# This shell script is supposed to be set as a replacement for SHELL in make,
# causing it to be called whenever make wants to execute shell commands.
# The <shell command line> is suitable for passing on to the old shell,
# typically beginning with -c.
#
# This script will make sure the shell command line is executed with
# OLD_SHELL -x, and it will also store a simple log of the the time it takes to
# execute the command in the OUTPUT_FILE, using the "time" utility as pointed
# to by TIME_CMD. If TIME_CMD is "-", no timestamp will be stored.
# This script will run the shell command line and it will also store a simple
# log of the the time it takes to execute the command in the OUTPUT_FILE, using
# utility for time measure specified with TIME_CMD option.
#
# Type of time measure utility is specified with TIME_CMD_TYPE option.
# Recognized options values of TIME_CMD_TYPE option: "gnutime", "flock".
TIME_CMD="$1"
OUTPUT_FILE="$2"
OLD_SHELL="$3"
TIME_CMD_TYPE="$1"
TIME_CMD="$2"
OUTPUT_FILE="$3"
shift
shift
shift
if [ "$TIME_CMD" != "-" ]; then
"$TIME_CMD" -f "[TIME:%E] $*" -a -o "$OUTPUT_FILE" "$OLD_SHELL" -x "$@"
if [ "$TIME_CMD_TYPE" = "gnutime" ]; then
# Escape backslashes (\) and percent chars (%). See man for GNU 'time'.
msg=${@//\\/\\\\}
msg=${msg//%/%%}
"$TIME_CMD" -f "[TIME:%E] $msg" -a -o "$OUTPUT_FILE" "$@"
elif [ "$TIME_CMD_TYPE" = "flock" ]; then
# Emulated GNU 'time' with 'flock' and 'date'.
ts=`date +%s%3N`
"$@"
status=$?
ts2=`date +%s%3N`
millis=$((ts2 - ts))
ms=$(($millis % 1000))
seconds=$((millis / 1000))
ss=$(($seconds % 60))
minutes=$(($seconds / 60))
mm=$(($minutes % 60))
hh=$(($minutes / 60)):
[ $hh != "0:" ] || hh=
# Synchronize on this script.
flock -w 10 "$0" printf "[TIME:${hh}${mm}:${ss}.%.2s] %s\n" $ms "$*" >> "$OUTPUT_FILE" || true
exit $status
else
"$OLD_SHELL" -x "$@"
"$@"
fi

@ -1079,7 +1079,7 @@ var getVersion = function (major, minor, security, patch) {
+ "." + (minor != null ? minor : version_numbers.get("DEFAULT_VERSION_MINOR"))
+ "." + (security != null ? security : version_numbers.get("DEFAULT_VERSION_SECURITY"))
+ "." + (patch != null ? patch : version_numbers.get("DEFAULT_VERSION_PATCH"));
while (version.match(".*\.0$")) {
while (version.match(".*\\.0$")) {
version = version.substring(0, version.length - 2);
}
return version;

@ -396,5 +396,12 @@ f95cc86b6ac22ec1ade5d4f825dc7782adeea228 jdk-9+148
77f827f5bbad3ef795664bc675f72d98d156b9f8 jdk-9+151
ff8cb43c07c069b1debdee44cb88ca22db1ec757 jdk-9+152
68a8e8658511093b322a46ed04b2a321e1da2a43 jdk-9+153
d66f97a610a6beac987740edc2bf6a70f46ba574 jdk-10+0
078ebe23b584466dc8346e620d7821d91751e5a9 jdk-9+154
a545f54babfa31aa7eb611f36031609acd617cbc jdk-9+155
907c26240cd481579e919bfd23740797ff8ce1c8 jdk-9+156
9383da04b385cca46b7ca67f3a39ac1b673e09fe jdk-9+157
de6bdf38935fa753183ca288bed5c06a23c0bb12 jdk-9+158
6feea77d2083c99e44aa3e272d07b7fb3b801683 jdk-9+159
c7688f2fa07936b089ca0e9a0a0eff68ff37a542 jdk-9+160
18f02bc43fe96aef36791d0df7aca748485210cc jdk-9+161

@ -1 +1 @@
project=jdk9
project=jdk10

@ -1,14 +0,0 @@
README:
This file should be located at the top of the corba Mercurial repository.
See http://openjdk.java.net/ for more information about the OpenJDK.
See ../README-builds.html for complete details on build machine requirements.
Simple Build Instructions:
cd make && gnumake
The files that will be imported into the jdk build will be in the "dist"
directory.

@ -25,6 +25,8 @@
/**
* Defines the Java binding of the OMG CORBA APIs, and the RMI-IIOP API.
*
* @since 9
*/
@Deprecated(since="9", forRemoval=true)
module java.corba {

@ -106,13 +106,13 @@ import java.security.PrivilegedAction;
*
* <LI>check in properties parameter, if any
*
* <LI>check in the System properties
* <LI>check in the System properties, if any
*
* <LI>check in the orb.properties file located in the user.home
* directory (if any)
* directory, if any
*
* <LI>check in the orb.properties file located in the java.home/lib
* directory (if any)
* <LI>check in the orb.properties file located in the run-time image,
* if any
*
* <LI>fall back on a hardcoded default behavior (use the Java&nbsp;IDL
* implementation)
@ -170,9 +170,15 @@ import java.security.PrivilegedAction;
* Thus, where appropriate, it is necessary that
* the classes for this alternative ORBSingleton are available on the application's class path.
* It should be noted that the singleton ORB is system wide.
*
* <P>
* When a per-application ORB is created via the 2-arg init methods,
* then it will be located using the thread context class loader.
* <P>
* The IDL to Java Language OMG specification documents the ${java.home}/lib directory as the location,
* in the Java run-time image, to search for orb.properties.
* This location is not intended for user editable configuration files.
* Therefore, the implementation first checks the ${java.home}/conf directory for orb.properties,
* and thereafter the ${java.home}/lib directory.
*
* @since JDK1.2
*/
@ -271,14 +277,25 @@ abstract public class ORB {
}
String javaHome = System.getProperty("java.home");
fileName = javaHome + File.separator
+ "lib" + File.separator + "orb.properties";
props = getFileProperties( fileName ) ;
fileName = javaHome + File.separator + "conf"
+ File.separator + "orb.properties";
props = getFileProperties(fileName);
if (props != null) {
String value = props.getProperty(name);
if (value != null)
return value;
}
fileName = javaHome + File.separator + "lib"
+ File.separator + "orb.properties";
props = getFileProperties(fileName);
if (props == null)
return null ;
return null;
else
return props.getProperty( name ) ;
return props.getProperty(name);
}
}
);

@ -15,10 +15,10 @@
^\.mx.jvmci/hotspot/eclipse/.*
^\.idea/
^workingsets.xml
^src/jdk.vm.ci/share/classes/\w[\w\.]*/.*\.xml
^src/jdk.vm.ci/share/classes/\w[\w\.]*/.*\.iml
^src/jdk.vm.ci/share/classes/\w[\w\.]*/nbproject
^src/jdk.vm.ci/share/classes/\w[\w\.]*/\..*
^src/jdk.internal.vm.ci/share/classes/\w[\w\.]*/.*\.xml
^src/jdk.internal.vm.ci/share/classes/\w[\w\.]*/.*\.iml
^src/jdk.internal.vm.ci/share/classes/\w[\w\.]*/nbproject
^src/jdk.internal.vm.ci/share/classes/\w[\w\.]*/\..*
^test/compiler/jvmci/\w[\w\.]*/.*\.xml
^test/compiler/jvmci/\w[\w\.]*/.*\.iml
^test/compiler/jvmci/\w[\w\.]*/nbproject
@ -27,15 +27,15 @@
^test/compiler/aot/\w[\w\.]*/.*\.iml
^test/compiler/aot/\w[\w\.]*/nbproject
^test/compiler/aot/\w[\w\.]*/\..*
^src/jdk.vm.compiler/\.mx.graal/env
^src/jdk.vm.compiler/\.mx.graal/.*\.pyc
^src/jdk.vm.compiler/\.mx.graal/eclipse-launches/.*
^src/jdk.internal.vm.compiler/\.mx.graal/env
^src/jdk.internal.vm.compiler/\.mx.graal/.*\.pyc
^src/jdk.internal.vm.compiler/\.mx.graal/eclipse-launches/.*
^src/jdk.aot/share/classes/\w[\w\.]*/.*\.xml
^src/jdk.aot/share/classes/\w[\w\.]*/.*\.iml
^src/jdk.aot/share/classes/\w[\w\.]*/nbproject
^src/jdk.aot/share/classes/\w[\w\.]*/\..*
^src/jdk.vm.compiler/share/classes/\w[\w\.]*/.*\.xml
^src/jdk.vm.compiler/share/classes/\w[\w\.]*/.*\.iml
^src/jdk.vm.compiler/share/classes/\w[\w\.]*/nbproject
^src/jdk.vm.compiler/share/classes/\w[\w\.]*/\..*
^src/jdk.internal.vm.compiler/share/classes/\w[\w\.]*/.*\.xml
^src/jdk.internal.vm.compiler/share/classes/\w[\w\.]*/.*\.iml
^src/jdk.internal.vm.compiler/share/classes/\w[\w\.]*/nbproject
^src/jdk.internal.vm.compiler/share/classes/\w[\w\.]*/\..*

@ -556,5 +556,12 @@ a82cb5350cad96a0b4de496afebe3ded89f27efa jdk-9+146
2a2ac7d9f52c8cb2b80077e515b5840b947e640c jdk-9+151
31f1d26c60df7b2e516a4f84160d76ba017d4e09 jdk-9+152
217ba81b9a4ce8698200370175aa2db86a39f66c jdk-9+153
fc7e94cb748507366b839e859f865f724467446a jdk-10+0
a9fdfd55835ef9dccb7f317b07249bd66653b874 jdk-9+154
f3b3d77a1751897413aae43ac340a130b6fa2ae1 jdk-9+155
43139c588ea48b6504e52b6c3dec530b17b1fdb4 jdk-9+156
b2d0a906afd73dcf27f572217eb1be0f196ec16c jdk-9+157
4e78f30935229f13ce7c43089621cf7169f5abac jdk-9+158
9211c2e89c1cd11ec2d5752b0f97131a7d7525c7 jdk-9+159
94b4e2e5331d38eab6a3639c3511b2e0715df0e9 jdk-9+160
191ffbdb3d7b734288daa7fb76b37a0a85dfe7eb jdk-9+161

@ -1 +1 @@
project=jdk9
project=jdk10

@ -158,8 +158,8 @@ To build hotspot and import it into the JDK: "mx make hotspot import-hotspot"
# JDK9 must be bootstrapped with a JDK8
compliance = mx.JavaCompliance('8')
jdk8 = mx.get_jdk(compliance.exactMatch, versionDescription=compliance.value)
cmd = ['sh', 'configure', '--with-debug-level=' + _vm.debugLevel, '--with-native-debug-symbols=external', '--disable-precompiled-headers',
'--with-jvm-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk8.home]
cmd = ['sh', 'configure', '--with-debug-level=' + _vm.debugLevel, '--with-native-debug-symbols=external', '--disable-precompiled-headers', '--with-jvm-features=graal',
'--with-jvm-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk8.home, '--with-jvm-features=graal']
mx.run(cmd, cwd=_jdkSourceRoot)
cmd = [mx.gmake_cmd(), 'CONF=' + _vm.debugLevel]
if mx.get_opts().verbose:
@ -176,66 +176,6 @@ To build hotspot and import it into the JDK: "mx make hotspot import-hotspot"
mx.run(cmd, cwd=_jdkSourceRoot)
if 'images' in cmd:
jdkImageDir = join(jdkBuildDir, 'images', 'jdk')
# The OpenJDK build creates an empty cacerts file so copy one from
# the default JDK (which is assumed to be an OracleJDK)
srcCerts = join(mx.get_jdk(tag='default').home, 'lib', 'security', 'cacerts')
if not exists(srcCerts):
# Might be building with JDK8 which has cacerts under jre/
srcCerts = join(mx.get_jdk(tag='default').home, 'jre', 'lib', 'security', 'cacerts')
dstCerts = join(jdkImageDir, 'lib', 'security', 'cacerts')
if srcCerts != dstCerts:
shutil.copyfile(srcCerts, dstCerts)
_create_jdk_bundle(jdkBuildDir, _vm.debugLevel, jdkImageDir)
def _get_jdk_bundle_arches():
"""
Gets a list of names that will be the part of a JDK bundle's file name denoting the architecture.
The first element in the list is the canonical name. Symlinks should be created for the
remaining names.
"""
cpu = mx.get_arch()
if cpu == 'amd64':
return ['x64', 'x86_64', 'amd64']
elif cpu == 'sparcv9':
return ['sparcv9']
mx.abort('Unsupported JDK bundle arch: ' + cpu)
def _create_jdk_bundle(jdkBuildDir, debugLevel, jdkImageDir):
"""
Creates a tar.gz JDK archive, an accompanying tar.gz.sha1 file with its
SHA1 signature plus symlinks to the archive for non-canonical architecture names.
"""
arches = _get_jdk_bundle_arches()
jdkTgzPath = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}-{}.tar.gz'.format(debugLevel, _get_openjdk_os(), arches[0]))
with mx.Archiver(jdkTgzPath, kind='tgz') as arc:
mx.log('Creating ' + jdkTgzPath)
for root, _, filenames in os.walk(jdkImageDir):
for name in filenames:
f = join(root, name)
arcname = 'jdk1.9.0/' + os.path.relpath(f, jdkImageDir)
arc.zf.add(name=f, arcname=arcname, recursive=False)
with open(jdkTgzPath + '.sha1', 'w') as fp:
mx.log('Creating ' + jdkTgzPath + '.sha1')
fp.write(mx.sha1OfFile(jdkTgzPath))
def _create_link(source, link_name):
if exists(link_name):
os.remove(link_name)
mx.log('Creating ' + link_name + ' -> ' + source)
os.symlink(source, link_name)
for arch in arches[1:]:
link_name = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}-{}.tar.gz'.format(debugLevel, _get_openjdk_os(), arch))
jdkTgzName = os.path.basename(jdkTgzPath)
_create_link(jdkTgzName, link_name)
_create_link(jdkTgzName + '.sha1', link_name + '.sha1')
def _runmultimake(args):
"""run the JDK make process for one or more configurations"""

@ -43,7 +43,7 @@ suite = {
# ------------- JVMCI:Service -------------
"jdk.vm.ci.services" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"javaCompliance" : "9",
"workingSets" : "API,JVMCI",
@ -52,7 +52,7 @@ suite = {
# ------------- JVMCI:API -------------
"jdk.vm.ci.common" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"checkstyle" : "jdk.vm.ci.services",
"javaCompliance" : "9",
@ -60,7 +60,7 @@ suite = {
},
"jdk.vm.ci.meta" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"checkstyle" : "jdk.vm.ci.services",
"javaCompliance" : "9",
@ -68,7 +68,7 @@ suite = {
},
"jdk.vm.ci.code" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : ["jdk.vm.ci.meta"],
"checkstyle" : "jdk.vm.ci.services",
@ -92,7 +92,7 @@ suite = {
},
"jdk.vm.ci.runtime" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : [
"jdk.vm.ci.code",
@ -119,7 +119,7 @@ suite = {
# ------------- JVMCI:HotSpot -------------
"jdk.vm.ci.aarch64" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : ["jdk.vm.ci.code"],
"checkstyle" : "jdk.vm.ci.services",
@ -128,7 +128,7 @@ suite = {
},
"jdk.vm.ci.amd64" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : ["jdk.vm.ci.code"],
"checkstyle" : "jdk.vm.ci.services",
@ -137,7 +137,7 @@ suite = {
},
"jdk.vm.ci.sparc" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : ["jdk.vm.ci.code"],
"checkstyle" : "jdk.vm.ci.services",
@ -146,7 +146,7 @@ suite = {
},
"jdk.vm.ci.hotspot" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : [
"jdk.vm.ci.common",
@ -175,7 +175,7 @@ suite = {
},
"jdk.vm.ci.hotspot.aarch64" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : [
"jdk.vm.ci.aarch64",
@ -187,7 +187,7 @@ suite = {
},
"jdk.vm.ci.hotspot.amd64" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : [
"jdk.vm.ci.amd64",
@ -199,7 +199,7 @@ suite = {
},
"jdk.vm.ci.hotspot.sparc" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"sourceDirs" : ["src"],
"dependencies" : [
"jdk.vm.ci.sparc",
@ -221,12 +221,12 @@ suite = {
# ------------- Distributions -------------
"JVMCI_SERVICES" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"dependencies" : ["jdk.vm.ci.services"],
},
"JVMCI_API" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"dependencies" : [
"jdk.vm.ci.runtime",
"jdk.vm.ci.common",
@ -240,7 +240,7 @@ suite = {
},
"JVMCI_HOTSPOT" : {
"subDir" : "src/jdk.vm.ci/share/classes",
"subDir" : "src/jdk.internal.vm.ci/share/classes",
"dependencies" : [
"jdk.vm.ci.hotspot.aarch64",
"jdk.vm.ci.hotspot.amd64",

@ -1,14 +0,0 @@
README:
This file should be located at the top of the hotspot Mercurial repository.
See http://openjdk.java.net/ for more information about the OpenJDK.
See ../README-builds.html for complete details on build machine requirements.
Simple Build Instructions:
cd make && gnumake
The files that will be imported into the jdk build will be in the "build"
directory.

@ -38,9 +38,9 @@ TARGETS :=
$(eval $(call IncludeCustomExtension, hotspot, CompileTools.gmk))
ifeq ($(INCLUDE_GRAAL), true)
VM_CI_SRC_DIR := $(HOTSPOT_TOPDIR)/src/jdk.vm.ci/share/classes
VM_CI_SRC_DIR := $(HOTSPOT_TOPDIR)/src/jdk.internal.vm.ci/share/classes
SRC_DIR := $(HOTSPOT_TOPDIR)/src/jdk.vm.compiler/share/classes
SRC_DIR := $(HOTSPOT_TOPDIR)/src/jdk.internal.vm.compiler/share/classes
##############################################################################
# Compile the annotation processors

@ -28,7 +28,7 @@ default: all
include $(SPEC)
include MakeBase.gmk
$(eval $(call IncludeCustomExtension, hotspot, gensrc/Gensrc-jdk.vm.compiler.gmk))
$(eval $(call IncludeCustomExtension, hotspot, gensrc/Gensrc-jdk.internal.vm.compiler.gmk))
GENSRC_DIR := $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)
SRC_DIR := $(HOTSPOT_TOPDIR)/src/$(MODULE)/share/classes
@ -81,23 +81,23 @@ PROCESSOR_JARS := \
PROCESSOR_PATH := $(call PathList, $(PROCESSOR_JARS))
ADD_EXPORTS := \
--add-exports jdk.vm.ci/jdk.vm.ci.aarch64=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.amd64=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.code=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.code.site=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.code.stack=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.common=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.hotspot=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.hotspot.aarch64=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.hotspot.amd64=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.hotspot.events=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.hotspot.sparc=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.hotspotvmconfig=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.inittimer=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.meta=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.runtime=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.services=ALL-UNNAMED \
--add-exports jdk.vm.ci/jdk.vm.ci.sparc=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.aarch64=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.amd64=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.code=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.code.site=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.code.stack=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.common=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.events=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspotvmconfig=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.inittimer=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.meta=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.runtime=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.services=ALL-UNNAMED \
--add-exports jdk.internal.vm.ci/jdk.vm.ci.sparc=ALL-UNNAMED \
#
$(GENSRC_DIR)/_gensrc_proc_done: $(PROC_SRCS) $(PROCESSOR_JARS)
@ -138,7 +138,7 @@ $(GENSRC_DIR)/module-info.java.extra: $(GENSRC_DIR)/_gensrc_proc_done
$(ECHO) "uses org.graalvm.compiler.options.OptionDescriptors;" >> $@; \
$(ECHO) "provides org.graalvm.compiler.options.OptionDescriptors with" >> $@; \
for i in $$($(FIND) $(GENSRC_DIR) -name '*_OptionDescriptors.java'); do \
c=$$($(ECHO) $$i | $(SED) 's:.*/jdk\.vm\.compiler/\(.*\)\.java:\1:' | $(TR) '/' '.'); \
c=$$($(ECHO) $$i | $(SED) 's:.*/jdk\.internal\.vm\.compiler/\(.*\)\.java:\1:' | $(TR) '/' '.'); \
$(ECHO) " $$c," >> $@; \
done; \
$(ECHO) " ;" >> $@;

@ -112,8 +112,10 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
-relativeSrcInclude src \
-hidePath .hg \
-hidePath .jcheck \
-hidePath jdk.aot \
-hidePath jdk.hotspot.agent \
-hidePath jdk.vm.ci \
-hidePath jdk.internal.vm.ci \
-hidePath jdk.internal.vm.compiler \
-hidePath jdk.jfr \
-compiler VC10 \
-jdkTargetRoot $(call FixPath, $(JDK_OUTPUTDIR)) \

@ -1922,12 +1922,17 @@ void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2,
}
if (opr2->is_constant()) {
bool is_32bit = false; // width of register operand
jlong imm;
switch(opr2->type()) {
case T_INT:
imm = opr2->as_constant_ptr()->as_jint();
is_32bit = true;
break;
case T_LONG:
imm = opr2->as_constant_ptr()->as_jlong();
break;
case T_INT:
case T_ADDRESS:
imm = opr2->as_constant_ptr()->as_jint();
break;
@ -1942,14 +1947,14 @@ void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2,
}
if (Assembler::operand_valid_for_add_sub_immediate(imm)) {
if (type2aelembytes(opr1->type()) <= 4)
if (is_32bit)
__ cmpw(reg1, imm);
else
__ cmp(reg1, imm);
return;
} else {
__ mov(rscratch1, imm);
if (type2aelembytes(opr1->type()) <= 4)
if (is_32bit)
__ cmpw(reg1, rscratch1);
else
__ cmp(reg1, rscratch1);

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@ -45,10 +45,8 @@ define_pd_global(bool, TieredCompilation, false);
// We compile very aggressively with the builtin simulator because
// doing so greatly reduces run times and tests more code.
define_pd_global(intx, CompileThreshold, 150 );
define_pd_global(intx, BackEdgeThreshold, 500);
#else
define_pd_global(intx, CompileThreshold, 1500 );
define_pd_global(intx, BackEdgeThreshold, 100000);
#endif
define_pd_global(intx, OnStackReplacePercentage, 933 );
@ -76,6 +74,4 @@ define_pd_global(bool, OptimizeSinglePrecision, true );
define_pd_global(bool, CSEArrayLength, false);
define_pd_global(bool, TwoOperandLIRForm, false );
define_pd_global(intx, SafepointPollOffset, 0 );
#endif // CPU_AARCH64_VM_C1_GLOBALS_AARCH64_HPP

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@ -43,7 +43,6 @@ define_pd_global(bool, UseOnStackReplacement, true);
define_pd_global(bool, ProfileInterpreter, true);
define_pd_global(bool, TieredCompilation, trueInTiered);
define_pd_global(intx, CompileThreshold, 10000);
define_pd_global(intx, BackEdgeThreshold, 100000);
define_pd_global(intx, OnStackReplacePercentage, 140);
define_pd_global(intx, ConditionalMoveLimit, 3);

@ -618,7 +618,7 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
Address buffer(Rthread, in_bytes(JavaThread::dirty_card_queue_offset() +
DirtyCardQueue::byte_offset_of_buf()));
AddressLiteral cardtable((address)ct->byte_map_base);
AddressLiteral cardtable((address)ct->byte_map_base, relocInfo::none);
assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
// save at least the registers that need saving if the runtime is called
@ -645,7 +645,7 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
// Note: there is a comment in x86 code about not using
// ExternalAddress / lea, due to relocation not working
// properly for that address. Should be OK for arm, where we
// explicitly specify that 'cartable' has a relocInfo::none
// explicitly specify that 'cardtable' has a relocInfo::none
// type.
__ lea(r_card_base_1, cardtable);
__ add(r_card_addr_0, r_card_base_1, AsmOperand(r_obj_0, lsr, CardTableModRefBS::card_shift));

@ -85,17 +85,17 @@ address CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf, address mark)
}
#undef __
// size of C2 call stub, compiled java to interpretor
int CompiledStaticCall::to_interp_stub_size() {
return 8 * NativeInstruction::instruction_size;
}
// Relocation entries for call stub, compiled java to interpreter.
int CompiledStaticCall::reloc_to_interp_stub() {
return 10; // 4 in emit_to_interp_stub + 1 in Java_Static_Call
}
#endif // COMPILER2 || JVMCI
// size of C2 call stub, compiled java to interpretor
int CompiledStaticCall::to_interp_stub_size() {
return 8 * NativeInstruction::instruction_size;
}
void CompiledDirectStaticCall::set_to_interpreted(const methodHandle& callee, address entry) {
address stub = find_stub(/*is_aot*/ false);
guarantee(stub != NULL, "stub not found");
@ -125,6 +125,8 @@ void CompiledDirectStaticCall::set_to_interpreted(const methodHandle& callee, ad
method_holder->set_data((intptr_t)callee());
jump->set_jump_destination(entry);
ICache::invalidate_range(stub, to_interp_stub_size());
// Update jump to call.
set_destination_mt_safe(stub);
}

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -2210,7 +2210,6 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) {
// Out-of-line code to allocate method data oop.
__ bind(profile_method);
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::profile_method));
__ load_unsigned_byte(rbx, Address(rbcp, 0)); // restore target bytecode
__ set_method_data_pointer_for_bcp();
__ jmp(dispatch);
}
@ -2225,10 +2224,8 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) {
CAST_FROM_FN_PTR(address,
InterpreterRuntime::frequency_counter_overflow),
rdx);
__ load_unsigned_byte(rbx, Address(rbcp, 0)); // restore target bytecode
// rax: osr nmethod (osr ok) or NULL (osr not possible)
// rbx: target bytecode
// rdx: scratch
// r14: locals pointer
// r13: bcp
@ -2238,12 +2235,13 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) {
__ cmpb(Address(rax, nmethod::state_offset()), nmethod::in_use);
__ jcc(Assembler::notEqual, dispatch);
// We have the address of an on stack replacement routine in rax
// We need to prepare to execute the OSR method. First we must
// migrate the locals and monitors off of the stack.
// We have the address of an on stack replacement routine in rax.
// In preparation of invoking it, first we must migrate the locals
// and monitors from off the interpreter frame on the stack.
// Ensure to save the osr nmethod over the migration call,
// it will be preserved in rbx.
__ mov(rbx, rax);
LP64_ONLY(__ mov(r13, rax)); // save the nmethod
NOT_LP64(__ mov(rbx, rax)); // save the nmethod
NOT_LP64(__ get_thread(rcx));
call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin));
@ -2258,7 +2256,6 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) {
const Register retaddr = LP64_ONLY(j_rarg2) NOT_LP64(rdi);
const Register sender_sp = LP64_ONLY(j_rarg1) NOT_LP64(rdx);
// pop the interpreter frame
__ movptr(sender_sp, Address(rbp, frame::interpreter_frame_sender_sp_offset * wordSize)); // get sender sp
__ leave(); // remove frame anchor
@ -2274,8 +2271,7 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) {
__ push(retaddr);
// and begin the OSR nmethod
LP64_ONLY(__ jmp(Address(r13, nmethod::osr_entry_point_offset())));
NOT_LP64(__ jmp(Address(rbx, nmethod::osr_entry_point_offset())));
__ jmp(Address(rbx, nmethod::osr_entry_point_offset()));
}
}
}

@ -850,6 +850,12 @@ void VM_Version::get_processor_features() {
#if INCLUDE_RTM_OPT
if (UseRTMLocking) {
if (is_client_compilation_mode_vm()) {
// Only C2 does RTM locking optimization.
// Can't continue because UseRTMLocking affects UseBiasedLocking flag
// setting during arguments processing. See use_biased_locking().
vm_exit_during_initialization("RTM locking optimization is not supported in emulated client VM");
}
if (is_intel_family_core()) {
if ((_model == CPU_MODEL_HASWELL_E3) ||
(_model == CPU_MODEL_HASWELL_E7 && _stepping < 3) ||

@ -25,6 +25,7 @@ package jdk.tools.jaotc;
import org.graalvm.compiler.code.CompilationResult;
import org.graalvm.compiler.core.target.Backend;
import org.graalvm.compiler.hotspot.HotSpotCompiledCodeBuilder;
import org.graalvm.compiler.hotspot.stubs.Stub;
import jdk.vm.ci.hotspot.HotSpotCompiledCode;
@ -48,7 +49,7 @@ public class AOTStub implements JavaMethodInfo {
}
public HotSpotCompiledCode compiledCode(CompilationResult result) {
return stub.getCompiledCode(backend);
return HotSpotCompiledCodeBuilder.createCompiledCode(null, null, result);
}
}

@ -59,12 +59,6 @@ abstract class CallSiteRelocationSymbol {
addExternalPltToGotRelocation(binaryContainer, symbol, relocationOffset);
}
protected static void addMetaspaceGotRelocation(BinaryContainer binaryContainer, String symbolName, int symbolOffset, int relocationOffset) {
ByteContainer container = binaryContainer.getMetaspaceGotContainer();
Symbol symbol = container.createGotSymbol(symbolOffset, symbolName);
addExternalPltToGotRelocation(binaryContainer, symbol, relocationOffset);
}
/**
* Add an {@link RelocType#EXTERNAL_GOT_TO_PLT} relocation to the
* {@link BinaryContainer#getExtLinkageGOTContainer()}.

@ -70,8 +70,8 @@ class DataBuilder {
*/
private void fillVMAddresses(HotSpotVMConfigStore config) {
for (VMField vmField : config.getFields().values()) {
if (vmField.value != null) {
final long address = vmField.value;
if (vmField.value != null && vmField.value instanceof Long) {
final long address = (Long) vmField.value;
String value = vmField.name;
/*
* Some fields don't contain addresses but integer values. At least don't add zero

@ -37,6 +37,7 @@ import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
final class JavaCallSiteRelocationSymbol extends CallSiteRelocationSymbol {
private static final byte[] zeroSlot = new byte[8];
// -1 represents Universe::non_oop_word() value
private static final byte[] minusOneSlot = {-1, -1, -1, -1, -1, -1, -1, -1};
public JavaCallSiteRelocationSymbol(CompiledMethodInfo mi, Call call, CallSiteRelocationInfo callSiteRelocation, BinaryContainer binaryContainer) {
@ -79,30 +80,39 @@ final class JavaCallSiteRelocationSymbol extends CallSiteRelocationSymbol {
}
// Add relocation to GOT cell for call resolution jump.
// This GOT cell will be initialized during JVM startup with address
// of JVM runtime call resolution function.
String gotSymbolName = "got." + getResolveSymbolName(binaryContainer, mi, call);
Symbol gotSymbol = binaryContainer.getGotSymbol(gotSymbolName);
addExternalPltToGotRelocation(binaryContainer, gotSymbol, stub.getResolveJumpOffset());
// Add relocation to resolve call jump instruction address for GOT cell.
// This GOT cell will be initialized with address of resolution jump instruction and
// will be updated with call destination address by JVM runtime call resolution code.
String pltJmpSymbolName = relocationSymbolName("plt.jmp", mi, call, callSiteRelocation);
addCodeContainerRelocation(binaryContainer, pltJmpSymbolName, stub.getResolveJumpStart(), gotStartOffset);
// Add relocation to GOT cell for dispatch jump.
// The dispatch jump loads destination address from this GOT cell.
String gotEntrySymbolName = relocationSymbolName("got.entry", mi, call, callSiteRelocation);
addExtLinkageGotContainerRelocation(binaryContainer, gotEntrySymbolName, gotStartOffset, stub.getDispatchJumpOffset());
// Virtual call needs initial -1 value.
// Virtual call needs initial -1 value for Klass pointer.
// Non virtual call needs initial 0 value for Method pointer to call c2i adapter.
byte[] slot = isVirtualCall ? minusOneSlot : zeroSlot;
final int gotMetaOffset = binaryContainer.appendMetaspaceGotBytes(slot, 0, slot.length);
final int gotMetaOffset = binaryContainer.appendExtLinkageGotBytes(slot, 0, slot.length);
// Add relocation to GOT cell for move instruction (Klass* for virtual, Method* otherwise).
String gotMoveSymbolName = relocationSymbolName("got.move", mi, call, callSiteRelocation);
addMetaspaceGotRelocation(binaryContainer, gotMoveSymbolName, gotMetaOffset, stub.getMovOffset());
addExtLinkageGotContainerRelocation(binaryContainer, gotMoveSymbolName, gotMetaOffset, stub.getMovOffset());
if (isVirtualCall) {
// Nothing.
} else {
// Add relocation to GOT cell for c2i adapter jump.
// The c2i jump instruction loads destination address from this GOT cell.
// This GOT cell is initialized with -1 and will be updated
// by JVM runtime call resolution code.
String gotC2ISymbolName = relocationSymbolName("got.c2i", mi, call, callSiteRelocation);
addExtLinkageGotContainerRelocation(binaryContainer, gotC2ISymbolName, gotStartOffset + 8, stub.getC2IJumpOffset());
}

@ -625,7 +625,9 @@ public class Main implements LogPrinter {
private void reportError(Throwable e) {
log.println("Error: " + e.getMessage());
e.printStackTrace(log);
if (options.info) {
e.printStackTrace(log);
}
log.flush();
}

@ -77,7 +77,7 @@ public class ClassSearch {
}
if (found == null) {
throw new InternalError("Failed to find: " + searchFor.toString());
throw new InternalError("Failed to find " + searchFor.getType() + " file: " + searchFor.getName());
}
return found;
}

@ -27,7 +27,7 @@ public class SearchFor {
private final String type;
public SearchFor(String name) {
this(name, "unknown");
this(name, "");
}
public SearchFor(String name, String type) {
@ -36,7 +36,7 @@ public class SearchFor {
}
public boolean isUnknown() {
return "unknown".equals(type);
return "".equals(type);
}
public String getType() {
@ -49,6 +49,6 @@ public class SearchFor {
@Override
public String toString() {
return type + ":" + name;
return type + ": " + name;
}
}

@ -31,7 +31,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
public class ClassNameSourceProvider implements SourceProvider {
public final static String TYPE = "classname";
public final static String TYPE = "class";
private final ClassLoader classLoader;
public ClassNameSourceProvider(FileSupport fileSupport) {
@ -47,6 +47,10 @@ public class ClassNameSourceProvider implements SourceProvider {
@Override
public ClassSource findSource(String name, SearchPath searchPath) {
Path path = Paths.get(name);
if (ClassSource.pathIsClassFile(path)) {
name = ClassSource.makeClassName(path);
}
try {
classLoader.loadClass(name);
return new ClassNameSource(name, classLoader);

@ -25,6 +25,6 @@
module jdk.aot {
requires jdk.management;
requires jdk.vm.ci;
requires jdk.vm.compiler;
requires jdk.internal.vm.ci;
requires jdk.internal.vm.compiler;
}

@ -70,18 +70,17 @@ JNIEXPORT jint JNICALL Java_jdk_tools_jaotc_jnilibelf_JNILibELFAPI_elf_1version
*/
static jlong getNativeAddress(JNIEnv* env, jobject ptrObj) {
jclass ptrClass;
jfieldID fidNumber;
jlong nativeAddress = -1;
assert (ptrObj != NULL);
assert (ptrObj != NULL);
// Get a reference to ptr object's class
ptrClass = (*env)->GetObjectClass(env, ptrObj);
// Get the Field ID of the instance variables "address"
fidNumber = (*env)->GetFieldID(env, ptrClass, "address", "J");
if (fidNumber != NULL) {
// Get the long given the Field ID
nativeAddress = (*env)->GetLongField(env, ptrObj, fidNumber);
jclass ptrClass = (*env)->GetObjectClass(env, ptrObj);
if (ptrClass != NULL) {
// Get the Field ID of the instance variables "address"
jfieldID fidNumber = (*env)->GetFieldID(env, ptrClass, "address", "J");
if (fidNumber != NULL) {
// Get the long given the Field ID
nativeAddress = (*env)->GetLongField(env, ptrObj, fidNumber);
}
}
// fprintf(stderr, "Native address : %lx\n", nativeAddress);
return nativeAddress;
@ -91,10 +90,15 @@ static jlong getNativeAddress(JNIEnv* env, jobject ptrObj) {
* Box the nativeAddress as a Pointer object.
*/
static jobject makePointerObject(JNIEnv* env, jlong nativeAddr) {
jobject retObj = NULL;
jclass ptrClass = (*env)->FindClass(env, "jdk/tools/jaotc/jnilibelf/Pointer");
// Call back constructor to allocate a Pointer object, with an int argument
jmethodID constructorId = (*env)->GetMethodID(env, ptrClass, "<init>", "(J)V");
jobject retObj = (*env)->NewObject(env, ptrClass, constructorId, nativeAddr);
if (ptrClass != NULL) {
// Call back constructor to allocate a Pointer object, with an int argument
jmethodID constructorId = (*env)->GetMethodID(env, ptrClass, "<init>", "(J)V");
if (constructorId != NULL) {
retObj = (*env)->NewObject(env, ptrClass, constructorId, nativeAddr);
}
}
return retObj;
}

@ -33,6 +33,7 @@
#define ELF_NHDR Elf64_Nhdr
#define ELF_DYN Elf64_Dyn
#define ELF_ADDR Elf64_Addr
#define ELF_AUXV Elf64_auxv_t
#define ELF_ST_TYPE ELF64_ST_TYPE
@ -45,6 +46,7 @@
#define ELF_NHDR Elf32_Nhdr
#define ELF_DYN Elf32_Dyn
#define ELF_ADDR Elf32_Addr
#define ELF_AUXV Elf32_auxv_t
#define ELF_ST_TYPE ELF32_ST_TYPE

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -50,7 +50,7 @@ int pathmap_open(const char* name) {
}
if (strlen(alt_root) + strlen(name) < PATH_MAX) {
if (strlen(alt_root) + strlen(name) > PATH_MAX) {
// Buffer too small.
return -1;
}

@ -642,6 +642,18 @@ static bool core_handle_note(struct ps_prochandle* ph, ELF_PHDR* note_phdr) {
if (core_handle_prstatus(ph, descdata, notep->n_descsz) != true) {
return false;
}
} else if (notep->n_type == NT_AUXV) {
// Get first segment from entry point
ELF_AUXV *auxv = (ELF_AUXV *)descdata;
while (auxv->a_type != AT_NULL) {
if (auxv->a_type == AT_ENTRY) {
// Set entry point address to address of dynamic section.
// We will adjust it in read_exec_segments().
ph->core->dynamic_addr = auxv->a_un.a_val;
break;
}
auxv++;
}
}
p = descdata + ROUNDUP(notep->n_descsz, 4);
}
@ -832,7 +844,13 @@ static bool read_exec_segments(struct ps_prochandle* ph, ELF_EHDR* exec_ehdr) {
// from PT_DYNAMIC we want to read address of first link_map addr
case PT_DYNAMIC: {
ph->core->dynamic_addr = exec_php->p_vaddr;
if (exec_ehdr->e_type == ET_EXEC) {
ph->core->dynamic_addr = exec_php->p_vaddr;
} else { // ET_DYN
// dynamic_addr has entry point of executable.
// Thus we should substract it.
ph->core->dynamic_addr += exec_php->p_vaddr - exec_ehdr->e_entry;
}
print_debug("address of _DYNAMIC is 0x%lx\n", ph->core->dynamic_addr);
break;
}
@ -1030,8 +1048,9 @@ struct ps_prochandle* Pgrab_core(const char* exec_file, const char* core_file) {
goto err;
}
if (read_elf_header(ph->core->exec_fd, &exec_ehdr) != true || exec_ehdr.e_type != ET_EXEC) {
print_debug("executable file is not a valid ELF ET_EXEC file\n");
if (read_elf_header(ph->core->exec_fd, &exec_ehdr) != true ||
((exec_ehdr.e_type != ET_EXEC) && (exec_ehdr.e_type != ET_DYN))) {
print_debug("executable file is not a valid ELF file\n");
goto err;
}

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -150,13 +150,7 @@ public class HeapSummary extends Tool {
// Helper methods
private void printGCAlgorithm(Map flagMap) {
// print about new generation
long l = getFlagValue("UseParNewGC", flagMap);
if (l == 1L) {
System.out.println("using parallel threads in the new generation.");
}
l = getFlagValue("UseTLAB", flagMap);
long l = getFlagValue("UseTLAB", flagMap);
if (l == 1L) {
System.out.println("using thread-local object allocation.");
}

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -114,6 +114,8 @@ public abstract class AbstractHeapGraphWriter implements HeapGraphWriter {
}
});
writeHeapRecordPrologue();
// write JavaThreads
writeJavaThreads();

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -45,8 +45,8 @@ import sun.jvm.hotspot.classfile.*;
* WARNING: This format is still under development, and is subject to
* change without notice.
*
* header "JAVA PROFILE 1.0.1" or "JAVA PROFILE 1.0.2" (0-terminated)
* u4 size of identifiers. Identifiers are used to represent
* header "JAVA PROFILE 1.0.2" (0-terminated)
* u4 size of identifiers. Identifiers are used to represent
* UTF8 strings, objects, stack traces, etc. They usually
* have the same size as host pointers. For example, on
* Solaris and Win32, the size is 4.
@ -294,10 +294,9 @@ import sun.jvm.hotspot.classfile.*;
* u2 stack trace depth
*
*
* When the header is "JAVA PROFILE 1.0.2" a heap dump can optionally
* be generated as a sequence of heap dump segments. This sequence is
* terminated by an end record. The additional tags allowed by format
* "JAVA PROFILE 1.0.2" are:
* A heap dump can optionally be generated as a sequence of heap dump
* segments. This sequence is terminated by an end record. The additional
* tags allowed by format "JAVA PROFILE 1.0.2" are:
*
* HPROF_HEAP_DUMP_SEGMENT denote a heap dump segment
*
@ -310,8 +309,6 @@ import sun.jvm.hotspot.classfile.*;
public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
// The heap size threshold used to determine if segmented format
// ("JAVA PROFILE 1.0.2") should be used.
private static final long HPROF_SEGMENTED_HEAP_DUMP_THRESHOLD = 2L * 0x40000000;
// The approximate size of a heap segment. Used to calculate when to create
@ -319,7 +316,6 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
private static final long HPROF_SEGMENTED_HEAP_DUMP_SEGMENT_SIZE = 1L * 0x40000000;
// hprof binary file header
private static final String HPROF_HEADER_1_0_1 = "JAVA PROFILE 1.0.1";
private static final String HPROF_HEADER_1_0_2 = "JAVA PROFILE 1.0.2";
// constants in enum HprofTag
@ -380,6 +376,7 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
private static final int JVM_SIGNATURE_ARRAY = '[';
private static final int JVM_SIGNATURE_CLASS = 'L';
private static final long MAX_U4_VALUE = 0xFFFFFFFFL;
int serialNum = 1;
public synchronized void write(String fileName) throws IOException {
@ -469,7 +466,6 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
// length later - hprof format requires length.
out.flush();
currentSegmentStart = fos.getChannel().position();
// write dummy length of 0 and we'll fix it later.
out.writeInt(0);
}
@ -479,7 +475,7 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
protected void writeHeapRecordEpilogue() throws IOException {
if (useSegmentedHeapDump) {
out.flush();
if ((fos.getChannel().position() - currentSegmentStart - 4) >= HPROF_SEGMENTED_HEAP_DUMP_SEGMENT_SIZE) {
if ((fos.getChannel().position() - currentSegmentStart - 4L) >= HPROF_SEGMENTED_HEAP_DUMP_SEGMENT_SIZE) {
fillInHeapRecordLength();
currentSegmentStart = 0;
}
@ -488,14 +484,14 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
private void fillInHeapRecordLength() throws IOException {
// now get current position to calculate length
// now get the current position to calculate length
long dumpEnd = fos.getChannel().position();
// calculate length of heap data
// calculate the length of heap data
long dumpLenLong = (dumpEnd - currentSegmentStart - 4L);
// Check length boundary, overflow could happen but is _very_ unlikely
if(dumpLenLong >= (4L * 0x40000000)){
if (dumpLenLong >= (4L * 0x40000000)) {
throw new RuntimeException("Heap segment size overflow.");
}
@ -517,6 +513,71 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
fos.getChannel().position(currentPosition);
}
// get the size in bytes for the requested type
private long getSizeForType(int type) throws IOException {
switch (type) {
case TypeArrayKlass.T_BOOLEAN:
return BOOLEAN_SIZE;
case TypeArrayKlass.T_INT:
return INT_SIZE;
case TypeArrayKlass.T_CHAR:
return CHAR_SIZE;
case TypeArrayKlass.T_SHORT:
return SHORT_SIZE;
case TypeArrayKlass.T_BYTE:
return BYTE_SIZE;
case TypeArrayKlass.T_LONG:
return LONG_SIZE;
case TypeArrayKlass.T_FLOAT:
return FLOAT_SIZE;
case TypeArrayKlass.T_DOUBLE:
return DOUBLE_SIZE;
default:
throw new RuntimeException(
"Should not reach here: Unknown type: " + type);
}
}
private int getArrayHeaderSize(boolean isObjectAarray) {
return isObjectAarray?
((int) BYTE_SIZE + 2 * (int) INT_SIZE + 2 * (int) OBJ_ID_SIZE):
(2 * (int) BYTE_SIZE + 2 * (int) INT_SIZE + (int) OBJ_ID_SIZE);
}
// Check if we need to truncate an array
private int calculateArrayMaxLength(long originalArrayLength,
int headerSize,
long typeSize,
String typeName) throws IOException {
long length = originalArrayLength;
// now get the current position to calculate length
long dumpEnd = fos.getChannel().position();
long originalLengthInBytes = originalArrayLength * typeSize;
// calculate the length of heap data
long currentRecordLength = (dumpEnd - currentSegmentStart - 4L);
if (currentRecordLength > 0 &&
(currentRecordLength + headerSize + originalLengthInBytes) > MAX_U4_VALUE) {
fillInHeapRecordLength();
currentSegmentStart = 0;
writeHeapRecordPrologue();
currentRecordLength = 0;
}
// Calculate the max bytes we can use.
long maxBytes = (MAX_U4_VALUE - (headerSize + currentRecordLength));
if (originalLengthInBytes > maxBytes) {
length = maxBytes/typeSize;
System.err.println("WARNING: Cannot dump array of type " + typeName
+ " with length " + originalArrayLength
+ "; truncating to length " + length);
}
return (int) length;
}
private void writeClassDumpRecords() throws IOException {
SystemDictionary sysDict = VM.getVM().getSystemDictionary();
ClassLoaderDataGraph cldGraph = VM.getVM().getClassLoaderDataGraph();
@ -694,12 +755,16 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
}
protected void writeObjectArray(ObjArray array) throws IOException {
int headerSize = getArrayHeaderSize(true);
final int length = calculateArrayMaxLength(array.getLength(),
headerSize,
OBJ_ID_SIZE,
"Object");
out.writeByte((byte) HPROF_GC_OBJ_ARRAY_DUMP);
writeObjectID(array);
out.writeInt(DUMMY_STACK_TRACE_ID);
out.writeInt((int) array.getLength());
out.writeInt(length);
writeObjectID(array.getKlass().getJavaMirror());
final int length = (int) array.getLength();
for (int index = 0; index < length; index++) {
OopHandle handle = array.getOopHandleAt(index);
writeObjectID(getAddressValue(handle));
@ -707,101 +772,101 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
}
protected void writePrimitiveArray(TypeArray array) throws IOException {
int headerSize = getArrayHeaderSize(false);
TypeArrayKlass tak = (TypeArrayKlass) array.getKlass();
final int type = (int) tak.getElementType();
final String typeName = tak.getElementTypeName();
final long typeSize = getSizeForType(type);
final int length = calculateArrayMaxLength(array.getLength(),
headerSize,
typeSize,
typeName);
out.writeByte((byte) HPROF_GC_PRIM_ARRAY_DUMP);
writeObjectID(array);
out.writeInt(DUMMY_STACK_TRACE_ID);
out.writeInt((int) array.getLength());
TypeArrayKlass tak = (TypeArrayKlass) array.getKlass();
final int type = (int) tak.getElementType();
out.writeInt(length);
out.writeByte((byte) type);
switch (type) {
case TypeArrayKlass.T_BOOLEAN:
writeBooleanArray(array);
writeBooleanArray(array, length);
break;
case TypeArrayKlass.T_CHAR:
writeCharArray(array);
writeCharArray(array, length);
break;
case TypeArrayKlass.T_FLOAT:
writeFloatArray(array);
writeFloatArray(array, length);
break;
case TypeArrayKlass.T_DOUBLE:
writeDoubleArray(array);
writeDoubleArray(array, length);
break;
case TypeArrayKlass.T_BYTE:
writeByteArray(array);
writeByteArray(array, length);
break;
case TypeArrayKlass.T_SHORT:
writeShortArray(array);
writeShortArray(array, length);
break;
case TypeArrayKlass.T_INT:
writeIntArray(array);
writeIntArray(array, length);
break;
case TypeArrayKlass.T_LONG:
writeLongArray(array);
writeLongArray(array, length);
break;
default:
throw new RuntimeException("should not reach here");
throw new RuntimeException(
"Should not reach here: Unknown type: " + type);
}
}
private void writeBooleanArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeBooleanArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = BOOLEAN_BASE_OFFSET + index * BOOLEAN_SIZE;
out.writeBoolean(array.getHandle().getJBooleanAt(offset));
}
}
private void writeByteArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeByteArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = BYTE_BASE_OFFSET + index * BYTE_SIZE;
out.writeByte(array.getHandle().getJByteAt(offset));
}
}
private void writeShortArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeShortArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = SHORT_BASE_OFFSET + index * SHORT_SIZE;
out.writeShort(array.getHandle().getJShortAt(offset));
}
}
private void writeIntArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeIntArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = INT_BASE_OFFSET + index * INT_SIZE;
out.writeInt(array.getHandle().getJIntAt(offset));
}
}
private void writeLongArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeLongArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = LONG_BASE_OFFSET + index * LONG_SIZE;
out.writeLong(array.getHandle().getJLongAt(offset));
}
}
private void writeCharArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeCharArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = CHAR_BASE_OFFSET + index * CHAR_SIZE;
out.writeChar(array.getHandle().getJCharAt(offset));
}
}
private void writeFloatArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeFloatArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = FLOAT_BASE_OFFSET + index * FLOAT_SIZE;
out.writeFloat(array.getHandle().getJFloatAt(offset));
}
}
private void writeDoubleArray(TypeArray array) throws IOException {
final int length = (int) array.getLength();
private void writeDoubleArray(TypeArray array, int length) throws IOException {
for (int index = 0; index < length; index++) {
long offset = DOUBLE_BASE_OFFSET + index * DOUBLE_SIZE;
out.writeDouble(array.getHandle().getJDoubleAt(offset));
@ -996,12 +1061,7 @@ public class HeapHprofBinWriter extends AbstractHeapGraphWriter {
// writes hprof binary file header
private void writeFileHeader() throws IOException {
// version string
if(useSegmentedHeapDump) {
out.writeBytes(HPROF_HEADER_1_0_2);
}
else {
out.writeBytes(HPROF_HEADER_1_0_1);
}
out.writeBytes(HPROF_HEADER_1_0_2);
out.writeByte((byte)'\0');
// write identifier size. we use pointers as identifiers.

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