Age | Commit message (Collapse) | Author |
|
|
|
Cleanup C++ glue code related to JIT helpers
|
|
Add early out for generic type definitions EETypes
|
|
Generic type definitions are not handled yet and crash the compiler.
Reflection has "LDTOKEN Nullable`1" in the code that triggers a crash.
|
|
Change the initialization of UnmanagedPdbSymbolReader to use hosting APIs from the full .NET Framework.
|
|
|
|
|
|
Add support for reading portable IL PDB using System.Reflection.Metadata.dll. We will try to open the IL PDB file using the portable pdb reader first, and fallback to the unmanaged diasymreader for non-portable pdbs.
Fixes #49
|
|
|
|
System.Reflection.Metadata introduced LocalVariable type. Rename the type in ILCompiler to avoid collisions.
|
|
- Add lookup of all RyuJIT intrinsics
- Update manage implementations of the intrinsics to fit with what RyuJIT is capable of
- Make intrinsic expansions by the codegen to be optional by providing fallback paths
- Fix USE_PORTABLE_HELPERS to be defined for portable runtime only
These changes are under CORERT ifdefs as necessary to be reconciled with .NET Native for UWP later.
|
|
- Explicitly use memory mapped files for Ecma metadata reader. System.Reflection.Metadata has
heuristic that tries to save virtual address space. This heuristic does not work well for us
since it can make IL access very slow (call to OS for each method IL query). Explicitly using
memory mapped files gives us reliably the desired performance characteristics.
- Implement caching in MethodILProvider.
- Refactor command line parsing - move TypeSystemContext instantiation from the driver .exe into the compiler
These performance improvements bring hello world native compilation from multiple seconds back to sub second range (with release build of RyuJIT and NGened compiler).
|
|
|
|
- Respect explicit layout and emit proper EEType flags in CppCodeGen - required for "Hello world" with TODOs removed
- Reduce dependencies of autogenerated files for CppCodeGen
|
|
|
|
- For now - until we have the proper multifile compilation in place, link the Runtime.Base .cs files into System.Private.CoreLib. The proper factoring of Runtime.Base is still guaranteed by building Runtime.Base as separate .dll.
- Remove many stubbed out helpers since the proper implementation is comming from Runtime.Base now.
- Fix CppCodeGen to deal with same RuntimeImport being used with different signatures (e.g. RpNewArray is imported under two different signatures in System.Private.CoreLib)
|
|
Fix #519
|
|
Add JIT-EE interface wrappers to handle exceptions
|
|
- Add a Module property to MetadataType derivatives
- Add useful stuff to GenericParameterDesc
|
|
* When JIT calls into the JIT-EE interface, the call is wrapped.
All managed exceptions are caught by the wrapper, and re-throw as
native exceptions.
* The call from ILCompiler to JIT is also wrapped. The wrapper catches
all native exceptions, and re-throws them as managed exceptions.
* The message and call stack from the original managed exception is
captured and stored in the unmanaged exception object, and restored
in the managed exception thrown by the JIT wrapper.
* A new native module (jitinterface.dll or jitinterface.so) is added
to contain the native part of the wrappers. Long term, we should
consider whether to merge this into JIT.
|
|
Type system metadata tweaks
|
|
- Move name to MetadataType and separate Namespace from Name. Name can
be a MetadataString once we have it.
- Introduce GenerericParameterDesc in the type hierarchy. For now it
doesn't have anything.
- Move ContainingType to MetadataType
- Expose literal fields.
|
|
Represent C++ MethodCode using DependencyNode. Data structures are not switched yet.
|
|
|
|
Populate EEType Optional Fields
|
|
Add rare flags, value type field padding, nullable type value offset.
Add ICastable method slots - untested since code using interfaces will not compile yet.
DispatchMap remains, which we need interface support for first.
Place all EEType enums for flags / fields into a single source file, EEType.Constants.cs
|
|
- Remove unused EcmaMethod extension methods
- Move Nested types api from EcmaType to MetadataType
- Remove nearly all dependency on the Ecma type system api from tests
|
|
|
|
Fill out the fixed portion of the EEType data structure as expected by the runtime along with most of the variable pieces that follow.
Correct the code-gen's calculation of where VTable entries start in the EEType.
Add type-system support for asking if a type has a finalizer.
Move EEType Flags and Kinds enums to the Common folder and consume them from the compiler and runtime.
Transpose the new Type System's Category to a CorElementType for primitives / enum underlying types.
Remove HasFinalizer assert in RhNewObject
The following pieces are incomplete:
Optional fields side data structure
Interface dispatch map pointers
Type variance
Sealed virtual slots blob
Generic Type Def EETypes
|
|
- Convert GetWellKnownType to return DefType
- Change OwningType on FieldDesc to be of type DefType
|
|
Create managed objects for String[] args and each string command line
argument and pass them in through the call to __managed__Main.
Add System.String[] as a rooted type (until we generate start-up code in
managed and don't need the lib export).
|
|
- Fix few issues and produce xunit format
- Set HOME if undefined and DOTNET_HOME
- Enable CPP and JIT for all platforms except OSX
o CLI has no support for RyuJIT.
|
|
See issue #440.
Replaced TARGET_X64 by _TARGET_AMD64_.
|
|
MethodCode abstraction was redundant with MethodCodeNode.
Fixes part of #68
|
|
Only apply SkipJitList on Unix platforms
|
|
Helps with test bucketing.
Also, some of the things on the skipJitList now work, but I really don't
want to retest on Linux to refresh the list because it's pointless at
this point (with the right fix in code review).
|
|
|
|
https://github.com/dotnet/corert/commit/8e0b6a850a17703e47ce50eb7dcd364e85c78149#diff-56344fb6f0d526f3fd8611ebd82ed7d6
|
|
- Disambiguate singleton globals by prepending compilation unit prefix to them
- Emit alternate entry for RuntimeExport methods. Fixes #153.
|
|
|
|
Using the https://github.com/dotnet/codeformatter tool with the
following command line:
/rule-:FieldNames,ReadonlyFields ILCompiler.sln
|
|
These no longer rely on CompilerTypeSystemContext and therefore can live
in the Common directory.
|
|
I didn't move much functionality over to ModuleDesc mostly to find out
what are the exact things we will need on a ModuleDesc.
Notably, I didn't put GetName() on it to keep the door open to introduce
AssemblyDesc/EcmaAssembly (deriving from ModuleDesc).
|
|
Enable range check code in MDArray accessors
|
|
The code was already there, but ILEmitter didn't support labels at the
time it was written.
We now emit IL to check the bounds of multidimensional arrays in
Get/Set/Address methods and throw an IndexOutOfRangeException if an out
of bounds access was made.
Fixes half of what's in scope for issue #89.
|
|
They belong to a NodeFactory instance.
|
|
- Add -systemmodule command line option that allows specification of the system module
- Root RuntimeExport methods for compilation
- Change the static constructor helpers to be looked up lazily in ReadyToRunHelperNode
- Fix up a few places in Runtime.Base that used to need static constructors
|
|
IntelliSense.
|
|
Relocation or a BlockRelativeTarget.
|
|
The CommonPath is pretty, but this break IntelliSense in Visual Studio
2015.
Fixes #292
|