]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
disassemble_free_powerpc
authorAlan Modra <amodra@gmail.com>
Tue, 14 Jan 2025 23:18:44 +0000 (09:48 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 16 Jan 2025 09:27:19 +0000 (19:57 +1030)
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.

opcodes/disassemble.c
opcodes/disassemble.h
opcodes/ppc-dis.c

index b6ab3fbf6a81cf13108836ddfb57eaf397773a78..98de1a772f9ecef6e49a760775261253990cf019 100644 (file)
@@ -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
index 48c22622757df17788504a6f9835343e97c081d1..5fcd45ea5ae8b8fea1c4cb7cbff689880e479ef2 100644 (file)
@@ -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);
 
index 409c81d7070b725961ec592339993a6bfee02343..3e210341228cbd12630b79714db92fb6b0c8c0a7 100644 (file)
@@ -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