il2cpp-class-internals.h
21.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
#pragma once
#include "il2cpp-config.h"
#if !IL2CPP_TINY_WITHOUT_DEBUGGER
#include <stdint.h>
#include "il2cpp-runtime-metadata.h"
#include "il2cpp-metadata.h"
#include "il2cpp-pinvoke-support.h"
#define THREAD_LOCAL_STATIC_MASK (int32_t)0x80000000
#define IL2CPP_CLASS_IS_ARRAY(c) ((c)->rank)
typedef struct Il2CppClass Il2CppClass;
typedef struct Il2CppGuid Il2CppGuid;
typedef struct Il2CppImage Il2CppImage;
typedef struct Il2CppAppDomain Il2CppAppDomain;
typedef struct Il2CppAppDomainSetup Il2CppAppDomainSetup;
typedef struct Il2CppDelegate Il2CppDelegate;
typedef struct Il2CppAppContext Il2CppAppContext;
typedef struct Il2CppNameToTypeDefinitionIndexHashTable Il2CppNameToTypeDefinitionIndexHashTable;
typedef struct Il2CppCodeGenModule Il2CppCodeGenModule;
#if RUNTIME_MONO
#if defined(__cplusplus)
extern "C"
{
#endif // __cplusplus
#include <mono/metadata/metadata.h>
#if defined(__cplusplus)
}
#endif // __cplusplus
#endif
typedef struct VirtualInvokeData
{
Il2CppMethodPointer methodPtr;
#if RUNTIME_MONO
const MonoMethod* method;
#else
const MethodInfo* method;
#endif
} VirtualInvokeData;
typedef enum Il2CppTypeNameFormat
{
IL2CPP_TYPE_NAME_FORMAT_IL,
IL2CPP_TYPE_NAME_FORMAT_REFLECTION,
IL2CPP_TYPE_NAME_FORMAT_FULL_NAME,
IL2CPP_TYPE_NAME_FORMAT_ASSEMBLY_QUALIFIED
} Il2CppTypeNameFormat;
typedef struct Il2CppDefaults
{
Il2CppImage *corlib;
Il2CppClass *object_class;
Il2CppClass *byte_class;
Il2CppClass *void_class;
Il2CppClass *boolean_class;
Il2CppClass *sbyte_class;
Il2CppClass *int16_class;
Il2CppClass *uint16_class;
Il2CppClass *int32_class;
Il2CppClass *uint32_class;
Il2CppClass *int_class;
Il2CppClass *uint_class;
Il2CppClass *int64_class;
Il2CppClass *uint64_class;
Il2CppClass *single_class;
Il2CppClass *double_class;
Il2CppClass *char_class;
Il2CppClass *string_class;
Il2CppClass *enum_class;
Il2CppClass *array_class;
Il2CppClass *delegate_class;
Il2CppClass *multicastdelegate_class;
Il2CppClass *asyncresult_class;
Il2CppClass *manualresetevent_class;
Il2CppClass *typehandle_class;
Il2CppClass *fieldhandle_class;
Il2CppClass *methodhandle_class;
Il2CppClass *systemtype_class;
Il2CppClass *monotype_class;
Il2CppClass *exception_class;
Il2CppClass *threadabortexception_class;
Il2CppClass *thread_class;
Il2CppClass *internal_thread_class;
/*Il2CppClass *transparent_proxy_class;
Il2CppClass *real_proxy_class;
Il2CppClass *mono_method_message_class;*/
Il2CppClass *appdomain_class;
Il2CppClass *appdomain_setup_class;
Il2CppClass *field_info_class;
Il2CppClass *method_info_class;
Il2CppClass *property_info_class;
Il2CppClass *event_info_class;
Il2CppClass *mono_event_info_class;
Il2CppClass *stringbuilder_class;
/*Il2CppClass *math_class;*/
Il2CppClass *stack_frame_class;
Il2CppClass *stack_trace_class;
Il2CppClass *marshal_class;
/*Il2CppClass *iserializeable_class;
Il2CppClass *serializationinfo_class;
Il2CppClass *streamingcontext_class;*/
Il2CppClass *typed_reference_class;
/*Il2CppClass *argumenthandle_class;*/
Il2CppClass *marshalbyrefobject_class;
/*Il2CppClass *monitor_class;
Il2CppClass *iremotingtypeinfo_class;
Il2CppClass *runtimesecurityframe_class;
Il2CppClass *executioncontext_class;
Il2CppClass *internals_visible_class;*/
Il2CppClass *generic_ilist_class;
Il2CppClass *generic_icollection_class;
Il2CppClass *generic_ienumerable_class;
Il2CppClass *generic_ireadonlylist_class;
Il2CppClass *generic_ireadonlycollection_class;
Il2CppClass *runtimetype_class;
Il2CppClass *generic_nullable_class;
/*Il2CppClass *variant_class;
Il2CppClass *com_object_class;*/
Il2CppClass *il2cpp_com_object_class;
/*Il2CppClass *com_interop_proxy_class;
Il2CppClass *iunknown_class;
Il2CppClass *idispatch_class;
Il2CppClass *safehandle_class;
Il2CppClass *handleref_class;*/
Il2CppClass *attribute_class;
Il2CppClass *customattribute_data_class;
//Il2CppClass *critical_finalizer_object;
Il2CppClass *version;
Il2CppClass *culture_info;
Il2CppClass *async_call_class;
Il2CppClass *assembly_class;
Il2CppClass *mono_assembly_class;
Il2CppClass *assembly_name_class;
Il2CppClass *mono_field_class;
Il2CppClass *mono_method_class;
Il2CppClass *mono_method_info_class;
Il2CppClass *mono_property_info_class;
Il2CppClass *parameter_info_class;
Il2CppClass *mono_parameter_info_class;
Il2CppClass *module_class;
Il2CppClass *pointer_class;
Il2CppClass *system_exception_class;
Il2CppClass *argument_exception_class;
Il2CppClass *wait_handle_class;
Il2CppClass *safe_handle_class;
Il2CppClass *sort_key_class;
Il2CppClass *dbnull_class;
Il2CppClass *error_wrapper_class;
Il2CppClass *missing_class;
Il2CppClass *value_type_class;
// Stuff used by the mono code
Il2CppClass *threadpool_wait_callback_class;
MethodInfo *threadpool_perform_wait_callback_method;
Il2CppClass *mono_method_message_class;
// Windows.Foundation.IReference`1<T>
Il2CppClass* ireference_class;
// Windows.Foundation.IReferenceArray`1<T>
Il2CppClass* ireferencearray_class;
// Windows.Foundation.Collections.IKeyValuePair`2<K, V>
Il2CppClass* ikey_value_pair_class;
// System.Collections.Generic.KeyValuePair`2<K, V>
Il2CppClass* key_value_pair_class;
// Windows.Foundation.Uri
Il2CppClass* windows_foundation_uri_class;
// Windows.Foundation.IUriRuntimeClass
Il2CppClass* windows_foundation_iuri_runtime_class_class;
// System.Uri
Il2CppClass* system_uri_class;
// System.Guid
Il2CppClass* system_guid_class;
Il2CppClass* sbyte_shared_enum;
Il2CppClass* int16_shared_enum;
Il2CppClass* int32_shared_enum;
Il2CppClass* int64_shared_enum;
Il2CppClass* byte_shared_enum;
Il2CppClass* uint16_shared_enum;
Il2CppClass* uint32_shared_enum;
Il2CppClass* uint64_shared_enum;
} Il2CppDefaults;
extern LIBIL2CPP_CODEGEN_API Il2CppDefaults il2cpp_defaults;
struct Il2CppClass;
struct MethodInfo;
struct FieldInfo;
struct Il2CppObject;
struct MemberInfo;
typedef struct CustomAttributesCache
{
int count;
Il2CppObject** attributes;
} CustomAttributesCache;
typedef void (*CustomAttributesCacheGenerator)(CustomAttributesCache*);
#ifndef THREAD_STATIC_FIELD_OFFSET
#define THREAD_STATIC_FIELD_OFFSET -1
#endif
typedef struct FieldInfo
{
const char* name;
const Il2CppType* type;
Il2CppClass *parent;
int32_t offset; // If offset is -1, then it's thread static
uint32_t token;
} FieldInfo;
typedef struct PropertyInfo
{
Il2CppClass *parent;
const char *name;
const MethodInfo *get;
const MethodInfo *set;
uint32_t attrs;
uint32_t token;
} PropertyInfo;
typedef struct EventInfo
{
const char* name;
const Il2CppType* eventType;
Il2CppClass* parent;
const MethodInfo* add;
const MethodInfo* remove;
const MethodInfo* raise;
uint32_t token;
} EventInfo;
typedef struct ParameterInfo
{
const char* name;
int32_t position;
uint32_t token;
const Il2CppType* parameter_type;
} ParameterInfo;
#if RUNTIME_MONO
typedef void* (*InvokerMethod)(Il2CppMethodPointer, const MonoMethod*, void*, void**);
#else
typedef void* (*InvokerMethod)(Il2CppMethodPointer, const MethodInfo*, void*, void**);
#endif
typedef enum MethodVariableKind
{
kMethodVariableKind_This,
kMethodVariableKind_Parameter,
kMethodVariableKind_LocalVariable
} MethodVariableKind;
typedef enum SequencePointKind
{
kSequencePointKind_Normal,
kSequencePointKind_StepOut
} SequencePointKind;
typedef struct Il2CppMethodExecutionContextInfo
{
TypeIndex typeIndex;
int32_t nameIndex;
int32_t scopeIndex;
} Il2CppMethodExecutionContextInfo;
typedef struct Il2CppMethodExecutionContextInfoIndex
{
int32_t startIndex;
int32_t count;
} Il2CppMethodExecutionContextInfoIndex;
typedef struct Il2CppMethodScope
{
int32_t startOffset;
int32_t endOffset;
} Il2CppMethodScope;
typedef struct Il2CppMethodHeaderInfo
{
int32_t code_size;
int32_t startScope;
int32_t numScopes;
} Il2CppMethodHeaderInfo;
typedef struct Il2CppSequencePointSourceFile
{
const char *file;
uint8_t hash[16];
} Il2CppSequencePointSourceFile;
typedef struct Il2CppTypeSourceFilePair
{
TypeDefinitionIndex klassIndex;
int32_t sourceFileIndex;
} Il2CppTypeSourceFilePair;
typedef struct Il2CppSequencePoint
{
MethodIndex methodDefinitionIndex;
int32_t sourceFileIndex;
int32_t lineStart, lineEnd;
int32_t columnStart, columnEnd;
int32_t ilOffset;
SequencePointKind kind;
int32_t isActive;
int32_t id;
} Il2CppSequencePoint;
typedef struct Il2CppCatchPoint
{
MethodIndex methodDefinitionIndex;
TypeIndex catchTypeIndex;
int32_t ilOffset;
int8_t tryId;
int8_t parentTryId;
} Il2CppCatchPoint;
typedef struct Il2CppDebuggerMetadataRegistration
{
Il2CppMethodExecutionContextInfo* methodExecutionContextInfos;
Il2CppMethodExecutionContextInfoIndex* methodExecutionContextInfoIndexes;
Il2CppMethodScope* methodScopes;
Il2CppMethodHeaderInfo* methodHeaderInfos;
Il2CppSequencePointSourceFile* sequencePointSourceFiles;
int32_t numSequencePoints;
Il2CppSequencePoint* sequencePoints;
int32_t numCatchPoints;
Il2CppCatchPoint* catchPoints;
int32_t numTypeSourceFileEntries;
Il2CppTypeSourceFilePair* typeSourceFiles;
const char** methodExecutionContextInfoStrings;
} Il2CppDebuggerMetadataRegistration;
typedef union Il2CppRGCTXData
{
void* rgctxDataDummy;
const MethodInfo* method;
const Il2CppType* type;
Il2CppClass* klass;
} Il2CppRGCTXData;
typedef struct MethodInfo
{
Il2CppMethodPointer methodPointer;
InvokerMethod invoker_method;
const char* name;
Il2CppClass *klass;
const Il2CppType *return_type;
const ParameterInfo* parameters;
union
{
const Il2CppRGCTXData* rgctx_data; /* is_inflated is true and is_generic is false, i.e. a generic instance method */
const Il2CppMethodDefinition* methodDefinition;
};
/* note, when is_generic == true and is_inflated == true the method represents an uninflated generic method on an inflated type. */
union
{
const Il2CppGenericMethod* genericMethod; /* is_inflated is true */
const Il2CppGenericContainer* genericContainer; /* is_inflated is false and is_generic is true */
};
uint32_t token;
uint16_t flags;
uint16_t iflags;
uint16_t slot;
uint8_t parameters_count;
uint8_t is_generic : 1; /* true if method is a generic method definition */
uint8_t is_inflated : 1; /* true if declaring_type is a generic instance or if method is a generic instance*/
uint8_t wrapper_type : 1; /* always zero (MONO_WRAPPER_NONE) needed for the debugger */
uint8_t is_marshaled_from_native : 1; /* a fake MethodInfo wrapping a native function pointer */
} MethodInfo;
typedef struct Il2CppRuntimeInterfaceOffsetPair
{
Il2CppClass* interfaceType;
int32_t offset;
} Il2CppRuntimeInterfaceOffsetPair;
#if IL2CPP_COMPILER_MSVC
#pragma warning( push )
#pragma warning( disable : 4200 )
#elif defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Winvalid-offsetof"
#endif
typedef struct Il2CppClass
{
// The following fields are always valid for a Il2CppClass structure
const Il2CppImage* image;
void* gc_desc;
const char* name;
const char* namespaze;
Il2CppType byval_arg;
Il2CppType this_arg;
Il2CppClass* element_class;
Il2CppClass* castClass;
Il2CppClass* declaringType;
Il2CppClass* parent;
Il2CppGenericClass *generic_class;
const Il2CppTypeDefinition* typeDefinition; // non-NULL for Il2CppClass's constructed from type defintions
const Il2CppInteropData* interopData;
Il2CppClass* klass; // hack to pretend we are a MonoVTable. Points to ourself
// End always valid fields
// The following fields need initialized before access. This can be done per field or as an aggregate via a call to Class::Init
FieldInfo* fields; // Initialized in SetupFields
const EventInfo* events; // Initialized in SetupEvents
const PropertyInfo* properties; // Initialized in SetupProperties
const MethodInfo** methods; // Initialized in SetupMethods
Il2CppClass** nestedTypes; // Initialized in SetupNestedTypes
Il2CppClass** implementedInterfaces; // Initialized in SetupInterfaces
Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets; // Initialized in Init
void* static_fields; // Initialized in Init
const Il2CppRGCTXData* rgctx_data; // Initialized in Init
// used for fast parent checks
Il2CppClass** typeHierarchy; // Initialized in SetupTypeHierachy
// End initialization required fields
void *unity_user_data;
uint32_t initializationExceptionGCHandle;
uint32_t cctor_started;
uint32_t cctor_finished;
ALIGN_TYPE(8) size_t cctor_thread;
// Remaining fields are always valid except where noted
GenericContainerIndex genericContainerIndex;
uint32_t instance_size;
uint32_t actualSize;
uint32_t element_size;
int32_t native_size;
uint32_t static_fields_size;
uint32_t thread_static_fields_size;
int32_t thread_static_fields_offset;
uint32_t flags;
uint32_t token;
uint16_t method_count; // lazily calculated for arrays, i.e. when rank > 0
uint16_t property_count;
uint16_t field_count;
uint16_t event_count;
uint16_t nested_type_count;
uint16_t vtable_count; // lazily calculated for arrays, i.e. when rank > 0
uint16_t interfaces_count;
uint16_t interface_offsets_count; // lazily calculated for arrays, i.e. when rank > 0
uint8_t typeHierarchyDepth; // Initialized in SetupTypeHierachy
uint8_t genericRecursionDepth;
uint8_t rank;
uint8_t minimumAlignment; // Alignment of this type
uint8_t naturalAligment; // Alignment of this type without accounting for packing
uint8_t packingSize;
// this is critical for performance of Class::InitFromCodegen. Equals to initialized && !has_initialization_error at all times.
// Use Class::UpdateInitializedAndNoError to update
uint8_t initialized_and_no_error : 1;
uint8_t valuetype : 1;
uint8_t initialized : 1;
uint8_t enumtype : 1;
uint8_t is_generic : 1;
uint8_t has_references : 1;
uint8_t init_pending : 1;
uint8_t size_inited : 1;
uint8_t has_finalize : 1;
uint8_t has_cctor : 1;
uint8_t is_blittable : 1;
uint8_t is_import_or_windows_runtime : 1;
uint8_t is_vtable_initialized : 1;
uint8_t has_initialization_error : 1;
VirtualInvokeData vtable[IL2CPP_ZERO_LEN_ARRAY];
} Il2CppClass;
#if IL2CPP_COMPILER_MSVC
#pragma warning( pop )
#elif defined(__clang__)
#pragma clang diagnostic pop
#endif
// compiler calcualted values
typedef struct Il2CppTypeDefinitionSizes
{
uint32_t instance_size;
int32_t native_size;
uint32_t static_fields_size;
uint32_t thread_static_fields_size;
} Il2CppTypeDefinitionSizes;
typedef struct Il2CppDomain
{
Il2CppAppDomain* domain;
Il2CppAppDomainSetup* setup;
Il2CppAppContext* default_context;
const char* friendly_name;
uint32_t domain_id;
volatile int threadpool_jobs;
void* agent_info;
} Il2CppDomain;
typedef struct Il2CppAssemblyName
{
const char* name;
const char* culture;
const char* hash_value;
const char* public_key;
uint32_t hash_alg;
int32_t hash_len;
uint32_t flags;
int32_t major;
int32_t minor;
int32_t build;
int32_t revision;
uint8_t public_key_token[PUBLIC_KEY_BYTE_LENGTH];
} Il2CppAssemblyName;
typedef struct Il2CppImage
{
const char* name;
const char *nameNoExt;
Il2CppAssembly* assembly;
TypeDefinitionIndex typeStart;
uint32_t typeCount;
TypeDefinitionIndex exportedTypeStart;
uint32_t exportedTypeCount;
CustomAttributeIndex customAttributeStart;
uint32_t customAttributeCount;
MethodIndex entryPointIndex;
#ifdef __cplusplus
mutable
#endif
Il2CppNameToTypeDefinitionIndexHashTable * nameToClassHashTable;
const Il2CppCodeGenModule* codeGenModule;
uint32_t token;
uint8_t dynamic;
} Il2CppImage;
typedef struct Il2CppAssembly
{
Il2CppImage* image;
uint32_t token;
int32_t referencedAssemblyStart;
int32_t referencedAssemblyCount;
Il2CppAssemblyName aname;
} Il2CppAssembly;
typedef struct Il2CppCodeGenOptions
{
bool enablePrimitiveValueTypeGenericSharing;
} Il2CppCodeGenOptions;
typedef struct Il2CppTokenIndexPair
{
uint32_t token;
int32_t index;
} Il2CppTokenIndexPair;
typedef struct Il2CppTokenRangePair
{
uint32_t token;
Il2CppRange range;
} Il2CppTokenRangePair;
typedef struct Il2CppTokenIndexMethodTuple
{
uint32_t token;
int32_t index;
void** method;
uint32_t genericMethodIndex;
} Il2CppTokenIndexMethodTuple;
typedef struct Il2CppWindowsRuntimeFactoryTableEntry
{
const Il2CppType* type;
Il2CppMethodPointer createFactoryFunction;
} Il2CppWindowsRuntimeFactoryTableEntry;
typedef struct Il2CppCodeGenModule
{
const char* moduleName;
const uint32_t methodPointerCount;
const Il2CppMethodPointer* methodPointers;
const int32_t* invokerIndices;
const uint32_t reversePInvokeWrapperCount;
const Il2CppTokenIndexMethodTuple* reversePInvokeWrapperIndices;
const uint32_t rgctxRangesCount;
const Il2CppTokenRangePair* rgctxRanges;
const uint32_t rgctxsCount;
#if RUNTIME_MONO
const MonoRGCTXDefinition* rgctxs;
#else
const Il2CppRGCTXDefinition* rgctxs;
#endif
const Il2CppDebuggerMetadataRegistration *debuggerMetadata;
} Il2CppCodeGenModule;
typedef struct Il2CppCodeRegistration
{
uint32_t reversePInvokeWrapperCount;
const Il2CppMethodPointer* reversePInvokeWrappers;
uint32_t genericMethodPointersCount;
const Il2CppMethodPointer* genericMethodPointers;
uint32_t invokerPointersCount;
const InvokerMethod* invokerPointers;
CustomAttributeIndex customAttributeCount;
const CustomAttributesCacheGenerator* customAttributeGenerators;
uint32_t unresolvedVirtualCallCount;
const Il2CppMethodPointer* unresolvedVirtualCallPointers;
uint32_t interopDataCount;
Il2CppInteropData* interopData;
uint32_t windowsRuntimeFactoryCount;
Il2CppWindowsRuntimeFactoryTableEntry* windowsRuntimeFactoryTable;
uint32_t codeGenModulesCount;
const Il2CppCodeGenModule** codeGenModules;
} Il2CppCodeRegistration;
typedef struct Il2CppMetadataRegistration
{
int32_t genericClassesCount;
Il2CppGenericClass* const * genericClasses;
int32_t genericInstsCount;
const Il2CppGenericInst* const * genericInsts;
int32_t genericMethodTableCount;
const Il2CppGenericMethodFunctionsDefinitions* genericMethodTable;
int32_t typesCount;
const Il2CppType* const * types;
int32_t methodSpecsCount;
const Il2CppMethodSpec* methodSpecs;
FieldIndex fieldOffsetsCount;
const int32_t** fieldOffsets;
TypeDefinitionIndex typeDefinitionsSizesCount;
const Il2CppTypeDefinitionSizes** typeDefinitionsSizes;
const size_t metadataUsagesCount;
void** const* metadataUsages;
} Il2CppMetadataRegistration;
/*
* new structure to hold performance counters values that are exported
* to managed code.
* Note: never remove fields from this structure and only add them to the end.
* Size of fields and type should not be changed as well.
*/
typedef struct Il2CppPerfCounters
{
/* JIT category */
uint32_t jit_methods;
uint32_t jit_bytes;
uint32_t jit_time;
uint32_t jit_failures;
/* Exceptions category */
uint32_t exceptions_thrown;
uint32_t exceptions_filters;
uint32_t exceptions_finallys;
uint32_t exceptions_depth;
uint32_t aspnet_requests_queued;
uint32_t aspnet_requests;
/* Memory category */
uint32_t gc_collections0;
uint32_t gc_collections1;
uint32_t gc_collections2;
uint32_t gc_promotions0;
uint32_t gc_promotions1;
uint32_t gc_promotion_finalizers;
uint32_t gc_gen0size;
uint32_t gc_gen1size;
uint32_t gc_gen2size;
uint32_t gc_lossize;
uint32_t gc_fin_survivors;
uint32_t gc_num_handles;
uint32_t gc_allocated;
uint32_t gc_induced;
uint32_t gc_time;
uint32_t gc_total_bytes;
uint32_t gc_committed_bytes;
uint32_t gc_reserved_bytes;
uint32_t gc_num_pinned;
uint32_t gc_sync_blocks;
/* Remoting category */
uint32_t remoting_calls;
uint32_t remoting_channels;
uint32_t remoting_proxies;
uint32_t remoting_classes;
uint32_t remoting_objects;
uint32_t remoting_contexts;
/* Loader category */
uint32_t loader_classes;
uint32_t loader_total_classes;
uint32_t loader_appdomains;
uint32_t loader_total_appdomains;
uint32_t loader_assemblies;
uint32_t loader_total_assemblies;
uint32_t loader_failures;
uint32_t loader_bytes;
uint32_t loader_appdomains_uloaded;
/* Threads and Locks category */
uint32_t thread_contentions;
uint32_t thread_queue_len;
uint32_t thread_queue_max;
uint32_t thread_num_logical;
uint32_t thread_num_physical;
uint32_t thread_cur_recognized;
uint32_t thread_num_recognized;
/* Interop category */
uint32_t interop_num_ccw;
uint32_t interop_num_stubs;
uint32_t interop_num_marshals;
/* Security category */
uint32_t security_num_checks;
uint32_t security_num_link_checks;
uint32_t security_time;
uint32_t security_depth;
uint32_t unused;
/* Threadpool */
uint64_t threadpool_workitems;
uint64_t threadpool_ioworkitems;
unsigned int threadpool_threads;
unsigned int threadpool_iothreads;
} Il2CppPerfCounters;
#endif // !IL2CPP_TINY