public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Fix static initialization order problem in windows-nat.c
@ 2022-11-17 18:44 Tom Tromey
  0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2022-11-17 18:44 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c83b95d88feed26eb04f7eca97c08e3ace0b7cbb

commit c83b95d88feed26eb04f7eca97c08e3ace0b7cbb
Author: Tom Tromey <tromey@adacore.com>
Date:   Tue Nov 8 12:14:20 2022 -0700

    Fix static initialization order problem in windows-nat.c
    
    This patch fixes a static initialization order problem in
    windows-nat.c that was pointed out by Jon Turney.  The underlying
    problem is that the windows_nat_target constructor relies on
    serial_logfile already being constructed, but this is not enforced by
    C++ rules.  This patch fixes the problem by initializing the global
    windows_nat_target later.

Diff:
---
 gdb/windows-nat.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 6250cbc27a5..5d506507b6d 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -384,7 +384,9 @@ private:
   bool m_is_async = false;
 };
 
-static windows_nat_target the_windows_nat_target;
+/* This is a pointer and not a global specifically to avoid a C++
+   "static initializer fiasco" situation.  */
+static windows_nat_target *the_windows_nat_target;
 
 static void
 check (BOOL ok, const char *file, int line)
@@ -620,7 +622,7 @@ windows_nat_target::delete_thread (ptid_t ptid, DWORD exit_code,
 		target_pid_to_str (ptid).c_str (),
 		(unsigned) exit_code);
 
-  ::delete_thread (find_thread_ptid (&the_windows_nat_target, ptid));
+  ::delete_thread (find_thread_ptid (the_windows_nat_target, ptid));
 
   auto iter = std::find_if (windows_process.thread_list.begin (),
 			    windows_process.thread_list.end (),
@@ -3118,7 +3120,8 @@ _initialize_windows_nat ()
      calling x86_set_debug_register_length function
      in processor windows specific native file.  */
 
-  add_inf_child_target (&the_windows_nat_target);
+  the_windows_nat_target = new windows_nat_target;
+  add_inf_child_target (the_windows_nat_target);
 
 #ifdef __CYGWIN__
   cygwin_internal (CW_SET_DOS_FILE_WARNING, 0);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-17 18:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-17 18:44 [binutils-gdb] Fix static initialization order problem in windows-nat.c Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).