Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/runtime/compiler/il/J9Symbol.hpp
6000 views
1
/*******************************************************************************
2
* Copyright (c) 2000, 2021 IBM Corp. and others
3
*
4
* This program and the accompanying materials are made available under
5
* the terms of the Eclipse Public License 2.0 which accompanies this
6
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
7
* or the Apache License, Version 2.0 which accompanies this distribution and
8
* is available at https://www.apache.org/licenses/LICENSE-2.0.
9
*
10
* This Source Code may also be made available under the following
11
* Secondary Licenses when the conditions for such availability set
12
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
13
* General Public License, version 2 with the GNU Classpath
14
* Exception [1] and GNU General Public License, version 2 with the
15
* OpenJDK Assembly Exception [2].
16
*
17
* [1] https://www.gnu.org/software/classpath/license.html
18
* [2] http://openjdk.java.net/legal/assembly-exception.html
19
*
20
* 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-exception
21
*******************************************************************************/
22
23
#ifndef J9_SYMBOL_INCL
24
#define J9_SYMBOL_INCL
25
26
/*
27
* The following #define and typedef must appear before any #includes in this file
28
*/
29
#ifndef J9_SYMBOL_CONNECTOR
30
#define J9_SYMBOL_CONNECTOR
31
namespace J9 { class Symbol; }
32
namespace J9 { typedef J9::Symbol SymbolConnector; }
33
#endif
34
35
#include "il/OMRSymbol.hpp"
36
37
#include <stddef.h>
38
#include <stdint.h>
39
#include "env/TRMemory.hpp"
40
#include "il/DataTypes.hpp"
41
#include "infra/Assert.hpp"
42
#include "infra/Flags.hpp"
43
44
class TR_FrontEnd;
45
class TR_ResolvedMethod;
46
namespace TR { class AutomaticSymbol; }
47
namespace TR { class Compilation; }
48
namespace TR { class LabelSymbol; }
49
namespace TR { class MethodSymbol; }
50
namespace TR { class ParameterSymbol; }
51
namespace TR { class RegisterMappedSymbol; }
52
namespace TR { class ResolvedMethodSymbol; }
53
namespace TR { class StaticSymbol; }
54
namespace TR { class Symbol; }
55
56
namespace J9 {
57
58
class OMR_EXTENSIBLE Symbol : public OMR::SymbolConnector
59
{
60
61
public:
62
TR_ALLOC(TR_Memory::Symbol)
63
64
protected:
65
66
Symbol() :
67
OMR::SymbolConnector() { }
68
69
Symbol(TR::DataType d) :
70
OMR::SymbolConnector(d)
71
{
72
TR_ASSERT(!d.isBCD(),"BCD symbols must be created with a > 0 size\n");
73
}
74
75
Symbol(TR::DataType d, uint32_t size) :
76
OMR::SymbolConnector(d, size)
77
{
78
TR_ASSERT(!d.isBCD() || size > 0,"BCD symbols must be created with a > 0 size\n");
79
}
80
81
public:
82
83
virtual ~Symbol() {}
84
85
inline TR::Symbol * getRecognizedShadowSymbol();
86
87
void setDataType(TR::DataType dt);
88
89
static uint32_t convertTypeToSize(TR::DataType dt);
90
91
92
enum RecognizedField
93
{
94
UnknownField,
95
Com_ibm_gpu_Kernel_blockIdxX,
96
Com_ibm_gpu_Kernel_blockIdxY,
97
Com_ibm_gpu_Kernel_blockIdxZ,
98
Com_ibm_gpu_Kernel_blockDimX,
99
Com_ibm_gpu_Kernel_blockDimY,
100
Com_ibm_gpu_Kernel_blockDimZ,
101
Com_ibm_gpu_Kernel_threadIdxX,
102
Com_ibm_gpu_Kernel_threadIdxY,
103
Com_ibm_gpu_Kernel_threadIdxZ,
104
Com_ibm_gpu_Kernel_syncThreads,
105
Com_ibm_jit_JITHelpers_IS_32_BIT,
106
Com_ibm_jit_JITHelpers_J9OBJECT_J9CLASS_OFFSET,
107
Com_ibm_jit_JITHelpers_OBJECT_HEADER_HAS_BEEN_MOVED_IN_CLASS,
108
Com_ibm_jit_JITHelpers_OBJECT_HEADER_HAS_BEEN_HASHED_IN_CLASS,
109
Com_ibm_jit_JITHelpers_J9OBJECT_FLAGS_MASK32,
110
Com_ibm_jit_JITHelpers_J9OBJECT_FLAGS_MASK64,
111
Com_ibm_jit_JITHelpers_JLTHREAD_J9THREAD_OFFSET,
112
Com_ibm_jit_JITHelpers_J9THREAD_J9VM_OFFSET,
113
Com_ibm_jit_JITHelpers_J9_GC_OBJECT_ALIGNMENT_SHIFT,
114
Com_ibm_jit_JITHelpers_J9ROMARRAYCLASS_ARRAYSHAPE_OFFSET,
115
Com_ibm_jit_JITHelpers_J9CLASS_BACKFILL_OFFSET_OFFSET,
116
Com_ibm_jit_JITHelpers_ARRAYSHAPE_ELEMENTCOUNT_MASK,
117
Com_ibm_jit_JITHelpers_J9CONTIGUOUSARRAY_HEADER_SIZE,
118
Com_ibm_jit_JITHelpers_J9DISCONTIGUOUSARRAY_HEADER_SIZE,
119
Com_ibm_jit_JITHelpers_J9OBJECT_CONTIGUOUS_LENGTH_OFFSET,
120
Com_ibm_jit_JITHelpers_J9OBJECT_DISCONTIGUOUS_LENGTH_OFFSET,
121
Com_ibm_jit_JITHelpers_JLOBJECT_ARRAY_BASE_OFFSET,
122
Com_ibm_jit_JITHelpers_J9CLASS_J9ROMCLASS_OFFSET,
123
Com_ibm_jit_JITHelpers_J9JAVAVM_IDENTITY_HASH_DATA_OFFSET,
124
Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_DATA1_OFFSET,
125
Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_DATA2_OFFSET,
126
Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_DATA3_OFFSET,
127
Com_ibm_jit_JITHelpers_J9IDENTITYHASHDATA_HASH_SALT_TABLE_OFFSET,
128
Com_ibm_jit_JITHelpers_J9_IDENTITY_HASH_SALT_POLICY_STANDARD,
129
Com_ibm_jit_JITHelpers_J9_IDENTITY_HASH_SALT_POLICY_REGION,
130
Com_ibm_jit_JITHelpers_J9_IDENTITY_HASH_SALT_POLICY_NONE,
131
Com_ibm_jit_JITHelpers_IDENTITY_HASH_SALT_POLICY,
132
Com_ibm_oti_vm_VM_J9CLASS_CLASS_FLAGS_OFFSET,
133
Com_ibm_oti_vm_VM_J9CLASS_INITIALIZE_STATUS_OFFSET,
134
Com_ibm_oti_vm_VM_J9_JAVA_CLASS_RAM_SHAPE_SHIFT,
135
Com_ibm_oti_vm_VM_OBJECT_HEADER_SHAPE_MASK,
136
Com_ibm_oti_vm_VM_ADDRESS_SIZE,
137
Java_io_ByteArrayOutputStream_count,
138
Java_lang_J9VMInternals_jitHelpers,
139
Java_lang_ref_SoftReference_age,
140
Java_lang_String_count,
141
Java_lang_String_enableCompression,
142
Java_lang_String_hashCode,
143
Java_lang_String_value,
144
Java_lang_StringBuffer_count,
145
Java_lang_StringBuffer_value,
146
Java_lang_StringBuilder_count,
147
Java_lang_StringBuilder_value,
148
Java_lang_Throwable_stackTrace,
149
Java_lang_invoke_BruteArgumentMoverHandle_extra,
150
Java_lang_invoke_DynamicInvokerHandle_site,
151
Java_lang_invoke_CallSite_target,
152
Java_lang_invoke_LambdaForm_vmentry,
153
Java_lang_invoke_MutableCallSite_target,
154
Java_lang_invoke_MutableCallSiteDynamicInvokerHandle_mutableSite,
155
Java_lang_invoke_MemberName_vmtarget,
156
Java_lang_invoke_MemberName_vmindex,
157
Java_lang_invoke_MethodHandle_form,
158
Java_lang_invoke_MethodHandle_thunks,
159
Java_lang_invoke_MethodHandle_type,
160
Java_lang_invoke_MethodType_ptypes,
161
Java_lang_invoke_PrimitiveHandle_rawModifiers,
162
Java_lang_invoke_PrimitiveHandle_defc,
163
Java_lang_invoke_ThunkTuple_invokeExactThunk,
164
Java_util_Hashtable_elementCount,
165
Java_math_BigInteger_ZERO,
166
Java_math_BigInteger_useLongRepresentation,
167
Java_lang_invoke_VarHandle_handleTable,
168
Java_lang_invoke_MethodHandleImpl_LoopClauses_clauses,
169
Java_lang_Integer_value,
170
Java_lang_Long_value,
171
Java_lang_Float_value,
172
Java_lang_Double_value,
173
Java_lang_Byte_value,
174
Java_lang_Character_value,
175
Java_lang_Short_value,
176
Java_lang_Boolean_value,
177
Java_lang_Class_enumVars,
178
Java_lang_ClassEnumVars_cachedEnumConstants,
179
assertionsDisabled,
180
NumRecognizedFields
181
};
182
183
static RecognizedField searchRecognizedField(TR::Compilation *, TR_ResolvedMethod * owningMethodSymbol, int32_t cpIndex, bool isStatic);
184
RecognizedField getRecognizedField();
185
const char *owningClassNameCharsForRecognizedField(int32_t & length);
186
187
/**
188
* TR_RecognizedShadowSymbol
189
*
190
* @{
191
*/
192
public:
193
194
template <typename AllocatorType>
195
static TR::Symbol * createRecognizedShadow(AllocatorType m, TR::DataType d, RecognizedField f);
196
197
template <typename AllocatorType>
198
static TR::Symbol * createRecognizedShadow(AllocatorType m, TR::DataType d, uint32_t s, RecognizedField f);
199
200
private:
201
202
/// This recognized field is currently only used for RecognizedShadows.
203
RecognizedField _recognizedField;
204
/** @} */
205
206
public:
207
208
// These two methods are primarily for direct analysis of bytecode. If
209
// generating trees, use SymbolReferenceTable instead.
210
211
template <typename AllocatorType>
212
static TR::Symbol * createPossiblyRecognizedShadowWithFlags(
213
AllocatorType m,
214
TR::DataType type,
215
bool isVolatile,
216
bool isFinal,
217
bool isPrivate,
218
RecognizedField recognizedField);
219
220
template <typename AllocatorType>
221
static TR::Symbol * createPossiblyRecognizedShadowFromCP(
222
TR::Compilation *comp,
223
AllocatorType m,
224
TR_ResolvedMethod *owningMethod,
225
int32_t cpIndex,
226
TR::DataType *type,
227
uint32_t *offset,
228
bool needsAOTValidation);
229
230
};
231
}
232
233
#endif
234
235