You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| READYTORUN_FLAG_PLATFORM_NEUTRAL_SOURCE | 0x00000001 | Set if the original IL image was platform neutral. The platform neutrality is part of assembly name. This flag can be used to reconstruct the full original assembly name.
131
-
| READYTORUN_FLAG_COMPOSITE | 0x00000002 | The image represents a composite R2R file resulting from a combined compilation of a larger number of input MSIL assemblies.
132
-
| READYTORUN_FLAG_PARTIAL | 0x00000004 |
133
-
| READYTORUN_FLAG_NONSHARED_PINVOKE_STUBS | 0x00000008 | PInvoke stubs compiled into image are non-shareable (no secret parameter)
134
-
| READYTORUN_FLAG_EMBEDDED_MSIL | 0x00000010 | Input MSIL is embedded in the R2R image.
135
-
| READYTORUN_FLAG_COMPONENT | 0x00000020 | This is a component assembly of a composite R2R image
136
-
| READYTORUN_FLAG_MULTIMODULE_VERSION_BUBBLE | 0x00000040 | This R2R module has multiple modules within its version bubble (For versions before version 6.2, all modules are assumed to possibly have this characteristic)
| READYTORUN_FLAG_PLATFORM_NEUTRAL_SOURCE | 0x00000001 | Set if the original IL image was platform neutral. The platform neutrality is part of assembly name. This flag can be used to reconstruct the full original assembly name.
130
+
| READYTORUN_FLAG_COMPOSITE | 0x00000002 | The image represents a composite R2R file resulting from a combined compilation of a larger number of input MSIL assemblies.
131
+
| READYTORUN_FLAG_EMBEDDED_MSIL | 0x00000004 | Input MSIL is embedded in the R2R image.
132
+
| READYTORUN_FLAG_COMPONENT | 0x00000008 | This is a component assembly of a composite R2R image
137
133
138
134
## READYTORUN_SECTION
139
135
@@ -177,7 +173,6 @@ The following section types are defined and described later in this document:
177
173
| OwnerCompositeExecutable | 116 | Image (added in V4.1)
178
174
| PgoInstrumentationData | 117 | Image (added in V5.2)
179
175
| ManifestAssemblyMvids | 118 | Image (added in V5.3)
180
-
| CrossModuleInlineInfo | 119 | Image (added in V6.3)
| ReadyToRunImportSectionFlags::Eager | 0x0001 | Set if the slots in the section have to be initialized at image load time. It is used to avoid lazy initialization when it cannot be done or when it would have undesirable reliability or performance effects (unexpected failure or GC trigger points, overhead of lazy initialization).
213
-
| ReadyToRunImportSectionFlags::PCode | 0x0004 | Section contains pointers to code
214
-
206
+
| READYTORUN_IMPORT_SECTION_FLAGS_EAGER | 0x0001 | Set if the slots in the section have to be initialized at image load time. It is used to avoid lazy initialization when it cannot be done or when it would have undesirable reliability or performance effects (unexpected failure or GC trigger points, overhead of lazy initialization).
215
207
216
208
### READYTORUN_IMPORT_SECTIONS::Type
217
209
218
-
| ReadyToRunImportSectionType | Value | Description
| READYTORUN_IMPORT_SECTION_TYPE_UNKNOWN | 0 | The type of slots in this section is unspecified.
224
213
225
214
*Future*: The section type can be used to group slots of the same type together. For example, all virtual
226
215
stub dispatch slots may be grouped together to simplify resetting of virtual stub dispatch cells into their
@@ -275,8 +264,6 @@ fixup kind, the rest of the signature varies based on the fixup kind.
275
264
| READYTORUN_FIXUP_Verify_TypeLayout | 0x32 | Generate a runtime check to ensure that the field offset matches between compile and runtime. Unlike CheckFieldOffset, this will generate a runtime exception on failure instead of silently dropping the method
276
265
| READYTORUN_FIXUP_Check_VirtualFunctionOverride | 0x33 | Generate a runtime check to ensure that virtual function resolution has equivalent behavior at runtime as at compile time. If not equivalent, code will not be used. See [Virtual override signatures](virtual-override-signatures) for details of the signature used.
277
266
| READYTORUN_FIXUP_Verify_VirtualFunctionOverride | 0x33 | Generate a runtime check to ensure that virtual function resolution has equivalent behavior at runtime as at compile time. If not equivalent, generate runtime failure. See [Virtual override signatures](virtual-override-signatures) for details of the signature used.
278
-
| READYTORUN_FIXUP_Check_IL_Body | 0x35 | Check to see if an IL method is defined the same at runtime as at compile time. A failed match will cause code not to be used. See[IL Body signatures](il-body-signatures) for details.
279
-
| READYTORUN_FIXUP_Verify_IL_Body | 0x36 | Verify an IL body is defined the same at compile time and runtime. A failed match will cause a hard runtime failure. See[IL Body signatures](il-body-signatures) for details.
280
267
| READYTORUN_FIXUP_ModuleOverride | 0x80 | When or-ed to the fixup ID, the fixup byte in the signature is followed by an encoded uint with assemblyref index, either within the MSIL metadata of the master context module for the signature or within the manifest metadata R2R header table (used in cases inlining brings in references to assemblies not seen in the input MSIL).
281
268
282
269
#### Method Signatures
@@ -317,9 +304,6 @@ ECMA 335 does not have a natural encoding for describing an overriden method. Th
317
304
| READYTORUN_VIRTUAL_OVERRIDE_None | 0x00 | No flags are set
318
305
| READYTORUN_VIRTUAL_OVERRIDE_VirtualFunctionOverriden | 0x01 | If set, then the virtual function has an implementation, which is encoded in the optional method implementation signature.
319
306
320
-
#### IL Body signatures
321
-
322
-
ECMA 335 does not define a format that can represent the exact implementation of a method by itself. This signature holds all of the IL of the method, the EH table, the locals table, and each token (other than type references) in those tables is replaced with an index into a local stream of signatures. Those signatures are simply verbatim copies of the needed metadata to describe MemberRefs, TypeSpecs, MethodSpecs, StandaloneSignatures and strings. All of that is bundled into a large byte array. In addition, a series of TypeSignatures follows which allow the type references to be resolved, as well as a methodreference to the uninstantiated method. Assuming all of this matches with the data that is present at runtime, the fixup is considered to be satisfied. See ReadyToRunStandaloneMetadata.cs for the exact details of the format.
323
307
324
308
### READYTORUN_IMPORT_SECTIONS::AuxiliaryData
325
309
@@ -511,7 +495,7 @@ properly look up methods stored in this section in the composite R2R case.
511
495
512
496
**TODO**: document profile data encoding
513
497
514
-
## ReadyToRunSectionType.ManifestMetadata (v2.3+ with changes for v6.3+)
498
+
## ReadyToRunSectionType.ManifestMetadata (v2.3+)
515
499
516
500
Manifest metadata is an [ECMA-335] metadata blob containing extra reference assemblies within
517
501
the version bubble introduced by inlining on top of assembly references stored in the input MSIL.
@@ -520,16 +504,12 @@ translate module override indices in signatures to the actual reference modules
520
504
the `READYTORUN_FIXUP_ModuleOverride` bit flag on the signature fixup byte or the
521
505
`ELEMENT_TYPE_MODULE_ZAPSIG` COR element type).
522
506
523
-
**Note:** It doesn't make sense to use references to assemblies external to the version bubble
524
-
in the manifest metadata via the `READYTORUN_FIXUP_ModuleOverride` or `ELEMENT_TYPE_MODULE_ZAPSIG` concept
525
-
as there's no guarantee that their metadata token values remain constant; thus we cannot encode signatures relative to them.
526
-
However, as of R2R version 6.2, the native manifest metadata may contain tokens to be further resolved to actual
527
-
implementation assemblies.
507
+
**Note:** It doesn't make sense to store references to assemblies external to the version bubble
508
+
in the manifest metadata as there's no guarantee that their metadata token values remain
509
+
constant; thus we cannot encode signatures relative to them.
528
510
529
511
The module override index translation algorithm is as follows (**ILAR** = *the number of `AssemblyRef` rows in the input MSIL*):
530
512
531
-
For R2R version 6.2 and below
532
-
533
513
| Module override index (*i*) | Reference assembly
| *i* = 0 | Global context - assembly containing the signature
@@ -538,16 +518,6 @@ For R2R version 6.2 and below
538
518
539
519
**Note:** This means that the entry corresponding to *i* = **ILAR** + 1 is actually undefined as it corresponds to the `NULL` entry (ROWID #0) in the manifest metadata AssemblyRef table. The first meaningful index into the manifest metadata, *i* = **ILAR** + 2, corresponding to ROWID #1, is historically filled in by Crossgen with the input assembly info but this shouldn't be depended upon, in fact the input assembly is useless in the manifest metadata as the module override to it can be encoded by using the special index 0.
540
520
541
-
For R2R version 6.3 and above
542
-
| Module override index (*i*) | Reference assembly
| *i* = 0 | Global context - assembly containing the signature
545
-
| 1 <= *i* <= **ILAR** | *i* is the index into the MSIL `AssemblyRef` table
546
-
| *i* = **ILAR** + 1 | *i* is the index which refers to the Manifest metadata itself
547
-
| *i* > **ILAR** + 1 | *i* - **ILAR** - 2 is the zero-based index into the `AssemblyRef` table in the manifest metadata
548
-
549
-
In addition, a ModuleRef within the module which refers to `System.Private.CoreLib` may be used to serve as the *ResolutionContext* of a *TypeRef* within the manifest metadata. This will always refer to the module which contains the `System.Object` type.
The inlining information section captures what methods got inlined into other methods. It consists of a single _Native Format Hashtable_ (described below).
613
-
614
-
The entries in the hashtable are lists of inliners for each inlinee. One entry in the hashtable corresponds to one inlinee. The hashtable is hashed with the version resilient hashcode of the uninstantiated methoddef inlinee.
615
-
616
-
The entry of the hashtable is a counted sequence of compressed unsigned integers which begins with an InlineeIndex which combines a 30 bit index with 2 bits of flags which how the sequence of inliners shall be parsed and what table is to be indexed into to find the inlinee.
617
-
618
-
* InlineeIndex
619
-
* Index with 2 flags field in lowest 2 bits to define the inlinee
620
-
- If (flags & 1) == 0 then index is a MethodDef RID, and if the module is a composite image, a module index of the method follows
621
-
- If (flags & 1) == 1, then index is an index into the ILBody import section
622
-
- If (flags & 2) == 0 then inliner list is:
623
-
- Inliner RID deltas - See definition below
624
-
- if (flags & 2) == 2 then what follows is:
625
-
- count of delta encoded indices into the ILBody import section
626
-
- the sequence of delta encoded indices into the first import section with a type of READYTORUN_IMPORT_SECTION_TYPE_ILBODYFIXUPS
627
-
- Inliner RID deltas - See definition below
628
-
629
-
* Inliner RID deltas (for multi-module version bubble images specified by the module having the READYTORUN_FLAG_MULTIMODULE_VERSION_BUBBLE flag set)
630
-
- a sequence of inliner RID deltas with flag in the lowest bit
631
-
- if flag is set, the inliner RID is followed by a module ID
632
-
- otherwise the module is the same as the module of the inlinee method
633
-
* Inliner RID deltas (for single module version bubble images)
634
-
- a sequence of inliner RID deltas
635
-
636
-
This section may be included in addition to a InliningInfo2 section.
637
-
638
581
# Native Format
639
582
640
583
Native format is set of encoding patterns that allow persisting type system data in a binary format that is
ENCODE_CHECK_VIRTUAL_FUNCTION_OVERRIDE, /* Generate a runtime check to ensure that virtual function resolution has equivalent behavior at runtime as at compile time. If not equivalent, code will not be used */
160
150
ENCODE_VERIFY_VIRTUAL_FUNCTION_OVERRIDE, /* Generate a runtime check to ensure that virtual function resolution has equivalent behavior at runtime as at compile time. If not equivalent, generate runtime failure. */
161
151
162
-
ENCODE_CHECK_IL_BODY, /* Check to see if an IL method is defined the same at runtime as at compile time. A failed match will cause code not to be used. */
163
-
ENCODE_VERIFY_IL_BODY, /* Verify an IL body is defined the same at compile time and runtime. A failed match will cause a hard runtime failure. */
164
-
165
152
ENCODE_MODULE_HANDLE = 0x50, /* Module token */
166
153
ENCODE_STATIC_FIELD_ADDRESS, /* For accessing a static field */
154
+
ENCODE_MODULE_ID_FOR_STATICS, /* For accessing static fields */
167
155
ENCODE_MODULE_ID_FOR_GENERIC_STATICS, /* For accessing static fields */
168
156
ENCODE_CLASS_ID_FOR_STATICS, /* For accessing static fields */
169
157
ENCODE_SYNC_LOCK, /* For synchronizing access to a type */
170
158
ENCODE_PROFILING_HANDLE, /* For the method's profiling counter */
171
159
ENCODE_VARARGS_METHODDEF, /* For calling a varargs method */
172
160
ENCODE_VARARGS_METHODREF,
173
161
ENCODE_VARARGS_SIG,
162
+
ENCODE_ACTIVE_DEPENDENCY, /* Conditional active dependency */
Copy file name to clipboardExpand all lines: src/coreclr/inc/readytorun.h
+2-18Lines changed: 2 additions & 18 deletions
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@
16
16
17
17
// Keep these in sync with src/coreclr/tools/Common/Internal/Runtime/ModuleHeaders.cs
18
18
#defineREADYTORUN_MAJOR_VERSION 0x0006
19
-
#defineREADYTORUN_MINOR_VERSION0x0003
19
+
#defineREADYTORUN_MINOR_VERSION0x0002
20
20
21
21
#defineMINIMUM_READYTORUN_MAJOR_VERSION 0x006
22
22
@@ -60,7 +60,6 @@ enum ReadyToRunFlag
60
60
READYTORUN_FLAG_NONSHARED_PINVOKE_STUBS=0x00000008, // PInvoke stubs compiled into image are non-shareable (no secret parameter)
61
61
READYTORUN_FLAG_EMBEDDED_MSIL=0x00000010, // MSIL is embedded in the composite R2R executable
62
62
READYTORUN_FLAG_COMPONENT=0x00000020, // This is the header describing a component assembly of composite R2R
63
-
READYTORUN_FLAG_MULTIMODULE_VERSION_BUBBLE=0x00000040, // This R2R module has multiple modules within its version bubble (For versions before version 6.2, all modules are assumed to possibly have this characteristic)
64
63
};
65
64
66
65
enumclassReadyToRunSectionType : uint32_t
@@ -84,7 +83,6 @@ enum class ReadyToRunSectionType : uint32_t
84
83
OwnerCompositeExecutable=116, // Added in V4.1
85
84
PgoInstrumentationData=117, // Added in V5.2
86
85
ManifestAssemblyMvids=118, // Added in V5.3
87
-
CrossModuleInlineInfo=119, // Added in V6.2
88
86
89
87
// If you add a new section consider whether it is a breaking or non-breaking change.
90
88
// Usually it is non-breaking, but if it is preferable to have older runtimes fail
READYTORUN_FIXUP_Check_VirtualFunctionOverride=0x33, /* Generate a runtime check to ensure that virtual function resolution has equivalent behavior at runtime as at compile time. If not equivalent, code will not be used */
242
229
READYTORUN_FIXUP_Verify_VirtualFunctionOverride=0x34, /* Generate a runtime check to ensure that virtual function resolution has equivalent behavior at runtime as at compile time. If not equivalent, generate runtime failure. */
243
-
244
-
READYTORUN_FIXUP_Check_IL_Body=0x35, /* Check to see if an IL method is defined the same at runtime as at compile time. A failed match will cause code not to be used. */
245
-
READYTORUN_FIXUP_Verify_IL_Body=0x36, /* Verify an IL body is defined the same at compile time and runtime. A failed match will cause a hard runtime failure. */
0 commit comments