diff --git a/mpact/sim/util/gdbserver/BUILD b/mpact/sim/util/gdbserver/BUILD
index 1123141..6ca29a5 100644
--- a/mpact/sim/util/gdbserver/BUILD
+++ b/mpact/sim/util/gdbserver/BUILD
@@ -23,7 +23,7 @@
 
 cc_library(
     name = "gdbserver",
-    srcs = ["gdbserver.cpp"],
+    srcs = ["gdbserver.cc"],
     hdrs = ["gdbserver.h"],
     deps = [
         "//mpact/sim/generic:core_debug_interface",
diff --git a/mpact/sim/util/gdbserver/gdbserver.cpp b/mpact/sim/util/gdbserver/gdbserver.cc
similarity index 95%
rename from mpact/sim/util/gdbserver/gdbserver.cpp
rename to mpact/sim/util/gdbserver/gdbserver.cc
index 84bc6f9..c15a353 100644
--- a/mpact/sim/util/gdbserver/gdbserver.cpp
+++ b/mpact/sim/util/gdbserver/gdbserver.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "third_party/mpact_sim/util/gdbserver/gdbserver.h"
+#include "mpact/sim/util/gdbserver/gdbserver.h"
 
 #include <fcntl.h>
 #include <netinet/in.h>
@@ -28,17 +28,18 @@
 #include <string>
 #include <vector>
 
-#include "third_party/absl/container/flat_hash_map.h"
-#include "third_party/absl/log/log.h"
-#include "third_party/absl/status/status.h"
-#include "third_party/absl/strings/numbers.h"
-#include "third_party/absl/strings/str_cat.h"
-#include "third_party/absl/strings/str_format.h"
-#include "third_party/absl/strings/str_split.h"
-#include "third_party/absl/strings/string_view.h"
-#include "third_party/absl/types/span.h"
-#include "third_party/mpact_sim/generic/core_debug_interface.h"
-#include "third_party/mpact_sim/generic/type_helpers.h"
+#include "absl/container/flat_hash_map.h"
+#include "absl/log/log.h"
+#include "absl/status/status.h"
+#include "absl/strings/match.h"
+#include "absl/strings/numbers.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/str_format.h"
+#include "absl/strings/str_split.h"
+#include "absl/strings/string_view.h"
+#include "absl/types/span.h"
+#include "mpact/sim/generic/core_debug_interface.h"
+#include "mpact/sim/generic/type_helpers.h"
 
 namespace {
 
@@ -399,7 +400,7 @@
       command.remove_prefix(1);
       return GdbStep(command);
     case 'v':  // Verbose commands.
-      if (command.starts_with("vCont")) {
+      if (absl::StartsWith(command, "vCont")) {
         command.remove_prefix(5);
         return GdbVContinue(command);
       }
@@ -767,8 +768,9 @@
     num_bytes++;
     std::string_view byte = data.substr(0, 2);
     data.remove_prefix(2);
-    uint8_t value;
-    (void)absl::SimpleHexAtoi(byte, &value);
+    uint32_t value_tmp;
+    (void)absl::SimpleHexAtoi(byte, &value_tmp);
+    uint8_t value = static_cast<uint8_t>(value_tmp);
     buffer_[i] = value;
   }
   if (num_bytes != length) {
@@ -829,8 +831,9 @@
     for (int j = 0; j < debug_info_.GetGprWidth(); j += 8) {
       std::string_view byte = data.substr(0, 2);
       data.remove_prefix(2);
-      uint8_t byte_value;
-      (void)absl::SimpleHexAtoi(byte, &byte_value);
+      uint32_t byte_value_tmp;
+      (void)absl::SimpleHexAtoi(byte, &byte_value_tmp);
+      uint8_t byte_value = static_cast<uint8_t>(byte_value_tmp);
       value |= byte_value << (j * 8);
       num_bytes++;
     }
@@ -886,8 +889,9 @@
   while (!register_value_str.empty()) {
     std::string_view byte = register_value_str.substr(0, 2);
     register_value_str.remove_prefix(2);
-    uint8_t byte_value;
-    (void)absl::SimpleHexAtoi(byte, &byte_value);
+    uint32_t byte_value_tmp;
+    (void)absl::SimpleHexAtoi(byte, &byte_value_tmp);
+    uint8_t byte_value = static_cast<uint8_t>(byte_value_tmp);
     value |= byte_value << (count * 8);
     count++;
   }
@@ -903,7 +907,7 @@
     default:
       break;
     case 'A':  // Attached?
-      if (command.starts_with("Attached")) {
+      if (absl::StartsWith(command, "Attached")) {
         return Respond("0");
       }
       break;
@@ -913,35 +917,35 @@
       }
       break;
     case 'E':  // ExecAndArgs?
-      if (command.starts_with("ExecAndArgs")) {
+      if (absl::StartsWith(command, "ExecAndArgs")) {
         command.remove_prefix(11);
         return GdbExecAndArgs(command);
       }
       break;
     case 'f':
-      if (command.starts_with("fThreadInfo")) {
+      if (absl::StartsWith(command, "fThreadInfo")) {
         return GdbThreadInfo();
       }
       break;
     case 'G':
-      if (command.starts_with("GDBServerVersion")) {
+      if (absl::StartsWith(command, "GDBServerVersion")) {
         return Respond(kGDBServerVersion);
       }
       break;
     case 'H':
-      if (command.starts_with("HostInfo")) {
+      if (absl::StartsWith(command, "HostInfo")) {
         return GdbHostInfo();
       }
       break;
     case 's':
-      if (command.starts_with("sThreadInfo")) {
+      if (absl::StartsWith(command, "sThreadInfo")) {
         return Respond("l");
       }
       break;
     case 'S': {  // Search, Supported, or Symbol.
-      if (command.starts_with("Search")) break;
-      if (command.starts_with("Symbol")) break;
-      if (command.starts_with("Supported")) {
+      if (absl::StartsWith(command, "Search")) break;
+      if (absl::StartsWith(command, "Symbol")) break;
+      if (absl::StartsWith(command, "Supported")) {
         command.remove_prefix(9);
         return GdbSupported(command);
       }
