/*
* Copyright (c) 2007, 2012, 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.tele.field;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import java.util.concurrent.*;
import com.sun.cri.ci.*;
import com.sun.max.annotate.*;
import com.sun.max.atomic.*;
import com.sun.max.config.*;
import com.sun.max.ide.*;
import com.sun.max.io.*;
import com.sun.max.lang.*;
import com.sun.max.memory.*;
import com.sun.max.program.*;
import com.sun.max.tele.*;
import com.sun.max.tele.util.*;
import com.sun.max.unsafe.*;
import com.sun.max.vm.*;
import com.sun.max.vm.actor.*;
import com.sun.max.vm.actor.holder.*;
import com.sun.max.vm.actor.member.*;
import com.sun.max.vm.classfile.*;
import com.sun.max.vm.classfile.constant.*;
import com.sun.max.vm.code.*;
import com.sun.max.vm.compiler.*;
import com.sun.max.vm.compiler.target.*;
import com.sun.max.vm.ext.jvmti.*;
import com.sun.max.vm.heap.*;
import com.sun.max.vm.heap.gcx.*;
import com.sun.max.vm.heap.gcx.gen.mse.*;
import com.sun.max.vm.heap.gcx.ms.*;
import com.sun.max.vm.heap.gcx.rset.ctbl.*;
import com.sun.max.vm.heap.sequential.gen.semiSpace.*;
import com.sun.max.vm.heap.sequential.semiSpace.*;
import com.sun.max.vm.jni.*;
import com.sun.max.vm.jni.DynamicLinker.LibInfo;
import com.sun.max.vm.layout.*;
import com.sun.max.vm.log.*;
import com.sun.max.vm.log.VMLog.Record;
import com.sun.max.vm.log.java.*;
import com.sun.max.vm.log.nat.*;
import com.sun.max.vm.monitor.*;
import com.sun.max.vm.reference.*;
import com.sun.max.vm.run.*;
import com.sun.max.vm.tele.*;
import com.sun.max.vm.thread.*;
import com.sun.max.vm.type.*;
import com.sun.max.vm.value.*;
/**
* Singleton collection of access to specific object fields in VM memory.
* <p>
* The {@link INSPECTED} annotation is employed to denote fields that will be read remotely.
* A field of the appropriate {@link TeleFieldAccess} subtype is generated into this file
* by executing the {@link #main(String[])} method in this class (ensuring that the VM.
* class path contains all the {@code com.sun.max} classes).
*/
public class VmFieldAccess extends AbstractVmHolder {
private static final int TRACE_VALUE = 1;
private static VmFieldAccess vmFieldsAccess;
public static VmFieldAccess make(TeleVM vm) {
if (vmFieldsAccess == null) {
vmFieldsAccess = new VmFieldAccess(vm);
}
return vmFieldsAccess;
}
private VmFieldAccess(TeleVM vm) {
super(vm);
// Uncomment to enable verifying that the generated content in this class is up to date when running the inspector
// updateSource(true);
}
// Checkstyle: stop field name check
// VM fields:
// START GENERATED CONTENT
public final TeleInstanceIntFieldAccess Actor_flags = new TeleInstanceIntFieldAccess(Actor.class, "flags");
public final TeleInstanceReferenceFieldAccess Actor_name = new TeleInstanceReferenceFieldAccess(Actor.class, "name", Utf8Constant.class);
public final TeleInstanceReferenceFieldAccess Adapter_generator = new TeleInstanceReferenceFieldAccess(Adapter.class, "generator", AdapterGenerator.class);
public final TeleInstanceWordFieldAccess BaseAtomicBumpPointerAllocator_end = new TeleInstanceWordFieldAccess(BaseAtomicBumpPointerAllocator.class, "end");
public final TeleInstanceWordFieldAccess BaseAtomicBumpPointerAllocator_start = new TeleInstanceWordFieldAccess(BaseAtomicBumpPointerAllocator.class, "start");
public final TeleInstanceWordFieldAccess BaseAtomicBumpPointerAllocator_top = new TeleInstanceWordFieldAccess(BaseAtomicBumpPointerAllocator.class, "top");
public final TeleInstanceReferenceFieldAccess BootHeapRegion_referenceMapBytes = new TeleInstanceReferenceFieldAccess(BootHeapRegion.class, "referenceMapBytes", byte[].class);
public final TeleInstanceReferenceFieldAccess CardTableRSet_cardTable = new TeleInstanceReferenceFieldAccess(CardTableRSet.class, "cardTable", CardTable.class);
public final TeleInstanceReferenceFieldAccess CardTableRSet_cfoTable = new TeleInstanceReferenceFieldAccess(CardTableRSet.class, "cfoTable", CardFirstObjectTable.class);
public final TeleInstanceReferenceFieldAccess CardTableRSet_tablesMemory = new TeleInstanceReferenceFieldAccess(CardTableRSet.class, "tablesMemory", MemoryRegion.class);
public final TeleInstanceReferenceFieldAccess ClassActor_classLoader = new TeleInstanceReferenceFieldAccess(ClassActor.class, "classLoader", ClassLoader.class);
public final TeleInstanceReferenceFieldAccess ClassActor_classfile = new TeleInstanceReferenceFieldAccess(ClassActor.class, "classfile", byte[].class);
public final TeleInstanceReferenceFieldAccess ClassActor_componentClassActor = new TeleInstanceReferenceFieldAccess(ClassActor.class, "componentClassActor", ClassActor.class);
public final TeleInstanceReferenceFieldAccess ClassActor_dynamicHub = new TeleInstanceReferenceFieldAccess(ClassActor.class, "dynamicHub", DynamicHub.class);
public final TeleInstanceIntFieldAccess ClassActor_id = new TeleInstanceIntFieldAccess(ClassActor.class, "id");
public final TeleInstanceReferenceFieldAccess ClassActor_javaClass = new TeleInstanceReferenceFieldAccess(ClassActor.class, "javaClass", Class.class);
public final TeleInstanceReferenceFieldAccess ClassActor_localInstanceFieldActors = new TeleInstanceReferenceFieldAccess(ClassActor.class, "localInstanceFieldActors", FieldActor[].class);
public final TeleInstanceReferenceFieldAccess ClassActor_localInterfaceMethodActors = new TeleInstanceReferenceFieldAccess(ClassActor.class, "localInterfaceMethodActors", InterfaceMethodActor[].class);
public final TeleInstanceReferenceFieldAccess ClassActor_localStaticFieldActors = new TeleInstanceReferenceFieldAccess(ClassActor.class, "localStaticFieldActors", FieldActor[].class);
public final TeleInstanceReferenceFieldAccess ClassActor_localStaticMethodActors = new TeleInstanceReferenceFieldAccess(ClassActor.class, "localStaticMethodActors", StaticMethodActor[].class);
public final TeleInstanceReferenceFieldAccess ClassActor_localVirtualMethodActors = new TeleInstanceReferenceFieldAccess(ClassActor.class, "localVirtualMethodActors", VirtualMethodActor[].class);
public final TeleInstanceReferenceFieldAccess ClassActor_staticHub = new TeleInstanceReferenceFieldAccess(ClassActor.class, "staticHub", StaticHub.class);
public final TeleInstanceReferenceFieldAccess ClassActor_staticTuple = new TeleInstanceReferenceFieldAccess(ClassActor.class, "staticTuple", Object.class);
public final TeleInstanceReferenceFieldAccess ClassActor_typeDescriptor = new TeleInstanceReferenceFieldAccess(ClassActor.class, "typeDescriptor", TypeDescriptor.class);
public final TeleInstanceReferenceFieldAccess ClassMethodActor_codeAttribute = new TeleInstanceReferenceFieldAccess(ClassMethodActor.class, "codeAttribute", CodeAttribute.class);
public final TeleInstanceReferenceFieldAccess ClassMethodActor_compiledState = new TeleInstanceReferenceFieldAccess(ClassMethodActor.class, "compiledState", Object.class);
public final TeleInstanceReferenceFieldAccess ClassMethodActor_compilee = new TeleInstanceReferenceFieldAccess(ClassMethodActor.class, "compilee", ClassMethodActor.class);
public final TeleInstanceReferenceFieldAccess ClassRegistry_bootClassRegistry = new TeleInstanceReferenceFieldAccess(ClassRegistry.class, "bootClassRegistry", ClassRegistry.class);
public final TeleInstanceReferenceFieldAccess ClassRegistry_typeDescriptorToClassActor = new TeleInstanceReferenceFieldAccess(ClassRegistry.class, "typeDescriptorToClassActor", ConcurrentHashMap.class);
public final TeleStaticReferenceFieldAccess Code_CODE_BOOT_NAME = new TeleStaticReferenceFieldAccess(Code.class, "CODE_BOOT_NAME", String.class);
public final TeleStaticReferenceFieldAccess Code_bootCodeRegion = new TeleStaticReferenceFieldAccess(Code.class, "bootCodeRegion", CodeRegion.class);
public final TeleStaticReferenceFieldAccess Code_codeManager = new TeleStaticReferenceFieldAccess(Code.class, "codeManager", CodeManager.class);
public final TeleInstanceReferenceFieldAccess CodeAttribute_code = new TeleInstanceReferenceFieldAccess(CodeAttribute.class, "code", byte[].class);
public final TeleInstanceReferenceFieldAccess CodeAttribute_cp = new TeleInstanceReferenceFieldAccess(CodeAttribute.class, "cp", ConstantPool.class);
public final TeleStaticReferenceFieldAccess CodeManager_runtimeBaselineCodeRegion = new TeleStaticReferenceFieldAccess(CodeManager.class, "runtimeBaselineCodeRegion", SemiSpaceCodeRegion.class);
public final TeleStaticReferenceFieldAccess CodeManager_runtimeOptCodeRegion = new TeleStaticReferenceFieldAccess(CodeManager.class, "runtimeOptCodeRegion", CodeRegion.class);
public final TeleInstanceIntFieldAccess CodeRegion_additionCompletedCount = new TeleInstanceIntFieldAccess(CodeRegion.class, "additionCompletedCount");
public final TeleInstanceIntFieldAccess CodeRegion_additionStartedCount = new TeleInstanceIntFieldAccess(CodeRegion.class, "additionStartedCount");
public final TeleInstanceLongFieldAccess CodeRegion_evictionCompletedCount = new TeleInstanceLongFieldAccess(CodeRegion.class, "evictionCompletedCount");
public final TeleInstanceLongFieldAccess CodeRegion_evictionStartedCount = new TeleInstanceLongFieldAccess(CodeRegion.class, "evictionStartedCount");
public final TeleInstanceIntFieldAccess CodeRegion_length = new TeleInstanceIntFieldAccess(CodeRegion.class, "length");
public final TeleInstanceReferenceFieldAccess CodeRegion_targetMethods = new TeleInstanceReferenceFieldAccess(CodeRegion.class, "targetMethods", TargetMethod[].class);
public final TeleInstanceReferenceFieldAccess Compilation_prevCompilations = new TeleInstanceReferenceFieldAccess(Compilation.class, "prevCompilations", Compilations.class);
public final TeleInstanceReferenceFieldAccess Compilations_baseline = new TeleInstanceReferenceFieldAccess(Compilations.class, "baseline", TargetMethod.class);
public final TeleInstanceReferenceFieldAccess Compilations_optimized = new TeleInstanceReferenceFieldAccess(Compilations.class, "optimized", TargetMethod.class);
public final TeleInstanceReferenceFieldAccess ConstantPool_constants = new TeleInstanceReferenceFieldAccess(ConstantPool.class, "constants", PoolConstant[].class);
public final TeleInstanceReferenceFieldAccess ConstantPool_holder = new TeleInstanceReferenceFieldAccess(ConstantPool.class, "holder", ClassActor.class);
public final TeleInstanceReferenceFieldAccess ContiguousAllocatingSpace_allocator = new TeleInstanceReferenceFieldAccess(ContiguousAllocatingSpace.class, "allocator", BaseAtomicBumpPointerAllocator.class);
public final TeleInstanceReferenceFieldAccess ContiguousAllocatingSpace_space = new TeleInstanceReferenceFieldAccess(ContiguousAllocatingSpace.class, "space", ContiguousHeapSpace.class);
public final TeleInstanceWordFieldAccess ContiguousHeapSpace_committedEnd = new TeleInstanceWordFieldAccess(ContiguousHeapSpace.class, "committedEnd");
public final TeleInstanceReferenceFieldAccess ContiguousSemiSpace_fromSpace = new TeleInstanceReferenceFieldAccess(ContiguousSemiSpace.class, "fromSpace", ContiguousHeapSpace.class);
public final TeleStaticReferenceFieldAccess DarkMatter_DARK_MATTER_ARRAY = new TeleStaticReferenceFieldAccess(DarkMatter.class, "DARK_MATTER_ARRAY", ArrayClassActor.class);
public final TeleStaticReferenceFieldAccess DarkMatter_DARK_MATTER_CLASS_NAME = new TeleStaticReferenceFieldAccess(DarkMatter.class, "DARK_MATTER_CLASS_NAME", String.class);
public final TeleInstanceReferenceFieldAccess Descriptor_string = new TeleInstanceReferenceFieldAccess(Descriptor.class, "string", String.class);
public final TeleStaticReferenceFieldAccess DynamicLinker_libInfoArray = new TeleStaticReferenceFieldAccess(DynamicLinker.class, "libInfoArray", LibInfo[].class);
public final TeleStaticIntFieldAccess DynamicLinker_libInfoIndex = new TeleStaticIntFieldAccess(DynamicLinker.class, "libInfoIndex");
public final TeleInstanceWordFieldAccess EvacuatorToCardSpace_allocatedRangeStart = new TeleInstanceWordFieldAccess(EvacuatorToCardSpace.class, "allocatedRangeStart");
public final TeleInstanceWordFieldAccess EvacuatorToCardSpace_initialEvacuationMark = new TeleInstanceWordFieldAccess(EvacuatorToCardSpace.class, "initialEvacuationMark");
public final TeleInstanceWordFieldAccess EvacuatorToCardSpace_pend = new TeleInstanceWordFieldAccess(EvacuatorToCardSpace.class, "pend");
public final TeleInstanceWordFieldAccess EvacuatorToCardSpace_ptop = new TeleInstanceWordFieldAccess(EvacuatorToCardSpace.class, "ptop");
public final TeleInstanceReferenceFieldAccess FreeHeapSpaceManager_committedHeapSpace = new TeleInstanceReferenceFieldAccess(FreeHeapSpaceManager.class, "committedHeapSpace", ContiguousHeapSpace.class);
public final TeleInstanceReferenceFieldAccess GenMSEHeapScheme_cardTableRSet = new TeleInstanceReferenceFieldAccess(GenMSEHeapScheme.class, "cardTableRSet", CardTableRSet.class);
public final TeleInstanceReferenceFieldAccess GenMSEHeapScheme_oldSpace = new TeleInstanceReferenceFieldAccess(GenMSEHeapScheme.class, "oldSpace", FirstFitMarkSweepSpace.class);
public final TeleInstanceReferenceFieldAccess GenMSEHeapScheme_youngSpace = new TeleInstanceReferenceFieldAccess(GenMSEHeapScheme.class, "youngSpace", NoAgingRegionalizedNursery.class);
public final TeleInstanceReferenceFieldAccess GenSSHeapScheme_cardTableRSet = new TeleInstanceReferenceFieldAccess(GenSSHeapScheme.class, "cardTableRSet", CardTableRSet.class);
public final TeleInstanceIntFieldAccess GenSSHeapScheme_fullCollectionCount = new TeleInstanceIntFieldAccess(GenSSHeapScheme.class, "fullCollectionCount");
public final TeleInstanceWordFieldAccess GenSSHeapScheme_oldOverflowEvacuationMark = new TeleInstanceWordFieldAccess(GenSSHeapScheme.class, "oldOverflowEvacuationMark");
public final TeleInstanceReferenceFieldAccess GenSSHeapScheme_oldSpace = new TeleInstanceReferenceFieldAccess(GenSSHeapScheme.class, "oldSpace", ContiguousSemiSpace.class);
public final TeleInstanceReferenceFieldAccess GenSSHeapScheme_oldSpaceEvacuator = new TeleInstanceReferenceFieldAccess(GenSSHeapScheme.class, "oldSpaceEvacuator", EvacuatorToCardSpace.class);
public final TeleInstanceReferenceFieldAccess GenSSHeapScheme_overflowedArea = new TeleInstanceReferenceFieldAccess(GenSSHeapScheme.class, "overflowedArea", MemoryRegion.class);
public final TeleInstanceBooleanFieldAccess GenSSHeapScheme_requiresFullGC = new TeleInstanceBooleanFieldAccess(GenSSHeapScheme.class, "requiresFullGC");
public final TeleInstanceReferenceFieldAccess GenSSHeapScheme_resizingPolicy = new TeleInstanceReferenceFieldAccess(GenSSHeapScheme.class, "resizingPolicy", GenSSHeapSizingPolicy.class);
public final TeleInstanceWordFieldAccess GenSSHeapScheme_youngOverflowEvacuationMark = new TeleInstanceWordFieldAccess(GenSSHeapScheme.class, "youngOverflowEvacuationMark");
public final TeleInstanceReferenceFieldAccess GenSSHeapScheme_youngSpace = new TeleInstanceReferenceFieldAccess(GenSSHeapScheme.class, "youngSpace", ContiguousAllocatingSpace.class);
public final TeleInstanceReferenceFieldAccess GenSSHeapScheme_youngSpaceEvacuator = new TeleInstanceReferenceFieldAccess(GenSSHeapScheme.class, "youngSpaceEvacuator", NoAgingNurseryEvacuator.class);
public final TeleInstanceBooleanFieldAccess GenSSHeapSizingPolicy_minorEvacuationOverflow = new TeleInstanceBooleanFieldAccess(GenSSHeapSizingPolicy.class, "minorEvacuationOverflow");
public final TeleInstanceBooleanFieldAccess GenSSHeapSizingPolicy_oldEvacuationOverflow = new TeleInstanceBooleanFieldAccess(GenSSHeapSizingPolicy.class, "oldEvacuationOverflow");
public final TeleStaticReferenceFieldAccess Heap_HEAP_BOOT_NAME = new TeleStaticReferenceFieldAccess(Heap.class, "HEAP_BOOT_NAME", String.class);
public final TeleStaticReferenceFieldAccess Heap_bootHeapRegion = new TeleStaticReferenceFieldAccess(Heap.class, "bootHeapRegion", BootHeapRegion.class);
public final TeleInstanceReferenceFieldAccess HeapFreeChunk_next = new TeleInstanceReferenceFieldAccess(HeapFreeChunk.class, "next", HeapFreeChunk.class);
public final TeleInstanceWordFieldAccess HeapFreeChunk_size = new TeleInstanceWordFieldAccess(HeapFreeChunk.class, "size");
public final TeleStaticIntFieldAccess HeapRegionConstants_regionSizeInBytes = new TeleStaticIntFieldAccess(HeapRegionConstants.class, "regionSizeInBytes");
public final TeleInstanceIntFieldAccess HeapRegionInfo_firstFreeChunkOffset = new TeleInstanceIntFieldAccess(HeapRegionInfo.class, "firstFreeChunkOffset");
public final TeleInstanceIntFieldAccess HeapRegionInfo_flags = new TeleInstanceIntFieldAccess(HeapRegionInfo.class, "flags");
public final TeleInstanceIntFieldAccess HeapRegionInfo_numFreeChunks = new TeleInstanceIntFieldAccess(HeapRegionInfo.class, "numFreeChunks");
public final TeleInstanceIntFieldAccess HeapRegionInfo_tag = new TeleInstanceIntFieldAccess(HeapRegionInfo.class, "tag");
public final TeleInstanceReferenceFieldAccess Hub_classActor = new TeleInstanceReferenceFieldAccess(Hub.class, "classActor", ClassActor.class);
public final TeleInstanceIntFieldAccess Hub_mTableLength = new TeleInstanceIntFieldAccess(Hub.class, "mTableLength");
public final TeleInstanceIntFieldAccess Hub_mTableStartIndex = new TeleInstanceIntFieldAccess(Hub.class, "mTableStartIndex");
public final TeleInstanceIntFieldAccess Hub_referenceMapLength = new TeleInstanceIntFieldAccess(Hub.class, "referenceMapLength");
public final TeleInstanceIntFieldAccess Hub_referenceMapStartIndex = new TeleInstanceIntFieldAccess(Hub.class, "referenceMapStartIndex");
public final TeleInstanceReferenceFieldAccess HybridClassActor_constantPool = new TeleInstanceReferenceFieldAccess(HybridClassActor.class, "constantPool", ConstantPool.class);
public final TeleStaticReferenceFieldAccess ImmortalHeap_immortalHeap = new TeleStaticReferenceFieldAccess(ImmortalHeap.class, "immortalHeap", ImmortalMemoryRegion.class);
public final TeleStaticIntFieldAccess Inspectable_flags = new TeleStaticIntFieldAccess(Inspectable.class, "flags");
public final TeleStaticIntFieldAccess InspectableClassInfo_classActorCount = new TeleStaticIntFieldAccess(InspectableClassInfo.class, "classActorCount");
public final TeleStaticReferenceFieldAccess InspectableClassInfo_classActors = new TeleStaticReferenceFieldAccess(InspectableClassInfo.class, "classActors", ClassActor[].class);
public final TeleStaticReferenceFieldAccess InspectableCompilationInfo_breakpointClassDescriptorCharArray = new TeleStaticReferenceFieldAccess(InspectableCompilationInfo.class, "breakpointClassDescriptorCharArray", char[].class);
public final TeleStaticIntFieldAccess InspectableCompilationInfo_breakpointClassDescriptorsCharCount = new TeleStaticIntFieldAccess(InspectableCompilationInfo.class, "breakpointClassDescriptorsCharCount");
public final TeleStaticIntFieldAccess InspectableCompilationInfo_breakpointClassDescriptorsEpoch = new TeleStaticIntFieldAccess(InspectableCompilationInfo.class, "breakpointClassDescriptorsEpoch");
public final TeleStaticReferenceFieldAccess InspectableHeapInfo_dynamicHeapMemoryRegions = new TeleStaticReferenceFieldAccess(InspectableHeapInfo.class, "dynamicHeapMemoryRegions", MemoryRegion[].class);
public final TeleStaticLongFieldAccess InspectableHeapInfo_gcCompletedCounter = new TeleStaticLongFieldAccess(InspectableHeapInfo.class, "gcCompletedCounter");
public final TeleStaticLongFieldAccess InspectableHeapInfo_gcStartedCounter = new TeleStaticLongFieldAccess(InspectableHeapInfo.class, "gcStartedCounter");
public final TeleStaticIntFieldAccess InspectableHeapInfo_heapPhaseOrdinal = new TeleStaticIntFieldAccess(InspectableHeapInfo.class, "heapPhaseOrdinal");
public final TeleStaticLongFieldAccess InspectableHeapInfo_recentHeapSizeRequest = new TeleStaticLongFieldAccess(InspectableHeapInfo.class, "recentHeapSizeRequest");
public final TeleInstanceCharFieldAccess Kind_character = new TeleInstanceCharFieldAccess(Kind.class, "character");
public final TeleInstanceWordFieldAccess DynamicLinker$LibInfo_handle = new TeleInstanceWordFieldAccess(DynamicLinker.LibInfo.class, "handle");
public final TeleInstanceWordFieldAccess DynamicLinker$LibInfo_pathAsCString = new TeleInstanceWordFieldAccess(DynamicLinker.LibInfo.class, "pathAsCString");
public final TeleInstanceWordFieldAccess DynamicLinker$LibInfo_sentinelAddress = new TeleInstanceWordFieldAccess(DynamicLinker.LibInfo.class, "sentinelAddress");
public final TeleInstanceWordFieldAccess DynamicLinker$LibInfo_sentinelAsCString = new TeleInstanceWordFieldAccess(DynamicLinker.LibInfo.class, "sentinelAsCString");
public final TeleInstanceReferenceFieldAccess LinearAllocationMemoryRegion_mark = new TeleInstanceReferenceFieldAccess(LinearAllocationMemoryRegion.class, "mark", AtomicWord.class);
public final TeleInstanceWordFieldAccess Log2RegionToByteMapTable_coveredAreaEnd = new TeleInstanceWordFieldAccess(Log2RegionToByteMapTable.class, "coveredAreaEnd");
public final TeleInstanceWordFieldAccess Log2RegionToByteMapTable_coveredAreaStart = new TeleInstanceWordFieldAccess(Log2RegionToByteMapTable.class, "coveredAreaStart");
public final TeleInstanceWordFieldAccess Log2RegionToByteMapTable_tableAddress = new TeleInstanceWordFieldAccess(Log2RegionToByteMapTable.class, "tableAddress");
public final TeleInstanceReferenceFieldAccess MSHeapScheme_heapMarker = new TeleInstanceReferenceFieldAccess(MSHeapScheme.class, "heapMarker", TricolorHeapMarker.class);
public final TeleInstanceReferenceFieldAccess MSHeapScheme_objectSpace = new TeleInstanceReferenceFieldAccess(MSHeapScheme.class, "objectSpace", FreeHeapSpaceManager.class);
public final TeleInstanceReferenceFieldAccess MaxineVM_config = new TeleInstanceReferenceFieldAccess(MaxineVM.class, "config", VMConfiguration.class);
public final TeleStaticWordFieldAccess MaxineVM_primordialTLBlock = new TeleStaticWordFieldAccess(MaxineVM.class, "primordialTLBlock");
public final TeleStaticIntFieldAccess MaxineVM_primordialTLBlockSize = new TeleStaticIntFieldAccess(MaxineVM.class, "primordialTLBlockSize");
public final TeleStaticReferenceFieldAccess MaxineVM_vm = new TeleStaticReferenceFieldAccess(MaxineVM.class, "vm", MaxineVM.class);
public final TeleInstanceReferenceFieldAccess MemberActor_descriptor = new TeleInstanceReferenceFieldAccess(MemberActor.class, "descriptor", Descriptor.class);
public final TeleInstanceReferenceFieldAccess MemberActor_holder = new TeleInstanceReferenceFieldAccess(MemberActor.class, "holder", ClassActor.class);
public final TeleInstanceReferenceFieldAccess MemoryRegion_regionName = new TeleInstanceReferenceFieldAccess(MemoryRegion.class, "regionName", String.class);
public final TeleInstanceWordFieldAccess MemoryRegion_size = new TeleInstanceWordFieldAccess(MemoryRegion.class, "size");
public final TeleInstanceWordFieldAccess MemoryRegion_start = new TeleInstanceWordFieldAccess(MemoryRegion.class, "start");
public final TeleInstanceWordFieldAccess JVMTIRawMonitor$Monitor_name = new TeleInstanceWordFieldAccess(JVMTIRawMonitor.Monitor.class, "name");
public final TeleInstanceReferenceFieldAccess JVMTIRawMonitor$Monitor_owner = new TeleInstanceReferenceFieldAccess(JVMTIRawMonitor.Monitor.class, "owner", VmThread.class);
public final TeleInstanceReferenceFieldAccess NoAgingRegionalizedNursery_allocator = new TeleInstanceReferenceFieldAccess(NoAgingRegionalizedNursery.class, "allocator", AtomicBumpPointerAllocator.class);
public final TeleInstanceReferenceFieldAccess ObjectReferenceValue_value = new TeleInstanceReferenceFieldAccess(ObjectReferenceValue.class, "value", Object.class);
public final TeleInstanceIntFieldAccess VMLogArray$Record0_header = new TeleInstanceIntFieldAccess(VMLogArray.Record0.class, "header");
public final TeleInstanceWordFieldAccess VMLogArray$Record1_arg1 = new TeleInstanceWordFieldAccess(VMLogArray.Record1.class, "arg1");
public final TeleInstanceWordFieldAccess VMLogArray$Record2_arg2 = new TeleInstanceWordFieldAccess(VMLogArray.Record2.class, "arg2");
public final TeleInstanceWordFieldAccess VMLogArray$Record3_arg3 = new TeleInstanceWordFieldAccess(VMLogArray.Record3.class, "arg3");
public final TeleInstanceWordFieldAccess VMLogArray$Record4_arg4 = new TeleInstanceWordFieldAccess(VMLogArray.Record4.class, "arg4");
public final TeleInstanceWordFieldAccess VMLogArray$Record5_arg5 = new TeleInstanceWordFieldAccess(VMLogArray.Record5.class, "arg5");
public final TeleInstanceWordFieldAccess VMLogArray$Record6_arg6 = new TeleInstanceWordFieldAccess(VMLogArray.Record6.class, "arg6");
public final TeleInstanceWordFieldAccess VMLogArray$Record7_arg7 = new TeleInstanceWordFieldAccess(VMLogArray.Record7.class, "arg7");
public final TeleInstanceWordFieldAccess VMLogArray$Record8_arg8 = new TeleInstanceWordFieldAccess(VMLogArray.Record8.class, "arg8");
public final TeleInstanceIntFieldAccess RegionTable_length = new TeleInstanceIntFieldAccess(RegionTable.class, "length");
public final TeleInstanceIntFieldAccess RegionTable_regionInfoSize = new TeleInstanceIntFieldAccess(RegionTable.class, "regionInfoSize");
public final TeleInstanceWordFieldAccess RegionTable_regionPoolEnd = new TeleInstanceWordFieldAccess(RegionTable.class, "regionPoolEnd");
public final TeleInstanceWordFieldAccess RegionTable_regionPoolStart = new TeleInstanceWordFieldAccess(RegionTable.class, "regionPoolStart");
public final TeleStaticReferenceFieldAccess RegionTable_theRegionTable = new TeleStaticReferenceFieldAccess(RegionTable.class, "theRegionTable", RegionTable.class);
public final TeleInstanceReferenceFieldAccess ClassConstant$Resolved_classActor = new TeleInstanceReferenceFieldAccess(ClassConstant.Resolved.class, "classActor", ClassActor.class);
public final TeleInstanceReferenceFieldAccess FieldRefConstant$Resolved_fieldActor = new TeleInstanceReferenceFieldAccess(FieldRefConstant.Resolved.class, "fieldActor", FieldActor.class);
public final TeleInstanceReferenceFieldAccess ResolvedMethodRefConstant_methodActor = new TeleInstanceReferenceFieldAccess(ResolvedMethodRefConstant.class, "methodActor", MethodActor.class);
public final TeleInstanceIntFieldAccess SemiSpaceCodeRegion_fromLength = new TeleInstanceIntFieldAccess(SemiSpaceCodeRegion.class, "fromLength");
public final TeleInstanceWordFieldAccess SemiSpaceCodeRegion_fromSpace = new TeleInstanceWordFieldAccess(SemiSpaceCodeRegion.class, "fromSpace");
public final TeleInstanceReferenceFieldAccess SemiSpaceCodeRegion_fromTargetMethods = new TeleInstanceReferenceFieldAccess(SemiSpaceCodeRegion.class, "fromTargetMethods", TargetMethod[].class);
public final TeleInstanceWordFieldAccess SemiSpaceCodeRegion_spaceSize = new TeleInstanceWordFieldAccess(SemiSpaceCodeRegion.class, "spaceSize");
public final TeleInstanceWordFieldAccess SemiSpaceCodeRegion_toSpace = new TeleInstanceWordFieldAccess(SemiSpaceCodeRegion.class, "toSpace");
public final TeleInstanceWordFieldAccess SemiSpaceCodeRegion_topOfSpace = new TeleInstanceWordFieldAccess(SemiSpaceCodeRegion.class, "topOfSpace");
public final TeleInstanceReferenceFieldAccess SemiSpaceHeapScheme_fromSpace = new TeleInstanceReferenceFieldAccess(SemiSpaceHeapScheme.class, "fromSpace", LinearAllocationMemoryRegion.class);
public final TeleInstanceReferenceFieldAccess SemiSpaceHeapScheme_toSpace = new TeleInstanceReferenceFieldAccess(SemiSpaceHeapScheme.class, "toSpace", LinearAllocationMemoryRegion.class);
public final TeleInstanceReferenceFieldAccess StringConstant_value = new TeleInstanceReferenceFieldAccess(StringConstant.class, "value", String.class);
public final TeleStaticReferenceFieldAccess TargetMethod_WIPED_CODE = new TeleStaticReferenceFieldAccess(TargetMethod.class, "WIPED_CODE", byte[].class);
public final TeleInstanceReferenceFieldAccess TargetMethod_callEntryPoint = new TeleInstanceReferenceFieldAccess(TargetMethod.class, "callEntryPoint", CallEntryPoint.class);
public final TeleInstanceReferenceFieldAccess TargetMethod_classMethodActor = new TeleInstanceReferenceFieldAccess(TargetMethod.class, "classMethodActor", ClassMethodActor.class);
public final TeleInstanceReferenceFieldAccess TargetMethod_code = new TeleInstanceReferenceFieldAccess(TargetMethod.class, "code", byte[].class);
public final TeleInstanceWordFieldAccess TargetMethod_codeStart = new TeleInstanceWordFieldAccess(TargetMethod.class, "codeStart");
public final TeleInstanceWordFieldAccess TargetMethod_oldStart = new TeleInstanceWordFieldAccess(TargetMethod.class, "oldStart");
public final TeleInstanceReferenceFieldAccess TargetMethod_referenceLiterals = new TeleInstanceReferenceFieldAccess(TargetMethod.class, "referenceLiterals", Object[].class);
public final TeleInstanceReferenceFieldAccess TargetMethod_scalarLiterals = new TeleInstanceReferenceFieldAccess(TargetMethod.class, "scalarLiterals", byte[].class);
public final TeleStaticIntFieldAccess Trace_level = new TeleStaticIntFieldAccess(Trace.class, "level");
public final TeleStaticLongFieldAccess Trace_threshold = new TeleStaticLongFieldAccess(Trace.class, "threshold");
public final TeleInstanceWordFieldAccess TricolorHeapMarker_base = new TeleInstanceWordFieldAccess(TricolorHeapMarker.class, "base");
public final TeleInstanceReferenceFieldAccess TricolorHeapMarker_colorMap = new TeleInstanceReferenceFieldAccess(TricolorHeapMarker.class, "colorMap", MemoryRegion.class);
public final TeleInstanceWordFieldAccess TricolorHeapMarker_coveredAreaEnd = new TeleInstanceWordFieldAccess(TricolorHeapMarker.class, "coveredAreaEnd");
public final TeleInstanceWordFieldAccess TricolorHeapMarker_coveredAreaStart = new TeleInstanceWordFieldAccess(TricolorHeapMarker.class, "coveredAreaStart");
public final TeleInstanceIntFieldAccess TricolorHeapMarker_wordsCoveredPerBit = new TeleInstanceIntFieldAccess(TricolorHeapMarker.class, "wordsCoveredPerBit");
public final TeleInstanceReferenceFieldAccess TupleClassActor_constantPool = new TeleInstanceReferenceFieldAccess(TupleClassActor.class, "constantPool", ConstantPool.class);
public final TeleInstanceReferenceFieldAccess Utf8Constant_string = new TeleInstanceReferenceFieldAccess(Utf8Constant.class, "string", String.class);
public final TeleInstanceReferenceFieldAccess VMConfiguration_heapScheme = new TeleInstanceReferenceFieldAccess(VMConfiguration.class, "heapScheme", HeapScheme.class);
public final TeleInstanceReferenceFieldAccess VMConfiguration_layoutScheme = new TeleInstanceReferenceFieldAccess(VMConfiguration.class, "layoutScheme", LayoutScheme.class);
public final TeleInstanceReferenceFieldAccess VMConfiguration_monitorScheme = new TeleInstanceReferenceFieldAccess(VMConfiguration.class, "monitorScheme", MonitorScheme.class);
public final TeleInstanceReferenceFieldAccess VMConfiguration_referenceScheme = new TeleInstanceReferenceFieldAccess(VMConfiguration.class, "referenceScheme", ReferenceScheme.class);
public final TeleInstanceReferenceFieldAccess VMConfiguration_runScheme = new TeleInstanceReferenceFieldAccess(VMConfiguration.class, "runScheme", RunScheme.class);
public final TeleInstanceIntFieldAccess VMLog_logEntries = new TeleInstanceIntFieldAccess(VMLog.class, "logEntries");
public final TeleInstanceReferenceFieldAccess VMLog_loggers = new TeleInstanceReferenceFieldAccess(VMLog.class, "loggers", VMLogger[].class);
public final TeleInstanceIntFieldAccess VMLog_nextId = new TeleInstanceIntFieldAccess(VMLog.class, "nextId");
public final TeleStaticReferenceFieldAccess VMLog_vmLog = new TeleStaticReferenceFieldAccess(VMLog.class, "vmLog", VMLog.class);
public final TeleInstanceReferenceFieldAccess VMLogArray_buffer = new TeleInstanceReferenceFieldAccess(VMLogArray.class, "buffer", Record[].class);
public final TeleInstanceIntFieldAccess VMLogNative_defaultNativeRecordSize = new TeleInstanceIntFieldAccess(VMLogNative.class, "defaultNativeRecordSize");
public final TeleInstanceWordFieldAccess VMLogNative_logBuffer = new TeleInstanceWordFieldAccess(VMLogNative.class, "logBuffer");
public final TeleInstanceIntFieldAccess VMLogNative_logSize = new TeleInstanceIntFieldAccess(VMLogNative.class, "logSize");
public final TeleInstanceIntFieldAccess VMLogNative_nativeRecordArgsOffset = new TeleInstanceIntFieldAccess(VMLogNative.class, "nativeRecordArgsOffset");
public final TeleInstanceReferenceFieldAccess VmThread_name = new TeleInstanceReferenceFieldAccess(VmThread.class, "name", String.class);
public final TeleStaticReferenceFieldAccess VmThreadLocal_VALUES = new TeleStaticReferenceFieldAccess(VmThreadLocal.class, "VALUES", List.class);
// END GENERATED CONTENT
// Injected JDK fields:
public final TeleInstanceReferenceFieldAccess Class_classActor = new TeleInstanceReferenceFieldAccess(Class.class, ClassActor.class, InjectedReferenceFieldActor.Class_classActor);
public final TeleInstanceReferenceFieldAccess ClassLoader_classRegistry = new TeleInstanceReferenceFieldAccess(ClassLoader.class, ClassRegistry.class, InjectedReferenceFieldActor.ClassLoader_classRegistry);
public final TeleInstanceReferenceFieldAccess Field_fieldActor = new TeleInstanceReferenceFieldAccess(Field.class, FieldActor.class, InjectedReferenceFieldActor.Field_fieldActor);
public final TeleInstanceReferenceFieldAccess Method_methodActor = new TeleInstanceReferenceFieldAccess(Method.class, MethodActor.class, InjectedReferenceFieldActor.Method_methodActor);
public final TeleInstanceReferenceFieldAccess Constructor_methodActor = new TeleInstanceReferenceFieldAccess(Constructor.class, MethodActor.class, InjectedReferenceFieldActor.Constructor_methodActor);
// Other JDK fields:
private final Class ConcurrentHashMap$Segment = Classes.getInnerClass(ConcurrentHashMap.class, "Segment");
private final Class ConcurrentHashMap$HashEntry = Classes.getInnerClass(ConcurrentHashMap.class, "HashEntry");
public final TeleInstanceReferenceFieldAccess ConcurrentHashMap_segments = new TeleInstanceReferenceFieldAccess(ConcurrentHashMap.class, "segments", Array.newInstance(ConcurrentHashMap$Segment, 0).getClass());
public final TeleInstanceReferenceFieldAccess ConcurrentHashMap$Segment_table = new TeleInstanceReferenceFieldAccess(ConcurrentHashMap$Segment, "table", Array.newInstance(ConcurrentHashMap$HashEntry, 0).getClass());
public final TeleInstanceReferenceFieldAccess ConcurrentHashMap$HashEntry_next = new TeleInstanceReferenceFieldAccess(ConcurrentHashMap$HashEntry, "next", ConcurrentHashMap$HashEntry);
public final TeleInstanceReferenceFieldAccess ConcurrentHashMap$HashEntry_value = new TeleInstanceReferenceFieldAccess(ConcurrentHashMap$HashEntry, "value", Object.class);
public final TeleInstanceIntFieldAccess Enum_ordinal = new TeleInstanceIntFieldAccess(Enum.class, "ordinal");
public final TeleInstanceReferenceFieldAccess String_value = new TeleInstanceReferenceFieldAccess(String.class, "value", char[].class);
// Other fields:
public final TeleInstanceReferenceFieldAccess CiConstant_object = new TeleInstanceReferenceFieldAccess(CiConstant.class, "object", Object.class);
// Checkstyle: resume field name check
public interface InspectedMemberReifier<Member_Type extends Member> {
/**
* Reifies a {@link Method}, {@link Field} or {@link Constructor} annotated with {@link INSPECTED} found on a
* classpath search.
*
* @param member the member to be reified
* @param writer the Java source to which the declaration of the reified member should be written
*/
void reify(Member_Type member, IndentWriter writer);
}
public static <Member_Type extends Member> void updateSource(final Class sourceClass, final Class<Member_Type> memberClass, final InspectedMemberReifier<Member_Type> memberReifier, final boolean inInspector) {
final File sourceFile = new File(JavaProject.findSourceDirectory(VmFieldAccess.class), sourceClass.getName().replace('.', File.separatorChar) + ".java").getAbsoluteFile();
if (!sourceFile.exists()) {
TeleWarning.message("Source file does not exist: " + sourceFile.getAbsolutePath());
}
final Runnable runnable = new Runnable() {
public void run() {
final Classpath classpath = Classpath.fromSystem();
final PackageLoader packageLoader = new PackageLoader(ClassLoader.getSystemClassLoader(), classpath);
if (inInspector) {
packageLoader.setTraceLevel(Integer.MAX_VALUE);
}
final CharArraySource charArrayWriter = new CharArraySource();
final IndentWriter writer = new IndentWriter(new PrintWriter(charArrayWriter));
writer.indent();
final Set<Member> reified = new TreeSet<Member>(new Comparator<Member>() {
public int compare(Member member1, Member member2) {
if (member1.equals(member2)) {
return 0;
}
final int classNameComparison = member1.getDeclaringClass().getSimpleName().compareTo(member2.getDeclaringClass().getSimpleName());
if (classNameComparison != 0) {
return classNameComparison;
}
final int result = member1.getName().compareTo(member2.getName());
assert result != 0 : member1 + " " + member2;
return result;
}
});
new ClassSearch() {
final HashSet<String> seenPackages = new HashSet<String>();
@Override
protected boolean visitClass(boolean isArchiveEntry, String className) {
if (!className.endsWith("package-info")) {
Class c = Classes.forName(className, false, getClass().getClassLoader());
String pkg = Classes.getPackageName(className);
if (seenPackages.add(pkg)) {
Trace.line(1, pkg);
}
final AccessibleObject[] members = memberClass.equals(Method.class) ? c.getDeclaredMethods() : (memberClass.equals(Field.class) ? c.getDeclaredFields() : c.getDeclaredConstructors());
for (AccessibleObject member : members) {
if (member.getAnnotation(INSPECTED.class) != null) {
if (!reified.contains(member)) {
reified.add((Member) member);
}
}
}
}
return true;
}
}.run(Classpath.fromSystem(), "com/sun/max");
for (Member member : reified) {
memberReifier.reify(memberClass.cast(member), writer);
}
try {
final boolean changed = Files.updateGeneratedContent(sourceFile, charArrayWriter, " // START GENERATED CONTENT", " // END GENERATED CONTENT", false);
if (changed) {
TeleWarning.message("The source file " + sourceFile + " was updated" + (inInspector ? ": recompile and restart the inspector" : ""));
} else {
Trace.line(1, "The source file " + sourceFile + " did not need to be updated.");
}
} catch (IOException exception) {
if (inInspector) {
TeleWarning.message("Error while verifying that " + sourceFile + " is up to date", exception);
} else {
TeleError.unexpected(exception);
}
}
}
};
if (!inInspector) {
runnable.run();
} else {
final Runnable inspectorRunnable = new Runnable() {
public void run() {
Trace.begin(1, "Verifying that " + sourceClass + " is up to date");
try {
runnable.run();
} finally {
Trace.end(1, "Verifying that " + sourceClass + " is up to date");
}
}
};
final Thread thread = new Thread(inspectorRunnable, "Inspected" + memberClass.getSimpleName() + "s verifier");
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}
public static void main(String[] args) {
Trace.on(1);
Trace.begin(1, "VmFields updating GENERATED CONTENT");
updateSource(false);
Trace.end(1, "VmFields updating GENERATED CONTENT");
}
private static void updateSource(boolean inInspector) {
final InspectedMemberReifier<Field> fieldReifier = new InspectedMemberReifier<Field>() {
public void reify(Field field, IndentWriter writer) {
final Class c = field.getDeclaringClass();
final boolean isStatic = Modifier.isStatic(field.getModifiers());
final Class type = field.getType();
final Kind kind = Word.class.isAssignableFrom(type) ? Kind.WORD : Kind.fromJava(type);
final String holder = c.getName().substring(c.getPackage().getName().length() + 1);
final String name = field.getName();
final String kindName = kind.toString();
final String inspectorFieldName = holder + (name.charAt(0) == '_' ? name : '_' + name);
final String inspectorFieldType = "Tele" + (isStatic ? "Static" : "Instance") + Strings.capitalizeFirst(kindName, true) + "FieldAccess";
writer.print("public final " + inspectorFieldType + " " + inspectorFieldName + " = ");
switch (kind.asEnum) {
case BOOLEAN:
case BYTE:
case CHAR:
case SHORT:
case INT:
case FLOAT:
case LONG:
case DOUBLE:
case WORD: {
writer.print("new " + inspectorFieldType + "(" + holder.replace('$', '.') + ".class, \"" + name + "\")");
break;
}
case REFERENCE: {
writer.print("new " + inspectorFieldType + "(" + holder.replace('$', '.') + ".class, \"" + name + "\", " + type.getSimpleName() + ".class)");
break;
}
default: {
TeleError.unexpected("Invalid field kind: " + kind);
}
}
writer.println(";");
}
};
updateSource(VmFieldAccess.class, Field.class, fieldReifier, inInspector);
}
}