Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -379,10 +379,12 @@ internal IAssemblyMetadata R2RManifestMetadata
}

/// <summary>
/// Initializes the fields of the R2RHeader and R2RMethods
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="filename">PE image</param>
/// <exception cref="BadImageFormatException">The Cor header flag must be ILLibrary</exception>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="metadata">Assembly metadata</param>
/// <param name="peReader">PE image</param>
/// <param name="filename">PE file name</param>
public ReadyToRunReader(IAssemblyResolver assemblyResolver, IAssemblyMetadata metadata, PEReader peReader, string filename)
{
_assemblyResolver = assemblyResolver;
Expand All @@ -392,17 +394,57 @@ public ReadyToRunReader(IAssemblyResolver assemblyResolver, IAssemblyMetadata me
}

/// <summary>
/// Initializes the fields of the R2RHeader and R2RMethods
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="filename">PE image</param>
/// <exception cref="BadImageFormatException">The Cor header flag must be ILLibrary</exception>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="metadata">Assembly metadata</param>
/// <param name="peReader">PE image</param>
/// <param name="filename">PE file name</param>
/// <param name="content">PE image content</param>
public ReadyToRunReader(IAssemblyResolver assemblyResolver, IAssemblyMetadata metadata, PEReader peReader, string filename, ReadOnlyMemory<byte> content)
{
_assemblyResolver = assemblyResolver;
CompositeReader = peReader;
Filename = filename;
Image = ConvertToArray(content);
Initialize(metadata);
}

/// <summary>
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="filename">PE file name</param>
public unsafe ReadyToRunReader(IAssemblyResolver assemblyResolver, string filename)
{
_assemblyResolver = assemblyResolver;
Filename = filename;
Initialize(metadata: null);
}

/// <summary>
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="filename">PE file name</param>
/// <param name="content">PE image content</param>
public unsafe ReadyToRunReader(IAssemblyResolver assemblyResolver, string filename, ReadOnlyMemory<byte> content)
{
_assemblyResolver = assemblyResolver;
Filename = filename;
Image = ConvertToArray(content);
Initialize(metadata: null);
}

private unsafe byte[] ConvertToArray(ReadOnlyMemory<byte> content)
{
if (MemoryMarshal.TryGetArray(content, out ArraySegment<byte> segment) && (segment.Offset == 0) && (segment.Count == content.Length))
{
return segment.Array;
}
return content.ToArray();
}

public static bool IsReadyToRunImage(PEReader peReader)
{
if (peReader.PEHeaders == null)
Expand Down Expand Up @@ -441,10 +483,9 @@ private unsafe void Initialize(IAssemblyMetadata metadata)

if (CompositeReader == null)
{
byte[] image = File.ReadAllBytes(Filename);
Image = image;
Image ??= File.ReadAllBytes(Filename);
byte[] image = Image;
ImagePin = new PinningReference(image);

CompositeReader = new PEReader(Unsafe.As<byte[], ImmutableArray<byte>>(ref image));
}
else
Expand Down Expand Up @@ -1140,7 +1181,7 @@ private void CountRuntimeFunctions(bool[] isEntryPoint, IDictionary<int, int[]>
count++;
i++;
} while (i < isEntryPoint.Length && !isEntryPoint[i] && i < firstColdRuntimeFunction);

if (dHotColdMap.ContainsKey(runtimeFunctionId))
{
int coldSize = dHotColdMap[runtimeFunctionId].Length;
Expand Down
Loading