diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 7d319604c..cb051bf6d 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2011-05-23 Corinna Vinschen + + * fhandler_process.cc (thread_info::fill_if_match): Reformat. + (format_process_maps): Ditto. Fetch pointer to procinfo structure + from mapped process. Print info about global shared Cygwin regions. + 2011-05-21 Corinna Vinschen * fhandler_process.cc (struct dos_drive_mappings): Use malloc/free diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index af3eb2963..9876be9b4 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -795,11 +795,9 @@ struct thread_info || (r->teb && wincap.is_wow64 () && r->start == base + 2 * wincap.page_size ())) { - char *p; - - p = dest + __small_sprintf (dest, "[%s (tid %ld)", - r->teb ? "teb" : "stack", - r->thread_id); + char *p = dest + __small_sprintf (dest, "[%s (tid %ld)", + r->teb ? "teb" : "stack", + r->thread_id); if (type & MEM_MAPPED) p = stpcpy (p, " shared"); stpcpy (p, "]"); @@ -824,8 +822,7 @@ format_process_maps (void *data, char *&destbuf) { _pinfo *p = (_pinfo *) data; HANDLE proc = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, - FALSE, - p->dwProcessId); + FALSE, p->dwProcessId); if (!proc) return 0; @@ -833,10 +830,16 @@ format_process_maps (void *data, char *&destbuf) PROCESS_BASIC_INFORMATION pbi; PPEB peb = NULL; + memset (&pbi, 0, sizeof (pbi)); status = NtQueryInformationProcess (proc, ProcessBasicInformation, &pbi, sizeof pbi, NULL); if (NT_SUCCESS (status)) peb = pbi.PebBaseAddress; + /* myself is in the same spot in every process, so is the pointer to the + procinfo. But make sure the destructor doesn't try to release procinfo! */ + pinfo proc_pinfo; + if (ReadProcessMemory (proc, &myself, &proc_pinfo, sizeof proc_pinfo, NULL)) + proc_pinfo.preserve (); _off64_t len = 0; @@ -965,6 +968,12 @@ format_process_maps (void *data, char *&destbuf) strcpy (posix_modname, "[peb]"); else if (cur.abase == (char *) &SharedUserData) strcpy (posix_modname, "[shared-user-data]"); + else if (cur.abase == (char *) cygwin_shared) + strcpy (posix_modname, "[cygwin-shared]"); + else if (cur.abase == (char *) user_shared) + strcpy (posix_modname, "[cygwin-user-shared]"); + else if (cur.abase == (char *) *proc_pinfo) + strcpy (posix_modname, "[procinfo]"); else posix_modname[0] = 0; }