New target methods for memory tagging support
[deliverable/binutils-gdb.git] / gdb / windows-nat.c
index ba88c33cac3835d2d66852872ce3d3b31810016e..00f83536e330beb16daf6707eb910777a514dc13 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-vector operations for controlling windows child processes, for GDB.
 
-   Copyright (C) 1995-2020 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 Free Software Foundation, Inc.
 
    Contributed by Cygnus Solutions, A Red Hat Company.
 
@@ -201,8 +201,8 @@ enum
 #endif
 
 #define CONTEXT_DEBUGGER_DR CONTEXT_FULL | CONTEXT_FLOATING_POINT \
-        | CONTEXT_SEGMENTS | CONTEXT_DEBUG_REGISTERS \
-        | CONTEXT_EXTENDED_REGISTERS
+       | CONTEXT_SEGMENTS | CONTEXT_DEBUG_REGISTERS \
+       | CONTEXT_EXTENDED_REGISTERS
 
 static uintptr_t dr[8];
 static int debug_registers_changed;
@@ -218,10 +218,17 @@ static int windows_initialization_done;
 #endif
 
 #define CHECK(x)       check (x, __FILE__,__LINE__)
-#define DEBUG_EXEC(x)  if (debug_exec)         debug_printf x
-#define DEBUG_EVENTS(x)        if (debug_events)       debug_printf x
-#define DEBUG_MEM(x)   if (debug_memory)       debug_printf x
-#define DEBUG_EXCEPT(x)        if (debug_exceptions)   debug_printf x
+#define DEBUG_EXEC(fmt, ...) \
+  debug_prefixed_printf_cond (debug_exec, "windows exec", fmt, ## __VA_ARGS__)
+#define DEBUG_EVENTS(fmt, ...) \
+  debug_prefixed_printf_cond (debug_events, "windows events", fmt, \
+                             ## __VA_ARGS__)
+#define DEBUG_MEM(fmt, ...) \
+  debug_prefixed_printf_cond (debug_memory, "windows mem", fmt, \
+                             ## __VA_ARGS__)
+#define DEBUG_EXCEPT(fmt, ...) \
+  debug_prefixed_printf_cond (debug_exceptions, "windows except", fmt, \
+                             ## __VA_ARGS__)
 
 static void cygwin_set_dr (int i, CORE_ADDR addr);
 static void cygwin_set_dr7 (unsigned long val);
@@ -235,7 +242,6 @@ static std::vector<windows_thread_info *> thread_list;
 static int saw_create;
 static int open_process_used = 0;
 #ifdef __x86_64__
-static bool wow64_process = false;
 static void *wow64_dbgbreak;
 #endif
 
@@ -504,7 +510,7 @@ windows_add_thread (ptid_t ptid, HANDLE h, void *tlb, bool main_thread_p)
 static void
 windows_init_thread_list (void)
 {
-  DEBUG_EVENTS (("gdb: windows_init_thread_list\n"));
+  DEBUG_EVENTS ("called");
   init_thread_list ();
 
   for (windows_thread_info *here : thread_list)
@@ -886,8 +892,8 @@ windows_nat::handle_load_dll ()
 
   lm_info_windows *li = (lm_info_windows *) solib_end->lm_info;
 
-  DEBUG_EVENTS (("gdb: Loading dll \"%s\" at %s.\n", solib_end->so_name,
-                host_address_to_string (li->load_addr)));
+  DEBUG_EVENTS ("Loading dll \"%s\" at %s.", solib_end->so_name,
+               host_address_to_string (li->load_addr));
 }
 
 static void
@@ -918,7 +924,7 @@ windows_nat::handle_unload_dll ()
          so->next = sodel->next;
          if (!so->next)
            solib_end = so;
-         DEBUG_EVENTS (("gdb: Unloading dll \"%s\".\n", sodel->so_name));
+         DEBUG_EVENTS ("Unloading dll \"%s\".", sodel->so_name);
 
          windows_free_so (sodel);
          return;
@@ -1403,7 +1409,7 @@ windows_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
     {
       if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
        {
-         DEBUG_EXCEPT(("Cannot continue with signal %d here.\n",sig));
+         DEBUG_EXCEPT ("Cannot continue with signal %d here.", sig);
        }
       else if (sig == last_sig)
        continue_status = DBG_EXCEPTION_NOT_HANDLED;
@@ -1424,18 +1430,18 @@ windows_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
              }
          if (continue_status == DBG_CONTINUE)
            {
-             DEBUG_EXCEPT(("Cannot continue with signal %d.\n",sig));
+             DEBUG_EXCEPT ("Cannot continue with signal %d.", sig);
            }
        }
 #endif
-       DEBUG_EXCEPT(("Can only continue with received signal %d.\n",
-         last_sig));
+      DEBUG_EXCEPT ("Can only continue with received signal %d.",
+                   last_sig);
     }
 
   last_sig = GDB_SIGNAL_0;
 
-  DEBUG_EXEC (("gdb: windows_resume (pid=%d, tid=0x%x, step=%d, sig=%d);\n",
-              ptid.pid (), (unsigned) ptid.lwp (), step, sig));
+  DEBUG_EXEC ("pid=%d, tid=0x%x, step=%d, sig=%d",
+             ptid.pid (), (unsigned) ptid.lwp (), step, sig);
 
   /* Get context for currently selected thread.  */
   th = thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
@@ -1600,10 +1606,10 @@ windows_nat_target::get_windows_debug_event (int pid,
   switch (event_code)
     {
     case CREATE_THREAD_DEBUG_EVENT:
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "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 (saw_create != 1)
        {
          inferior *inf = find_inferior_pid (this, current_event.dwProcessId);
@@ -1621,7 +1627,7 @@ windows_nat_target::get_windows_debug_event (int pid,
       /* Record the existence of this thread.  */
       thread_id = current_event.dwThreadId;
       windows_add_thread
-        (ptid_t (current_event.dwProcessId, current_event.dwThreadId, 0),
+       (ptid_t (current_event.dwProcessId, current_event.dwThreadId, 0),
         current_event.u.CreateThread.hThread,
         current_event.u.CreateThread.lpThreadLocalBase,
         false /* main_thread_p */);
@@ -1629,10 +1635,10 @@ windows_nat_target::get_windows_debug_event (int pid,
       break;
 
     case EXIT_THREAD_DEBUG_EVENT:
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "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");
       windows_delete_thread (ptid_t (current_event.dwProcessId,
                                     current_event.dwThreadId, 0),
                             current_event.u.ExitThread.dwExitCode,
@@ -1640,10 +1646,10 @@ windows_nat_target::get_windows_debug_event (int pid,
       break;
 
     case CREATE_PROCESS_DEBUG_EVENT:
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "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 (++saw_create != 1)
        break;
@@ -1651,7 +1657,7 @@ windows_nat_target::get_windows_debug_event (int pid,
       current_process_handle = current_event.u.CreateProcessInfo.hProcess;
       /* Add the main thread.  */
       windows_add_thread
-        (ptid_t (current_event.dwProcessId,
+       (ptid_t (current_event.dwProcessId,
                 current_event.dwThreadId, 0),
         current_event.u.CreateProcessInfo.hThread,
         current_event.u.CreateProcessInfo.lpThreadLocalBase,
@@ -1660,10 +1666,10 @@ windows_nat_target::get_windows_debug_event (int pid,
       break;
 
     case EXIT_PROCESS_DEBUG_EVENT:
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "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_initialization_done)
        {
          target_terminal::ours ();
@@ -1698,10 +1704,10 @@ windows_nat_target::get_windows_debug_event (int pid,
       break;
 
     case LOAD_DLL_DEBUG_EVENT:
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "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 (saw_create != 1 || ! windows_initialization_done)
        break;
@@ -1712,10 +1718,10 @@ windows_nat_target::get_windows_debug_event (int pid,
       break;
 
     case UNLOAD_DLL_DEBUG_EVENT:
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "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 (saw_create != 1 || ! windows_initialization_done)
        break;
       catch_errors (handle_unload_dll);
@@ -1725,10 +1731,10 @@ windows_nat_target::get_windows_debug_event (int pid,
       break;
 
     case EXCEPTION_DEBUG_EVENT:
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "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 (saw_create != 1)
        break;
       switch (handle_exception (ourstatus, debug_exceptions))
@@ -1747,10 +1753,10 @@ windows_nat_target::get_windows_debug_event (int pid,
       break;
 
     case OUTPUT_DEBUG_STRING_EVENT:    /* Message from the kernel.  */
-      DEBUG_EVENTS (("gdb: kernel event for pid=%u tid=0x%x code=%s)\n",
-                    (unsigned) current_event.dwProcessId,
-                    (unsigned) current_event.dwThreadId,
-                    "OUTPUT_DEBUG_STRING_EVENT"));
+      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 (saw_create != 1)
        break;
       thread_id = handle_output_debug_string (ourstatus);
@@ -1775,9 +1781,9 @@ windows_nat_target::get_windows_debug_event (int pid,
     {
       /* Pending stop.  See the comment by the definition of
         "pending_stops" for details on why this is needed.  */
-      DEBUG_EVENTS (("get_windows_debug_event - "
-                    "unexpected stop in 0x%x (expecting 0x%x)\n",
-                    thread_id, desired_stop_thread_id));
+      DEBUG_EVENTS ("get_windows_debug_event - "
+                   "unexpected stop in 0x%x (expecting 0x%x)",
+                   thread_id, desired_stop_thread_id);
 
       if (current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT
          && ((current_event.u.Exception.ExceptionRecord.ExceptionCode
@@ -2021,8 +2027,9 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching)
 #endif
   current_event.dwProcessId = pid;
   memset (&current_event, 0, sizeof (current_event));
-  if (!target_is_pushed (this))
-    push_target (this);
+  inf = current_inferior ();
+  if (!inf->target_is_pushed (this))
+    inf->push_target (this);
   disable_breakpoints_in_shlibs ();
   windows_clear_solib ();
   clear_proceed_status (0);
@@ -2043,7 +2050,6 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching)
       windows_set_segment_register_p (i386_windows_segment_register_p);
     }
 
-  inf = current_inferior ();
   inferior_appeared (inf, pid);
   inf->attach_flag = attaching;
 
@@ -2414,7 +2420,7 @@ clear_win32_environment (char **env)
       mbstowcs (copy, env[i], len);
       equalpos = wcschr (copy, L'=');
       if (equalpos)
-        *equalpos = L'\0';
+       *equalpos = L'\0';
       SetEnvironmentVariableW (copy, NULL);
     }
   xfree (copy);
@@ -3067,7 +3073,7 @@ windows_nat_target::mourn_inferior ()
 void
 windows_nat_target::interrupt ()
 {
-  DEBUG_EVENTS (("gdb: GenerateConsoleCtrlEvent (CTRLC_EVENT, 0)\n"));
+  DEBUG_EVENTS ("GenerateConsoleCtrlEvent (CTRLC_EVENT, 0)");
   CHECK (GenerateConsoleCtrlEvent (CTRL_C_EVENT, current_event.dwProcessId));
   registers_changed ();                /* refresh register state */
 }
@@ -3085,8 +3091,8 @@ windows_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf,
 
   if (writebuf != NULL)
     {
-      DEBUG_MEM (("gdb: write target memory, %s bytes at %s\n",
-                 pulongest (len), core_addr_to_string (memaddr)));
+      DEBUG_MEM ("write target memory, %s bytes at %s",
+                pulongest (len), core_addr_to_string (memaddr));
       success = WriteProcessMemory (current_process_handle,
                                    (LPVOID) (uintptr_t) memaddr, writebuf,
                                    len, &done);
@@ -3097,8 +3103,8 @@ windows_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf,
     }
   else
     {
-      DEBUG_MEM (("gdb: read target memory, %s bytes at %s\n",
-                 pulongest (len), core_addr_to_string (memaddr)));
+      DEBUG_MEM ("read target memory, %s bytes at %s",
+                pulongest (len), core_addr_to_string (memaddr));
       success = ReadProcessMemory (current_process_handle,
                                   (LPCVOID) (uintptr_t) memaddr, readbuf,
                                   len, &done);
@@ -3133,8 +3139,7 @@ windows_nat_target::kill ()
 void
 windows_nat_target::close ()
 {
-  DEBUG_EVENTS (("gdb: windows_close, inferior_ptid=%d\n",
-               inferior_ptid.pid ()));
+  DEBUG_EVENTS ("inferior_ptid=%d\n", inferior_ptid.pid ());
 }
 
 /* Convert pid to printable format.  */
@@ -3611,7 +3616,7 @@ _initialize_loadable ()
 #endif
       GPA (hm, GetModuleInformation);
       GetModuleFileNameEx = (GetModuleFileNameEx_ftype *)
-        GetProcAddress (hm, GetModuleFileNameEx_name);
+       GetProcAddress (hm, GetModuleFileNameEx_name);
     }
 
   if (!EnumProcessModules || !GetModuleInformation || !GetModuleFileNameEx)
This page took 0.030934 seconds and 4 git commands to generate.