Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Adam Fedor <fedor@doc.com>
To: "gdb-patches@sources.redhat.com" <gdb-patches@sources.redhat.com>
Subject: [RFC]: Disallow ObjC search when resetting breakpoint.
Date: Fri, 17 Oct 2003 04:02:00 -0000	[thread overview]
Message-ID: <1066363062.1070.26.camel@localhost.localdomain> (raw)

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

This patch fixes PR objc/1238, where you get frustrating behavior if
there is an ObjC method with the same name as a function:

(gdb) break init
[0] cancel
[1] all
[2] -[MyObject init] at gdb-objc-test.m:50
[3] -[NewObject init] at gdb-objc-test.m:18
[4] init at gdb-objc-test.m:62
> 4
Breakpoint 1 at 0x10001a40: file gdb-objc-test.m, line 62.
(gdb) run
Starting program:
/home/users/fedor/src/gstep/Tester/shared_debug_obj/gdb-objc-test 
[0] cancel
[1] all
[2] -[MyObject init] at gdb-objc-test.m:50
[3] -[NewObject init] at gdb-objc-test.m:18
[4] init at gdb-objc-test.m:62
> 0
Error in re-setting breakpoint 1:
canceled
[Thread debugging using libthread_db enabled]
[New Thread 16384 (LWP 2249)]
[0] cancel
[1] all
[2] -[MyObject init] at gdb-objc-test.m:50
[3] -[NewObject init] at gdb-objc-test.m:18
[4] init at gdb-objc-test.m:62
> 
[... on and on ad infinitum ...]

What happens is that every time you try to reset a breakpoint,
decode_line_1 gets called and we search through all the ObjC selectors
for a match to the breakpoint and there are always multiple matches to
"init".

I don't particularly like the solution (It's the way Apple does it,
although it might be for more reasons than this, e.g. there's no reason
to go through the ObjC selector search when resetting a breakpoint
anyway). I can't think of any other way to do it though, unless perhaps
there is some way to canonicalize the symbol name for the breakpoint -
so it's something like "gdb-objc-test.m:init", and not just "init" -
then you won't get multiple matches.

Any comments?



[-- Attachment #2: allow_objc.patch --]
[-- Type: text/plain, Size: 1913 bytes --]

2003-10-16  Adam Fedor  <fedor@gnu.org>

	* gdb/linespec.c (decode_line_1): Search for ObjC selectors
	only if allow_objc_selectors_flag.
	* gdb/breakpoint.c (breakpoint_re_set_one): Don't allow search
	for ObjC selectors when resetting a breakpoint.

Index: gdb/breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.132
diff -u -p -r1.132 breakpoint.c
--- gdb/breakpoint.c	13 Oct 2003 23:53:20 -0000	1.132
+++ gdb/breakpoint.c	17 Oct 2003 03:41:32 -0000
@@ -52,6 +52,8 @@
 
 #include "gdb-events.h"
 
+extern int allow_objc_selectors_flag;
+
 /* Prototypes for local functions. */
 
 static void until_break_command_continuation (struct continuation_arg *arg);
@@ -6854,7 +6856,9 @@ breakpoint_re_set_one (void *bint)
       set_language (b->language);
       input_radix = b->input_radix;
       s = b->addr_string;
+      allow_objc_selectors_flag = 0;
       sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, (char ***) NULL);
+      allow_objc_selectors_flag = 1;
       for (i = 0; i < sals.nelts; i++)
 	{
 	  resolve_sal_pc (&sals.sals[i]);
Index: gdb/linespec.c
===================================================================
RCS file: /cvs/src/src/gdb/linespec.c,v
retrieving revision 1.51
diff -u -p -r1.51 linespec.c
--- gdb/linespec.c	2 Aug 2003 03:59:40 -0000	1.51
+++ gdb/linespec.c	17 Oct 2003 03:41:34 -0000
@@ -36,6 +36,8 @@
 #include "objc-lang.h"
 #include "linespec.h"
 
+int allow_objc_selectors_flag = 1;
+
 /* We share this one with symtab.c, but it is not exported widely. */
 
 extern char *operator_chars (char *, char **);
@@ -698,6 +700,7 @@ decode_line_1 (char **argptr, int funfir
 
   /* Check if the symbol could be an Objective-C selector.  */
 
+  if (allow_objc_selectors_flag)
   {
     struct symtabs_and_lines values;
     values = decode_objc (argptr, funfirstline, NULL,

             reply	other threads:[~2003-10-17  4:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-17  4:02 Adam Fedor [this message]
2003-11-06 20:19 ` Elena Zannoni
2003-11-06 20:27   ` Daniel Jacobowitz
2003-11-06 21:03     ` Elena Zannoni

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=1066363062.1070.26.camel@localhost.localdomain \
    --to=fedor@doc.com \
    --cc=gdb-patches@sources.redhat.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