mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
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.
This commit is contained in:
@ -384,7 +384,9 @@ private:
|
|||||||
bool m_is_async = false;
|
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
|
static void
|
||||||
check (BOOL ok, const char *file, int line)
|
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 (),
|
target_pid_to_str (ptid).c_str (),
|
||||||
(unsigned) exit_code);
|
(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 (),
|
auto iter = std::find_if (windows_process.thread_list.begin (),
|
||||||
windows_process.thread_list.end (),
|
windows_process.thread_list.end (),
|
||||||
@ -3118,7 +3120,8 @@ _initialize_windows_nat ()
|
|||||||
calling x86_set_debug_register_length function
|
calling x86_set_debug_register_length function
|
||||||
in processor windows specific native file. */
|
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__
|
#ifdef __CYGWIN__
|
||||||
cygwin_internal (CW_SET_DOS_FILE_WARNING, 0);
|
cygwin_internal (CW_SET_DOS_FILE_WARNING, 0);
|
||||||
|
Reference in New Issue
Block a user