[binutils-gdb] Introduce windows_nat::event_code_to_string

Pedro Alves via Gdb-cvs <[email protected]>
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=edeff39baffb07b68e8790980dbee20965123621

commit edeff39baffb07b68e8790980dbee20965123621
Author: Pedro Alves <[email protected]>
Date:   Fri Apr 11 22:36:10 2025 +0100

    Introduce windows_nat::event_code_to_string
    
    Instead of:
    
       switch (event_code)
         {
         case FOO_DEBUG_EVENT:
          DEBUG_EVENTS (..., "FOO_DEBUG_EVENT");
          ...
         case BAR_DEBUG_EVENT:
          DEBUG_EVENTS (..., "BAR_DEBUG_EVENT");
          ...
    
    ... with one DEBUG_EVENTS call per event type, log the event just once
    before the switch, and introduce a new event_code_to_string function
    to handle the event code to string conversion.
    
    Do the same on GDB's and gdbserver's Windows backends.
    
    Approved-By: Tom Tromey <[email protected]>
    Change-Id: Id38b7e30df182e4742f3179538de3c643cf42668
    commit-id:a8abf6a6

Diff:
---
 gdb/nat/windows-nat.c  | 25 +++++++++++++++++++++++++
 gdb/nat/windows-nat.h  |  4 ++++
 gdb/windows-nat.c      | 37 +++++--------------------------------
 gdbserver/win32-low.cc | 45 +++++----------------------------------------
 4 files changed, 39 insertions(+), 72 deletions(-)

diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
index cf30a66a0c1..72576222b8d 100644
--- a/gdb/nat/windows-nat.c
+++ b/gdb/nat/windows-nat.c
@@ -694,6 +694,31 @@ windows_process_info::add_all_dlls ()
 
 /* See nat/windows-nat.h.  */
 
+std::string
+event_code_to_string (DWORD event_code)
+{
+#define CASE(X) \
+  case X: return #X
+
+  switch (event_code)
+    {
+    CASE (CREATE_THREAD_DEBUG_EVENT);
+    CASE (EXIT_THREAD_DEBUG_EVENT);
+    CASE (CREATE_PROCESS_DEBUG_EVENT);
+    CASE (EXIT_PROCESS_DEBUG_EVENT);
+    CASE (LOAD_DLL_DEBUG_EVENT);
+    CASE (UNLOAD_DLL_DEBUG_EVENT);
+    CASE (EXCEPTION_DEBUG_EVENT);
+    CASE (OUTPUT_DEBUG_STRING_EVENT);
+    default:
+      return string_printf ("unknown event code %u", (unsigned) event_code);
+    }
+
+#undef CASE
+}
+
+/* See nat/windows-nat.h.  */
+
 ptid_t
 get_last_debug_event_ptid ()
 {
diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h
index 0a503232718..364a01c5724 100644
--- a/gdb/nat/windows-nat.h
+++ b/gdb/nat/windows-nat.h
@@ -285,6 +285,10 @@ private:
   int get_exec_module_filename (char *exe_name_ret, size_t exe_name_max_len);
 };
 
+/* Return a string version of EVENT_CODE.  */
+
+extern std::string event_code_to_string (DWORD event_code);
+
 /* A simple wrapper for ContinueDebugEvent that continues the last
    waited-for event.  If DEBUG_EVENTS is true, logging will be
    enabled.  */
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 4029e7dad00..67e4d35f96f 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -927,13 +927,14 @@ windows_nat_target::get_windows_debug_event
   event_code = current_event->dwDebugEventCode;
   ourstatus->set_spurious ();
 
+  DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
+		(unsigned) current_event->dwProcessId,
+		(unsigned) current_event->dwThreadId,
+		event_code_to_string (event_code).c_str ());
+
   switch (event_code)
     {
     case CREATE_THREAD_DEBUG_EVENT:
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "CREATE_THREAD_DEBUG_EVENT");
       if (windows_process->saw_create != 1)
 	{
 	  inferior *inf = find_inferior_pid (this, current_event->dwProcessId);
@@ -965,10 +966,6 @@ windows_nat_target::get_windows_debug_event
       break;
 
     case EXIT_THREAD_DEBUG_EVENT:
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "EXIT_THREAD_DEBUG_EVENT");
       delete_thread (ptid_t (current_event->dwProcessId,
 			     current_event->dwThreadId, 0),
 		     current_event->u.ExitThread.dwExitCode,
@@ -977,10 +974,6 @@ windows_nat_target::get_windows_debug_event
       break;
 
     case CREATE_PROCESS_DEBUG_EVENT:
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "CREATE_PROCESS_DEBUG_EVENT");
       CloseHandle (current_event->u.CreateProcessInfo.hFile);
       if (++windows_process->saw_create != 1)
 	break;
