aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2025-01-15 09:48:44 +1030
committerAlan Modra <amodra@gmail.com>2025-01-16 19:57:19 +1030
commit6cda040f1b9fa2da682a7721c6d511d420f5e889 (patch)
tree3fc7261d76a4dbb55c3d8f709422a9e957859179 /opcodes
parent86790dfe16097f8aee84c007efdef40759065e8c (diff)
downloadgdb-6cda040f1b9fa2da682a7721c6d511d420f5e889.zip
gdb-6cda040f1b9fa2da682a7721c6d511d420f5e889.tar.gz
gdb-6cda040f1b9fa2da682a7721c6d511d420f5e889.tar.bz2
disassemble_free_powerpc
This fixes leaks in a ppc disassembler buffer. I'm not sure now why I used a private buffer for section contents, but I'm not going to change that just now. * disassemble.h (disassemble_free_powerpc): Declare. * disassemble.c (disassemble_free_target): Call it. * ppc-dis.c (disassemble_free_powerpc): New function.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/disassemble.c1
-rw-r--r--opcodes/disassemble.h1
-rw-r--r--opcodes/ppc-dis.c10
3 files changed, 12 insertions, 0 deletions
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index b6ab3fb..98de1a7 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -767,6 +767,7 @@ disassemble_free_target (struct disassemble_info *info)
#endif
#ifdef ARCH_powerpc
case bfd_arch_powerpc:
+ disassemble_free_powerpc (info);
break;
#endif
#ifdef ARCH_riscv
diff --git a/opcodes/disassemble.h b/opcodes/disassemble.h
index 48c2262..5fcd45e 100644
--- a/opcodes/disassemble.h
+++ b/opcodes/disassemble.h
@@ -105,6 +105,7 @@ extern disassembler_ftype rl78_get_disassembler (bfd *);
extern disassembler_ftype riscv_get_disassembler (bfd *);
extern void disassemble_free_riscv (disassemble_info *);
+extern void disassemble_free_powerpc (disassemble_info *);
extern void ATTRIBUTE_NORETURN opcodes_assert (const char *, int);
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index 409c81d..3e21034 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -537,6 +537,16 @@ disassemble_init_powerpc (struct disassemble_info *info)
}
}
+void
+disassemble_free_powerpc (struct disassemble_info *info)
+{
+ if (info->private_data != NULL)
+ {
+ free (private_data (info)->special[0].buf);
+ free (private_data (info)->special[1].buf);
+ }
+}
+
/* Print a big endian PowerPC instruction. */
int