Skip to content
Merged
Show file tree
Hide file tree
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
2 changes: 1 addition & 1 deletion docs/design/datacontracts/Loader.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ TargetPointer GetStubHeap(TargetPointer loaderAllocatorPointer);
| `Assembly` | `Level` | File load level of the assembly |
| `PEAssembly` | `PEImage` | Pointer to the PEAssembly's PEImage |
| `PEAssembly` | `AssemblyBinder` | Pointer to the PEAssembly's binder |
| `AssemblyBinder` | `ManagedAssemblyLoadContext` | Pointer to the AssemblyBinder's ManagedAssemblyLoadContext |
| `AssemblyBinder` | `AssemblyLoadContext` | Pointer to the AssemblyBinder's AssemblyLoadContext |
| `PEImage` | `LoadedImageLayout` | Pointer to the PEImage's loaded PEImageLayout |
| `PEImage` | `ProbeExtensionResult` | PEImage's ProbeExtensionResult |
| `ProbeExtensionResult` | `Type` | Type of ProbeExtensionResult |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,35 +110,35 @@ internal Assembly LoadFromInMemoryModule(IntPtr moduleHandle)

// This method is invoked by the VM to resolve a satellite assembly reference
// after trying assembly resolution via Load override without success.
private static RuntimeAssembly? ResolveSatelliteAssembly(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)
private static RuntimeAssembly? ResolveSatelliteAssembly(IntPtr gchAssemblyLoadContext, AssemblyName assemblyName)
{
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchManagedAssemblyLoadContext).Target)!;
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchAssemblyLoadContext).Target)!;

// Invoke the ResolveSatelliteAssembly method
return context.ResolveSatelliteAssembly(assemblyName);
}

// This method is invoked by the VM when using the host-provided assembly load context
// implementation.
private static IntPtr ResolveUnmanagedDll(string unmanagedDllName, IntPtr gchManagedAssemblyLoadContext)
private static IntPtr ResolveUnmanagedDll(string unmanagedDllName, IntPtr gchAssemblyLoadContext)
{
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchManagedAssemblyLoadContext).Target)!;
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchAssemblyLoadContext).Target)!;
return context.LoadUnmanagedDll(unmanagedDllName);
}

// This method is invoked by the VM to resolve a native library using the ResolvingUnmanagedDll event
// after trying all other means of resolution.
private static IntPtr ResolveUnmanagedDllUsingEvent(string unmanagedDllName, Assembly assembly, IntPtr gchManagedAssemblyLoadContext)
private static IntPtr ResolveUnmanagedDllUsingEvent(string unmanagedDllName, Assembly assembly, IntPtr gchAssemblyLoadContext)
{
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchManagedAssemblyLoadContext).Target)!;
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchAssemblyLoadContext).Target)!;
return context.GetResolvedUnmanagedDll(assembly, unmanagedDllName);
}

// This method is invoked by the VM to resolve an assembly reference using the Resolving event
// after trying assembly resolution via Load override and TPA load context without success.
private static RuntimeAssembly? ResolveUsingResolvingEvent(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)
private static RuntimeAssembly? ResolveUsingResolvingEvent(IntPtr gchAssemblyLoadContext, AssemblyName assemblyName)
{
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchManagedAssemblyLoadContext).Target)!;
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchAssemblyLoadContext).Target)!;
// Invoke the AssemblyResolve event callbacks if wired up
return context.ResolveUsingEvent(assemblyName);
}
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/binder/assemblybindercommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#if !defined(DACCESS_COMPILE)
#include "defaultassemblybinder.h"
// Helper function in the VM, invoked by the Binder, to invoke the host assembly resolver
extern HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pManagedAssemblyLoadContextToBindWithin,
extern HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pAssemblyLoadContextToBindWithin,
BINDER_SPACE::AssemblyName *pAssemblyName,
DefaultAssemblyBinder *pDefaultBinder,
AssemblyBinder *pBinder,
Expand Down Expand Up @@ -1147,19 +1147,19 @@ namespace BINDER_SPACE


