OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [gdbserver/] [server.c] - Blame information for rev 841

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* Main code for remote server for GDB.
2
   Copyright (C) 1989, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003,
3
   2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
4
 
5
   This file is part of GDB.
6
 
7
   This program is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
11
 
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
16
 
17
   You should have received a copy of the GNU General Public License
18
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
 
20
#include "server.h"
21
 
22
#if HAVE_UNISTD_H
23
#include <unistd.h>
24
#endif
25
#if HAVE_SIGNAL_H
26
#include <signal.h>
27
#endif
28
#if HAVE_SYS_WAIT_H
29
#include <sys/wait.h>
30
#endif
31
#if HAVE_MALLOC_H
32
#include <malloc.h>
33
#endif
34
 
35
ptid_t cont_thread;
36
ptid_t general_thread;
37
ptid_t step_thread;
38
 
39
int server_waiting;
40
 
41
static int extended_protocol;
42
static int response_needed;
43
static int exit_requested;
44
 
45
int multi_process;
46
int non_stop;
47
 
48
static char **program_argv, **wrapper_argv;
49
 
50
/* Enable miscellaneous debugging output.  The name is historical - it
51
   was originally used to debug LinuxThreads support.  */
52
int debug_threads;
53
 
54
/* Enable debugging of h/w breakpoint/watchpoint support.  */
55
int debug_hw_points;
56
 
57
int pass_signals[TARGET_SIGNAL_LAST];
58
 
59
jmp_buf toplevel;
60
 
61
const char *gdbserver_xmltarget;
62
 
63
/* The PID of the originally created or attached inferior.  Used to
64
   send signals to the process when GDB sends us an asynchronous interrupt
65
   (user hitting Control-C in the client), and to wait for the child to exit
66
   when no longer debugging it.  */
67
 
68
unsigned long signal_pid;
69
 
70
#ifdef SIGTTOU
71
/* A file descriptor for the controlling terminal.  */
72
int terminal_fd;
73
 
74
/* TERMINAL_FD's original foreground group.  */
75
pid_t old_foreground_pgrp;
76
 
77
/* Hand back terminal ownership to the original foreground group.  */
78
 
79
static void
80
restore_old_foreground_pgrp (void)
81
{
82
  tcsetpgrp (terminal_fd, old_foreground_pgrp);
83
}
84
#endif
85
 
86
/* Set if you want to disable optional thread related packets support
87
   in gdbserver, for the sake of testing GDB against stubs that don't
88
   support them.  */
89
int disable_packet_vCont;
90
int disable_packet_Tthread;
91
int disable_packet_qC;
92
int disable_packet_qfThreadInfo;
93
 
94
/* Last status reported to GDB.  */
95
static struct target_waitstatus last_status;
96
static ptid_t last_ptid;
97
 
98
static char *own_buf;
99
static unsigned char *mem_buf;
100
 
101
/* Structure holding information relative to a single stop reply.  We
102
   keep a queue of these (really a singly-linked list) to push to GDB
103
   in non-stop mode.  */
104
struct vstop_notif
105
{
106
  /* Pointer to next in list.  */
107
  struct vstop_notif *next;
108
 
109
  /* Thread or process that got the event.  */
110
  ptid_t ptid;
111
 
112
  /* Event info.  */
113
  struct target_waitstatus status;
114
};
115
 
116
/* The pending stop replies list head.  */
117
static struct vstop_notif *notif_queue = NULL;
118
 
119
/* Put a stop reply to the stop reply queue.  */
120
 
121
static void
122
queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
123
{
124
  struct vstop_notif *new_notif;
125
 
126
  new_notif = malloc (sizeof (*new_notif));
127
  new_notif->next = NULL;
128
  new_notif->ptid = ptid;
129
  new_notif->status = *status;
130
 
131
  if (notif_queue)
132
    {
133
      struct vstop_notif *tail;
134
      for (tail = notif_queue;
135
           tail && tail->next;
136
           tail = tail->next)
137
        ;
138
      tail->next = new_notif;
139
    }
140
  else
141
    notif_queue = new_notif;
142
 
143
  if (remote_debug)
144
    {
145
      int i = 0;
146
      struct vstop_notif *n;
147
 
148
      for (n = notif_queue; n; n = n->next)
149
        i++;
150
 
151
      fprintf (stderr, "pending stop replies: %d\n", i);
152
    }
153
}
154
 
155
/* Place an event in the stop reply queue, and push a notification if
156
   we aren't sending one yet.  */
157
 
158
void
159
push_event (ptid_t ptid, struct target_waitstatus *status)
160
{
161
  queue_stop_reply (ptid, status);
162
 
163
  /* If this is the first stop reply in the queue, then inform GDB
164
     about it, by sending a Stop notification.  */
165
  if (notif_queue->next == NULL)
166
    {
167
      char *p = own_buf;
168
      strcpy (p, "Stop:");
169
      p += strlen (p);
170
      prepare_resume_reply (p,
171
                            notif_queue->ptid, &notif_queue->status);
172
      putpkt_notif (own_buf);
173
    }
174
}
175
 
176
/* Get rid of the currently pending stop replies for PID.  If PID is
177
   -1, then apply to all processes.  */
178
 
179
static void
180
discard_queued_stop_replies (int pid)
181
{
182
  struct vstop_notif *prev = NULL, *reply, *next;
183
 
184
  for (reply = notif_queue; reply; reply = next)
185
    {
186
      next = reply->next;
187
 
188
      if (pid == -1
189
          || ptid_get_pid (reply->ptid) == pid)
190
        {
191
          if (reply == notif_queue)
192
            notif_queue = next;
193
          else
194
            prev->next = reply->next;
195
 
196
          free (reply);
197
        }
198
      else
199
        prev = reply;
200
    }
201
}
202
 
203
/* If there are more stop replies to push, push one now.  */
204
 
205
static void
206
send_next_stop_reply (char *own_buf)
207
{
208
  if (notif_queue)
209
    prepare_resume_reply (own_buf,
210
                          notif_queue->ptid,
211
                          &notif_queue->status);
212
  else
213
    write_ok (own_buf);
214
}
215
 
216
static int
217
target_running (void)
218
{
219
  return all_threads.head != NULL;
220
}
221
 
222
static int
223
start_inferior (char **argv)
224
{
225
  char **new_argv = argv;
226
 
227
  if (wrapper_argv != NULL)
228
    {
229
      int i, count = 1;
230
 
231
      for (i = 0; wrapper_argv[i] != NULL; i++)
232
        count++;
233
      for (i = 0; argv[i] != NULL; i++)
234
        count++;
235
      new_argv = alloca (sizeof (char *) * count);
236
      count = 0;
237
      for (i = 0; wrapper_argv[i] != NULL; i++)
238
        new_argv[count++] = wrapper_argv[i];
239
      for (i = 0; argv[i] != NULL; i++)
240
        new_argv[count++] = argv[i];
241
      new_argv[count] = NULL;
242
    }
243
 
244
  if (debug_threads)
245
    {
246
      int i;
247
      for (i = 0; new_argv[i]; ++i)
248
        fprintf (stderr, "new_argv[%d] = \"%s\"\n", i, new_argv[i]);
249
      fflush (stderr);
250
    }
251
 
252
#ifdef SIGTTOU
253
  signal (SIGTTOU, SIG_DFL);
254
  signal (SIGTTIN, SIG_DFL);
255
#endif
256
 
257
  signal_pid = create_inferior (new_argv[0], new_argv);
258
 
259
  /* FIXME: we don't actually know at this point that the create
260
     actually succeeded.  We won't know that until we wait.  */
261
  fprintf (stderr, "Process %s created; pid = %ld\n", argv[0],
262
           signal_pid);
263
  fflush (stderr);
264
 
265
#ifdef SIGTTOU
266
  signal (SIGTTOU, SIG_IGN);
267
  signal (SIGTTIN, SIG_IGN);
268
  terminal_fd = fileno (stderr);
269
  old_foreground_pgrp = tcgetpgrp (terminal_fd);
270
  tcsetpgrp (terminal_fd, signal_pid);
271
  atexit (restore_old_foreground_pgrp);
272
#endif
273
 
274
  if (wrapper_argv != NULL)
275
    {
276
      struct thread_resume resume_info;
277
      ptid_t ptid;
278
 
279
      resume_info.thread = pid_to_ptid (signal_pid);
280
      resume_info.kind = resume_continue;
281
      resume_info.sig = 0;
282
 
283
      ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
284
 
285
      if (last_status.kind != TARGET_WAITKIND_STOPPED)
286
        return signal_pid;
287
 
288
      do
289
        {
290
          (*the_target->resume) (&resume_info, 1);
291
 
292
          mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
293
          if (last_status.kind != TARGET_WAITKIND_STOPPED)
294
            return signal_pid;
295
        }
296
      while (last_status.value.sig != TARGET_SIGNAL_TRAP);
297
 
298
      return signal_pid;
299
    }
300
 
301
  /* Wait till we are at 1st instruction in program, return new pid
302
     (assuming success).  */
303
  last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
304
 
305
  return signal_pid;
306
}
307
 
308
static int
309
attach_inferior (int pid)
310
{
311
  /* myattach should return -1 if attaching is unsupported,
312
 
313
 
314
  if (myattach (pid) != 0)
315
    return -1;
316
 
317
  fprintf (stderr, "Attached; pid = %d\n", pid);
318
  fflush (stderr);
319
 
320
  /* FIXME - It may be that we should get the SIGNAL_PID from the
321
     attach function, so that it can be the main thread instead of
322
     whichever we were told to attach to.  */
323
  signal_pid = pid;
324
 
325
  if (!non_stop)
326
    {
327
      last_ptid = mywait (pid_to_ptid (pid), &last_status, 0, 0);
328
 
329
      /* GDB knows to ignore the first SIGSTOP after attaching to a running
330
         process using the "attach" command, but this is different; it's
331
         just using "target remote".  Pretend it's just starting up.  */
332
      if (last_status.kind == TARGET_WAITKIND_STOPPED
333
          && last_status.value.sig == TARGET_SIGNAL_STOP)
334
        last_status.value.sig = TARGET_SIGNAL_TRAP;
335
    }
336
 
337
  return 0;
338
}
339
 
340
extern int remote_debug;
341
 
342
/* Decode a qXfer read request.  Return 0 if everything looks OK,
343
   or -1 otherwise.  */
344
 
345
static int
346
decode_xfer_read (char *buf, char **annex, CORE_ADDR *ofs, unsigned int *len)
347
{
348
  /* Extract and NUL-terminate the annex.  */
349
  *annex = buf;
350
  while (*buf && *buf != ':')
351
    buf++;
352
  if (*buf == '\0')
353
    return -1;
354
  *buf++ = 0;
355
 
356
  /* After the read marker and annex, qXfer looks like a
357
     traditional 'm' packet.  */
358
  decode_m_packet (buf, ofs, len);
359
 
360
  return 0;
361
}
362
 
363
/* Write the response to a successful qXfer read.  Returns the
364
   length of the (binary) data stored in BUF, corresponding
365
   to as much of DATA/LEN as we could fit.  IS_MORE controls
366
   the first character of the response.  */
367
static int
368
write_qxfer_response (char *buf, const void *data, int len, int is_more)
369
{
370
  int out_len;
371
 
372
  if (is_more)
373
    buf[0] = 'm';
374
  else
375
    buf[0] = 'l';
376
 
377
  return remote_escape_output (data, len, (unsigned char *) buf + 1, &out_len,
378
                               PBUFSIZ - 2) + 1;
379
}
380
 
381
/* Handle all of the extended 'Q' packets.  */
382
 
383
static void
384
handle_general_set (char *own_buf)
385
{
386
  if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
387
    {
388
      int numsigs = (int) TARGET_SIGNAL_LAST, i;
389
      const char *p = own_buf + strlen ("QPassSignals:");
390
      CORE_ADDR cursig;
391
 
392
      p = decode_address_to_semicolon (&cursig, p);
393
      for (i = 0; i < numsigs; i++)
394
        {
395
          if (i == cursig)
396
            {
397
              pass_signals[i] = 1;
398
              if (*p == '\0')
399
                /* Keep looping, to clear the remaining signals.  */
400
                cursig = -1;
401
              else
402
                p = decode_address_to_semicolon (&cursig, p);
403
            }
404
          else
405
            pass_signals[i] = 0;
406
        }
407
      strcpy (own_buf, "OK");
408
      return;
409
    }
410
 
411
  if (strcmp (own_buf, "QStartNoAckMode") == 0)
412
    {
413
      if (remote_debug)
414
        {
415
          fprintf (stderr, "[noack mode enabled]\n");
416
          fflush (stderr);
417
        }
418
 
419
      noack_mode = 1;
420
      write_ok (own_buf);
421
      return;
422
    }
423
 
424
  if (strncmp (own_buf, "QNonStop:", 9) == 0)
425
    {
426
      char *mode = own_buf + 9;
427
      int req = -1;
428
      char *req_str;
429
 
430
      if (strcmp (mode, "0") == 0)
431
        req = 0;
432
      else if (strcmp (mode, "1") == 0)
433
        req = 1;
434
      else
435
        {
436
          /* We don't know what this mode is, so complain to
437
             GDB.  */
438
          fprintf (stderr, "Unknown non-stop mode requested: %s\n",
439
                   own_buf);
440
          write_enn (own_buf);
441
          return;
442
        }
443
 
444
      req_str = req ? "non-stop" : "all-stop";
445
      if (start_non_stop (req) != 0)
446
        {
447
          fprintf (stderr, "Setting %s mode failed\n", req_str);
448
          write_enn (own_buf);
449
          return;
450
        }
451
 
452
      non_stop = req;
453
 
454
      if (remote_debug)
455
        fprintf (stderr, "[%s mode enabled]\n", req_str);
456
 
457
      write_ok (own_buf);
458
      return;
459
    }
460
 
461
  if (target_supports_tracepoints ()
462
      && handle_tracepoint_general_set (own_buf))
463
    return;
464
 
465
  /* Otherwise we didn't know what packet it was.  Say we didn't
466
     understand it.  */
467
  own_buf[0] = 0;
468
}
469
 
470
static const char *
471
get_features_xml (const char *annex)
472
{
473
  /* gdbserver_xmltarget defines what to return when looking
474
     for the "target.xml" file.  Its contents can either be
475
     verbatim XML code (prefixed with a '@') or else the name
476
     of the actual XML file to be used in place of "target.xml".
477
 
478
     This variable is set up from the auto-generated
479
     init_registers_... routine for the current target.  */
480
 
481
  if (gdbserver_xmltarget
482
      && strcmp (annex, "target.xml") == 0)
483
    {
484
      if (*gdbserver_xmltarget == '@')
485
        return gdbserver_xmltarget + 1;
486
      else
487
        annex = gdbserver_xmltarget;
488
    }
489
 
490
#ifdef USE_XML
491
  {
492
    extern const char *const xml_builtin[][2];
493
    int i;
494
 
495
    /* Look for the annex.  */
496
    for (i = 0; xml_builtin[i][0] != NULL; i++)
497
      if (strcmp (annex, xml_builtin[i][0]) == 0)
498
        break;
499
 
500
    if (xml_builtin[i][0] != NULL)
501
      return xml_builtin[i][1];
502
  }
503
#endif
504
 
505
  return NULL;
506
}
507
 
508
void
509
monitor_show_help (void)
510
{
511
  monitor_output ("The following monitor commands are supported:\n");
512
  monitor_output ("  set debug <0|1>\n");
513
  monitor_output ("    Enable general debugging messages\n");
514
  monitor_output ("  set debug-hw-points <0|1>\n");
515
  monitor_output ("    Enable h/w breakpoint/watchpoint debugging messages\n");
516
  monitor_output ("  set remote-debug <0|1>\n");
517
  monitor_output ("    Enable remote protocol debugging messages\n");
518
  monitor_output ("  exit\n");
519
  monitor_output ("    Quit GDBserver\n");
520
}
521
 
522
/* Read trace frame or inferior memory.  */
523
 
524
static int
525
read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
526
{
527
  if (current_traceframe >= 0)
528
    {
529
      ULONGEST nbytes;
530
      ULONGEST length = len;
531
 
532
      if (traceframe_read_mem (current_traceframe,
533
                               memaddr, myaddr, len, &nbytes))
534
        return EIO;
535
      /* Data read from trace buffer, we're done.  */
536
      if (nbytes == length)
537
        return 0;
538
      if (!in_readonly_region (memaddr, length))
539
        return EIO;
540
      /* Otherwise we have a valid readonly case, fall through.  */
541
      /* (assume no half-trace half-real blocks for now) */
542
    }
543
 
544
  return read_inferior_memory (memaddr, myaddr, len);
545
}
546
 
547
/* Write trace frame or inferior memory.  Actually, writing to trace
548
   frames is forbidden.  */
549
 
550
static int
551
write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
552
{
553
  if (current_traceframe >= 0)
554
    return EIO;
555
  else
556
    return write_inferior_memory (memaddr, myaddr, len);
557
}
558
 
559
/* Subroutine of handle_search_memory to simplify it.  */
560
 
561
static int
562
handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
563
                        gdb_byte *pattern, unsigned pattern_len,
564
                        gdb_byte *search_buf,
565
                        unsigned chunk_size, unsigned search_buf_size,
566
                        CORE_ADDR *found_addrp)
567
{
568
  /* Prime the search buffer.  */
569
 
570
  if (read_memory (start_addr, search_buf, search_buf_size) != 0)
571
    {
572
      warning ("Unable to access target memory at 0x%lx, halting search.",
573
               (long) start_addr);
574
      return -1;
575
    }
576
 
577
  /* Perform the search.
578
 
579
     The loop is kept simple by allocating [N + pattern-length - 1] bytes.
580
     When we've scanned N bytes we copy the trailing bytes to the start and
581
     read in another N bytes.  */
582
 
583
  while (search_space_len >= pattern_len)
584
    {
585
      gdb_byte *found_ptr;
586
      unsigned nr_search_bytes = (search_space_len < search_buf_size
587
                                  ? search_space_len
588
                                  : search_buf_size);
589
 
590
      found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
591
 
592
      if (found_ptr != NULL)
593
        {
594
          CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
595
          *found_addrp = found_addr;
596
          return 1;
597
        }
598
 
599
      /* Not found in this chunk, skip to next chunk.  */
600
 
601
      /* Don't let search_space_len wrap here, it's unsigned.  */
602
      if (search_space_len >= chunk_size)
603
        search_space_len -= chunk_size;
604
      else
605
        search_space_len = 0;
606
 
607
      if (search_space_len >= pattern_len)
608
        {
609
          unsigned keep_len = search_buf_size - chunk_size;
610
          CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
611
          int nr_to_read;
612
 
613
          /* Copy the trailing part of the previous iteration to the front
614
             of the buffer for the next iteration.  */
615
          memcpy (search_buf, search_buf + chunk_size, keep_len);
616
 
617
          nr_to_read = (search_space_len - keep_len < chunk_size
618
                        ? search_space_len - keep_len
619
                        : chunk_size);
620
 
621
          if (read_memory (read_addr, search_buf + keep_len,
622
                                    nr_to_read) != 0)
623
            {
624
              warning ("Unable to access target memory at 0x%lx, halting search.",
625
                       (long) read_addr);
626
              return -1;
627
            }
628
 
629
          start_addr += chunk_size;
630
        }
631
    }
632
 
633
  /* Not found.  */
634
 
635
  return 0;
636
}
637
 
638
/* Handle qSearch:memory packets.  */
639
 
640
static void
641
handle_search_memory (char *own_buf, int packet_len)
642
{
643
  CORE_ADDR start_addr;
644
  CORE_ADDR search_space_len;
645
  gdb_byte *pattern;
646
  unsigned int pattern_len;
647
  /* NOTE: also defined in find.c testcase.  */
648
#define SEARCH_CHUNK_SIZE 16000
649
  const unsigned chunk_size = SEARCH_CHUNK_SIZE;
650
  /* Buffer to hold memory contents for searching.  */
651
  gdb_byte *search_buf;
652
  unsigned search_buf_size;
653
  int found;
654
  CORE_ADDR found_addr;
655
  int cmd_name_len = sizeof ("qSearch:memory:") - 1;
656
 
657
  pattern = malloc (packet_len);
658
  if (pattern == NULL)
659
    {
660
      error ("Unable to allocate memory to perform the search");
661
      strcpy (own_buf, "E00");
662
      return;
663
    }
664
  if (decode_search_memory_packet (own_buf + cmd_name_len,
665
                                   packet_len - cmd_name_len,
666
                                   &start_addr, &search_space_len,
667
                                   pattern, &pattern_len) < 0)
668
    {
669
      free (pattern);
670
      error ("Error in parsing qSearch:memory packet");
671
      strcpy (own_buf, "E00");
672
      return;
673
    }
674
 
675
  search_buf_size = chunk_size + pattern_len - 1;
676
 
677
  /* No point in trying to allocate a buffer larger than the search space.  */
678
  if (search_space_len < search_buf_size)
679
    search_buf_size = search_space_len;
680
 
681
  search_buf = malloc (search_buf_size);
682
  if (search_buf == NULL)
683
    {
684
      free (pattern);
685
      error ("Unable to allocate memory to perform the search");
686
      strcpy (own_buf, "E00");
687
      return;
688
    }
689
 
690
  found = handle_search_memory_1 (start_addr, search_space_len,
691
                                  pattern, pattern_len,
692
                                  search_buf, chunk_size, search_buf_size,
693
                                  &found_addr);
694
 
695
  if (found > 0)
696
    sprintf (own_buf, "1,%lx", (long) found_addr);
697
  else if (found == 0)
698
    strcpy (own_buf, "0");
699
  else
700
    strcpy (own_buf, "E00");
701
 
702
  free (search_buf);
703
  free (pattern);
704
}
705
 
706
#define require_running(BUF)                    \
707
  if (!target_running ())                       \
708
    {                                           \
709
      write_enn (BUF);                          \
710
      return;                                   \
711
    }
712
 
713
/* Handle monitor commands not handled by target-specific handlers.  */
714
 
715
static void
716
handle_monitor_command (char *mon)
717
{
718
  if (strcmp (mon, "set debug 1") == 0)
719
    {
720
      debug_threads = 1;
721
      monitor_output ("Debug output enabled.\n");
722
    }
723
  else if (strcmp (mon, "set debug 0") == 0)
724
    {
725
      debug_threads = 0;
726
      monitor_output ("Debug output disabled.\n");
727
    }
728
  else if (strcmp (mon, "set debug-hw-points 1") == 0)
729
    {
730
      debug_hw_points = 1;
731
      monitor_output ("H/W point debugging output enabled.\n");
732
    }
733
  else if (strcmp (mon, "set debug-hw-points 0") == 0)
734
    {
735
      debug_hw_points = 0;
736
      monitor_output ("H/W point debugging output disabled.\n");
737
    }
738
  else if (strcmp (mon, "set remote-debug 1") == 0)
739
    {
740
      remote_debug = 1;
741
      monitor_output ("Protocol debug output enabled.\n");
742
    }
743
  else if (strcmp (mon, "set remote-debug 0") == 0)
744
    {
745
      remote_debug = 0;
746
      monitor_output ("Protocol debug output disabled.\n");
747
    }
748
  else if (strcmp (mon, "help") == 0)
749
    monitor_show_help ();
750
  else if (strcmp (mon, "exit") == 0)
751
    exit_requested = 1;
752
  else
753
    {
754
      monitor_output ("Unknown monitor command.\n\n");
755
      monitor_show_help ();
756
      write_enn (own_buf);
757
    }
758
}
759
 
760
static void
761
handle_threads_qxfer_proper (struct buffer *buffer)
762
{
763
  struct inferior_list_entry *thread;
764
 
765
  buffer_grow_str (buffer, "<threads>\n");
766
 
767
  for (thread = all_threads.head; thread; thread = thread->next)
768
    {
769
      ptid_t ptid = thread_to_gdb_id ((struct thread_info *)thread);
770
      char ptid_s[100];
771
      int core = -1;
772
      char core_s[21];
773
 
774
      write_ptid (ptid_s, ptid);
775
 
776
      if (the_target->core_of_thread)
777
        core = (*the_target->core_of_thread) (ptid);
778
 
779
      if (core != -1)
780
        {
781
          sprintf (core_s, "%d", core);
782
          buffer_xml_printf (buffer, "<thread id=\"%s\" core=\"%s\"/>\n",
783
                             ptid_s, core_s);
784
        }
785
      else
786
        {
787
          buffer_xml_printf (buffer, "<thread id=\"%s\"/>\n",
788
                             ptid_s);
789
        }
790
    }
791
 
792
  buffer_grow_str0 (buffer, "</threads>\n");
793
}
794
 
795
static int
796
handle_threads_qxfer (const char *annex,
797
                      unsigned char *readbuf,
798
                      CORE_ADDR offset, int length)
799
{
800
  static char *result = 0;
801
  static unsigned int result_length = 0;
802
 
803
  if (annex && strcmp (annex, "") != 0)
804
    return 0;
805
 
806
  if (offset == 0)
807
    {
808
      struct buffer buffer;
809
      /* When asked for data at offset 0, generate everything and store into
810
         'result'.  Successive reads will be served off 'result'.  */
811
      if (result)
812
        free (result);
813
 
814
      buffer_init (&buffer);
815
 
816
      handle_threads_qxfer_proper (&buffer);
817
 
818
      result = buffer_finish (&buffer);
819
      result_length = strlen (result);
820
      buffer_free (&buffer);
821
    }
822
 
823
  if (offset >= result_length)
824
    {
825
      /* We're out of data.  */
826
      free (result);
827
      result = NULL;
828
      result_length = 0;
829
      return 0;
830
    }
831
 
832
  if (length > result_length - offset)
833
    length = result_length - offset;
834
 
835
  memcpy (readbuf, result + offset, length);
836
 
837
  return length;
838
 
839
}
840
 
841
/* Table used by the crc32 function to calcuate the checksum.  */
842
 
843
static unsigned int crc32_table[256] =
844
{0, 0};
845
 
846
/* Compute 32 bit CRC from inferior memory.
847
 
848
   On success, return 32 bit CRC.
849
   On failure, return (unsigned long long) -1.  */
850
 
851
static unsigned long long
852
crc32 (CORE_ADDR base, int len, unsigned int crc)
853
{
854
  if (!crc32_table[1])
855
    {
856
      /* Initialize the CRC table and the decoding table.  */
857
      int i, j;
858
      unsigned int c;
859
 
860
      for (i = 0; i < 256; i++)
861
        {
862
          for (c = i << 24, j = 8; j > 0; --j)
863
            c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
864
          crc32_table[i] = c;
865
        }
866
    }
867
 
868
  while (len--)
869
    {
870
      unsigned char byte = 0;
871
 
872
      /* Return failure if memory read fails.  */
873
      if (read_inferior_memory (base, &byte, 1) != 0)
874
        return (unsigned long long) -1;
875
 
876
      crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ byte) & 255];
877
      base++;
878
    }
879
  return (unsigned long long) crc;
880
}
881
 
882
/* Handle all of the extended 'q' packets.  */
883
void
884
handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
885
{
886
  static struct inferior_list_entry *thread_ptr;
887
 
888
  /* Reply the current thread id.  */
889
  if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
890
    {
891
      ptid_t gdb_id;
892
      require_running (own_buf);
893
 
894
      if (!ptid_equal (general_thread, null_ptid)
895
          && !ptid_equal (general_thread, minus_one_ptid))
896
        gdb_id = general_thread;
897
      else
898
        {
899
          thread_ptr = all_threads.head;
900
          gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
901
        }
902
 
903
      sprintf (own_buf, "QC");
904
      own_buf += 2;
905
      own_buf = write_ptid (own_buf, gdb_id);
906
      return;
907
    }
908
 
909
  if (strcmp ("qSymbol::", own_buf) == 0)
910
    {
911
      /* GDB is suggesting new symbols have been loaded.  This may
912
         mean a new shared library has been detected as loaded, so
913
         take the opportunity to check if breakpoints we think are
914
         inserted, still are.  Note that it isn't guaranteed that
915
         we'll see this when a shared library is loaded, and nor will
916
         we see this for unloads (although breakpoints in unloaded
917
         libraries shouldn't trigger), as GDB may not find symbols for
918
         the library at all.  We also re-validate breakpoints when we
919
         see a second GDB breakpoint for the same address, and or when
920
         we access breakpoint shadows.  */
921
      validate_breakpoints ();
922
 
923
      if (target_supports_tracepoints ())
924
        tracepoint_look_up_symbols ();
925
 
926
      if (target_running () && the_target->look_up_symbols != NULL)
927
        (*the_target->look_up_symbols) ();
928
 
929
      strcpy (own_buf, "OK");
930
      return;
931
    }
932
 
933
  if (!disable_packet_qfThreadInfo)
934
    {
935
      if (strcmp ("qfThreadInfo", own_buf) == 0)
936
        {
937
          ptid_t gdb_id;
938
 
939
          require_running (own_buf);
940
          thread_ptr = all_threads.head;
941
 
942
          *own_buf++ = 'm';
943
          gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
944
          write_ptid (own_buf, gdb_id);
945
          thread_ptr = thread_ptr->next;
946
          return;
947
        }
948
 
949
      if (strcmp ("qsThreadInfo", own_buf) == 0)
950
        {
951
          ptid_t gdb_id;
952
 
953
          require_running (own_buf);
954
          if (thread_ptr != NULL)
955
            {
956
              *own_buf++ = 'm';
957
              gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
958
              write_ptid (own_buf, gdb_id);
959
              thread_ptr = thread_ptr->next;
960
              return;
961
            }
962
          else
963
            {
964
              sprintf (own_buf, "l");
965
              return;
966
            }
967
        }
968
    }
969
 
970
  if (the_target->read_offsets != NULL
971
      && strcmp ("qOffsets", own_buf) == 0)
972
    {
973
      CORE_ADDR text, data;
974
 
975
      require_running (own_buf);
976
      if (the_target->read_offsets (&text, &data))
977
        sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
978
                 (long)text, (long)data, (long)data);
979
      else
980
        write_enn (own_buf);
981
 
982
      return;
983
    }
984
 
985
  if (the_target->qxfer_spu != NULL
986
      && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
987
    {
988
      char *annex;
989
      int n;
990
      unsigned int len;
991
      CORE_ADDR ofs;
992
      unsigned char *spu_buf;
993
 
994
      require_running (own_buf);
995
      strcpy (own_buf, "E00");
996
      if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
997
        return;
998
      if (len > PBUFSIZ - 2)
999
        len = PBUFSIZ - 2;
1000
      spu_buf = malloc (len + 1);
1001
      if (!spu_buf)
1002
        return;
1003
 
1004
      n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
1005
      if (n < 0)
1006
        write_enn (own_buf);
1007
      else if (n > len)
1008
        *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, len, 1);
1009
      else
1010
        *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, n, 0);
1011
 
1012
      free (spu_buf);
1013
      return;
1014
    }
1015
 
1016
  if (the_target->qxfer_spu != NULL
1017
      && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
1018
    {
1019
      char *annex;
1020
      int n;
1021
      unsigned int len;
1022
      CORE_ADDR ofs;
1023
      unsigned char *spu_buf;
1024
 
1025
      require_running (own_buf);
1026
      strcpy (own_buf, "E00");
1027
      spu_buf = malloc (packet_len - 15);
1028
      if (!spu_buf)
1029
        return;
1030
      if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
1031
                             &ofs, &len, spu_buf) < 0)
1032
        {
1033
          free (spu_buf);
1034
          return;
1035
        }
1036
 
1037
      n = (*the_target->qxfer_spu)
1038
        (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
1039
      if (n < 0)
1040
        write_enn (own_buf);
1041
      else
1042
        sprintf (own_buf, "%x", n);
1043
 
1044
      free (spu_buf);
1045
      return;
1046
    }
1047
 
1048
  if (the_target->read_auxv != NULL
1049
      && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
1050
    {
1051
      unsigned char *data;
1052
      int n;
1053
      CORE_ADDR ofs;
1054
      unsigned int len;
1055
      char *annex;
1056
 
1057
      require_running (own_buf);
1058
 
1059
      /* Reject any annex; grab the offset and length.  */
1060
      if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
1061
          || annex[0] != '\0')
1062
        {
1063
          strcpy (own_buf, "E00");
1064
          return;
1065
        }
1066
 
1067
      /* Read one extra byte, as an indicator of whether there is
1068
         more.  */
1069
      if (len > PBUFSIZ - 2)
1070
        len = PBUFSIZ - 2;
1071
      data = malloc (len + 1);
1072
      if (data == NULL)
1073
        {
1074
          write_enn (own_buf);
1075
          return;
1076
        }
1077
      n = (*the_target->read_auxv) (ofs, data, len + 1);
1078
      if (n < 0)
1079
        write_enn (own_buf);
1080
      else if (n > len)
1081
        *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1082
      else
1083
        *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1084
 
1085
      free (data);
1086
 
1087
      return;
1088
    }
1089
 
1090
  if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
1091
    {
1092
      CORE_ADDR ofs;
1093
      unsigned int len, total_len;
1094
      const char *document;
1095
      char *annex;
1096
 
1097
      require_running (own_buf);
1098
 
1099
      /* Grab the annex, offset, and length.  */
1100
      if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
1101
        {
1102
          strcpy (own_buf, "E00");
1103
          return;
1104
        }
1105
 
1106
      /* Now grab the correct annex.  */
1107
      document = get_features_xml (annex);
1108
      if (document == NULL)
1109
        {
1110
          strcpy (own_buf, "E00");
1111
          return;
1112
        }
1113
 
1114
      total_len = strlen (document);
1115
      if (len > PBUFSIZ - 2)
1116
        len = PBUFSIZ - 2;
1117
 
1118
      if (ofs > total_len)
1119
        write_enn (own_buf);
1120
      else if (len < total_len - ofs)
1121
        *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1122
                                                  len, 1);
1123
      else
1124
        *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1125
                                                  total_len - ofs, 0);
1126
 
1127
      return;
1128
    }
1129
 
1130
  if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
1131
    {
1132
      CORE_ADDR ofs;
1133
      unsigned int len, total_len;
1134
      char *document, *p;
1135
      struct inferior_list_entry *dll_ptr;
1136
      char *annex;
1137
 
1138
      require_running (own_buf);
1139
 
1140
      /* Reject any annex; grab the offset and length.  */
1141
      if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
1142
          || annex[0] != '\0')
1143
        {
1144
          strcpy (own_buf, "E00");
1145
          return;
1146
        }
1147
 
1148
      /* Over-estimate the necessary memory.  Assume that every character
1149
         in the library name must be escaped.  */
1150
      total_len = 64;
1151
      for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1152
        total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
1153
 
1154
      document = malloc (total_len);
1155
      if (document == NULL)
1156
        {
1157
          write_enn (own_buf);
1158
          return;
1159
        }
1160
      strcpy (document, "<library-list>\n");
1161
      p = document + strlen (document);
1162
 
1163
      for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1164
        {
1165
          struct dll_info *dll = (struct dll_info *) dll_ptr;
1166
          char *name;
1167
 
1168
          strcpy (p, "  <library name=\"");
1169
          p = p + strlen (p);
1170
          name = xml_escape_text (dll->name);
1171
          strcpy (p, name);
1172
          free (name);
1173
          p = p + strlen (p);
1174
          strcpy (p, "\"><segment address=\"");
1175
          p = p + strlen (p);
1176
          sprintf (p, "0x%lx", (long) dll->base_addr);
1177
          p = p + strlen (p);
1178
          strcpy (p, "\"/></library>\n");
1179
          p = p + strlen (p);
1180
        }
1181
 
1182
      strcpy (p, "</library-list>\n");
1183
 
1184
      total_len = strlen (document);
1185
      if (len > PBUFSIZ - 2)
1186
        len = PBUFSIZ - 2;
1187
 
1188
      if (ofs > total_len)
1189
        write_enn (own_buf);
1190
      else if (len < total_len - ofs)
1191
        *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1192
                                                  len, 1);
1193
      else
1194
        *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1195
                                                  total_len - ofs, 0);
1196
 
1197
      free (document);
1198
      return;
1199
    }
1200
 
1201
  if (the_target->qxfer_osdata != NULL
1202
      && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
1203
    {
1204
      char *annex;
1205
      int n;
1206
      unsigned int len;
1207
      CORE_ADDR ofs;
1208
      unsigned char *workbuf;
1209
 
1210
      strcpy (own_buf, "E00");
1211
      if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
1212
        return;
1213
      if (len > PBUFSIZ - 2)
1214
        len = PBUFSIZ - 2;
1215
      workbuf = malloc (len + 1);
1216
      if (!workbuf)
1217
        return;
1218
 
1219
      n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
1220
      if (n < 0)
1221
        write_enn (own_buf);
1222
      else if (n > len)
1223
        *new_packet_len_p = write_qxfer_response (own_buf, workbuf, len, 1);
1224
      else
1225
        *new_packet_len_p = write_qxfer_response (own_buf, workbuf, n, 0);
1226
 
1227
      free (workbuf);
1228
      return;
1229
    }
1230
 
1231
  if (the_target->qxfer_siginfo != NULL
1232
      && strncmp ("qXfer:siginfo:read:", own_buf, 19) == 0)
1233
    {
1234
      unsigned char *data;
1235
      int n;
1236
      CORE_ADDR ofs;
1237
      unsigned int len;
1238
      char *annex;
1239
 
1240
      require_running (own_buf);
1241
 
1242
      /* Reject any annex; grab the offset and length.  */
1243
      if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1244
          || annex[0] != '\0')
1245
        {
1246
          strcpy (own_buf, "E00");
1247
          return;
1248
        }
1249
 
1250
      /* Read one extra byte, as an indicator of whether there is
1251
         more.  */
1252
      if (len > PBUFSIZ - 2)
1253
        len = PBUFSIZ - 2;
1254
      data = malloc (len + 1);
1255
      if (!data)
1256
        return;
1257
      n = (*the_target->qxfer_siginfo) (annex, data, NULL, ofs, len + 1);
1258
      if (n < 0)
1259
        write_enn (own_buf);
1260
      else if (n > len)
1261
        *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1262
      else
1263
        *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1264
 
1265
      free (data);
1266
      return;
1267
    }
