Skip to content

Commit

Permalink
Make Module::LoadAssembly return Assembly instead of DomainAssembly (#…
Browse files Browse the repository at this point in the history
…107411)

- Switch `Module::LoadAssembly` to return `Assembly` instead of `DomainAssembly`
- Remove unnecessary parameter on Module::GetAssemblyIfLoaded
- Remove `AssemblySpec::LoadDomainAssembly` - make callers use `AssemblySpec::LoadAssembly` instead
  • Loading branch information
elinor-fung committed Sep 6, 2024
1 parent d4601d3 commit 42f3dce
Show file tree
Hide file tree
Showing 11 changed files with 43 additions and 88 deletions.
17 changes: 4 additions & 13 deletions src/coreclr/vm/assembly.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -639,11 +639,9 @@ Module *Assembly::FindModuleByExportedType(mdExportedType mdType,
{
#ifndef DACCESS_COMPILE
// LoadAssembly never returns NULL
DomainAssembly * pDomainAssembly =
GetModule()->LoadAssembly(mdLinkRef);
PREFIX_ASSUME(pDomainAssembly != NULL);

RETURN pDomainAssembly->GetModule();
pAssembly = GetModule()->LoadAssembly(mdLinkRef);
PREFIX_ASSUME(pAssembly != NULL);
break;
#else
_ASSERTE(!"DAC shouldn't attempt to trigger loading");
return NULL;
Expand Down Expand Up @@ -868,14 +866,7 @@ Module * Assembly::FindModuleByTypeRef(
RETURN NULL;
}


DomainAssembly * pDomainAssembly = pModule->LoadAssembly(tkType);


if (pDomainAssembly == NULL)
RETURN NULL;

pAssembly = pDomainAssembly->GetAssembly();
pAssembly = pModule->LoadAssembly(tkType);
if (pAssembly == NULL)
{
RETURN NULL;
Expand Down
38 changes: 9 additions & 29 deletions src/coreclr/vm/assemblyspec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,24 +295,6 @@ void AssemblySpec::InitializeAssemblyNameRef(_In_ BINDER_SPACE::AssemblyName* as
spec.AssemblyNameInit(assemblyNameRef);
}

Assembly *AssemblySpec::LoadAssembly(FileLoadLevel targetLevel, BOOL fThrowOnFileNotFound)
{
CONTRACTL
{
THROWS;
GC_TRIGGERS;
MODE_ANY;
}
CONTRACTL_END;

DomainAssembly * pDomainAssembly = LoadDomainAssembly(targetLevel, fThrowOnFileNotFound);
if (pDomainAssembly == NULL) {
_ASSERTE(!fThrowOnFileNotFound);
return NULL;
}
return pDomainAssembly->GetAssembly();
}

AssemblyBinder* AssemblySpec::GetBinderFromParentAssembly(AppDomain *pDomain)
{
CONTRACTL
Expand Down Expand Up @@ -372,10 +354,10 @@ AssemblyBinder* AssemblySpec::GetBinderFromParentAssembly(AppDomain *pDomain)
return pParentAssemblyBinder;
}

DomainAssembly *AssemblySpec::LoadDomainAssembly(FileLoadLevel targetLevel,
BOOL fThrowOnFileNotFound)
Assembly *AssemblySpec::LoadAssembly(FileLoadLevel targetLevel,
BOOL fThrowOnFileNotFound)
{
CONTRACT(DomainAssembly *)
CONTRACT(Assembly *)
{
INSTANCE_CHECK;
THROWS;
Expand All @@ -390,23 +372,21 @@ DomainAssembly *AssemblySpec::LoadDomainAssembly(FileLoadLevel targetLevel,
ETWOnStartup (LoaderCatchCall_V1, LoaderCatchCallEnd_V1);
AppDomain* pDomain = GetAppDomain();

DomainAssembly* pAssembly = pDomain->FindCachedAssembly(this);
if (pAssembly)
DomainAssembly* domainAssembly = pDomain->FindCachedAssembly(this);
if (domainAssembly)
{
BinderTracing::AssemblyBindOperation bindOperation(this);
bindOperation.SetResult(pAssembly->GetPEAssembly(), true /*cached*/);
bindOperation.SetResult(domainAssembly->GetPEAssembly(), true /*cached*/);

pDomain->LoadDomainAssembly(pAssembly, targetLevel);
RETURN pAssembly;
pDomain->LoadDomainAssembly(domainAssembly, targetLevel);
RETURN domainAssembly->GetAssembly();
}

PEAssemblyHolder pFile(pDomain->BindAssemblySpec(this, fThrowOnFileNotFound));
if (pFile == NULL)
RETURN NULL;

pAssembly = pDomain->LoadDomainAssembly(this, pFile, targetLevel);

RETURN pAssembly;
RETURN pDomain->LoadAssembly(this, pFile, targetLevel);
}

/* static */
Expand Down
3 changes: 0 additions & 3 deletions src/coreclr/vm/assemblyspec.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ class AssemblySpec : public BaseAssemblySpec
friend Assembly * Module::GetAssemblyIfLoaded(
mdAssemblyRef kAssemblyRef,
IMDInternalImport * pMDImportOverride,
BOOL fDoNotUtilizeExtraChecks,
AssemblyBinder *pBinderForLoadedAssembly);

public:
Expand Down Expand Up @@ -175,8 +174,6 @@ class AssemblySpec : public BaseAssemblySpec

Assembly *LoadAssembly(FileLoadLevel targetLevel,
BOOL fThrowOnFileNotFound = TRUE);
DomainAssembly *LoadDomainAssembly(FileLoadLevel targetLevel,
BOOL fThrowOnFileNotFound = TRUE);

public: // static
// Creates and loads an assembly based on the name and context.
Expand Down
35 changes: 13 additions & 22 deletions src/coreclr/vm/ceeload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2258,7 +2258,6 @@ Assembly *
Module::GetAssemblyIfLoaded(
mdAssemblyRef kAssemblyRef,
IMDInternalImport * pMDImportOverride, // = NULL
BOOL fDoNotUtilizeExtraChecks, // = FALSE
AssemblyBinder *pBinderForLoadedAssembly // = NULL
)
{
Expand Down Expand Up @@ -2387,9 +2386,9 @@ ModuleBase::GetAssemblyRefFlags(
} // Module::GetAssemblyRefFlags

#ifndef DACCESS_COMPILE
DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
Assembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
{
CONTRACT(DomainAssembly *)
CONTRACT(Assembly *)
{
INSTANCE_CHECK;
if (FORBIDGC_LOADER_USE_ENABLED()) NOTHROW; else THROWS;
Expand All @@ -2402,20 +2401,17 @@ DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)

ETWOnStartup (LoaderCatchCall_V1, LoaderCatchCallEnd_V1);

DomainAssembly * pDomainAssembly;

//
// Early out quickly if the result is cached
//
Assembly * pAssembly = LookupAssemblyRef(kAssemblyRef);
if (pAssembly != NULL)
{
pDomainAssembly = pAssembly->GetDomainAssembly();
::GetAppDomain()->LoadDomainAssembly(pDomainAssembly, FILE_LOADED);

RETURN pDomainAssembly;
::GetAppDomain()->LoadDomainAssembly(pAssembly->GetDomainAssembly(), FILE_LOADED);
RETURN pAssembly;
}

DomainAssembly * pDomainAssembly;
{
PEAssemblyHolder pPEAssembly = GetPEAssembly()->LoadAssembly(kAssemblyRef);
AssemblySpec spec;
Expand All @@ -2431,23 +2427,18 @@ DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
pDomainAssembly = GetAppDomain()->LoadDomainAssembly(&spec, pPEAssembly, FILE_LOADED);
}

if (pDomainAssembly != NULL)
{
_ASSERTE(
pDomainAssembly->IsSystem() || // GetAssemblyIfLoaded will not find CoreLib (see AppDomain::FindCachedFile)
!pDomainAssembly->IsLoaded() || // GetAssemblyIfLoaded will not find not-yet-loaded assemblies
GetAssemblyIfLoaded(kAssemblyRef, NULL, FALSE, pDomainAssembly->GetPEAssembly()->GetHostAssembly()->GetBinder()) != NULL); // GetAssemblyIfLoaded should find all remaining cases
pAssembly = pDomainAssembly->GetAssembly();
_ASSERTE(pDomainAssembly->IsLoaded() && pAssembly != NULL);
_ASSERTE(
pDomainAssembly->IsSystem() || // GetAssemblyIfLoaded will not find CoreLib (see AppDomain::FindCachedFile)
GetAssemblyIfLoaded(kAssemblyRef, NULL, pDomainAssembly->GetPEAssembly()->GetHostAssembly()->GetBinder()) != NULL); // GetAssemblyIfLoaded should find all remaining cases

if (pDomainAssembly->GetAssembly() != NULL)
{
StoreAssemblyRef(kAssemblyRef, pDomainAssembly->GetAssembly());
}
}
StoreAssemblyRef(kAssemblyRef, pAssembly);

RETURN pDomainAssembly;
RETURN pAssembly;
}
#else
DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
Assembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
{
WRAPPER_NO_CONTRACT;
ThrowHR(E_FAIL);
Expand Down
8 changes: 3 additions & 5 deletions src/coreclr/vm/ceeload.h
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ class ModuleBase
// The vtable needs to match between DAC and non-DAC, but we don't want any use of IsSigInIL in the DAC
virtual BOOL IsSigInILImpl(PCCOR_SIGNATURE signature) { return FALSE; } // ModuleBase doesn't have a PE image to examine
// The vtable needs to match between DAC and non-DAC, but we don't want any use of LoadAssembly in the DAC
virtual DomainAssembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) = 0;
virtual Assembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) = 0;

// The vtable needs to match between DAC and non-DAC, but we don't want any use of ThrowTypeLoadException in the DAC
virtual void DECLSPEC_NORETURN ThrowTypeLoadExceptionImpl(IMDInternalImport *pInternalImport,
Expand Down Expand Up @@ -552,7 +552,6 @@ class ModuleBase
virtual Assembly * GetAssemblyIfLoaded(
mdAssemblyRef kAssemblyRef,
IMDInternalImport * pMDImportOverride = NULL,
BOOL fDoNotUtilizeExtraChecks = FALSE,
AssemblyBinder *pBinderForLoadedAssembly = NULL
)
{
Expand All @@ -573,7 +572,7 @@ class ModuleBase

// The vtable needs to match between DAC and non-DAC, but we don't want any use of IsSigInIL in the DAC
BOOL IsSigInIL(PCCOR_SIGNATURE signature) { return IsSigInILImpl(signature); }
DomainAssembly * LoadAssembly(mdAssemblyRef kAssemblyRef)
Assembly * LoadAssembly(mdAssemblyRef kAssemblyRef)
{
WRAPPER_NO_CONTRACT;
return LoadAssemblyImpl(kAssemblyRef);
Expand Down Expand Up @@ -1129,7 +1128,6 @@ class Module : public ModuleBase
Assembly * GetAssemblyIfLoaded(
mdAssemblyRef kAssemblyRef,
IMDInternalImport * pMDImportOverride = NULL,
BOOL fDoNotUtilizeExtraChecks = FALSE,
AssemblyBinder *pBinderForLoadedAssembly = NULL
) final;

Expand All @@ -1140,7 +1138,7 @@ class Module : public ModuleBase
UINT resIDWhy) final;
#endif

DomainAssembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final;
Assembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final;
public:
PTR_Module LookupModule(mdToken kFile) final;
Module *GetModuleIfLoaded(mdFile kFile) final;
Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/vm/multicorejit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ DWORD MulticoreJitRecorder::EncodeModule(Module * pReferencedModule)
}

// Enumerate all modules within an assembly, call OnModule virtual method
HRESULT MulticoreJitModuleEnumerator::HandleAssembly(DomainAssembly * pAssembly)
HRESULT MulticoreJitModuleEnumerator::HandleAssembly(Assembly * pAssembly)
{
STANDARD_VM_CONTRACT;

Expand All @@ -791,7 +791,7 @@ HRESULT MulticoreJitModuleEnumerator::EnumerateLoadedModules(AppDomain * pDomain
while (appIt.Next(pDomainAssembly.This()) && SUCCEEDED(hr))
{
{
hr = HandleAssembly(pDomainAssembly);
hr = HandleAssembly(pDomainAssembly->GetAssembly());
}
}

Expand Down
6 changes: 2 additions & 4 deletions src/coreclr/vm/multicorejitimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ class MulticoreJitModuleEnumerator

public:
HRESULT EnumerateLoadedModules(AppDomain * pDomain);
HRESULT HandleAssembly(DomainAssembly * pAssembly);
HRESULT HandleAssembly(Assembly * pAssembly);
};


Expand Down Expand Up @@ -306,7 +306,7 @@ friend class MulticoreJitRecorder;

HRESULT ReadCheckFile(const WCHAR * pFileName);

DomainAssembly * LoadAssembly(SString & assemblyName);
Assembly * LoadAssembly(SString & assemblyName);

public:

Expand Down Expand Up @@ -632,8 +632,6 @@ class MulticoreJitRecorder
unsigned RecordModuleInfo(Module * pModule);
void RecordOrUpdateModuleInfo(FileLoadLevel needLevel, unsigned moduleIndex);

void AddAllModulesInAsm(DomainAssembly * pAssembly);

HRESULT WriteOutput(IStream * pStream);

HRESULT WriteOutput();
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/vm/multicorejitplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -780,13 +780,13 @@ HRESULT MulticoreJitProfilePlayer::HandleModuleInfoRecord(unsigned moduleTo, uns
assemblyName.SetASCII(mod.m_pRecord->GetAssemblyName(), mod.m_pRecord->AssemblyNameLen());

// Load the assembly.
DomainAssembly * pDomainAssembly = LoadAssembly(assemblyName);
Assembly * pAssembly = LoadAssembly(assemblyName);

if (pDomainAssembly)
if (pAssembly)
{
// If we successfully loaded the assembly, enumerate the modules in the assembly
// and update all modules status.
moduleEnumerator.HandleAssembly(pDomainAssembly);
moduleEnumerator.HandleAssembly(pAssembly);

if (mod.m_pModule == NULL)
{
Expand Down Expand Up @@ -819,7 +819,7 @@ HRESULT MulticoreJitProfilePlayer::HandleModuleInfoRecord(unsigned moduleTo, uns
return hr;
}

DomainAssembly * MulticoreJitProfilePlayer::LoadAssembly(SString & assemblyName)
Assembly * MulticoreJitProfilePlayer::LoadAssembly(SString & assemblyName)
{
STANDARD_VM_CONTRACT;

Expand All @@ -839,7 +839,7 @@ DomainAssembly * MulticoreJitProfilePlayer::LoadAssembly(SString & assemblyName)
}

// Bind and load the assembly.
return spec.LoadDomainAssembly(
return spec.LoadAssembly(
FILE_LOADED,
FALSE); // Don't throw on FileNotFound.
}
Expand Down
6 changes: 3 additions & 3 deletions src/coreclr/vm/peassembly.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -575,11 +575,11 @@ BOOL PEAssembly::GetResource(LPCSTR szName, DWORD *cbResource,

AssemblySpec spec;
spec.InitializeSpec(mdLinkRef, GetMDImport(), pAssembly);
DomainAssembly* pDomainAssembly = spec.LoadDomainAssembly(FILE_LOADED);
Assembly* pLoadedAssembly = spec.LoadAssembly(FILE_LOADED);

if (dwLocation) {
if (pAssemblyRef)
*pAssemblyRef = pDomainAssembly->GetAssembly();
*pAssemblyRef = pLoadedAssembly;

*dwLocation = *dwLocation | 2; // ResourceLocation.containedInAnotherAssembly
}
Expand All @@ -590,7 +590,7 @@ BOOL PEAssembly::GetResource(LPCSTR szName, DWORD *cbResource,
pAssemblyRef,
szFileName,
dwLocation,
pDomainAssembly->GetAssembly());
pLoadedAssembly);
}

case mdtFile:
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/readytoruninfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1526,7 +1526,7 @@ class NativeManifestModule : public ModuleBase
return GetModuleIfLoaded(kFile);
}

DomainAssembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final
Assembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final
{
STANDARD_VM_CONTRACT;
// Since we can only load via ModuleRef, this should never fail unless the module is improperly formatted
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/zapsig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@ ModuleBase *ZapSig::DecodeModuleFromIndex(Module *fromModule,
}
else
{
pAssembly = fromModule->LoadAssembly(RidToToken(index, mdtAssemblyRef))->GetAssembly();
pAssembly = fromModule->LoadAssembly(RidToToken(index, mdtAssemblyRef));
}
}
else
Expand Down

0 comments on commit 42f3dce

Please sign in to comment.