--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotInstalledCode.java 2019-03-28 11:23:49.000000000 -0700 +++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotInstalledCode.java 2019-03-28 11:23:49.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,28 +22,28 @@ */ package jdk.vm.ci.hotspot; -import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE; +import static jdk.vm.ci.hotspot.CompilerToVM.compilerToVM; -import jdk.internal.misc.Unsafe; import jdk.vm.ci.code.InstalledCode; /** - * Implementation of {@link InstalledCode} for HotSpot. + * Implementation of {@link InstalledCode} for HotSpot representing a {@code CodeBlob}. The address + * of the {@code CodeBlob} is stored in {@link InstalledCode#address}. */ public abstract class HotSpotInstalledCode extends InstalledCode { /** - * Total size of the code blob. + * Total size of the code blob (i.e. {@code CodeBlob::size()}). */ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "field is set by the native part") private int size; /** - * Start address of the code. + * Start address of the code (i.e. {@code CodeBlob::code_begin()}). */ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "field is set by the native part") private long codeStart; /** - * Size of the code. + * Size of the code (i.e. {@code CodeBlob::code_size()}). */ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "field is set by the native part") private int codeSize; @@ -52,7 +52,7 @@ } /** - * @return the total size of this code blob + * Gets the value of {@code CodeBlob::size()}. */ public int getSize() { return size; @@ -61,22 +61,25 @@ @Override public abstract String toString(); + /** + * Gets the value of {@code CodeBlob::code_begin()} if {@linkplain #isValid() valid}, 0 + * otherwise. + */ @Override public long getStart() { return codeStart; } + /** + * Gets the value of {@code CodeBlob::code_size()} if {@linkplain #isValid() valid}, 0 + * otherwise. + */ public long getCodeSize() { return codeSize; } @Override public byte[] getCode() { - if (!isValid()) { - return null; - } - byte[] code = new byte[codeSize]; - UNSAFE.copyMemory(null, codeStart, code, Unsafe.ARRAY_BYTE_BASE_OFFSET, codeSize); - return code; + return compilerToVM().getCode(this); } }