summaryrefslogtreecommitdiff
path: root/src/dlls/dbgshim
diff options
context:
space:
mode:
authorEugene Zemtsov <e.zemtsov@gmail.com>2015-04-23 00:20:03 -0700
committerEugene Zemtsov <Eugene.Zemtsov@microsoft.com>2015-04-27 12:16:58 -0700
commit890ee7cf30980cd9f0205872b7cffc19a8ca803c (patch)
tree08ce4fb642d8a1a4bf417b2b9ec57d8aded0fc34 /src/dlls/dbgshim
parent44d84e920e58c9020b5d6dc7e86b5e2f45fcd531 (diff)
downloadcoreclr-890ee7cf30980cd9f0205872b7cffc19a8ca803c.tar.gz
coreclr-890ee7cf30980cd9f0205872b7cffc19a8ca803c.tar.bz2
coreclr-890ee7cf30980cd9f0205872b7cffc19a8ca803c.zip
Proper CLR module discovery in dbgshim on POSIX systems
Diffstat (limited to 'src/dlls/dbgshim')
-rw-r--r--src/dlls/dbgshim/CMakeLists.txt1
-rw-r--r--src/dlls/dbgshim/dbgshim.cpp20
2 files changed, 14 insertions, 7 deletions
diff --git a/src/dlls/dbgshim/CMakeLists.txt b/src/dlls/dbgshim/CMakeLists.txt
index 5b0f767a5d..7eef457bc7 100644
--- a/src/dlls/dbgshim/CMakeLists.txt
+++ b/src/dlls/dbgshim/CMakeLists.txt
@@ -31,6 +31,7 @@ endif(CLR_CMAKE_PLATFORM_LINUX)
add_library(dbgshim SHARED ${DBGSHIM_SOURCES})
set(DBGSHIM_LIBRARIES
+ debug-pal
debugshim
corguids
dbgutil
diff --git a/src/dlls/dbgshim/dbgshim.cpp b/src/dlls/dbgshim/dbgshim.cpp
index 5519234bd7..846cd47ffc 100644
--- a/src/dlls/dbgshim/dbgshim.cpp
+++ b/src/dlls/dbgshim/dbgshim.cpp
@@ -26,8 +26,12 @@
#include <getproductversionnumber.h>
#include <dbgenginemetrics.h>
+#if defined(FEATURE_PAL)
+#include "debug-pal.h"
+#else
#define PSAPI_VERSION 2
#include <psapi.h>
+#endif
#include "dbgshim.h"
@@ -699,15 +703,15 @@ HRESULT CreateVersionStringFromModule(DWORD pidDebuggee,
EX_CATCH_HRESULT(hr);
return hr;
#else
- swprintf_s(pBuffer, cchBuffer, W("%08x"), pidDebuggee);
+ HMODULE hmodTargetCLR = (HMODULE)GetDynamicLibraryAddressInProcess(pidDebuggee, MAKEDLLNAME_A(MAIN_CLR_MODULE_NAME_A));
+
+ swprintf_s(pBuffer, cchBuffer, W("%08x;%08x;%p"), CorDebugLatestVersion, pidDebuggee, hmodTargetCLR);
#endif // FEATURE_PAL
}
return S_OK;
}
-#ifndef FEATURE_PAL
-
// Functions that we'll look for in the loaded Mscordbi module.
typedef HRESULT (STDAPICALLTYPE *FPCoreCLRCreateCordbObject)(
int iDebuggerVersion,
@@ -755,6 +759,7 @@ HRESULT ParseVersionString(LPCWSTR szDebuggeeVersion, CorDebugInterfaceVersion *
return S_OK;
}
+#ifndef FEATURE_PAL
//-----------------------------------------------------------------------------
// Appends "\mscordbi.dll" to the path. This converts a directory name into the full path to mscordbi.dll.
//
@@ -901,7 +906,7 @@ HRESULT CreateDebuggingInterfaceFromVersionEx(
*ppCordb = NULL;
-#ifndef FEATURE_PAL
+
//
// Step 1: Parse version information into internal data structures
//
@@ -914,6 +919,7 @@ HRESULT CreateDebuggingInterfaceFromVersionEx(
if (FAILED(hr))
goto Exit;
+#ifndef FEATURE_PAL
//
// Step 2: Find the proper Dbi module (mscordbi.dll) and load it.
//
@@ -980,13 +986,13 @@ HRESULT CreateDebuggingInterfaceFromVersionEx(
hr = CORDBG_E_DEBUG_COMPONENT_MISSING;
goto Exit;
}
- FPCreateCordbObject fpCreate = (FPCreateCordbObject)GetProcAddress(hMod, "CreateCordbObject");
- if (fpCreate == NULL)
+ FPCoreCLRCreateCordbObject fpCreate2 = (FPCoreCLRCreateCordbObject)GetProcAddress(hMod, "CoreCLRCreateCordbObject");
+ if (hmodTargetCLR == NULL || fpCreate2 == NULL)
{
hr = CORDBG_E_INCOMPATIBLE_PROTOCOL;
goto Exit;
}
- hr = fpCreate(iDebuggerVersion, &pCordb);
+ hr = fpCreate2(iDebuggerVersion, pidDebuggee, hmodTargetCLR, &pCordb);
}
#endif // FEATURE_PAL
_ASSERTE((pCordb == NULL) == FAILED(hr));