001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.runtime;
014
015 import static org.jikesrvm.runtime.EntrypointHelper.getField;
016 import static org.jikesrvm.runtime.EntrypointHelper.getMethod;
017
018 import org.jikesrvm.VM;
019 import org.jikesrvm.classloader.RVMField;
020 import org.jikesrvm.classloader.RVMMethod;
021 import org.jikesrvm.classloader.NormalMethod;
022
023 /**
024 * Fields and methods of the virtual machine that are needed by
025 * compiler-generated machine code or C runtime code.
026 */
027 public class Entrypoints {
028 // The usual causes for getField/Method() to fail are:
029 // 1. you mispelled the class name, member name, or member signature
030 // 2. the class containing the specified member didn't get compiled
031 //
032
033 public static final NormalMethod bootMethod = EntrypointHelper.getMethod(org.jikesrvm.VM.class, "boot", "()V");
034
035 public static final RVMMethod java_lang_reflect_Method_invokeMethod =
036 getMethod(java.lang.reflect.Method.class, "invoke",
037 "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;");
038 public static final RVMMethod getClassFromStackFrame =
039 getMethod(org.jikesrvm.classloader.RVMClass.class, "getClassFromStackFrame", "(I)Lorg/jikesrvm/classloader/RVMClass;");
040 public static final RVMMethod getClassLoaderFromStackFrame =
041 getMethod(org.jikesrvm.classloader.RVMClass.class, "getClassLoaderFromStackFrame", "(I)Ljava/lang/ClassLoader;");
042
043 public static final RVMField magicObjectRemapperField =
044 getField(org.jikesrvm.runtime.Magic.class,
045 "objectAddressRemapper",
046 org.jikesrvm.runtime.ObjectAddressRemapper.class);
047
048 public static final NormalMethod instanceOfMethod =
049 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "instanceOf", "(Ljava/lang/Object;I)Z");
050 public static final NormalMethod checkcastMethod =
051 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "checkcast", "(Ljava/lang/Object;I)V");
052 public static final NormalMethod checkstoreMethod =
053 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "checkstore", "(Ljava/lang/Object;Ljava/lang/Object;)V");
054 public static final NormalMethod aastoreMethod =
055 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "aastore", "([Ljava/lang/Object;ILjava/lang/Object;)V");
056 public static final NormalMethod aastoreUninterruptibleMethod =
057 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "aastoreUninterruptible", "([Ljava/lang/Object;ILjava/lang/Object;)V");
058 public static final NormalMethod athrowMethod =
059 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "athrow", "(Ljava/lang/Throwable;)V");
060
061 // Allocation-related entry points
062 //
063 public static final NormalMethod resolvedNewScalarMethod =
064 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class,
065 "resolvedNewScalar",
066 "(ILorg/jikesrvm/objectmodel/TIB;ZIIII)Ljava/lang/Object;");
067 public static final NormalMethod unresolvedNewScalarMethod =
068 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "unresolvedNewScalar", "(II)Ljava/lang/Object;");
069 public static final NormalMethod unresolvedNewArrayMethod =
070 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "unresolvedNewArray", "(III)Ljava/lang/Object;");
071 public static final NormalMethod resolvedNewArrayMethod =
072 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class,
073 "resolvedNewArray",
074 "(IIILorg/jikesrvm/objectmodel/TIB;IIII)Ljava/lang/Object;");
075
076 public static final RVMField sysWriteLockField = getField(org.jikesrvm.VM.class, "sysWriteLock", int.class);
077 public static final RVMField intBufferLockField =
078 getField(org.jikesrvm.Services.class, "intBufferLock", int.class);
079 public static final RVMField dumpBufferLockField =
080 getField(org.jikesrvm.Services.class, "dumpBufferLock", int.class);
081
082 public static final NormalMethod unexpectedAbstractMethodCallMethod =
083 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "unexpectedAbstractMethodCall", "()V");
084 public static final NormalMethod raiseNullPointerException =
085 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "raiseNullPointerException", "()V");
086 public static final NormalMethod raiseArrayBoundsException =
087 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "raiseArrayIndexOutOfBoundsException", "(I)V");
088 public static final NormalMethod raiseArithmeticException =
089 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "raiseArithmeticException", "()V");
090 public static final NormalMethod raiseAbstractMethodError =
091 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "raiseAbstractMethodError", "()V");
092 public static final NormalMethod raiseIllegalAccessError =
093 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "raiseIllegalAccessError", "()V");
094 public static final NormalMethod deliverHardwareExceptionMethod =
095 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "deliverHardwareException", "(II)V");
096 public static final NormalMethod unlockAndThrowMethod =
097 getMethod(org.jikesrvm.runtime.RuntimeEntrypoints.class, "unlockAndThrow", "(Ljava/lang/Object;Ljava/lang/Throwable;)V");
098
099 public static final RVMField gcLockField = getField("Ljava/lang/VMCommonLibrarySupport$GCLock;", "gcLock", int.class);
100
101 public static final NormalMethod invokeInterfaceMethod =
102 getMethod(org.jikesrvm.classloader.InterfaceInvocation.class,
103 "invokeInterface",
104 "(Ljava/lang/Object;I)Lorg/jikesrvm/ArchitectureSpecific$CodeArray;");
105 public static final NormalMethod findItableMethod =
106 getMethod(org.jikesrvm.classloader.InterfaceInvocation.class,
107 "findITable",
108 "(Lorg/jikesrvm/objectmodel/TIB;I)Lorg/jikesrvm/objectmodel/ITable;");
109 public static final NormalMethod unresolvedInvokeinterfaceImplementsTestMethod =
110 getMethod(org.jikesrvm.classloader.InterfaceInvocation.class,
111 "unresolvedInvokeinterfaceImplementsTest",
112 "(ILjava/lang/Object;)V");
113
114 public static final NormalMethod lockMethod =
115 getMethod(org.jikesrvm.objectmodel.ObjectModel.class, "genericLock", "(Ljava/lang/Object;)V");
116 public static final NormalMethod unlockMethod =
117 getMethod(org.jikesrvm.objectmodel.ObjectModel.class, "genericUnlock", "(Ljava/lang/Object;)V");
118
119 public static final NormalMethod inlineLockMethod =
120 getMethod(org.jikesrvm.scheduler.ThinLock.class,
121 "inlineLock",
122 "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V");
123 public static final NormalMethod inlineUnlockMethod =
124 getMethod(org.jikesrvm.scheduler.ThinLock.class,
125 "inlineUnlock",
126 "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V");
127
128 public static final NormalMethod lazyMethodInvokerMethod =
129 getMethod(org.jikesrvm.runtime.DynamicLinker.class, "lazyMethodInvoker", "()V");
130 public static final NormalMethod unimplementedNativeMethodMethod =
131 getMethod(org.jikesrvm.runtime.DynamicLinker.class, "unimplementedNativeMethod", "()V");
132 public static final NormalMethod sysCallMethod =
133 getMethod(org.jikesrvm.runtime.DynamicLinker.class, "sysCallMethod", "()V");
134
135 public static final NormalMethod resolveMemberMethod =
136 getMethod(org.jikesrvm.classloader.TableBasedDynamicLinker.class, "resolveMember", "(I)I");
137 public static final RVMField memberOffsetsField =
138 getField(org.jikesrvm.classloader.TableBasedDynamicLinker.class, "memberOffsets", int[].class);
139
140 /** 1L */
141 public static final RVMField longOneField = getField(org.jikesrvm.runtime.MathConstants.class, "longOne", long.class);
142 /** -1.0F */
143 public static final RVMField minusOneField = getField(org.jikesrvm.runtime.MathConstants.class, "minusOne", float.class);
144 /** 0.0F */
145 public static final RVMField zeroFloatField = getField(org.jikesrvm.runtime.MathConstants.class, "zero", float.class);
146 /**0.5F */
147 public static final RVMField halfFloatField = getField(org.jikesrvm.runtime.MathConstants.class, "half", float.class);
148 /** 1.0F */
149 public static final RVMField oneFloatField = getField(org.jikesrvm.runtime.MathConstants.class, "one", float.class);
150 /** 2.0F */
151 public static final RVMField twoFloatField = getField(org.jikesrvm.runtime.MathConstants.class, "two", float.class);
152 /** 2.0F^32 */
153 public static final RVMField two32Field = getField(org.jikesrvm.runtime.MathConstants.class, "two32", float.class);
154 /** 0.5F^32 */
155 public static final RVMField half32Field = getField(org.jikesrvm.runtime.MathConstants.class, "half32", float.class);
156 /** 1e-9 */
157 public static final RVMField billionthField = getField(org.jikesrvm.runtime.MathConstants.class, "billionth", double.class);
158 /** 0.0 */
159 public static final RVMField zeroDoubleField = getField(org.jikesrvm.runtime.MathConstants.class, "zeroD", double.class);
160 /** 1.0 */
161 public static final RVMField oneDoubleField = getField(org.jikesrvm.runtime.MathConstants.class, "oneD", double.class);
162 /** largest double that can be rounded to an int */
163 public static final RVMField maxintField =
164 getField(org.jikesrvm.runtime.MathConstants.class, "maxint", double.class);
165 /** largest double that can be rounded to a long */
166 public static final RVMField maxlongField =
167 getField(org.jikesrvm.runtime.MathConstants.class, "maxlong", double.class);
168 /** smallest double that can be rounded to an int */
169 public static final RVMField minintField =
170 getField(org.jikesrvm.runtime.MathConstants.class, "minint", double.class);
171 /** largest float that can be rounded to an int */
172 public static final RVMField maxintFloatField =
173 getField(org.jikesrvm.runtime.MathConstants.class, "maxintF", float.class);
174 /** largest float that can be rounded to a long */
175 public static final RVMField maxlongFloatField =
176 getField(org.jikesrvm.runtime.MathConstants.class, "maxlongF", float.class);
177 /** IEEEmagic constant */
178 public static final RVMField IEEEmagicField =
179 getField(org.jikesrvm.runtime.MathConstants.class, "IEEEmagic", double.class);
180 /** special double value for use in int <--> double conversions */
181 public static final RVMField I2DconstantField =
182 getField(org.jikesrvm.runtime.MathConstants.class,
183 "I2Dconstant",
184 double.class);
185
186 public static final RVMField bootThreadField =
187 getField(org.jikesrvm.scheduler.RVMThread.class, "bootThread",
188 org.jikesrvm.scheduler.RVMThread.class);
189
190 public static final RVMField scratchStorageField =
191 getField(org.jikesrvm.scheduler.RVMThread.class, "scratchStorage", double.class);
192 public static final RVMField takeYieldpointField =
193 getField(org.jikesrvm.scheduler.RVMThread.class, "takeYieldpoint", int.class);
194
195 public static final RVMField execStatusField = getField(org.jikesrvm.scheduler.RVMThread.class, "execStatus", int.class);
196
197 public static final RVMField referenceReferentField =
198 getField(java.lang.ref.Reference.class, "_referent", org.vmmagic.unboxed.Address.class);
199
200 /** Used in deciding which stack frames we can elide when printing. */
201 public static final NormalMethod mainThreadRunMethod =
202 getMethod(org.jikesrvm.scheduler.MainThread.class, "run", "()V");
203
204 public static final NormalMethod yieldpointFromPrologueMethod =
205 getMethod(org.jikesrvm.scheduler.RVMThread.class, "yieldpointFromPrologue", "()V");
206 public static final NormalMethod yieldpointFromBackedgeMethod =
207 getMethod(org.jikesrvm.scheduler.RVMThread.class, "yieldpointFromBackedge", "()V");
208 public static final NormalMethod yieldpointFromEpilogueMethod =
209 getMethod(org.jikesrvm.scheduler.RVMThread.class, "yieldpointFromEpilogue", "()V");
210 public static final NormalMethod enterJNIBlockedFromJNIFunctionCallMethod =
211 getMethod(org.jikesrvm.scheduler.RVMThread.class, "enterJNIBlockedFromJNIFunctionCall", "()V");
212 public static final NormalMethod enterJNIBlockedFromCallIntoNativeMethod =
213 getMethod(org.jikesrvm.scheduler.RVMThread.class, "enterJNIBlockedFromCallIntoNative", "()V");
214 public static final NormalMethod leaveJNIBlockedFromJNIFunctionCallMethod =
215 getMethod(org.jikesrvm.scheduler.RVMThread.class, "leaveJNIBlockedFromJNIFunctionCall", "()V");
216 public static final NormalMethod leaveJNIBlockedFromCallIntoNativeMethod =
217 getMethod(org.jikesrvm.scheduler.RVMThread.class, "leaveJNIBlockedFromCallIntoNative", "()V");
218
219 public static final NormalMethod threadRunMethod = getMethod(org.jikesrvm.scheduler.RVMThread.class, "run", "()V");
220 public static final NormalMethod threadStartoffMethod =
221 getMethod(org.jikesrvm.scheduler.RVMThread.class, "startoff", "()V");
222 public static final RVMField threadStackField = getField(org.jikesrvm.scheduler.RVMThread.class, "stack", byte[].class);
223 public static final RVMField stackLimitField =
224 getField(org.jikesrvm.scheduler.RVMThread.class, "stackLimit", org.vmmagic.unboxed.Address.class);
225
226 public static final RVMField threadSlotField = getField(org.jikesrvm.scheduler.RVMThread.class, "threadSlot", int.class);
227 public static final RVMField jniEnvField =
228 getField(org.jikesrvm.scheduler.RVMThread.class, "jniEnv", org.jikesrvm.jni.JNIEnvironment.class);
229 public static final RVMField threadContextRegistersField =
230 getField(org.jikesrvm.scheduler.RVMThread.class,
231 "contextRegisters",
232 org.jikesrvm.ArchitectureSpecific.Registers.class);
233 public static final RVMField threadContextRegistersSaveField =
234 getField(org.jikesrvm.scheduler.RVMThread.class,
235 "contextRegistersSave",
236 org.jikesrvm.ArchitectureSpecific.Registers.class);
237 public static final RVMField threadExceptionRegistersField =
238 getField(org.jikesrvm.scheduler.RVMThread.class,
239 "exceptionRegisters",
240 org.jikesrvm.ArchitectureSpecific.Registers.class);
241
242 public static final RVMField tracePrevAddressField =
243 getField(org.jikesrvm.objectmodel.MiscHeader.class, "prevAddress", org.vmmagic.unboxed.Word.class);
244 public static final RVMField traceOIDField =
245 getField(org.jikesrvm.objectmodel.MiscHeader.class, "oid", org.vmmagic.unboxed.Word.class);
246 /*
247 public static final RVMField dispenserField = getField(org.jikesrvm.mm.mmtk.Lock.class, "dispenser", int.class);
248 public static final RVMField servingField = getField(org.jikesrvm.mm.mmtk.Lock.class, "serving", int.class);
249 public static final RVMField lockThreadField =
250 getField(org.jikesrvm.mm.mmtk.Lock.class, "thread", org.jikesrvm.scheduler.RVMThread.class);
251 */
252 public static final RVMField lockStateField = getField(org.jikesrvm.mm.mmtk.Lock.class, "state", int.class);
253 public static final RVMField gcStatusField = getField(org.mmtk.plan.Plan.class, "gcStatus", int.class);
254 public static final RVMField SQCFField = getField(org.mmtk.utility.deque.SharedDeque.class, "completionFlag", int.class);
255 public static final RVMField SQNCField = getField(org.mmtk.utility.deque.SharedDeque.class, "numConsumers", int.class);
256 public static final RVMField SQNCWField =
257 getField(org.mmtk.utility.deque.SharedDeque.class, "numConsumersWaiting", int.class);
258 public static final RVMField SQheadField =
259 getField(org.mmtk.utility.deque.SharedDeque.class, "head", org.vmmagic.unboxed.Address.class);
260 public static final RVMField SQtailField =
261 getField(org.mmtk.utility.deque.SharedDeque.class, "tail", org.vmmagic.unboxed.Address.class);
262 public static final RVMField SQBEField = getField(org.mmtk.utility.deque.SharedDeque.class, "bufsenqueued", int.class);
263 public static final RVMField synchronizedCounterField =
264 getField(org.jikesrvm.mm.mmtk.SynchronizedCounter.class, "count", int.class);
265
266 public static final NormalMethod booleanFieldWriteBarrierMethod =
267 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "booleanFieldWrite", "(Ljava/lang/Object;ZLorg/vmmagic/unboxed/Offset;I)V");
268 public static final NormalMethod booleanArrayWriteBarrierMethod =
269 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "booleanArrayWrite", "([ZIZ)V");
270 public static final NormalMethod booleanFieldReadBarrierMethod =
271 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "booleanFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Z");
272 public static final NormalMethod booleanArrayReadBarrierMethod =
273 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "booleanArrayRead", "([ZI)Z");
274
275 public static final NormalMethod byteFieldWriteBarrierMethod =
276 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "byteFieldWrite", "(Ljava/lang/Object;BLorg/vmmagic/unboxed/Offset;I)V");
277 public static final NormalMethod byteArrayWriteBarrierMethod =
278 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "byteArrayWrite", "([BIB)V");
279 public static final NormalMethod byteFieldReadBarrierMethod =
280 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "byteFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)B");
281 public static final NormalMethod byteArrayReadBarrierMethod =
282 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "byteArrayRead", "([BI)B");
283
284 public static final NormalMethod charFieldWriteBarrierMethod =
285 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "charFieldWrite", "(Ljava/lang/Object;CLorg/vmmagic/unboxed/Offset;I)V");
286 public static final NormalMethod charArrayWriteBarrierMethod =
287 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "charArrayWrite", "([CIC)V");
288 public static final NormalMethod charFieldReadBarrierMethod =
289 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "charFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)C");
290 public static final NormalMethod charArrayReadBarrierMethod =
291 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "charArrayRead", "([CI)C");
292
293 public static final NormalMethod shortFieldWriteBarrierMethod =
294 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "shortFieldWrite", "(Ljava/lang/Object;SLorg/vmmagic/unboxed/Offset;I)V");
295 public static final NormalMethod shortArrayWriteBarrierMethod =
296 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "shortArrayWrite", "([SIS)V");
297 public static final NormalMethod shortFieldReadBarrierMethod =
298 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "shortFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)S");
299 public static final NormalMethod shortArrayReadBarrierMethod =
300 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "shortArrayRead", "([SI)S");
301
302 public static final NormalMethod intFieldWriteBarrierMethod =
303 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "intFieldWrite", "(Ljava/lang/Object;ILorg/vmmagic/unboxed/Offset;I)V");
304 public static final NormalMethod intArrayWriteBarrierMethod =
305 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "intArrayWrite", "([III)V");
306 public static final NormalMethod intFieldReadBarrierMethod =
307 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "intFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)I");
308 public static final NormalMethod intArrayReadBarrierMethod =
309 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "intArrayRead", "([II)I");
310
311 public static final NormalMethod longFieldWriteBarrierMethod =
312 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "longFieldWrite", "(Ljava/lang/Object;JLorg/vmmagic/unboxed/Offset;I)V");
313 public static final NormalMethod longArrayWriteBarrierMethod =
314 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "longArrayWrite", "([JIJ)V");
315 public static final NormalMethod longFieldReadBarrierMethod =
316 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "longFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)J");
317 public static final NormalMethod longArrayReadBarrierMethod =
318 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "longArrayRead", "([JI)J");
319
320 public static final NormalMethod floatFieldWriteBarrierMethod =
321 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "floatFieldWrite", "(Ljava/lang/Object;FLorg/vmmagic/unboxed/Offset;I)V");
322 public static final NormalMethod floatArrayWriteBarrierMethod =
323 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "floatArrayWrite", "([FIF)V");
324 public static final NormalMethod floatFieldReadBarrierMethod =
325 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "floatFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)F");
326 public static final NormalMethod floatArrayReadBarrierMethod =
327 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "floatArrayRead", "([FI)F");
328
329 public static final NormalMethod doubleFieldWriteBarrierMethod =
330 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "doubleFieldWrite", "(Ljava/lang/Object;DLorg/vmmagic/unboxed/Offset;I)V");
331 public static final NormalMethod doubleArrayWriteBarrierMethod =
332 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "doubleArrayWrite", "([DID)V");
333 public static final NormalMethod doubleFieldReadBarrierMethod =
334 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "doubleFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)D");
335 public static final NormalMethod doubleArrayReadBarrierMethod =
336 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "doubleArrayRead", "([DI)D");
337
338 public static final NormalMethod objectFieldWriteBarrierMethod =
339 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "objectFieldWrite", "(Ljava/lang/Object;Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V");
340 public static final NormalMethod objectArrayWriteBarrierMethod =
341 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "objectArrayWrite", "([Ljava/lang/Object;ILjava/lang/Object;)V");
342 public static final NormalMethod objectFieldReadBarrierMethod =
343 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "objectFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;");
344 public static final NormalMethod objectArrayReadBarrierMethod =
345 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "objectArrayRead", "([Ljava/lang/Object;I)Ljava/lang/Object;");
346
347 public static final NormalMethod wordFieldWriteBarrierMethod =
348 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "wordFieldWrite", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Word;Lorg/vmmagic/unboxed/Offset;I)V");
349 public static final NormalMethod wordFieldReadBarrierMethod =
350 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "wordFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Lorg/vmmagic/unboxed/Word;");
351
352 public static final NormalMethod addressFieldWriteBarrierMethod =
353 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "addressFieldWrite", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Offset;I)V");
354 public static final NormalMethod addressFieldReadBarrierMethod =
355 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "addressFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Lorg/vmmagic/unboxed/Address;");
356
357 public static final NormalMethod offsetFieldWriteBarrierMethod =
358 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "offsetFieldWrite", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;Lorg/vmmagic/unboxed/Offset;I)V");
359 public static final NormalMethod offsetFieldReadBarrierMethod =
360 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "offsetFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Lorg/vmmagic/unboxed/Offset;");
361
362 public static final NormalMethod extentFieldWriteBarrierMethod =
363 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "extentFieldWrite", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Extent;Lorg/vmmagic/unboxed/Offset;I)V");
364 public static final NormalMethod extentFieldReadBarrierMethod =
365 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "extentFieldRead", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)Lorg/vmmagic/unboxed/Extent;");
366
367 public static final NormalMethod objectStaticWriteBarrierMethod =
368 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "objectStaticWrite", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;I)V");
369 public static final NormalMethod objectStaticReadBarrierMethod =
370 getMethod(org.jikesrvm.mm.mminterface.Barriers.class, "objectStaticRead", "(Lorg/vmmagic/unboxed/Offset;I)Ljava/lang/Object;");
371
372 public static final NormalMethod modifyCheckMethod =
373 getMethod(org.jikesrvm.mm.mminterface.MemoryManager.class, "modifyCheck", "(Ljava/lang/Object;)V");
374
375 // used in boot image writer
376 public static final RVMField debugRequestedField =
377 getField(org.jikesrvm.scheduler.RVMThread.class, "debugRequested", boolean.class);
378 public static final NormalMethod dumpStackAndDieMethod =
379 getMethod(org.jikesrvm.scheduler.RVMThread.class, "dumpStackAndDie", "(Lorg/vmmagic/unboxed/Address;)V");
380
381 public static final RVMField latestContenderField =
382 getField(org.jikesrvm.scheduler.SpinLock.class, "latestContender", org.jikesrvm.scheduler.RVMThread.class);
383
384 public static final RVMField depthField = getField(org.jikesrvm.classloader.RVMType.class, "depth", int.class);
385 public static final RVMField idField = getField(org.jikesrvm.classloader.RVMType.class, "id", int.class);
386 public static final RVMField dimensionField = getField(org.jikesrvm.classloader.RVMType.class, "dimension", int.class);
387
388 public static final RVMField innermostElementTypeDimensionField =
389 getField(org.jikesrvm.classloader.RVMArray.class, "innermostElementTypeDimension", int.class);
390
391 public static final RVMField JNIEnvSavedTRField =
392 getField(org.jikesrvm.jni.JNIEnvironment.class, "savedTRreg", org.jikesrvm.scheduler.RVMThread.class);
393 public static final RVMField JNIEnvBasePointerOnEntryToNative =
394 getField(org.jikesrvm.jni.JNIEnvironment.class, "basePointerOnEntryToNative", org.vmmagic.unboxed.Address.class);
395 public static final RVMField JNIGlobalRefsField =
396 getField(org.jikesrvm.jni.JNIGlobalRefTable.class, "JNIGlobalRefs", org.vmmagic.unboxed.AddressArray.class);
397 public static final RVMField JNIRefsField =
398 getField(org.jikesrvm.jni.JNIEnvironment.class, "JNIRefs", org.vmmagic.unboxed.AddressArray.class);
399 public static final RVMField JNIRefsTopField = getField(org.jikesrvm.jni.JNIEnvironment.class, "JNIRefsTop", int.class);
400 public static final RVMField JNIRefsMaxField = getField(org.jikesrvm.jni.JNIEnvironment.class, "JNIRefsMax", int.class);
401 public static final RVMField JNIRefsSavedFPField =
402 getField(org.jikesrvm.jni.JNIEnvironment.class, "JNIRefsSavedFP", int.class);
403 public static final RVMField JNITopJavaFPField =
404 getField(org.jikesrvm.jni.JNIEnvironment.class, "JNITopJavaFP", org.vmmagic.unboxed.Address.class);
405 public static final RVMField JNIPendingExceptionField =
406 getField(org.jikesrvm.jni.JNIEnvironment.class, "pendingException", java.lang.Throwable.class);
407 public static final RVMField JNIExternalFunctionsField =
408 getField(org.jikesrvm.jni.JNIEnvironment.class, "externalJNIFunctions", org.vmmagic.unboxed.Address.class);
409 public static final RVMField JNIEnvSavedJTOCField =
410 VM.BuildForPowerPC ? getField(org.jikesrvm.jni.JNIEnvironment.class,
411 "savedJTOC",
412 org.vmmagic.unboxed.Address.class) : null;
413 public static final RVMMethod jniEntry =
414 VM.BuildForIA32 ? getMethod(org.jikesrvm.jni.JNIEnvironment.class,
415 "entryToJNI",
416 "(I)V") : null;
417 public static final RVMMethod jniExit =
418 VM.BuildForIA32 ? getMethod(org.jikesrvm.jni.JNIEnvironment.class,
419 "exitFromJNI",
420 "(I)Ljava/lang/Object;") : null;
421
422 public static final RVMField the_boot_recordField =
423 getField(org.jikesrvm.runtime.BootRecord.class, "the_boot_record", org.jikesrvm.runtime.BootRecord.class);
424 public static final RVMField externalSignalFlagField =
425 getField(org.jikesrvm.runtime.BootRecord.class, "externalSignalFlag", int.class);
426 public static final RVMField sysLongDivideIPField =
427 getField(org.jikesrvm.runtime.BootRecord.class, "sysLongDivideIP", org.vmmagic.unboxed.Address.class);
428 public static final RVMField sysLongRemainderIPField =
429 getField(org.jikesrvm.runtime.BootRecord.class, "sysLongRemainderIP", org.vmmagic.unboxed.Address.class);
430 public static final RVMField sysLongToFloatIPField =
431 getField(org.jikesrvm.runtime.BootRecord.class, "sysLongToFloatIP", org.vmmagic.unboxed.Address.class);
432 public static final RVMField sysLongToDoubleIPField =
433 getField(org.jikesrvm.runtime.BootRecord.class, "sysLongToDoubleIP", org.vmmagic.unboxed.Address.class);
434 public static final RVMField sysFloatToIntIPField =
435 getField(org.jikesrvm.runtime.BootRecord.class, "sysFloatToIntIP", org.vmmagic.unboxed.Address.class);
436 public static final RVMField sysDoubleToIntIPField =
437 getField(org.jikesrvm.runtime.BootRecord.class, "sysDoubleToIntIP", org.vmmagic.unboxed.Address.class);
438 public static final RVMField sysFloatToLongIPField =
439 getField(org.jikesrvm.runtime.BootRecord.class, "sysFloatToLongIP", org.vmmagic.unboxed.Address.class);
440 public static final RVMField sysDoubleToLongIPField =
441 getField(org.jikesrvm.runtime.BootRecord.class, "sysDoubleToLongIP", org.vmmagic.unboxed.Address.class);
442 public static final RVMField sysDoubleRemainderIPField =
443 getField(org.jikesrvm.runtime.BootRecord.class, "sysDoubleRemainderIP", org.vmmagic.unboxed.Address.class);
444
445 public static final RVMField edgeCountersField =
446 getField(org.jikesrvm.compilers.baseline.EdgeCounts.class, "data", int[][].class);
447
448 //////////////////
449 // Entrypoints that are valid only when the opt compiler is included in the build
450 //////////////////
451 public static final RVMField specializedMethodsField;
452
453 public static final NormalMethod optThreadSwitchFromOsrOptMethod;
454 public static final NormalMethod optThreadSwitchFromPrologueMethod;
455 public static final NormalMethod optThreadSwitchFromBackedgeMethod;
456 public static final NormalMethod optThreadSwitchFromEpilogueMethod;
457 public static final NormalMethod yieldpointFromNativePrologueMethod;
458 public static final NormalMethod yieldpointFromNativeEpilogueMethod;
459 public static final NormalMethod optResolveMethod;
460 public static final NormalMethod optNewArrayArrayMethod;
461 public static final NormalMethod optNew2DArrayMethod;
462 public static final NormalMethod sysArrayCopy;
463
464 static {
465 if (VM.BuildForOptCompiler) {
466 specializedMethodsField =
467 getField(org.jikesrvm.compilers.opt.specialization.SpecializedMethodPool.class,
468 "specializedMethods",
469 org.jikesrvm.ArchitectureSpecific.CodeArray[].class);
470 optThreadSwitchFromOsrOptMethod =
471 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptSaveVolatile.class, "yieldpointFromOsrOpt", "()V");
472 optThreadSwitchFromPrologueMethod =
473 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptSaveVolatile.class, "yieldpointFromPrologue", "()V");
474 optThreadSwitchFromBackedgeMethod =
475 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptSaveVolatile.class, "yieldpointFromBackedge", "()V");
476 optThreadSwitchFromEpilogueMethod =
477 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptSaveVolatile.class, "yieldpointFromEpilogue", "()V");
478 yieldpointFromNativePrologueMethod =
479 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptSaveVolatile.class, "yieldpointFromNativePrologue", "()V");
480 yieldpointFromNativeEpilogueMethod =
481 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptSaveVolatile.class, "yieldpointFromNativeEpilogue", "()V");
482 optResolveMethod = getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptSaveVolatile.class, "resolve", "()V");
483
484 optNewArrayArrayMethod =
485 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptLinker.class, "newArrayArray", "(I[II)Ljava/lang/Object;");
486 optNew2DArrayMethod =
487 getMethod(org.jikesrvm.compilers.opt.runtimesupport.OptLinker.class, "new2DArray", "(IIII)Ljava/lang/Object;");
488 sysArrayCopy = getMethod("Ljava/lang/VMCommonLibrarySupport;", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
489 sysArrayCopy.setRuntimeServiceMethod(false);
490 } else {
491 specializedMethodsField = null;
492 optThreadSwitchFromOsrOptMethod = null;
493 optThreadSwitchFromPrologueMethod = null;
494 optThreadSwitchFromBackedgeMethod = null;
495 optThreadSwitchFromEpilogueMethod = null;
496 yieldpointFromNativePrologueMethod = null;
497 yieldpointFromNativeEpilogueMethod = null;
498 optResolveMethod = null;
499 optNewArrayArrayMethod = null;
500 optNew2DArrayMethod = null;
501 sysArrayCopy = null;
502 }
503 }
504
505 public static final RVMField classLoaderDefinedPackages =
506 getField(java.lang.ClassLoader.class, "definedPackages", java.util.HashMap.class);
507
508 public static final RVMField luni1;
509 public static final RVMField luni2;
510 public static final RVMField luni3;
511 public static final RVMField luni4;
512 public static final RVMField luni5;
513 public static final RVMField luni6;
514
515 static {
516 if (VM.BuildForHarmony) {
517 luni1 = getField("Lorg/apache/harmony/luni/util/Msg;", "bundle", java.util.ResourceBundle.class);
518 luni2 = getField("Lorg/apache/harmony/archive/internal/nls/Messages;", "bundle", java.util.ResourceBundle.class);
519 luni3 = getField("Lorg/apache/harmony/luni/internal/nls/Messages;", "bundle", java.util.ResourceBundle.class);
520 luni4 = getField("Lorg/apache/harmony/nio/internal/nls/Messages;", "bundle", java.util.ResourceBundle.class);
521 luni5 = getField("Lorg/apache/harmony/niochar/internal/nls/Messages;", "bundle", java.util.ResourceBundle.class);
522 luni6 = getField(java.util.logging.LogManager.class, "manager", java.util.logging.LogManager.class);
523 } else {
524 luni1 = null;
525 luni2 = null;
526 luni3 = null;
527 luni4 = null;
528 luni5 = null;
529 luni6 = null;
530 }
531 }
532 }