daily update
[deliverable/binutils-gdb.git] / gdb / dwarf2loc.c
index 4d31afa33cc485bda0d7205b285b7cf8d27216f3..0c4d834f6484db1b239b55f7dc4b384423f1ef51 100644 (file)
@@ -422,7 +422,7 @@ insert_bits (unsigned int datum,
 {
   unsigned int mask;
 
-  gdb_assert (dest_offset_bits >= 0 && dest_offset_bits + nbits <= 8);
+  gdb_assert (dest_offset_bits + nbits <= 8);
 
   mask = (1 << nbits) - 1;
   if (bits_big_endian)
@@ -976,6 +976,7 @@ indirect_pieced_value (struct value *value)
   frame = get_selected_frame (_("No frame selected."));
   byte_offset = value_as_address (value);
 
+  gdb_assert (piece);
   baton = dwarf2_fetch_die_location_block (piece->v.ptr.die, c->per_cu,
                                           get_frame_address_in_block_wrapper,
                                           frame);
@@ -1159,7 +1160,7 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
        case DWARF_VALUE_LITERAL:
          {
            bfd_byte *contents;
-           const bfd_byte *data;
+           const bfd_byte *ldata;
            size_t n = ctx->len;
 
            if (byte_offset + TYPE_LENGTH (type) > n)
@@ -1168,12 +1169,12 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
            retval = allocate_value (type);
            contents = value_contents_raw (retval);
 
-           data = ctx->data + byte_offset;
+           ldata = ctx->data + byte_offset;
            n -= byte_offset;
 
            if (n > TYPE_LENGTH (type))
              n = TYPE_LENGTH (type);
-           memcpy (contents, data, n);
+           memcpy (contents, ldata, n);
          }
          break;
 
@@ -1740,7 +1741,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 
        case DW_OP_pick:
          offset = *op_ptr++;
-         unimplemented (op);
+         ax_pick (expr, offset);
          break;
          
        case DW_OP_swap:
@@ -1748,31 +1749,11 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
          break;
 
        case DW_OP_over:
-         /* We can't directly support DW_OP_over, but GCC emits it as
-            part of a sequence to implement signed modulus.  As a
-            hack, we recognize this sequence.  Note that if GCC ever
-            generates a branch to the middle of this sequence, then
-            we will die somehow.  */
-         if (op_end - op_ptr >= 4
-             && op_ptr[0] == DW_OP_over
-             && op_ptr[1] == DW_OP_div
-             && op_ptr[2] == DW_OP_mul
-             && op_ptr[3] == DW_OP_minus)
-           {
-             /* Sign extend the operands.  */
-             ax_ext (expr, addr_size_bits);
-             ax_simple (expr, aop_swap);
-             ax_ext (expr, addr_size_bits);
-             ax_simple (expr, aop_swap);
-             ax_simple (expr, aop_rem_signed);
-             op_ptr += 4;
-           }
-         else
-           unimplemented (op);
+         ax_pick (expr, 1);
          break;
 
        case DW_OP_rot:
-         unimplemented (op);
+         ax_simple (expr, aop_rot);
          break;
 
        case DW_OP_deref:
@@ -2450,27 +2431,23 @@ disassemble_dwarf_expression (struct ui_file *stream,
        case DW_OP_breg29:
        case DW_OP_breg30:
        case DW_OP_breg31:
-         data = read_sleb128 (data, end, &ul);
-         fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
+         data = read_sleb128 (data, end, &l);
+         fprintf_filtered (stream, " %s [$%s]", plongest (l),
                            gdbarch_register_name (arch, op - DW_OP_breg0));
          break;
 
        case DW_OP_bregx:
-         {
-           ULONGEST offset;
-
-           data = read_uleb128 (data, end, &ul);
-           data = read_sleb128 (data, end, &offset);
-           fprintf_filtered (stream, " register %s [$%s] offset %s",
-                             pulongest (ul),
-                             gdbarch_register_name (arch, (int) ul),
-                             pulongest (offset));
-         }
+         data = read_uleb128 (data, end, &ul);
+         data = read_sleb128 (data, end, &l);
+         fprintf_filtered (stream, " register %s [$%s] offset %s",
+                           pulongest (ul),
+                           gdbarch_register_name (arch, (int) ul),
+                           plongest (l));
          break;
 
        case DW_OP_fbreg:
-         data = read_sleb128 (data, end, &ul);
-         fprintf_filtered (stream, " %s", pulongest (ul));
+         data = read_sleb128 (data, end, &l);
+         fprintf_filtered (stream, " %s", plongest (l));
          break;
 
        case DW_OP_xderef_size:
This page took 0.025038 seconds and 4 git commands to generate.