Use gdbarch obstack to allocate types in alloc_type_arch
For the command "gdb gdb" valgrind currently reports 100s of individual memory leaks, 500 of which originate solely out of the function alloc_type_arch. This function allocates a "struct type" associated with the given gdbarch using malloc but apparently the types allocated by this function are never freed. This patch fixes these leaks by making the function alloc_type_arch allocate these gdbarch-associated types on the gdbarch obstack instead of on the general heap. Since, from what I can tell, the types allocated by this function are all fundamental "wired-in" types, such types would not benefit from more granular memory management anyway. They would likely live as long as the gdbarch is alive so allocating them on the gdbarch obstack makes sense. With this patch, the number of individual vargrind warnings emitted for the command "gdb gdb" drops from ~800 to ~300. Tested on x86_64-unknown-linux-gnu. gdb/ChangeLog: * gdbtypes.c (alloc_type_arch): Allocate the type on the given gdbarch obstack instead of on the heap. Update commentary accordingly.
This commit is contained in:
parent
4df0419386
commit
8f57eec2fb
|
@ -1,3 +1,9 @@
|
||||||
|
2015-08-29 Patrick Palka <patrick@parcs.ath.cx>
|
||||||
|
|
||||||
|
* gdbtypes.c (alloc_type_arch): Allocate the type on the given
|
||||||
|
gdbarch obstack instead of on the heap. Update commentary
|
||||||
|
accordingly.
|
||||||
|
|
||||||
2015-08-28 Joel Brobecker <brobecker@adacore.com>
|
2015-08-28 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
GDB 7.10 released.
|
GDB 7.10 released.
|
||||||
|
|
|
@ -187,7 +187,7 @@ alloc_type (struct objfile *objfile)
|
||||||
|
|
||||||
/* Allocate a new GDBARCH-associated type structure and fill it
|
/* Allocate a new GDBARCH-associated type structure and fill it
|
||||||
with some defaults. Space for the type structure is allocated
|
with some defaults. Space for the type structure is allocated
|
||||||
on the heap. */
|
on the obstack associated with GDBARCH. */
|
||||||
|
|
||||||
struct type *
|
struct type *
|
||||||
alloc_type_arch (struct gdbarch *gdbarch)
|
alloc_type_arch (struct gdbarch *gdbarch)
|
||||||
|
@ -198,8 +198,8 @@ alloc_type_arch (struct gdbarch *gdbarch)
|
||||||
|
|
||||||
/* Alloc the structure and start off with all fields zeroed. */
|
/* Alloc the structure and start off with all fields zeroed. */
|
||||||
|
|
||||||
type = XCNEW (struct type);
|
type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct type);
|
||||||
TYPE_MAIN_TYPE (type) = XCNEW (struct main_type);
|
TYPE_MAIN_TYPE (type) = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct main_type);
|
||||||
|
|
||||||
TYPE_OBJFILE_OWNED (type) = 0;
|
TYPE_OBJFILE_OWNED (type) = 0;
|
||||||
TYPE_OWNER (type).gdbarch = gdbarch;
|
TYPE_OWNER (type).gdbarch = gdbarch;
|
||||||
|
|
Loading…
Reference in New Issue