001/*
002 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation.
008 *
009 * This code is distributed in the hope that it will be useful, but WITHOUT
010 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
011 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
012 * version 2 for more details (a copy is included in the LICENSE file that
013 * accompanied this code).
014 *
015 * You should have received a copy of the GNU General Public License version
016 * 2 along with this work; if not, write to the Free Software Foundation,
017 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
018 *
019 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
020 * or visit www.oracle.com if you need additional information or have any
021 * questions.
022 */
023package jdk.internal.jvmci.hotspot;
024
025import jdk.internal.jvmci.code.*;
026
027/**
028 * {@link HotSpotCompiledCode} destined for installation as an nmethod.
029 */
030public final class HotSpotCompiledNmethod extends HotSpotCompiledCode {
031
032    public final HotSpotResolvedJavaMethod method;
033    public final int entryBCI;
034    public final int id;
035    public final long jvmciEnv;
036    public final boolean hasUnsafeAccess;
037
038    /**
039     * May be set by VM if code installation fails. It will describe in more detail why installation
040     * failed (e.g., exactly which dependency failed).
041     */
042    @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "set by the VM") private String installationFailureMessage;
043
044    public HotSpotCompiledNmethod(HotSpotResolvedJavaMethod method, CompilationResult compResult) {
045        this(method, compResult, 0L);
046    }
047
048    public HotSpotCompiledNmethod(HotSpotResolvedJavaMethod method, CompilationResult compResult, long jvmciEnv) {
049        super(compResult);
050        this.method = method;
051        this.entryBCI = compResult.getEntryBCI();
052        this.id = compResult.getId();
053        this.jvmciEnv = jvmciEnv;
054        this.hasUnsafeAccess = compResult.hasUnsafeAccess();
055    }
056
057    @Override
058    public String toString() {
059        return getClass().getSimpleName() + "[" + id + ":" + method.format("%H.%n(%p)%r@") + entryBCI + "]";
060    }
061
062    public String getInstallationFailureMessage() {
063        return installationFailureMessage;
064    }
065}