gdb/gdb-gdbindex-v4-3of3.patch

146 lines
3.7 KiB
Diff
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

http://sourceware.org/ml/gdb-cvs/2010-10/msg00048.html
### src/gdb/ChangeLog 2010/10/07 08:32:36 1.12241
### src/gdb/ChangeLog 2010/10/07 17:02:06 1.12242
## -1,3 +1,16 @@
+2010-10-07 Doug Evans <dje@google.com>
+
+ * addrmap.h (addrmap_foreach_fn): New typedef.
+ (addrmap_foreach): Declare.
+ * addrmap.c (struct addrmap_funcs): New member foreach.
+ (addrmap_foreach): New function.
+ (addrmap_fixed_foreach): New function.
+ (addrmap_fixed_funcs): Update.
+ (struct mutable_foreach_data): New struct.
+ (addrmap_mutable_foreach_worker): New function.
+ (addrmap_mutable_foreach): New function.
+ (addrmap_mutable_funcs): Update.
+
2010-10-07 Paul Hilfinger <hilfinger@adacore.com>
* dictionary.c (dict_hash): Revert to msymbol_hash_iw in
--- src/gdb/addrmap.c 2010/05/18 19:23:37 1.8
+++ src/gdb/addrmap.c 2010/10/07 17:02:14 1.9
@@ -41,6 +41,7 @@
struct addrmap *(*create_fixed) (struct addrmap *this,
struct obstack *obstack);
void (*relocate) (struct addrmap *this, CORE_ADDR offset);
+ int (*foreach) (struct addrmap *this, addrmap_foreach_fn fn, void *data);
};
@@ -82,6 +83,11 @@
}
+int
+addrmap_foreach (struct addrmap *map, addrmap_foreach_fn fn, void *data)
+{
+ return map->funcs->foreach (map, fn, data);
+}
/* Fixed address maps. */
@@ -175,12 +181,32 @@
}
+static int
+addrmap_fixed_foreach (struct addrmap *this, addrmap_foreach_fn fn,
+ void *data)
+{
+ struct addrmap_fixed *map = (struct addrmap_fixed *) this;
+ size_t i;
+
+ for (i = 0; i < map->num_transitions; i++)
+ {
+ int res = fn (data, map->transitions[i].addr, map->transitions[i].value);
+
+ if (res != 0)
+ return res;
+ }
+
+ return 0;
+}
+
+
static const struct addrmap_funcs addrmap_fixed_funcs =
{
addrmap_fixed_set_empty,
addrmap_fixed_find,
addrmap_fixed_create_fixed,
- addrmap_fixed_relocate
+ addrmap_fixed_relocate,
+ addrmap_fixed_foreach
};
@@ -444,12 +470,48 @@
}
+/* Struct to map addrmap's foreach function to splay_tree's version. */
+struct mutable_foreach_data
+{
+ addrmap_foreach_fn fn;
+ void *data;
+};
+
+
+/* This is a splay_tree_foreach_fn. */
+
+static int
+addrmap_mutable_foreach_worker (splay_tree_node node, void *data)
+{
+ struct mutable_foreach_data *foreach_data = data;
+
+ return foreach_data->fn (foreach_data->data,
+ addrmap_node_key (node),
+ addrmap_node_value (node));
+}
+
+
+static int
+addrmap_mutable_foreach (struct addrmap *this, addrmap_foreach_fn fn,
+ void *data)
+{
+ struct addrmap_mutable *mutable = (struct addrmap_mutable *) this;
+ struct mutable_foreach_data foreach_data;
+
+ foreach_data.fn = fn;
+ foreach_data.data = data;
+ return splay_tree_foreach (mutable->tree, addrmap_mutable_foreach_worker,
+ &foreach_data);
+}
+
+
static const struct addrmap_funcs addrmap_mutable_funcs =
{
addrmap_mutable_set_empty,
addrmap_mutable_find,
addrmap_mutable_create_fixed,
- addrmap_mutable_relocate
+ addrmap_mutable_relocate,
+ addrmap_mutable_foreach
};
--- src/gdb/addrmap.h 2010/01/01 07:31:29 1.5
+++ src/gdb/addrmap.h 2010/10/07 17:02:14 1.6
@@ -91,4 +91,15 @@
to either mutable or immutable maps.) */
void addrmap_relocate (struct addrmap *map, CORE_ADDR offset);
+/* The type of a function used to iterate over the map.
+ OBJ is NULL for unmapped regions. */
+typedef int (*addrmap_foreach_fn) (void *data, CORE_ADDR start_addr,
+ void *obj);
+
+/* Call FN, passing it DATA, for every address in MAP, following an
+ in-order traversal. If FN ever returns a non-zero value, the
+ iteration ceases immediately, and the value is returned.
+ Otherwise, this function returns 0. */
+int addrmap_foreach (struct addrmap *map, addrmap_foreach_fn fn, void *data);
+
#endif /* ADDRMAP_H */