Call disassemble_free_target in gdb

Commit 20135676fc ("PR24960, Memory leak
from disassembler") added "disassemble_free_target" to opcodes.  This
is used to free target-specific data when finished with a
disassembler.

This patch changes gdb to call this function where needed.

gdb/ChangeLog
2020-01-19  Tom Tromey  <tom@tromey.com>

	* disasm.c (~gdb_disassembler): New destructor.
	(gdb_buffered_insn_length): Call disassemble_free_target.
	* disasm.h (class gdb_disassembler): Declare destructor.  Use
	DISABLE_COPY_AND_ASSIGN.

Change-Id: I245ba5b7dec5e5d9f29cd21832c6e2b4fecef047
This commit is contained in:
Tom Tromey 2020-01-11 11:40:45 -07:00
parent c0ab21c22b
commit 4d89c1c79f
3 changed files with 19 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2020-01-19 Tom Tromey <tom@tromey.com>
* disasm.c (~gdb_disassembler): New destructor.
(gdb_buffered_insn_length): Call disassemble_free_target.
* disasm.h (class gdb_disassembler): Declare destructor. Use
DISABLE_COPY_AND_ASSIGN.
2020-01-19 Tom Tromey <tom@tromey.com>
* dwarf2read.c (abbrev_table_up): Move typedef earlier.

View File

@ -781,6 +781,11 @@ gdb_disassembler::gdb_disassembler (struct gdbarch *gdbarch,
disassemble_init_for_target (&m_di);
}
gdb_disassembler::~gdb_disassembler ()
{
disassemble_free_target (&m_di);
}
int
gdb_disassembler::print_insn (CORE_ADDR memaddr,
int *branch_delay_insns)
@ -908,7 +913,9 @@ gdb_buffered_insn_length (struct gdbarch *gdbarch,
gdb_buffered_insn_length_init_dis (gdbarch, &di, insn, max_len, addr,
&disassembler_options_holder);
return gdbarch_print_insn (gdbarch, addr, &di);
int result = gdbarch_print_insn (gdbarch, addr, &di);
disassemble_free_target (&di);
return result;
}
char *

View File

@ -47,6 +47,10 @@ public:
: gdb_disassembler (gdbarch, file, dis_asm_read_memory)
{}
~gdb_disassembler ();
DISABLE_COPY_AND_ASSIGN (gdb_disassembler);
int print_insn (CORE_ADDR memaddr, int *branch_delay_insns = NULL);
/* Return the gdbarch of gdb_disassembler. */