Skip to content

Commit 42f3dce

Browse files
authored
Make Module::LoadAssembly return Assembly instead of DomainAssembly (dotnet#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
1 parent d4601d3 commit 42f3dce

File tree

11 files changed

+43
-88
lines changed

11 files changed

+43
-88
lines changed

src/coreclr/vm/assembly.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -639,11 +639,9 @@ Module *Assembly::FindModuleByExportedType(mdExportedType mdType,
639639
{
640640
#ifndef DACCESS_COMPILE
641641
// LoadAssembly never returns NULL
642-
DomainAssembly * pDomainAssembly =
643-
GetModule()->LoadAssembly(mdLinkRef);
644-
PREFIX_ASSUME(pDomainAssembly != NULL);
645-
646-
RETURN pDomainAssembly->GetModule();
642+
pAssembly = GetModule()->LoadAssembly(mdLinkRef);
643+
PREFIX_ASSUME(pAssembly != NULL);
644+
break;
647645
#else
648646
_ASSERTE(!"DAC shouldn't attempt to trigger loading");
649647
return NULL;
@@ -868,14 +866,7 @@ Module * Assembly::FindModuleByTypeRef(
868866
RETURN NULL;
869867
}
870868

871-
872-
DomainAssembly * pDomainAssembly = pModule->LoadAssembly(tkType);
873-
874-
875-
if (pDomainAssembly == NULL)
876-
RETURN NULL;
877-
878-
pAssembly = pDomainAssembly->GetAssembly();
869+
pAssembly = pModule->LoadAssembly(tkType);
879870
if (pAssembly == NULL)
880871
{
881872
RETURN NULL;

src/coreclr/vm/assemblyspec.cpp

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -295,24 +295,6 @@ void AssemblySpec::InitializeAssemblyNameRef(_In_ BINDER_SPACE::AssemblyName* as
295295
spec.AssemblyNameInit(assemblyNameRef);
296296
}
297297

298-
Assembly *AssemblySpec::LoadAssembly(FileLoadLevel targetLevel, BOOL fThrowOnFileNotFound)
299-
{
300-
CONTRACTL
301-
{
302-
THROWS;
303-
GC_TRIGGERS;
304-
MODE_ANY;
305-
}
306-
CONTRACTL_END;
307-
308-
DomainAssembly * pDomainAssembly = LoadDomainAssembly(targetLevel, fThrowOnFileNotFound);
309-
if (pDomainAssembly == NULL) {
310-
_ASSERTE(!fThrowOnFileNotFound);
311-
return NULL;
312-
}
313-
return pDomainAssembly->GetAssembly();
314-
}
315-
316298
AssemblyBinder* AssemblySpec::GetBinderFromParentAssembly(AppDomain *pDomain)
317299
{
318300
CONTRACTL
@@ -372,10 +354,10 @@ AssemblyBinder* AssemblySpec::GetBinderFromParentAssembly(AppDomain *pDomain)
372354
return pParentAssemblyBinder;
373355
}
374356

375-
DomainAssembly *AssemblySpec::LoadDomainAssembly(FileLoadLevel targetLevel,
376-
BOOL fThrowOnFileNotFound)
357+
Assembly *AssemblySpec::LoadAssembly(FileLoadLevel targetLevel,
358+
BOOL fThrowOnFileNotFound)
377359
{
378-
CONTRACT(DomainAssembly *)
360+
CONTRACT(Assembly *)
379361
{
380362
INSTANCE_CHECK;
381363
THROWS;
@@ -390,23 +372,21 @@ DomainAssembly *AssemblySpec::LoadDomainAssembly(FileLoadLevel targetLevel,
390372
ETWOnStartup (LoaderCatchCall_V1, LoaderCatchCallEnd_V1);
391373
AppDomain* pDomain = GetAppDomain();
392374

393-
DomainAssembly* pAssembly = pDomain->FindCachedAssembly(this);
394-
if (pAssembly)
375+
DomainAssembly* domainAssembly = pDomain->FindCachedAssembly(this);
376+
if (domainAssembly)
395377
{
396378
BinderTracing::AssemblyBindOperation bindOperation(this);
397-
bindOperation.SetResult(pAssembly->GetPEAssembly(), true /*cached*/);
379+
bindOperation.SetResult(domainAssembly->GetPEAssembly(), true /*cached*/);
398380

399-
pDomain->LoadDomainAssembly(pAssembly, targetLevel);
400-
RETURN pAssembly;
381+
pDomain->LoadDomainAssembly(domainAssembly, targetLevel);
382+
RETURN domainAssembly->GetAssembly();
401383
}
402384

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

407-
pAssembly = pDomain->LoadDomainAssembly(this, pFile, targetLevel);
408-
409-
RETURN pAssembly;
389+
RETURN pDomain->LoadAssembly(this, pFile, targetLevel);
410390
}
411391

412392
/* static */

src/coreclr/vm/assemblyspec.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ class AssemblySpec : public BaseAssemblySpec
4545
friend Assembly * Module::GetAssemblyIfLoaded(
4646
mdAssemblyRef kAssemblyRef,
4747
IMDInternalImport * pMDImportOverride,
48-
BOOL fDoNotUtilizeExtraChecks,
4948
AssemblyBinder *pBinderForLoadedAssembly);
5049

5150
public:
@@ -175,8 +174,6 @@ class AssemblySpec : public BaseAssemblySpec
175174

176175
Assembly *LoadAssembly(FileLoadLevel targetLevel,
177176
BOOL fThrowOnFileNotFound = TRUE);
178-
DomainAssembly *LoadDomainAssembly(FileLoadLevel targetLevel,
179-
BOOL fThrowOnFileNotFound = TRUE);
180177

181178
public: // static
182179
// Creates and loads an assembly based on the name and context.

src/coreclr/vm/ceeload.cpp

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2258,7 +2258,6 @@ Assembly *
22582258
Module::GetAssemblyIfLoaded(
22592259
mdAssemblyRef kAssemblyRef,
22602260
IMDInternalImport * pMDImportOverride, // = NULL
2261-
BOOL fDoNotUtilizeExtraChecks, // = FALSE
22622261
AssemblyBinder *pBinderForLoadedAssembly // = NULL
22632262
)
22642263
{
@@ -2387,9 +2386,9 @@ ModuleBase::GetAssemblyRefFlags(
23872386
} // Module::GetAssemblyRefFlags
23882387

23892388
#ifndef DACCESS_COMPILE
2390-
DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
2389+
Assembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
23912390
{
2392-
CONTRACT(DomainAssembly *)
2391+
CONTRACT(Assembly *)
23932392
{
23942393
INSTANCE_CHECK;
23952394
if (FORBIDGC_LOADER_USE_ENABLED()) NOTHROW; else THROWS;
@@ -2402,20 +2401,17 @@ DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
24022401

24032402
ETWOnStartup (LoaderCatchCall_V1, LoaderCatchCallEnd_V1);
24042403

2405-
DomainAssembly * pDomainAssembly;
2406-
24072404
//
24082405
// Early out quickly if the result is cached
24092406
//
24102407
Assembly * pAssembly = LookupAssemblyRef(kAssemblyRef);
24112408
if (pAssembly != NULL)
24122409
{
2413-
pDomainAssembly = pAssembly->GetDomainAssembly();
2414-
::GetAppDomain()->LoadDomainAssembly(pDomainAssembly, FILE_LOADED);
2415-
2416-
RETURN pDomainAssembly;
2410+
::GetAppDomain()->LoadDomainAssembly(pAssembly->GetDomainAssembly(), FILE_LOADED);
2411+
RETURN pAssembly;
24172412
}
24182413

2414+
DomainAssembly * pDomainAssembly;
24192415
{
24202416
PEAssemblyHolder pPEAssembly = GetPEAssembly()->LoadAssembly(kAssemblyRef);
24212417
AssemblySpec spec;
@@ -2431,23 +2427,18 @@ DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
24312427
pDomainAssembly = GetAppDomain()->LoadDomainAssembly(&spec, pPEAssembly, FILE_LOADED);
24322428
}
24332429

2434-
if (pDomainAssembly != NULL)
2435-
{
2436-
_ASSERTE(
2437-
pDomainAssembly->IsSystem() || // GetAssemblyIfLoaded will not find CoreLib (see AppDomain::FindCachedFile)
2438-
!pDomainAssembly->IsLoaded() || // GetAssemblyIfLoaded will not find not-yet-loaded assemblies
2439-
GetAssemblyIfLoaded(kAssemblyRef, NULL, FALSE, pDomainAssembly->GetPEAssembly()->GetHostAssembly()->GetBinder()) != NULL); // GetAssemblyIfLoaded should find all remaining cases
2430+
pAssembly = pDomainAssembly->GetAssembly();
2431+
_ASSERTE(pDomainAssembly->IsLoaded() && pAssembly != NULL);
2432+
_ASSERTE(
2433+
pDomainAssembly->IsSystem() || // GetAssemblyIfLoaded will not find CoreLib (see AppDomain::FindCachedFile)
2434+
GetAssemblyIfLoaded(kAssemblyRef, NULL, pDomainAssembly->GetPEAssembly()->GetHostAssembly()->GetBinder()) != NULL); // GetAssemblyIfLoaded should find all remaining cases
24402435

2441-
if (pDomainAssembly->GetAssembly() != NULL)
2442-
{
2443-
StoreAssemblyRef(kAssemblyRef, pDomainAssembly->GetAssembly());
2444-
}
2445-
}
2436+
StoreAssemblyRef(kAssemblyRef, pAssembly);
24462437

2447-
RETURN pDomainAssembly;
2438+
RETURN pAssembly;
24482439
}
24492440
#else
2450-
DomainAssembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
2441+
Assembly * Module::LoadAssemblyImpl(mdAssemblyRef kAssemblyRef)
24512442
{
24522443
WRAPPER_NO_CONTRACT;
24532444
ThrowHR(E_FAIL);

src/coreclr/vm/ceeload.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ class ModuleBase
466466
// The vtable needs to match between DAC and non-DAC, but we don't want any use of IsSigInIL in the DAC
467467
virtual BOOL IsSigInILImpl(PCCOR_SIGNATURE signature) { return FALSE; } // ModuleBase doesn't have a PE image to examine
468468
// The vtable needs to match between DAC and non-DAC, but we don't want any use of LoadAssembly in the DAC
469-
virtual DomainAssembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) = 0;
469+
virtual Assembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) = 0;
470470

471471
// The vtable needs to match between DAC and non-DAC, but we don't want any use of ThrowTypeLoadException in the DAC
472472
virtual void DECLSPEC_NORETURN ThrowTypeLoadExceptionImpl(IMDInternalImport *pInternalImport,
@@ -552,7 +552,6 @@ class ModuleBase
552552
virtual Assembly * GetAssemblyIfLoaded(
553553
mdAssemblyRef kAssemblyRef,
554554
IMDInternalImport * pMDImportOverride = NULL,
555-
BOOL fDoNotUtilizeExtraChecks = FALSE,
556555
AssemblyBinder *pBinderForLoadedAssembly = NULL
557556
)
558557
{
@@ -573,7 +572,7 @@ class ModuleBase
573572

574573
// The vtable needs to match between DAC and non-DAC, but we don't want any use of IsSigInIL in the DAC
575574
BOOL IsSigInIL(PCCOR_SIGNATURE signature) { return IsSigInILImpl(signature); }
576-
DomainAssembly * LoadAssembly(mdAssemblyRef kAssemblyRef)
575+
Assembly * LoadAssembly(mdAssemblyRef kAssemblyRef)
577576
{
578577
WRAPPER_NO_CONTRACT;
579578
return LoadAssemblyImpl(kAssemblyRef);
@@ -1129,7 +1128,6 @@ class Module : public ModuleBase
11291128
Assembly * GetAssemblyIfLoaded(
11301129
mdAssemblyRef kAssemblyRef,
11311130
IMDInternalImport * pMDImportOverride = NULL,
1132-
BOOL fDoNotUtilizeExtraChecks = FALSE,
11331131
AssemblyBinder *pBinderForLoadedAssembly = NULL
11341132
) final;
11351133

@@ -1140,7 +1138,7 @@ class Module : public ModuleBase
11401138
UINT resIDWhy) final;
11411139
#endif
11421140

1143-
DomainAssembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final;
1141+
Assembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final;
11441142
public:
11451143
PTR_Module LookupModule(mdToken kFile) final;
11461144
Module *GetModuleIfLoaded(mdFile kFile) final;

src/coreclr/vm/multicorejit.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ DWORD MulticoreJitRecorder::EncodeModule(Module * pReferencedModule)
768768
}
769769

770770
// Enumerate all modules within an assembly, call OnModule virtual method
771-
HRESULT MulticoreJitModuleEnumerator::HandleAssembly(DomainAssembly * pAssembly)
771+
HRESULT MulticoreJitModuleEnumerator::HandleAssembly(Assembly * pAssembly)
772772
{
773773
STANDARD_VM_CONTRACT;
774774

@@ -791,7 +791,7 @@ HRESULT MulticoreJitModuleEnumerator::EnumerateLoadedModules(AppDomain * pDomain
791791
while (appIt.Next(pDomainAssembly.This()) && SUCCEEDED(hr))
792792
{
793793
{
794-
hr = HandleAssembly(pDomainAssembly);
794+
hr = HandleAssembly(pDomainAssembly->GetAssembly());
795795
}
796796
}
797797

src/coreclr/vm/multicorejitimpl.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ class MulticoreJitModuleEnumerator
253253

254254
public:
255255
HRESULT EnumerateLoadedModules(AppDomain * pDomain);
256-
HRESULT HandleAssembly(DomainAssembly * pAssembly);
256+
HRESULT HandleAssembly(Assembly * pAssembly);
257257
};
258258

259259

@@ -306,7 +306,7 @@ friend class MulticoreJitRecorder;
306306

307307
HRESULT ReadCheckFile(const WCHAR * pFileName);
308308

309-
DomainAssembly * LoadAssembly(SString & assemblyName);
309+
Assembly * LoadAssembly(SString & assemblyName);
310310

311311
public:
312312

@@ -632,8 +632,6 @@ class MulticoreJitRecorder
632632
unsigned RecordModuleInfo(Module * pModule);
633633
void RecordOrUpdateModuleInfo(FileLoadLevel needLevel, unsigned moduleIndex);
634634

635-
void AddAllModulesInAsm(DomainAssembly * pAssembly);
636-
637635
HRESULT WriteOutput(IStream * pStream);
638636

639637
HRESULT WriteOutput();

src/coreclr/vm/multicorejitplayer.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -780,13 +780,13 @@ HRESULT MulticoreJitProfilePlayer::HandleModuleInfoRecord(unsigned moduleTo, uns
780780
assemblyName.SetASCII(mod.m_pRecord->GetAssemblyName(), mod.m_pRecord->AssemblyNameLen());
781781

782782
// Load the assembly.
783-
DomainAssembly * pDomainAssembly = LoadAssembly(assemblyName);
783+
Assembly * pAssembly = LoadAssembly(assemblyName);
784784

785-
if (pDomainAssembly)
785+
if (pAssembly)
786786
{
787787
// If we successfully loaded the assembly, enumerate the modules in the assembly
788788
// and update all modules status.
789-
moduleEnumerator.HandleAssembly(pDomainAssembly);
789+
moduleEnumerator.HandleAssembly(pAssembly);
790790

791791
if (mod.m_pModule == NULL)
792792
{
@@ -819,7 +819,7 @@ HRESULT MulticoreJitProfilePlayer::HandleModuleInfoRecord(unsigned moduleTo, uns
819819
return hr;
820820
}
821821

822-
DomainAssembly * MulticoreJitProfilePlayer::LoadAssembly(SString & assemblyName)
822+
Assembly * MulticoreJitProfilePlayer::LoadAssembly(SString & assemblyName)
823823
{
824824
STANDARD_VM_CONTRACT;
825825

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

841841
// Bind and load the assembly.
842-
return spec.LoadDomainAssembly(
842+
return spec.LoadAssembly(
843843
FILE_LOADED,
844844
FALSE); // Don't throw on FileNotFound.
845845
}

src/coreclr/vm/peassembly.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -575,11 +575,11 @@ BOOL PEAssembly::GetResource(LPCSTR szName, DWORD *cbResource,
575575

576576
AssemblySpec spec;
577577
spec.InitializeSpec(mdLinkRef, GetMDImport(), pAssembly);
578-
DomainAssembly* pDomainAssembly = spec.LoadDomainAssembly(FILE_LOADED);
578+
Assembly* pLoadedAssembly = spec.LoadAssembly(FILE_LOADED);
579579

580580
if (dwLocation) {
581581
if (pAssemblyRef)
582-
*pAssemblyRef = pDomainAssembly->GetAssembly();
582+
*pAssemblyRef = pLoadedAssembly;
583583

584584
*dwLocation = *dwLocation | 2; // ResourceLocation.containedInAnotherAssembly
585585
}
@@ -590,7 +590,7 @@ BOOL PEAssembly::GetResource(LPCSTR szName, DWORD *cbResource,
590590
pAssemblyRef,
591591
szFileName,
592592
dwLocation,
593-
pDomainAssembly->GetAssembly());
593+
pLoadedAssembly);
594594
}
595595

596596
case mdtFile:

src/coreclr/vm/readytoruninfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1526,7 +1526,7 @@ class NativeManifestModule : public ModuleBase
15261526
return GetModuleIfLoaded(kFile);
15271527
}
15281528

1529-
DomainAssembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final
1529+
Assembly * LoadAssemblyImpl(mdAssemblyRef kAssemblyRef) final
15301530
{
15311531
STANDARD_VM_CONTRACT;
15321532
// Since we can only load via ModuleRef, this should never fail unless the module is improperly formatted

0 commit comments

Comments
 (0)