1268
 
1269
  if (the_target->qxfer_siginfo != NULL
1270
      && strncmp ("qXfer:siginfo:write:", own_buf, 20) == 0)
1271
    {
1272
      char *annex;
1273
      int n;
1274
      unsigned int len;
1275
      CORE_ADDR ofs;
1276
      unsigned char *data;
1277
 
1278
      require_running (own_buf);
1279
 
1280
      strcpy (own_buf, "E00");
1281
      data = malloc (packet_len - 19);
1282
      if (!data)
1283
        return;
1284
      if (decode_xfer_write (own_buf + 20, packet_len - 20, &annex,
1285
                             &ofs, &len, data) < 0)
1286
        {
1287
          free (data);
1288
          return;
1289
        }
1290
 
1291
      n = (*the_target->qxfer_siginfo)
1292
        (annex, NULL, (unsigned const char *)data, ofs, len);
1293
      if (n < 0)
1294
        write_enn (own_buf);
1295
      else
1296
        sprintf (own_buf, "%x", n);
1297
 
1298
      free (data);
1299
      return;
1300
    }
1301
 
1302
  if (strncmp ("qXfer:threads:read:", own_buf, 19) == 0)
1303
    {
1304
      unsigned char *data;
1305
      int n;
1306
      CORE_ADDR ofs;
1307
      unsigned int len;
1308
      char *annex;
1309
 
1310
      require_running (own_buf);
1311
 
1312
      /* Reject any annex; grab the offset and length.  */
1313
      if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1314
          || annex[0] != '\0')
1315
        {
1316
          strcpy (own_buf, "E00");
1317
          return;
1318
        }
1319
 
1320
      /* Read one extra byte, as an indicator of whether there is
1321
         more.  */
1322
      if (len > PBUFSIZ - 2)
1323
        len = PBUFSIZ - 2;
1324
      data = malloc (len + 1);
1325
      if (!data)
1326
        return;
1327
      n = handle_threads_qxfer (annex, data, ofs, len + 1);
1328
      if (n < 0)
1329
        write_enn (own_buf);
1330
      else if (n > len)
1331
        *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1332
      else
1333
        *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1334
 
1335
      free (data);
1336
      return;
1337
    }
1338
 
1339
  if (strncmp ("qXfer:statictrace:read:", own_buf,
1340
               sizeof ("qXfer:statictrace:read:") -1) == 0)
1341
    {
1342
      unsigned char *data;
1343
      CORE_ADDR ofs;
1344
      unsigned int len;
1345
      char *annex;
1346
      ULONGEST nbytes;
1347
 
1348
      require_running (own_buf);
1349
 
1350
      if (current_traceframe == -1)
1351
        {
1352
          write_enn (own_buf);
1353
          return;
1354
        }
1355
 
1356
      /* Reject any annex; grab the offset and length.  */
1357
      if (decode_xfer_read (own_buf + sizeof ("qXfer:statictrace:read:") -1,
1358
                            &annex, &ofs, &len) < 0
1359
          || annex[0] != '\0')
1360
        {
1361
          strcpy (own_buf, "E00");
1362
          return;
1363
        }
1364
 
1365
      /* Read one extra byte, as an indicator of whether there is
1366
         more.  */
1367
      if (len > PBUFSIZ - 2)
1368
        len = PBUFSIZ - 2;
1369
      data = malloc (len + 1);
1370
      if (!data)
1371
        return;
1372
 
1373
      if (traceframe_read_sdata (current_traceframe, ofs,
1374
                                 data, len + 1, &nbytes))
1375
        write_enn (own_buf);
1376
      else if (nbytes > len)
1377
        *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1378
      else
1379
        *new_packet_len_p = write_qxfer_response (own_buf, data, nbytes, 0);
1380
 
1381
      free (data);
1382
      return;
1383
    }
1384
 
1385
  /* Protocol features query.  */
1386
  if (strncmp ("qSupported", own_buf, 10) == 0
1387
      && (own_buf[10] == ':' || own_buf[10] == '\0'))
1388
    {
1389
      char *p = &own_buf[10];
1390
      int gdb_supports_qRelocInsn = 0;
1391
 
1392
      /* Start processing qSupported packet.  */
1393
      target_process_qsupported (NULL);
1394
 
1395
      /* Process each feature being provided by GDB.  The first
1396
         feature will follow a ':', and latter features will follow
1397
         ';'.  */
1398
      if (*p == ':')
1399
        {
1400
          char **qsupported = NULL;
1401
          int count = 0;
1402
          int i;
1403
 
1404
          /* Two passes, to avoid nested strtok calls in
1405
             target_process_qsupported.  */
1406
          for (p = strtok (p + 1, ";");
1407
               p != NULL;
1408
               p = strtok (NULL, ";"))
1409
            {
1410
              count++;
1411
              qsupported = xrealloc (qsupported, count * sizeof (char *));
1412
              qsupported[count - 1] = xstrdup (p);
1413
            }
1414
 
1415
          for (i = 0; i < count; i++)
1416
            {
1417
              p = qsupported[i];
1418
              if (strcmp (p, "multiprocess+") == 0)
1419
                {
1420
                  /* GDB supports and wants multi-process support if
1421
                     possible.  */
1422
                  if (target_supports_multi_process ())
1423
                    multi_process = 1;
1424
                }
1425
              else if (strcmp (p, "qRelocInsn+") == 0)
1426
                {
1427
                  /* GDB supports relocate instruction requests.  */
1428
                  gdb_supports_qRelocInsn = 1;
1429
                }
1430
              else
1431
                target_process_qsupported (p);
1432
 
1433
              free (p);
1434
            }
1435
 
1436
          free (qsupported);
1437
        }
1438
 
1439
      sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
1440
 
1441
      /* We do not have any hook to indicate whether the target backend
1442
         supports qXfer:libraries:read, so always report it.  */
1443
      strcat (own_buf, ";qXfer:libraries:read+");
1444
 
1445
      if (the_target->read_auxv != NULL)
1446
        strcat (own_buf, ";qXfer:auxv:read+");
1447
 
1448
      if (the_target->qxfer_spu != NULL)
1449
        strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
1450
 
1451
      if (the_target->qxfer_siginfo != NULL)
1452
        strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1453
 
1454
      /* We always report qXfer:features:read, as targets may
1455
         install XML files on a subsequent call to arch_setup.
1456
         If we reported to GDB on startup that we don't support
1457
         qXfer:feature:read at all, we will never be re-queried.  */
1458
      strcat (own_buf, ";qXfer:features:read+");
1459
 
1460
      if (transport_is_reliable)
1461
        strcat (own_buf, ";QStartNoAckMode+");
1462
 
1463
      if (the_target->qxfer_osdata != NULL)
1464
        strcat (own_buf, ";qXfer:osdata:read+");
1465
 
1466
      if (target_supports_multi_process ())
1467
        strcat (own_buf, ";multiprocess+");
1468
 
1469
      if (target_supports_non_stop ())
1470
        strcat (own_buf, ";QNonStop+");
1471
 
1472
      strcat (own_buf, ";qXfer:threads:read+");
1473
 
1474
      if (target_supports_tracepoints ())
1475
        {
1476
          strcat (own_buf, ";ConditionalTracepoints+");
1477
          strcat (own_buf, ";TraceStateVariables+");
1478
          strcat (own_buf, ";TracepointSource+");
1479
          strcat (own_buf, ";DisconnectedTracing+");
1480
          if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
1481
            strcat (own_buf, ";FastTracepoints+");
1482
          strcat (own_buf, ";StaticTracepoints+");
1483
          strcat (own_buf, ";qXfer:statictrace:read+");
1484
        }
1485
 
1486
      return;
1487
    }
1488
 
1489
  /* Thread-local storage support.  */
