summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorSven Boemer <sbomer@gmail.com>2018-03-19 20:23:39 -0700
committerJan Kotas <jkotas@microsoft.com>2018-03-19 20:23:39 -0700
commit77d4c11fcd67414d2195a63287e9c8e0b6f32958 (patch)
tree0e5e9835a0f047815a3c4e8f7955262032de4f24 /src/vm
parent66758f48163b90700f0551fd9df4f15bcd1a8a45 (diff)
downloadcoreclr-77d4c11fcd67414d2195a63287e9c8e0b6f32958.tar.gz
coreclr-77d4c11fcd67414d2195a63287e9c8e0b6f32958.tar.bz2
coreclr-77d4c11fcd67414d2195a63287e9c8e0b6f32958.zip
Use flat layout for GetAssemblyName (#17052)
* Use flat layout for GetAssemblyName This change will result in the use flat layouts for the temporary layouts created by GetAssemblyName. This allows crossgen'd PE images created for a different OS to be loaded in the code path that retrieves the assembly name. * Respond to PR feedback Add comment, and remove dead code.
Diffstat (limited to 'src/vm')
-rw-r--r--src/vm/assemblyname.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/vm/assemblyname.cpp b/src/vm/assemblyname.cpp
index f0ed60bb6d..4fd6e20ee8 100644
--- a/src/vm/assemblyname.cpp
+++ b/src/vm/assemblyname.cpp
@@ -56,15 +56,18 @@ FCIMPL1(Object*, AssemblyNameNative::GetFileInformation, StringObject* filenameU
SString sFileName(gc.filename->GetBuffer());
PEImageHolder pImage = PEImage::OpenImage(sFileName, MDInternalImport_NoCache);
+ // Load the temporary image using a flat layout, instead of
+ // waiting for it to happen during HasNTHeaders. This allows us to
+ // get the assembly name for images that contain native code for a
+ // non-native platform.
+ PEImageLayoutHolder pLayout(pImage->GetLayout(PEImageLayout::LAYOUT_FLAT, PEImage::LAYOUT_CREATEIFNEEDED));
+
// Allow AssemblyLoadContext.GetAssemblyName for native images on CoreCLR
if (pImage->HasNTHeaders() && pImage->HasCorHeader() && pImage->HasNativeHeader())
pImage->VerifyIsNIAssembly();
else
pImage->VerifyIsAssembly();
- SString sUrl = sFileName;
- PEAssembly::PathToUrl(sUrl);
-
AssemblySpec spec;
spec.InitializeSpec(TokenFromRid(mdtAssembly,1),pImage->GetMDImport(),NULL,TRUE);
spec.AssemblyNameInit(&gc.result, pImage);