This commit is contained in:
J. Duke 2017-07-05 22:58:34 +02:00
commit aaeb3f1066
4247 changed files with 39761 additions and 19105 deletions

View File

@ -399,3 +399,8 @@ d7034ff7f8e257e81c9f95c7785dd4eaaa3c2afc jdk-9+153
8c70d170e62c0c58b5bc3ba666bd140399b98c9c jdk-10+0 8c70d170e62c0c58b5bc3ba666bd140399b98c9c jdk-10+0
45b751afd11e6c05991cf4913c5a0ac3304fcc4e jdk-9+154 45b751afd11e6c05991cf4913c5a0ac3304fcc4e jdk-9+154
f4aff695ffe05cfdb69d8af25a4ddc6a029754ea jdk-9+155 f4aff695ffe05cfdb69d8af25a4ddc6a029754ea jdk-9+155
06bce0388880b5ff8e040e4a9d72a3ea11dac321 jdk-9+156
fa3e76b477829afc4476f0b725cfaa440a6fd917 jdk-9+157
b5015f742ba648184bb7fc547197bd33ebfde30d jdk-9+158
fd1497902bbe3aa24b21f270ecdcb8de5f7aa9ac jdk-9+159
6aa8be0c4e054fe8b3ab016ae00d16d680f92145 jdk-9+160

View File

@ -398,3 +398,7 @@ ff8cb43c07c069b1debdee44cb88ca22db1ec757 jdk-9+152
68a8e8658511093b322a46ed04b2a321e1da2a43 jdk-9+153 68a8e8658511093b322a46ed04b2a321e1da2a43 jdk-9+153
078ebe23b584466dc8346e620d7821d91751e5a9 jdk-9+154 078ebe23b584466dc8346e620d7821d91751e5a9 jdk-9+154
a545f54babfa31aa7eb611f36031609acd617cbc jdk-9+155 a545f54babfa31aa7eb611f36031609acd617cbc jdk-9+155
907c26240cd481579e919bfd23740797ff8ce1c8 jdk-9+156
9383da04b385cca46b7ca67f3a39ac1b673e09fe jdk-9+157
de6bdf38935fa753183ca288bed5c06a23c0bb12 jdk-9+158
6feea77d2083c99e44aa3e272d07b7fb3b801683 jdk-9+159

View File

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

View File

@ -106,13 +106,13 @@ import java.security.PrivilegedAction;
* *
* <LI>check in properties parameter, if any * <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 * <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 * <LI>check in the orb.properties file located in the run-time image,
* directory (if any) * if any
* *
* <LI>fall back on a hardcoded default behavior (use the Java&nbsp;IDL * <LI>fall back on a hardcoded default behavior (use the Java&nbsp;IDL
* implementation) * implementation)
@ -170,9 +170,15 @@ import java.security.PrivilegedAction;
* Thus, where appropriate, it is necessary that * Thus, where appropriate, it is necessary that
* the classes for this alternative ORBSingleton are available on the application's class path. * 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. * 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, * When a per-application ORB is created via the 2-arg init methods,
* then it will be located using the thread context class loader. * 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 * @since JDK1.2
*/ */
@ -271,14 +277,25 @@ abstract public class ORB {
} }
String javaHome = System.getProperty("java.home"); String javaHome = System.getProperty("java.home");
fileName = javaHome + File.separator
+ "lib" + File.separator + "orb.properties"; fileName = javaHome + File.separator + "conf"
props = getFileProperties( fileName ) ; + 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) if (props == null)
return null ; return null;
else else
return props.getProperty( name ) ; return props.getProperty(name);
} }
} }
); );

View File

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

View File

@ -558,3 +558,7 @@ a82cb5350cad96a0b4de496afebe3ded89f27efa jdk-9+146
217ba81b9a4ce8698200370175aa2db86a39f66c jdk-9+153 217ba81b9a4ce8698200370175aa2db86a39f66c jdk-9+153
a9fdfd55835ef9dccb7f317b07249bd66653b874 jdk-9+154 a9fdfd55835ef9dccb7f317b07249bd66653b874 jdk-9+154
f3b3d77a1751897413aae43ac340a130b6fa2ae1 jdk-9+155 f3b3d77a1751897413aae43ac340a130b6fa2ae1 jdk-9+155
43139c588ea48b6504e52b6c3dec530b17b1fdb4 jdk-9+156
b2d0a906afd73dcf27f572217eb1be0f196ec16c jdk-9+157
4e78f30935229f13ce7c43089621cf7169f5abac jdk-9+158
9211c2e89c1cd11ec2d5752b0f97131a7d7525c7 jdk-9+159