1490
  if (the_target->get_tls_address != NULL
1491
      && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1492
    {
1493
      char *p = own_buf + 12;
1494
      CORE_ADDR parts[2], address = 0;
1495
      int i, err;
1496
      ptid_t ptid = null_ptid;
1497
 
1498
      require_running (own_buf);
1499
 
1500
      for (i = 0; i < 3; i++)
1501
        {
1502
          char *p2;
1503
          int len;
1504
 
1505
          if (p == NULL)
1506
            break;
1507
 
1508
          p2 = strchr (p, ',');
1509
          if (p2)
1510
            {
1511
              len = p2 - p;
1512
              p2++;
1513
            }
1514
          else
1515
            {
1516
              len = strlen (p);
1517
              p2 = NULL;
1518
            }
1519
 
1520
          if (i == 0)
1521
            ptid = read_ptid (p, NULL);
1522
          else
1523
            decode_address (&parts[i - 1], p, len);
1524
          p = p2;
1525
        }
1526
 
1527
      if (p != NULL || i < 3)
1528
        err = 1;
1529
      else
1530
        {
1531
          struct thread_info *thread = find_thread_ptid (ptid);
1532
 
1533
          if (thread == NULL)
1534
            err = 2;
1535
          else
1536
            err = the_target->get_tls_address (thread, parts[0], parts[1],
1537
                                               &address);
1538
        }
1539
 
1540
      if (err == 0)
1541
        {
1542
          strcpy (own_buf, paddress(address));
1543
          return;
1544
        }
1545
      else if (err > 0)
1546
        {
1547
          write_enn (own_buf);
1548
          return;
1549
        }
1550
 
1551
      /* Otherwise, pretend we do not understand this packet.  */
1552
    }
1553
 
1554
  /* Windows OS Thread Information Block address support.  */
1555
  if (the_target->get_tib_address != NULL
1556
      && strncmp ("qGetTIBAddr:", own_buf, 12) == 0)
1557
    {
1558
      char *annex;
1559
      int n;
1560
      CORE_ADDR tlb;
1561
      ptid_t ptid = read_ptid (own_buf + 12, &annex);
1562
 
1563
      n = (*the_target->get_tib_address) (ptid, &tlb);
1564
      if (n == 1)
1565
        {
1566
          strcpy (own_buf, paddress(tlb));
1567
          return;
1568
        }
1569
      else if (n == 0)
1570
        {
1571
          write_enn (own_buf);
1572
          return;
1573
        }
1574
      return;
1575
    }
1576
 
1577
  /* Handle "monitor" commands.  */
1578
  if (strncmp ("qRcmd,", own_buf, 6) == 0)
1579
    {
1580
      char *mon = malloc (PBUFSIZ);
1581
      int len = strlen (own_buf + 6);
1582
 
1583
      if (mon == NULL)
1584
        {
1585
          write_enn (own_buf);
1586
          return;
1587
        }
1588
 
1589
      if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
1590
        {
1591
          write_enn (own_buf);
1592
          free (mon);
1593
          return;
1594
        }
1595
      mon[len / 2] = '\0';
1596
 
1597
      write_ok (own_buf);
1598
 
1599
      if (the_target->handle_monitor_command == NULL
1600
          || (*the_target->handle_monitor_command) (mon) == 0)
1601
        /* Default processing.  */
1602
        handle_monitor_command (mon);
1603
 
1604
      free (mon);
1605
      return;
1606
    }
1607
 
1608
  if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
1609
    {
1610
      require_running (own_buf);
1611
      handle_search_memory (own_buf, packet_len);
1612
      return;
1613
    }
1614
 
1615
  if (strcmp (own_buf, "qAttached") == 0
1616
      || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
1617
    {
1618
      struct process_info *process;
1619
 
1620
      if (own_buf[sizeof ("qAttached") - 1])
1621
        {
1622
          int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1623
          process = (struct process_info *)
1624
            find_inferior_id (&all_processes, pid_to_ptid (pid));
1625
        }
1626
      else
1627
        {
1628
          require_running (own_buf);
1629
          process = current_process ();
1630
        }
1631
 
1632
      if (process == NULL)
1633
        {
1634
          write_enn (own_buf);
1635
          return;
1636
        }
1637
 
1638
      strcpy (own_buf, process->attached ? "1" : "0");
1639
      return;
1640
    }
1641
 
1642
  if (strncmp ("qCRC:", own_buf, 5) == 0)
1643
    {
1644
      /* CRC check (compare-section).  */
1645
      char *comma;
1646
      CORE_ADDR base;
1647
      int len;
1648
      unsigned long long crc;
1649
 
1650
      require_running (own_buf);
1651
      base = strtoul (own_buf + 5, &comma, 16);
1652
      if (*comma++ != ',')
1653
        {
1654
          write_enn (own_buf);
1655
          return;
1656
        }
1657
      len = strtoul (comma, NULL, 16);
1658
      crc = crc32 (base, len, 0xffffffff);
1659
      /* Check for memory failure.  */
1660
      if (crc == (unsigned long long) -1)
1661
        {
1662
          write_enn (own_buf);
1663
          return;
1664
        }
1665
      sprintf (own_buf, "C%lx", (unsigned long) crc);
1666
      return;
1667
    }
1668
 
1669
  if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
1670
    return;
1671
 
1672
  /* Otherwise we didn't know what packet it was.  Say we didn't
1673
     understand it.  */
1674
  own_buf[0] = 0;
1675
}
1676
 
1677
/* Parse vCont packets.  */
1678
void
1679
handle_v_cont (char *own_buf)
1680
{
1681
  char *p, *q;
1682
  int n = 0, i = 0;
1683
  struct thread_resume *resume_info;
1684
  struct thread_resume default_action = {{0}};
1685
 
1686
  /* Count the number of semicolons in the packet.  There should be one
1687
     for every action.  */
1688
  p = &own_buf[5];
1689
  while (p)
1690
    {
1691
      n++;
1692
      p++;
1693
      p = strchr (p, ';');
1694
    }
1695
 
1696
  resume_info = malloc (n * sizeof (resume_info[0]));
1697
  if (resume_info == NULL)
1698
    goto err;
1699
 
1700
  p = &own_buf[5];
1701
  while (*p)
1702
    {
1703
      p++;
1704
 
1705
      if (p[0] == 's' || p[0] == 'S')
1706
        resume_info[i].kind = resume_step;
1707
      else if (p[0] == 'c' || p[0] == 'C')
1708
        resume_info[i].kind = resume_continue;
1709
      else if (p[0] == 't')
1710
        resume_info[i].kind = resume_stop;
1711
      else
1712
        goto err;
1713
 
1714
      if (p[0] == 'S' || p[0] == 'C')
1715
        {
1716
          int sig;
1717
          sig = strtol (p + 1, &q, 16);
1718
          if (p == q)
1719
            goto err;
1720
          p = q;
1721
 
1722
          if (!target_signal_to_host_p (sig))
1723
            goto err;
1724
          resume_info[i].sig = target_signal_to_host (sig);
1725
        }
1726
      else
1727
        {
1728
          resume_info[i].sig = 0;
1729
          p = p + 1;
1730
        }
1731
 
1732
      if (p[0] == 0)
1733
        {
1734
          resume_info[i].thread = minus_one_ptid;
1735
          default_action = resume_info[i];
1736
 
1737
          /* Note: we don't increment i here, we'll overwrite this entry
1738
             the next time through.  */
1739
        }
1740
      else if (p[0] == ':')
1741
        {
1742
          ptid_t ptid = read_ptid (p + 1, &q);
1743
 
1744
          if (p == q)
1745
            goto err;
1746
          p = q;
1747
          if (p[0] != ';' && p[0] != 0)
1748
            goto err;
1749
 
1750
          resume_info[i].thread = ptid;
1751
 
1752
          i++;
1753
        }
1754
    }
1755
 
1756
  if (i < n)
1757
    resume_info[i] = default_action;
1758
 
1759
  /* Still used in occasional places in the backend.  */
1760
  if (n == 1
1761
      && !ptid_equal (resume_info[0].thread, minus_one_ptid)
1762
      && resume_info[0].kind != resume_stop)
1763
    cont_thread = resume_info[0].thread;
1764
  else
1765
    cont_thread = minus_one_ptid;
1766
  set_desired_inferior (0);
1767
 
1768
  if (!non_stop)
1769
    enable_async_io ();
1770
 
1771
  (*the_target->resume) (resume_info, n);
1772
 
1773
  free (resume_info);
1774
 
1775
  if (non_stop)
1776
    write_ok (own_buf);
1777
  else
1778
    {
1779
      last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1780
      prepare_resume_reply (own_buf, last_ptid, &last_status);
1781
      disable_async_io ();
1782
 
1783
      if (last_status.kind == TARGET_WAITKIND_EXITED
1784
          || last_status.kind == TARGET_WAITKIND_SIGNALLED)
1785
        mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
1786
    }
1787
  return;
1788
 
1789
err:
1790
  write_enn (own_buf);
1791
  free (resume_info);
1792
  return;
1793
}
1794
 
1795
/* Attach to a new program.  Return 1 if successful, 0 if failure.  */
1796
int
1797
handle_v_attach (char *own_buf)
1798
{
1799
  int pid;
1800
 
1801
  pid = strtol (own_buf + 8, NULL, 16);
1802
  if (pid != 0 && attach_inferior (pid) == 0)
1803
    {
1804
      /* Don't report shared library events after attaching, even if
1805
         some libraries are preloaded.  GDB will always poll the
1806
         library list.  Avoids the "stopped by shared library event"
1807
         notice on the GDB side.  */
1808
      dlls_changed = 0;
1809
 
1810
      if (non_stop)
1811
        {
1812
          /* In non-stop, we don't send a resume reply.  Stop events
1813
             will follow up using the normal notification
1814
             mechanism.  */
1815
          write_ok (own_buf);
1816
        }
1817
      else
1818
        prepare_resume_reply (own_buf, last_ptid, &last_status);
1819
 
1820
      return 1;
1821
    }
1822
  else
1823
    {
1824
      write_enn (own_buf);
1825
      return 0;
1826
    }
1827
}
1828
 
1829
/* Run a new program.  Return 1 if successful, 0 if failure.  */
1830
static int
1831
handle_v_run (char *own_buf)
1832
{
1833
  char *p, *next_p, **new_argv;
1834
  int i, new_argc;
1835
 
1836
  new_argc = 0;
1837
  for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1838
    {
1839
      p++;
1840
      new_argc++;
1841
    }
1842
 
1843
  new_argv = calloc (new_argc + 2, sizeof (char *));
1844
  if (new_argv == NULL)
1845
    {
1846
      write_enn (own_buf);
1847
      return 0;
1848
    }
1849
 
1850
  i = 0;
1851
  for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1852
    {
1853
      next_p = strchr (p, ';');
1854
      if (next_p == NULL)
1855
        next_p = p + strlen (p);
1856
 
1857
      if (i == 0 && p == next_p)
1858
        new_argv[i] = NULL;
1859
      else
1860
        {
1861
          /* FIXME: Fail request if out of memory instead of dying.  */
1862
          new_argv[i] = xmalloc (1 + (next_p - p) / 2);
1863
          unhexify (new_argv[i], p, (next_p - p) / 2);
1864
          new_argv[i][(next_p - p) / 2] = '\0';
1865
        }
1866
 
1867
      if (*next_p)
1868
        next_p++;
1869
      i++;
1870
    }
1871
  new_argv[i] = NULL;
1872
 
1873
  if (new_argv[0] == NULL)
1874
    {
1875
      /* GDB didn't specify a program to run.  Use the program from the
1876
         last run with the new argument list.  */
1877
 
1878
      if (program_argv == NULL)
1879
        {
1880
          /* FIXME: new_argv memory leak */
1881
          write_enn (own_buf);
1882
          return 0;
1883
        }
1884
 
1885
      new_argv[0] = strdup (program_argv[0]);
1886
      if (new_argv[0] == NULL)
1887
        {
1888
          /* FIXME: new_argv memory leak */
1889
          write_enn (own_buf);
1890
          return 0;
1891
        }
1892
    }
1893
 
1894
  /* Free the old argv and install the new one.  */
1895
  freeargv (program_argv);
1896
  program_argv = new_argv;
1897
 
1898
  start_inferior (program_argv);
1899
  if (last_status.kind == TARGET_WAITKIND_STOPPED)
1900
    {
1901
      prepare_resume_reply (own_buf, last_ptid, &last_status);
1902
 
1903
      /* In non-stop, sending a resume reply doesn't set the general
1904
         thread, but GDB assumes a vRun sets it (this is so GDB can
1905
         query which is the main thread of the new inferior.  */
1906
      if (non_stop)
1907
        general_thread = last_ptid;
1908
 
1909
      return 1;
1910
    }
1911
  else
1912
    {
1913
      write_enn (own_buf);
1914
      return 0;
1915
    }
1916
}
1917
 
1918
/* Kill process.  Return 1 if successful, 0 if failure.  */
1919
int
1920
handle_v_kill (char *own_buf)
1921
{
1922
  int pid;
1923
  char *p = &own_buf[6];
1924
  if (multi_process)
1925
    pid = strtol (p, NULL, 16);
1926
  else
1927
    pid = signal_pid;
1928
  if (pid != 0 && kill_inferior (pid) == 0)
1929
    {
1930
      last_status.kind = TARGET_WAITKIND_SIGNALLED;
1931
      last_status.value.sig = TARGET_SIGNAL_KILL;
1932
      last_ptid = pid_to_ptid (pid);
1933
      discard_queued_stop_replies (pid);
1934
      write_ok (own_buf);
1935
      return 1;
1936
    }
1937
  else
1938
    {
1939
      write_enn (own_buf);
1940
      return 0;
1941
    }
1942
}
1943
 
1944
/* Handle a 'vStopped' packet.  */
1945
static void
1946
handle_v_stopped (char *own_buf)
1947
{
1948
  /* If we're waiting for GDB to acknowledge a pending stop reply,
1949
     consider that done.  */
1950
  if (notif_queue)
1951
    {
1952
      struct vstop_notif *head;
1953
 
1954
      if (remote_debug)
1955
        fprintf (stderr, "vStopped: acking %s\n",
1956
                 target_pid_to_str (notif_queue->ptid));
1957
 
1958
      head = notif_queue;
1959
      notif_queue = notif_queue->next;
1960
      free (head);
1961
    }
1962
 
1963
  /* Push another stop reply, or if there are no more left, an OK.  */
1964
  send_next_stop_reply (own_buf);
1965
}
1966
 
1967
/* Handle all of the extended 'v' packets.  */
1968
void
1969
handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
1970
{
1971
  if (!disable_packet_vCont)
1972
    {
1973
      if (strncmp (own_buf, "vCont;", 6) == 0)
1974
        {
1975
          require_running (own_buf);
1976
          handle_v_cont (own_buf);
1977
          return;
1978
        }
1979
 
1980
      if (strncmp (own_buf, "vCont?", 6) == 0)
1981
        {
1982
          strcpy (own_buf, "vCont;c;C;s;S;t");
1983
          return;
1984
        }
1985
    }
1986
 
1987
  if (strncmp (own_buf, "vFile:", 6) == 0
1988
      && handle_vFile (own_buf, packet_len, new_packet_len))
1989
    return;
1990
 
1991
  if (strncmp (own_buf, "vAttach;", 8) == 0)
1992
    {
1993
      if (!multi_process && target_running ())
1994
        {
1995
          fprintf (stderr, "Already debugging a process\n");
1996
          write_enn (own_buf);
1997
          return;
1998
        }
1999
      handle_v_attach (own_buf);
2000
      return;
2001
    }
2002
 
2003
  if (strncmp (own_buf, "vRun;", 5) == 0)
2004
    {
2005
      if (!multi_process && target_running ())
2006
        {
2007
          fprintf (stderr, "Already debugging a process\n");
2008
          write_enn (own_buf);
2009
          return;
2010
        }
2011
      handle_v_run (own_buf);
2012
      return;
2013
    }
2014
 
2015
  if (strncmp (own_buf, "vKill;", 6) == 0)
2016
    {
2017
      if (!target_running ())
2018
        {
2019
          fprintf (stderr, "No process to kill\n");
2020
          write_enn (own_buf);
2021
          return;
2022
        }
2023
      handle_v_kill (own_buf);
2024
      return;
2025
    }
2026
 
2027
  if (strncmp (own_buf, "vStopped", 8) == 0)
2028
    {
2029
      handle_v_stopped (own_buf);
2030
      return;
2031
    }
2032
 
2033
  /* Otherwise we didn't know what packet it was.  Say we didn't
2034
     understand it.  */
2035
  own_buf[0] = 0;
2036
  return;
2037
}
2038
 
2039
/* Resume inferior and wait for another event.  In non-stop mode,
2040
   don't really wait here, but return immediatelly to the event
2041
   loop.  */
2042
static void
2043
myresume (char *own_buf, int step, int sig)
2044
{
2045
  struct thread_resume resume_info[2];
2046
  int n = 0;
2047
  int valid_cont_thread;
2048
 
2049
  set_desired_inferior (0);
2050
 
2051
  valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
2052
                         && !ptid_equal (cont_thread, minus_one_ptid));
2053
 
2054
  if (step || sig || valid_cont_thread)
2055
    {
2056
      resume_info[0].thread
2057
        = ((struct inferior_list_entry *) current_inferior)->id;
2058
      if (step)
2059
        resume_info[0].kind = resume_step;
2060
      else
2061
        resume_info[0].kind = resume_continue;
2062
      resume_info[0].sig = sig;
2063
      n++;
2064
    }
2065
 
2066
  if (!valid_cont_thread)
2067
    {
2068
      resume_info[n].thread = minus_one_ptid;
2069
      resume_info[n].kind = resume_continue;
2070
      resume_info[n].sig = 0;
2071
      n++;
2072
    }
2073
 
2074
  if (!non_stop)
2075
    enable_async_io ();
2076
 
2077
  (*the_target->resume) (resume_info, n);
2078
 
2079
  if (non_stop)
2080
    write_ok (own_buf);
2081
  else
2082
    {
2083
      last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
2084
      prepare_resume_reply (own_buf, last_ptid, &last_status);
2085
      disable_async_io ();
2086
 
2087
      if (last_status.kind == TARGET_WAITKIND_EXITED
2088
          || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2089
        mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
2090
    }
2091
}
2092
 
2093
/* Callback for for_each_inferior.  Make a new stop reply for each
2094
   stopped thread.  */
2095
 
2096
static int
2097
queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
2098
{
2099
  struct thread_info *thread = (struct thread_info *) entry;
2100
 
2101
  /* For now, assume targets that don't have this callback also don't
2102
     manage the thread's last_status field.  */
2103
  if (the_target->thread_stopped == NULL)
2104
    {
2105
      struct target_waitstatus status;
2106
 
2107
      status.kind = TARGET_WAITKIND_STOPPED;
2108
      status.value.sig = TARGET_SIGNAL_TRAP;
2109
 
2110
      /* Pass the last stop reply back to GDB, but don't notify
2111
         yet.  */
2112
      queue_stop_reply (entry->id, &thread->last_status);
2113
    }
2114
  else
2115
    {
2116
      if (thread_stopped (thread))
2117
        {
2118
          if (debug_threads)
2119
            fprintf (stderr, "Reporting thread %s as already stopped with %s\n",
2120
                     target_pid_to_str (entry->id),
2121
                     target_waitstatus_to_string (&thread->last_status));
2122
 
2123
          /* Pass the last stop reply back to GDB, but don't notify
2124
             yet.  */
2125
          queue_stop_reply (entry->id, &thread->last_status);
2126
        }
2127
    }
2128
 
2129
  return 0;
2130
}
2131
 
2132
/* Set this inferior LWP's state as "want-stopped".  We won't resume
2133
   this LWP until the client gives us another action for it.  */
2134
 
2135
static void
2136
gdb_wants_thread_stopped (struct inferior_list_entry *entry)
2137
{
2138
  struct thread_info *thread = (struct thread_info *) entry;
2139
 
2140
  thread->last_resume_kind = resume_stop;
2141
 
2142
  if (thread->last_status.kind == TARGET_WAITKIND_IGNORE)
2143
    {
2144
      thread->last_status.kind = TARGET_WAITKIND_STOPPED;
2145
      thread->last_status.value.sig = TARGET_SIGNAL_0;
2146
    }
2147
}
2148
 
2149
/* Set all threads' states as "want-stopped".  */
2150
 
2151
static void
2152
gdb_wants_all_threads_stopped (void)
2153
{
2154
  for_each_inferior (&all_threads, gdb_wants_thread_stopped);
2155
}
2156
 
2157
/* Clear the gdb_detached flag of every process.  */
2158
 
2159
static void
2160
gdb_reattached_process (struct inferior_list_entry *entry)
2161
{
2162
  struct process_info *process = (struct process_info *) entry;
2163
 
2164
  process->gdb_detached = 0;
2165
}
2166
 
2167
/* Status handler for the '?' packet.  */
2168
 
2169
static void
2170
handle_status (char *own_buf)
2171
{
2172
  /* GDB is connected, don't forward events to the target anymore.  */
2173
  for_each_inferior (&all_processes, gdb_reattached_process);
2174
 
2175
  /* In non-stop mode, we must send a stop reply for each stopped
2176
     thread.  In all-stop mode, just send one for the first stopped
2177
     thread we find.  */
2178
 
2179
  if (non_stop)
2180
    {
2181
      discard_queued_stop_replies (-1);
2182
      find_inferior (&all_threads, queue_stop_reply_callback, NULL);
2183
 
2184
      /* The first is sent immediatly.  OK is sent if there is no
2185
         stopped thread, which is the same handling of the vStopped
2186
         packet (by design).  */
2187
      send_next_stop_reply (own_buf);
2188
    }
2189
  else
2190
    {
2191
      pause_all (0);
2192
      stabilize_threads ();
2193
      gdb_wants_all_threads_stopped ();
2194
 
2195
      if (all_threads.head)
2196
        {
2197
          struct target_waitstatus status;
2198
 
2199
          status.kind = TARGET_WAITKIND_STOPPED;
2200
          status.value.sig = TARGET_SIGNAL_TRAP;
2201
          prepare_resume_reply (own_buf,
2202
                                all_threads.head->id, &status);
2203
        }
2204
      else
2205
        strcpy (own_buf, "W00");
2206
    }
2207
}
2208
 
2209
static void
2210
gdbserver_version (void)
2211
{
2212
  printf ("GNU gdbserver %s%s\n"
2213
          "Copyright (C) 2010 Free Software Foundation, Inc.\n"
2214
          "gdbserver is free software, covered by the GNU General Public License.\n"
2215
          "This gdbserver was configured as \"%s\"\n",
2216
          PKGVERSION, version, host_name);
2217
}
2218
 
2219
static void
2220
gdbserver_usage (FILE *stream)
2221
{
2222
  fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
2223
           "\tgdbserver [OPTIONS] --attach COMM PID\n"
2224
           "\tgdbserver [OPTIONS] --multi COMM\n"
2225
           "\n"
2226
           "COMM may either be a tty device (for serial debugging), or \n"
2227
           "HOST:PORT to listen for a TCP connection.\n"
2228
           "\n"
2229
           "Options:\n"
2230
           "  --debug               Enable general debugging output.\n"
2231
           "  --remote-debug        Enable remote protocol debugging output.\n"
2232
           "  --version             Display version information and exit.\n"
2233
           "  --wrapper WRAPPER --  Run WRAPPER to start new programs.\n");
2234
  if (REPORT_BUGS_TO[0] && stream == stdout)
2235
    fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
2236
}
2237
 
