From: Jim Ingham <jingham@apple.com>
To: gdb-patches@sources.redhat.com
Subject: Re: [rfc breakpoint] Catch exceptions
Date: Tue, 25 Mar 2003 23:51:00 -0000 [thread overview]
Message-ID: <B4D17DA2-5F1C-11D7-BFD4-00039379E320@apple.com> (raw)
In-Reply-To: <1048606641.15061.ezmlm@sources.redhat.com>
One thing we had to worry about at least on Mac OS X is that we don't
use a shared libstdc++, rather every shlib that uses C++ get its own
copy of all the libsupc++ code. So there are actually many copies of
__cxa__begin_catch hanging around. To do this properly, you have to
search exhaustively for these symbols, not just take the first hit.
Moreover, you have to redo it on every shared library load, or you will
miss some. This still might bite you on other systems, for instance if
out of paranoia somebody had linked their shlib or executable
statically to libstdc++.a (so they wouldn't get bit by changing ABI
issues or whatever).
BTW. The more general problem of a symbol resolving to multiple
instances - for instance setting file:line breakpoints in inlined
functions or template method defn's - is something we need to address.
It really ticks off our C++ friends. I thought I was going to have
time to think about this in the next month or two, but I got
sidetracked on other issues. But I will need to get back to it after
our WWDC (in June).
I thought from some comments in other notes that this was something you
were thinking about as well, Daniel. Is that true?
Jim
On Tuesday, March 25, 2003, at 07:37 AM,
gdb-patches-digest-help@sources.redhat.com wrote:
> +static int
> +handle_gnu_v3_exceptions (int tempflag, char *cond_string,
> + enum exception_event_kind ex_event, int from_tty)
> +{
> + struct minimal_symbol *trigger_func;
> + const char *trigger_func_name;
> + struct symtab_and_line sal;
> + struct breakpoint *b;
> +
> + if (ex_event == EX_EVENT_CATCH)
> + trigger_func_name = "__cxa_begin_catch";
> + else
> + trigger_func_name = "__cxa_throw";
> +
> + trigger_func = lookup_minimal_symbol (trigger_func_name, NULL,
> NULL);
> + if (trigger_func == 0)
> + return 0;
> + sal = find_msymbol_start_sal (trigger_func, 1);
> +
> + b = set_raw_breakpoint (sal, bp_breakpoint);
> + set_breakpoint_count (breakpoint_count + 1);
> + b->number = breakpoint_count;
> + b->cond = NULL;
> + b->cond_string = (cond_string == NULL) ?
> + NULL : savestring (cond_string, strlen (cond_string));
> + b->thread = -1;
> + b->addr_string = xstrdup (trigger_func_name);
> + b->enable_state = bp_enabled;
> + b->disposition = tempflag ? disp_del : disp_donttouch;
> + mention (b);
> + b->ep_type = ep_gnuv3;
> +
> + b->print = print_exception_catchpoint;
> + b->print_one = print_one_exception_catchpoint;
> + b->print_mention = print_mention_exception_catchpoint;
> + return 1;
> +}
> +
>
--
Jim Ingham jingham@apple.com
Developer Tools
Apple Computer
next parent reply other threads:[~2003-03-25 23:51 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1048606641.15061.ezmlm@sources.redhat.com>
2003-03-25 23:51 ` Jim Ingham [this message]
2003-03-26 0:03 ` Daniel Jacobowitz
2003-03-26 2:14 ` Jim Ingham
2003-03-26 17:48 Michael Elizabeth Chastain
2003-03-26 22:49 ` Jim Ingham
-- strict thread matches above, loose matches on Subject: below --
2003-03-25 3:01 Daniel Jacobowitz
2003-03-25 16:05 ` Andrew Cagney
2003-03-25 16:14 ` Daniel Jacobowitz
2003-04-27 17:52 ` Daniel Jacobowitz
2003-05-02 0:13 ` David Carlton
2003-05-02 0:25 ` Daniel Jacobowitz
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=B4D17DA2-5F1C-11D7-BFD4-00039379E320@apple.com \
--to=jingham@apple.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