Use malloc/free in the dbgapi callbacks
[deliverable/binutils-gdb.git] / gdb / gdbserver / server.c
index 976ecbd2dfbfe2d137a6a37944df804b1c93bb7d..17e79a6ea016bea02bfab04c42ea24e75de36b79 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
@@ -41,6 +41,9 @@
 #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"
@@ -67,25 +70,19 @@ char *current_directory;
 
 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
@@ -129,10 +126,10 @@ unsigned long signal_pid;
 /* 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;
 
@@ -268,7 +265,7 @@ get_exec_wrapper ()
 
 /* See gdbsupport/common-inferior.h.  */
 
-char *
+const char *
 get_exec_file (int err)
 {
   if (err && program_path.get () == NULL)
@@ -750,7 +747,7 @@ handle_general_set (char *own_buf)
          return;
        }
 
-      non_stop = req;
+      non_stop = (req != 0);
 
       if (remote_debug)
        debug_printf ("[%s mode enabled]\n", req_str);
@@ -926,7 +923,6 @@ get_features_xml (const char *annex)
 
 #ifdef USE_XML
   {
-    extern const char *const xml_builtin[][2];
     int i;
 
     /* Look for the annex.  */
@@ -1237,7 +1233,7 @@ handle_detach (char *own_buf)
          if (debug_threads)
            debug_printf ("Forcing non-stop mode\n");
 
-         non_stop = 1;
+         non_stop = true;
          start_non_stop (1);
        }
 
@@ -1406,7 +1402,7 @@ handle_monitor_command (char *mon, char *own_buf)
   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");
@@ -2272,9 +2268,10 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
 
          /* 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);
@@ -2337,7 +2334,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
                {
                  /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED
                     events.  */
-                 report_no_resumed = 1;
+                 report_no_resumed = true;
                }
              else
                {
@@ -2893,21 +2890,9 @@ handle_v_attach (char *own_buf)
 {
   client_state &cs = get_client_state ();
   int pid;
-  int ret;
 
   pid = strtol (own_buf + 8, NULL, 16);
-
-  try
-    {
-      ret = attach_inferior (pid);
-    }
-  catch (const gdb_exception_error &e)
-    {
-      snprintf (own_buf, PBUFSIZ, "E.%s", e.what ());
-      return 0;
-    }
-
-  if (pid != 0 && ret == 0)
+  if (pid != 0 && attach_inferior (pid) == 0)
     {
       /* Don't report shared library events after attaching, even if
         some libraries are preloaded.  GDB will always poll the
@@ -3396,7 +3381,7 @@ static void
 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",
@@ -3649,27 +3634,26 @@ captured_main (int argc, char *argv[])
        }
       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
                {
@@ -3697,7 +3681,7 @@ captured_main (int argc, char *argv[])
       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="))
@@ -4028,7 +4012,7 @@ process_serial_event (void)
 
   disable_async_io ();
 
-  response_needed = 0;
+  response_needed = false;
   packet_len = getpkt (cs.own_buf);
   if (packet_len <= 0)
     {
@@ -4036,7 +4020,7 @@ process_serial_event (void)
       /* Force an event loop break.  */
       return -1;
     }
-  response_needed = 1;
+  response_needed = true;
 
   char ch = cs.own_buf[0];
   switch (ch)
@@ -4051,7 +4035,7 @@ process_serial_event (void)
       handle_detach (cs.own_buf);
       break;
     case '!':
-      extended_protocol = 1;
+      extended_protocol = true;
       write_ok (cs.own_buf);
       break;
     case '?':
@@ -4266,7 +4250,7 @@ process_serial_event (void)
        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.  */
@@ -4305,7 +4289,7 @@ process_serial_event (void)
       }
       break;
     case 'R':
-      response_needed = 0;
+      response_needed = false;
 
       /* Restarting the inferior is only supported in the extended
         protocol.  */
@@ -4366,7 +4350,7 @@ process_serial_event (void)
   else
     putpkt (cs.own_buf);
 
-  response_needed = 0;
+  response_needed = false;
 
   if (exit_requested)
     return -1;
This page took 0.029393 seconds and 4 git commands to generate.