[Pdbg] [RFC 04/12] libpdbg: Introduce a backend field
Alistair Popple
alistair at popple.id.au
Tue Aug 6 11:37:15 AEST 2019
It is useful to be able to override a particular targets access
methods with methods specific to a specific runtime environment. This
patch introduces a field to every target which can be used for this
purpose without affecting the current behaviour.
Signed-off-by: Alistair Popple <alistair at popple.id.au>
---
libpdbg/target.c | 12 +++++++++---
libpdbg/target.h | 1 +
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/libpdbg/target.c b/libpdbg/target.c
index 61353bc..e822d70 100644
--- a/libpdbg/target.c
+++ b/libpdbg/target.c
@@ -14,8 +14,8 @@
struct list_head empty_list = LIST_HEAD_INIT(empty_list);
struct list_head target_classes = LIST_HEAD_INIT(target_classes);
-/* Work out the address to access based on the current target and
- * final class name */
+/* Work out the target and address to call call access methods on
+ * based on the current target and final class name */
static struct pdbg_target *get_class_target_addr(struct pdbg_target *target, const char *name, uint64_t *addr)
{
/* Check class */
@@ -34,7 +34,13 @@ static struct pdbg_target *get_class_target_addr(struct pdbg_target *target, con
assert(target != pdbg_target_root());
}
- return target;
+ if (target->backend) {
+ /* The backend must implement the same interfaces */
+ assert(!strcmp(target->class, target->backend->class));
+ return target->backend;
+ } else {
+ return target;
+ }
}
struct pdbg_target *pdbg_address_absolute(struct pdbg_target *target, uint64_t *addr)
diff --git a/libpdbg/target.h b/libpdbg/target.h
index 9394447..2c76bf9 100644
--- a/libpdbg/target.h
+++ b/libpdbg/target.h
@@ -46,6 +46,7 @@ struct pdbg_target {
struct list_head properties;
struct list_head children;
struct pdbg_target *parent;
+ struct pdbg_target *backend;
u32 phandle;
bool probed;
struct list_node class_link;
--
2.20.1
More information about the Pdbg
mailing list