From ba20dd9b6125551ecf2016ed7dbd61dc618fc876 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Thu, 15 Dec 2016 16:19:30 -0500
Subject: [PATCH] gdbstub: Remove global variable from public interface

Currently, this is only ever queried, so adding a function to check if the
server is enabled is more sensible.

If directly modifying this externally is ever desirable, it should be done
by adding a function to the interface, rather than exposing implementation
details directly.
---
 .../arm/dyncom/arm_dyncom_interpreter.cpp     |  4 ++--
 src/core/arm/skyeye_common/armstate.cpp       |  2 +-
 src/core/core.cpp                             |  2 +-
 src/core/gdbstub/gdbstub.cpp                  | 20 +++++++++++++------
 src/core/gdbstub/gdbstub.h                    | 11 +++++-----
 5 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
index 7b86167028..67c45640a9 100644
--- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
+++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
@@ -953,7 +953,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
 #define GDB_BP_CHECK                                                                               \
     cpu->Cpsr &= ~(1 << 5);                                                                        \
     cpu->Cpsr |= cpu->TFlag << 5;                                                                  \
-    if (GDBStub::g_server_enabled) {                                                               \
+    if (GDBStub::IsServerEnabled()) {                                                              \
         if (GDBStub::IsMemoryBreak() || (breakpoint_data.type != GDBStub::BreakpointType::None &&  \
                                          PC == breakpoint_data.address)) {                         \
             GDBStub::Break();                                                                      \
@@ -1649,7 +1649,7 @@ DISPATCH : {
     }
 
     // Find breakpoint if one exists within the block
-    if (GDBStub::g_server_enabled && GDBStub::IsConnected()) {
+    if (GDBStub::IsConnected()) {
         breakpoint_data =
             GDBStub::GetNextBreakpointFromAddress(cpu->Reg[15], GDBStub::BreakpointType::Execute);
     }
diff --git a/src/core/arm/skyeye_common/armstate.cpp b/src/core/arm/skyeye_common/armstate.cpp
index 1465b074ee..c36b0208f4 100644
--- a/src/core/arm/skyeye_common/armstate.cpp
+++ b/src/core/arm/skyeye_common/armstate.cpp
@@ -182,7 +182,7 @@ void ARMul_State::ResetMPCoreCP15Registers() {
 }
 
 static void CheckMemoryBreakpoint(u32 address, GDBStub::BreakpointType type) {
-    if (GDBStub::g_server_enabled && GDBStub::CheckBreakpoint(address, type)) {
+    if (GDBStub::IsServerEnabled() && GDBStub::CheckBreakpoint(address, type)) {
         LOG_DEBUG(Debug, "Found memory breakpoint @ %08x", address);
         GDBStub::Break(true);
     }
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 49ac8be6ee..6efa181592 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -22,7 +22,7 @@ std::unique_ptr<ARM_Interface> g_sys_core; ///< ARM11 system (OS) core
 
 /// Run the core CPU loop
 void RunLoop(int tight_loop) {
-    if (GDBStub::g_server_enabled) {
+    if (GDBStub::IsServerEnabled()) {
         GDBStub::HandlePacket();
 
         // If the loop is halted and we want to step, use a tiny (1) number of instructions to
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp
index 21d941363e..1303bafc11 100644
--- a/src/core/gdbstub/gdbstub.cpp
+++ b/src/core/gdbstub/gdbstub.cpp
@@ -5,6 +5,7 @@
 // Originally written by Sven Peter <sven@fail0verflow.com> for anergistic.
 
 #include <algorithm>
+#include <atomic>
 #include <climits>
 #include <csignal>
 #include <cstdarg>
@@ -130,7 +131,10 @@ static u16 gdbstub_port = 24689;
 
 static bool halt_loop = true;
 static bool step_loop = false;
-std::atomic<bool> g_server_enabled(false);
+
+// If set to false, the server will never be started and no
+// gdbstub-related functions will be executed.
+static std::atomic<bool> server_enabled(false);
 
 #ifdef _WIN32
 WSADATA InitData;
@@ -902,7 +906,7 @@ void SetServerPort(u16 port) {
 
 void ToggleServer(bool status) {
     if (status) {
-        g_server_enabled = status;
+        server_enabled = status;
 
         // Start server
         if (!IsConnected() && Core::g_sys_core != nullptr) {
@@ -914,12 +918,12 @@ void ToggleServer(bool status) {
             Shutdown();
         }
 
-        g_server_enabled = status;
+        server_enabled = status;
     }
 }
 
 static void Init(u16 port) {
-    if (!g_server_enabled) {
+    if (!server_enabled) {
         // Set the halt loop to false in case the user enabled the gdbstub mid-execution.
         // This way the CPU can still execute normally.
         halt_loop = false;
@@ -998,7 +1002,7 @@ void Init() {
 }
 
 void Shutdown() {
-    if (!g_server_enabled) {
+    if (!server_enabled) {
         return;
     }
 
@@ -1015,8 +1019,12 @@ void Shutdown() {
     LOG_INFO(Debug_GDBStub, "GDB stopped.");
 }
 
+bool IsServerEnabled() {
+    return server_enabled;
+}
+
 bool IsConnected() {
-    return g_server_enabled && gdbserver_socket != -1;
+    return IsServerEnabled() && gdbserver_socket != -1;
 }
 
 bool GetCpuHaltFlag() {
diff --git a/src/core/gdbstub/gdbstub.h b/src/core/gdbstub/gdbstub.h
index a7483bb10e..38177e32c8 100644
--- a/src/core/gdbstub/gdbstub.h
+++ b/src/core/gdbstub/gdbstub.h
@@ -5,7 +5,7 @@
 // Originally written by Sven Peter <sven@fail0verflow.com> for anergistic.
 
 #pragma once
-#include <atomic>
+
 #include "common/common_types.h"
 
 namespace GDBStub {
@@ -24,10 +24,6 @@ struct BreakpointAddress {
     BreakpointType type;
 };
 
-/// If set to false, the server will never be started and no gdbstub-related functions will be
-/// executed.
-extern std::atomic<bool> g_server_enabled;
-
 /**
  * Set the port the gdbstub should use to listen for connections.
  *
@@ -36,7 +32,7 @@ extern std::atomic<bool> g_server_enabled;
 void SetServerPort(u16 port);
 
 /**
- * Set the g_server_enabled flag and start or stop the server if possible.
+ * Starts or stops the server if possible.
  *
  * @param status Set the server to enabled or disabled.
  */
@@ -48,6 +44,9 @@ void Init();
 /// Stop gdbstub server.
 void Shutdown();
 
+/// Checks if the gdbstub server is enabled.
+bool IsServerEnabled();
+
 /// Returns true if there is an active socket connection.
 bool IsConnected();