summaryrefslogtreecommitdiff
path: root/src/vm/pefile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/pefile.cpp')
-rw-r--r--src/vm/pefile.cpp402
1 files changed, 0 insertions, 402 deletions
diff --git a/src/vm/pefile.cpp b/src/vm/pefile.cpp
index e322b26ddb..16c66b516d 100644
--- a/src/vm/pefile.cpp
+++ b/src/vm/pefile.cpp
@@ -1891,18 +1891,7 @@ BOOL PEFile::GetResource(LPCSTR szName, DWORD *cbResource,
return TRUE;
}
-#ifdef FEATURE_MULTIMODULE_ASSEMBLIES
- // The resource is either linked or embedded in a non-manifest-containing file
- if (pDomainAssembly == NULL)
- return FALSE;
-
- return pDomainAssembly->GetModuleResource(mdLinkRef, szName, cbResource,
- pbInMemoryResource, szFileName,
- dwLocation, IsMrPublic(dwResourceFlags),
- pStackMark, fSkipSecurityCheck);
-#else
return FALSE;
-#endif // FEATURE_MULTIMODULE_ASSEMBLIES
default:
ThrowHR(COR_E_BADIMAGEFORMAT, BFA_INVALID_TOKEN_IN_MANIFESTRES);
@@ -2733,383 +2722,6 @@ HRESULT PEFile::GetVersion(USHORT *pMajor, USHORT *pMinor, USHORT *pBuild, USHOR
return hr;
}
-#ifdef FEATURE_MULTIMODULE_ASSEMBLIES
-// ================================================================================
-// PEModule class - a PEFile which represents a satellite module
-// ================================================================================
-
-PEModule::PEModule(PEImage *image, PEAssembly *assembly, mdFile token, IMetaDataEmit *pEmit)
- : PEFile(image),
- m_assembly(NULL),
- m_token(token),
- m_bIsResource(-1)
-{
- CONTRACTL
- {
- PRECONDITION(CheckPointer(image, NULL_OK));
- PRECONDITION(CheckPointer(assembly));
- PRECONDITION(!IsNilToken(token));
- PRECONDITION(CheckPointer(pEmit, NULL_OK));
- PRECONDITION(image != NULL || pEmit != NULL);
- CONSTRUCTOR_CHECK;
- STANDARD_VM_CHECK;
- }
- CONTRACTL_END;
-
- DWORD flags;
-
- // get only the data which is required, here - flags
- // this helps avoid unnecessary memory touches
- IfFailThrow(assembly->GetPersistentMDImport()->GetFileProps(token, NULL, NULL, NULL, &flags));
-
- if (image != NULL)
- {
- if (IsFfContainsMetaData(flags) && !image->CheckILFormat())
- ThrowHR(COR_E_BADIMAGEFORMAT);
-
- if (assembly->IsIStream())
- {
- m_flags |= PEFILE_ISTREAM;
-#ifdef FEATURE_PREJIT
- m_fCanUseNativeImage = FALSE;
-#endif
- }
- }
-
- assembly->AddRef();
-
- m_assembly = assembly;
-
- m_flags |= PEFILE_MODULE;
- if (assembly->IsSystem())
- {
- m_flags |= PEFILE_SYSTEM;
- }
- else
- {
- if (assembly->IsIntrospectionOnly())
- {
- m_flags |= PEFILE_INTROSPECTIONONLY;
-#ifdef FEATURE_PREJIT
- SetCannotUseNativeImage();
-#endif
- }
- }
-
-
- // Verify module format. Note that some things have already happened:
- // - Fusion has verified the name matches the metadata
- // - PEimage has performed PE file format validation
-
- if (assembly->NeedsModuleHashChecks())
- {
- ULONG size;
- const void *hash;
- IfFailThrow(assembly->GetPersistentMDImport()->GetFileProps(token, NULL, &hash, &size, NULL));
-
- if (!CheckHash(assembly->GetHashAlgId(), hash, size))
- ThrowHR(COR_E_MODULE_HASH_CHECK_FAILED);
- }
-
-#if defined(FEATURE_PREJIT) && !defined(CROSSGEN_COMPILE)
- // Find the native image
- if (IsFfContainsMetaData(flags)
- && m_fCanUseNativeImage
- && assembly->HasNativeImage()
- && assembly->GetFusionAssembly() != NULL)
- {
- IAssemblyLocation *pIAssemblyLocation = assembly->GetNativeAssemblyLocation();
-
- WCHAR wzPath[MAX_LONGPATH];
- WCHAR *pwzTemp = NULL;
- DWORD dwCCPath = MAX_LONGPATH;
- SString path;
- SString moduleName(SString::Utf8, GetSimpleName());
-
- // Compute the module path from the manifest module path
- IfFailThrow(pIAssemblyLocation->GetPath(wzPath, &dwCCPath));
- pwzTemp = PathFindFileName(wzPath);
- *pwzTemp = (WCHAR) 0x00;
-
- // <TODO>@todo: GetAppDomain????</TODO>
- path.Set(wzPath);
- path.Append((LPCWSTR) moduleName);
-
- SetNativeImage(path);
- }
-#endif // FEATURE_PREJIT && !CROSSGEN_COMPILE
-
-#if _DEBUG
- GetCodeBaseOrName(m_debugName);
- m_pDebugName = m_debugName;
-#endif
-
- if (IsFfContainsMetaData(flags))
- {
- if (image != NULL)
- {
- OpenMDImport_Unsafe(); //constructor. cannot race with anything
- }
- else
- {
- _ASSERTE(!m_bHasPersistentMDImport);
- IfFailThrow(GetMetaDataInternalInterfaceFromPublic(pEmit, IID_IMDInternalImport,
- (void **)&m_pMDImport));
- m_pEmitter = pEmit;
- pEmit->AddRef();
- m_bHasPersistentMDImport=TRUE;
- m_MDImportIsRW_Debugger_Use_Only = TRUE;
- }
-
- // Fusion probably checks this, but we need to check this ourselves if
- // this file didn't come from Fusion
- if (!m_pMDImport->IsValidToken(m_pMDImport->GetModuleFromScope()))
- COMPlusThrowHR(COR_E_BADIMAGEFORMAT);
- }
- else
- {
- // Go ahead and "load" image since it is essentially a noop, but will enable
- // more operations on the module earlier in the loading process.
- LoadLibrary();
- }
-#ifdef FEATURE_PREJIT
- if (IsResource() || IsDynamic())
- m_fCanUseNativeImage = FALSE;
-#endif
-}
-
-PEModule::~PEModule()
-{
- CONTRACTL
- {
- DESTRUCTOR_CHECK;
- NOTHROW;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- m_assembly->Release();
-}
-
-/* static */
-PEModule *PEModule::Open(PEAssembly *assembly, mdFile token,
- const SString &fileName)
-{
- STANDARD_VM_CONTRACT;
-
- PEModule *result = NULL;
-
- EX_TRY
- {
- result = DoOpen(assembly, token, fileName);
- }
- EX_HOOK
- {
- Exception *ex = GET_EXCEPTION();
-
- // Rethrow non-transient exceptions as file load exceptions with proper
- // context
-
- if (!ex->IsTransient())
- EEFileLoadException::Throw(fileName, ex->GetHR(), ex);
- }
- EX_END_HOOK;
-
- return result;
-}
-// Thread stress
-class DoOpenPathStress : APIThreadStress
-{
-public:
- PEAssembly *assembly;
- mdFile token;
- const SString &fileName;
- DoOpenPathStress(PEAssembly *assembly, mdFile token,
- const SString &fileName)
- : assembly(assembly), token(token), fileName(fileName)
- {
- WRAPPER_NO_CONTRACT;
- fileName.Normalize();
- }
- void Invoke()
- {
- WRAPPER_NO_CONTRACT;
- PEModuleHolder result(PEModule::Open(assembly, token, fileName));
- }
-};
-
-/* static */
-PEModule *PEModule::DoOpen(PEAssembly *assembly, mdFile token,
- const SString &fileName)
-{
- CONTRACT(PEModule *)
- {
- PRECONDITION(CheckPointer(assembly));
- PRECONDITION(CheckValue(fileName));
- PRECONDITION(!IsNilToken(token));
- PRECONDITION(!fileName.IsEmpty());
- POSTCONDITION(CheckPointer(RETVAL));
- STANDARD_VM_CHECK;
- }
- CONTRACT_END;
-
- DoOpenPathStress ts(assembly, token, fileName);
-
- // If this is a resource module, we must explicitly request a flat mapping
- DWORD flags;
- IfFailThrow(assembly->GetPersistentMDImport()->GetFileProps(token, NULL, NULL, NULL, &flags));
-
- PEImageHolder image;
- {
- image = PEImage::OpenImage(fileName);
- }
-
- if (flags & ffContainsNoMetaData)
- image->LoadNoMetaData(assembly->IsIntrospectionOnly());
-
- PEModuleHolder module(new PEModule(image, assembly, token, NULL));
-
- RETURN module.Extract();
-}
-
-/* static */
-PEModule *PEModule::OpenMemory(PEAssembly *assembly, mdFile token,
- const void *flat, COUNT_T size)
-{
- STANDARD_VM_CONTRACT;
-
- PEModule *result = NULL;
-
- EX_TRY
- {
- result = DoOpenMemory(assembly, token, flat, size);
- }
- EX_HOOK
- {
- Exception *ex = GET_EXCEPTION();
-
- // Rethrow non-transient exceptions as file load exceptions with proper
- // context
- if (!ex->IsTransient())
- EEFileLoadException::Throw(assembly, flat, size, ex->GetHR(), ex);
- }
- EX_END_HOOK;
- return result;
-}
-
-// Thread stress
-class DoOpenTokenStress : APIThreadStress
-{
-public:
- PEAssembly *assembly;
- mdFile token;
- const void *flat;
- COUNT_T size;
- DoOpenTokenStress(PEAssembly *assembly, mdFile token,
- const void *flat, COUNT_T size)
- : assembly(assembly), token(token), flat(flat), size(size) {LIMITED_METHOD_CONTRACT;}
- void Invoke()
- {
- WRAPPER_NO_CONTRACT;
- PEModuleHolder result(PEModule::OpenMemory(assembly, token, flat, size));
- }
-};
-
-// REVIEW: do we need to know the creator module which emitted the module (separately
-// from the assembly parent) for security reasons?
-/* static */
-PEModule *PEModule::DoOpenMemory(PEAssembly *assembly, mdFile token,
- const void *flat, COUNT_T size)
-{
- CONTRACT(PEModule *)
- {
- PRECONDITION(CheckPointer(assembly));
- PRECONDITION(!IsNilToken(token));
- PRECONDITION(CheckPointer(flat));
- POSTCONDITION(CheckPointer(RETVAL));
- THROWS;
- GC_TRIGGERS;
- MODE_ANY;
- INJECT_FAULT(COMPlusThrowOM(););
- }
- CONTRACT_END;
-
- DoOpenTokenStress ts(assembly, token, flat, size);
-
- PEImageHolder image(PEImage::LoadFlat(flat, size));
-
- RETURN new PEModule(image, assembly, token, NULL);
-}
-
-/* static */
-PEModule *PEModule::Create(PEAssembly *assembly, mdFile token, IMetaDataEmit *pEmit)
-{
- CONTRACT(PEModule *)
- {
- PRECONDITION(CheckPointer(assembly));
- PRECONDITION(!IsNilToken(token));
- STANDARD_VM_CHECK;
- POSTCONDITION(CheckPointer(RETVAL));
- }
- CONTRACT_END;
-
- RETURN new PEModule(NULL, assembly, token, pEmit);
-}
-
-// ------------------------------------------------------------
-// Logging
-// ------------------------------------------------------------
-#ifdef FEATURE_PREJIT
-void PEModule::ExternalVLog(DWORD facility, DWORD level, const WCHAR *fmt, va_list args)
-{
- CONTRACT_VOID
- {
- THROWS;
- GC_TRIGGERS;
- }
- CONTRACT_END;
-
- m_assembly->ExternalVLog(facility, level, fmt, args);
-
- RETURN;
-}
-
-void PEModule::FlushExternalLog()
-{
- CONTRACT_VOID
- {
- THROWS;
- GC_TRIGGERS;
- }
- CONTRACT_END;
-
- m_assembly->FlushExternalLog();
-
- RETURN;
-}
-
-// ------------------------------------------------------------
-// Loader support routines
-// ------------------------------------------------------------
-void PEModule::SetNativeImage(const SString &fullPath)
-{
- CONTRACTL
- {
- INSTANCE_CHECK;
- PRECONDITION(CheckValue(fullPath));
- PRECONDITION(!fullPath.IsEmpty());
- STANDARD_VM_CHECK;
- }
- CONTRACTL_END;
-
- PEImageHolder image(PEImage::OpenImage(fullPath));
- image->Load();
-
- PEFile::SetNativeImage(image);
-}
-#endif // FEATURE_PREJIT
-
-#endif // FEATURE_MULTIMODULE_ASSEMBLIES
void PEFile::EnsureImageOpened()
@@ -3174,20 +2786,6 @@ PEAssembly::EnumMemoryRegions(CLRDataEnumMemoryFlags flags)
}
}
-#ifdef FEATURE_MULTIMODULE_ASSEMBLIES
-void
-PEModule::EnumMemoryRegions(CLRDataEnumMemoryFlags flags)
-{
- WRAPPER_NO_CONTRACT;
-
- PEFile::EnumMemoryRegions(flags);
-
- if (m_assembly.IsValid())
- {
- m_assembly->EnumMemoryRegions(flags);
- }
-}
-#endif // FEATURE_MULTIMODULE_ASSEMBLIES
#endif // #ifdef DACCESS_COMPILE