2238
static void
2239
gdbserver_show_disableable (FILE *stream)
2240
{
2241
  fprintf (stream, "Disableable packets:\n"
2242
           "  vCont       \tAll vCont packets\n"
2243
           "  qC          \tQuerying the current thread\n"
2244
           "  qfThreadInfo\tThread listing\n"
2245
           "  Tthread     \tPassing the thread specifier in the T stop reply packet\n"
2246
           "  threads     \tAll of the above\n");
2247
}
2248
 
2249
 
2250
#undef require_running
2251
#define require_running(BUF)                    \
2252
  if (!target_running ())                       \
2253
    {                                           \
2254
      write_enn (BUF);                          \
2255
      break;                                    \
2256
    }
2257
 
2258
static int
2259
first_thread_of (struct inferior_list_entry *entry, void *args)
2260
{
2261
  int pid = * (int *) args;
2262
 
2263
  if (ptid_get_pid (entry->id) == pid)
2264
    return 1;
2265
 
2266
  return 0;
2267
}
2268
 
2269
static void
2270
kill_inferior_callback (struct inferior_list_entry *entry)
2271
{
2272
  struct process_info *process = (struct process_info *) entry;
2273
  int pid = ptid_get_pid (process->head.id);
2274
 
2275
  kill_inferior (pid);
2276
  discard_queued_stop_replies (pid);
2277
}
2278
 
2279
/* Callback for for_each_inferior to detach or kill the inferior,
2280
   depending on whether we attached to it or not.
2281
   We inform the user whether we're detaching or killing the process
2282
   as this is only called when gdbserver is about to exit.  */
2283
 
2284
static void
2285
detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
2286
{
2287
  struct process_info *process = (struct process_info *) entry;
2288
  int pid = ptid_get_pid (process->head.id);
2289
 
2290
  if (process->attached)
2291
    detach_inferior (pid);
2292
  else
2293
    kill_inferior (pid);
2294
 
2295
  discard_queued_stop_replies (pid);
2296
}
2297
 
2298
/* for_each_inferior callback for detach_or_kill_for_exit to print
2299
   the pids of started inferiors.  */
2300
 
2301
static void
2302
print_started_pid (struct inferior_list_entry *entry)
2303
{
2304
  struct process_info *process = (struct process_info *) entry;
2305
 
2306
  if (! process->attached)
2307
    {
2308
      int pid = ptid_get_pid (process->head.id);
2309
      fprintf (stderr, " %d", pid);
2310
    }
2311
}
2312
 
2313
/* for_each_inferior callback for detach_or_kill_for_exit to print
2314
   the pids of attached inferiors.  */
2315
 
2316
static void
2317
print_attached_pid (struct inferior_list_entry *entry)
2318
{
2319
  struct process_info *process = (struct process_info *) entry;
2320
 
2321
  if (process->attached)
2322
    {
2323
      int pid = ptid_get_pid (process->head.id);
2324
      fprintf (stderr, " %d", pid);
2325
    }
2326
}
2327
 
2328
/* Call this when exiting gdbserver with possible inferiors that need
2329
   to be killed or detached from.  */
2330
 
2331
static void
2332
detach_or_kill_for_exit (void)
2333
{
2334
  /* First print a list of the inferiors we will be killing/detaching.
2335
     This is to assist the user, for example, in case the inferior unexpectedly
2336
     dies after we exit: did we screw up or did the inferior exit on its own?
2337
     Having this info will save some head-scratching.  */
2338
 
2339
  if (have_started_inferiors_p ())
2340
    {
2341
      fprintf (stderr, "Killing process(es):");
2342
      for_each_inferior (&all_processes, print_started_pid);
2343
      fprintf (stderr, "\n");
2344
    }
2345
  if (have_attached_inferiors_p ())
2346
    {
2347
      fprintf (stderr, "Detaching process(es):");
2348
      for_each_inferior (&all_processes, print_attached_pid);
2349
      fprintf (stderr, "\n");
2350
    }
2351
 
2352
  /* Now we can kill or detach the inferiors.  */
2353
 
2354
  for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
2355
}
2356
 
2357
static void
2358
join_inferiors_callback (struct inferior_list_entry *entry)
2359
{
2360
  struct process_info *process = (struct process_info *) entry;
2361
 
2362
  /* If we are attached, then we can exit.  Otherwise, we need to hang
2363
     around doing nothing, until the child is gone.  */
2364
  if (!process->attached)
2365
    join_inferior (ptid_get_pid (process->head.id));
2366
}
2367
 
