summaryrefslogtreecommitdiff
path: root/src/debug
diff options
context:
space:
mode:
authorMike McLaughlin <mikem@microsoft.com>2018-12-13 15:37:21 -0800
committerGitHub <noreply@github.com>2018-12-13 15:37:21 -0800
commita6403ba4d9187fc19af8e3dc64ec3e9e937d53eb (patch)
tree9254e8fa8720658b0fe556fbfd638662030e4868 /src/debug
parent6b9e1dc685e55430d1471baa799db32bc2807a1c (diff)
downloadcoreclr-a6403ba4d9187fc19af8e3dc64ec3e9e937d53eb.tar.gz
coreclr-a6403ba4d9187fc19af8e3dc64ec3e9e937d53eb.tar.bz2
coreclr-a6403ba4d9187fc19af8e3dc64ec3e9e937d53eb.zip
Fixes issue #21485 and #21484 (#21526)
Issue #21485: fix EnumProcessModules hPseudoCurrentProcess bug. Added handle reference. Issue #21484: createdump segfaults with ASP.NET app The problem is the ClrDataModule Request faulted on a dynamic module getting the file layout flag. Fixed the Request code not get the file layout and in the crash dump code skip any dynamic modules.
Diffstat (limited to 'src/debug')
-rw-r--r--src/debug/createdump/crashinfo.cpp34
-rw-r--r--src/debug/daccess/task.cpp7
2 files changed, 30 insertions, 11 deletions
diff --git a/src/debug/createdump/crashinfo.cpp b/src/debug/createdump/crashinfo.cpp
index 6de6b94429..4db2b00eeb 100644
--- a/src/debug/createdump/crashinfo.cpp
+++ b/src/debug/createdump/crashinfo.cpp
@@ -708,6 +708,17 @@ CrashInfo::EnumerateManagedModules(IXCLRDataProcess* pClrDataProcess)
break;
}
+ // Skip any dynamic modules. The Request call below on some DACs crashes on dynamic modules.
+ ULONG32 flags;
+ if ((hr = pClrDataModule->GetFlags(&flags)) != S_OK) {
+ TRACE("MODULE: GetFlags FAILED %08x\n", hr);
+ continue;
+ }
+ if (flags & CLRDATA_MODULE_IS_DYNAMIC) {
+ TRACE("MODULE: Skipping dynamic module\n");
+ continue;
+ }
+
DacpGetModuleData moduleData;
if (SUCCEEDED(hr = moduleData.Request(pClrDataModule.GetPtr())))
{
@@ -719,17 +730,20 @@ CrashInfo::EnumerateManagedModules(IXCLRDataProcess* pClrDataProcess)
ArrayHolder<WCHAR> wszUnicodeName = new WCHAR[MAX_LONGPATH + 1];
if (SUCCEEDED(hr = pClrDataModule->GetFileName(MAX_LONGPATH, nullptr, wszUnicodeName)))
{
- char* pszName = (char*)malloc(MAX_LONGPATH + 1);
- if (pszName == nullptr) {
- fprintf(stderr, "Allocating module name FAILED\n");
- result = false;
- break;
+ // If the module file name isn't empty
+ if (wszUnicodeName[0] != 0) {
+ char* pszName = (char*)malloc(MAX_LONGPATH + 1);
+ if (pszName == nullptr) {
+ fprintf(stderr, "Allocating module name FAILED\n");
+ result = false;
+ break;
+ }
+ sprintf_s(pszName, MAX_LONGPATH, "%S", (WCHAR*)wszUnicodeName);
+ TRACE(" %s\n", pszName);
+
+ // Change the module mapping name
+ ReplaceModuleMapping(moduleData.LoadedPEAddress, pszName);
}
- sprintf_s(pszName, MAX_LONGPATH, "%S", (WCHAR*)wszUnicodeName);
- TRACE(" %s\n", pszName);
-
- // Change the module mapping name
- ReplaceModuleMapping(moduleData.LoadedPEAddress, pszName);
}
else {
TRACE("\nModule.GetFileName FAILED %08x\n", hr);
diff --git a/src/debug/daccess/task.cpp b/src/debug/daccess/task.cpp
index 601ad401af..d7d8ba5a84 100644
--- a/src/debug/daccess/task.cpp
+++ b/src/debug/daccess/task.cpp
@@ -2745,7 +2745,12 @@ ClrDataModule::RequestGetModuleData(
COUNT_T peSize;
outGMD->LoadedPEAddress = TO_CDADDR(PTR_TO_TADDR(pPEFile->GetLoadedImageContents(&peSize)));
outGMD->LoadedPESize = (ULONG64)peSize;
- outGMD->IsFileLayout = pPEFile->GetLoaded()->IsFlat();
+
+ // Can not get the file layout for a dynamic module
+ if (!outGMD->IsDynamic)
+ {
+ outGMD->IsFileLayout = pPEFile->GetLoaded()->IsFlat();
+ }
}
// If there is a in memory symbol stream