/* Remote utility routines for the remote server for GDB.
- Copyright (C) 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GDB.
Boston, MA 02110-1301, USA. */
#include "server.h"
-#if HAVE_TERMINAL_H
#include "terminal.h"
-#endif
#include <stdio.h>
#include <string.h>
#if HAVE_SYS_IOCTL_H
extern int using_threads;
extern int debug_threads;
+#ifdef USE_WIN32API
+# define read(fd, buf, len) recv (fd, buf, len, 0)
+# define write(fd, buf, len) send (fd, buf, len, 0)
+#endif
+
/* Open a connection to a remote debugger.
NAME is the filename used for communication. */
|| listen (tmp_desc, 1))
perror_with_name ("Can't bind address");
+ /* If port is zero, a random port will be selected, and the
+ fprintf below needs to know what port was selected. */
+ if (port == 0)
+ {
+ socklen_t len = sizeof (sockaddr);
+ if (getsockname (tmp_desc, (struct sockaddr *) &sockaddr, &len) < 0
+ || len < sizeof (sockaddr))
+ perror_with_name ("Can't determine port");
+ port = ntohs (sockaddr.sin_port);
+ }
+
fprintf (stderr, "Listening on port %d\n", port);
fflush (stderr);
{
int cc;
- if (send (remote_desc, buf2, p - buf2, 0) != p - buf2)
+ if (write (remote_desc, buf2, p - buf2) != p - buf2)
{
perror ("putpkt(write)");
return -1;
fprintf (stderr, "putpkt (\"%s\"); [looking for ack]\n", buf2);
fflush (stderr);
}
- cc = recv (remote_desc, buf3, 1, 0);
+ cc = read (remote_desc, buf3, 1);
if (remote_debug)
{
fprintf (stderr, "[received '%c' (0x%x)]\n", buf3[0], buf3[0]);
/* Check for an input interrupt while we're here. */
if (buf3[0] == '\003')
- (*the_target->send_signal) (SIGINT);
+ (*the_target->request_interrupt) ();
}
while (buf3[0] != '+');
/* Come here when we get an input interrupt from the remote side. This
interrupt should only be active while we are waiting for the child to do
something. About the only thing that should come through is a ^C, which
- will cause us to send a SIGINT to the child. */
+ will cause us to request child interruption. */
static void
input_interrupt (int unused)
int cc;
char c = 0;
- cc = recv (remote_desc, &c, 1, 0);
+ cc = read (remote_desc, &c, 1);
if (cc != 1 || c != '\003')
{
return;
}
- (*the_target->send_signal) (SIGINT);
+ (*the_target->request_interrupt) ();
}
}
#endif
if (bufcnt-- > 0)
return *bufp++;
- bufcnt = recv (remote_desc, buf, sizeof (buf), 0);
+ bufcnt = read (remote_desc, buf, sizeof (buf));
if (bufcnt <= 0)
{
fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
(c1 << 4) + c2, csum, buf);
- send (remote_desc, "-", 1, 0);
+ write (remote_desc, "-", 1);
}
if (remote_debug)
fflush (stderr);
}
- send (remote_desc, "+", 1, 0);
+ write (remote_desc, "+", 1);
if (remote_debug)
{
return 1;
}
+
+void
+monitor_output (char *msg)
+{
+ char *buf = malloc (strlen (msg) * 2 + 2);
+
+ buf[0] = 'O';
+ hexify (buf + 1, msg, 0);
+
+ putpkt (buf);
+ free (buf);
+}