[binutils-gdb] disassemble_free_powerpc

Alan Modra amodra@sourceware.org
Thu Jan 16 09:31:25 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6cda040f1b9fa2da682a7721c6d511d420f5e889

commit 6cda040f1b9fa2da682a7721c6d511d420f5e889
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Jan 15 09:48:44 2025 +1030

    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.

Diff:
---
 opcodes/disassemble.c |  1 +
 opcodes/disassemble.h |  1 +
 opcodes/ppc-dis.c     | 10 ++++++++++
 3 files changed, 12 insertions(+)

diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index b6ab3fbf6a8..98de1a772f9 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 48c22622757..5fcd45ea5ae 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 409c81d7070..3e210341228 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


More information about the Binutils-cvs mailing list