* dwarf2loc.c (unimplemented): Handle unnamed opcodes.
authorTom Tromey <tromey@redhat.com>
Wed, 16 Feb 2011 21:32:05 +0000 (21:32 +0000)
committerTom Tromey <tromey@redhat.com>
Wed, 16 Feb 2011 21:32:05 +0000 (21:32 +0000)
(compile_dwarf_to_ax) <default>: Use unimplemented.
<DW_OP_deref>: Update.
(disassemble_dwarf_expression): Update.
* dwarf2read.c (dwarf_stack_op_name): Remove 'def' argument.
(decode_locdesc): Update.
* dwarf2expr.h (dwarf_stack_op_name): Update.

gdb/ChangeLog
gdb/dwarf2expr.h
gdb/dwarf2loc.c
gdb/dwarf2read.c

index b3e9adc..05a4843 100644 (file)
@@ -1,5 +1,15 @@
 2011-02-16  Tom Tromey  <tromey@redhat.com>
 
+       * dwarf2loc.c (unimplemented): Handle unnamed opcodes.
+       (compile_dwarf_to_ax) <default>: Use unimplemented.
+       <DW_OP_deref>: Update.
+       (disassemble_dwarf_expression): Update.
+       * dwarf2read.c (dwarf_stack_op_name): Remove 'def' argument.
+       (decode_locdesc): Update.
+       * dwarf2expr.h (dwarf_stack_op_name): Update.
+
+2011-02-16  Tom Tromey  <tromey@redhat.com>
+
        * ax.h (struct aop_map) <name>: Now const.
 
 2011-02-16  Tom Tromey  <tromey@redhat.com>
index 3858dc8..620269f 100644 (file)
@@ -229,7 +229,7 @@ const gdb_byte *read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
 const gdb_byte *read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
                              LONGEST * r);
 
-const char *dwarf_stack_op_name (unsigned int, int);
+const char *dwarf_stack_op_name (unsigned int);
 
 void dwarf_expr_require_composition (const gdb_byte *, const gdb_byte *,
                                     const char *);
index 0f58954..f90335d 100644 (file)
@@ -1334,8 +1334,14 @@ dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
 static void
 unimplemented (unsigned int op)
 {
-  error (_("DWARF operator %s cannot be translated to an agent expression"),
-        dwarf_stack_op_name (op, 1));
+  const char *name = dwarf_stack_op_name (op);
+
+  if (name)
+    error (_("DWARF operator %s cannot be translated to an agent expression"),
+          name);
+  else
+    error (_("Unknown DWARF operator 0x%02x cannot be to an agent expression"),
+          op);
 }
 
 /* A helper function to convert a DWARF register to an arch register.
@@ -1793,8 +1799,10 @@ compile_dwarf_to_ax (struct agent_expr *expr, struct axs_value *loc,
                ax_simple (expr, aop_ref64);
                break;
              default:
+               /* Note that dwarf_stack_op_name will never return
+                  NULL here.  */
                error (_("Unsupported size %d in %s"),
-                      size, dwarf_stack_op_name (op, 1));
+                      size, dwarf_stack_op_name (op));
              }
          }
          break;
@@ -2070,7 +2078,7 @@ compile_dwarf_to_ax (struct agent_expr *expr, struct axs_value *loc,
          unimplemented (op);
 
        default:
-         error (_("Unhandled dwarf expression opcode 0x%x"), op);
+         unimplemented (op);
        }
     }
 
@@ -2295,7 +2303,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
       LONGEST l;
       const char *name;
 
-      name = dwarf_stack_op_name (op, 0);
+      name = dwarf_stack_op_name (op);
 
       if (!name)
        error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
index 837fa3b..08b804a 100644 (file)
@@ -12497,7 +12497,7 @@ dwarf_form_name (unsigned form)
 /* Convert a DWARF stack opcode into its string name.  */
 
 const char *
-dwarf_stack_op_name (unsigned op, int def)
+dwarf_stack_op_name (unsigned op)
 {
   switch (op)
     {
@@ -12819,7 +12819,7 @@ dwarf_stack_op_name (unsigned op, int def)
     case DW_OP_GNU_implicit_pointer:
       return "DW_OP_GNU_implicit_pointer";
     default:
-      return def ? "OP_<unknown>" : NULL;
+      return NULL;
     }
 }
 
@@ -13743,8 +13743,17 @@ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
          break;
 
        default:
-         complaint (&symfile_complaints, _("unsupported stack op: '%s'"),
-                    dwarf_stack_op_name (op, 1));
+         {
+           const char *name = dwarf_stack_op_name (op);
+
+           if (name)
+             complaint (&symfile_complaints, _("unsupported stack op: '%s'"),
+                        name);
+           else
+             complaint (&symfile_complaints, _("unsupported stack op: '%02x'"),
+                        op);
+         }
+
          return (stack[stacki]);
        }