View File

@ -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 # JDK9 must be bootstrapped with a JDK8
compliance = mx.JavaCompliance('8') compliance = mx.JavaCompliance('8')
jdk8 = mx.get_jdk(compliance.exactMatch, versionDescription=compliance.value) 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', 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-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk8.home, '--with-jvm-features=graal']
mx.run(cmd, cwd=_jdkSourceRoot) mx.run(cmd, cwd=_jdkSourceRoot)
cmd = [mx.gmake_cmd(), 'CONF=' + _vm.debugLevel] cmd = [mx.gmake_cmd(), 'CONF=' + _vm.debugLevel]
if mx.get_opts().verbose: 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) 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): def _runmultimake(args):
"""run the JDK make process for one or more configurations""" """run the JDK make process for one or more configurations"""

View File

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

View File

@ -38,9 +38,9 @@ TARGETS :=
$(eval $(call IncludeCustomExtension, hotspot, CompileTools.gmk)) $(eval $(call IncludeCustomExtension, hotspot, CompileTools.gmk))
ifeq ($(INCLUDE_GRAAL), true) 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 # Compile the annotation processors

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -850,6 +850,12 @@ void VM_Version::get_processor_features() {
#if INCLUDE_RTM_OPT #if INCLUDE_RTM_OPT
if (UseRTMLocking) { 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 (is_intel_family_core()) {
if ((_model == CPU_MODEL_HASWELL_E3) || if ((_model == CPU_MODEL_HASWELL_E3) ||
(_model == CPU_MODEL_HASWELL_E7 && _stepping < 3) || (_model == CPU_MODEL_HASWELL_E7 && _stepping < 3) ||

View File

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

View File

@ -59,12 +59,6 @@ abstract class CallSiteRelocationSymbol {
addExternalPltToGotRelocation(binaryContainer, symbol, relocationOffset); 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 * Add an {@link RelocType#EXTERNAL_GOT_TO_PLT} relocation to the
* {@link BinaryContainer#getExtLinkageGOTContainer()}. * {@link BinaryContainer#getExtLinkageGOTContainer()}.

View File

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

View File

@ -37,6 +37,7 @@ import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
final class JavaCallSiteRelocationSymbol extends CallSiteRelocationSymbol { final class JavaCallSiteRelocationSymbol extends CallSiteRelocationSymbol {
private static final byte[] zeroSlot = new byte[8]; 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}; private static final byte[] minusOneSlot = {-1, -1, -1, -1, -1, -1, -1, -1};
public JavaCallSiteRelocationSymbol(CompiledMethodInfo mi, Call call, CallSiteRelocationInfo callSiteRelocation, BinaryContainer binaryContainer) { 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. // 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); String gotSymbolName = "got." + getResolveSymbolName(binaryContainer, mi, call);
Symbol gotSymbol = binaryContainer.getGotSymbol(gotSymbolName); Symbol gotSymbol = binaryContainer.getGotSymbol(gotSymbolName);
addExternalPltToGotRelocation(binaryContainer, gotSymbol, stub.getResolveJumpOffset()); addExternalPltToGotRelocation(binaryContainer, gotSymbol, stub.getResolveJumpOffset());
// Add relocation to resolve call jump instruction address for GOT cell. // 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); String pltJmpSymbolName = relocationSymbolName("plt.jmp", mi, call, callSiteRelocation);
addCodeContainerRelocation(binaryContainer, pltJmpSymbolName, stub.getResolveJumpStart(), gotStartOffset); addCodeContainerRelocation(binaryContainer, pltJmpSymbolName, stub.getResolveJumpStart(), gotStartOffset);
// Add relocation to GOT cell for dispatch jump. // 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); String gotEntrySymbolName = relocationSymbolName("got.entry", mi, call, callSiteRelocation);
addExtLinkageGotContainerRelocation(binaryContainer, gotEntrySymbolName, gotStartOffset, stub.getDispatchJumpOffset()); 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; 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). // Add relocation to GOT cell for move instruction (Klass* for virtual, Method* otherwise).
String gotMoveSymbolName = relocationSymbolName("got.move", mi, call, callSiteRelocation); String gotMoveSymbolName = relocationSymbolName("got.move", mi, call, callSiteRelocation);
addMetaspaceGotRelocation(binaryContainer, gotMoveSymbolName, gotMetaOffset, stub.getMovOffset()); addExtLinkageGotContainerRelocation(binaryContainer, gotMoveSymbolName, gotMetaOffset, stub.getMovOffset());
if (isVirtualCall) { if (isVirtualCall) {
// Nothing. // Nothing.
} else { } else {
// Add relocation to GOT cell for c2i adapter jump. // 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); String gotC2ISymbolName = relocationSymbolName("got.c2i", mi, call, callSiteRelocation);
addExtLinkageGotContainerRelocation(binaryContainer, gotC2ISymbolName, gotStartOffset + 8, stub.getC2IJumpOffset()); addExtLinkageGotContainerRelocation(binaryContainer, gotC2ISymbolName, gotStartOffset + 8, stub.getC2IJumpOffset());
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * 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. // Buffer too small.
return -1; return -1;
} }

View File

@ -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) { if (core_handle_prstatus(ph, descdata, notep->n_descsz) != true) {
return false; 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); 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 // from PT_DYNAMIC we want to read address of first link_map addr
case PT_DYNAMIC: { 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); print_debug("address of _DYNAMIC is 0x%lx\n", ph->core->dynamic_addr);
break; break;
} }
@ -1030,8 +1048,9 @@ struct ps_prochandle* Pgrab_core(const char* exec_file, const char* core_file) {
goto err; goto err;
} }
if (read_elf_header(ph->core->exec_fd, &exec_ehdr) != true || exec_ehdr.e_type != ET_EXEC) { if (read_elf_header(ph->core->exec_fd, &exec_ehdr) != true ||
print_debug("executable file is not a valid ELF ET_EXEC file\n"); ((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; goto err;
} }

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * 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 // write JavaThreads
writeJavaThreads(); writeJavaThreads();

View File

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

View File

@ -278,8 +278,10 @@ final class CompilerToVM {
* {@code info} are: * {@code info} are:
* *
* <pre> * <pre>
* [(int) flags, // only valid if field is resolved * [ flags, // fieldDescriptor::access_flags()
* (int) offset] // only valid if field is resolved * offset, // fieldDescriptor::offset()
* index // fieldDescriptor::index()
* ]
* </pre> * </pre>
* *
* The behavior of this method is undefined if {@code cpi} does not denote a * The behavior of this method is undefined if {@code cpi} does not denote a
@ -288,7 +290,7 @@ final class CompilerToVM {
* @param info an array in which the details of the field are returned * @param info an array in which the details of the field are returned
* @return the type defining the field if resolution is successful, 0 otherwise * @return the type defining the field if resolution is successful, 0 otherwise
*/ */
native HotSpotResolvedObjectTypeImpl resolveFieldInPool(HotSpotConstantPool constantPool, int cpi, HotSpotResolvedJavaMethodImpl method, byte opcode, long[] info); native HotSpotResolvedObjectTypeImpl resolveFieldInPool(HotSpotConstantPool constantPool, int cpi, HotSpotResolvedJavaMethodImpl method, byte opcode, int[] info);
/** /**
* Converts {@code cpci} from an index into the cache for {@code constantPool} to an index * Converts {@code cpci} from an index into the cache for {@code constantPool} to an index
@ -631,4 +633,15 @@ final class CompilerToVM {
* {@code lambdaForm} (which must be a {@code java.lang.invoke.LambdaForm} instance). * {@code lambdaForm} (which must be a {@code java.lang.invoke.LambdaForm} instance).
*/ */
native void compileToBytecode(Object lambdaForm); native void compileToBytecode(Object lambdaForm);
/**
* Gets the value of the VM flag named {@code name}.
*
* @param name name of a VM option
* @return {@code this} if the named VM option doesn't exist, a {@link String} or {@code null}
* if its type is {@code ccstr} or {@code ccstrlist}, a {@link Double} if its type is
* {@code double}, a {@link Boolean} if its type is {@code bool} otherwise a
* {@link Long}
*/
native Object getFlagValue(String name);
} }

View File

@ -76,7 +76,7 @@ public class HotSpotCodeCacheProvider implements CodeCacheProvider {
HotSpotVMConfigStore store = runtime.getConfigStore(); HotSpotVMConfigStore store = runtime.getConfigStore();
for (Map.Entry<String, VMField> e : store.getFields().entrySet()) { for (Map.Entry<String, VMField> e : store.getFields().entrySet()) {
VMField field = e.getValue(); VMField field = e.getValue();
if (field.isStatic() && field.value != null && field.value == address) { if (field.isStatic() && field.value != null && field.value instanceof Long && ((Long) field.value) == address) {
return e.getValue() + ":0x" + Long.toHexString(address); return e.getValue() + ":0x" + Long.toHexString(address);
} }
} }

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