1 | // |
2 | // Copyright (c) Microsoft. All rights reserved. |
3 | // Licensed under the MIT license. See LICENSE file in the project root for full license information. |
4 | // |
5 | |
6 | //---------------------------------------------------------- |
7 | // MethodContext.h - Primary structure to store all the EE-JIT details required to replay creation of a method |
8 | // CompileResult contains the stuff generated by a compilation |
9 | //---------------------------------------------------------- |
10 | #ifndef _MethodContext |
11 | #define _MethodContext |
12 | |
13 | #include "runtimedetails.h" |
14 | #include "compileresult.h" |
15 | #include "lightweightmap.h" |
16 | #include "errorhandling.h" |
17 | |
18 | #define METHOD_IDENTITY_INFO_SIZE 0x10000 // We assume that the METHOD_IDENTITY_INFO_SIZE will not exceed 64KB |
19 | |
20 | #define MD5_HASH_BYTE_SIZE 16 // MD5 is 128-bit, so we need 16 bytes to store it |
21 | #define MD5_HASH_BUFFER_SIZE 33 // MD5 is 128-bit, so we need 32 chars + 1 char to store null-terminator |
22 | |
23 | class MethodContext |
24 | { |
25 | public: |
26 | #pragma pack(push, 1) |
27 | struct Agnostic_CORINFO_SIG_INFO |
28 | { |
29 | DWORD callConv; |
30 | DWORDLONG retTypeClass; |
31 | DWORDLONG retTypeSigClass; |
32 | DWORD retType; |
33 | DWORD flags; |
34 | DWORD numArgs; |
35 | DWORD sigInst_classInstCount; |
36 | DWORD sigInst_classInst_Index; |
37 | DWORD sigInst_methInstCount; |
38 | DWORD sigInst_methInst_Index; |
39 | DWORDLONG args; |
40 | DWORD pSig_Index; |
41 | DWORD cbSig; |
42 | DWORDLONG scope; |
43 | DWORD token; |
44 | }; |
45 | struct Agnostic_CORINFO_METHOD_INFO |
46 | { |
47 | DWORDLONG ftn; |
48 | DWORDLONG scope; |
49 | DWORD ILCode_offset; |
50 | DWORD ILCodeSize; |
51 | DWORD maxStack; |
52 | DWORD EHcount; |
53 | DWORD options; |
54 | DWORD regionKind; |
55 | Agnostic_CORINFO_SIG_INFO args; |
56 | Agnostic_CORINFO_SIG_INFO locals; |
57 | }; |
58 | struct Agnostic_CompileMethod |
59 | { |
60 | Agnostic_CORINFO_METHOD_INFO info; |
61 | DWORD flags; |
62 | }; |
63 | struct Agnostic_InitClass |
64 | { |
65 | DWORDLONG field; |
66 | DWORDLONG method; |
67 | DWORDLONG context; |
68 | DWORD speculative; |
69 | }; |
70 | struct DLDL |
71 | { |
72 | DWORDLONG A; |
73 | DWORDLONG B; |
74 | }; |
75 | struct Agnostic_CanInline |
76 | { |
77 | DWORD Restrictions; |
78 | DWORD result; |
79 | DWORD exceptionCode; |
80 | }; |
81 | struct Agnostic_GetClassGClayout |
82 | { |
83 | DWORD gcPtrs_Index; |
84 | DWORD len; |
85 | DWORD valCount; |
86 | }; |
87 | struct DLD |
88 | { |
89 | DWORDLONG A; |
90 | DWORD B; |
91 | }; |
92 | struct DLDD |
93 | { |
94 | DWORDLONG A; |
95 | DWORD B; |
96 | DWORD C; |
97 | }; |
98 | struct Agnostic_CORINFO_METHODNAME_TOKENin |
99 | { |
100 | DWORDLONG ftn; |
101 | DWORD className; |
102 | DWORD namespaceName; |
103 | DWORD enclosingClassName; |
104 | }; |
105 | struct Agnostic_CORINFO_METHODNAME_TOKENout |
106 | { |
107 | DWORD methodName; |
108 | DWORD className; |
109 | DWORD namespaceName; |
110 | DWORD enclosingClassName; |
111 | }; |
112 | struct Agnostic_CORINFO_RESOLVED_TOKENin |
113 | { |
114 | DWORDLONG tokenContext; |
115 | DWORDLONG tokenScope; |
116 | DWORD token; |
117 | DWORD tokenType; |
118 | }; |
119 | struct Agnostic_CORINFO_RESOLVED_TOKENout |
120 | { |
121 | DWORDLONG hClass; |
122 | DWORDLONG hMethod; |
123 | DWORDLONG hField; |
124 | DWORD pTypeSpec_Index; |
125 | DWORD cbTypeSpec; |
126 | DWORD pMethodSpec_Index; |
127 | DWORD cbMethodSpec; |
128 | }; |
129 | struct GetArgTypeValue |
130 | { |
131 | DWORD flags; |
132 | DWORD numArgs; |
133 | DWORD sigInst_classInstCount; |
134 | DWORD sigInst_classInst_Index; |
135 | DWORD sigInst_methInstCount; |
136 | DWORD sigInst_methInst_Index; |
137 | DWORDLONG scope; |
138 | DWORDLONG args; |
139 | }; |
140 | struct GetArgClassValue |
141 | { |
142 | DWORD sigInst_classInstCount; |
143 | DWORD sigInst_classInst_Index; |
144 | DWORD sigInst_methInstCount; |
145 | DWORD sigInst_methInst_Index; |
146 | DWORDLONG scope; |
147 | DWORDLONG args; |
148 | }; |
149 | struct Agnostic_GetBoundaries |
150 | { |
151 | DWORD cILOffsets; |
152 | DWORD pILOffset_offset; |
153 | DWORD implicitBoundaries; |
154 | }; |
155 | struct Agnostic_CORINFO_EE_INFO |
156 | { |
157 | struct Agnostic_InlinedCallFrameInfo |
158 | { |
159 | DWORD size; |
160 | DWORD offsetOfGSCookie; |
161 | DWORD offsetOfFrameVptr; |
162 | DWORD offsetOfFrameLink; |
163 | DWORD offsetOfCallSiteSP; |
164 | DWORD offsetOfCalleeSavedFP; |
165 | DWORD offsetOfCallTarget; |
166 | DWORD offsetOfReturnAddress; |
167 | } inlinedCallFrameInfo; |
168 | DWORD offsetOfThreadFrame; |
169 | DWORD offsetOfGCState; |
170 | DWORD offsetOfDelegateInstance; |
171 | DWORD offsetOfDelegateFirstTarget; |
172 | DWORD offsetOfSecureDelegateIndirectCell; |
173 | DWORD offsetOfTransparentProxyRP; |
174 | DWORD offsetOfRealProxyServer; |
175 | DWORD offsetOfObjArrayData; |
176 | DWORD sizeOfReversePInvokeFrame; |
177 | DWORD osPageSize; |
178 | DWORD maxUncheckedOffsetForNullObject; |
179 | DWORD targetAbi; |
180 | DWORD osType; |
181 | DWORD osMajor; |
182 | DWORD osMinor; |
183 | DWORD osBuild; |
184 | }; |
185 | struct Agnostic_GetFieldAddress |
186 | { |
187 | DWORDLONG ppIndirection; |
188 | DWORDLONG fieldAddress; |
189 | DWORD fieldValue; |
190 | }; |
191 | struct Agnostic_GetStaticFieldCurrentClass |
192 | { |
193 | DWORDLONG classHandle; |
194 | bool isSpeculative; |
195 | }; |
196 | struct Agnostic_CORINFO_RESOLVED_TOKEN |
197 | { |
198 | Agnostic_CORINFO_RESOLVED_TOKENin inValue; |
199 | |
200 | Agnostic_CORINFO_RESOLVED_TOKENout outValue; |
201 | }; |
202 | struct Agnostic_GetFieldInfo |
203 | { |
204 | Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken; |
205 | DWORDLONG callerHandle; |
206 | DWORD flags; |
207 | }; |
208 | struct Agnostic_CORINFO_HELPER_ARG |
209 | { |
210 | DWORDLONG constant; // one view of a large union of ptr size |
211 | DWORD argType; |
212 | }; |
213 | struct Agnostic_CORINFO_HELPER_DESC |
214 | { |
215 | DWORD helperNum; |
216 | DWORD numArgs; |
217 | Agnostic_CORINFO_HELPER_ARG args[CORINFO_ACCESS_ALLOWED_MAX_ARGS]; |
218 | }; |
219 | struct Agnostic_CORINFO_CONST_LOOKUP |
220 | { |
221 | DWORD accessType; |
222 | DWORDLONG handle; // actually a union of two pointer sized things |
223 | }; |
224 | struct Agnostic_CORINFO_LOOKUP_KIND |
225 | { |
226 | DWORD needsRuntimeLookup; |
227 | DWORD runtimeLookupKind; |
228 | WORD runtimeLookupFlags; |
229 | }; |
230 | struct Agnostic_CORINFO_RUNTIME_LOOKUP |
231 | { |
232 | DWORDLONG signature; |
233 | DWORD helper; |
234 | DWORD indirections; |
235 | DWORD testForNull; |
236 | DWORD testForFixup; |
237 | DWORDLONG offsets[CORINFO_MAXINDIRECTIONS]; |
238 | DWORD indirectFirstOffset; |
239 | DWORD indirectSecondOffset; |
240 | }; |
241 | struct Agnostic_CORINFO_LOOKUP |
242 | { |
243 | Agnostic_CORINFO_LOOKUP_KIND lookupKind; |
244 | Agnostic_CORINFO_RUNTIME_LOOKUP runtimeLookup; // This and constLookup actually a union, but with different |
245 | // layouts.. :-| copy the right one based on lookupKinds value |
246 | Agnostic_CORINFO_CONST_LOOKUP constLookup; |
247 | }; |
248 | struct Agnostic_CORINFO_FIELD_INFO |
249 | { |
250 | DWORD fieldAccessor; |
251 | DWORD fieldFlags; |
252 | DWORD helper; |
253 | DWORD offset; |
254 | DWORD fieldType; |
255 | DWORDLONG structType; |
256 | DWORD accessAllowed; |
257 | Agnostic_CORINFO_HELPER_DESC accessCalloutHelper; |
258 | Agnostic_CORINFO_CONST_LOOKUP fieldLookup; |
259 | }; |
260 | struct DD |
261 | { |
262 | DWORD A; |
263 | DWORD B; |
264 | }; |
265 | struct DDD |
266 | { |
267 | DWORD A; |
268 | DWORD B; |
269 | DWORD C; |
270 | }; |
271 | struct Agnostic_CanTailCall |
272 | { |
273 | DWORDLONG callerHnd; |
274 | DWORDLONG declaredCalleeHnd; |
275 | DWORDLONG exactCalleeHnd; |
276 | WORD fIsTailPrefix; |
277 | }; |
278 | struct Agnostic_Environment |
279 | { |
280 | DWORD name_index; |
281 | ; |
282 | DWORD val_index; |
283 | }; |
284 | struct Agnostic_GetCallInfo |
285 | { |
286 | Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken; |
287 | Agnostic_CORINFO_RESOLVED_TOKEN ConstrainedResolvedToken; |
288 | DWORDLONG callerHandle; |
289 | DWORD flags; |
290 | }; |
291 | |
292 | struct Agnostic_CORINFO_CALL_INFO |
293 | { |
294 | DWORDLONG hMethod; |
295 | DWORD methodFlags; |
296 | DWORD classFlags; |
297 | Agnostic_CORINFO_SIG_INFO sig; |
298 | DWORD verMethodFlags; |
299 | Agnostic_CORINFO_SIG_INFO verSig; |
300 | DWORD accessAllowed; |
301 | Agnostic_CORINFO_HELPER_DESC callsiteCalloutHelper; |
302 | DWORD thisTransform; |
303 | DWORD kind; |
304 | DWORD nullInstanceCheck; |
305 | DWORDLONG contextHandle; |
306 | DWORD exactContextNeedsRuntimeLookup; |
307 | Agnostic_CORINFO_LOOKUP stubLookup; // first view of union. others are matching or subordinate |
308 | Agnostic_CORINFO_CONST_LOOKUP instParamLookup; |
309 | DWORD secureDelegateInvoke; |
310 | DWORD exceptionCode; |
311 | }; |
312 | struct Agnostic_GetMethodInfo |
313 | { |
314 | Agnostic_CORINFO_METHOD_INFO info; |
315 | bool result; |
316 | DWORD exceptionCode; |
317 | }; |
318 | struct Agnostic_FindSig |
319 | { |
320 | DWORDLONG module; |
321 | DWORD sigTOK; |
322 | DWORDLONG context; |
323 | }; |
324 | struct PInvokeMarshalingRequiredValue |
325 | { |
326 | DWORDLONG method; |
327 | DWORD pSig_Index; |
328 | DWORD cbSig; |
329 | DWORDLONG scope; |
330 | }; |
331 | struct Agnostic_CORINFO_EH_CLAUSE |
332 | { |
333 | DWORD Flags; |
334 | DWORD TryOffset; |
335 | DWORD TryLength; |
336 | DWORD HandlerOffset; |
337 | DWORD HandlerLength; |
338 | DWORD ClassToken; // first view of a two dword union |
339 | }; |
340 | struct Agnostic_GetVars |
341 | { |
342 | DWORD cVars; |
343 | DWORD vars_offset; |
344 | DWORD extendOthers; |
345 | }; |
346 | struct Agnostic_CanAccessClassIn |
347 | { |
348 | Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken; |
349 | DWORDLONG callerHandle; |
350 | }; |
351 | struct Agnostic_CanAccessClassOut |
352 | { |
353 | Agnostic_CORINFO_HELPER_DESC AccessHelper; |
354 | DWORD result; |
355 | }; |
356 | struct Agnostic_AppendClassName |
357 | { |
358 | DWORDLONG classHandle; |
359 | DWORD fNamespace; |
360 | DWORD fFullInst; |
361 | DWORD fAssembly; |
362 | }; |
363 | struct Agnostic_CheckMethodModifier |
364 | { |
365 | DWORDLONG hMethod; |
366 | DWORD modifier; |
367 | DWORD fOptional; |
368 | }; |
369 | struct Agnostic_EmbedGenericHandle |
370 | { |
371 | Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken; |
372 | DWORD fEmbedParent; |
373 | }; |
374 | struct Agnostic_CORINFO_GENERICHANDLE_RESULT |
375 | { |
376 | |
377 | Agnostic_CORINFO_LOOKUP lookup; |
378 | DWORDLONG compileTimeHandle; |
379 | DWORD handleType; |
380 | }; |
381 | struct Agnostic_GetDelegateCtorIn |
382 | { |
383 | DWORDLONG methHnd; |
384 | DWORDLONG clsHnd; |
385 | DWORDLONG targetMethodHnd; |
386 | }; |
387 | struct Agnostic_DelegateCtorArgs |
388 | { |
389 | DWORDLONG pMethod; |
390 | DWORDLONG pArg3; |
391 | DWORDLONG pArg4; |
392 | DWORDLONG pArg5; |
393 | }; |
394 | struct Agnostic_GetDelegateCtorOut |
395 | { |
396 | Agnostic_DelegateCtorArgs CtorData; |
397 | DWORDLONG result; |
398 | }; |
399 | struct Agnostic_FindCallSiteSig |
400 | { |
401 | DWORDLONG module; |
402 | DWORD methTok; |
403 | DWORDLONG context; |
404 | }; |
405 | struct Agnostic_GetNewHelper |
406 | { |
407 | DWORDLONG hClass; |
408 | DWORDLONG callerHandle; |
409 | }; |
410 | struct Agnostic_GetCastingHelper |
411 | { |
412 | DWORDLONG hClass; |
413 | DWORD fThrowing; |
414 | }; |
415 | struct Agnostic_GetClassModuleIdForStatics |
416 | { |
417 | DWORDLONG Module; |
418 | DWORDLONG pIndirection; |
419 | DWORDLONG result; |
420 | }; |
421 | struct Agnostic_IsCompatibleDelegate |
422 | { |
423 | DWORDLONG objCls; |
424 | DWORDLONG methodParentCls; |
425 | DWORDLONG method; |
426 | DWORDLONG delegateCls; |
427 | }; |
428 | struct Agnostic_GetBBProfileData |
429 | { |
430 | DWORD count; |
431 | DWORD profileBuffer_index; |
432 | DWORD numRuns; |
433 | DWORD result; |
434 | }; |
435 | struct Agnostic_GetProfilingHandle |
436 | { |
437 | DWORD bHookFunction; |
438 | DWORDLONG ProfilerHandle; |
439 | DWORD bIndirectedHandles; |
440 | }; |
441 | struct Agnostic_GetTailCallCopyArgsThunk |
442 | { |
443 | Agnostic_CORINFO_SIG_INFO Sig; |
444 | DWORD flags; |
445 | }; |
446 | struct Agnostic_GetArgClass_Value |
447 | { |
448 | DWORDLONG result; |
449 | DWORD exceptionCode; |
450 | }; |
451 | struct Agnostic_GetArgType_Value |
452 | { |
453 | DWORDLONG vcTypeRet; |
454 | DWORD result; |
455 | DWORD exceptionCode; |
456 | }; |
457 | |
458 | // Agnostic_ConfigIntInfo combines as a single key the name |
459 | // and defaultValue of a integer config query. |
460 | // Note: nameIndex is treated as a DWORD index to the name string. |
461 | struct Agnostic_ConfigIntInfo |
462 | { |
463 | DWORD nameIndex; |
464 | DWORD defaultValue; |
465 | }; |
466 | |
467 | // SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR |
468 | struct Agnostic_GetSystemVAmd64PassStructInRegisterDescriptor |
469 | { |
470 | DWORD passedInRegisters; // Whether the struct is passable/passed (this includes struct returning) in registers. |
471 | DWORD eightByteCount; // Number of eightbytes for this struct. |
472 | DWORD eightByteClassifications[CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS]; // The eightbytes type |
473 | // classification. |
474 | DWORD eightByteSizes[CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS]; // The size of the eightbytes (an |
475 | // eightbyte could include padding. |
476 | // This represents the no padding |
477 | // size of the eightbyte). |
478 | DWORD eightByteOffsets[CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS]; // The start offset of the |
479 | // eightbytes (in bytes). |
480 | DWORD result; |
481 | }; |
482 | |
483 | struct Agnostic_ResolveVirtualMethod |
484 | { |
485 | DWORDLONG virtualMethod; |
486 | DWORDLONG implementingClass; |
487 | DWORDLONG ownerType; |
488 | }; |
489 | |
490 | struct ResolveTokenValue |
491 | { |
492 | Agnostic_CORINFO_RESOLVED_TOKENout tokenOut; |
493 | DWORD exceptionCode; |
494 | }; |
495 | |
496 | struct TryResolveTokenValue |
497 | { |
498 | Agnostic_CORINFO_RESOLVED_TOKENout tokenOut; |
499 | DWORD success; |
500 | }; |
501 | |
502 | struct GetTokenTypeAsHandleValue |
503 | { |
504 | DWORDLONG hMethod; |
505 | DWORDLONG hField; |
506 | }; |
507 | |
508 | struct GetVarArgsHandleValue |
509 | { |
510 | DWORD cbSig; |
511 | DWORD pSig_Index; |
512 | DWORDLONG scope; |
513 | DWORD token; |
514 | }; |
515 | |
516 | struct CanGetVarArgsHandleValue |
517 | { |
518 | DWORDLONG scope; |
519 | DWORD token; |
520 | }; |
521 | |
522 | struct GetCookieForPInvokeCalliSigValue |
523 | { |
524 | DWORD cbSig; |
525 | DWORD pSig_Index; |
526 | DWORDLONG scope; |
527 | DWORD token; |
528 | }; |
529 | |
530 | struct CanGetCookieForPInvokeCalliSigValue |
531 | { |
532 | DWORDLONG scope; |
533 | DWORD token; |
534 | }; |
535 | |
536 | struct GetReadyToRunHelper_TOKENin |
537 | { |
538 | Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken; |
539 | Agnostic_CORINFO_LOOKUP_KIND GenericLookupKind; |
540 | DWORD id; |
541 | }; |
542 | |
543 | struct GetReadyToRunHelper_TOKENout |
544 | { |
545 | Agnostic_CORINFO_CONST_LOOKUP Lookup; |
546 | bool result; |
547 | }; |
548 | |
549 | struct GetReadyToRunDelegateCtorHelper_TOKENIn |
550 | { |
551 | Agnostic_CORINFO_RESOLVED_TOKEN TargetMethod; |
552 | DWORDLONG delegateType; |
553 | }; |
554 | |
555 | #pragma pack(pop) |
556 | |
557 | MethodContext(); |
558 | |
559 | private: |
560 | MethodContext(HANDLE hFile); |
561 | MethodContext(unsigned char* buff, unsigned int totalLen); |
562 | |
563 | void MethodInitHelper(unsigned char* buff, unsigned int totalLen); |
564 | void MethodInitHelperFile(HANDLE hFile); |
565 | |
566 | bool Initialize(int loadedCount, unsigned char* buff, DWORD size); |
567 | bool Initialize(int loadedCount, HANDLE hFile); |
568 | |
569 | int dumpMD5HashToBuffer(BYTE* pBuffer, int bufLen, char* buff, int len); |
570 | |
571 | public: |
572 | static bool Initialize(int loadedCount, unsigned char* buff, DWORD size, /* OUT */ MethodContext** ppmc); |
573 | static bool Initialize(int loadedCount, HANDLE hFile, /* OUT */ MethodContext** ppmc); |
574 | ~MethodContext(); |
575 | void Destroy(); |
576 | |
577 | bool Equal(MethodContext* other); |
578 | unsigned int saveToFile(HANDLE hFile); |
579 | unsigned int calculateFileSize(); |
580 | unsigned int calculateRawFileSize(); |
581 | void dumpToConsole(int mcNumber = -1); // if mcNumber is not -1, display the method context number before the dumped |
582 | // info |
583 | int dumpStatToBuffer(char* buff, int len); |
584 | static int dumpStatTitleToBuffer(char* buff, int len); |
585 | int methodSize; |
586 | |
587 | int dumpMethodIdentityInfoToBuffer(char* buff, int len); |
588 | int dumpMethodMD5HashToBuffer(char* buff, int len); |
589 | |
590 | void recGlobalContext(const MethodContext& other); |
591 | |
592 | void dmpEnvironment(DWORD key, const Agnostic_Environment& value); |
593 | |
594 | void recCompileMethod(CORINFO_METHOD_INFO* info, unsigned flags); |
595 | void dmpCompileMethod(DWORD key, const Agnostic_CompileMethod& value); |
596 | void repCompileMethod(CORINFO_METHOD_INFO* info, unsigned* flags); |
597 | |
598 | void recGetMethodClass(CORINFO_METHOD_HANDLE methodHandle, CORINFO_CLASS_HANDLE classHandle); |
599 | void dmpGetMethodClass(DWORDLONG key, DWORDLONG value); |
600 | CORINFO_CLASS_HANDLE repGetMethodClass(CORINFO_METHOD_HANDLE methodHandle); |
601 | |
602 | void recGetClassAttribs(CORINFO_CLASS_HANDLE classHandle, DWORD attribs); |
603 | void dmpGetClassAttribs(DWORDLONG key, DWORD value); |
604 | DWORD repGetClassAttribs(CORINFO_CLASS_HANDLE classHandle); |
605 | |
606 | void recGetMethodAttribs(CORINFO_METHOD_HANDLE methodHandle, DWORD attribs); |
607 | void dmpGetMethodAttribs(DWORDLONG key, DWORD value); |
608 | DWORD repGetMethodAttribs(CORINFO_METHOD_HANDLE methodHandle); |
609 | |
610 | void recGetVars(CORINFO_METHOD_HANDLE ftn, ULONG32* cVars, ICorDebugInfo::ILVarInfo** vars, bool* extendOthers); |
611 | void dmpGetVars(DWORDLONG key, const Agnostic_GetVars& value); |
612 | void repGetVars(CORINFO_METHOD_HANDLE ftn, ULONG32* cVars, ICorDebugInfo::ILVarInfo** vars, bool* extendOthers); |
613 | |
614 | void recGetBoundaries(CORINFO_METHOD_HANDLE ftn, |
615 | unsigned int* cILOffsets, |
616 | DWORD** pILOffsets, |
617 | ICorDebugInfo::BoundaryTypes* implictBoundaries); |
618 | void dmpGetBoundaries(DWORDLONG key, const Agnostic_GetBoundaries& value); |
619 | void repGetBoundaries(CORINFO_METHOD_HANDLE ftn, |
620 | unsigned int* cILOffsets, |
621 | DWORD** pILOffsets, |
622 | ICorDebugInfo::BoundaryTypes* implictBoundaries); |
623 | |
624 | void recInitClass(CORINFO_FIELD_HANDLE field, |
625 | CORINFO_METHOD_HANDLE method, |
626 | CORINFO_CONTEXT_HANDLE context, |
627 | BOOL speculative, |
628 | CorInfoInitClassResult result); |
629 | void dmpInitClass(const Agnostic_InitClass& key, DWORD value); |
630 | CorInfoInitClassResult repInitClass(CORINFO_FIELD_HANDLE field, |
631 | CORINFO_METHOD_HANDLE method, |
632 | CORINFO_CONTEXT_HANDLE context, |
633 | BOOL speculative); |
634 | |
635 | void recGetMethodName(CORINFO_METHOD_HANDLE ftn, char* methodname, const char** moduleName); |
636 | void dmpGetMethodName(DLD key, DD value); |
637 | const char* repGetMethodName(CORINFO_METHOD_HANDLE ftn, const char** moduleName); |
638 | |
639 | void recGetMethodNameFromMetadata(CORINFO_METHOD_HANDLE ftn, |
640 | char* methodname, |
641 | const char** moduleName, |
642 | const char** namespaceName, |
643 | const char** enclosingClassName); |
644 | void dmpGetMethodNameFromMetadata(Agnostic_CORINFO_METHODNAME_TOKENin key, Agnostic_CORINFO_METHODNAME_TOKENout value); |
645 | const char* repGetMethodNameFromMetadata(CORINFO_METHOD_HANDLE ftn, |
646 | const char** className, |
647 | const char** namespaceName, |
648 | const char** enclosingClassName); |
649 | |
650 | void recGetJitFlags(CORJIT_FLAGS* jitFlags, DWORD sizeInBytes, DWORD result); |
651 | void dmpGetJitFlags(DWORD key, DD value); |
652 | DWORD repGetJitFlags(CORJIT_FLAGS* jitFlags, DWORD sizeInBytes); |
653 | |
654 | void recGetJitTimeLogFilename(LPCWSTR tempFileName); |
655 | void dmpGetJitTimeLogFilename(DWORD key, DWORD value); |
656 | LPCWSTR repGetJitTimeLogFilename(); |
657 | |
658 | void recCanInline(CORINFO_METHOD_HANDLE callerHnd, |
659 | CORINFO_METHOD_HANDLE calleeHnd, |
660 | DWORD* pRestrictions, |
661 | CorInfoInline response, |
662 | DWORD exceptionCode); |
663 | void dmpCanInline(DLDL key, const Agnostic_CanInline& value); |
664 | CorInfoInline repCanInline(CORINFO_METHOD_HANDLE callerHnd, |
665 | CORINFO_METHOD_HANDLE calleeHnd, |
666 | DWORD* pRestrictions, |
667 | DWORD* exceptionCode); |
668 | |
669 | void recResolveToken(CORINFO_RESOLVED_TOKEN* pResolvedToken, DWORD exceptionCode); |
670 | void dmpResolveToken(const Agnostic_CORINFO_RESOLVED_TOKENin& key, const ResolveTokenValue& value); |
671 | void repResolveToken(CORINFO_RESOLVED_TOKEN* pResolvedToken, DWORD* exceptionCode); |
672 | |
673 | void recTryResolveToken(CORINFO_RESOLVED_TOKEN* pResolvedToken, bool success); |
674 | void dmpTryResolveToken(const Agnostic_CORINFO_RESOLVED_TOKENin& key, const TryResolveTokenValue& value); |
675 | bool repTryResolveToken(CORINFO_RESOLVED_TOKEN* pResolvedToken); |
676 | |
677 | void recGetCallInfo(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
678 | CORINFO_RESOLVED_TOKEN* pConstrainedResolvedToken, |
679 | CORINFO_METHOD_HANDLE callerHandle, |
680 | CORINFO_CALLINFO_FLAGS flags, |
681 | CORINFO_CALL_INFO* pResult, |
682 | DWORD exceptionCode); |
683 | void dmpGetCallInfo(const Agnostic_GetCallInfo& key, const Agnostic_CORINFO_CALL_INFO& value); |
684 | void repGetCallInfo(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
685 | CORINFO_RESOLVED_TOKEN* pConstrainedResolvedToken, |
686 | CORINFO_METHOD_HANDLE callerHandle, |
687 | CORINFO_CALLINFO_FLAGS flags, |
688 | CORINFO_CALL_INFO* pResult, |
689 | DWORD* exceptionCode); |
690 | void repGetCallInfoFromMethodHandle(CORINFO_METHOD_HANDLE methodHandle, CORINFO_CALL_INFO* pResult); |
691 | |
692 | void recGetIntrinsicID(CORINFO_METHOD_HANDLE method, bool* pMustExpand, CorInfoIntrinsics result); |
693 | void dmpGetIntrinsicID(DWORDLONG key, DD value); |
694 | CorInfoIntrinsics repGetIntrinsicID(CORINFO_METHOD_HANDLE method, bool* pMustExpand); |
695 | |
696 | void recGetUnmanagedCallConv(CORINFO_METHOD_HANDLE method, CorInfoUnmanagedCallConv result); |
697 | void dmpGetUnmanagedCallConv(DWORDLONG key, DWORD result); |
698 | CorInfoUnmanagedCallConv repGetUnmanagedCallConv(CORINFO_METHOD_HANDLE method); |
699 | |
700 | void recIsInstantiationOfVerifiedGeneric(CORINFO_METHOD_HANDLE method, CorInfoInstantiationVerification result); |
701 | void dmpIsInstantiationOfVerifiedGeneric(DWORDLONG key, DWORD value); |
702 | CorInfoInstantiationVerification repIsInstantiationOfVerifiedGeneric(CORINFO_METHOD_HANDLE method); |
703 | |
704 | void recAsCorInfoType(CORINFO_CLASS_HANDLE cls, CorInfoType result); |
705 | void dmpAsCorInfoType(DWORDLONG key, DWORD value); |
706 | CorInfoType repAsCorInfoType(CORINFO_CLASS_HANDLE cls); |
707 | |
708 | void recIsValueClass(CORINFO_CLASS_HANDLE cls, BOOL result); |
709 | void dmpIsValueClass(DWORDLONG key, DWORD value); |
710 | BOOL repIsValueClass(CORINFO_CLASS_HANDLE cls); |
711 | |
712 | void recIsStructRequiringStackAllocRetBuf(CORINFO_CLASS_HANDLE cls, BOOL result); |
713 | void dmpIsStructRequiringStackAllocRetBuf(DWORDLONG key, DWORD value); |
714 | BOOL repIsStructRequiringStackAllocRetBuf(CORINFO_CLASS_HANDLE cls); |
715 | |
716 | void recGetClassSize(CORINFO_CLASS_HANDLE cls, unsigned result); |
717 | void dmpGetClassSize(DWORDLONG key, DWORD val); |
718 | unsigned repGetClassSize(CORINFO_CLASS_HANDLE cls); |
719 | |
720 | void recGetHeapClassSize(CORINFO_CLASS_HANDLE cls, unsigned result); |
721 | void dmpGetHeapClassSize(DWORDLONG key, DWORD val); |
722 | unsigned repGetHeapClassSize(CORINFO_CLASS_HANDLE cls); |
723 | |
724 | void recCanAllocateOnStack(CORINFO_CLASS_HANDLE cls, BOOL result); |
725 | void dmpCanAllocateOnStack(DWORDLONG key, DWORD val); |
726 | BOOL repCanAllocateOnStack(CORINFO_CLASS_HANDLE cls); |
727 | |
728 | void recGetClassNumInstanceFields(CORINFO_CLASS_HANDLE cls, unsigned result); |
729 | void dmpGetClassNumInstanceFields(DWORDLONG key, DWORD value); |
730 | unsigned repGetClassNumInstanceFields(CORINFO_CLASS_HANDLE cls); |
731 | |
732 | void recGetNewArrHelper(CORINFO_CLASS_HANDLE arrayCls, CorInfoHelpFunc result); |
733 | void dmpGetNewArrHelper(DWORDLONG key, DWORD value); |
734 | CorInfoHelpFunc repGetNewArrHelper(CORINFO_CLASS_HANDLE arrayCls); |
735 | |
736 | void recGetSharedCCtorHelper(CORINFO_CLASS_HANDLE clsHnd, CorInfoHelpFunc result); |
737 | void dmpGetSharedCCtorHelper(DWORDLONG key, DWORD value); |
738 | CorInfoHelpFunc repGetSharedCCtorHelper(CORINFO_CLASS_HANDLE clsHnd); |
739 | |
740 | void recGetSecurityPrologHelper(CORINFO_METHOD_HANDLE ftn, CorInfoHelpFunc result); |
741 | void dmpGetSecurityPrologHelper(DWORDLONG key, DWORD value); |
742 | CorInfoHelpFunc repGetSecurityPrologHelper(CORINFO_METHOD_HANDLE ftn); |
743 | |
744 | void recGetTypeForBox(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result); |
745 | void dmpGetTypeForBox(DWORDLONG key, DWORDLONG value); |
746 | CORINFO_CLASS_HANDLE repGetTypeForBox(CORINFO_CLASS_HANDLE cls); |
747 | |
748 | void recGetBoxHelper(CORINFO_CLASS_HANDLE cls, CorInfoHelpFunc result); |
749 | void dmpGetBoxHelper(DWORDLONG key, DWORD value); |
750 | CorInfoHelpFunc repGetBoxHelper(CORINFO_CLASS_HANDLE cls); |
751 | |
752 | void recGetBuiltinClass(CorInfoClassId classId, CORINFO_CLASS_HANDLE result); |
753 | void dmpGetBuiltinClass(DWORD key, DWORDLONG value); |
754 | CORINFO_CLASS_HANDLE repGetBuiltinClass(CorInfoClassId classId); |
755 | |
756 | void recGetTypeForPrimitiveValueClass(CORINFO_CLASS_HANDLE cls, CorInfoType result); |
757 | void dmpGetTypeForPrimitiveValueClass(DWORDLONG key, DWORD value); |
758 | CorInfoType repGetTypeForPrimitiveValueClass(CORINFO_CLASS_HANDLE cls); |
759 | |
760 | void recGetTypeForPrimitiveNumericClass(CORINFO_CLASS_HANDLE cls, CorInfoType result); |
761 | void dmpGetTypeForPrimitiveNumericClass(DWORDLONG key, DWORD value); |
762 | CorInfoType repGetTypeForPrimitiveNumericClass(CORINFO_CLASS_HANDLE cls); |
763 | |
764 | void recGetParentType(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result); |
765 | void dmpGetParentType(DWORDLONG key, DWORDLONG value); |
766 | CORINFO_CLASS_HANDLE repGetParentType(CORINFO_CLASS_HANDLE cls); |
767 | |
768 | void recIsSDArray(CORINFO_CLASS_HANDLE cls, BOOL result); |
769 | void dmpIsSDArray(DWORDLONG key, DWORD value); |
770 | BOOL repIsSDArray(CORINFO_CLASS_HANDLE cls); |
771 | |
772 | void recIsInSIMDModule(CORINFO_CLASS_HANDLE cls, BOOL result); |
773 | void dmpIsInSIMDModule(DWORDLONG key, DWORD value); |
774 | BOOL repIsInSIMDModule(CORINFO_CLASS_HANDLE cls); |
775 | |
776 | void recGetFieldClass(CORINFO_FIELD_HANDLE field, CORINFO_CLASS_HANDLE result); |
777 | void dmpGetFieldClass(DWORDLONG key, DWORDLONG value); |
778 | CORINFO_CLASS_HANDLE repGetFieldClass(CORINFO_FIELD_HANDLE field); |
779 | |
780 | void recGetFieldOffset(CORINFO_FIELD_HANDLE field, unsigned result); |
781 | void dmpGetFieldOffset(DWORDLONG key, DWORD value); |
782 | unsigned repGetFieldOffset(CORINFO_FIELD_HANDLE field); |
783 | |
784 | void recGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle, CorInfoHelpFunc result); |
785 | void dmpGetLazyStringLiteralHelper(DWORDLONG key, DWORD value); |
786 | CorInfoHelpFunc repGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle); |
787 | |
788 | void recGetUnBoxHelper(CORINFO_CLASS_HANDLE cls, CorInfoHelpFunc result); |
789 | void dmpGetUnBoxHelper(DWORDLONG key, DWORD value); |
790 | CorInfoHelpFunc repGetUnBoxHelper(CORINFO_CLASS_HANDLE cls); |
791 | |
792 | void recGetReadyToRunHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
793 | CORINFO_LOOKUP_KIND* pGenericLookupKind, |
794 | CorInfoHelpFunc id, |
795 | CORINFO_CONST_LOOKUP* pLookup, |
796 | bool result); |
797 | void dmpGetReadyToRunHelper(GetReadyToRunHelper_TOKENin key, GetReadyToRunHelper_TOKENout value); |
798 | bool repGetReadyToRunHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
799 | CORINFO_LOOKUP_KIND* pGenericLookupKind, |
800 | CorInfoHelpFunc id, |
801 | CORINFO_CONST_LOOKUP* pLookup); |
802 | |
803 | void recGetReadyToRunDelegateCtorHelper(CORINFO_RESOLVED_TOKEN* pTargetMethod, |
804 | CORINFO_CLASS_HANDLE delegateType, |
805 | CORINFO_LOOKUP* pLookup); |
806 | void dmpGetReadyToRunDelegateCtorHelper(GetReadyToRunDelegateCtorHelper_TOKENIn key, |
807 | Agnostic_CORINFO_LOOKUP pLookup); |
808 | void repGetReadyToRunDelegateCtorHelper(CORINFO_RESOLVED_TOKEN* pTargetMethod, |
809 | CORINFO_CLASS_HANDLE delegateType, |
810 | CORINFO_LOOKUP* pLookup); |
811 | |
812 | void recGetHelperFtn(CorInfoHelpFunc ftnNum, void** ppIndirection, void* result); |
813 | void dmpGetHelperFtn(DWORD key, DLDL value); |
814 | void* repGetHelperFtn(CorInfoHelpFunc ftnNum, void** ppIndirection); |
815 | bool fndGetHelperFtn(void* functionAddress, CorInfoHelpFunc* pResult); |
816 | |
817 | void recGetJustMyCodeHandle(CORINFO_METHOD_HANDLE method, |
818 | CORINFO_JUST_MY_CODE_HANDLE** ppIndirection, |
819 | CORINFO_JUST_MY_CODE_HANDLE result); |
820 | void dmpGetJustMyCodeHandle(DWORDLONG key, DLDL value); |
821 | CORINFO_JUST_MY_CODE_HANDLE repGetJustMyCodeHandle(CORINFO_METHOD_HANDLE method, |
822 | CORINFO_JUST_MY_CODE_HANDLE** ppIndirection); |
823 | |
824 | void recGetFunctionEntryPoint(CORINFO_METHOD_HANDLE ftn, |
825 | CORINFO_CONST_LOOKUP* pResult, |
826 | CORINFO_ACCESS_FLAGS accessFlags); |
827 | void dmpGetFunctionEntryPoint(DLD key, DLD value); |
828 | void repGetFunctionEntryPoint(CORINFO_METHOD_HANDLE ftn, |
829 | CORINFO_CONST_LOOKUP* pResult, |
830 | CORINFO_ACCESS_FLAGS accessFlags); |
831 | bool fndGetFunctionEntryPoint(DLD value, CORINFO_METHOD_HANDLE* pResult); |
832 | |
833 | void recConstructStringLiteral(CORINFO_MODULE_HANDLE module, mdToken metaTok, void* ppValue, InfoAccessType result); |
834 | void dmpConstructStringLiteral(DLD key, DLD value); |
835 | InfoAccessType repConstructStringLiteral(CORINFO_MODULE_HANDLE module, mdToken metaTok, void** ppValue); |
836 | |
837 | void recConvertPInvokeCalliToCall(CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fMustConvert, bool result); |
838 | void dmpConvertPInvokeCalliToCall(DLD key, DWORDLONG value); |
839 | bool repConvertPInvokeCalliToCall(CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fMustConvert); |
840 | |
841 | void recEmptyStringLiteral(void** ppValue, InfoAccessType result); |
842 | void dmpEmptyStringLiteral(DWORD key, DLD value); |
843 | InfoAccessType repEmptyStringLiteral(void** ppValue); |
844 | |
845 | void recGetArgType(CORINFO_SIG_INFO* sig, |
846 | CORINFO_ARG_LIST_HANDLE args, |
847 | CORINFO_CLASS_HANDLE* vcTypeRet, |
848 | CorInfoTypeWithMod result, |
849 | DWORD exception); |
850 | void dmpGetArgType(const GetArgTypeValue& key, const Agnostic_GetArgType_Value& value); |
851 | CorInfoTypeWithMod repGetArgType(CORINFO_SIG_INFO* sig, |
852 | CORINFO_ARG_LIST_HANDLE args, |
853 | CORINFO_CLASS_HANDLE* vcTypeRet, |
854 | DWORD* exception); |
855 | |
856 | void recGetArgNext(CORINFO_ARG_LIST_HANDLE args, CORINFO_ARG_LIST_HANDLE result); |
857 | void dmpGetArgNext(DWORDLONG key, DWORDLONG value); |
858 | CORINFO_ARG_LIST_HANDLE repGetArgNext(CORINFO_ARG_LIST_HANDLE args); |
859 | |
860 | void recGetMethodSig(CORINFO_METHOD_HANDLE ftn, CORINFO_SIG_INFO* sig, CORINFO_CLASS_HANDLE memberParent); |
861 | void dmpGetMethodSig(DLDL key, const Agnostic_CORINFO_SIG_INFO& value); |
862 | void repGetMethodSig(CORINFO_METHOD_HANDLE ftn, CORINFO_SIG_INFO* sig, CORINFO_CLASS_HANDLE memberParent); |
863 | |
864 | void recGetArgClass(CORINFO_SIG_INFO* sig, |
865 | CORINFO_ARG_LIST_HANDLE args, |
866 | CORINFO_CLASS_HANDLE result, |
867 | DWORD exceptionCode); |
868 | void dmpGetArgClass(const GetArgClassValue& key, const Agnostic_GetArgClass_Value& value); |
869 | CORINFO_CLASS_HANDLE repGetArgClass(CORINFO_SIG_INFO* sig, CORINFO_ARG_LIST_HANDLE args, DWORD* exceptionCode); |
870 | |
871 | void recGetHFAType(CORINFO_CLASS_HANDLE clsHnd, CorInfoType result); |
872 | void dmpGetHFAType(DWORDLONG key, DWORD value); |
873 | CorInfoType repGetHFAType(CORINFO_CLASS_HANDLE clsHnd); |
874 | |
875 | void recGetMethodInfo(CORINFO_METHOD_HANDLE ftn, CORINFO_METHOD_INFO* info, bool result, DWORD exceptionCode); |
876 | void dmpGetMethodInfo(DWORDLONG key, const Agnostic_GetMethodInfo& value); |
877 | bool repGetMethodInfo(CORINFO_METHOD_HANDLE ftn, CORINFO_METHOD_INFO* info, DWORD* exceptionCode); |
878 | |
879 | void recGetNewHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
880 | CORINFO_METHOD_HANDLE callerHandle, |
881 | bool* pHasSideEffects, |
882 | CorInfoHelpFunc result); |
883 | void dmpGetNewHelper(const Agnostic_GetNewHelper& key, DD value); |
884 | CorInfoHelpFunc repGetNewHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, bool * pHasSideEffects); |
885 | |
886 | void recEmbedGenericHandle(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
887 | BOOL fEmbedParent, |
888 | CORINFO_GENERICHANDLE_RESULT* pResult); |
889 | void dmpEmbedGenericHandle(const Agnostic_EmbedGenericHandle& key, |
890 | const Agnostic_CORINFO_GENERICHANDLE_RESULT& value); |
891 | void repEmbedGenericHandle(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
892 | BOOL fEmbedParent, |
893 | CORINFO_GENERICHANDLE_RESULT* pResult); |
894 | |
895 | void recGetEHinfo(CORINFO_METHOD_HANDLE ftn, unsigned EHnumber, CORINFO_EH_CLAUSE* clause); |
896 | void dmpGetEHinfo(DLD key, const Agnostic_CORINFO_EH_CLAUSE& value); |
897 | void repGetEHinfo(CORINFO_METHOD_HANDLE ftn, unsigned EHnumber, CORINFO_EH_CLAUSE* clause); |
898 | |
899 | void recGetMethodVTableOffset(CORINFO_METHOD_HANDLE method, |
900 | unsigned* offsetOfIndirection, |
901 | unsigned* offsetAfterIndirection, |
902 | bool* isRelative); |
903 | void dmpGetMethodVTableOffset(DWORDLONG key, DDD value); |
904 | void repGetMethodVTableOffset(CORINFO_METHOD_HANDLE method, |
905 | unsigned* offsetOfIndirection, |
906 | unsigned* offsetAfterIndirection, |
907 | bool* isRelative); |
908 | |
909 | void recResolveVirtualMethod(CORINFO_METHOD_HANDLE virtMethod, |
910 | CORINFO_CLASS_HANDLE implClass, |
911 | CORINFO_CONTEXT_HANDLE ownerType, |
912 | CORINFO_METHOD_HANDLE result); |
913 | void dmpResolveVirtualMethod(const Agnostic_ResolveVirtualMethod& key, DWORDLONG value); |
914 | CORINFO_METHOD_HANDLE repResolveVirtualMethod(CORINFO_METHOD_HANDLE virtMethod, |
915 | CORINFO_CLASS_HANDLE implClass, |
916 | CORINFO_CONTEXT_HANDLE ownerType); |
917 | |
918 | void recGetUnboxedEntry(CORINFO_METHOD_HANDLE ftn, bool* requiresInstMethodTableArg, CORINFO_METHOD_HANDLE result); |
919 | void dmpGetUnboxedEntry(DWORDLONG key, DLD value); |
920 | CORINFO_METHOD_HANDLE repGetUnboxedEntry(CORINFO_METHOD_HANDLE ftn, bool* requiresInstMethodTableArg); |
921 | |
922 | void recGetDefaultEqualityComparerClass(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result); |
923 | void dmpGetDefaultEqualityComparerClass(DWORDLONG key, DWORDLONG value); |
924 | CORINFO_CLASS_HANDLE repGetDefaultEqualityComparerClass(CORINFO_CLASS_HANDLE cls); |
925 | |
926 | void recGetTokenTypeAsHandle(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_CLASS_HANDLE result); |
927 | void dmpGetTokenTypeAsHandle(const GetTokenTypeAsHandleValue& key, DWORDLONG value); |
928 | CORINFO_CLASS_HANDLE repGetTokenTypeAsHandle(CORINFO_RESOLVED_TOKEN* pResolvedToken); |
929 | |
930 | void recGetFieldInfo(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
931 | CORINFO_METHOD_HANDLE callerHandle, |
932 | CORINFO_ACCESS_FLAGS flags, |
933 | CORINFO_FIELD_INFO* pResult); |
934 | void dmpGetFieldInfo(const Agnostic_GetFieldInfo& key, const Agnostic_CORINFO_FIELD_INFO& value); |
935 | void repGetFieldInfo(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
936 | CORINFO_METHOD_HANDLE callerHandle, |
937 | CORINFO_ACCESS_FLAGS flags, |
938 | CORINFO_FIELD_INFO* pResult); |
939 | |
940 | void recEmbedMethodHandle(CORINFO_METHOD_HANDLE handle, void** ppIndirection, CORINFO_METHOD_HANDLE result); |
941 | void dmpEmbedMethodHandle(DWORDLONG key, DLDL value); |
942 | CORINFO_METHOD_HANDLE repEmbedMethodHandle(CORINFO_METHOD_HANDLE handle, void** ppIndirection); |
943 | |
944 | void recGetFieldAddress(CORINFO_FIELD_HANDLE field, void** ppIndirection, void* result, CorInfoType cit); |
945 | void dmpGetFieldAddress(DWORDLONG key, const Agnostic_GetFieldAddress& value); |
946 | void* repGetFieldAddress(CORINFO_FIELD_HANDLE field, void** ppIndirection); |
947 | |
948 | void recGetStaticFieldCurrentClass(CORINFO_FIELD_HANDLE field, bool isSpeculative, CORINFO_CLASS_HANDLE result); |
949 | void dmpGetStaticFieldCurrentClass(DWORDLONG key, const Agnostic_GetStaticFieldCurrentClass& value); |
950 | CORINFO_CLASS_HANDLE repGetStaticFieldCurrentClass(CORINFO_FIELD_HANDLE field, bool* pIsSpeculative); |
951 | |
952 | void recGetClassGClayout(CORINFO_CLASS_HANDLE cls, BYTE* gcPtrs, unsigned len, unsigned result); |
953 | void dmpGetClassGClayout(DWORDLONG key, const Agnostic_GetClassGClayout& value); |
954 | unsigned repGetClassGClayout(CORINFO_CLASS_HANDLE cls, BYTE* gcPtrs); |
955 | |
956 | void recGetClassAlignmentRequirement(CORINFO_CLASS_HANDLE cls, BOOL fDoubleAlignHint, unsigned result); |
957 | void dmpGetClassAlignmentRequirement(DLD key, DWORD value); |
958 | unsigned repGetClassAlignmentRequirement(CORINFO_CLASS_HANDLE cls, BOOL fDoubleAlignHint); |
959 | |
960 | void recCanAccessClass(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
961 | CORINFO_METHOD_HANDLE callerHandle, |
962 | CORINFO_HELPER_DESC* pAccessHelper, |
963 | CorInfoIsAccessAllowedResult result); |
964 | void dmpCanAccessClass(const Agnostic_CanAccessClassIn& key, const Agnostic_CanAccessClassOut& value); |
965 | CorInfoIsAccessAllowedResult repCanAccessClass(CORINFO_RESOLVED_TOKEN* pResolvedToken, |
966 | CORINFO_METHOD_HANDLE callerHandle, |
967 | CORINFO_HELPER_DESC* pAccessHelper); |
968 | |
969 | void recGetCastingHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fThrowing, CorInfoHelpFunc result); |
970 | void dmpGetCastingHelper(const Agnostic_GetCastingHelper& key, DWORD value); |
971 | CorInfoHelpFunc repGetCastingHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fThrowing); |
972 | |
973 | void recEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection, CORINFO_MODULE_HANDLE result); |
974 | void dmpEmbedModuleHandle(DWORDLONG key, DLDL value); |
975 | CORINFO_MODULE_HANDLE repEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection); |
976 | |
977 | void recEmbedClassHandle(CORINFO_CLASS_HANDLE handle, void** ppIndirection, CORINFO_CLASS_HANDLE result); |
978 | void dmpEmbedClassHandle(DWORDLONG key, DLDL value); |
979 | CORINFO_CLASS_HANDLE repEmbedClassHandle(CORINFO_CLASS_HANDLE handle, void** ppIndirection); |
980 | |
981 | void recPInvokeMarshalingRequired(CORINFO_METHOD_HANDLE method, CORINFO_SIG_INFO* callSiteSig, BOOL result); |
982 | void dmpPInvokeMarshalingRequired(const PInvokeMarshalingRequiredValue& key, DWORD value); |
983 | BOOL repPInvokeMarshalingRequired(CORINFO_METHOD_HANDLE method, CORINFO_SIG_INFO* callSiteSig); |
984 | |
985 | void recFindSig(CORINFO_MODULE_HANDLE module, |
986 | unsigned sigTOK, |
987 | CORINFO_CONTEXT_HANDLE context, |
988 | CORINFO_SIG_INFO* sig); |
989 | void dmpFindSig(const Agnostic_FindSig& key, const Agnostic_CORINFO_SIG_INFO& value); |
990 | void repFindSig(CORINFO_MODULE_HANDLE module, |
991 | unsigned sigTOK, |
992 | CORINFO_CONTEXT_HANDLE context, |
993 | CORINFO_SIG_INFO* sig); |
994 | |
995 | void recGetEEInfo(CORINFO_EE_INFO* pEEInfoOut); |
996 | void dmpGetEEInfo(DWORD key, const Agnostic_CORINFO_EE_INFO& value); |
997 | void repGetEEInfo(CORINFO_EE_INFO* pEEInfoOut); |
998 | |
999 | void recGetGSCookie(GSCookie* pCookieVal, GSCookie** ppCookieVal); |
1000 | void dmpGetGSCookie(DWORD key, DLDL value); |
1001 | void repGetGSCookie(GSCookie* pCookieVal, GSCookie** ppCookieVal); |
1002 | |
1003 | void recGetClassModuleIdForStatics(CORINFO_CLASS_HANDLE cls, |
1004 | CORINFO_MODULE_HANDLE* pModule, |
1005 | void** ppIndirection, |
1006 | size_t result); |
1007 | void dmpGetClassModuleIdForStatics(DWORDLONG key, const Agnostic_GetClassModuleIdForStatics& value); |
1008 | size_t repGetClassModuleIdForStatics(CORINFO_CLASS_HANDLE cls, |
1009 | CORINFO_MODULE_HANDLE* pModule, |
1010 | void** ppIndirection); |
1011 | |
1012 | void recGetThreadTLSIndex(void** ppIndirection, DWORD result); |
1013 | void dmpGetThreadTLSIndex(DWORD key, DLD value); |
1014 | DWORD repGetThreadTLSIndex(void** ppIndirection); |
1015 | |
1016 | void recGetInlinedCallFrameVptr(void** ppIndirection, const void* result); |
1017 | void dmpGetInlinedCallFrameVptr(DWORD key, DLDL value); |
1018 | const void* repGetInlinedCallFrameVptr(void** ppIndirection); |
1019 | |
1020 | void recGetAddrOfCaptureThreadGlobal(void** ppIndirection, LONG* result); |
1021 | void dmpGetAddrOfCaptureThreadGlobal(DWORD key, DLDL value); |
1022 | LONG* repGetAddrOfCaptureThreadGlobal(void** ppIndirection); |
1023 | |
1024 | void recGetClassDomainID(CORINFO_CLASS_HANDLE cls, void** ppIndirection, unsigned result); |
1025 | void dmpGetClassDomainID(DWORDLONG key, DLD value); |
1026 | unsigned repGetClassDomainID(CORINFO_CLASS_HANDLE cls, void** ppIndirection); |
1027 | |
1028 | void recGetLocationOfThisType(CORINFO_METHOD_HANDLE context, CORINFO_LOOKUP_KIND* result); |
1029 | void dmpGetLocationOfThisType(DWORDLONG key, const Agnostic_CORINFO_LOOKUP_KIND& value); |
1030 | CORINFO_LOOKUP_KIND repGetLocationOfThisType(CORINFO_METHOD_HANDLE context); |
1031 | |
1032 | void recGetDelegateCtor(CORINFO_METHOD_HANDLE methHnd, |
1033 | CORINFO_CLASS_HANDLE clsHnd, |
1034 | CORINFO_METHOD_HANDLE targetMethodHnd, |
1035 | DelegateCtorArgs* pCtorData, |
1036 | CORINFO_METHOD_HANDLE result); |
1037 | void dmpGetDelegateCtor(const Agnostic_GetDelegateCtorIn& key, const Agnostic_GetDelegateCtorOut& value); |
1038 | CORINFO_METHOD_HANDLE repGetDelegateCtor(CORINFO_METHOD_HANDLE methHnd, |
1039 | CORINFO_CLASS_HANDLE clsHnd, |
1040 | CORINFO_METHOD_HANDLE targetMethodHnd, |
1041 | DelegateCtorArgs* pCtorData); |
1042 | |
1043 | void recGetFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE ftn, CORINFO_CONST_LOOKUP* pResult); |
1044 | void dmpGetFunctionFixedEntryPoint(DWORDLONG key, const Agnostic_CORINFO_CONST_LOOKUP& value); |
1045 | void repGetFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE ftn, CORINFO_CONST_LOOKUP* pResult); |
1046 | |
1047 | void recGetFieldInClass(CORINFO_CLASS_HANDLE clsHnd, INT num, CORINFO_FIELD_HANDLE result); |
1048 | void dmpGetFieldInClass(DLD key, DWORDLONG value); |
1049 | CORINFO_FIELD_HANDLE repGetFieldInClass(CORINFO_CLASS_HANDLE clsHnd, INT num); |
1050 | |
1051 | void recGetFieldType(CORINFO_FIELD_HANDLE field, |
1052 | CORINFO_CLASS_HANDLE* structType, |
1053 | CORINFO_CLASS_HANDLE memberParent, |
1054 | CorInfoType result); |
1055 | void dmpGetFieldType(DLDL key, DLD value); |
1056 | CorInfoType repGetFieldType(CORINFO_FIELD_HANDLE field, |
1057 | CORINFO_CLASS_HANDLE* structType, |
1058 | CORINFO_CLASS_HANDLE memberParent); |
1059 | |
1060 | void recGetFieldName(CORINFO_FIELD_HANDLE ftn, const char** moduleName, const char* result); |
1061 | void dmpGetFieldName(DWORDLONG key, DD value); |
1062 | const char* repGetFieldName(CORINFO_FIELD_HANDLE ftn, const char** moduleName); |
1063 | |
1064 | void recCanInlineTypeCheck(CORINFO_CLASS_HANDLE cls, |
1065 | CorInfoInlineTypeCheckSource source, |
1066 | CorInfoInlineTypeCheck result); |
1067 | void dmpCanInlineTypeCheck(DLD key, DWORD value); |
1068 | CorInfoInlineTypeCheck repCanInlineTypeCheck(CORINFO_CLASS_HANDLE cls, CorInfoInlineTypeCheckSource source); |
1069 | void recCanInlineTypeCheckWithObjectVTable(CORINFO_CLASS_HANDLE cls, BOOL result); |
1070 | void dmpCanInlineTypeCheckWithObjectVTable(DWORDLONG key, DWORD value); |
1071 | BOOL repCanInlineTypeCheckWithObjectVTable(CORINFO_CLASS_HANDLE cls); |
1072 | |
1073 | void recSatisfiesMethodConstraints(CORINFO_CLASS_HANDLE parent, CORINFO_METHOD_HANDLE method, BOOL result); |
1074 | void dmpSatisfiesMethodConstraints(DLDL key, DWORD value); |
1075 | BOOL repSatisfiesMethodConstraints(CORINFO_CLASS_HANDLE parent, CORINFO_METHOD_HANDLE method); |
1076 | |
1077 | void recInitConstraintsForVerification(CORINFO_METHOD_HANDLE method, |
1078 | BOOL* pfHasCircularClassConstraints, |
1079 | BOOL* pfHasCircularMethodConstraint); |
1080 | void dmpInitConstraintsForVerification(DWORDLONG key, DD value); |
1081 | void repInitConstraintsForVerification(CORINFO_METHOD_HANDLE method, |
1082 | BOOL* pfHasCircularClassConstraints, |
1083 | BOOL* pfHasCircularMethodConstraint); |
1084 | |
1085 | void recIsValidStringRef(CORINFO_MODULE_HANDLE module, unsigned metaTOK, BOOL result); |
1086 | void dmpIsValidStringRef(DLD key, DWORD value); |
1087 | BOOL repIsValidStringRef(CORINFO_MODULE_HANDLE module, unsigned metaTOK); |
1088 | |
1089 | void recGetHelperName(CorInfoHelpFunc funcNum, const char* result); |
1090 | void dmpGetHelperName(DWORD key, DWORD value); |
1091 | const char* repGetHelperName(CorInfoHelpFunc funcNum); |
1092 | |
1093 | void recCanCast(CORINFO_CLASS_HANDLE child, CORINFO_CLASS_HANDLE parent, BOOL result); |
1094 | void dmpCanCast(DLDL key, DWORD value); |
1095 | BOOL repCanCast(CORINFO_CLASS_HANDLE child, CORINFO_CLASS_HANDLE parent); |
1096 | |
1097 | void recGetChildType(CORINFO_CLASS_HANDLE clsHnd, CORINFO_CLASS_HANDLE* clsRet, CorInfoType result); |
1098 | void dmpGetChildType(DWORDLONG key, DLD value); |
1099 | CorInfoType repGetChildType(CORINFO_CLASS_HANDLE clsHnd, CORINFO_CLASS_HANDLE* clsRet); |
1100 | |
1101 | void recGetArrayInitializationData(CORINFO_FIELD_HANDLE field, DWORD size, void* result); |
1102 | void dmpGetArrayInitializationData(DLD key, DWORDLONG value); |
1103 | void* repGetArrayInitializationData(CORINFO_FIELD_HANDLE field, DWORD size); |
1104 | |
1105 | void recFilterException(struct _EXCEPTION_POINTERS* pExceptionPointers, int result); |
1106 | void dmpFilterException(DWORD key, DWORD value); |
1107 | int repFilterException(struct _EXCEPTION_POINTERS* pExceptionPointers); |
1108 | |
1109 | void recHandleException(struct _EXCEPTION_POINTERS* pExceptionPointers); |
1110 | void dmpHandleException(DWORD key, DWORD value); |
1111 | |
1112 | void recGetAddressOfPInvokeFixup(CORINFO_METHOD_HANDLE method, void** ppIndirection, void* result); |
1113 | void dmpGetAddressOfPInvokeFixup(DWORDLONG key, DLDL value); |
1114 | void* repGetAddressOfPInvokeFixup(CORINFO_METHOD_HANDLE method, void** ppIndirection); |
1115 | |
1116 | void recGetAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP* pLookup); |
1117 | void dmpGetAddressOfPInvokeTarget(DWORDLONG key, DLD value); |
1118 | void repGetAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP* pLookup); |
1119 | |
1120 | void recSatisfiesClassConstraints(CORINFO_CLASS_HANDLE cls, BOOL result); |
1121 | void dmpSatisfiesClassConstraints(DWORDLONG key, DWORD value); |
1122 | BOOL repSatisfiesClassConstraints(CORINFO_CLASS_HANDLE cls); |
1123 | |
1124 | void recGetMethodHash(CORINFO_METHOD_HANDLE ftn, unsigned result); |
1125 | void dmpGetMethodHash(DWORDLONG key, DWORD value); |
1126 | unsigned repGetMethodHash(CORINFO_METHOD_HANDLE ftn); |
1127 | |
1128 | void recCanTailCall(CORINFO_METHOD_HANDLE callerHnd, |
1129 | CORINFO_METHOD_HANDLE declaredCalleeHnd, |
1130 | CORINFO_METHOD_HANDLE exactCalleeHnd, |
1131 | bool fIsTailPrefix, |
1132 | bool result); |
1133 | void dmpCanTailCall(const Agnostic_CanTailCall& key, DWORD value); |
1134 | bool repCanTailCall(CORINFO_METHOD_HANDLE callerHnd, |
1135 | CORINFO_METHOD_HANDLE declaredCalleeHnd, |
1136 | CORINFO_METHOD_HANDLE exactCalleeHnd, |
1137 | bool fIsTailPrefix); |
1138 | |
1139 | void recIsCompatibleDelegate(CORINFO_CLASS_HANDLE objCls, |
1140 | CORINFO_CLASS_HANDLE methodParentCls, |
1141 | CORINFO_METHOD_HANDLE method, |
1142 | CORINFO_CLASS_HANDLE delegateCls, |
1143 | BOOL* pfIsOpenDelegate, |
1144 | BOOL result); |
1145 | void dmpIsCompatibleDelegate(const Agnostic_IsCompatibleDelegate& key, DD value); |
1146 | BOOL repIsCompatibleDelegate(CORINFO_CLASS_HANDLE objCls, |
1147 | CORINFO_CLASS_HANDLE methodParentCls, |
1148 | CORINFO_METHOD_HANDLE method, |
1149 | CORINFO_CLASS_HANDLE delegateCls, |
1150 | BOOL* pfIsOpenDelegate); |
1151 | |
1152 | void recIsDelegateCreationAllowed(CORINFO_CLASS_HANDLE delegateHnd, CORINFO_METHOD_HANDLE calleeHnd, BOOL result); |
1153 | void dmpIsDelegateCreationAllowed(DLDL key, DWORD value); |
1154 | BOOL repIsDelegateCreationAllowed(CORINFO_CLASS_HANDLE delegateHnd, CORINFO_METHOD_HANDLE calleeHnd); |
1155 | |
1156 | void recCanSkipMethodVerification(CORINFO_METHOD_HANDLE ftnHandle, |
1157 | BOOL skip, |
1158 | CorInfoCanSkipVerificationResult result); |
1159 | void dmpCanSkipMethodVerification(DLD key, DWORD value); |
1160 | CorInfoCanSkipVerificationResult repCanSkipMethodVerification(CORINFO_METHOD_HANDLE ftnHandle, BOOL skip); |
1161 | |
1162 | void recFindCallSiteSig(CORINFO_MODULE_HANDLE module, |
1163 | unsigned methTOK, |
1164 | CORINFO_CONTEXT_HANDLE context, |
1165 | CORINFO_SIG_INFO* sig); |
1166 | void dmpFindCallSiteSig(const Agnostic_FindCallSiteSig& key, const Agnostic_CORINFO_SIG_INFO& value); |
1167 | void repFindCallSiteSig(CORINFO_MODULE_HANDLE module, |
1168 | unsigned methTOK, |
1169 | CORINFO_CONTEXT_HANDLE context, |
1170 | CORINFO_SIG_INFO* sig); |
1171 | |
1172 | void recShouldEnforceCallvirtRestriction(CORINFO_MODULE_HANDLE scope, BOOL result); |
1173 | void dmpShouldEnforceCallvirtRestriction(DWORDLONG key, DWORD value); |
1174 | BOOL repShouldEnforceCallvirtRestriction(CORINFO_MODULE_HANDLE scope); |
1175 | |
1176 | void recGetMethodSync(CORINFO_METHOD_HANDLE ftn, void** ppIndirection, void* result); |
1177 | void dmpGetMethodSync(DWORDLONG key, DLDL value); |
1178 | void* repGetMethodSync(CORINFO_METHOD_HANDLE ftn, void** ppIndirection); |
1179 | |
1180 | void recGetVarArgsHandle(CORINFO_SIG_INFO* pSig, void** ppIndirection, CORINFO_VARARGS_HANDLE result); |
1181 | void dmpGetVarArgsHandle(const GetVarArgsHandleValue& key, DLDL value); |
1182 | CORINFO_VARARGS_HANDLE repGetVarArgsHandle(CORINFO_SIG_INFO* pSig, void** ppIndirection); |
1183 | |
1184 | void recCanGetVarArgsHandle(CORINFO_SIG_INFO* pSig, bool result); |
1185 | void dmpCanGetVarArgsHandle(const CanGetVarArgsHandleValue& key, DWORD value); |
1186 | bool repCanGetVarArgsHandle(CORINFO_SIG_INFO* pSig); |
1187 | |
1188 | void recGetFieldThreadLocalStoreID(CORINFO_FIELD_HANDLE field, void** ppIndirection, DWORD result); |
1189 | void dmpGetFieldThreadLocalStoreID(DWORDLONG key, DLD value); |
1190 | DWORD repGetFieldThreadLocalStoreID(CORINFO_FIELD_HANDLE field, void** ppIndirection); |
1191 | |
1192 | void recGetBBProfileData(CORINFO_METHOD_HANDLE ftnHnd, |
1193 | ULONG* count, |
1194 | ICorJitInfo::ProfileBuffer** profileBuffer, |
1195 | ULONG* numRuns, |
1196 | HRESULT result); |
1197 | void dmpGetBBProfileData(DWORDLONG key, const Agnostic_GetBBProfileData& value); |
1198 | HRESULT repGetBBProfileData(CORINFO_METHOD_HANDLE ftnHnd, |
1199 | ULONG* count, |
1200 | ICorJitInfo::ProfileBuffer** profileBuffer, |
1201 | ULONG* numRuns); |
1202 | |
1203 | void recMergeClasses(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2, CORINFO_CLASS_HANDLE result); |
1204 | void dmpMergeClasses(DLDL key, DWORDLONG value); |
1205 | CORINFO_CLASS_HANDLE repMergeClasses(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2); |
1206 | |
1207 | void recGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, void** ppIndirection, LPVOID result); |
1208 | void dmpGetCookieForPInvokeCalliSig(const GetCookieForPInvokeCalliSigValue& key, DLDL value); |
1209 | LPVOID repGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, void** ppIndirection); |
1210 | |
1211 | void recCanGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, bool result); |
1212 | void dmpCanGetCookieForPInvokeCalliSig(const CanGetCookieForPInvokeCalliSigValue& key, DWORD value); |
1213 | bool repCanGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig); |
1214 | |
1215 | void recCanAccessFamily(CORINFO_METHOD_HANDLE hCaller, CORINFO_CLASS_HANDLE hInstanceType, BOOL result); |
1216 | void dmpCanAccessFamily(DLDL key, DWORD value); |
1217 | BOOL repCanAccessFamily(CORINFO_METHOD_HANDLE hCaller, CORINFO_CLASS_HANDLE hInstanceType); |
1218 | |
1219 | void recErrorList(const char* error); |
1220 | void dmpErrorList(DWORD key, DWORD value); |
1221 | |
1222 | void recGetProfilingHandle(BOOL* pbHookFunction, void** pProfilerHandle, BOOL* pbIndirectedHandles); |
1223 | void dmpGetProfilingHandle(DWORD key, const Agnostic_GetProfilingHandle& value); |
1224 | void repGetProfilingHandle(BOOL* pbHookFunction, void** pProfilerHandle, BOOL* pbIndirectedHandles); |
1225 | |
1226 | void recEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection, CORINFO_FIELD_HANDLE result); |
1227 | void dmpEmbedFieldHandle(DWORDLONG key, DLDL value); |
1228 | CORINFO_FIELD_HANDLE repEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection); |
1229 | |
1230 | void recAreTypesEquivalent(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2, BOOL result); |
1231 | void dmpAreTypesEquivalent(DLDL key, DWORD value); |
1232 | BOOL repAreTypesEquivalent(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2); |
1233 | |
1234 | void recCompareTypesForCast(CORINFO_CLASS_HANDLE fromClass, CORINFO_CLASS_HANDLE toClass, TypeCompareState result); |
1235 | void dmpCompareTypesForCast(DLDL key, DWORD value); |
1236 | TypeCompareState repCompareTypesForCast(CORINFO_CLASS_HANDLE fromClass, CORINFO_CLASS_HANDLE toClass); |
1237 | |
1238 | void recCompareTypesForEquality(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2, TypeCompareState result); |
1239 | void dmpCompareTypesForEquality(DLDL key, DWORD value); |
1240 | TypeCompareState repCompareTypesForEquality(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2); |
1241 | |
1242 | void recFindNameOfToken( |
1243 | CORINFO_MODULE_HANDLE module, mdToken metaTOK, char* szFQName, size_t FQNameCapacity, size_t result); |
1244 | void dmpFindNameOfToken(DLD key, DLD value); |
1245 | size_t repFindNameOfToken(CORINFO_MODULE_HANDLE module, mdToken metaTOK, char* szFQName, size_t FQNameCapacity); |
1246 | |
1247 | void recGetSystemVAmd64PassStructInRegisterDescriptor( |
1248 | CORINFO_CLASS_HANDLE structHnd, |
1249 | SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr, |
1250 | bool result); |
1251 | void dmpGetSystemVAmd64PassStructInRegisterDescriptor( |
1252 | DWORDLONG key, const Agnostic_GetSystemVAmd64PassStructInRegisterDescriptor& value); |
1253 | bool repGetSystemVAmd64PassStructInRegisterDescriptor( |
1254 | CORINFO_CLASS_HANDLE structHnd, SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr); |
1255 | |
1256 | void recGetRelocTypeHint(void* target, WORD result); |
1257 | void dmpGetRelocTypeHint(DWORDLONG key, DWORD value); |
1258 | WORD repGetRelocTypeHint(void* target); |
1259 | |
1260 | void recIsWriteBarrierHelperRequired(CORINFO_FIELD_HANDLE field, bool result); |
1261 | void dmpIsWriteBarrierHelperRequired(DWORDLONG key, DWORD value); |
1262 | bool repIsWriteBarrierHelperRequired(CORINFO_FIELD_HANDLE field); |
1263 | |
1264 | void recIsValidToken(CORINFO_MODULE_HANDLE module, unsigned metaTOK, BOOL result); |
1265 | void dmpIsValidToken(DLD key, DWORD value); |
1266 | BOOL repIsValidToken(CORINFO_MODULE_HANDLE module, unsigned metaTOK); |
1267 | |
1268 | void recGetClassName(CORINFO_CLASS_HANDLE cls, const char* result); |
1269 | void dmpGetClassName(DWORDLONG key, DWORD value); |
1270 | const char* repGetClassName(CORINFO_CLASS_HANDLE cls); |
1271 | |
1272 | void recGetClassNameFromMetadata(CORINFO_CLASS_HANDLE cls, char* className, const char** namespaceName); |
1273 | void dmpGetClassNameFromMetadata(DLD key, DD value); |
1274 | const char* repGetClassNameFromMetadata(CORINFO_CLASS_HANDLE cls, const char** namespaceName); |
1275 | |
1276 | void recGetTypeInstantiationArgument(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result, unsigned index); |
1277 | void dmpGetTypeInstantiationArgument(DWORDLONG key, DWORDLONG value); |
1278 | CORINFO_CLASS_HANDLE repGetTypeInstantiationArgument(CORINFO_CLASS_HANDLE cls, unsigned index); |
1279 | |
1280 | void recAppendClassName( |
1281 | CORINFO_CLASS_HANDLE cls, BOOL fNamespace, BOOL fFullInst, BOOL fAssembly, const WCHAR* result); |
1282 | void dmpAppendClassName(const Agnostic_AppendClassName& key, DWORD value); |
1283 | const WCHAR* repAppendClassName(CORINFO_CLASS_HANDLE cls, BOOL fNamespace, BOOL fFullInst, BOOL fAssembly); |
1284 | |
1285 | void recGetTailCallCopyArgsThunk(CORINFO_SIG_INFO* pSig, CorInfoHelperTailCallSpecialHandling flags, void* result); |
1286 | void dmpGetTailCallCopyArgsThunk(const Agnostic_GetTailCallCopyArgsThunk& key, DWORDLONG value); |
1287 | void* repGetTailCallCopyArgsThunk(CORINFO_SIG_INFO* pSig, CorInfoHelperTailCallSpecialHandling flags); |
1288 | |
1289 | void recGetMethodDefFromMethod(CORINFO_METHOD_HANDLE hMethod, mdMethodDef result); |
1290 | void dmpGetMethodDefFromMethod(DWORDLONG key, DWORD value); |
1291 | mdMethodDef repGetMethodDefFromMethod(CORINFO_METHOD_HANDLE hMethod); |
1292 | |
1293 | void recCheckMethodModifier(CORINFO_METHOD_HANDLE hMethod, LPCSTR modifier, BOOL fOptional, BOOL result); |
1294 | void dmpCheckMethodModifier(const Agnostic_CheckMethodModifier& key, DWORD value); |
1295 | BOOL repCheckMethodModifier(CORINFO_METHOD_HANDLE hMethod, LPCSTR modifier, BOOL fOptional); |
1296 | |
1297 | void recGetPInvokeUnmanagedTarget(CORINFO_METHOD_HANDLE method, void** ppIndirection, void* result); |
1298 | void dmpGetPInvokeUnmanagedTarget(DWORDLONG key, DLDL value); |
1299 | void* repGetPInvokeUnmanagedTarget(CORINFO_METHOD_HANDLE method, void** ppIndirection); |
1300 | |
1301 | void recGetArrayRank(CORINFO_CLASS_HANDLE cls, unsigned result); |
1302 | void dmpGetArrayRank(DWORDLONG key, DWORD value); |
1303 | unsigned repGetArrayRank(CORINFO_CLASS_HANDLE cls); |
1304 | |
1305 | void recIsFieldStatic(CORINFO_FIELD_HANDLE fhld, bool result); |
1306 | void dmpIsFieldStatic(DWORDLONG key, DWORD value); |
1307 | bool repIsFieldStatic(CORINFO_FIELD_HANDLE fhld); |
1308 | |
1309 | void recGetIntConfigValue(const wchar_t* name, int defaultValue, int result); |
1310 | void dmpGetIntConfigValue(const Agnostic_ConfigIntInfo& key, int value); |
1311 | int repGetIntConfigValue(const wchar_t* name, int defaultValue); |
1312 | |
1313 | void recGetStringConfigValue(const wchar_t* name, const wchar_t* result); |
1314 | void dmpGetStringConfigValue(DWORD nameIndex, DWORD result); |
1315 | const wchar_t* repGetStringConfigValue(const wchar_t* name); |
1316 | |
1317 | struct Environment |
1318 | { |
1319 | Environment() : getIntConfigValue(nullptr), getStingConfigValue(nullptr) |
1320 | { |
1321 | } |
1322 | |
1323 | LightWeightMap<MethodContext::Agnostic_ConfigIntInfo, DWORD>* getIntConfigValue; |
1324 | LightWeightMap<DWORD, DWORD>* getStingConfigValue; |
1325 | }; |
1326 | |
1327 | Environment cloneEnvironment(); |
1328 | |
1329 | bool WasEnvironmentChanged(const Environment& prevEnv); |
1330 | |
1331 | CompileResult* cr; |
1332 | CompileResult* originalCR; |
1333 | int index; |
1334 | |
1335 | private: |
1336 | bool (const Environment& prevEnv); |
1337 | bool IsEnvironmentContentEqual(const Environment& prevEnv); |
1338 | |
1339 | template <typename key, typename value> |
1340 | static bool (LightWeightMap<key, value>* prev, LightWeightMap<key, value>* curr); |
1341 | static bool IsIntConfigContentEqual(LightWeightMap<Agnostic_ConfigIntInfo, DWORD>* prev, |
1342 | LightWeightMap<Agnostic_ConfigIntInfo, DWORD>* curr); |
1343 | static bool IsStringContentEqual(LightWeightMap<DWORD, DWORD>* prev, LightWeightMap<DWORD, DWORD>* curr); |
1344 | |
1345 | #define LWM(map, key, value) LightWeightMap<key, value>* map; |
1346 | #define DENSELWM(map, value) DenseLightWeightMap<value>* map; |
1347 | #include "lwmlist.h" |
1348 | }; |
1349 | |
1350 | // ********************* Please keep this up-to-date to ease adding more *************** |
1351 | // Highest packet number: 173 |
1352 | // ************************************************************************************* |
1353 | enum mcPackets |
1354 | { |
1355 | Packet_AppendClassName = 149, // Added 8/6/2014 - needed for SIMD |
1356 | Packet_AreTypesEquivalent = 1, |
1357 | Packet_AsCorInfoType = 2, |
1358 | Packet_CanAccessClass = 3, |
1359 | Packet_CanAccessFamily = 4, |
1360 | Packet_CanCast = 5, |
1361 | Retired8 = 6, |
1362 | Packet_GetLazyStringLiteralHelper = 147, // Added 12/20/2013 - as a replacement for CanEmbedModuleHandleForHelper |
1363 | Packet_CanGetCookieForPInvokeCalliSig = 7, |
1364 | Packet_CanGetVarArgsHandle = 8, |
1365 | Packet_CanInline = 9, |
1366 | Packet_CanInlineTypeCheck = 173, // Added 11/15/2018 as a replacement for CanInlineTypeCheckWithObjectVTable |
1367 | Packet_CanInlineTypeCheckWithObjectVTable = 10, |
1368 | Packet_CanSkipMethodVerification = 11, |
1369 | Packet_CanTailCall = 12, |
1370 | Retired4 = 13, |
1371 | Packet_CheckMethodModifier = 142, // retired as 13 on 2013/07/04 |
1372 | Retired3 = 14, |
1373 | Retired5 = 141, // retired as 14 on 2013/07/03 |
1374 | Packet_CompareTypesForCast = 163, // Added 10/4/17 |
1375 | Packet_CompareTypesForEquality = 164, // Added 10/4/17 |
1376 | Packet_CompileMethod = 143, // retired as 141 on 2013/07/09 |
1377 | Packet_ConstructStringLiteral = 15, |
1378 | Packet_ConvertPInvokeCalliToCall = 169, // Added 4/29/18 |
1379 | Packet_EmbedClassHandle = 16, |
1380 | Packet_EmbedFieldHandle = 17, |
1381 | Packet_EmbedGenericHandle = 18, |
1382 | Packet_EmbedMethodHandle = 19, |
1383 | Packet_EmbedModuleHandle = 20, |
1384 | Packet_EmptyStringLiteral = 21, |
1385 | Retired9 = 136, |
1386 | Packet_ErrorList = 22, |
1387 | Packet_FilterException = 134, |
1388 | Packet_FindCallSiteSig = 23, |
1389 | Retired7 = 24, |
1390 | Packet_FindNameOfToken = 145, // Added 7/19/2013 - adjusted members to proper types |
1391 | Packet_GetSystemVAmd64PassStructInRegisterDescriptor = 156, // Added 2/17/2016 |
1392 | Packet_FindSig = 25, |
1393 | Packet_GetAddressOfPInvokeFixup = 26, |
1394 | Packet_GetAddressOfPInvokeTarget = 153, // Added 2/3/2016 |
1395 | Packet_GetAddrOfCaptureThreadGlobal = 27, |
1396 | Retired1 = 28, |
1397 | Packet_GetArgClass = 139, // retired as 28 on 2013/07/03 |
1398 | Packet_GetHFAType = 159, |
1399 | Packet_GetArgNext = 29, |
1400 | Retired2 = 30, |
1401 | Packet_GetArgType = 140, // retired as 30 on 2013/07/03 |
1402 | Packet_GetArrayInitializationData = 31, |
1403 | Packet_GetArrayRank = 32, |
1404 | Packet_GetBBProfileData = 33, |
1405 | Packet_GetBoundaries = 34, |
1406 | Packet_GetBoxHelper = 35, |
1407 | Packet_GetBuiltinClass = 36, |
1408 | Packet_GetCallInfo = 37, |
1409 | Packet_GetCastingHelper = 38, |
1410 | Packet_GetChildType = 39, |
1411 | Packet_GetClassAlignmentRequirement = 40, |
1412 | Packet_GetClassAttribs = 41, |
1413 | Packet_GetClassDomainID = 42, |
1414 | Packet_GetClassGClayout = 43, |
1415 | Packet_GetClassModuleIdForStatics = 44, |
1416 | Packet_GetClassName = 45, |
1417 | Packet_GetClassNameFromMetadata = 166, // Added 12/4/17 |
1418 | Packet_GetTypeInstantiationArgument = 167, // Added 12/4/17 |
1419 | Packet_GetClassNumInstanceFields = 46, |
1420 | Packet_GetClassSize = 47, |
1421 | Packet_GetHeapClassSize = 170, // Added 10/5/2018 |
1422 | Packet_CanAllocateOnStack = 171, // Added 10/5/2018 |
1423 | Packet_GetIntConfigValue = 151, // Added 2/12/2015 |
1424 | Packet_GetStringConfigValue = 152, // Added 2/12/2015 |
1425 | Packet_GetCookieForPInvokeCalliSig = 48, |
1426 | Packet_GetDefaultEqualityComparerClass = 162, // Added 9/24/2017 |
1427 | Packet_GetDelegateCtor = 49, |
1428 | Packet_GetEEInfo = 50, |
1429 | Packet_GetEHinfo = 51, |
1430 | Packet_GetFieldAddress = 52, |
1431 | Packet_GetStaticFieldCurrentClass = 172, // Added 11/7/2018 |
1432 | Packet_GetFieldClass = 53, |
1433 | Packet_GetFieldInClass = 54, |
1434 | Packet_GetFieldInfo = 55, |
1435 | Packet_GetFieldName = 56, |
1436 | Packet_GetFieldOffset = 57, |
1437 | Packet_GetFieldThreadLocalStoreID = 58, |
1438 | Packet_GetFieldType = 59, |
1439 | Packet_GetFunctionEntryPoint = 60, |
1440 | Packet_GetFunctionFixedEntryPoint = 61, |
1441 | Packet_GetGSCookie = 62, |
1442 | Packet_GetHelperFtn = 63, |
1443 | Packet_GetHelperName = 64, |
1444 | Packet_GetInlinedCallFrameVptr = 65, |
1445 | Packet_GetIntrinsicID = 66, |
1446 | Packet_GetJitFlags = 154, // Added 2/3/2016 |
1447 | Packet_GetJitTimeLogFilename = 67, |
1448 | Packet_GetJustMyCodeHandle = 68, |
1449 | Packet_GetLocationOfThisType = 69, |
1450 | Packet_GetMethodAttribs = 70, |
1451 | Packet_GetMethodClass = 71, |
1452 | Packet_GetMethodDefFromMethod = 72, |
1453 | Packet_GetMethodHash = 73, |
1454 | Packet_GetMethodInfo = 74, |
1455 | Packet_GetMethodName = 75, |
1456 | Packet_GetMethodNameFromMetadata = 161, // Added 9/6/17 |
1457 | Packet_GetMethodSig = 76, |
1458 | Packet_GetMethodSync = 77, |
1459 | Packet_GetMethodVTableOffset = 78, |
1460 | Packet_GetNewArrHelper = 79, |
1461 | Packet_GetNewHelper = 80, |
1462 | Packet_GetParentType = 81, |
1463 | Packet_GetPInvokeUnmanagedTarget = 82, |
1464 | Packet_GetProfilingHandle = 83, |
1465 | Packet_GetRelocTypeHint = 84, |
1466 | Packet_GetSecurityPrologHelper = 85, |
1467 | Packet_GetSharedCCtorHelper = 86, |
1468 | Packet_GetTailCallCopyArgsThunk = 87, |
1469 | Packet_GetThreadTLSIndex = 88, |
1470 | Packet_GetTokenTypeAsHandle = 89, |
1471 | Packet_GetTypeForBox = 90, |
1472 | Packet_GetTypeForPrimitiveValueClass = 91, |
1473 | Packet_GetTypeForPrimitiveNumericClass = 168, // Added 12/7/2017 |
1474 | Packet_GetUnboxedEntry = 165, // Added 10/26/17 |
1475 | Packet_GetUnBoxHelper = 92, |
1476 | Packet_GetReadyToRunHelper = 150, // Added 10/10/2014 |
1477 | Packet_GetReadyToRunDelegateCtorHelper = 157, // Added 3/30/2016 |
1478 | Packet_GetUnmanagedCallConv = 94, |
1479 | Packet_GetVarArgsHandle = 95, |
1480 | Packet_GetVars = 96, |
1481 | Packet_HandleException = 135, |
1482 | Packet_InitClass = 97, |
1483 | Packet_InitConstraintsForVerification = 98, |
1484 | Packet_IsCompatibleDelegate = 99, |
1485 | Packet_IsDelegateCreationAllowed = 155, |
1486 | Packet_IsFieldStatic = 137, // Added 4/9/2013 - needed for 4.5.1 |
1487 | Packet_IsInSIMDModule = 148, // Added 6/18/2014 - SIMD support |
1488 | Packet_IsInstantiationOfVerifiedGeneric = 100, |
1489 | Packet_IsSDArray = 101, |
1490 | Packet_IsStructRequiringStackAllocRetBuf = 102, |
1491 | Packet_IsValidStringRef = 103, |
1492 | Retired6 = 104, |
1493 | Packet_IsValidToken = 144, // Added 7/19/2013 - adjusted members to proper types |
1494 | Packet_IsValueClass = 105, |
1495 | Packet_IsWriteBarrierHelperRequired = 106, |
1496 | Packet_MergeClasses = 107, |
1497 | Packet_PInvokeMarshalingRequired = 108, |
1498 | Packet_ResolveToken = 109, |
1499 | Packet_ResolveVirtualMethod = 160, // Added 2/13/17 |
1500 | Packet_TryResolveToken = 158, // Added 4/26/2016 |
1501 | Packet_SatisfiesClassConstraints = 110, |
1502 | Packet_SatisfiesMethodConstraints = 111, |
1503 | Packet_ShouldEnforceCallvirtRestriction = 112, |
1504 | |
1505 | PacketCR_AddressMap = 113, |
1506 | PacketCR_AllocBBProfileBuffer = 131, |
1507 | PacketCR_AllocGCInfo = 114, |
1508 | PacketCR_AllocMem = 115, |
1509 | PacketCR_AllocUnwindInfo = 132, |
1510 | PacketCR_AssertLog = 138, // Added 6/10/2013 - added to nicely support ilgen |
1511 | PacketCR_CallLog = 116, |
1512 | PacketCR_ClassMustBeLoadedBeforeCodeIsRun = 117, |
1513 | PacketCR_CompileMethod = 118, |
1514 | PacketCR_MessageLog = 119, |
1515 | PacketCR_MethodMustBeLoadedBeforeCodeIsRun = 120, |
1516 | PacketCR_ProcessName = 121, |
1517 | PacketCR_RecordRelocation = 122, |
1518 | PacketCR_ReportFatalError = 123, |
1519 | PacketCR_ReportInliningDecision = 124, |
1520 | PacketCR_ReportTailCallDecision = 125, |
1521 | PacketCR_ReserveUnwindInfo = 133, |
1522 | PacketCR_SetBoundaries = 126, |
1523 | PacketCR_SetEHcount = 127, |
1524 | PacketCR_SetEHinfo = 128, |
1525 | PacketCR_SetMethodAttribs = 129, |
1526 | PacketCR_SetVars = 130, |
1527 | PacketCR_RecordCallSite = 146, // Added 10/28/2013 - to support indirect calls |
1528 | }; |
1529 | |
1530 | #endif |
1531 | |