Many commonly used terms and acronyms are also defined in the glossary for the "Standard ECMA-335 Common Language Infrastructure (CLI)" specification (www.ecma.ch/ecma1/STAND/ecma-335.htm).
Term | Definition |
---|---|
assembly | A collection of one or more portable executable (PE) files that are versioned and deployed as a unit. An assembly is the primary building block of a CLI application. All managed types and resources are contained within an assembly and are marked either as accessible only within the assembly or as accessible from code in other assemblies. Assemblies also play a key role in security. The code access security system uses information about the assembly to determine the set of permissions that code in the assembly is granted. |
by-ref pointer |
A pointer to a location inside a garbage-collectible object,
created in order to pass a parameter by reference rather than by value.
A by-ref pointer refers to:
(See also interior pointer.) |
callee-saves | Registers that must be preserved by the called method so the calling method can assume that they are unchanged when control returns. The callee-saves registers are EBP, ESI, EDI, and EBX. The values of ediSaved, esiSaved, ebxSaved, and ebpSaved in the Method Header Information indicate whether each of these registers should be saved in the method prolog. |
caller-saves | Registers that are considered to be scratch registers at a call site. If the caller wants the values in these registers to be saved, it has to arrange to save them into the local frame. The caller-saves registers are EAX, ECX and EDX. |
checked build | A build of the source tree with optimizations off, debug code enabled, and debugging symbols generated. |
CIL | Common intermediate language, the platform-independent persistent, representation of managed executable code used by the CLI runtime engine. |
CLI | Common Language Infrastructure. The formal specification for this is Standard ECMA-335. For more information see www.ecma.ch/ecma1/STAND/ecma-335.htm. |
CLR | Common language runtime. The Microsoft .NET Framework implementation of the CLI. |
code manager or CM |
The source language-independent run-time service that supplies access to information about a segment of running code. The code manager is used to support debugging, exception handling, garbage collection, and security management. |
COR | An obsolete synonym for CLI or CLR. |
delay signed | A synonym for partially signed. See partially signed. |
EBP-frame or EBP-based method |
Methods that have been compiled to use the EBP pointer to locate the current
stack frame. The value of the Method Header Information ebpFrame variable will
be set to zero. Since the
EBP is a callee-saves register, EBP-frames always contain a slot (pushed
immediately after the return address) where the parent's EBP is stored.
In EBP-based methods, arguments are referenced as positive offsets from the
EBP and local variables or compiler temporaries are typically referenced
as negative offsets from the EBP. There is an exception, however, for
methods that require that some of their variables be 8-byte-aligned. In this case, the arguments are referenced with respect to the
EBP, but the temporaries and locals are referenced using the ESP so that
a padding word can be inserted at runtime to provide the required alignment
of the locals, temporaries, and ESP without affecting the EBP.
NOTE: The Shared Source CLI uses EBP-based methods for most calls. |
EBP-less method |
Methods that use ESP (the stack pointer) rather than EBP (the frame pointer)
to reference arguments, local variables, and compiler temporary values.
The value of the Method Header Information ebpFrame variable is set to zero. In these frames, the
caller's EBP is saved only if the method's code uses the register for its
own purposes. In this case, the old value is saved along with the other
callee-saves registers rather than in a special location in the frame.
NOTE: The Shared Source CLI uses EBP-less methods only for stubs. |
EBP register | One of the seven general-purpose 32-bit registers used in the x86 architecture. It can either be used as a general-purpose register that might contain a garbage collection reference, or as a special-purpose frame pointer register. The value of the Method Header Information variable ebpFrame is equal to 1 when it is used as a special-purpose frame pointer. |
ECMA standard | See www.ecma.ch/ecma1/STAND/ecma-334.htm for C# and www.ecma.ch/ecma1/STAND/ecma-335.htm for CLI. |
ESP register | The name given to the 32-bit register that is always used as the stack pointer on the x86 architecture. |
epilog | Code generated to exit a method. Because the stack pointer and frame pointer are adjusted by this code, the just-in-time (JIT) code manager assumes that a garbage collection is not allowed during this code, and that stack unwinding has detailed knowledge of the precise code sequences present in the epilog. |
executable file | A file in PE format that can be loaded into memory and executed by the operating system loader. This includes both .exe and .dll files. (the PE/COFF specification is available on MSDN, but the information needed to implement a CLI is also in the ECMA specification.) |
fastchecked build | A build of the source tree with optimizations on, debug code enabled, and debugging symbols generated. |
free build | A build of the source tree with optimizations on, debug tracing and assert code disabled, and no debugging symbols generated. |
fully interruptible method |
A method in which the information for garbage collection is available
at all points inside the main body of the method, excluding the
prolog and epilog portions of the method. The Method Header
Information has interruptible=1. Because of the size of the Method GC
Information required to supply this information, the JIT compiler avoids creating fully interruptible methods where possible.
However, if a method has a computation-bound loop with no method calls,
the method is required to be fully interruptible.
Although the Shared Source CLI JIT compiler produces code that could be fully interruptible, the polling garbage collector causes this functionality to remain unexercised. (See also non-fully interruptible method.) |
fusion | A portion of the CLI assembly-loading code that finds and loads the correct assembly file based on the versioned assembly references in the calling assembly. This code also manages the global assembly cache. |
fx or FX | A major part of the managed source code tree. SSCLI source code is factored into several large source sub-trees: sscli\clr\src for the core engine and base class libraries, sscli\managedlibraries for remoting and soap serialization, and sscli\fx for other fundamental class libraries. The term "FX" is occasionally used in the source code as an abbreviation for "Frameworks." |
global assembly cache | A location where assemblies can be installed so they can be shared across applications. For the SSCLI, the global assembly cache is private to a specific installation of the SSCLI code base. The term "GAC" is commonly used in the source code to refer to the global assembly cache. |
garbage collection | The process of transitively tracing through all pointers to actively used objects to locate all objects that might be potentially referenced, and then arranging to reuse any heap memory that was not found during this trace. The garbage collector also arranges to compact the memory that is in use to reduce the working space needed for the heap. The term "GC" is commonly used in the source code to refer to garbage collection. |
interior pointers |
A pointer to a location inside of a garbage-collectible object.
An interior pointer or by-ref pointer is typically created by
a compiler for temporary use. Three examples of interior
pointers are:
The garbage collector must update all interior pointers when it compacts the heap. For the garbage collector to operate correctly, there must be a live pointer to the whole object (somewhere visible to the garbage collector) whenever there is an interior pointer to it. (See also by-ref pointer.) |
intermediate language | A language designed to be used efficiently both as the output of a number of compilers and as the input to a JIT compiler. The Microsoft implementation of the ECMA common intermediate language (CIL) is Microsoft intermediate language (MSIL). |
JIT |
Just-in-time compiler which takes intermediate language as input and generates native code, ready to run, in memory. It also produces information used by the built-in code manager. |
lifetime | The addresses in the body of a method during which a storage location is actively in use, beginning when the location is initialized and ending with the last reference to the location. For example, an argument location on the stack begins its life immediately after the method's prolog because the caller provides it at the time the method begins execution. Other stack locations might be initialized later in the execution of the method. Some stack locations (or other storage locations) are not referenced after a particular point in the method's body and they are considered "dead" after that point. There is no need for the garbage collector to trace through locations that are not live, and it is critical that the garbage collector not trace through locations that have not been initialized or have out-of-date information. The garbage collector assumes that live locations are safe to trace. |
local variable area | Locations allocated on the stack by a method for its own storage purposes. This includes, for example, local variables declared by the user as well as temporary locations for storing intermediate values as well for when the compiler runs out of registers. Typically in the SSCLI the local variables area does not include the linkage area or callee-saves area, nor does it include the variable-sized region of the stack frame that is used to store parameters for methods that are being called. |
managed code | Code that executes under the CLI execution environment. Managed code uses the execution environment for memory management, object lifetime, and the basic type-system, among other fundamental services. |
metadata |
Metadata is binary information that describes and annotates the intermediate
language in an
assembly.
See the ECMA-335 CLI standard for specific details. |
metadata root | The root of the section of the PE file that contains metadata. |
method | This term has a specialized meaning for higher-level languages like C# and C++. In this document, however, it refers to a sequence of computor instructions that are accessed by a procedure call to a specific code address. The code managers provided by the CLI assume that methods have a single entry point and possibly multiple exit points. Custom code managers need not make these assumptions. |
method GC information | A term in the source code that refers to a data structure used to describe a method so that the runtime system can perform garbage collection, handle exceptions, and so forth. |
MSIL | The Microsoft implementation of the ECMA standard common intermediate language. |
nested call |
A method invocation that occurs in the argument list to of another method
invocation. For example in:
innerMethod is a nested call. |
non-fully interruptible method | A method in which the information for garbage collection is provided only at method call sites. The Method Header Information has interruptible=0. The run-time system replaces the actual return address on the stack with an address within the run-time system to accomplish garbage collection. The JIT-compiler preferentially makes methods non-fully-interruptible in order to keep the size of the Method GC data structure size to a minimum. |
PAL | The SSCLI Platform Adaptation Layer. This layer allows calls from the SSCLI implementation to be mapped to the underlying operating system. |
parameter area | The part of the method's stack frame that is used to store parameters being passed to methods that it calls. This is the part of the stack frame that grows and shrinks as the method executes. |
partially signed | An assembly that has the public key field filled in but is not signed with the private key. See also delay signed, strong name, and simple name. |
pending arguments |
The values already pushed onto the stack at the time of a nested call. For
example, in
when the call to the innnerMethod() is made, the JIT-compiled code for outerMethod() typically would have already pushed three arguments on the stack; the values of c, d and e. The first two arguments are normally passed in registers and are handled specially in the JIT compiler. When innerMethod() returns, outerMethod() continues pushing its remaining arguments, the return value of innerMethod(), and the values of f, g, and h. |
pinned pointer | A pointer to a location that must be considered pinned for the purposes of a garbage collection. Only untracked local variables can be marked as pinned pointers. Arguments and class variables cannot be directly marked as pinned. Instead, a copy of the reference that they refer to must be placed in a local variable and that local variable must be marked as pinned. It is also possible to have a pinned by-ref or pinned interior pointer. A pinned pointer is considered to be pinned only during the lifetime of the stack frame associated with the local variable that contains the pinning mark. |
platform invoke | The implementation used to call from managed to platform-specific unmanaged code. Sometimes referred to in source by the deprecated term "P/Invoke". |
prolog | The part of a method's code that is executed when the method starts and during which the fixed part of the stack frame is not yet completely initialized. The code manager does not permit a garbage collection to occur during a method prolog and it must take extra care during stack unwinding for methods that are executing their prolog. The prolog is responsible for constructing the local stack frame, saving the callee-saved registers, and initializing the untracked local variables. |
public key token | A reduced-size numeric token that represents a public key for an assembly. Assembly references in metadata frequently store the public key token rather than the entire public key. |
pushed args mask | A bit mask used to indicate which locations in the outgoing parameter area (not the incoming pushed argument area) contain live garbage collection pointers. It sometimes also includes bits to indicate whether particular registers contain live garbage collection pointers. |
pushed argument area | The portion of the current stack that holds the incoming arguments passed onto the stack for any given method. The JIT-compiler assumes that this area occupies the portion of the stack frame with the highest memory addresses (that is, that part that is pushed first). It is created by the calling method (in its outgoing parameter area) and, after the call occurs, becomes the base of the current stack frame. Note that the first two arguments are passed in registers, are not pushed onto the stack, and are thus not part of the pushed argument area. |
rotor | Code name for the Shared Source CLI implementation (both 1.0 and 2.0 versions). |
rotor whidbey | Code name for the Shared Source CLI implementation 2.0. |
RVA | Short for "relative virtual address." An offset (in bytes) from the start of the executable file. |
security object | Some methods are compiled knowing that they are calling system services that require security checks. These methods allocate a location in their stack frame (currently the last temporary variable) in which the system will store a security token at runtime. The compiler is responsible only for initializing the location when the method begins execution and for making sure that the method GC information indicates that the method has a security object. |
SEH facility | The Structured Exception Handling facility supplied by the PAL (or by the Win32 API). The Code Manager is responsible for part of the interface between the runtime system and the Win32 SEH facility. The details of this interface are subject to change. |
shim | Used in the SSCLI source code to refer to the .NET Framework startup code used to bootstrap some version of the .NET Framework by means of the system loader on Windows systems. In the Shared Source CLI, the clix application launcher program is used to load PE images rather than the shim technology. |
simple name | An assembly that has a blank public key field has only a simple name. See also strong name. |
source language processor or SLP |
The compiler or JIT compiler that produced the executing code. For a given programming language there might be multiple implementations (for example, from different vendors) and for each implementation there might be multiple source language processors (for example, a compiler, an optimizing compiler, a JIT compiler, and an optimized JIT compiler). |
strong name | An assembly that has the cryptographic public key field containing a public key value has a strong name. A strong name implies that the assembly is also signed with the private key. See also simple name and partially signed. |
this | A pointer to the object instance on whose behalf the current method is executing. Not all methods have a this pointer. Static methods in C#, for example, do not have a this pointer. |
unmanaged code | Code that runs outside the common language runtime. ECMA Section III specifies the assumptions made by the runtime about the behavior of such code. |
untracked | An argument, variable, or local variable that contains a garbage collection pointer but whose lifetime information is not available at runtime. Untracked locations are assumed by the garbage collector to be live during the execution of the entire method body, so they must be initialized by the prolog and must be either cleared at the end of their lifetime (if known) or when their contents might become incorrect. |
variable-sized stack area | See parameter area. |
Windows NDP | The .NET developer platform (.NET Framework) on Windows. "Windows NDP v1" refers to the first released version of the .NET Framework on Windows. |
Win32 PCONTEXT | Pointer to a computation context sufficient to resume (or alter and resume) a computation. Part of the Win32 API specification. |
zaplogs or zapmonitor |
Anything with the "zap" name in the source code refers to native image code generation (also called "ngen"). In native code image generation, JIT-compiled code is stored to the file system for faster loading. The SSCLI implementation does not support generating or using native code images. |
Copyright (c) 2006 Microsoft Corporation. All rights reserved.