2002-01-17 Daniel Jacobowitz <drow@mvista.com>

* low-hppabsd.c (myattach): New function, returning -1.
        * low-lynx.c (myattach): Likewise.
        * low-nbsd.c (myattach): Likewise.
        * low-sim.c (myattach): Likewise.
        * low-sparc.c (myattach): Likewise.
        * low-sun3.c (myattach): Likewise.

        * low-linux.c (myattach): New function.

        * server.c (attach_inferior): New function.
        (main): Handle "--attach".
This commit is contained in:
Daniel Jacobowitz 2002-01-17 20:46:16 +00:00
parent 55baa95bb2
commit 45b7b34510
9 changed files with 140 additions and 9 deletions

View File

@ -1,3 +1,17 @@
2002-01-17 Daniel Jacobowitz <drow@mvista.com>
* low-hppabsd.c (myattach): New function, returning -1.
* low-lynx.c (myattach): Likewise.
* low-nbsd.c (myattach): Likewise.
* low-sim.c (myattach): Likewise.
* low-sparc.c (myattach): Likewise.
* low-sun3.c (myattach): Likewise.
* low-linux.c (myattach): New function.
* server.c (attach_inferior): New function.
(main): Handle "--attach".
2002-01-16 Andrew Cagney <ac131313@redhat.com>
* MAINTAINERS (language support): Daniel Jacobwitz is C++

View File

@ -81,6 +81,13 @@ kill_inferior (void)
/*************inferior_died ();****VK**************/
}
/* Attaching is not supported. */
int
myattach (int pid)
{
return -1;
}
/* Return nonzero if the given thread is still alive. */
int
mythread_alive (int pid)

View File

@ -78,6 +78,23 @@ create_inferior (char *program, char **allargs)
return pid;
}
/* Attach to an inferior process. */
int
myattach (int pid)
{
if (ptrace (PTRACE_ATTACH, pid, 0, 0) != 0)
{
fprintf (stderr, "Cannot attach to process %d: %s (%d)\n", pid,
errno < sys_nerr ? sys_errlist[errno] : "unknown error",
errno);
fflush (stderr);
_exit (0177);
}
return 0;
}
/* Kill the inferior process. Make us have no inferior. */
void

View File

@ -87,6 +87,13 @@ create_inferior (char *program, char **allargs)
return pid;
}
/* Attaching is not supported. */
int
myattach (int pid)
{
return -1;
}
/* Kill the inferior process. Make us have no inferior. */
void

View File

@ -145,6 +145,13 @@ create_inferior (char *program, char **allargs)
return pid;
}
/* Attaching is not supported. */
int
myattach (int pid)
{
return -1;
}
/* Kill the inferior process. Make us have no inferior. */
void

View File

@ -139,6 +139,13 @@ create_inferior (char *program, char **argv)
return pid;
}
/* Attaching is not supported. */
int
myattach (int pid)
{
return -1;
}
/* Kill the inferior process. Make us have no inferior. */
void

View File

@ -75,6 +75,13 @@ create_inferior (char *program, char **allargs)
return pid;
}
/* Attaching is not supported. */
int
myattach (int pid)
{
return -1;
}
/* Kill the inferior process. Make us have no inferior. */
void

View File

@ -72,6 +72,13 @@ create_inferior (char *program, char **allargs)
return pid;
}
/* Attaching is not supported. */
int
myattach (int pid)
{
return -1;
}
/* Kill the inferior process. Make us have no inferior. */
void

View File

@ -39,6 +39,21 @@ start_inferior (char *argv[], char *statusptr)
return mywait (statusptr);
}
static int
attach_inferior (int pid, char *statusptr, unsigned char *sigptr)
{
/* myattach should return -1 if attaching is unsupported,
0 if it succeeded, and call error() otherwise. */
if (myattach (pid) != 0)
return -1;
inferior_pid = pid;
*sigptr = mywait (statusptr);
return 0;
}
extern int remote_debug;
int
@ -49,6 +64,10 @@ main (int argc, char *argv[])
unsigned char signal;
unsigned int len;
CORE_ADDR mem_addr;
int bad_attach = 0;
int pid = 0;
int attached = 0;
char *arg_end;
if (setjmp (toplevel))
{
@ -56,15 +75,44 @@ main (int argc, char *argv[])
exit (1);
}
if (argc < 3)
error ("Usage: gdbserver tty prog [args ...]");
if (argc >= 3 && strcmp (argv[2], "--attach") == 0)
{
if (argc == 4
&& argv[3] != '\0'
&& (pid = strtoul (argv[3], &arg_end, 10)) != 0
&& *arg_end == '\0')
{
;
}
else
bad_attach = 1;
}
if (argc < 3 || bad_attach)
error ("Usage:\tgdbserver tty prog [args ...]\n"
"\tgdbserver tty --attach pid");
initialize_low ();
/* Wait till we are at first instruction in program. */
signal = start_inferior (&argv[2], &status);
if (pid == 0)
{
/* Wait till we are at first instruction in program. */
signal = start_inferior (&argv[2], &status);
/* We are now stopped at the first instruction of the target process */
/* We are now stopped at the first instruction of the target process */
}
else
{
switch (attach_inferior (pid, &status, &signal))
{
case -1:
error ("Attaching not supported on this target");
break;
default:
attached = 1;
break;
}
}
while (1)
{
@ -83,8 +131,18 @@ main (int argc, char *argv[])
remote_debug = !remote_debug;
break;
case '!':
extended_protocol = 1;
prepare_resume_reply (own_buf, status, signal);
if (attached == 0)
{
extended_protocol = 1;
prepare_resume_reply (own_buf, status, signal);
}
else
{
/* We can not use the extended protocol if we are
attached, because we can not restart the running
program. So return unrecognized. */
own_buf[0] = '\0';
}
break;
case '?':
prepare_resume_reply (own_buf, status, signal);
@ -250,8 +308,8 @@ main (int argc, char *argv[])
}
else
{
fprintf (stderr, "Remote side has terminated connection. GDBserver will reopen the connection.\n");
fprintf (stderr, "Remote side has terminated connection. "
"GDBserver will reopen the connection.\n");
remote_close ();
}
}