@@ -434,18 +434,27 @@ CrashInfo::GetDSOInfo()
434434 }
435435
436436 // Add the DSO link_map entries
437+ ArrayHolder<char > moduleName = new char [PATH_MAX];
437438 for (struct link_map * linkMapAddr = debugEntry.r_map ; linkMapAddr != nullptr ;) {
438439 struct link_map map;
439440 if (!ReadMemory (linkMapAddr, &map, sizeof (map))) {
440441 return false ;
441442 }
442- char moduleName[ 257 ] = { 0 } ;
443+ int i = 0 ;
443444 if (map.l_name != nullptr ) {
444- if (!ReadMemory (map.l_name , &moduleName, sizeof (moduleName) - 1 )) {
445- return false ;
445+ for (; i < PATH_MAX; i++)
446+ {
447+ if (!ReadMemory (map.l_name + i, &moduleName[i], 1 )) {
448+ TRACE (" DSO: ReadMemory link_map name %p + %d FAILED\n " , map.l_name , i);
449+ break ;
450+ }
451+ if (moduleName[i] == ' \0 ' ) {
452+ break ;
453+ }
446454 }
447455 }
448- TRACE (" DSO: link_map entry %p l_ld %p l_addr %lx %s\n " , linkMapAddr, map.l_ld , map.l_addr , moduleName);
456+ moduleName[i] = ' \0 ' ;
457+ TRACE (" DSO: link_map entry %p l_ld %p l_addr %lx %s\n " , linkMapAddr, map.l_ld , map.l_addr , (char *)moduleName);
449458 linkMapAddr = map.l_next ;
450459 }
451460
@@ -515,6 +524,7 @@ CrashInfo::ReadMemory(void* address, void* buffer, size_t size)
515524 uint32_t read = 0 ;
516525 if (FAILED (m_dataTarget->ReadVirtual (reinterpret_cast <CLRDATA_ADDRESS>(address), reinterpret_cast <PBYTE>(buffer), size, &read)))
517526 {
527+ fprintf (stderr, " ReadMemory(%p, %lx) FAILED\n " , address, size);
518528 return false ;
519529 }
520530 InsertMemoryRegion (reinterpret_cast <uint64_t >(address), size);
0 commit comments