2368
int
2369
main (int argc, char *argv[])
2370
{
2371
  int bad_attach;
2372
  int pid;
2373
  char *arg_end, *port;
2374
  char **next_arg = &argv[1];
2375
  int multi_mode = 0;
2376
  int attach = 0;
2377
  int was_running;
2378
 
2379
  while (*next_arg != NULL && **next_arg == '-')
2380
    {
2381
      if (strcmp (*next_arg, "--version") == 0)
2382
        {
2383
          gdbserver_version ();
2384
          exit (0);
2385
        }
2386
      else if (strcmp (*next_arg, "--help") == 0)
2387
        {
2388
          gdbserver_usage (stdout);
2389
          exit (0);
2390
        }
2391
      else if (strcmp (*next_arg, "--attach") == 0)
2392
        attach = 1;
2393
      else if (strcmp (*next_arg, "--multi") == 0)
2394
        multi_mode = 1;
2395
      else if (strcmp (*next_arg, "--wrapper") == 0)
2396
        {
2397
          next_arg++;
2398
 
2399
          wrapper_argv = next_arg;
2400
          while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
2401
            next_arg++;
2402
 
2403
          if (next_arg == wrapper_argv || *next_arg == NULL)
2404
            {
2405
              gdbserver_usage (stderr);
2406
              exit (1);
2407
            }
2408
 
2409
          /* Consume the "--".  */
2410
          *next_arg = NULL;
2411
        }
2412
      else if (strcmp (*next_arg, "--debug") == 0)
2413
        debug_threads = 1;
2414
      else if (strcmp (*next_arg, "--remote-debug") == 0)
2415
        remote_debug = 1;
2416
      else if (strcmp (*next_arg, "--disable-packet") == 0)
2417
        {
2418
          gdbserver_show_disableable (stdout);
2419
          exit (0);
2420
        }
2421
      else if (strncmp (*next_arg,
2422
                        "--disable-packet=",
2423
                        sizeof ("--disable-packet=") - 1) == 0)
2424
        {
2425
          char *packets, *tok;
2426
 
2427
          packets = *next_arg += sizeof ("--disable-packet=") - 1;
2428
          for (tok = strtok (packets, ",");
2429
               tok != NULL;
2430
               tok = strtok (NULL, ","))
2431
            {
2432
              if (strcmp ("vCont", tok) == 0)
2433
                disable_packet_vCont = 1;
2434
              else if (strcmp ("Tthread", tok) == 0)
2435
                disable_packet_Tthread = 1;
2436
              else if (strcmp ("qC", tok) == 0)
2437
                disable_packet_qC = 1;
2438
              else if (strcmp ("qfThreadInfo", tok) == 0)
2439
                disable_packet_qfThreadInfo = 1;
2440
              else if (strcmp ("threads", tok) == 0)
2441
                {
2442
                  disable_packet_vCont = 1;
2443
                  disable_packet_Tthread = 1;
2444
                  disable_packet_qC = 1;
2445
                  disable_packet_qfThreadInfo = 1;
2446
                }
2447
              else
2448
                {
2449
                  fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
2450
                           tok);
2451
                  gdbserver_show_disableable (stderr);
2452
                  exit (1);
2453
                }
2454
            }
2455
        }
2456
      else
2457
        {
2458
          fprintf (stderr, "Unknown argument: %s\n", *next_arg);
2459
          exit (1);
2460
        }
2461
 
2462
      next_arg++;
2463
      continue;
2464
    }
2465
 
2466
  if (setjmp (toplevel))
2467
    {
2468
      fprintf (stderr, "Exiting\n");
2469
      exit (1);
2470
    }
2471
 
2472
  port = *next_arg;
2473
  next_arg++;
2474
  if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
2475
    {
2476
      gdbserver_usage (stderr);
2477
      exit (1);
2478
    }
2479
 
2480
  bad_attach = 0;
2481
  pid = 0;
2482
 
2483
  /* --attach used to come after PORT, so allow it there for
2484
       compatibility.  */
2485
  if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
2486
    {
2487
      attach = 1;
2488
      next_arg++;
2489
    }
2490
 
2491
  if (attach
2492
      && (*next_arg == NULL
2493
          || (*next_arg)[0] == '\0'
2494
          || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
2495
          || *arg_end != '\0'
2496
          || next_arg[1] != NULL))
2497
    bad_attach = 1;
2498
 
2499
  if (bad_attach)
2500
    {
2501
      gdbserver_usage (stderr);
2502
      exit (1);
2503
    }
2504
 
2505
  initialize_inferiors ();
2506
  initialize_async_io ();
2507
  initialize_low ();
2508
  if (target_supports_tracepoints ())
2509
    initialize_tracepoint ();
2510
 
2511
  own_buf = xmalloc (PBUFSIZ + 1);
2512
  mem_buf = xmalloc (PBUFSIZ);
2513
 
2514
  if (pid == 0 && *next_arg != NULL)
2515
    {
2516
      int i, n;
2517
 
2518
      n = argc - (next_arg - argv);
2519
      program_argv = xmalloc (sizeof (char *) * (n + 1));
2520
      for (i = 0; i < n; i++)
2521
        program_argv[i] = xstrdup (next_arg[i]);
2522
      program_argv[i] = NULL;
2523
 
2524
      /* Wait till we are at first instruction in program.  */
2525
      start_inferior (program_argv);
2526
 
2527
      /* We are now (hopefully) stopped at the first instruction of
2528
         the target process.  This assumes that the target process was
2529
         successfully created.  */
2530
    }
2531
  else if (pid != 0)
2532
    {
2533
      if (attach_inferior (pid) == -1)
2534
        error ("Attaching not supported on this target");
2535
 
2536
      /* Otherwise succeeded.  */
2537
    }
2538
  else
2539
    {
2540
      last_status.kind = TARGET_WAITKIND_EXITED;
2541
      last_status.value.integer = 0;
2542
      last_ptid = minus_one_ptid;
2543
    }
2544
 
2545
  /* Don't report shared library events on the initial connection,
2546
     even if some libraries are preloaded.  Avoids the "stopped by
2547
     shared library event" notice on gdb side.  */
2548
  dlls_changed = 0;
2549
 
2550
  if (setjmp (toplevel))
2551
    {
2552
      detach_or_kill_for_exit ();
2553
      exit (1);
2554
    }
2555
 
2556
  if (last_status.kind == TARGET_WAITKIND_EXITED
2557
      || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2558
    was_running = 0;
2559
  else
2560
    was_running = 1;
2561
 
2562
  if (!was_running && !multi_mode)
2563
    {
2564
      fprintf (stderr, "No program to debug.  GDBserver exiting.\n");
2565
      exit (1);
2566
    }
2567
 
2568
  while (1)
2569
    {
2570
      noack_mode = 0;
2571
      multi_process = 0;
2572
      /* Be sure we're out of tfind mode.  */
2573
      current_traceframe = -1;
2574
 
2575
      remote_open (port);
2576
 
2577
      if (setjmp (toplevel) != 0)
2578
        {
2579
          /* An error occurred.  */
2580
          if (response_needed)
2581
            {
2582
              write_enn (own_buf);
2583
              putpkt (own_buf);
2584
            }
2585
        }
2586
 
2587
      /* Wait for events.  This will return when all event sources are
2588
         removed from the event loop.  */
2589
      start_event_loop ();
2590
 
2591
      /* If an exit was requested (using the "monitor exit" command),
2592
         terminate now.  The only other way to get here is for
2593
         getpkt to fail; close the connection and reopen it at the
2594
         top of the loop.  */
2595
 
2596
      if (exit_requested)
2597
        {
2598
          detach_or_kill_for_exit ();
2599
          exit (0);
2600
        }
2601
 
2602
      fprintf (stderr,
2603
               "Remote side has terminated connection.  "
2604
               "GDBserver will reopen the connection.\n");
2605
 
2606
      if (tracing)
2607
        {
2608
          if (disconnected_tracing)
2609
            {
2610
              /* Try to enable non-stop/async mode, so we we can both
2611
                 wait for an async socket accept, and handle async
2612
                 target events simultaneously.  There's also no point
2613
                 either in having the target always stop all threads,
2614
                 when we're going to pass signals down without
2615
                 informing GDB.  */
2616
              if (!non_stop)
2617
                {
2618
                  if (start_non_stop (1))
2619
                    non_stop = 1;
2620
 
2621
                  /* Detaching implicitly resumes all threads; simply
2622
                     disconnecting does not.  */
2623
                }
2624
            }
2625
          else
2626
            {
2627
              fprintf (stderr,
2628
                       "Disconnected tracing disabled; stopping trace run.\n");
2629
              stop_tracing ();
2630
            }
2631
        }
2632
    }
2633
}
2634
 
2635
/* Event loop callback that handles a serial event.  The first byte in
2636
   the serial buffer gets us here.  We expect characters to arrive at
2637
   a brisk pace, so we read the rest of the packet with a blocking
2638
   getpkt call.  */
2639
 
