/* * Copyright (c) 2009, 2011, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.max.vm.tele; import com.sun.max.annotate.*; import com.sun.max.vm.*; import com.sun.max.vm.MaxineVM.Phase; /** * Holder for magic word that communicates whether this VM is being inspected and possibly * other flags. */ public final class Inspectable { private Inspectable() { } /** * Option to make the VM run inspectable when VM not created by Inspector. */ public static boolean MakeInspectable; static { VMOptions.addFieldOption("-XX:", "MakeInspectable", Inspectable.class, "Make it possible for Inspector to attach to running VM", Phase.PRISTINE); } /** * Constant denoting that the VM process is being inspected. */ public static final int INSPECTED = 0x0000001; /** * If a non-zero value is put here remotely, or by command line option, then the * additional steps to facilitate inspection should be activated. */ @INSPECTED private static int flags; /** * Determines if the VM process is being inspected. * N.B. If this method is called in the {@code PRIMORDIAL} phase * it will not honor the {@link #MakeInspectable} option because * that is not set until the {@code PRISTINE} phase. */ public static boolean isVmInspected() { if ((flags & INSPECTED) != 0) { return true; } if (MaxineVM.isHosted()) { // A hosted VM is never inspected. return false; } if (MakeInspectable) { flags = INSPECTED; } return (flags & INSPECTED) != 0; } }