{
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)
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);
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)
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;
case DW_OP_pick:
offset = *op_ptr++;
- unimplemented (op);
+ ax_pick (expr, offset);
break;
case DW_OP_swap:
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:
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: