From: Tom Tromey <tromey@redhat.com>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v4 3/9] add target method delegation
Date: Thu, 12 Dec 2013 02:46:00 -0000 [thread overview]
Message-ID: <87a9g623cw.fsf@fleche.redhat.com> (raw)
In-Reply-To: <87lhzr11wz.fsf@fleche.redhat.com> (Tom Tromey's message of "Wed, 11 Dec 2013 15:02:52 -0700")
Pedro> target_wait would then be:
Tom> [...]
Pedro> WDYT?
Tom> It seems good to me.
I tinkered with this a little and, not liking the result much, spent
some more time thinking about it. Specifically, I considered how I
would write this in C++.
There I think what I would do is have a pure-virtual target base class.
This corresponds to target_ops.
Then, I'd have a "delegator" subclass from which all ordinary targets
would derive. This class would implement each delegatable method by
unconditionally forwarding to "beneath":
struct target_delegator : public target_ops {
// e.g.
int has_all_memory () {
return beneath->has_all_memory();
}
};
I'd make the dummy target implement all methods using some baseline
behavior.
struct dummy_target : public target_ops {
int has_all_memory () {
return 0;
}
};
Finally, individual targets would derive from target_delegator and
override methods as appropriate.
Translating back to gdb, rather than implement target_delegate_*
functions that search through the target stack, what if we implement the
appropriate dummy fallback functions, and have delegation functions that
call via "beneath"? We can fill in the fields of target_ops in
complete_target_initialization.
Since this is very repetitive I would consider doing it via a ".defs"
file and then some macrology to reduce the amount of boilerplate.
Let me know what you think. I'll experiment with it a bit tomorrow.
Tom
next prev parent reply other threads:[~2013-12-12 2:46 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-22 17:59 [PATCH v4 0/9] enable target-async by default Tom Tromey
2013-10-22 17:59 ` [PATCH v4 5/9] PR gdb/13860: make "-exec-foo"'s MI output equal to "foo"'s MI output Tom Tromey
2013-10-22 17:59 ` [PATCH v4 1/9] fix latent bugs in ui-out.c Tom Tromey
2013-10-28 15:20 ` Pedro Alves
2013-10-28 17:36 ` Tom Tromey
2013-10-22 17:59 ` [PATCH v4 2/9] add "this" pointers to more target APIs Tom Tromey
2013-10-28 16:04 ` Pedro Alves
2013-10-28 16:37 ` Tom Tromey
2013-10-28 16:44 ` Pedro Alves
2013-10-28 16:52 ` Tom Tromey
2013-11-08 18:04 ` Pedro Alves
2013-11-08 21:53 ` Tom Tromey
2013-11-09 3:35 ` Pedro Alves
2013-12-06 17:40 ` Tom Tromey
2013-12-06 18:35 ` Pedro Alves
2013-12-06 18:23 ` Tom Tromey
2013-12-06 19:06 ` Pedro Alves
2013-10-22 17:59 ` [PATCH v4 3/9] add target method delegation Tom Tromey
2013-10-28 16:05 ` Pedro Alves
2013-10-28 17:51 ` Tom Tromey
2013-10-28 17:53 ` Tom Tromey
2013-10-29 20:55 ` Tom Tromey
2013-11-08 17:44 ` Pedro Alves
2013-12-11 22:03 ` Tom Tromey
2013-12-12 2:46 ` Tom Tromey [this message]
2013-12-13 22:07 ` Tom Tromey
2013-12-16 13:07 ` Pedro Alves
2013-12-16 21:21 ` Tom Tromey
2013-12-17 16:17 ` Pedro Alves
2013-12-18 18:29 ` Tom Tromey
2013-12-18 22:06 ` Tom Tromey
2013-12-19 16:03 ` Pedro Alves
2013-12-19 16:15 ` Tom Tromey
2013-12-20 19:24 ` Tom Tromey
2013-11-08 16:34 ` Pedro Alves
2013-10-22 17:59 ` [PATCH v4 4/9] PR gdb/13860: make -interpreter-exec console "list" behave more like "list" Tom Tromey
2013-10-22 18:11 ` [PATCH v4 8/9] fix py-finish-breakpoint.exp with always-async Tom Tromey
2013-11-11 19:51 ` Pedro Alves
2013-12-09 17:53 ` Tom Tromey
2013-10-22 18:26 ` [PATCH v4 9/9] enable target-async Tom Tromey
2013-10-22 20:15 ` Eli Zaretskii
2013-11-11 19:54 ` Pedro Alves
2013-11-12 20:53 ` Pedro Alves
2013-11-15 0:45 ` Tom Tromey
2013-11-18 15:42 ` Pedro Alves
2013-12-06 20:44 ` Tom Tromey
2013-12-09 12:01 ` Pedro Alves
2013-12-09 15:57 ` Tom Tromey
2014-02-21 20:23 ` Tom Tromey
2014-02-24 17:38 ` Tom Tromey
2013-10-22 18:26 ` [PATCH v4 6/9] PR gdb/13860: don't lose '-interpreter-exec console EXECUTION_COMMAND''s output in async mode Tom Tromey
2013-10-22 19:00 ` [PATCH v4 7/9] make dprintf.exp pass in always-async mode Tom Tromey
2013-11-12 0:05 ` 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=87a9g623cw.fsf@fleche.redhat.com \
--to=tromey@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=palves@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