aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2013-12-19 07:56:20 -0700
committerTom Tromey <tromey@redhat.com>2014-02-19 07:48:33 -0700
commit8de71aab66c182ec1f6eb95ed943b64900dd7770 (patch)
tree0725a04afafc4aad7d46640255d8607ef74f8e82 /gdb
parent6b2c5a57e10ca3d9021ef6fe27ba779a06f06717 (diff)
downloadgdb-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/ChangeLog10
-rw-r--r--gdb/auxv.c11
-rw-r--r--gdb/auxv.h7
-rw-r--r--gdb/target-delegates.c10
-rw-r--r--gdb/target.c1
-rw-r--r--gdb/target.h3
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
diff --git a/gdb/auxv.c b/gdb/auxv.c
index 2f4acf3..ee47446 100644
--- a/gdb/auxv.c
+++ b/gdb/auxv.c
@@ -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 (&current_target, readptr, endptr,
+ typep, valp);
}
diff --git a/gdb/auxv.h b/gdb/auxv.h
index c3f2322..ace6c04 100644
--- a/gdb/auxv.h
+++ b/gdb/auxv.h
@@ -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.