Index: dumper.cc
===================================================================
RCS file: /cvs/src/src/winsup/utils/dumper.cc,v
retrieving revision 1.4
diff -u -p -2 -r1.4 dumper.cc
--- dumper.cc	2001/04/19 14:22:30	1.4
+++ dumper.cc	2001/04/24 06:47:47
@@ -37,7 +37,7 @@ __attribute__ ((packed))
   note_header;
 
-     BOOL verbose = FALSE;
+BOOL verbose = FALSE;
 
-     int deb_printf (const char *format,...)
+int deb_printf (const char *format,...)
 {
   if (!verbose)
@@ -486,6 +486,6 @@ dumper::collect_process_information ()
     }
 
-  char event_name[sizeof ("cygwin_error_start_event") + 20];
-  sprintf (event_name, "cygwin_error_start_event%16lx", pid);
+  char event_name[64];
+  sprintf (event_name, "cygwin_error_start_event%ld", pid);
   HANDLE sync_with_debugee = OpenEvent (EVENT_MODIFY_STATE, FALSE, event_name);
 
@@ -701,4 +701,22 @@ dumper::write_core_dump ()
     return 0;
 
+  char share_name [64];
+  HANDLE share_h;
+  struct debugger_info* share_ptr = 0;
+
+  sprintf (share_name, "cygwin_debugger_share%ld", pid);
+  share_h = OpenFileMapping (FILE_MAP_READ, FALSE, share_name);
+  if (share_h)    
+    {
+      share_ptr = (struct debugger_info*)
+			MapViewOfFile (share_h,
+				       FILE_MAP_READ,
+				       0, 0,
+				       sizeof (struct debugger_info));
+    } 
+  if (share_ptr)
+    deb_printf ("got exception context for thread %ld\n",
+                share_ptr->exception_thread_id);
+
   for (process_entity * p = list; p != NULL; p = p->next)
     {
@@ -719,4 +737,12 @@ dumper::write_core_dump ()
 
 	case pr_ent_thread:
+          if (share_ptr &&
+              p->u.thread.tid == share_ptr->exception_thread_id)
+            {
+              deb_printf ("saved exception context for thread %ld\n",
+                          share_ptr->exception_thread_id);
+              memmove (&p->u.thread.context, &share_ptr->exception_context,
+                       sizeof (p->u.thread.context));
+            }
 	  dump_thread (p->section, &(p->u.thread));
 	  break;