2640
static int
2641
process_serial_event (void)
2642
{
2643
  char ch;
2644
  int i = 0;
2645
  int signal;
2646
  unsigned int len;
2647
  CORE_ADDR mem_addr;
2648
  int pid;
2649
  unsigned char sig;
2650
  int packet_len;
2651
  int new_packet_len = -1;
2652
 
2653
  /* Used to decide when gdbserver should exit in
2654
     multi-mode/remote.  */
2655
  static int have_ran = 0;
2656
 
2657
  if (!have_ran)
2658
    have_ran = target_running ();
2659
 
2660
  disable_async_io ();
2661
 
2662
  response_needed = 0;
2663
  packet_len = getpkt (own_buf);
2664
  if (packet_len <= 0)
2665
    {
2666
      remote_close ();
2667
      /* Force an event loop break.  */
2668
      return -1;
2669
    }
2670
  response_needed = 1;
2671
 
2672
  i = 0;
2673
  ch = own_buf[i++];
2674
  switch (ch)
2675
    {
2676
    case 'q':
2677
      handle_query (own_buf, packet_len, &new_packet_len);
2678
      break;
2679
    case 'Q':
2680
      handle_general_set (own_buf);
2681
      break;
2682
    case 'D':
2683
      require_running (own_buf);
2684
 
2685
      if (multi_process)
2686
        {
2687
          i++; /* skip ';' */
2688
          pid = strtol (&own_buf[i], NULL, 16);
2689
        }
2690
      else
2691
        pid =
2692
          ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
2693
 
2694
      if (tracing && disconnected_tracing)
2695
        {
2696
          struct thread_resume resume_info;
2697
          struct process_info *process = find_process_pid (pid);
2698
 
2699
          if (process == NULL)
2700
            {
2701
              write_enn (own_buf);
2702
              break;
2703
            }
2704
 
2705
          fprintf (stderr,
2706
                   "Disconnected tracing in effect, "
2707
                   "leaving gdbserver attached to the process\n");
2708
 
2709
          /* Make sure we're in non-stop/async mode, so we we can both
2710
             wait for an async socket accept, and handle async target
2711
             events simultaneously.  There's also no point either in
2712
             having the target stop all threads, when we're going to
2713
             pass signals down without informing GDB.  */
2714
          if (!non_stop)
2715
            {
2716
              if (debug_threads)
2717
                fprintf (stderr, "Forcing non-stop mode\n");
2718
 
2719
              non_stop = 1;
2720
              start_non_stop (1);
2721
            }
2722
 
2723
          process->gdb_detached = 1;
2724
 
2725
          /* Detaching implicitly resumes all threads.  */
2726
          resume_info.thread = minus_one_ptid;
2727
          resume_info.kind = resume_continue;
2728
          resume_info.sig = 0;
2729
          (*the_target->resume) (&resume_info, 1);
2730
 
2731
          write_ok (own_buf);
2732
          break; /* from switch/case */
2733
        }
2734
 
2735
      fprintf (stderr, "Detaching from process %d\n", pid);
2736
      stop_tracing ();
2737
      if (detach_inferior (pid) != 0)
2738
        write_enn (own_buf);
2739
      else
2740
        {
2741
          discard_queued_stop_replies (pid);
2742
          write_ok (own_buf);
2743
 
2744
          if (extended_protocol)
2745
            {
2746
              /* Treat this like a normal program exit.  */
2747
              last_status.kind = TARGET_WAITKIND_EXITED;
2748
              last_status.value.integer = 0;
2749
              last_ptid = pid_to_ptid (pid);
2750
 
2751
              current_inferior = NULL;
2752
            }
2753
          else
2754
            {
2755
              putpkt (own_buf);
2756
              remote_close ();
2757
 
2758
              /* If we are attached, then we can exit.  Otherwise, we
2759
                 need to hang around doing nothing, until the child is
2760
                 gone.  */
2761
              for_each_inferior (&all_processes,
2762
                                 join_inferiors_callback);
2763
              exit (0);
2764
            }
2765
        }
2766
      break;
2767
    case '!':
2768
      extended_protocol = 1;
2769
      write_ok (own_buf);
2770
      break;
2771
    case '?':
2772
      handle_status (own_buf);
2773
      break;
2774
    case 'H':
2775
      if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
2776
        {
2777
          ptid_t gdb_id, thread_id;
2778
          int pid;
2779
 
2780
          require_running (own_buf);
2781
 
2782
          gdb_id = read_ptid (&own_buf[2], NULL);
2783
 
2784
          pid = ptid_get_pid (gdb_id);
2785
 
2786
          if (ptid_equal (gdb_id, null_ptid)
2787
              || ptid_equal (gdb_id, minus_one_ptid))
2788
            thread_id = null_ptid;
2789
          else if (pid != 0
2790
                   && ptid_equal (pid_to_ptid (pid),
2791
                                  gdb_id))
2792
            {
2793
              struct thread_info *thread =
2794
                (struct thread_info *) find_inferior (&all_threads,
2795
                                                      first_thread_of,
2796
                                                      &pid);
2797
              if (!thread)
2798
                {
2799
                  write_enn (own_buf);
2800
                  break;
2801
                }
2802
 
2803
              thread_id = ((struct inferior_list_entry *)thread)->id;
2804
            }
2805
          else
2806
            {
2807
              thread_id = gdb_id_to_thread_id (gdb_id);
2808
              if (ptid_equal (thread_id, null_ptid))
2809
                {
2810
                  write_enn (own_buf);
2811
                  break;
2812
                }
2813
            }
2814
 
2815
          if (own_buf[1] == 'g')
2816
            {
2817
              if (ptid_equal (thread_id, null_ptid))
2818
                {
2819
                  /* GDB is telling us to choose any thread.  Check if
2820
                     the currently selected thread is still valid. If
2821
                     it is not, select the first available.  */
2822
                  struct thread_info *thread =
2823
                    (struct thread_info *) find_inferior_id (&all_threads,
2824
                                                             general_thread);
2825
                  if (thread == NULL)
2826
                    thread_id = all_threads.head->id;
2827
                }
2828
 
2829
              general_thread = thread_id;
2830
              set_desired_inferior (1);
2831
            }
2832
          else if (own_buf[1] == 'c')
2833
            cont_thread = thread_id;
2834
          else if (own_buf[1] == 's')
2835
            step_thread = thread_id;
2836
 
2837
          write_ok (own_buf);
2838
        }
2839
      else
2840
        {
2841
          /* Silently ignore it so that gdb can extend the protocol
2842
             without compatibility headaches.  */
2843
          own_buf[0] = '\0';
2844
        }
2845
      break;
2846
    case 'g':
2847
      require_running (own_buf);
2848
      if (current_traceframe >= 0)
2849
        {
2850
          struct regcache *regcache = new_register_cache ();
2851
 
2852
          if (fetch_traceframe_registers (current_traceframe,
2853
                                          regcache, -1) == 0)
2854
            registers_to_string (regcache, own_buf);
2855
          else
2856
            write_enn (own_buf);
2857
          free_register_cache (regcache);
2858
        }
2859
      else
2860
        {
2861
          struct regcache *regcache;
2862
 
2863
          set_desired_inferior (1);
2864
          regcache = get_thread_regcache (current_inferior, 1);
2865
          registers_to_string (regcache, own_buf);
2866
        }
2867
      break;
2868
    case 'G':
2869
      require_running (own_buf);
2870
      if (current_traceframe >= 0)
2871
        write_enn (own_buf);
2872
      else
2873
        {
2874
          struct regcache *regcache;
2875
 
2876
          set_desired_inferior (1);
2877
          regcache = get_thread_regcache (current_inferior, 1);
2878
          registers_from_string (regcache, &own_buf[1]);
2879
          write_ok (own_buf);
2880
        }
2881
      break;
2882
    case 'm':
2883
      require_running (own_buf);
2884
      decode_m_packet (&own_buf[1], &mem_addr, &len);
2885
      if (read_memory (mem_addr, mem_buf, len) == 0)
2886
        convert_int_to_ascii (mem_buf, own_buf, len);
2887
      else
2888
        write_enn (own_buf);
2889
      break;
2890
    case 'M':
2891
      require_running (own_buf);
2892
      decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf);
2893
      if (write_memory (mem_addr, mem_buf, len) == 0)
2894
        write_ok (own_buf);
2895
      else
2896
        write_enn (own_buf);
2897
      break;
2898
    case 'X':
2899
      require_running (own_buf);
2900
      if (decode_X_packet (&own_buf[1], packet_len - 1,
2901
                           &mem_addr, &len, &mem_buf) < 0
2902
          || write_memory (mem_addr, mem_buf, len) != 0)
2903
        write_enn (own_buf);
2904
      else
2905
        write_ok (own_buf);
2906
      break;
2907
    case 'C':
2908
      require_running (own_buf);
2909
      convert_ascii_to_int (own_buf + 1, &sig, 1);
2910
      if (target_signal_to_host_p (sig))
2911
        signal = target_signal_to_host (sig);
2912
      else
2913
        signal = 0;
2914
      myresume (own_buf, 0, signal);
2915
      break;
2916
    case 'S':
2917
      require_running (own_buf);
2918
      convert_ascii_to_int (own_buf + 1, &sig, 1);
2919
      if (target_signal_to_host_p (sig))
2920
        signal = target_signal_to_host (sig);
2921
      else
2922
        signal = 0;
2923
      myresume (own_buf, 1, signal);
2924
      break;
2925
    case 'c':
2926
      require_running (own_buf);
2927
      signal = 0;
2928
      myresume (own_buf, 0, signal);
2929
      break;
2930
    case 's':
2931
      require_running (own_buf);
2932
      signal = 0;
2933
      myresume (own_buf, 1, signal);
2934
      break;
2935
    case 'Z':  /* insert_ ... */
2936
      /* Fallthrough.  */
2937
    case 'z':  /* remove_ ... */
2938
      {
2939
        char *lenptr;
2940
        char *dataptr;
2941
        CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
2942
        int len = strtol (lenptr + 1, &dataptr, 16);
2943
        char type = own_buf[1];
2944
        int res;
2945
        const int insert = ch == 'Z';
2946
 
2947
        /* Default to unrecognized/unsupported.  */
2948
        res = 1;
2949
        switch (type)
2950
          {
2951
          case '0': /* software-breakpoint */
2952
          case '1': /* hardware-breakpoint */
2953
          case '2': /* write watchpoint */
2954
          case '3': /* read watchpoint */
2955
          case '4': /* access watchpoint */
2956
            require_running (own_buf);
2957
            if (insert && the_target->insert_point != NULL)
2958
              res = (*the_target->insert_point) (type, addr, len);
2959
            else if (!insert && the_target->remove_point != NULL)
2960
              res = (*the_target->remove_point) (type, addr, len);
2961
            break;
2962
          default:
2963
            break;
2964
          }
2965
 
2966
        if (res == 0)
2967
          write_ok (own_buf);
2968
        else if (res == 1)
2969
          /* Unsupported.  */
2970
          own_buf[0] = '\0';
2971
        else
2972
          write_enn (own_buf);
2973
        break;
2974
      }
2975
    case 'k':
2976
      response_needed = 0;
2977
      if (!target_running ())
2978
        /* The packet we received doesn't make sense - but we can't
2979
           reply to it, either.  */
2980
        return 0;
2981
 
2982
      fprintf (stderr, "Killing all inferiors\n");
2983
      for_each_inferior (&all_processes, kill_inferior_callback);
2984
 
2985
      /* When using the extended protocol, we wait with no program
2986
         running.  The traditional protocol will exit instead.  */
2987
      if (extended_protocol)
2988
        {
2989
          last_status.kind = TARGET_WAITKIND_EXITED;
2990
          last_status.value.sig = TARGET_SIGNAL_KILL;
2991
          return 0;
2992
        }
2993
      else
2994
        exit (0);
2995
 
2996
    case 'T':
2997
      {
2998
        ptid_t gdb_id, thread_id;
2999
 
3000
        require_running (own_buf);
3001
 
3002
        gdb_id = read_ptid (&own_buf[1], NULL);
3003
        thread_id = gdb_id_to_thread_id (gdb_id);
3004
        if (ptid_equal (thread_id, null_ptid))
3005
          {
3006
            write_enn (own_buf);
3007
            break;
3008
          }
3009
 
3010
        if (mythread_alive (thread_id))
3011
          write_ok (own_buf);
3012
        else
3013
          write_enn (own_buf);
3014
      }
3015
      break;
3016
    case 'R':
3017
      response_needed = 0;
3018
 
3019
      /* Restarting the inferior is only supported in the extended
3020
         protocol.  */
3021
      if (extended_protocol)
3022
        {
3023
          if (target_running ())
3024
            for_each_inferior (&all_processes,
3025
                               kill_inferior_callback);
3026
          fprintf (stderr, "GDBserver restarting\n");
3027
 
3028
          /* Wait till we are at 1st instruction in prog.  */
3029
          if (program_argv != NULL)
3030
            start_inferior (program_argv);
3031
          else
3032
            {
3033
              last_status.kind = TARGET_WAITKIND_EXITED;
3034
              last_status.value.sig = TARGET_SIGNAL_KILL;
3035
            }
3036
          return 0;
3037
        }
3038
      else
3039
        {
3040
          /* It is a request we don't understand.  Respond with an
3041
             empty packet so that gdb knows that we don't support this
3042
             request.  */
3043
          own_buf[0] = '\0';
3044
          break;
3045
        }
3046
    case 'v':
3047
      /* Extended (long) request.  */
3048
      handle_v_requests (own_buf, packet_len, &new_packet_len);
3049
      break;
3050
 
3051
    default:
3052
      /* It is a request we don't understand.  Respond with an empty
3053
         packet so that gdb knows that we don't support this
3054
         request.  */
3055
      own_buf[0] = '\0';
3056
      break;
3057
    }
3058
 
3059
  if (new_packet_len != -1)
3060
    putpkt_binary (own_buf, new_packet_len);
3061
  else
3062
    putpkt (own_buf);
3063
 
3064
  response_needed = 0;
3065
 
3066
  if (!extended_protocol && have_ran && !target_running ())
3067
    {
3068
      /* In non-stop, defer exiting until GDB had a chance to query
3069
         the whole vStopped list (until it gets an OK).  */
3070
      if (!notif_queue)
3071
        {
3072
          fprintf (stderr, "GDBserver exiting\n");
3073
          remote_close ();
3074
          exit (0);
3075
        }
3076
    }
3077
 
3078
  if (exit_requested)
3079
    return -1;
3080
 
3081
  return 0;
3082
}
3083
 
3084
/* Event-loop callback for serial events.  */
3085
 
3086
int
3087
handle_serial_event (int err, gdb_client_data client_data)
3088
{
3089
  if (debug_threads)
3090
    fprintf (stderr, "handling possible serial event\n");
3091
 
3092
  /* Really handle it.  */
3093
  if (process_serial_event () < 0)
3094
    return -1;
3095
 
3096
  /* Be sure to not change the selected inferior behind GDB's back.
3097
     Important in the non-stop mode asynchronous protocol.  */
3098
  set_desired_inferior (1);
3099
 
3100
  return 0;
3101
}
3102
 
3103
/* Event-loop callback for target events.  */
3104
 
3105
int
3106
handle_target_event (int err, gdb_client_data client_data)
3107
{
3108
  if (debug_threads)
3109
    fprintf (stderr, "handling possible target event\n");
3110
 
3111
  last_ptid = mywait (minus_one_ptid, &last_status,
3112
                      TARGET_WNOHANG, 1);
3113
 
3114
  if (last_status.kind != TARGET_WAITKIND_IGNORE)
3115
    {
3116
      int pid = ptid_get_pid (last_ptid);
3117
      struct process_info *process = find_process_pid (pid);
3118
      int forward_event = !gdb_connected () || process->gdb_detached;
3119
 
3120
      if (last_status.kind == TARGET_WAITKIND_EXITED
3121
          || last_status.kind == TARGET_WAITKIND_SIGNALLED)
3122
        {
3123
          mark_breakpoints_out (process);
3124
          mourn_inferior (process);
3125
        }
3126
 
3127
      if (forward_event)
3128
        {
3129
          if (!target_running ())
3130
            {
3131
              /* The last process exited.  We're done.  */
3132
              exit (0);
3133
            }
3134
 
3135
          if (last_status.kind == TARGET_WAITKIND_STOPPED)
3136
            {
3137
              /* A thread stopped with a signal, but gdb isn't
3138
                 connected to handle it.  Pass it down to the
3139
                 inferior, as if it wasn't being traced.  */
3140
              struct thread_resume resume_info;
3141
 
3142
              if (debug_threads)
3143
                fprintf (stderr,
3144
                         "GDB not connected; forwarding event %d for [%s]\n",
3145
                         (int) last_status.kind,
3146
                         target_pid_to_str (last_ptid));
3147
 
3148
              resume_info.thread = last_ptid;
3149
              resume_info.kind = resume_continue;
3150
              resume_info.sig = last_status.value.sig;
3151
              (*the_target->resume) (&resume_info, 1);
3152
            }
3153
          else if (debug_threads)
3154
            fprintf (stderr, "GDB not connected; ignoring event %d for [%s]\n",
3155
                     (int) last_status.kind,
3156
                     target_pid_to_str (last_ptid));
3157
        }
3158
      else
3159
        {
3160
          /* Something interesting.  Tell GDB about it.  */
3161
          push_event (last_ptid, &last_status);
3162
        }
3163
    }
3164
 
3165
  /* Be sure to not change the selected inferior behind GDB's back.
3166
     Important in the non-stop mode asynchronous protocol.  */
3167
  set_desired_inferior (1);
3168
 
3169
  return 0;
3170
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.