#if !defined(DACCESS_COMPILE)
HRESULT AssemblyBinderCommon::BindUsingHostAssemblyResolver(/* in */ INT_PTR pManagedAssemblyLoadContextToBindWithin,
HRESULT AssemblyBinderCommon::BindUsingHostAssemblyResolver(/* in */ INT_PTR pAssemblyLoadContextToBindWithin,
/* in */ AssemblyName *pAssemblyName,
/* in */ DefaultAssemblyBinder *pDefaultBinder,
/* in */ AssemblyBinder *pBinder,
/* out */ Assembly **ppAssembly)
{
HRESULT hr = E_FAIL;

_ASSERTE(pManagedAssemblyLoadContextToBindWithin != (INT_PTR)NULL);
_ASSERTE(pAssemblyLoadContextToBindWithin != (INT_PTR)NULL);

// RuntimeInvokeHostAssemblyResolver will perform steps 2-4 of CustomAssemblyBinder::BindAssemblyByName.
BINDER_SPACE::Assembly *pLoadedAssembly = NULL;
hr = RuntimeInvokeHostAssemblyResolver(pManagedAssemblyLoadContextToBindWithin,
hr = RuntimeInvokeHostAssemblyResolver(pAssemblyLoadContextToBindWithin,
pAssemblyName, pDefaultBinder, pBinder, &pLoadedAssembly);
if (SUCCEEDED(hr))
{
Expand Down Expand Up @@ -1297,7 +1297,7 @@ HRESULT AssemblyBinderCommon::CreateDefaultBinder(DefaultAssemblyBinder** ppDefa
hr = pApplicationContext->Init();
if (SUCCEEDED(hr))
{
pBinder->SetManagedAssemblyLoadContext((INT_PTR)NULL);
pBinder->SetAssemblyLoadContext((INT_PTR)NULL);
*ppDefaultBinder = pBinder.Extract();
}
}
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/binder/customassemblybinder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ HRESULT CustomAssemblyBinder::BindUsingAssemblyName(BINDER_SPACE::AssemblyName*
// of what to do next. The host-overridden binder can either fail the bind or return reference to an existing assembly
// that has been loaded.
//
hr = AssemblyBinderCommon::BindUsingHostAssemblyResolver(GetManagedAssemblyLoadContext(), pAssemblyName,
hr = AssemblyBinderCommon::BindUsingHostAssemblyResolver(GetAssemblyLoadContext(), pAssemblyName,
m_pDefaultBinder, this, &pCoreCLRFoundAssembly);
if (SUCCEEDED(hr))
{
Expand Down Expand Up @@ -178,7 +178,7 @@ HRESULT CustomAssemblyBinder::SetupContext(DefaultAssemblyBinder *pDefaultBinder

// Save the reference to the IntPtr for GCHandle for the managed
// AssemblyLoadContext instance
pBinder->SetManagedAssemblyLoadContext(ptrAssemblyLoadContext);
pBinder->SetAssemblyLoadContext(ptrAssemblyLoadContext);

if (pLoaderAllocator != NULL)
{
Expand Down Expand Up @@ -247,16 +247,16 @@ CustomAssemblyBinder::CustomAssemblyBinder()

void CustomAssemblyBinder::ReleaseLoadContext()
{
VERIFY(GetManagedAssemblyLoadContext() != (INT_PTR)NULL);
VERIFY(GetAssemblyLoadContext() != (INT_PTR)NULL);
VERIFY(m_ptrManagedStrongAssemblyLoadContext != (INT_PTR)NULL);

// This method is called to release the weak and strong handles on the managed AssemblyLoadContext
// once the Unloading event has been fired
OBJECTHANDLE handle = reinterpret_cast<OBJECTHANDLE>(GetManagedAssemblyLoadContext());
OBJECTHANDLE handle = reinterpret_cast<OBJECTHANDLE>(GetAssemblyLoadContext());
DestroyLongWeakHandle(handle);
handle = reinterpret_cast<OBJECTHANDLE>(m_ptrManagedStrongAssemblyLoadContext);
DestroyHandle(handle);
SetManagedAssemblyLoadContext((INT_PTR)NULL);
SetAssemblyLoadContext((INT_PTR)NULL);

// The AssemblyLoaderAllocator is in a process of shutdown and should not be used
// after this point.
Expand Down
12 changes: 6 additions & 6 deletions src/coreclr/binder/defaultassemblybinder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ HRESULT DefaultAssemblyBinder::BindUsingAssemblyName(BINDER_SPACE::AssemblyName
//
// Attempt to resolve the assembly via managed ALC instance. This can either fail the bind or return reference to an existing
// assembly that has been loaded
INT_PTR pManagedAssemblyLoadContext = GetManagedAssemblyLoadContext();
if (pManagedAssemblyLoadContext == (INT_PTR)NULL)
INT_PTR pAssemblyLoadContext = GetAssemblyLoadContext();
if (pAssemblyLoadContext == (INT_PTR)NULL)
{
// For satellite assemblies, the managed ALC has additional resolution logic (defined by the runtime) which
// should be run even if the managed default ALC has not yet been used. (For non-satellite assemblies, any
Expand All @@ -77,14 +77,14 @@ HRESULT DefaultAssemblyBinder::BindUsingAssemblyName(BINDER_SPACE::AssemblyName
DECLARE_ARGHOLDER_ARRAY(args, 0);
CALL_MANAGED_METHOD_NORET(args)

pManagedAssemblyLoadContext = GetManagedAssemblyLoadContext();
_ASSERTE(pManagedAssemblyLoadContext != (INT_PTR)NULL);
pAssemblyLoadContext = GetAssemblyLoadContext();
_ASSERTE(pAssemblyLoadContext != (INT_PTR)NULL);
}
}

if (pManagedAssemblyLoadContext != (INT_PTR)NULL)
if (pAssemblyLoadContext != (INT_PTR)NULL)
{
hr = AssemblyBinderCommon::BindUsingHostAssemblyResolver(pManagedAssemblyLoadContext, pAssemblyName,
hr = AssemblyBinderCommon::BindUsingHostAssemblyResolver(pAssemblyLoadContext, pAssemblyName,
NULL, this, &pCoreCLRFoundAssembly);
if (SUCCEEDED(hr))
{
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/binder/inc/assemblybindercommon.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ namespace BINDER_SPACE
/* in */ ProbeExtensionResult probeExtensionResult = ProbeExtensionResult::Invalid());

#if !defined(DACCESS_COMPILE)
static HRESULT BindUsingHostAssemblyResolver (/* in */ INT_PTR pManagedAssemblyLoadContextToBindWithin,
static HRESULT BindUsingHostAssemblyResolver (/* in */ INT_PTR pAssemblyLoadContextToBindWithin,
/* in */ AssemblyName *pAssemblyName,
/* in */ DefaultAssemblyBinder *pDefaultBinder,
/* in */ AssemblyBinder *pBinder,
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/debug/daccess/request.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5024,15 +5024,15 @@ HRESULT ClrDataAccess::GetAssemblyLoadContext(CLRDATA_ADDRESS methodTable, CLRDA
PTR_PEAssembly pPEAssembly = pModule->GetPEAssembly();
PTR_AssemblyBinder pBinder = pPEAssembly->GetAssemblyBinder();

INT_PTR managedAssemblyLoadContextHandle = pBinder->GetManagedAssemblyLoadContext();
INT_PTR AssemblyLoadContextHandle = pBinder->GetAssemblyLoadContext();

TADDR managedAssemblyLoadContextAddr = 0;
if (managedAssemblyLoadContextHandle != 0)
TADDR AssemblyLoadContextAddr = 0;
if (AssemblyLoadContextHandle != 0)
{
DacReadAll(managedAssemblyLoadContextHandle,&managedAssemblyLoadContextAddr,sizeof(TADDR),true);
DacReadAll(AssemblyLoadContextHandle,&AssemblyLoadContextAddr,sizeof(TADDR),true);
}

*assemblyLoadContext = TO_CDADDR(managedAssemblyLoadContextAddr);
*assemblyLoadContext = TO_CDADDR(AssemblyLoadContextAddr);

SOSDacLeave();
return hr;
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/debug/runtimeinfo/datadescriptor.inc
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ CDAC_TYPE_END(PEAssembly)

CDAC_TYPE_BEGIN(AssemblyBinder)
CDAC_TYPE_INDETERMINATE(AssemblyBinder)
CDAC_TYPE_FIELD(AssemblyBinder, /*pointer*/, ManagedAssemblyLoadContext, cdac_data<AssemblyBinder>::ManagedAssemblyLoadContext)
CDAC_TYPE_FIELD(AssemblyBinder, /*pointer*/, AssemblyLoadContext, cdac_data<AssemblyBinder>::AssemblyLoadContext)
CDAC_TYPE_END(AssemblyBinder)

CDAC_TYPE_BEGIN(PEImage)
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/vm/appdomain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4084,7 +4084,7 @@ AppDomain::AssemblyIterator::Next_Unlocked(
#if !defined(DACCESS_COMPILE)

// Returns S_OK if the assembly was successfully loaded
HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pManagedAssemblyLoadContextToBindWithin, BINDER_SPACE::AssemblyName *pAssemblyName, DefaultAssemblyBinder *pDefaultBinder, AssemblyBinder *pBinder, BINDER_SPACE::Assembly **ppLoadedAssembly)
HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pAssemblyLoadContextToBindWithin, BINDER_SPACE::AssemblyName *pAssemblyName, DefaultAssemblyBinder *pDefaultBinder, AssemblyBinder *pBinder, BINDER_SPACE::Assembly **ppLoadedAssembly)
{
CONTRACTL
{
Expand Down Expand Up @@ -4114,7 +4114,7 @@ HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pManagedAssemblyLoadContextToB
BINDER_SPACE::Assembly *pResolvedAssembly = NULL;

bool fResolvedAssembly = false;
BinderTracing::ResolutionAttemptedOperation tracer{pAssemblyName, 0 /*binderID*/, pManagedAssemblyLoadContextToBindWithin, hr};
BinderTracing::ResolutionAttemptedOperation tracer{pAssemblyName, 0 /*binderID*/, pAssemblyLoadContextToBindWithin, hr};

// Allocate an AssemblyName managed object
_gcRefs.oRefAssemblyName = (ASSEMBLYNAMEREF) AllocateObject(CoreLibBinder::GetClass(CLASS__ASSEMBLY_NAME));
Expand All @@ -4138,7 +4138,7 @@ HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pManagedAssemblyLoadContextToB
// Setup the arguments for the call
ARG_SLOT args[2] =
{
PtrToArgSlot(pManagedAssemblyLoadContextToBindWithin), // IntPtr for managed assembly load context instance
PtrToArgSlot(pAssemblyLoadContextToBindWithin), // IntPtr for managed assembly load context instance
ObjToArgSlot(_gcRefs.oRefAssemblyName), // AssemblyName instance
};

Expand Down Expand Up @@ -4185,7 +4185,7 @@ HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pManagedAssemblyLoadContextToB
// Setup the arguments for the call
ARG_SLOT args[2] =
{
PtrToArgSlot(pManagedAssemblyLoadContextToBindWithin), // IntPtr for managed assembly load context instance
PtrToArgSlot(pAssemblyLoadContextToBindWithin), // IntPtr for managed assembly load context instance
ObjToArgSlot(_gcRefs.oRefAssemblyName), // AssemblyName instance
};

Expand Down Expand Up @@ -4214,7 +4214,7 @@ HRESULT RuntimeInvokeHostAssemblyResolver(INT_PTR pManagedAssemblyLoadContextToB
// Setup the arguments for the call
ARG_SLOT args[2] =
{
PtrToArgSlot(pManagedAssemblyLoadContextToBindWithin), // IntPtr for managed assembly load context instance
PtrToArgSlot(pAssemblyLoadContextToBindWithin), // IntPtr for managed assembly load context instance
ObjToArgSlot(_gcRefs.oRefAssemblyName), // AssemblyName instance
};

Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/vm/assemblybinder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ void AssemblyBinder::AddLoadedAssembly(Assembly* loadedAssembly)

void AssemblyBinder::GetNameForDiagnosticsFromManagedALC(INT_PTR managedALC, /* out */ SString& alcName)
{
if (managedALC == GetAppDomain()->GetDefaultBinder()->GetManagedAssemblyLoadContext())
if (managedALC == GetAppDomain()->GetDefaultBinder()->GetAssemblyLoadContext())
{
alcName.Set(W("Default"));
return;
Expand Down Expand Up @@ -205,7 +205,7 @@ void AssemblyBinder::GetNameForDiagnostics(/*out*/ SString& alcName)
}
else
{
GetNameForDiagnosticsFromManagedALC(GetManagedAssemblyLoadContext(), alcName);
GetNameForDiagnosticsFromManagedALC(GetAssemblyLoadContext(), alcName);
}
}

Expand Down
12 changes: 6 additions & 6 deletions src/coreclr/vm/assemblybinder.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ class AssemblyBinder
return &m_appContext;
}

INT_PTR GetManagedAssemblyLoadContext()
INT_PTR GetAssemblyLoadContext()
{
return m_ptrManagedAssemblyLoadContext;
return m_ptrAssemblyLoadContext;
}

void SetManagedAssemblyLoadContext(INT_PTR ptrManagedDefaultBinderInstance)
void SetAssemblyLoadContext(INT_PTR ptrManagedDefaultBinderInstance)
{
m_ptrManagedAssemblyLoadContext = ptrManagedDefaultBinderInstance;
m_ptrAssemblyLoadContext = ptrManagedDefaultBinderInstance;
}

NativeImage* LoadNativeImage(Module* componentModule, LPCUTF8 nativeImageName);
Expand Down Expand Up @@ -125,7 +125,7 @@ class AssemblyBinder

// A GC handle to the managed AssemblyLoadContext.
// It is a long weak handle for collectible AssemblyLoadContexts and strong handle for non-collectible ones.
INT_PTR m_ptrManagedAssemblyLoadContext;
INT_PTR m_ptrAssemblyLoadContext;

SArray<Assembly*> m_loadedAssemblies;
friend struct cdac_data<AssemblyBinder>;
Expand All @@ -134,6 +134,6 @@ class AssemblyBinder
template<>
struct cdac_data<AssemblyBinder>
{
static constexpr size_t ManagedAssemblyLoadContext = offsetof(AssemblyBinder, m_ptrManagedAssemblyLoadContext);
static constexpr size_t AssemblyLoadContext = offsetof(AssemblyBinder, m_ptrAssemblyLoadContext);
};
#endif
16 changes: 8 additions & 8 deletions src/coreclr/vm/assemblynative.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1168,7 +1168,7 @@ extern "C" void QCALLTYPE AssemblyNative_GetImageRuntimeVersion(QCall::AssemblyH

/*static*/

extern "C" INT_PTR QCALLTYPE AssemblyNative_InitializeAssemblyLoadContext(INT_PTR ptrManagedAssemblyLoadContext, BOOL fRepresentsTPALoadContext, BOOL fIsCollectible)
extern "C" INT_PTR QCALLTYPE AssemblyNative_InitializeAssemblyLoadContext(INT_PTR ptrAssemblyLoadContext, BOOL fRepresentsTPALoadContext, BOOL fIsCollectible)
{
QCALL_CONTRACT;

Expand Down Expand Up @@ -1220,17 +1220,17 @@ extern "C" INT_PTR QCALLTYPE AssemblyNative_InitializeAssemblyLoadContext(INT_PT
loaderAllocator->ActivateManagedTracking();
}

IfFailThrow(CustomAssemblyBinder::SetupContext(pDefaultBinder, loaderAllocator, loaderAllocatorHandle, ptrManagedAssemblyLoadContext, &pCustomBinder));
IfFailThrow(CustomAssemblyBinder::SetupContext(pDefaultBinder, loaderAllocator, loaderAllocatorHandle, ptrAssemblyLoadContext, &pCustomBinder));
ptrNativeAssemblyBinder = reinterpret_cast<INT_PTR>(pCustomBinder);
}
else
{
// We are initializing the managed instance of Assembly Load Context that would represent the TPA binder.
// First, confirm we do not have an existing managed ALC attached to the TPA binder.
_ASSERTE(pDefaultBinder->GetManagedAssemblyLoadContext() == (INT_PTR)NULL);
_ASSERTE(pDefaultBinder->GetAssemblyLoadContext() == (INT_PTR)NULL);

// Attach the managed TPA binding context with the native one.
pDefaultBinder->SetManagedAssemblyLoadContext(ptrManagedAssemblyLoadContext);
pDefaultBinder->SetAssemblyLoadContext(ptrAssemblyLoadContext);
ptrNativeAssemblyBinder = reinterpret_cast<INT_PTR>(pDefaultBinder);
}

Expand Down Expand Up @@ -1262,7 +1262,7 @@ extern "C" INT_PTR QCALLTYPE AssemblyNative_GetLoadContextForAssembly(QCall::Ass
{
QCALL_CONTRACT;

INT_PTR ptrManagedAssemblyLoadContext = 0;
INT_PTR ptrAssemblyLoadContext = 0;

BEGIN_QCALL;

Expand All @@ -1273,13 +1273,13 @@ extern "C" INT_PTR QCALLTYPE AssemblyNative_GetLoadContextForAssembly(QCall::Ass
if (!pAssemblyBinder->IsDefault())
{
// Fetch the managed binder reference from the native binder instance
ptrManagedAssemblyLoadContext = pAssemblyBinder->GetManagedAssemblyLoadContext();
_ASSERTE(ptrManagedAssemblyLoadContext != (INT_PTR)NULL);
ptrAssemblyLoadContext = pAssemblyBinder->GetAssemblyLoadContext();
_ASSERTE(ptrAssemblyLoadContext != (INT_PTR)NULL);
}

END_QCALL;

return ptrManagedAssemblyLoadContext;
return ptrAssemblyLoadContext;
}

// static
Expand Down
Loading
Loading