* [PATCH] Add remote P packet handling to GDBSERVER
@ 2001-05-15 18:21 John S. Kallal
2001-06-27 21:10 ` Andrew Cagney
[not found] ` <3B4BDA51.5000902@cygnus.com>
0 siblings, 2 replies; 3+ messages in thread
From: John S. Kallal @ 2001-05-15 18:21 UTC (permalink / raw)
To: gdb-patches
The following patch add 'P' packet handling to GDBSERVER
and does some code clean-up. This patch replaces my
GDBSERVER patch of April 26 at:
http://sources.redhat.com/ml/gdb-patches/2001-04/msg00256.html
2001-05-15 John S Kallal <jskallal@home.com>
* remote-utils.c (write_ok) : Changed to call standard function
strcpy(). (write_enn) ditto.
* remote-utils.c (remote_open) : Changed to call with const pointer.
(putpkt) ditto. ( convert_int_to_ascii) ditto.
* remote-utils.c (input_interrupt) : Added unused calling
variable per standards.
* remote-utils.c (prepare_resume_reply) : Moved global variable
to function local scope.
* remote-utils.c (do_P_packet): New function.
* server.h : Adjusted to match above changes.
* server.c (main): Removed unneeded variable i. Added case for
for detection and handling a 'P' packet. Added some comments
and some code reformating.
diff -c -r ../gdb+dejagnu-20010515-org/gdb/gdbserver/remote-utils.c gdb/gdbserver/remote-utils.c
*** ../gdb+dejagnu-20010515-org/gdb/gdbserver/remote-utils.c Tue Mar 6 03:21:44 2001
--- gdb/gdbserver/remote-utils.c Tue May 15 13:05:37 2001
***************
*** 42,48 ****
NAME is the filename used for communication. */
void
! remote_open (char *name)
{
int save_fcntl_flags;
--- 42,48 ----
NAME is the filename used for communication. */
void
! remote_open (const char *name)
{
int save_fcntl_flags;
***************
*** 195,201 ****
The data of the packet is in BUF. Returns >= 0 on success, -1 otherwise. */
int
! putpkt (char *buf)
{
int i;
unsigned char csum = 0;
--- 195,201 ----
The data of the packet is in BUF. Returns >= 0 on success, -1 otherwise. */
int
! putpkt (const char *buf)
{
int i;
unsigned char csum = 0;
***************
*** 259,265 ****
will cause us to send a SIGINT to the child. */
static void
! input_interrupt (void)
{
int cc;
char c;
--- 259,265 ----
will cause us to send a SIGINT to the child. */
static void
! input_interrupt (int unused)
{
int cc;
char c;
***************
*** 378,399 ****
void
write_ok (char *buf)
{
! buf[0] = 'O';
! buf[1] = 'K';
! buf[2] = '\0';
}
void
write_enn (char *buf)
{
! buf[0] = 'E';
! buf[1] = 'N';
! buf[2] = 'N';
! buf[3] = '\0';
}
void
! convert_int_to_ascii (char *from, char *to, int n)
{
int nib;
char ch;
--- 378,394 ----
void
write_ok (char *buf)
{
! strcpy (buf,"OK");
}
void
write_enn (char *buf)
{
! strcpy (buf,"ENN");
}
void
! convert_int_to_ascii (const char *from, char *to, int n)
{
int nib;
char ch;
***************
*** 410,416 ****
void
! convert_ascii_to_int (char *from, char *to, int n)
{
int nib1, nib2;
while (n--)
--- 405,411 ----
void
! convert_ascii_to_int (const char *from, char *to, int n)
{
int nib1, nib2;
while (n--)
***************
*** 443,448 ****
--- 438,444 ----
void
prepare_resume_reply (char *buf, char status, unsigned char signo)
{
+ static int old_thread_from_wait = 0;
int nib;
*buf++ = status;
***************
*** 497,503 ****
}
void
! decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
{
int i = 0, j = 0;
char ch;
--- 493,499 ----
}
void
! decode_m_packet (const char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
{
int i = 0, j = 0;
char ch;
***************
*** 519,525 ****
}
void
! decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
char *to)
{
int i = 0;
--- 515,521 ----
}
void
! decode_M_packet (const char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
char *to)
{
int i = 0;
***************
*** 539,542 ****
--- 535,565 ----
}
convert_ascii_to_int (&from[i++], to, *len_ptr);
+ }
+
+ static void
+ inreg (int regno, const char *buf)
+ {
+ int regsize = REGISTER_RAW_SIZE (regno);
+
+ convert_ascii_to_int (buf, ®isters[REGISTER_BYTE (regno)], regsize );
+ return ;
+ }
+
+ void
+ do_P_packet (const char *from)
+ {
+ int regno;
+ char *pos;
+
+ errno= 0;
+ regno = strtol (from, &pos, 16 );
+ if ( pos==from || errno || (*pos)!='=' )
+ error ("Invalid P packet format '%s'.", from);
+
+ if ( regno<0 || regno>=NUM_REGS )
+ error ("Invalid register number %d.", regno);
+
+ inreg (regno, pos+1);
+ store_inferior_registers (regno);
}
diff -c -r ../gdb+dejagnu-20010515-org/gdb/gdbserver/server.c gdb/gdbserver/server.c
*** ../gdb+dejagnu-20010515-org/gdb/gdbserver/server.c Tue Mar 6 03:21:44 2001
--- gdb/gdbserver/server.c Tue May 15 13:11:56 2001
***************
*** 24,30 ****
int cont_thread;
int general_thread;
int thread_from_wait;
- int old_thread_from_wait;
int extended_protocol;
jmp_buf toplevel;
int inferior_pid;
--- 24,29 ----
***************
*** 45,53 ****
main (int argc, char *argv[])
{
char ch, status, own_buf[PBUFSIZ], mem_buf[2000];
! int i = 0;
unsigned char signal;
! unsigned int len;
CORE_ADDR mem_addr;
if (setjmp (toplevel))
--- 44,53 ----
main (int argc, char *argv[])
{
char ch, status, own_buf[PBUFSIZ], mem_buf[2000];
! int err;
! int regno;
unsigned char signal;
! unsigned len;
CORE_ADDR mem_addr;
if (setjmp (toplevel))
***************
*** 75,82 ****
while (getpkt (own_buf) > 0)
{
unsigned char sig;
! i = 0;
! ch = own_buf[i++];
switch (ch)
{
case 'd':
--- 75,81 ----
while (getpkt (own_buf) > 0)
{
unsigned char sig;
! ch = own_buf[0];
switch (ch)
{
case 'd':
***************
*** 89,103 ****
case '?':
prepare_resume_reply (own_buf, status, signal);
break;
! case 'H':
switch (own_buf[1])
{
! case 'g':
general_thread = strtol (&own_buf[2], NULL, 16);
write_ok (own_buf);
fetch_inferior_registers (0);
break;
! case 'c':
cont_thread = strtol (&own_buf[2], NULL, 16);
write_ok (own_buf);
break;
--- 88,102 ----
case '?':
prepare_resume_reply (own_buf, status, signal);
break;
! case 'H': /* Thread operations */
switch (own_buf[1])
{
! case 'g': /* Set thread ID for other actions */
general_thread = strtol (&own_buf[2], NULL, 16);
write_ok (own_buf);
fetch_inferior_registers (0);
break;
! case 'c': /* Set thread ID for continue/set. */
cont_thread = strtol (&own_buf[2], NULL, 16);
write_ok (own_buf);
break;
***************
*** 160,166 ****
{
write_ok (own_buf);
fprintf (stderr, "GDBserver restarting\n");
-
/* Wait till we are at 1st instruction in prog. */
signal = start_inferior (&argv[2], &status);
goto restart;
--- 159,164 ----
***************
*** 171,176 ****
--- 169,178 ----
exit (0);
break;
}
+ case 'P':
+ do_P_packet (&own_buf[1]);
+ write_ok (own_buf);
+ break;
case 'T':
if (mythread_alive (strtol (&own_buf[1], NULL, 16)))
write_ok (own_buf);
***************
*** 210,217 ****
putpkt (own_buf);
if (status == 'W')
! fprintf (stderr,
! "\nChild exited with status %d\n", sig);
if (status == 'X')
fprintf (stderr, "\nChild terminated with signal = 0x%x\n", sig);
if (status == 'W' || status == 'X')
--- 212,218 ----
putpkt (own_buf);
if (status == 'W')
! fprintf (stderr, "\nChild exited with status %d\n", sig);
if (status == 'X')
fprintf (stderr, "\nChild terminated with signal = 0x%x\n", sig);
if (status == 'W' || status == 'X')
***************
*** 250,256 ****
}
else
{
! fprintf (stderr, "Remote side has terminated connection. GDBserver will reopen the connection.\n");
remote_close ();
}
--- 251,258 ----
}
else
{
! fprintf (stderr,
! "Remote side has terminated connection. GDBserver will reopen the connection.\n");
remote_close ();
}
diff -c -r ../gdb+dejagnu-20010515-org/gdb/gdbserver/server.h gdb/gdbserver/server.h
*** ../gdb+dejagnu-20010515-org/gdb/gdbserver/server.h Tue Mar 6 03:21:44 2001
--- gdb/gdbserver/server.h Tue May 15 13:11:42 2001
***************
*** 29,34 ****
--- 29,35 ----
void fetch_inferior_registers (int regno);
void store_inferior_registers (int regno);
int mythread_alive (int pid);
+ int myattach_lwp (int pid);
void myresume (int step, int signo);
unsigned char mywait (char *status);
void read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len);
***************
*** 45,74 ****
extern int cont_thread;
extern int general_thread;
extern int thread_from_wait;
- extern int old_thread_from_wait;
-
extern jmp_buf toplevel;
extern int inferior_pid;
/* Functions from remote-utils.c */
! int putpkt (char *buf);
int getpkt (char *buf);
! void remote_open (char *name);
void remote_close (void);
void write_ok (char *buf);
void write_enn (char *buf);
void enable_async_io (void);
void disable_async_io (void);
! void convert_ascii_to_int (char *from, char *to, int n);
! void convert_int_to_ascii (char *from, char *to, int n);
void prepare_resume_reply (char *buf, char status, unsigned char sig);
! void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr,
unsigned int *len_ptr);
! void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr,
unsigned int *len_ptr, char *to);
!
/* Functions from utils.c */
--- 46,73 ----
extern int cont_thread;
extern int general_thread;
extern int thread_from_wait;
extern jmp_buf toplevel;
extern int inferior_pid;
/* Functions from remote-utils.c */
! int putpkt (const char *buf);
int getpkt (char *buf);
! void remote_open (const char *name);
void remote_close (void);
void write_ok (char *buf);
void write_enn (char *buf);
void enable_async_io (void);
void disable_async_io (void);
! void convert_ascii_to_int (const char *from, char *to, int n);
! void convert_int_to_ascii (const char *from, char *to, int n);
void prepare_resume_reply (char *buf, char status, unsigned char sig);
! void decode_m_packet (const char *from, CORE_ADDR * mem_addr_ptr,
unsigned int *len_ptr);
! void decode_M_packet (const char *from, CORE_ADDR * mem_addr_ptr,
unsigned int *len_ptr, char *to);
! void do_P_packet (const char *from);
/* Functions from utils.c */
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Add remote P packet handling to GDBSERVER
2001-05-15 18:21 [PATCH] Add remote P packet handling to GDBSERVER John S. Kallal
@ 2001-06-27 21:10 ` Andrew Cagney
[not found] ` <3B4BDA51.5000902@cygnus.com>
1 sibling, 0 replies; 3+ messages in thread
From: Andrew Cagney @ 2001-06-27 21:10 UTC (permalink / raw)
To: egcs; +Cc: gdb-patches, John S. Kallal
John, just a sanity check. Is your assignment still current?
Andrew
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Add remote P packet handling to GDBSERVER
[not found] ` <3B4BDA51.5000902@cygnus.com>
@ 2001-07-25 16:14 ` John S. Kallal
0 siblings, 0 replies; 3+ messages in thread
From: John S. Kallal @ 2001-07-25 16:14 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
I am back from my a very vital trip. However, my medical condition is
(again) becoming a problem. I may be back in the hospital for additional
weeks any day.
On Wednesday 11 July 2001 00:47, Andrew Cagney wrote:
> > The following patch add 'P' packet handling to GDBSERVER
> > and does some code clean-up. This patch replaces my
> > GDBSERVER patch of April 26 at:
> >
> > http://sources.redhat.com/ml/gdb-patches/2001-04/msg00256.html
>
> John, as you note, this contains two changes:
>
> o cleanups
> o addition of the `P' packet
>
> could you please split out the cleanup and submit that (first) separately
> (See also notes below on ChangeLog entries). Trying to break patches
> down to separate independant changes is really important. There are
I will break this into three patches.
-First patch, code file reformate with indent v2.2.6 with default setting.
-Second code cleanups.
-Last patch, addition of 'P' packet to gdbserver code.
Each patch to depend on the prior patch and each patch reformated with
default setting of indent v2.2.6. If the default 'C' coding style is the
current default of GNU indent, I think that you have a lot of source code
reformatting to do within the gdb source files.
The code cleanup patch is a modified version of the un-approved patch in
message http://sources.redhat.com/ml/gdb-patches/2001-04/msg00256.html .
So yes the code cleanups change was sent as a separate patch! When the
code clean patch was ignored, I just included it with my next patch in that
area of gdbserver code.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2001-07-25 16:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-05-15 18:21 [PATCH] Add remote P packet handling to GDBSERVER John S. Kallal
2001-06-27 21:10 ` Andrew Cagney
[not found] ` <3B4BDA51.5000902@cygnus.com>
2001-07-25 16:14 ` John S. Kallal
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox