aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdb_obstack.h
diff options
context:
space:
mode:
authorYao Qi <yao.qi@linaro.org>2018-02-16 16:20:58 +0000
committerYao Qi <yao.qi@linaro.org>2018-02-16 16:20:58 +0000
commitfd90ace4c1e77c94e90d2942cebe84e9a2019c0f (patch)
tree238171dee65bdaa736aadcc8413208f70f084a54 /gdb/gdb_obstack.h
parent75cdede09952b5aa8c6d4ceb0de10c5e93002a6d (diff)
downloadgdb-fd90ace4c1e77c94e90d2942cebe84e9a2019c0f.zip
gdb-fd90ace4c1e77c94e90d2942cebe84e9a2019c0f.tar.gz
gdb-fd90ace4c1e77c94e90d2942cebe84e9a2019c0f.tar.bz2
New class allocate_on_obstack
This patch adds a new class allocate_on_obstack, and let dwarf2_per_objfile inherit it, so that dwarf2_per_objfile is automatically allocated on obstack, and "delete dwarf2_per_objfile" doesn't de-allocate any space. gdb: 2018-02-16 Yao Qi <yao.qi@linaro.org> * block.c (block_namespace_info): Inherit allocate_on_obstack. (block_initialize_namespace): Use new. * dwarf2read.c (dwarf2_per_objfile): Inherit allocate_on_obstack. (dwarf2_free_objfile): Use delete. * gdbtypes.c (type_pair): Inherit allocate_on_obstack. (copy_type_recursive): Use new. * gdb_obstack.h (allocate_on_obstack): New.
Diffstat (limited to 'gdb/gdb_obstack.h')
-rw-r--r--gdb/gdb_obstack.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/gdb/gdb_obstack.h b/gdb/gdb_obstack.h
index 12a90c3..1011008 100644
--- a/gdb/gdb_obstack.h
+++ b/gdb/gdb_obstack.h
@@ -78,4 +78,24 @@ struct auto_obstack : obstack
{ obstack_free (this, obstack_base (this)); }
};
+/* Objects are allocated on obstack instead of heap. */
+
+struct allocate_on_obstack
+{
+ allocate_on_obstack () = default;
+
+ void* operator new (size_t size, struct obstack *obstack)
+ {
+ return obstack_alloc (obstack, size);
+ }
+
+ void* operator new[] (size_t size, struct obstack *obstack)
+ {
+ return obstack_alloc (obstack, size);
+ }
+
+ void operator delete (void *memory) {}
+ void operator delete[] (void *memory) {}
+};
+
#endif