Revert "segfault at i386-dis.c:9815"
authorAlan Modra <amodra@gmail.com>
Mon, 20 Mar 2023 10:26:57 +0000 (20:56 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 20 Mar 2023 10:32:14 +0000 (21:02 +1030)
This reverts commit 92d450c79ad321e42f9a77692b5db10d0f7b9344.

Accessing these local var structs using a volatile qualified pointer
may indeed read the object, but I don't think changed values are
guaranteed to be written back to the object unless the actual object
is declared volatile.  That would probably slow down i386 disassembly
unacceptably.

opcodes/i386-dis.c

index 9684dcda746de68b2da99207cd4add8daae15b8d..a414e8c9b1ef8aa2334406120d33993c61b001c7 100644 (file)
@@ -9808,17 +9808,12 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax)
       /* Getting here means we tried for data but didn't get it.  That
         means we have an incomplete instruction of some sort.  Just
         print the first byte as a prefix or a .byte pseudo-op.  */
-      volatile struct dis_private *ppriv = &priv;
-      volatile instr_info *pins = &ins;
-      if (pins->codep > ppriv->the_buffer)
+      if (ins.codep > priv.the_buffer)
        {
          const char *name = NULL;
 
-         if (pins->prefixes
-             || pins->fwait_prefix >= 0
-             || (pins->rex & REX_OPCODE))
-           name = prefix_name (&ins, ppriv->the_buffer[0],
-                               ppriv->orig_sizeflag);
+         if (ins.prefixes || ins.fwait_prefix >= 0 || (ins.rex & REX_OPCODE))
+           name = prefix_name (&ins, priv.the_buffer[0], priv.orig_sizeflag);
          if (name != NULL)
            i386_dis_printf (&ins, dis_style_mnemonic, "%s", name);
          else
@@ -9827,7 +9822,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax)
              i386_dis_printf (&ins, dis_style_assembler_directive,
                               ".byte ");
              i386_dis_printf (&ins, dis_style_immediate, "0x%x",
-                              (unsigned int) ppriv->the_buffer[0]);
+                              (unsigned int) priv.the_buffer[0]);
            }
 
          return 1;