]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
add to_identity
authorPaul Koning <paul_koning@dell.com>
Wed, 14 Oct 2015 20:03:09 +0000 (16:03 -0400)
committerPaul Koning <paul_koning@dell.com>
Wed, 14 Oct 2015 20:03:09 +0000 (16:03 -0400)
commit1f92c67a165696fb15f36fcbee0b9f2d2b3a1b1e
tree03548f9d310f8c1fdd6c2720af32dbd296f45769
parent41f0b53b94eb41ba14a5439b965d516c449d6d64
add to_identity

Right now a target_ops has an odd sense of identity.

Most times some identity is needed, a pointer to a static object is
passed in.  For example, calls to unpush_target generally work like
this:

    unpush_target (&exec_ops);

Conceptually this is a kind of "instanceof" checking.

Now, consider this with "to_xclose" targets.  In this case the
target_ops is allocated on the heap and there's no good way to talk
about the identity.  Code could remember the pointer, of course, but
this usually just begs the question.

For example in a to_open implementation it is reasonably normal to
check target_is_pushed and then do nothing if the target is pushed.
However, there's no reasonable way way to do this with a to_xclose
target.

This patch introduces a to_identity field that just points to the
"prototype" implementation of a target_ops.  This lets us convert
targets to to_xclose without difficulty.

2014-07-29  Tom Tromey  <tromey@redhat.com>

* bfd-target.c (target_bfd_reopen): Set to_identity.
* target.c (complete_target_initialization): Set to_identity.
(unpush_target): Check to_identity.  Call target_close on the real
target.
(target_is_pushed): Check to_identity.
* target.h (struct target_ops) <to_identity>: New field.
gdb/bfd-target.c
gdb/target.c
gdb/target.h