88 pid_t old_foreground_pgrp;
93 restore_old_foreground_pgrp (
void)
95 tcsetpgrp (terminal_fd, old_foreground_pgrp);
159 if (q->free_func != NULL)
160 q->free_func (event);
200 char **new_argv = argv;
202 if (wrapper_argv != NULL)
206 for (i = 0; wrapper_argv[i] != NULL; i++)
208 for (i = 0; argv[i] != NULL; i++)
210 new_argv =
alloca (
sizeof (
char *) * count);
212 for (i = 0; wrapper_argv[i] != NULL; i++)
213 new_argv[count++] = wrapper_argv[i];
214 for (i = 0; argv[i] != NULL; i++)
215 new_argv[count++] = argv[i];
216 new_argv[count] = NULL;
222 for (i = 0; new_argv[i]; ++i)
223 debug_printf (
"new_argv[%d] = \"%s\"\n", i, new_argv[i]);
228 signal (SIGTTOU, SIG_DFL);
229 signal (SIGTTIN, SIG_DFL);
236 fprintf (stderr,
"Process %s created; pid = %ld\n", argv[0],
241 signal (SIGTTOU, SIG_IGN);
242 signal (SIGTTIN, SIG_IGN);
243 terminal_fd = fileno (stderr);
244 old_foreground_pgrp = tcgetpgrp (terminal_fd);
245 tcsetpgrp (terminal_fd, signal_pid);
246 atexit (restore_old_foreground_pgrp);
249 if (wrapper_argv != NULL)
253 memset (&resume_info, 0,
sizeof (resume_info));
255 resume_info.
kind = resume_continue;
304 fprintf (stderr,
"Attached; pid = %d\n", pid);
350 while (*buf && *buf !=
':')
358 while (*buf && *buf !=
':')
366 while (*buf && *buf !=
':')
399 if (thread->
btrace != NULL)
400 return "E.Btrace already enabled.";
405 if (thread->
btrace == NULL)
406 return "E.Could not enable btrace.";
416 if (thread->
btrace != NULL)
417 return "E.Btrace already enabled.";
422 if (thread->
btrace == NULL)
423 return "E.Could not enable btrace.";
434 if (thread->
btrace == NULL)
435 return "E.Branch tracing not enabled.";
438 return "E.Could not disable branch tracing.";
456 op = own_buf + strlen (
"Qbtrace:");
461 strcpy (own_buf,
"E.Must select a single thread.");
468 strcpy (own_buf,
"E.No such thread.");
474 if (strcmp (op,
"bts") == 0)
476 else if (strcmp (op,
"pt") == 0)
478 else if (strcmp (op,
"off") == 0)
481 err =
"E.Bad Qbtrace operation. Use bts, pt, or off.";
484 strcpy (own_buf, err);
502 op = own_buf + strlen (
"Qbtrace-conf:");
507 strcpy (own_buf,
"E.Must select a single thread.");
514 strcpy (own_buf,
"E.No such thread.");
524 size = strtoul (op + strlen (
"bts:size="), &endp, 16);
525 if (endp == NULL || *endp != 0 ||
errno != 0 || size > UINT_MAX)
527 strcpy (own_buf,
"E.Bad size value.");
533 else if (strncmp (op,
"pt:size=", strlen (
"pt:size=")) == 0)
539 size = strtoul (op + strlen (
"pt:size="), &endp, 16);
540 if (endp == NULL || *endp != 0 ||
errno != 0 || size > UINT_MAX)
542 strcpy (own_buf,
"E.Bad size value.");
550 strcpy (own_buf,
"E.Bad Qbtrace configuration option.");
565 int numsigs = (int) GDB_SIGNAL_LAST, i;
566 const char *p = own_buf + strlen (
"QPassSignals:");
570 for (i = 0; i < numsigs; i++)
584 strcpy (own_buf,
"OK");
590 int numsigs = (int) GDB_SIGNAL_LAST, i;
591 const char *p = own_buf + strlen (
"QProgramSignals:");
594 program_signals_p = 1;
597 for (i = 0; i < numsigs; i++)
601 program_signals[i] = 1;
609 program_signals[i] = 0;
611 strcpy (own_buf,
"OK");
615 if (strcmp (own_buf,
"QStartNoAckMode") == 0)
619 fprintf (stderr,
"[noack mode enabled]\n");
630 char *mode = own_buf + 9;
634 if (strcmp (mode,
"0") == 0)
636 else if (strcmp (mode,
"1") == 0)
642 fprintf (stderr,
"Unknown non-stop mode requested: %s\n",
648 req_str = req ?
"non-stop" :
"all-stop";
651 fprintf (stderr,
"Setting %s mode failed\n", req_str);
659 fprintf (stderr,
"[%s mode enabled]\n", req_str);
665 if (
startswith (own_buf,
"QDisableRandomization:"))
667 char *packet = own_buf + strlen (
"QDisableRandomization:");
671 disable_randomization = setting;
675 if (disable_randomization)
676 fprintf (stderr,
"[address space randomization disabled]\n");
678 fprintf (stderr,
"[address space randomization enabled]\n");
691 char *mode = own_buf + strlen (
"QAgent:");
694 if (strcmp (mode,
"0") == 0)
696 else if (strcmp (mode,
"1") == 0)
701 sprintf (own_buf,
"E.Unknown QAgent value");
708 fprintf (stderr,
"[%s agent]\n", req ?
"Enable" :
"Disable");
737 if (desc->
xmltarget != NULL && strcmp (annex,
"target.xml") == 0)
751 for (i = 0; xml_builtin[i][0] != NULL; i++)
752 if (strcmp (annex, xml_builtin[i][0]) == 0)
755 if (xml_builtin[i][0] != NULL)
756 return xml_builtin[i][1];
766 monitor_output (
"The following monitor commands are supported:\n");
770 monitor_output (
" Enable h/w breakpoint/watchpoint debugging messages\n");
774 monitor_output (
" Add additional information to debugging messages\n");
803 memaddr, myaddr, len, &nbytes))
820 return res == 0 ? len : -1;
852 gdb_byte *pattern,
unsigned pattern_len,
854 unsigned chunk_size,
unsigned search_buf_size,
862 warning (
"Unable to access %ld bytes of target "
863 "memory at 0x%lx, halting search.",
864 (
long) search_buf_size, (
long) start_addr);
874 while (search_space_len >= pattern_len)
877 unsigned nr_search_bytes = (search_space_len < search_buf_size
881 found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
883 if (found_ptr != NULL)
885 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
886 *found_addrp = found_addr;
893 if (search_space_len >= chunk_size)
894 search_space_len -= chunk_size;
896 search_space_len = 0;
898 if (search_space_len >= pattern_len)
900 unsigned keep_len = search_buf_size - chunk_size;
901 CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
906 memcpy (search_buf, search_buf + chunk_size, keep_len);
908 nr_to_read = (search_space_len - keep_len < chunk_size
909 ? search_space_len - keep_len
913 nr_to_read) != search_buf_size)
915 warning (
"Unable to access %ld bytes of target memory "
916 "at 0x%lx, halting search.",
917 (
long) nr_to_read, (
long) read_addr);
921 start_addr += chunk_size;
938 unsigned int pattern_len;
940 #define SEARCH_CHUNK_SIZE 16000
944 unsigned search_buf_size;
947 int cmd_name_len =
sizeof (
"qSearch:memory:") - 1;
949 pattern = malloc (packet_len);
952 error (
"Unable to allocate memory to perform the search");
953 strcpy (own_buf,
"E00");
957 packet_len - cmd_name_len,
958 &start_addr, &search_space_len,
959 pattern, &pattern_len) < 0)
962 error (
"Error in parsing qSearch:memory packet");
963 strcpy (own_buf,
"E00");
967 search_buf_size = chunk_size + pattern_len - 1;
970 if (search_space_len < search_buf_size)
971 search_buf_size = search_space_len;
973 search_buf = malloc (search_buf_size);
974 if (search_buf == NULL)
977 error (
"Unable to allocate memory to perform the search");
978 strcpy (own_buf,
"E00");
983 pattern, pattern_len,
984 search_buf, chunk_size, search_buf_size,
988 sprintf (own_buf,
"1,%lx", (
long) found_addr);
990 strcpy (own_buf,
"0");
992 strcpy (own_buf,
"E00");
998 #define require_running(BUF) \
999 if (!target_running ()) \
1033 while (isspace (*arg))
1036 options = delim_string_to_char_ptr_vec (arg,
',');
1040 if (strcmp (option,
"all") == 0)
1046 else if (strcmp (option,
"none") == 0)
1052 else if (strcmp (option,
"timestamp") == 0)
1058 else if (*option ==
'\0')
1065 char *msg =
xstrprintf (
"Unknown debug-format argument: \"%s\"\n",
1082 if (strcmp (mon,
"set debug 1") == 0)
1087 else if (strcmp (mon,
"set debug 0") == 0)
1092 else if (strcmp (mon,
"set debug-hw-points 1") == 0)
1097 else if (strcmp (mon,
"set debug-hw-points 0") == 0)
1102 else if (strcmp (mon,
"set remote-debug 1") == 0)
1107 else if (strcmp (mon,
"set remote-debug 0") == 0)
1112 else if (
startswith (mon,
"set debug-format "))
1118 if (error_msg != NULL)
1126 else if (strcmp (mon,
"help") == 0)
1128 else if (strcmp (mon,
"exit") == 0)
1192 if (const_annex[0] ==
'\0')
1201 char *annex =
alloca (strlen (const_annex) + 1);
1203 strcpy (annex, const_annex);
1206 if (annex[0] !=
'\0')
1217 total_len = strlen (file);
1219 if (offset > total_len)
1222 if (offset + len > total_len)
1223 len = total_len -
offset;
1225 memcpy (readbuf, file + offset, len);
1236 const char *document;
1239 if (writebuf != NULL)
1247 if (document == NULL)
1250 total_len = strlen (document);
1252 if (offset > total_len)
1255 if (offset + len > total_len)
1256 len = total_len -
offset;
1258 memcpy (readbuf, document + offset, len);
1270 unsigned int *total_len = arg;
1274 *total_len += 128 + 6 * strlen (dll->
name);
1288 strcpy (p,
" <library name=\"");
1294 strcpy (p,
"\"><segment address=\"");
1296 sprintf (p,
"0x%lx", (
long) dll->
base_addr);
1298 strcpy (p,
"\"/></library>\n");
1311 unsigned int total_len;
1314 if (writebuf != NULL)
1324 document = malloc (total_len);
1325 if (document == NULL)
1328 strcpy (document,
"<library-list version=\"1.0\">\n");
1329 p = document + strlen (document);
1333 strcpy (p,
"</library-list>\n");
1335 total_len = strlen (document);
1337 if (offset > total_len)
1343 if (offset + len > total_len)
1344 len = total_len -
offset;
1346 memcpy (readbuf, document + offset, len);
1358 if (writebuf != NULL)
1421 if (writebuf != NULL)
1428 readbuf, len, &nbytes))
1450 sprintf (core_s,
"%d", core);
1481 static char *result = 0;
1482 static unsigned int result_length = 0;
1484 if (writebuf != NULL)
1503 result_length = strlen (result);
1507 if (offset >= result_length)
1516 if (len > result_length - offset)
1517 len = result_length -
offset;
1519 memcpy (readbuf, result + offset, len);
1531 static char *result = 0;
1532 static unsigned int result_length = 0;
1534 if (writebuf != NULL)
1554 result_length = strlen (result);
1558 if (offset >= result_length)
1567 if (len > result_length - offset)
1568 len = result_length -
offset;
1570 memcpy (readbuf, result + offset, len);
1596 static struct buffer cache;
1609 strcpy (own_buf,
"E.Must select a single thread.");
1616 strcpy (own_buf,
"E.No such thread.");
1620 if (thread->
btrace == NULL)
1622 strcpy (own_buf,
"E.Btrace not enabled.");
1626 if (strcmp (annex,
"all") == 0)
1628 else if (strcmp (annex,
"new") == 0)
1630 else if (strcmp (annex,
"delta") == 0)
1634 strcpy (own_buf,
"E.Bad annex.");
1658 memcpy (readbuf, cache.
buffer + offset, len);
1670 static struct buffer cache;
1683 strcpy (own_buf,
"E.Must select a single thread.");
1690 strcpy (own_buf,
"E.No such thread.");
1694 if (thread->
btrace == NULL)
1696 strcpy (own_buf,
"E.Btrace not enabled.");
1720 memcpy (readbuf, cache.
buffer + offset, len);
1725 static const struct qxfer qxfer_packets[] =
1756 if (
decode_xfer (own_buf + 6, &
object, &rw, &annex, &offset) < 0)
1766 const struct qxfer *q = &qxfer_packets[i];
1768 if (strcmp (
object, q->
object) == 0)
1770 if (strcmp (rw,
"read") == 0)
1772 unsigned char *data;
1788 data = malloc (len + 1);
1794 n = (*q->
xfer) (annex, data, NULL, ofs, len + 1);
1814 else if (strcmp (rw,
"write") == 0)
1819 unsigned char *data;
1821 strcpy (own_buf,
"E00");
1822 data = malloc (packet_len - (offset - own_buf));
1829 &ofs, &len, data) < 0)
1836 n = (*q->
xfer) (annex, NULL, data, ofs, len);
1849 sprintf (own_buf,
"%x", n);
1864 static unsigned int crc32_table[256] =
1872 static unsigned long long
1875 if (!crc32_table[1])
1881 for (i = 0; i < 256; i++)
1883 for (c = i << 24, j = 8; j > 0; --j)
1884 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
1891 unsigned char byte = 0;
1895 return (
unsigned long long) -1;
1897 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ byte) & 255];
1900 return (
unsigned long long) crc;
1908 int btrace_supported = 0;
1912 strcat (buf,
";Qbtrace:bts+");
1913 strcat (buf,
";Qbtrace-conf:bts:size+");
1915 btrace_supported = 1;
1920 strcat (buf,
";Qbtrace:pt+");
1921 strcat (buf,
";Qbtrace-conf:pt:size+");
1923 btrace_supported = 1;
1926 if (!btrace_supported)
1929 strcat (buf,
";Qbtrace:off+");
1930 strcat (buf,
";qXfer:btrace:read+");
1931 strcat (buf,
";qXfer:btrace-conf:read+");
1942 if (strcmp (
"qC", own_buf) == 0 && !disable_packet_qC)
1956 sprintf (own_buf,
"QC");
1962 if (strcmp (
"qSymbol::", own_buf) == 0)
1982 strcpy (own_buf,
"OK");
1986 if (!disable_packet_qfThreadInfo)
1988 if (strcmp (
"qfThreadInfo", own_buf) == 0)
1998 thread_ptr = thread_ptr->
next;
2002 if (strcmp (
"qsThreadInfo", own_buf) == 0)
2007 if (thread_ptr != NULL)
2012 thread_ptr = thread_ptr->
next;
2017 sprintf (own_buf,
"l");
2024 && strcmp (
"qOffsets", own_buf) == 0)
2030 sprintf (own_buf,
"Text=%lX;Data=%lX;Bss=%lX",
2031 (
long)text, (long)data, (
long)data);
2040 && (own_buf[10] ==
':' || own_buf[10] ==
'\0'))
2042 char *p = &own_buf[10];
2043 int gdb_supports_qRelocInsn = 0;
2053 char **qsupported = NULL;
2059 for (p = strtok (p + 1,
";");
2061 p = strtok (NULL,
";"))
2064 qsupported =
xrealloc (qsupported, count *
sizeof (
char *));
2065 qsupported[count - 1] =
xstrdup (p);
2068 for (i = 0; i < count; i++)
2071 if (strcmp (p,
"multiprocess+") == 0)
2078 else if (strcmp (p,
"qRelocInsn+") == 0)
2081 gdb_supports_qRelocInsn = 1;
2083 else if (strcmp (p,
"swbreak+") == 0)
2089 swbreak_feature = 1;
2091 else if (strcmp (p,
"hwbreak+") == 0)
2096 hwbreak_feature = 1;
2098 else if (strcmp (p,
"fork-events+") == 0)
2102 report_fork_events = 1;
2104 else if (strcmp (p,
"vfork-events+") == 0)
2108 report_vfork_events = 1;
2120 "PacketSize=%x;QPassSignals+;QProgramSignals+",
2124 strcat (own_buf,
";qXfer:libraries-svr4:read+"
2125 ";augmented-libraries-svr4-read+");
2130 strcat (own_buf,
";qXfer:libraries:read+");
2134 strcat (own_buf,
";qXfer:auxv:read+");
2137 strcat (own_buf,
";qXfer:spu:read+;qXfer:spu:write+");
2140 strcat (own_buf,
";qXfer:siginfo:read+;qXfer:siginfo:write+");
2143 strcat (own_buf,
";qXfer:fdpic:read+");
2149 strcat (own_buf,
";qXfer:features:read+");
2152 strcat (own_buf,
";QStartNoAckMode+");
2155 strcat (own_buf,
";qXfer:osdata:read+");
2158 strcat (own_buf,
";multiprocess+");
2161 strcat (own_buf,
";fork-events+");
2164 strcat (own_buf,
";vfork-events+");
2167 strcat (own_buf,
";QNonStop+");
2170 strcat (own_buf,
";QDisableRandomization+");
2172 strcat (own_buf,
";qXfer:threads:read+");
2176 strcat (own_buf,
";ConditionalTracepoints+");
2177 strcat (own_buf,
";TraceStateVariables+");
2178 strcat (own_buf,
";TracepointSource+");
2179 strcat (own_buf,
";DisconnectedTracing+");
2181 strcat (own_buf,
";FastTracepoints+");
2182 strcat (own_buf,
";StaticTracepoints+");
2183 strcat (own_buf,
";InstallInTrace+");
2184 strcat (own_buf,
";qXfer:statictrace:read+");
2185 strcat (own_buf,
";qXfer:traceframe-info:read+");
2186 strcat (own_buf,
";EnableDisableTracepoints+");
2187 strcat (own_buf,
";QTBuffer:size+");
2188 strcat (own_buf,
";tracenz+");
2193 strcat (own_buf,
";ConditionalBreakpoints+");
2194 strcat (own_buf,
";BreakpointCommands+");
2197 strcat (own_buf,
";QAgent+");
2202 strcat (own_buf,
";swbreak+");
2205 strcat (own_buf,
";hwbreak+");
2208 strcat (own_buf,
";qXfer:exec-file:read+");
2221 char *p = own_buf + 12;
2228 for (i = 0; i < 3; i++)
2236 p2 = strchr (p,
',');
2255 if (p != NULL || i < 3)
2270 strcpy (own_buf,
paddress(address));
2309 int len = strlen (own_buf + 6);
2324 mon[len / 2] =
'\0';
2344 if (strcmp (own_buf,
"qAttached") == 0
2349 if (own_buf[
sizeof (
"qAttached") - 1])
2351 int pid = strtoul (own_buf +
sizeof (
"qAttached:") - 1, NULL, 16);
2361 if (process == NULL)
2367 strcpy (own_buf, process->
attached ?
"1" :
"0");
2377 unsigned long long crc;
2381 if (*comma++ !=
',')
2386 len = strtoul (comma, NULL, 16);
2387 crc =
crc32 (base, len, 0xffffffff);
2389 if (crc == (
unsigned long long) -1)
2394 sprintf (own_buf,
"C%lx", (
unsigned long) crc);
2398 if (
handle_qxfer (own_buf, packet_len, new_packet_len_p))
2439 for (i = 0; i < num_actions; i++)
2451 if ((*callback) (action, thread))
2494 p = strchr (p,
';');
2497 resume_info = malloc (n *
sizeof (resume_info[0]));
2498 if (resume_info == NULL)
2506 memset (&resume_info[i], 0,
sizeof resume_info[i]);
2508 if (p[0] ==
's' || p[0] ==
'S')
2509 resume_info[i].
kind = resume_step;
2510 else if (p[0] ==
'r')
2511 resume_info[i].
kind = resume_step;
2512 else if (p[0] ==
'c' || p[0] ==
'C')
2513 resume_info[i].
kind = resume_continue;
2514 else if (p[0] ==
't')
2515 resume_info[i].
kind = resume_stop;
2519 if (p[0] ==
'S' || p[0] ==
'C')
2522 sig = strtol (p + 1, &q, 16);
2531 else if (p[0] ==
'r')
2552 default_action = resume_info[i];
2557 else if (p[0] ==
':')
2564 if (p[0] !=
';' && p[0] != 0)
2567 resume_info[i].
thread = ptid;
2574 resume_info[i] = default_action;
2618 if (
last_status.kind == TARGET_WAITKIND_NO_RESUMED)
2622 sprintf (own_buf,
"E.No unwaited-for children left.");
2629 &&
last_status.kind != TARGET_WAITKIND_NO_RESUMED)
2652 pid = strtol (own_buf + 8, NULL, 16);
2684 char *p, *next_p, **new_argv;
2688 for (p = own_buf + strlen (
"vRun;"); p && *p; p = strchr (p,
';'))
2694 new_argv = calloc (new_argc + 2,
sizeof (
char *));
2695 if (new_argv == NULL)
2702 for (p = own_buf + strlen (
"vRun;"); *p; p = next_p)
2704 next_p = strchr (p,
';');
2706 next_p = p + strlen (p);
2708 if (i == 0 && p == next_p)
2713 new_argv[i] =
xmalloc (1 + (next_p - p) / 2);
2715 new_argv[i][(next_p - p) / 2] =
'\0';
2724 if (new_argv[0] == NULL)
2729 if (program_argv == NULL)
2732 freeargv (new_argv);
2736 new_argv[0] = strdup (program_argv[0]);
2737 if (new_argv[0] == NULL)
2740 freeargv (new_argv);
2746 freeargv (program_argv);
2747 program_argv = new_argv;
2774 char *p = &own_buf[6];
2776 pid = strtol (p, NULL, 16);
2799 if (!disable_packet_vCont)
2810 strcpy (own_buf,
"vCont;c;C;s;S;t");
2813 own_buf = own_buf + strlen (own_buf);
2814 strcpy (own_buf,
";r");
2828 fprintf (stderr,
"Already debugging a process\n");
2840 fprintf (stderr,
"Already debugging a process\n");
2852 fprintf (stderr,
"No process to kill\n");
2877 int valid_cont_thread;
2884 if (step || sig || valid_cont_thread)
2888 resume_info[0].
kind = resume_step;
2890 resume_info[0].
kind = resume_continue;
2891 resume_info[0].
sig =
sig;
2895 if (!valid_cont_thread)
2898 resume_info[n].
kind = resume_continue;
2899 resume_info[n].
sig = 0;
2920 new_notif->
ptid = entry->
id;
2934 = target_waitstatus_to_string (&thread->
last_status);
2936 debug_printf (
"Reporting thread %s as already stopped with %s\n",
2940 xfree (status_string);
2965 if (thread->
last_status.kind == TARGET_WAITKIND_IGNORE)
2969 thread->
last_status.kind = TARGET_WAITKIND_STOPPED;
3011 if (thread->
last_status.kind != TARGET_WAITKIND_STOPPED
3019 && thread->
last_status.value.sig != GDB_SIGNAL_TRAP))
3099 general_thread = thread->
id;
3106 strcpy (own_buf,
"W00");
3113 printf (
"GNU gdbserver %s%s\n"
3114 "Copyright (C) 2015 Free Software Foundation, Inc.\n"
3115 "gdbserver is free software, covered by the "
3116 "GNU General Public License.\n"
3117 "This gdbserver was configured as \"%s\"\n",
3124 fprintf (stream,
"Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
3125 "\tgdbserver [OPTIONS] --attach COMM PID\n"
3126 "\tgdbserver [OPTIONS] --multi COMM\n"
3128 "COMM may either be a tty device (for serial debugging),\n"
3129 "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n"
3130 "stdin/stdout of gdbserver.\n"
3131 "PROG is the executable program. ARGS are arguments passed to inferior.\n"
3132 "PID is the process ID to attach to, when --attach is specified.\n"
3134 "Operating modes:\n"
3136 " --attach Attach to running process PID.\n"
3137 " --multi Start server without a specific program, and\n"
3138 " only quit when explicitly commanded.\n"
3139 " --once Exit after the first connection has closed.\n"
3140 " --help Print this message and then exit.\n"
3141 " --version Display version information and exit.\n"
3145 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n"
3146 " --disable-randomization\n"
3147 " Run PROG with address space randomization disabled.\n"
3148 " --no-disable-randomization\n"
3149 " Don't disable address space randomization when\n"
3154 " --debug Enable general debugging output.\n"
3155 " --debug-format=opt1[,opt2,...]\n"
3156 " Specify extra content in debugging output.\n"
3161 " --remote-debug Enable remote protocol debugging output.\n"
3162 " --disable-packet=opt1[,opt2,...]\n"
3163 " Disable support for RSP packets or features.\n"
3165 " vCont, Tthread, qC, qfThreadInfo and \n"
3166 " threads (disable all threading packets).\n"
3168 "For more information, consult the GDB manual (available as on-line \n"
3169 "info or a printed manual).\n");
3177 fprintf (stream,
"Disableable packets:\n"
3178 " vCont \tAll vCont packets\n"
3179 " qC \tQuerying the current thread\n"
3180 " qfThreadInfo\tThread listing\n"
3181 " Tthread \tPassing the thread specifier in the "
3182 "T stop reply packet\n"
3183 " threads \tAll of the above\n");
3187 #undef require_running
3188 #define require_running(BUF) \
3189 if (!target_running ()) \
3198 int pid = * (
int *) args;
3246 fprintf (stderr,
" %d", pid);
3261 fprintf (stderr,
" %d", pid);
3278 fprintf (stderr,
"Killing process(es):");
3280 fprintf (stderr,
"\n");
3284 fprintf (stderr,
"Detaching process(es):");
3286 fprintf (stderr,
"\n");
3311 fprintf (stderr,
"Detach or kill failed: %s\n", exception.message);
3320 static void ATTRIBUTE_NORETURN
3325 char *arg_end, *port;
3326 char **next_arg = &argv[1];
3327 volatile int multi_mode = 0;
3328 volatile int attach = 0;
3331 while (*next_arg != NULL && **next_arg ==
'-')
3333 if (strcmp (*next_arg,
"--version") == 0)
3338 else if (strcmp (*next_arg,
"--help") == 0)
3343 else if (strcmp (*next_arg,
"--attach") == 0)
3345 else if (strcmp (*next_arg,
"--multi") == 0)
3347 else if (strcmp (*next_arg,
"--wrapper") == 0)
3351 wrapper_argv = next_arg;
3352 while (*next_arg != NULL && strcmp (*next_arg,
"--") != 0)
3355 if (next_arg == wrapper_argv || *next_arg == NULL)
3364 else if (strcmp (*next_arg,
"--debug") == 0)
3366 else if (
startswith (*next_arg,
"--debug-format="))
3370 +
sizeof (
"--debug-format=") - 1, 0);
3372 if (error_msg != NULL)
3374 fprintf (stderr,
"%s", error_msg);
3378 else if (strcmp (*next_arg,
"--remote-debug") == 0)
3380 else if (strcmp (*next_arg,
"--disable-packet") == 0)
3385 else if (
startswith (*next_arg,
"--disable-packet="))
3387 char *packets, *tok;
3389 packets = *next_arg +=
sizeof (
"--disable-packet=") - 1;
3390 for (tok = strtok (packets,
",");
3392 tok = strtok (NULL,
","))
3394 if (strcmp (
"vCont", tok) == 0)
3395 disable_packet_vCont = 1;
3396 else if (strcmp (
"Tthread", tok) == 0)
3397 disable_packet_Tthread = 1;
3398 else if (strcmp (
"qC", tok) == 0)
3399 disable_packet_qC = 1;
3400 else if (strcmp (
"qfThreadInfo", tok) == 0)
3401 disable_packet_qfThreadInfo = 1;
3402 else if (strcmp (
"threads", tok) == 0)
3404 disable_packet_vCont = 1;
3405 disable_packet_Tthread = 1;
3406 disable_packet_qC = 1;
3407 disable_packet_qfThreadInfo = 1;
3411 fprintf (stderr,
"Don't know how to disable \"%s\".\n\n",
3418 else if (strcmp (*next_arg,
"-") == 0)
3425 else if (strcmp (*next_arg,
"--disable-randomization") == 0)
3426 disable_randomization = 1;
3427 else if (strcmp (*next_arg,
"--no-disable-randomization") == 0)
3428 disable_randomization = 0;
3429 else if (strcmp (*next_arg,
"--once") == 0)
3433 fprintf (stderr,
"Unknown argument: %s\n", *next_arg);
3443 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
3464 if (*next_arg != NULL && strcmp (*next_arg,
"--attach") == 0)
3471 && (*next_arg == NULL
3472 || (*next_arg)[0] ==
'\0'
3473 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
3475 || next_arg[1] != NULL))
3493 if (pid == 0 && *next_arg != NULL)
3497 n = argc - (next_arg - argv);
3498 program_argv =
xmalloc (
sizeof (
char *) * (n + 1));
3499 for (i = 0; i < n; i++)
3500 program_argv[i] =
xstrdup (next_arg[i]);
3501 program_argv[i] = NULL;
3513 error (
"Attaching not supported on this target");
3538 if (!was_running && !multi_mode)
3539 error (
"No program to debug");
3546 report_fork_events = 0;
3547 report_vfork_events = 0;
3551 swbreak_feature = 0;
3552 hwbreak_feature = 0;
3567 if (exit_requested || run_once)
3571 "Remote side has terminated connection. "
3572 "GDBserver will reopen the connection.\n");
3603 "Disconnected tracing disabled; "
3604 "stopping trace run.\n");
3611 if (response_needed)
3636 fprintf (stderr,
"%s\n", exception.message);
3637 fprintf (stderr,
"Exiting\n");
3653 while (**packet !=
'\0' && **packet !=
';')
3664 char *dataptr = *packet;
3668 if (*dataptr !=
';')
3675 if (*dataptr ==
';')
3678 if (*dataptr ==
'X')
3688 dataptr += strlen (
"cmds:");
3690 debug_printf (
"Found breakpoint commands %s.\n", dataptr);
3691 persist = (*dataptr ==
'1');
3698 fprintf (stderr,
"Unknown token %c, ignoring.\n",
3724 int new_packet_len = -1;
3728 static int have_ran = 0;
3735 response_needed = 0;
3736 packet_len =
getpkt (own_buf);
3737 if (packet_len <= 0)
3743 response_needed = 1;
3761 pid = strtol (&own_buf[i], NULL, 16);
3771 if (process == NULL)
3779 "Disconnected tracing in effect, "
3780 "leaving gdbserver attached to the process\n");
3784 "Persistent commands are present, "
3785 "leaving gdbserver attached to the process\n");
3805 resume_info.
kind = resume_continue;
3806 resume_info.
sig = 0;
3813 fprintf (stderr,
"Detaching from process %d\n", pid);
3822 if (extended_protocol)
3845 extended_protocol = 1;
3852 if (own_buf[1] ==
'c' || own_buf[1] ==
'g' || own_buf[1] ==
's')
3854 ptid_t gdb_id, thread_id;
3892 if (own_buf[1] ==
'g')
3909 general_thread = thread_id;
3912 else if (own_buf[1] ==
'c')
3913 cont_thread = thread_id;
3968 bin2hex (mem_buf, own_buf, res);
3981 &mem_addr, &len, &mem_buf) < 0
3989 hex2bin (own_buf + 1, &sig, 1);
3998 hex2bin (own_buf + 1, &sig, 1);
4022 char type = own_buf[1];
4024 const int insert = ch ==
'Z';
4025 char *p = &own_buf[3];
4028 len = strtol (p + 1, &dataptr, 16);
4061 response_needed = 0;
4067 fprintf (stderr,
"Killing all inferiors\n");
4072 if (extended_protocol)
4083 ptid_t gdb_id, thread_id;
4102 response_needed = 0;
4106 if (extended_protocol)
4111 fprintf (stderr,
"GDBserver restarting\n");
4114 if (program_argv != NULL)
4144 if (new_packet_len != -1)
4149 response_needed = 0;
4160 fprintf (stderr,
"GDBserver exiting\n");
4202 if (
last_status.kind == TARGET_WAITKIND_NO_RESUMED)
4206 else if (
last_status.kind != TARGET_WAITKIND_IGNORE)
4243 debug_printf (
"GDB not connected; forwarding event %d for"
4249 resume_info.
kind = resume_continue;
4254 debug_printf (
"GDB not connected; ignoring event %d for [%s]\n",
4261 =
xmalloc (
sizeof (
struct vstop_notif));
int handle_tracepoint_query(char *packet)
void handle_query(char *own_buf, int packet_len, int *new_packet_len_p)
struct inferior_list all_dlls
struct btrace_config_bts bts
int handle_serial_event(int err, gdb_client_data client_data)
struct thread_info * current_thread
int handle_target_event(int err, gdb_client_data client_data)
void start_event_loop(void)
void monitor_output(const char *msg)
#define target_supports_btrace(format)
static void detach_or_kill_for_exit_cleanup(void *ignore)
struct thread_info * find_thread_ptid(ptid_t ptid)
struct btrace_target_info * btrace
void for_each_inferior_with_data(struct inferior_list *list, void(*action)(struct inferior_list_entry *, void *), void *data)
#define target_core_of_thread(ptid)
void notice_open_fds(void)
void free_char_ptr_vec(VEC(char_ptr)*char_ptr_vec)
#define target_handle_new_gdb_connection()
int fetch_traceframe_registers(int tfnum, struct regcache *regcache, int regnum)
static int handle_pending_status(const struct thread_resume *resumption, struct thread_info *thread)
static int target_running(void)
int(* qxfer_osdata)(const char *annex, unsigned char *readbuf, unsigned const char *writebuf, CORE_ADDR offset, int len)
static struct btrace_config current_btrace_conf
static int extended_protocol
int(* get_tls_address)(struct thread_info *thread, CORE_ADDR offset, CORE_ADDR load_module, CORE_ADDR *address)
int ptid_equal(ptid_t ptid1, ptid_t ptid2)
struct regcache * new_register_cache(const struct target_desc *tdesc)
int putpkt_binary(char *buf, int cnt)
void set_desired_thread(int use_general)
#define target_supports_vfork_events()
static void handle_qxfer_threads_proper(struct buffer *buffer)
int decode_xfer_write(char *buf, int packet_len, CORE_ADDR *offset, unsigned int *len, unsigned char *data)
static const char * get_features_xml(const char *annex)
#define target_supports_range_stepping()
void notif_push(struct notif_server *np, struct notif_event *new_event)
static int visit_actioned_threads(struct inferior_list_entry *entry, void *datap)
static int find_status_pending_thread_callback(struct inferior_list_entry *entry, void *data)
static void clear_pending_status_callback(struct inferior_list_entry *entry)
int( visit_actioned_threads_callback_ftype)(const struct thread_resume *, struct thread_info *)
void notif_event_enque(struct notif_server *notif, struct notif_event *event)
void prepare_resume_reply(char *buf, ptid_t ptid, struct target_waitstatus *status)
void warning(const char *fmt,...)
static int handle_qxfer_features(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
static void handle_qxfer_threads_worker(struct inferior_list_entry *inf, void *arg)
static const char * handle_btrace_enable_bts(struct thread_info *thread)
static void gdbserver_version(void)
struct inferior_list_entry entry
int bin2hex(const gdb_byte *bin, char *hex, int count)
void enable_async_io(void)
static int handle_qxfer(char *own_buf, int packet_len, int *new_packet_len_p)
static int handle_qxfer_libraries_svr4(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
#define QUEUE_is_empty(TYPE, Q)
static void print_started_pid(struct inferior_list_entry *entry)
void buffer_free(struct buffer *buffer)
static void handle_status(char *own_buf)
#define target_supports_disable_randomization()
#define target_supports_stopped_by_sw_breakpoint()
void initialize_tracepoint(void)
int(* read_loadmap)(const char *annex, CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
struct process_info * find_process_pid(int pid)
struct target_waitstatus status
void initialize_async_io(void)
char * paddress(CORE_ADDR addr)
static int handle_qxfer_libraries(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
void for_each_inferior(struct inferior_list *list, void(*action)(struct inferior_list_entry *))
#define mythread_alive(pid)
int(* get_tib_address)(ptid_t ptid, CORE_ADDR *address)
static void process_point_options(struct breakpoint *bp, char **packet)
void handle_v_requests(char *own_buf, int packet_len, int *new_packet_len)
#define QUEUE_remove_elem(TYPE, Q, ITER)
#define create_inferior(program, args)
int remote_escape_output(const gdb_byte *buffer, int len_units, int unit_size, gdb_byte *out_buf, int *out_len_units, int out_maxlen_bytes)
int(* qxfer_siginfo)(const char *annex, unsigned char *readbuf, unsigned const char *writebuf, CORE_ADDR offset, int len)
int handle_notif_ack(char *own_buf, int packet_len)
char * write_ptid(char *buf, ptid_t ptid)
#define require_running(BUF)
static int remove_all_on_match_pid(QUEUE(notif_event_p)*q, QUEUE_ITER(notif_event_p)*iter, struct notif_event *event, void *data)
int have_attached_inferiors_p(void)
#define target_supports_agent()
struct target_ops * the_target
int delete_gdb_breakpoint(char z_type, CORE_ADDR addr, int size)
char * xml_escape_text(const char *text)
CORE_ADDR step_range_start
#define target_supports_fork_events()
static int decode_xfer_read(char *buf, CORE_ADDR *ofs, unsigned int *len)
#define mourn_inferior(PROC)
static void myresume(char *own_buf, int step, int sig)
void disable_async_io(void)
void hostio_handle_new_gdb_connection(void)
void initialize_event_loop(void)
enum resume_kind last_resume_kind
struct inferior_list_entry entry
char * xstrdup(const char *s)
static void detach_or_kill_inferior_callback(struct inferior_list_entry *entry)
ptid_t read_ptid(char *buf, char **obuf)
void monitor_show_help(void)
#define target_supports_conditional_breakpoints()
void clear_breakpoint_conditions_and_commands(struct breakpoint *bp)
#define STDIO_CONNECTION_NAME
static void detach_or_kill_for_exit(void)
void decode_address(CORE_ADDR *addrp, const char *start, int len)
#define join_inferior(pid)
#define VEC_iterate(T, V, I, P)
static void gdb_wants_all_threads_stopped(void)
int(* read_offsets)(CORE_ADDR *text, CORE_ADDR *data)
static void set_pending_status_callback(struct inferior_list_entry *entry)
int remote_connection_is_stdio(void)
#define CATCH(EXCEPTION, MASK)
DEFINE_QUEUE_P(notif_event_p)
int(* thread_stopped)(struct thread_info *thread)
int disable_randomization
void buffer_xml_printf(struct buffer *buffer, const char *format,...)
static int handle_qxfer_exec_file(const char *const_annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
int program_signals[GDB_SIGNAL_LAST]
const char * decode_address_to_semicolon(CORE_ADDR *addrp, const char *start)
void remote_open(char *name)
int in_readonly_region(CORE_ADDR addr, ULONGEST length)
static int gdb_read_memory(CORE_ADDR memaddr, unsigned char *myaddr, int len)
#define detach_inferior(pid)
static char ** wrapper_argv
#define target_supports_non_stop()
int read_inferior_memory(CORE_ADDR memaddr, unsigned char *myaddr, int len)
int handle_v_kill(char *own_buf)
#define gdb_assert_not_reached(message)
int(* handle_monitor_command)(char *)
static unsigned long long crc32(CORE_ADDR base, int len, unsigned int crc)
ptid_t pid_to_ptid(int pid)
static void discard_queued_stop_replies(int pid)
static int response_needed
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
static int handle_qxfer_btrace(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
int handle_tracepoint_general_set(char *packet)
#define target_supports_fast_tracepoints()
ptid_t thread_to_gdb_id(struct thread_info *thread)
int gdb_signal_to_host(enum gdb_signal)
void decode_m_packet(char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
static void handle_general_set(char *own_buf)
int disable_packet_Tthread
#define done_accessing_memory()
void tracepoint_look_up_symbols(void)
int decode_search_memory_packet(const char *buf, int packet_len, CORE_ADDR *start_addrp, CORE_ADDR *search_space_lenp, gdb_byte *pattern, unsigned int *pattern_lenp)
int traceframe_read_info(int tfnum, struct buffer *buffer)
static int attach_inferior(int pid)
static void supported_btrace_packets(char *buf)
static char * parse_debug_format_options(const char *arg, int is_monitor)
int gdb_signal_to_host_p(enum gdb_signal signo)
static void accumulate_file_name_length(struct inferior_list_entry *inf, void *arg)
static int startswith(const char *string, const char *pattern)
static unsigned char * mem_buf
static void emit_dll_description(struct inferior_list_entry *inf, void *arg)
#define target_enable_btrace(ptid, conf)
static int gdb_write_memory(CORE_ADDR memaddr, const unsigned char *myaddr, int len)
#define target_read_btrace(tinfo, buffer, type)
char * xstrprintf(const char *format,...)
struct process_info * current_process(void)
char * unpack_varlen_hex(char *buff, ULONGEST *result)
static int handle_v_run(char *own_buf)
#define buffer_grow_str(BUFFER, STRING)
struct inferior_list all_threads
static void gdbserver_show_disableable(FILE *stream)
int handle_v_attach(char *own_buf)
static int handle_btrace_conf_general_set(char *own_buf)
#define prepare_to_access_memory()
int handle_vFile(char *own_buf, int packet_len, int *new_packet_len)
EXPORTED_CONST char *const xml_builtin[][2]
static void queue_stop_reply(ptid_t ptid, struct target_waitstatus *status)
struct inferior_list all_processes
int kill_inferior(int pid)
static void vstop_notif_reply(struct notif_event *event, char *own_buf)
static struct target_waitstatus last_status
int disable_packet_qfThreadInfo
ptid_t mywait(ptid_t ptid, struct target_waitstatus *ourstatus, int options, int connected_wait)
void(* look_up_symbols)(void)
struct thread_info * get_first_thread(void)
ptid_t gdb_id_to_thread_id(ptid_t gdb_id)
struct inferior_list_entry * find_inferior_id(struct inferior_list *list, ptid_t id)
#define stabilize_threads()
int write_inferior_memory(CORE_ADDR memaddr, const unsigned char *myaddr, int len)
int ptid_get_pid(ptid_t ptid)
static int handle_qxfer_auxv(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
struct btrace_config_pt pt
PTR xrealloc(PTR ptr, size_t size)
static int first_thread_of(struct inferior_list_entry *entry, void *args)
int(* qxfer_spu)(const char *annex, unsigned char *readbuf, unsigned const char *writebuf, CORE_ADDR offset, int len)
void decode_M_packet(char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr, unsigned char **to_p)
#define buffer_grow_str0(BUFFER, STRING)
int(* qxfer_libraries_svr4)(const char *annex, unsigned char *readbuf, unsigned const char *writebuf, CORE_ADDR offset, int len)
void handle_v_cont(char *own_buf)
static void handle_search_memory(char *own_buf, int packet_len)
struct breakpoint * set_gdb_breakpoint(char z_type, CORE_ADDR addr, int size, int *err)
void buffer_init(struct buffer *buffer)
static int write_qxfer_response(char *buf, const void *data, int len, int is_more)
#define pause_all(freeze)
#define QUEUE_iterate(TYPE, Q, OPERATE, PARAM)
const struct target_desc * current_target_desc(void)
static void print_attached_pid(struct inferior_list_entry *entry)
static void gdb_wants_thread_stopped(struct inferior_list_entry *entry)
static int process_serial_event(void)
static void resume(struct thread_resume *actions, size_t n)
static void skip_to_semicolon(char **packet)
int main(int argc, char *argv[])
int(* read_auxv)(CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
static int handle_btrace_general_set(char *own_buf)
int(* read_btrace)(struct btrace_target_info *, struct buffer *, int type)
const char * target_pid_to_str(ptid_t ptid)
void remote_prepare(char *name)
static int handle_qxfer_spu(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
struct inferior_list_entry * next
void registers_to_string(struct regcache *regcache, char *buf)
static void handle_monitor_command(char *mon, char *own_buf)
static int decode_xfer(char *buf, char **object, char **rw, char **annex, char **offset)
void(* resume)(struct thread_resume *resume_info, size_t n)
static const struct qxfer qxfer_packets[]
static int handle_qxfer_btrace_conf(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
struct regcache * get_thread_regcache(struct thread_info *thread, int fetch)
struct target_waitstatus last_status
int have_started_inferiors_p(void)
IP_AGENT_EXPORT_VAR int tracing
static int queue_stop_reply_callback(struct inferior_list_entry *entry, void *arg)
static const char * handle_btrace_disable(struct thread_info *thread)
static int handle_qxfer_traceframe_info(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
static int handle_search_memory_1(CORE_ADDR start_addr, CORE_ADDR search_space_len, gdb_byte *pattern, unsigned pattern_len, gdb_byte *search_buf, unsigned chunk_size, unsigned search_buf_size, CORE_ADDR *found_addrp)
static int handle_qxfer_osdata(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
struct inferior_list_entry * get_first_inferior(struct inferior_list *list)
void free_register_cache(struct regcache *regcache)
int(* xfer)(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
#define thread_stopped(thread)
static char ** program_argv
unsigned long long ULONGEST
int any_persistent_commands()
#define target_read_btrace_conf(tinfo, buffer)
void throw_quit(const char *fmt,...)
int add_breakpoint_commands(struct breakpoint *bp, char **command, int persist)
#define target_supports_multi_process()
long ptid_get_lwp(ptid_t ptid)
static int handle_qxfer_threads(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
int hex2bin(const char *hex, gdb_byte *bin, int count)
enum btrace_format format
void initialize_low(void)
static const char * handle_btrace_enable_pt(struct thread_info *thread)
void debug_printf(const char *fmt,...)
static int handle_qxfer_fdpic(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
static void kill_inferior_callback(struct inferior_list_entry *entry)
int transport_is_reliable
void notif_write_event(struct notif_server *notif, char *own_buf)
int traceframe_read_sdata(int tfnum, ULONGEST offset, unsigned char *buf, ULONGEST length, ULONGEST *nbytes)
static int handle_qxfer_siginfo(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
visit_actioned_threads_callback_ftype * callback
#define SEARCH_CHUNK_SIZE
static void ATTRIBUTE_NORETURN captured_main(int argc, char *argv[])
int add_breakpoint_condition(struct breakpoint *bp, char **condition)
char * buffer_finish(struct buffer *buffer)
static int handle_qxfer_statictrace(const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
void validate_breakpoints(void)
static void gdbserver_usage(FILE *stream)
void mark_breakpoints_out(struct process_info *proc)
static int start_inferior(char **argv)
int decode_X_packet(char *from, int packet_len, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr, unsigned char **to_p)
#define target_supports_stopped_by_hw_breakpoint()
void error(const char *fmt,...)
char *(* pid_to_exec_file)(int pid)
void registers_from_string(struct regcache *regcache, char *buf)
int traceframe_read_mem(int tfnum, CORE_ADDR addr, unsigned char *buf, ULONGEST length, ULONGEST *nbytes)
const struct thread_resume * actions
#define target_supports_tracepoints()
static void gdb_reattached_process(struct inferior_list_entry *entry)
int pass_signals[GDB_SIGNAL_LAST]
int(* read_btrace_conf)(const struct btrace_target_info *, struct buffer *)
void initialize_notif(void)
void write_enn(char *buf)
int start_non_stop(int nonstop)
struct inferior_list_entry * find_inferior(struct inferior_list *list, int(*func)(struct inferior_list_entry *, void *), void *arg)
static int exit_requested
#define target_disable_btrace(tinfo)
#define target_process_qsupported(query)