2005-11-19 Randolph Chung <tausq@debian.org>
authorRandolph Chung <tausq@debian.org>
Sat, 19 Nov 2005 13:43:35 +0000 (13:43 +0000)
committerRandolph Chung <tausq@debian.org>
Sat, 19 Nov 2005 13:43:35 +0000 (13:43 +0000)
* dwarf2loc.c (dwarf2_tracepoint_var_ref): Remove extra add for
DW_OP_fbreg.  Handle DW_OP_breg0 through DW_OP_breg31.  Print
DWARF opcode for unsupported case.

gdb/ChangeLog
gdb/dwarf2loc.c

index 71f9e948027aa5a7a082534a7718574ccf4b26e0..362dd426e7d8bedaf1ff72f5679c2d1507b17c02 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-19  Randolph Chung  <tausq@debian.org>
+
+       * dwarf2loc.c (dwarf2_tracepoint_var_ref): Remove extra add for
+       DW_OP_fbreg.  Handle DW_OP_breg0 through DW_OP_breg31.  Print 
+       DWARF opcode for unsupported case.
+
 2005-11-19  Randolph Chung  <tausq@debian.org>
 
        * hppa-hpux-tdep.c (hppa_hpux_sigtramp_frame_unwind_cache): Use 
index 8a3e99faf31a8be6b8db567bf49b2495a312bf07..1005fa7525a216f4df9bedd5e0257c31e70fbedd 100644 (file)
@@ -477,13 +477,30 @@ dwarf2_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
       ax_const_l (ax, frame_offset);
       ax_simple (ax, aop_add);
 
-      ax_const_l (ax, frame_offset);
+      value->kind = axs_lvalue_memory;
+    }
+  else if (data[0] >= DW_OP_breg0
+          && data[0] <= DW_OP_breg31)
+    {
+      unsigned int reg;
+      LONGEST offset;
+      gdb_byte *buf_end;
+
+      reg = data[0] - DW_OP_breg0;
+      buf_end = read_sleb128 (data + 1, data + size, &offset);
+      if (buf_end != data + size)
+       error (_("Unexpected opcode after DW_OP_breg%u for symbol \"%s\"."),
+              reg, SYMBOL_PRINT_NAME (symbol));
+
+      ax_reg (ax, reg);
+      ax_const_l (ax, offset);
       ax_simple (ax, aop_add);
+
       value->kind = axs_lvalue_memory;
     }
   else
-    error (_("Unsupported DWARF opcode in the location of \"%s\"."),
-          SYMBOL_PRINT_NAME (symbol));
+    error (_("Unsupported DWARF opcode 0x%x in the location of \"%s\"."),
+          data[0], SYMBOL_PRINT_NAME (symbol));
 }
 \f
 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression