Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Aleksandar Ristovski <aristovski@qnx.com>
To: gdb-patches@sourceware.org
Cc: Pedro Alves <pedro@codesourcery.com>, Doug Evans <dje@google.com>
Subject: Re: [patch] gdbserver: Add support for Z0/Z1 packets
Date: Wed, 24 Jun 2009 18:51:00 -0000	[thread overview]
Message-ID: <4A427584.2090908@qnx.com> (raw)
In-Reply-To: <200906231700.12402.pedro@codesourcery.com>

[-- Attachment #1: Type: text/plain, Size: 1969 bytes --]

Pedro Alves wrote:
> On Tuesday 23 June 2009 16:17:58, Aleksandar Ristovski wrote:
>> Pedro Alves wrote:
>>> On Monday 22 June 2009 20:38:50, Aleksandar Ristovski wrote:
>>>
>>>>> Z0 and Z1 breakpoints also take a 'len' argument, just
>>>>> like Z2-Z4.  You should also pass those down.
>>>>>
>>>>> But, Let's take a step back --- why not just rename the
>>>>> insert_watchpoint|remove_watchpoint functions to insert_point,remove_point,
>>>>> and relax the type checks in server.c:
> 
>>>> But either way is fine with me - just let me know.
>>> I'd prefer the approach I suggested, and worry about splitting
>>> the breakpoints from watchpoints API if/when we actually need it.
>>>
>> Ok, then that version is committed.
> 
> Well, we had never seen "that" version

Ok, to rectify this I am attaching two versions: one if I 
revert the changes I committed and the other is diff to what 
is in now.

 > ... and you bypassed the "rename" suggestion...

I did not do any renaming - I think it is not terribly 
confusing since both in target.h comment and server.c 'Z' 
case it is made very clear that it handles both breakpoints 
and watchpoints (i.e. I don't find it any clearer if it was 
called "insert_point"... it would still require reading the 
comment in target.h)

> 
> Would you care to explain why are watchpoints guarded on
> require_running and breakpoints aren't?  It's not super
> obvious to me.

Both proposed versions now check for require_running for any 
kind of breakpoint.

ChangeLog - diff to what is in now.
* server.c (process_serial_event): Treat all types of
break/watch-points the same.

ChangeLog - diff to what was before my commit:
* server.c (process_serial_event): Add support for Z0 and Z1 
packet.
* target.h: Comment for *_watchpoint to make it clear the 
functions can get types '0' and '1'.

(attached first diff to what is in already and then diff to 
what was before commit).


Thanks,

-- 
Aleksandar Ristovski
QNX Software Systems

[-- Attachment #2: gdbserver-Z0Z1support-20090624.diff --]
[-- Type: text/x-patch, Size: 1520 bytes --]

Index: server.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.c,v
retrieving revision 1.99
diff -u -p -r1.99 server.c
--- server.c	23 Jun 2009 15:12:44 -0000	1.99
+++ server.c	24 Jun 2009 15:36:11 -0000
@@ -2381,7 +2381,6 @@ process_serial_event (void)
 	int len = strtol (lenptr + 1, &dataptr, 16);
 	char type = own_buf[1];
 	int res;
-	const int insert_ = ch == 'Z';
 
 	/* Type: '0' - software-breakpoint
 		 '1' - hardware-breakpoint
@@ -2392,27 +2391,16 @@ process_serial_event (void)
 	if (the_target->insert_watchpoint == NULL
 	    || the_target->remove_watchpoint == NULL)
 	  res = 1;  /* Not supported.  */
+	else if (type >= '0' && type <= '4')
+	  {
+	    const int insert_ = ch == 'Z';
+
+	    require_running (own_buf);
+	    res = insert_ ? (*the_target->insert_watchpoint) (type, addr, len)
+			  : (*the_target->remove_watchpoint) (type, addr, len);
+	  }
 	else
-	  switch (type)
-	    {
-	    case '2':
-	      /* Fallthrough.  */
-	    case '3':
-	      /* Fallthrough.  */
-	    case '4':
-	      require_running (own_buf);
-	      /* Fallthrough.  */
-	    case '0':
-	      /* Fallthrough.  */
-	    case '1':
-	      res = insert_ ? (*the_target->insert_watchpoint) (type, addr,
-								len)
-			    : (*the_target->remove_watchpoint) (type, addr,
-								len);
-	      break;
-	    default:
-	      res = -1; /* Unrecognized type.  */
-	    }
+	  res = -1; /* Unrecognized type.  */
 
 	if (res == 0)
 	  write_ok (own_buf);

[-- Attachment #3: gdbserver-Z0Z1support-20090624-1.diff --]
[-- Type: text/x-patch, Size: 3443 bytes --]

Index: server.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.c,v
retrieving revision 1.98
diff -u -p -r1.98 server.c
--- server.c	19 Jun 2009 13:35:35 -0000	1.98
+++ server.c	24 Jun 2009 17:13:04 -0000
@@ -2371,66 +2371,44 @@ process_serial_event (void)
       signal = 0;
       myresume (own_buf, 1, signal);
       break;
-    case 'Z':
+    case 'Z':  /* insert_ ... */
+      /* Fallthrough.  */
+    case 'z':  /* remove_ ... */
       {
 	char *lenptr;
 	char *dataptr;
 	CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
 	int len = strtol (lenptr + 1, &dataptr, 16);
 	char type = own_buf[1];
+	int res;
+
+	/* Type: '0' - software-breakpoint
+		 '1' - hardware-breakpoint
+		 '2' - write watchpoint
+		 '3' - read watchpoint
+		 '4' - access watchpoint  */
 
 	if (the_target->insert_watchpoint == NULL
-	    || (type < '2' || type > '4'))
-	  {
-	    /* No watchpoint support or not a watchpoint command;
-	       unrecognized either way.  */
-	    own_buf[0] = '\0';
-	  }
-	else
+	    || the_target->remove_watchpoint == NULL)
+	  res = 1;  /* Not supported.  */
+	else if (type >= '0' && type <= '4')
 	  {
-	    int res;
-
 	    require_running (own_buf);
-	    res = (*the_target->insert_watchpoint) (type, addr, len);
-	    if (res == 0)
-	      write_ok (own_buf);
-	    else if (res == 1)
-	      /* Unsupported.  */
-	      own_buf[0] = '\0';
+	    if (ch == 'Z')
+	      res = (*the_target->insert_watchpoint) (type, addr, len);
 	    else
-	      write_enn (own_buf);
-	  }
-	break;
-      }
-    case 'z':
-      {
-	char *lenptr;
-	char *dataptr;
-	CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
-	int len = strtol (lenptr + 1, &dataptr, 16);
-	char type = own_buf[1];
-
-	if (the_target->remove_watchpoint == NULL
-	    || (type < '2' || type > '4'))
-	  {
-	    /* No watchpoint support or not a watchpoint command;
-	       unrecognized either way.  */
-	    own_buf[0] = '\0';
+	      res = (*the_target->remove_watchpoint) (type, addr, len);
 	  }
 	else
-	  {
-	    int res;
+	  res = -1; /* Unrecognized type.  */
 
-	    require_running (own_buf);
-	    res = (*the_target->remove_watchpoint) (type, addr, len);
-	    if (res == 0)
-	      write_ok (own_buf);
-	    else if (res == 1)
-	      /* Unsupported.  */
-	      own_buf[0] = '\0';
-	    else
-	      write_enn (own_buf);
-	  }
+	if (res == 0)
+	  write_ok (own_buf);
+	else if (res == 1)
+	  /* Unsupported.  */
+	  own_buf[0] = '\0';
+	else
+	  write_enn (own_buf);
 	break;
       }
     case 'k':
Index: target.h
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/target.h,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -p -r1.37 -r1.38
--- target.h	19 Jun 2009 13:35:35 -0000	1.37
+++ target.h	23 Jun 2009 15:12:44 -0000	1.38
@@ -216,10 +216,11 @@ struct target_ops
   /* Insert and remove a hardware watchpoint.
      Returns 0 on success, -1 on failure and 1 on unsupported.
      The type is coded as follows:
-       2 = write watchpoint
-       3 = read watchpoint
-       4 = access watchpoint
-  */
+       '0' - software-breakpoint
+       '1' - hardware-breakpoint
+       '2' - write watchpoint
+       '3' - read watchpoint
+       '4' - access watchpoint  */
 
   int (*insert_watchpoint) (char type, CORE_ADDR addr, int len);
   int (*remove_watchpoint) (char type, CORE_ADDR addr, int len);

  parent reply	other threads:[~2009-06-24 18:51 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-17  1:20 Aleksandar Ristovski
2009-06-17  1:35 ` Aleksandar Ristovski
2009-06-19  7:08   ` Doug Evans
2009-06-19 13:56     ` Aleksandar Ristovski
2009-06-20 22:01       ` Pedro Alves
2009-06-22 19:39         ` Aleksandar Ristovski
2009-06-22 22:46           ` Pedro Alves
2009-06-23 15:18             ` Aleksandar Ristovski
2009-06-23 15:59               ` Pedro Alves
2009-06-23 16:57                 ` Aleksandar Ristovski
2009-06-24 18:51                 ` Aleksandar Ristovski [this message]
2009-06-24 19:01                   ` Doug Evans
2009-06-24 19:04                     ` Aleksandar Ristovski
2009-06-24 19:10                       ` Doug Evans
2009-06-24 19:10                   ` Pedro Alves
2009-06-24 19:20                     ` Aleksandar Ristovski
2009-06-24 19:28                       ` Pedro Alves
2009-06-24 19:25                     ` Aleksandar Ristovski
2009-06-25 22:18                       ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A427584.2090908@qnx.com \
    --to=aristovski@qnx.com \
    --cc=dje@google.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox