diff options
author | Tom Tromey <tromey@redhat.com> | 2013-12-19 07:56:20 -0700 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2014-02-19 07:48:33 -0700 |
commit | 8de71aab66c182ec1f6eb95ed943b64900dd7770 (patch) | |
tree | 0725a04afafc4aad7d46640255d8607ef74f8e82 /gdb | |
parent | 6b2c5a57e10ca3d9021ef6fe27ba779a06f06717 (diff) | |
download | gdb-8de71aab66c182ec1f6eb95ed943b64900dd7770.zip gdb-8de71aab66c182ec1f6eb95ed943b64900dd7770.tar.gz gdb-8de71aab66c182ec1f6eb95ed943b64900dd7770.tar.bz2 |
convert to_auxv_parse
2014-02-19 Tom Tromey <tromey@redhat.com>
* auxv.c (default_auxv_parse): No longer static.
(target_auxv_parse): Unconditionally delegate.
* auxv.h (default_auxv_parse): Declare.
* target-delegates.c: Rebuild.
* target.c: Include auxv.h.
* target.h (struct target_ops) <to_auxv_parse>: Use
TARGET_DEFAULT_FUNC.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/auxv.c | 11 | ||||
-rw-r--r-- | gdb/auxv.h | 7 | ||||
-rw-r--r-- | gdb/target-delegates.c | 10 | ||||
-rw-r--r-- | gdb/target.c | 1 | ||||
-rw-r--r-- | gdb/target.h | 3 |
6 files changed, 33 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c174974..9c485b7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,15 @@ 2014-02-19 Tom Tromey <tromey@redhat.com> + * auxv.c (default_auxv_parse): No longer static. + (target_auxv_parse): Unconditionally delegate. + * auxv.h (default_auxv_parse): Declare. + * target-delegates.c: Rebuild. + * target.c: Include auxv.h. + * target.h (struct target_ops) <to_auxv_parse>: Use + TARGET_DEFAULT_FUNC. + +2014-02-19 Tom Tromey <tromey@redhat.com> + * target-delegates.c: Rebuild. * target.c (target_memory_map): Unconditionally delegate. * target.h (struct target_ops) <to_memory_map>: Use @@ -254,7 +254,7 @@ memory_xfer_auxv (struct target_ops *ops, Return 0 if *READPTR is already at the end of the buffer. Return -1 if there is insufficient buffer for a whole entry. Return 1 if an entry was read into *TYPEP and *VALP. */ -static int +int default_auxv_parse (struct target_ops *ops, gdb_byte **readptr, gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) { @@ -286,13 +286,8 @@ int target_auxv_parse (struct target_ops *ops, gdb_byte **readptr, gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) { - struct target_ops *t; - - for (t = ops; t != NULL; t = t->beneath) - if (t->to_auxv_parse != NULL) - return t->to_auxv_parse (t, readptr, endptr, typep, valp); - - return default_auxv_parse (ops, readptr, endptr, typep, valp); + return current_target.to_auxv_parse (¤t_target, readptr, endptr, + typep, valp); } @@ -24,6 +24,13 @@ /* See "include/elf/common.h" for the definition of valid AT_* values. */ +/* The default implementation of to_auxv_parse, used by the target + stack. */ + +extern int default_auxv_parse (struct target_ops *ops, gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, + CORE_ADDR *valp); + /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR. Return 0 if *READPTR is already at the end of the buffer. Return -1 if there is insufficient buffer for a whole entry. diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c index 209ecb7..cf5e2d3 100644 --- a/gdb/target-delegates.c +++ b/gdb/target-delegates.c @@ -783,6 +783,13 @@ delegate_get_ada_task_ptid (struct target_ops *self, long arg1, long arg2) } static int +delegate_auxv_parse (struct target_ops *self, gdb_byte **arg1, gdb_byte *arg2, CORE_ADDR *arg3, CORE_ADDR *arg4) +{ + self = self->beneath; + return self->to_auxv_parse (self, arg1, arg2, arg3, arg4); +} + +static int delegate_can_execute_reverse (struct target_ops *self) { self = self->beneath; @@ -1594,6 +1601,8 @@ install_delegators (struct target_ops *ops) ops->to_flash_done = delegate_flash_done; if (ops->to_get_ada_task_ptid == NULL) ops->to_get_ada_task_ptid = delegate_get_ada_task_ptid; + if (ops->to_auxv_parse == NULL) + ops->to_auxv_parse = delegate_auxv_parse; if (ops->to_can_execute_reverse == NULL) ops->to_can_execute_reverse = delegate_can_execute_reverse; if (ops->to_execution_direction == NULL) @@ -1773,6 +1782,7 @@ install_dummy_methods (struct target_ops *ops) ops->to_flash_erase = tdefault_flash_erase; ops->to_flash_done = tdefault_flash_done; ops->to_get_ada_task_ptid = default_get_ada_task_ptid; + ops->to_auxv_parse = default_auxv_parse; ops->to_can_execute_reverse = tdefault_can_execute_reverse; ops->to_execution_direction = default_execution_direction; ops->to_supports_multi_process = tdefault_supports_multi_process; diff --git a/gdb/target.c b/gdb/target.c index 38012cc..4b5ec43 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -44,6 +44,7 @@ #include "tracepoint.h" #include "gdb/fileio.h" #include "agent.h" +#include "auxv.h" static void target_info (char *, int); diff --git a/gdb/target.h b/gdb/target.h index e6e78e1..296ab10 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -706,7 +706,8 @@ struct target_ops Return -1 if there is insufficient buffer for a whole entry. Return 1 if an entry was read into *TYPEP and *VALP. */ int (*to_auxv_parse) (struct target_ops *ops, gdb_byte **readptr, - gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp); + gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) + TARGET_DEFAULT_FUNC (default_auxv_parse); /* Search SEARCH_SPACE_LEN bytes beginning at START_ADDR for the sequence of bytes in PATTERN with length PATTERN_LEN. |