/* Main code for remote server for GDB.
- Copyright (C) 1989-2019 Free Software Foundation, Inc.
+ Copyright (C) 1989-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "gdbsupport/environ.h"
#include "filenames.h"
#include "gdbsupport/pathstuff.h"
+#ifdef USE_XML
+#include "xml-builtin.h"
+#endif
#include "gdbsupport/selftest.h"
#include "gdbsupport/scope-exit.h"
static gdb_environ our_environ;
-/* Start the inferior using a shell. */
-
-/* We always try to start the inferior using a shell. */
-
-int startup_with_shell = 1;
+bool server_waiting;
-int server_waiting;
-
-static int extended_protocol;
-static int response_needed;
-static int exit_requested;
+static bool extended_protocol;
+static bool response_needed;
+static bool exit_requested;
/* --once: Exit after the first connection has closed. */
-int run_once;
+bool run_once;
-/* Whether to report TARGET_WAITKING_NO_RESUMED events. */
-static int report_no_resumed;
+/* Whether to report TARGET_WAITKIND_NO_RESUMED events. */
+static bool report_no_resumed;
-int non_stop;
+bool non_stop;
static struct {
/* Set the PROGRAM_PATH. Here we adjust the path of the provided
/* Set if you want to disable optional thread related packets support
in gdbserver, for the sake of testing GDB against stubs that don't
support them. */
-int disable_packet_vCont;
-int disable_packet_Tthread;
-int disable_packet_qC;
-int disable_packet_qfThreadInfo;
+bool disable_packet_vCont;
+bool disable_packet_Tthread;
+bool disable_packet_qC;
+bool disable_packet_qfThreadInfo;
static unsigned char *mem_buf;
/* See gdbsupport/common-inferior.h. */
-char *
+const char *
get_exec_file (int err)
{
if (err && program_path.get () == NULL)
return;
}
- non_stop = req;
+ non_stop = (req != 0);
if (remote_debug)
debug_printf ("[%s mode enabled]\n", req_str);
#ifdef USE_XML
{
- extern const char *const xml_builtin[][2];
int i;
/* Look for the annex. */
if (debug_threads)
debug_printf ("Forcing non-stop mode\n");
- non_stop = 1;
+ non_stop = true;
start_non_stop (1);
}
else if (strcmp (mon, "help") == 0)
monitor_show_help ();
else if (strcmp (mon, "exit") == 0)
- exit_requested = 1;
+ exit_requested = true;
else
{
monitor_output ("Unknown monitor command.\n\n");
for (const dll_info &dll : all_dlls)
document += string_printf
- (" <library name=\"%s\"><segment address=\"0x%lx\"/></library>\n",
- dll.name.c_str (), (long) dll.base_addr);
+ (" <library name=\"%s\"><segment address=\"0x%s\"/></library>\n",
+ dll.name.c_str (), paddress (dll.base_addr));
document += "</library-list>\n";
/* Two passes, to avoid nested strtok calls in
target_process_qsupported. */
- for (p = strtok (p + 1, ";");
+ char *saveptr;
+ for (p = strtok_r (p + 1, ";", &saveptr);
p != NULL;
- p = strtok (NULL, ";"))
+ p = strtok_r (NULL, ";", &saveptr))
{
count++;
qsupported = XRESIZEVEC (char *, qsupported, count);
{
/* GDB supports and wants TARGET_WAITKIND_NO_RESUMED
events. */
- report_no_resumed = 1;
+ report_no_resumed = true;
}
else
{
gdbserver_version (void)
{
printf ("GNU gdbserver %s%s\n"
- "Copyright (C) 2019 Free Software Foundation, Inc.\n"
+ "Copyright (C) 2020 Free Software Foundation, Inc.\n"
"gdbserver is free software, covered by the "
"GNU General Public License.\n"
"This gdbserver was configured as \"%s\"\n",
}
else if (startswith (*next_arg, "--disable-packet="))
{
- char *packets, *tok;
-
- packets = *next_arg += sizeof ("--disable-packet=") - 1;
- for (tok = strtok (packets, ",");
+ char *packets = *next_arg += sizeof ("--disable-packet=") - 1;
+ char *saveptr;
+ for (char *tok = strtok_r (packets, ",", &saveptr);
tok != NULL;
- tok = strtok (NULL, ","))
+ tok = strtok_r (NULL, ",", &saveptr))
{
if (strcmp ("vCont", tok) == 0)
- disable_packet_vCont = 1;
+ disable_packet_vCont = true;
else if (strcmp ("Tthread", tok) == 0)
- disable_packet_Tthread = 1;
+ disable_packet_Tthread = true;
else if (strcmp ("qC", tok) == 0)
- disable_packet_qC = 1;
+ disable_packet_qC = true;
else if (strcmp ("qfThreadInfo", tok) == 0)
- disable_packet_qfThreadInfo = 1;
+ disable_packet_qfThreadInfo = true;
else if (strcmp ("threads", tok) == 0)
{
- disable_packet_vCont = 1;
- disable_packet_Tthread = 1;
- disable_packet_qC = 1;
- disable_packet_qfThreadInfo = 1;
+ disable_packet_vCont = true;
+ disable_packet_Tthread = true;
+ disable_packet_qC = true;
+ disable_packet_qfThreadInfo = true;
}
else
{
else if (strcmp (*next_arg, "--no-startup-with-shell") == 0)
startup_with_shell = false;
else if (strcmp (*next_arg, "--once") == 0)
- run_once = 1;
+ run_once = true;
else if (strcmp (*next_arg, "--selftest") == 0)
selftest = true;
else if (startswith (*next_arg, "--selftest="))
disable_async_io ();
- response_needed = 0;
+ response_needed = false;
packet_len = getpkt (cs.own_buf);
if (packet_len <= 0)
{
/* Force an event loop break. */
return -1;
}
- response_needed = 1;
+ response_needed = true;
char ch = cs.own_buf[0];
switch (ch)
handle_detach (cs.own_buf);
break;
case '!':
- extended_protocol = 1;
+ extended_protocol = true;
write_ok (cs.own_buf);
break;
case '?':
break;
}
case 'k':
- response_needed = 0;
+ response_needed = false;
if (!target_running ())
/* The packet we received doesn't make sense - but we can't
reply to it, either. */
}
break;
case 'R':
- response_needed = 0;
+ response_needed = false;
/* Restarting the inferior is only supported in the extended
protocol. */
else
putpkt (cs.own_buf);
- response_needed = 0;
+ response_needed = false;
if (exit_requested)
return -1;