Remove backup ppc struct dis_private.
authorAlan Modra <amodra@gmail.com>
Mon, 9 Dec 2019 12:27:15 +0000 (22:57 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 9 Dec 2019 22:32:05 +0000 (09:02 +1030)
ppc-dis.c used a global struct whenever malloc failed to provide the
eight bytes of memory necessary for struct dis_private.  Which is
quite ridiculous.  If that malloc failed there is zero chance some
other malloc won't fail too.

* ppc-dis.c (private): Delete variable.
(get_powerpc_dialect): Don't segfault on NULL info->private_data.
(powerpc_init_dialect): Don't use global private.

opcodes/ChangeLog
opcodes/ppc-dis.c

index a82f26116770f57b54a3d7a2df548dca56b7870b..4d8dfe1bf5da7bdd40e720a355fb72e2c06a0c5e 100644 (file)
@@ -1,3 +1,9 @@
+2019-12-10  Alan Modra  <amodra@gmail.com>
+
+       * ppc-dis.c (private): Delete variable.
+       (get_powerpc_dialect): Don't segfault on NULL info->private_data.
+       (powerpc_init_dialect): Don't use global private.
+
 2019-12-10  Alan Modra  <amodra@gmail.com>
 
        * s12z-opc.c: Formatting.
index 2f5756b6ccd027342e2d837a87c8fe6dde753670..9add60272a5172fad9f44c28451bce6aa3d349da 100644 (file)
@@ -40,7 +40,7 @@ struct dis_private
 {
   /* Stash the result of parsing disassembler_options here.  */
   ppc_cpu_t dialect;
-} private;
+};
 
 #define POWERPC_DIALECT(INFO) \
   (((struct dis_private *) ((INFO)->private_data))->dialect)
@@ -259,7 +259,8 @@ get_powerpc_dialect (struct disassemble_info *info)
 {
   ppc_cpu_t dialect = 0;
 
-  dialect = POWERPC_DIALECT (info);
+  if (info->private_data)
+    dialect = POWERPC_DIALECT (info);
 
   /* Disassemble according to the section headers flags for VLE-mode.  */
   if (dialect & PPC_OPCODE_VLE
@@ -308,7 +309,7 @@ powerpc_init_dialect (struct disassemble_info *info)
   struct dis_private *priv = calloc (sizeof (*priv), 1);
 
   if (priv == NULL)
-    priv = &private;
+    return;
 
   switch (info->mach)
     {