Path: blob/master/runtime/compiler/il/J9Symbol.hpp
6000 views
/*******************************************************************************1* Copyright (c) 2000, 2021 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#ifndef J9_SYMBOL_INCL23#define J9_SYMBOL_INCL2425/*26* The following #define and typedef must appear before any #includes in this file27*/28#ifndef J9_SYMBOL_CONNECTOR29#define J9_SYMBOL_CONNECTOR30namespace J9 { class Symbol; }31namespace J9 { typedef J9::Symbol SymbolConnector; }32#endif3334#include "il/OMRSymbol.hpp"3536#include <stddef.h>37#include <stdint.h>38#include "env/TRMemory.hpp"39#include "il/DataTypes.hpp"40#include "infra/Assert.hpp"41#include "infra/Flags.hpp"4243class TR_FrontEnd;44class TR_ResolvedMethod;45namespace TR { class AutomaticSymbol; }46namespace TR { class Compilation; }47namespace TR { class LabelSymbol; }48namespace TR { class MethodSymbol; }49namespace TR { class ParameterSymbol; }50namespace TR { class RegisterMappedSymbol; }51namespace TR { class ResolvedMethodSymbol; }52namespace TR { class StaticSymbol; }53namespace TR { class Symbol; }5455namespace J9 {5657class OMR_EXTENSIBLE Symbol : public OMR::SymbolConnector58{5960public:61TR_ALLOC(TR_Memory::Symbol)6263protected:6465Symbol() :66OMR::SymbolConnector() { }6768Symbol(TR::DataType d) :69OMR::SymbolConnector(d)70{71TR_ASSERT(!d.isBCD(),"BCD symbols must be created with a > 0 size\n");72}7374Symbol(TR::DataType d, uint32_t size) :75OMR::SymbolConnector(d, size)76{77TR_ASSERT(!d.isBCD() || size > 0,"BCD symbols must be created with a > 0 size\n");78}7980public:8182virtual ~Symbol() {}8384inline TR::Symbol * getRecognizedShadowSymbol();8586void setDataType(TR::DataType dt);8788static uint32_t convertTypeToSize(TR::DataType dt);899091enum RecognizedField92{93UnknownField,94Com_ibm_gpu_Kernel_blockIdxX,95Com_ibm_gpu_Kernel_blockIdxY,96Com_ibm_gpu_Kernel_blockIdxZ,97Com_ibm_gpu_Kernel_blockDimX,98Com_ibm_gpu_Kernel_blockDimY,99Com_ibm_gpu_Kernel_blockDimZ,100Com_ibm_gpu_Kernel_threadIdxX,101Com_ibm_gpu_Kernel_threadIdxY,102Com_ibm_gpu_Kernel_threadIdxZ,103Com_ibm_gpu_Kernel_syncThreads,104Com_ibm_jit_JITHelpers_IS_32_BIT,105Com_ibm_jit_JITHelpers_J9OBJECT_J9CLASS_OFFSET,106Com_ibm_jit_JITHelpers_OBJECT_HEADER_HAS_BEEN_MOVED_IN_CLASS,107Com_ibm_jit_JITHelpers_OBJECT_HEADER_HAS_BEEN_HASHED_IN_CLASS,108Com_ibm_jit_JITHelpers_J9OBJECT_FLAGS_MASK32,109Com_ibm_jit_JITHelpers_J9OBJECT_FLAGS_MASK64,110Com_ibm_jit_JITHelpers_JLTHREAD_J9THREAD_OFFSET,111Com_ibm_jit_JITHelpers_J9THREAD_J9VM_OFFSET,112Com_ibm_jit_JITHelpers_J9_GC_OBJECT_ALIGNMENT_SHIFT,113Com_ibm_jit_JITHelpers_J9ROMARRAYCLASS_ARRAYSHAPE_OFFSET,114Com_ibm_jit_JITHelpers_J9CLASS_BACKFILL_OFFSET_OFFSET,115Com_ibm_jit_JITHelpers_ARRAYSHAPE_ELEMENTCOUNT_MASK,116Com_ibm_jit_JITHelpers_J9CONTIGUOUSARRAY_HEADER_SIZE,117Com_ibm_jit_JITHelpers_J9DISCONTIGUOUSARRAY_HEADER_SIZE,118Com_ibm_jit_JITHelpers_J9OBJECT_CONTIGUOUS_LENGTH_OFFSET,119Com_ibm_jit_JITHelpers_J9OBJECT_DISCONTIGUOUS_LENGTH_OFFSET,120Com_ibm_jit_JITHelpers_JLOBJECT_ARRAY_BASE_OFFSET,121Com_ibm_jit_JITHelpers_J9CLASS_J9ROMCLASS_OFFSET,122Com_ibm_jit_JITHelpers_J9JAVAVM_IDENTITY_HASH_DATA_OFFSET,123Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_DATA1_OFFSET,124Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_DATA2_OFFSET,125Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_DATA3_OFFSET,126Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_SALT_TABLE_OFFSET,127Com_ibm_jit_JITHelpers_J9_IDENTITY_HASH_SALT_POLICY_STANDARD,128Com_ibm_jit_JITHelpers_J9_IDENTITY_HASH_SALT_POLICY_REGION,129Com_ibm_jit_JITHelpers_J9_IDENTITY_HASH_SALT_POLICY_NONE,130Com_ibm_jit_JITHelpers_IDENTITY_HASH_SALT_POLICY,131Com_ibm_oti_vm_VM_J9CLASS_CLASS_FLAGS_OFFSET,132Com_ibm_oti_vm_VM_J9CLASS_INITIALIZE_STATUS_OFFSET,133Com_ibm_oti_vm_VM_J9_JAVA_CLASS_RAM_SHAPE_SHIFT,134Com_ibm_oti_vm_VM_OBJECT_HEADER_SHAPE_MASK,135Com_ibm_oti_vm_VM_ADDRESS_SIZE,136Java_io_ByteArrayOutputStream_count,137Java_lang_J9VMInternals_jitHelpers,138Java_lang_ref_SoftReference_age,139Java_lang_String_count,140Java_lang_String_enableCompression,141Java_lang_String_hashCode,142Java_lang_String_value,143Java_lang_StringBuffer_count,144Java_lang_StringBuffer_value,145Java_lang_StringBuilder_count,146Java_lang_StringBuilder_value,147Java_lang_Throwable_stackTrace,148Java_lang_invoke_BruteArgumentMoverHandle_extra,149Java_lang_invoke_DynamicInvokerHandle_site,150Java_lang_invoke_CallSite_target,151Java_lang_invoke_LambdaForm_vmentry,152Java_lang_invoke_MutableCallSite_target,153Java_lang_invoke_MutableCallSiteDynamicInvokerHandle_mutableSite,154Java_lang_invoke_MemberName_vmtarget,155Java_lang_invoke_MemberName_vmindex,156Java_lang_invoke_MethodHandle_form,157Java_lang_invoke_MethodHandle_thunks,158Java_lang_invoke_MethodHandle_type,159Java_lang_invoke_MethodType_ptypes,160Java_lang_invoke_PrimitiveHandle_rawModifiers,161Java_lang_invoke_PrimitiveHandle_defc,162Java_lang_invoke_ThunkTuple_invokeExactThunk,163Java_util_Hashtable_elementCount,164Java_math_BigInteger_ZERO,165Java_math_BigInteger_useLongRepresentation,166Java_lang_invoke_VarHandle_handleTable,167Java_lang_invoke_MethodHandleImpl_LoopClauses_clauses,168Java_lang_Integer_value,169Java_lang_Long_value,170Java_lang_Float_value,171Java_lang_Double_value,172Java_lang_Byte_value,173Java_lang_Character_value,174Java_lang_Short_value,175Java_lang_Boolean_value,176Java_lang_Class_enumVars,177Java_lang_ClassEnumVars_cachedEnumConstants,178assertionsDisabled,179NumRecognizedFields180};181182static RecognizedField searchRecognizedField(TR::Compilation *, TR_ResolvedMethod * owningMethodSymbol, int32_t cpIndex, bool isStatic);183RecognizedField getRecognizedField();184const char *owningClassNameCharsForRecognizedField(int32_t & length);185186/**187* TR_RecognizedShadowSymbol188*189* @{190*/191public:192193template <typename AllocatorType>194static TR::Symbol * createRecognizedShadow(AllocatorType m, TR::DataType d, RecognizedField f);195196template <typename AllocatorType>197static TR::Symbol * createRecognizedShadow(AllocatorType m, TR::DataType d, uint32_t s, RecognizedField f);198199private:200201/// This recognized field is currently only used for RecognizedShadows.202RecognizedField _recognizedField;203/** @} */204205public:206207// These two methods are primarily for direct analysis of bytecode. If208// generating trees, use SymbolReferenceTable instead.209210template <typename AllocatorType>211static TR::Symbol * createPossiblyRecognizedShadowWithFlags(212AllocatorType m,213TR::DataType type,214bool isVolatile,215bool isFinal,216bool isPrivate,217RecognizedField recognizedField);218219template <typename AllocatorType>220static TR::Symbol * createPossiblyRecognizedShadowFromCP(221TR::Compilation *comp,222AllocatorType m,223TR_ResolvedMethod *owningMethod,224int32_t cpIndex,225TR::DataType *type,226uint32_t *offset,227bool needsAOTValidation);228229};230}231232#endif233234235