@@ -997,10 +990,6 @@ windows_nat_target::get_windows_debug_event
       break;
 
     case EXIT_PROCESS_DEBUG_EVENT:
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "EXIT_PROCESS_DEBUG_EVENT");
       if (!windows_process->windows_initialization_done)
 	{
 	  target_terminal::ours ();
@@ -1029,10 +1018,6 @@ windows_nat_target::get_windows_debug_event
       break;
 
     case LOAD_DLL_DEBUG_EVENT:
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "LOAD_DLL_DEBUG_EVENT");
       CloseHandle (current_event->u.LoadDll.hFile);
       if (windows_process->saw_create != 1
 	  || ! windows_process->windows_initialization_done)
@@ -1050,10 +1035,6 @@ windows_nat_target::get_windows_debug_event
       break;
 
     case UNLOAD_DLL_DEBUG_EVENT:
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "UNLOAD_DLL_DEBUG_EVENT");
       if (windows_process->saw_create != 1
 	  || ! windows_process->windows_initialization_done)
 	break;
@@ -1070,10 +1051,6 @@ windows_nat_target::get_windows_debug_event
       break;
 
     case EXCEPTION_DEBUG_EVENT:
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "EXCEPTION_DEBUG_EVENT");
       if (windows_process->saw_create != 1)
 	break;
       switch (windows_process->handle_exception (*current_event,
@@ -1093,10 +1070,6 @@ windows_nat_target::get_windows_debug_event
       break;
 
     case OUTPUT_DEBUG_STRING_EVENT:	/* Message from the kernel.  */
-      DEBUG_EVENTS ("kernel event for pid=%u tid=0x%x code=%s",
-		    (unsigned) current_event->dwProcessId,
-		    (unsigned) current_event->dwThreadId,
-		    "OUTPUT_DEBUG_STRING_EVENT");
       if (windows_process->saw_create != 1)
 	break;
       thread_id = windows_process->handle_output_debug_string (*current_event,
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index 826d21867ae..8d24826d05c 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -997,13 +997,14 @@ get_child_debug_event (DWORD *continue_status,
       }
   }
 
+  OUTMSG2 (("gdbserver: kernel event %s for pid=%u tid=%x)\n",
+	    event_code_to_string (current_event->dwDebugEventCode).c_str (),
+	    (unsigned) current_event->dwProcessId,
+	    (unsigned) current_event->dwThreadId));
+
   switch (current_event->dwDebugEventCode)
     {
     case CREATE_THREAD_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event CREATE_THREAD_DEBUG_EVENT "
-		"for pid=%u tid=%x)\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
 
       /* Record the existence of this thread.  */
       child_add_thread (current_event->dwProcessId,
@@ -1013,10 +1014,6 @@ get_child_debug_event (DWORD *continue_status,
       break;
 
     case EXIT_THREAD_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event EXIT_THREAD_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
       child_delete_thread (current_event->dwProcessId,
 			   current_event->dwThreadId);
 
@@ -1024,10 +1021,6 @@ get_child_debug_event (DWORD *continue_status,
       return 1;
 
     case CREATE_PROCESS_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event CREATE_PROCESS_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
       CloseHandle (current_event->u.CreateProcessInfo.hFile);
 
       if (windows_process.open_process_used)
@@ -1047,10 +1040,6 @@ get_child_debug_event (DWORD *continue_status,
       break;
 
     case EXIT_PROCESS_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event EXIT_PROCESS_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
       {
 	DWORD exit_status = current_event->u.ExitProcess.dwExitCode;
 	/* If the exit status looks like a fatal exception, but we
@@ -1067,10 +1056,6 @@ get_child_debug_event (DWORD *continue_status,
       break;
 
     case LOAD_DLL_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event LOAD_DLL_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
       CloseHandle (current_event->u.LoadDll.hFile);
       if (! windows_process.child_initialization_done)
 	break;
@@ -1080,10 +1065,6 @@ get_child_debug_event (DWORD *continue_status,
       break;
 
     case UNLOAD_DLL_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event UNLOAD_DLL_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
       if (! windows_process.child_initialization_done)
 	break;
       windows_process.handle_unload_dll (*current_event);
@@ -1091,10 +1072,6 @@ get_child_debug_event (DWORD *continue_status,
       break;
 
     case EXCEPTION_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event EXCEPTION_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
       if (windows_process.handle_exception (*current_event,
 					    ourstatus, debug_threads)
 	  == HANDLE_EXCEPTION_UNHANDLED)
@@ -1103,20 +1080,8 @@ get_child_debug_event (DWORD *continue_status,
 
     case OUTPUT_DEBUG_STRING_EVENT:
       /* A message from the kernel (or Cygwin).  */
-      OUTMSG2 (("gdbserver: kernel event OUTPUT_DEBUG_STRING_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId));
       windows_process.handle_output_debug_string (*current_event, nullptr);
       break;
-
-    default:
-      OUTMSG2 (("gdbserver: kernel event unknown "
-		"for pid=%u tid=%x code=%x\n",
-		(unsigned) current_event->dwProcessId,
-		(unsigned) current_event->dwThreadId,
-		(unsigned) current_event->dwDebugEventCode));
-      break;
     }
 
   ptid = debug_event_ptid (current_event);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.