44 #include <unordered_set> 55 struct type *subobj_type,
102 error (
_(
"access outside bounds of object " 103 "referenced via synthetic pointer"));
115 enum bfd_endian byte_order,
116 unsigned int addr_size,
121 if (buf_end - loc_ptr < 2 * addr_size)
128 loc_ptr += addr_size;
134 loc_ptr += addr_size;
139 if ((*low & base_mask) == base_mask)
143 if (*low == 0 && *high == 0)
160 enum bfd_endian byte_order,
161 unsigned int addr_size,
166 if (loc_ptr == buf_end)
171 case DW_LLE_end_of_list:
174 case DW_LLE_base_address:
175 if (loc_ptr + addr_size > buf_end)
181 loc_ptr += addr_size;
184 case DW_LLE_offset_pair:
211 enum bfd_endian byte_order)
213 uint64_t low_index, high_index;
215 if (loc_ptr == buf_end)
220 case DW_LLE_GNU_end_of_list_entry:
223 case DW_LLE_GNU_base_address_selection_entry:
231 case DW_LLE_GNU_start_end_entry:
242 case DW_LLE_GNU_start_length_entry:
247 if (loc_ptr + 4 > buf_end)
251 *new_ptr = loc_ptr + 4;
274 int signed_addr_p = bfd_get_sign_extend_vma (
objfile->
obfd);
280 loc_ptr = baton->
data;
281 buf_end = baton->
data + baton->
size;
292 loc_ptr, buf_end, &new_ptr,
301 loc_ptr, buf_end, &new_ptr,
303 addr_size, signed_addr_p);
312 base_address = high + base_offset;
319 error (
_(
"dwarf2_find_location_expression: " 320 "Corrupted DWARF expression."));
337 high += base_address;
347 unsigned int bytes_read;
350 loc_ptr += bytes_read;
353 if (low == high && pc == low)
359 struct symbol *pc_func = NULL;
366 *locexpr_length = length;
371 if (pc >= low && pc < high)
373 *locexpr_length = length;
400 *length = symbaton->
size;
401 *start = symbaton->
data;
415 struct value *result;
453 const gdb_byte **start,
size_t *length)
472 struct value *result;
509 const gdb_byte **start,
size_t *length)
521 error (
_(
"Could not find the frame base for \"%s\"."),
594 error (
_(
"Could not find type for DW_OP_const_type"));
596 error (
_(
"DW_OP_const_type has different sizes for type and data"));
614 error (
_(
"Location address is not set."));
628 int deref_size) OVERRIDE
640 data_src = deref_size == -1 ? parameter->
value : parameter->
data_value;
644 if (data_src == NULL)
646 _(
"Cannot resolve DW_AT_call_data_value"));
678 error (
_(
"frame address is not available."));
734 _(
"Entry values and tail call frames debugging is %s.\n"),
753 struct type *caller_core_addr_type;
763 _(
"DW_AT_call_target is not specified at %s in %s"),
765 (msym.minsym == NULL ?
"???" 769 if (caller_frame == NULL)
775 _(
"DW_AT_call_target DWARF block resolving " 776 "requires known frame which is currently not " 777 "available at %s in %s"),
779 (msym.minsym == NULL ?
"???" 797 const char *physname;
808 _(
"Cannot find function \"%s\" for a call site target " 811 (msym.
minsym == NULL ?
"???" 822 internal_error (__FILE__, __LINE__,
_(
"invalid call site target kind"));
838 _(
"DW_TAG_call_site resolving failed to find function " 839 "name for address %s"),
865 std::vector<CORE_ADDR> todo;
868 std::unordered_set<CORE_ADDR> addr_hash;
870 todo.push_back (verify_addr);
871 while (!todo.empty ())
890 if (target_addr == verify_addr)
896 _(
"DW_OP_entry_value resolving has found " 897 "function \"%s\" at %s can call itself via tail " 899 (msym.minsym == NULL ?
"???" 904 if (addr_hash.insert (target_addr).second)
905 todo.push_back (target_addr);
920 (msym.
minsym == NULL ?
"???" 935 std::vector<struct call_site *> *chain)
937 long length = chain->size ();
938 int callers, callees, idx;
940 if (*resultp == NULL)
950 if (!chain->empty ())
951 memcpy (result->
call_site, chain->data (),
953 resultp->reset (result);
958 for (idx = 0; idx <
length; idx++)
969 for (idx = 0; idx <
length; idx++)
977 for (idx = 0; idx <
callers; idx++)
978 if ((*resultp)->call_site[idx] != chain->at (idx))
980 (*resultp)->callers = idx;
987 for (idx = 0; idx <
callees; idx++)
988 if ((*resultp)->call_site[(*resultp)->length - 1 - idx]
989 != chain->at (
length - 1 - idx))
991 (*resultp)->callees = idx;
998 for (idx = 0; idx < (*resultp)->callers; idx++)
1001 for (idx = 0; idx < (*resultp)->callees; idx++)
1003 (*resultp)->call_site[(*resultp)->length
1004 - (*resultp)->callees + idx]);
1008 if ((*resultp)->callers == 0 && (*resultp)->callees == 0)
1014 resultp->reset (NULL);
1021 gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length);
1043 std::vector<struct call_site *> chain;
1052 std::unordered_set<CORE_ADDR> addr_hash;
1069 if (target_func_addr == callee_pc)
1077 target_call_site = NULL;
1081 struct symbol *target_func;
1091 if (target_call_site)
1093 if (addr_hash.insert (target_call_site->
pc).second)
1097 chain.push_back (target_call_site);
1106 target_call_site = NULL;
1107 while (!chain.empty ())
1116 if (target_call_site)
1120 while (target_call_site);
1135 _(
"There are no unambiguously determinable intermediate " 1136 "callers or callees between caller function \"%s\" at %s " 1137 "and callee function \"%s\" at %s"),
1138 (msym_caller.minsym == NULL
1141 (msym_callee.
minsym == NULL
1146 return retval.release ();
1188 if (kind == parameter->
kind)
1238 _(
"DW_OP_entry_value resolving callee gdbarch %s " 1239 "(of %s (%s)) does not match caller gdbarch %s"),
1242 (msym.
minsym == NULL ?
"???" 1247 if (caller_frame == NULL)
1253 "requires caller of %s (%s)"),
1255 (msym.
minsym == NULL ?
"???" 1262 if (target_addr != func_addr)
1269 _(
"DW_OP_entry_value resolving expects callee %s at %s " 1270 "but the called frame is for %s at %s"),
1271 (target_msym == NULL ?
"???" 1296 "at DW_TAG_call_site %s at %s"),
1315 static struct value *
1325 data_src = deref_size == -1 ? parameter->
value : parameter->
data_value;
1329 if (data_src == NULL)
1331 _(
"Cannot resolve DW_AT_call_data_value"));
1337 memcpy (data, data_src,
size);
1338 data[
size] = DW_OP_stack_value;
1347 static struct value *
1351 struct value *target_val;
1404 static struct value *
1412 struct value *outer_val, *target_val, *val;
1434 target_type, caller_frame,
1456 static struct value *
1475 _(
"DWARF-2 expression error: DW_OP_entry_value is supported " 1476 "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
1500 std::vector<dwarf_expr_piece> &&
pieces,
1527 ULONGEST nbits,
int bits_big_endian)
1529 unsigned int buf, avail;
1534 if (bits_big_endian)
1537 dest_offset += nbits - 1;
1538 dest += dest_offset / 8;
1539 dest_offset = 7 - dest_offset % 8;
1540 source_offset += nbits - 1;
1541 source += source_offset / 8;
1542 source_offset = 7 - source_offset % 8;
1546 dest += dest_offset / 8;
1548 source += source_offset / 8;
1554 buf = *(bits_big_endian ? source-- : source++) >> source_offset;
1555 buf <<= dest_offset;
1556 buf |= *dest & ((1 << dest_offset) - 1);
1559 nbits += dest_offset;
1560 avail = dest_offset + 8 - source_offset;
1563 if (nbits >= 8 && avail >= 8)
1565 *(bits_big_endian ? dest-- : dest++) = buf;
1574 size_t len = nbits / 8;
1579 if (bits_big_endian)
1583 memcpy (dest + 1, source + 1, len);
1587 memcpy (dest, source, len);
1596 buf |= *(bits_big_endian ? source-- : source++) << avail;
1597 *(bits_big_endian ? dest-- : dest++) = buf;
1608 buf |= *source << avail;
1610 buf &= (1 << nbits) - 1;
1611 *dest = (*dest & (~0 << nbits)) | buf;
1631 for (i = offs / 8, j = offs % 8; nbits; i++, j = 0)
1633 unsigned int ch =
bits[i];
1634 for (; j < 8 && nbits; j++, nbits--)
1635 *str++ = (ch & (msb0 ? (1 << (7 - j)) : (1 << j))) ?
'1' :
'0';
1642 check_copy_bitwise (
const gdb_byte *dest,
unsigned int dest_offset,
1643 const gdb_byte *source,
unsigned int source_offset,
1644 unsigned int nbits,
int msb0)
1646 size_t len =
align_up (dest_offset + nbits, 8);
1647 char *expected = (
char *) alloca (len + 1);
1648 char *actual = (
char *) alloca (len + 1);
1668 bits_to_str (expected, dest, 0, len, msb0);
1669 bits_to_str (expected + dest_offset, source, source_offset, nbits, msb0);
1673 memcpy (buf, dest, len / 8);
1674 copy_bitwise (buf, dest_offset, source, source_offset, nbits, msb0);
1675 bits_to_str (actual, buf, 0, len, msb0);
1678 expected[len] = actual[len] =
'\0';
1679 if (strcmp (expected, actual) != 0)
1680 error (
_(
"copy_bitwise %s != %s (%u+%u -> %u)"),
1681 expected, actual, source_offset, nbits, dest_offset);
1687 copy_bitwise_tests (
void)
1698 static const gdb_byte data_lsb0[] = {
1699 0x00, 0xf8, 0xff, 0x12, 0xa5, 0x4f
1701 static const gdb_byte data_msb0[] = {
1702 0x00, 0x1f, 0xff, 0x48, 0xa5, 0xf2
1705 constexpr
size_t data_nbits = 8 *
sizeof (data_lsb0);
1706 constexpr
unsigned max_nbits = 24;
1714 for (
int msb0 = 0; msb0 < 2; msb0++)
1716 const gdb_byte *data = msb0 ? data_msb0 : data_lsb0;
1718 for (
unsigned int nbits = 1; nbits <= max_nbits; nbits++)
1720 const unsigned int max_offset = data_nbits - nbits;
1722 for (
unsigned source_offset = 0;
1723 source_offset <= max_offset;
1726 for (
unsigned dest_offset = 0;
1727 dest_offset <= max_offset;
1730 check_copy_bitwise (data + dest_offset / 8,
1732 data + source_offset / 8,
1740 check_copy_bitwise (data_lsb0, 0, data_msb0, 0, data_nbits, msb0);
1741 check_copy_bitwise (data_msb0, 0, data_lsb0, 0, data_nbits, msb0);
1742 check_copy_bitwise (data, data_nbits - 7, data, 9, 0, msb0);
1756 return (start % 8 + n_bits + 7) / 8;
1787 _(
"Should not be able to create a lazy value with " 1788 "an enclosing type"));
1790 from_contents = NULL;
1813 for (i = 0; i < c->
pieces.size () && bits_to_skip >= c->
pieces[i].size; i++)
1814 bits_to_skip -= c->
pieces[i].size;
1816 for (; i < c->
pieces.size () &&
offset < max_offset; i++)
1819 size_t this_size_bits, this_size;
1821 this_size_bits = p->
size - bits_to_skip;
1822 if (this_size_bits > max_offset -
offset)
1823 this_size_bits = max_offset -
offset;
1839 bits_to_skip += reg_bits - (p->
offset + p->
size);
1842 bits_to_skip += p->
offset;
1845 buffer.resize (this_size);
1852 this_size,
buffer.data (),
1865 buffer.data (), bits_to_skip % 8,
1871 if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0)
1877 this_size,
buffer.data (),
1881 _(
"Can't do read-modify-write to " 1882 "update bitfield; containing word " 1883 "has been optimized out"));
1886 _(
"Can't do read-modify-write to " 1887 "update bitfield; containing word " 1896 this_size,
buffer.data ());
1903 bits_to_skip += p->
offset;
1907 if (bits_to_skip % 8 == 0 && this_size_bits % 8 == 0
1915 this_size_bits / 8);
1918 p->
v.
mem.in_stack_memory,
1919 p->
v.
mem.addr + bits_to_skip / 8,
1921 this_size_bits / 8);
1926 buffer.resize (this_size);
1932 p->
v.
mem.in_stack_memory,
1933 p->
v.
mem.addr + bits_to_skip / 8,
1934 buffer.data (), this_size);
1936 buffer.data (), bits_to_skip % 8,
1942 if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0)
1956 &
buffer[this_size - 1], 1);
1984 if (p->
offset + p->
size > stack_value_size_bits)
1989 bits_to_skip += stack_value_size_bits - p->
offset - p->
size;
1991 bits_to_skip += p->
offset;
2009 size_t n = this_size_bits;
2012 bits_to_skip += p->
offset;
2013 if (bits_to_skip >= literal_size_bits)
2015 if (n > literal_size_bits - bits_to_skip)
2016 n = literal_size_bits - bits_to_skip;
2043 offset += this_size_bits;
2076 for (i = 0; i < c->
pieces.size () && bit_length > 0; i++)
2079 size_t this_size_bits = p->
size;
2083 if (bit_offset >= this_size_bits)
2085 bit_offset -= this_size_bits;
2089 bit_length -= this_size_bits - bit_offset;
2093 bit_length -= this_size_bits;
2112 static struct value *
2117 struct value *result = NULL;
2126 if (byte_offset >= 0
2129 bytes += byte_offset;
2143 static struct value *
2155 if (orig_type == NULL)
2161 if (baton.
data != NULL)
2174 static struct value *
2185 enum bfd_endian byte_order;
2196 for (i = 0; i < c->
pieces.size () && bit_length > 0; i++)
2199 size_t this_size_bits = p->
size;
2203 if (bit_offset >= this_size_bits)
2205 bit_offset -= this_size_bits;
2209 bit_length -= this_size_bits - bit_offset;
2213 bit_length -= this_size_bits;
2218 if (bit_length != 0)
2219 error (
_(
"Invalid use of DW_OP_implicit_pointer"));
2241 byte_offset += piece->
v.
ptr.offset;
2251 static struct value *
2270 (closure->
pieces[0].v.ptr.die_sect_off,
2271 closure->
pieces[0].v.ptr.offset,
2325 static struct value *
2329 struct type *subobj_type,
2332 struct value *retval;
2335 if (subobj_type == NULL)
2338 subobj_byte_offset = 0;
2340 else if (subobj_byte_offset < 0)
2384 if (ctx.
pieces.size () > 0)
2390 bit_size += piece.
size;
2415 if (subobj_byte_offset != 0)
2416 error (
_(
"cannot use offset on synthetic pointer to register"));
2439 struct type *ptr_type;
2465 address + subobj_byte_offset);
2466 if (in_stack_memory)
2479 if (subobj_byte_offset + len > max)
2493 subobj_byte_offset += n - max;
2505 if (subobj_byte_offset + n > ctx.
len)
2511 memcpy (contents, ctx.
data + subobj_byte_offset, n);
2561 if (dlbaton == NULL || dlbaton->
size == 0)
2623 addr_stack ? addr_stack->
addr : 0,
2671 for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->
next)
2675 error (
_(
"cannot find reference address for offset property"));
2676 if (pinfo->valaddr != NULL)
2695 const char *result_name,
2697 unsigned char *registers_used,
2725 data, data +
size, per_cu);
2805 int deref_size) OVERRIDE
2872 const char *
name = get_DW_OP_name (op);
2875 error (
_(
"DWARF operator %s cannot be translated to an agent expression"),
2878 error (
_(
"Unknown DWARF operator 0x%02x cannot be translated " 2879 "to an agent expression"),
2897 _(
"bad DWARF register number %d"), dwarf_reg);
2911 if ((
int) dwarf_reg == dwarf_reg)
2912 error (
_(
"Unable to access DWARF register number %d"), (
int) dwarf_reg);
2913 error (
_(
"Unable to access DWARF register number %s"),
2952 else if (nbits <= 16)
2954 else if (nbits <= 32)
2960 if (8 * nbytes == nbits)
3002 unsigned int addr_size,
const gdb_byte *op_ptr,
3008 std::vector<int> dw_labels, patches;
3009 const gdb_byte *
const base = op_ptr;
3010 const gdb_byte *previous_piece = op_ptr;
3013 unsigned int addr_size_bits = 8 * addr_size;
3016 std::vector<int> offsets (op_end - op_ptr, -1);
3021 while (op_ptr < op_end)
3023 enum dwarf_location_atom op = (
enum dwarf_location_atom) *op_ptr;
3024 uint64_t uoffset,
reg;
3028 offsets[op_ptr - base] = expr->
len;
3086 op_ptr += addr_size;
3091 if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
3181 case DW_OP_implicit_value:
3186 if (op_ptr +
len > op_end)
3187 error (
_(
"DW_OP_implicit_value: too few bytes available."));
3189 error (
_(
"Cannot translate DW_OP_implicit_value of %d bytes"),
3196 "DW_OP_implicit_value");
3202 case DW_OP_stack_value:
3265 const struct block *b;
3266 struct symbol *framefunc;
3271 error (
_(
"No block found for address"));
3276 error (
_(
"No function found for block"));
3279 &datastart, &datalen);
3283 datastart + datalen, per_cu);
3323 case DW_OP_deref_size:
3327 if (op == DW_OP_deref_size)
3333 error (
_(
"Unsupported size %d in %s"),
3334 size, get_DW_OP_name (op));
3341 ax_ext (expr, addr_size_bits);
3346 i =
ax_goto (expr, aop_if_goto);
3363 ax_ext (expr, addr_size_bits);
3367 case DW_OP_plus_uconst:
3384 ax_ext (expr, addr_size_bits);
3386 ax_ext (expr, addr_size_bits);
3429 ax_ext (expr, addr_size_bits);
3431 ax_ext (expr, addr_size_bits);
3439 ax_ext (expr, addr_size_bits);
3441 ax_ext (expr, addr_size_bits);
3450 ax_ext (expr, addr_size_bits);
3452 ax_ext (expr, addr_size_bits);
3459 ax_ext (expr, addr_size_bits);
3461 ax_ext (expr, addr_size_bits);
3468 ax_ext (expr, addr_size_bits);
3470 ax_ext (expr, addr_size_bits);
3477 ax_ext (expr, addr_size_bits);
3479 ax_ext (expr, addr_size_bits);
3485 case DW_OP_call_frame_cfa:
3490 const gdb_byte *cfa_start, *cfa_end;
3494 &text_offset, &cfa_start, &cfa_end))
3516 case DW_OP_GNU_push_tls_address:
3517 case DW_OP_form_tls_address:
3521 case DW_OP_push_object_address:
3529 dw_labels.push_back (op_ptr +
offset - base);
3530 patches.push_back (i);
3538 i =
ax_goto (expr, aop_if_goto);
3539 dw_labels.push_back (op_ptr +
offset - base);
3540 patches.push_back (i);
3547 case DW_OP_bit_piece:
3551 if (op_ptr - 1 == previous_piece)
3552 error (
_(
"Cannot translate empty pieces to agent expressions"));
3553 previous_piece = op_ptr - 1;
3556 if (op == DW_OP_piece)
3565 error (
_(
"Expression pieces exceed word size"));
3591 if (bits_collected > 0)
3593 if (bits_big_endian)
3609 bits_collected +=
size;
3614 case DW_OP_GNU_uninit:
3621 int size = (op == DW_OP_call2 ? 2 : 4);
3626 cu_offset
offset = (cu_offset) uoffset;
3638 case DW_OP_call_ref:
3647 for (i = 0; i < patches.size (); ++i)
3649 int targ = offsets[dw_labels[i]];
3659 static struct value *
3676 static struct value *
3705 return data == end ||
data[0] == DW_OP_piece ||
data[0] == DW_OP_bit_piece;
3725 return _(
"bad_register_number");
3741 unsigned int addr_size)
3746 if (
data[0] >= DW_OP_reg0 &&
data[0] <= DW_OP_reg31)
3752 else if (
data[0] == DW_OP_regx)
3760 else if (
data[0] == DW_OP_fbreg)
3762 const struct block *b;
3763 struct symbol *framefunc;
3765 int64_t frame_offset;
3766 const gdb_byte *base_data, *new_data, *save_data = data;
3768 int64_t base_offset = 0;
3778 error (
_(
"No block found for address for symbol \"%s\"."),
3784 error (
_(
"No function found for block for symbol \"%s\"."),
3789 if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
3793 frame_reg = base_data[0] - DW_OP_breg0;
3796 if (buf_end != base_data + base_size)
3797 error (
_(
"Unexpected opcode after " 3798 "DW_OP_breg%u for symbol \"%s\"."),
3801 else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
3804 frame_reg = base_data[0] - DW_OP_reg0;
3815 _(
"a variable at frame base reg $%s offset %s+%s"),
3819 else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
3827 _(
"a variable at offset %s from base reg $%s"),
3846 else if (data + 1 + addr_size < end
3847 && (data[0] == DW_OP_addr
3848 || (addr_size == 4 && data[0] == DW_OP_const4u)
3849 || (addr_size == 8 && data[0] == DW_OP_const8u))
3850 && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
3851 || data[1 + addr_size] == DW_OP_form_tls_address)
3859 _(
"a thread-local variable at offset 0x%s " 3860 "in the thread-local storage for `%s'"),
3863 data += 1 + addr_size + 1;
3870 else if (data + 3 <= end
3871 && data + 1 + (
leb128_size = skip_leb128 (data + 1, end)) < end
3872 && data[0] == DW_OP_GNU_const_index
3874 && (data[1 +
leb128_size] == DW_OP_GNU_push_tls_address
3875 || data[1 +
leb128_size] == DW_OP_form_tls_address)
3883 _(
"a thread-local variable at offset 0x%s " 3884 "in the thread-local storage for `%s'"),
3889 else if (data[0] >= DW_OP_lit0
3890 && data[0] <= DW_OP_lit31
3892 && data[1] == DW_OP_stack_value)
3911 int offset_size,
const gdb_byte *start,
3913 int indent,
int all,
3918 || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
3920 enum dwarf_location_atom op = (
enum dwarf_location_atom) *data++;
3925 name = get_DW_OP_name (op);
3928 error (
_(
"Unrecognized DWARF opcode 0x%02x at %ld"),
3929 op, (
long) (data - 1 - start));
3931 (
long) (data - 1 - start),
name);
4033 case DW_OP_implicit_value:
4090 case DW_OP_xderef_size:
4091 case DW_OP_deref_size:
4097 case DW_OP_plus_uconst:
4106 (
long) (data + l - start));
4113 (
long) (data + l - start));
4128 case DW_OP_call_ref:
4131 data += offset_size;
4140 case DW_OP_bit_piece:
4151 case DW_OP_implicit_pointer:
4152 case DW_OP_GNU_implicit_pointer:
4156 data += offset_size;
4166 case DW_OP_deref_type:
4167 case DW_OP_GNU_deref_type:
4169 int addr_size = *data++;
4173 cu_offset
offset = (cu_offset) ul;
4183 case DW_OP_const_type:
4184 case DW_OP_GNU_const_type:
4189 cu_offset type_die = (cu_offset) ul;
4198 case DW_OP_regval_type:
4199 case DW_OP_GNU_regval_type:
4206 cu_offset type_die = (cu_offset) ul;
4218 case DW_OP_GNU_convert:
4219 case DW_OP_reinterpret:
4220 case DW_OP_GNU_reinterpret:
4223 cu_offset type_die = (cu_offset) ul;
4240 case DW_OP_entry_value:
4241 case DW_OP_GNU_entry_value:
4245 start, data, data + ul, indent + 2,
4250 case DW_OP_GNU_parameter_ref:
4256 case DW_OP_GNU_addr_index:
4261 case DW_OP_GNU_const_index:
4285 int first_piece = 1, bad = 0;
4290 int disassemble = 1;
4301 data, end, addr_size);
4305 || data[0] == DW_OP_piece
4306 || data[0] == DW_OP_bit_piece)
4314 addr_size, offset_size, data,
4322 int empty = data == here;
4326 if (data[0] == DW_OP_piece)
4339 else if (data[0] == DW_OP_bit_piece)
4348 _(
"an empty %s-bit piece"),
4352 _(
" [%s-bit piece, offset %s bits]"),
4363 if (bad || data > end)
4364 error (
_(
"Corrupted DWARF2 expression for \"%s\"."),
4383 objfile, addr_size, offset_size,
4398 if (dlbaton->
size == 0)
4399 value->optimized_out = 1;
4410 unsigned char *registers_used,
4417 if (dlbaton->
size == 0)
4421 sym, pc,
gdbarch, registers_used, addr_size,
4444 static struct value *
4469 static struct value *
4519 int signed_addr_p = bfd_get_sign_extend_vma (
objfile->
obfd);
4525 loc_ptr = dlbaton->
data;
4526 buf_end = dlbaton->
data + dlbaton->
size;
4540 loc_ptr, buf_end, &new_ptr,
4554 base_address = high + base_offset;
4563 error (
_(
"Corrupted DWARF expression for symbol \"%s\"."),
4570 low += base_address;
4571 high += base_address;
4586 objfile, addr_size, offset_size,
4609 value->optimized_out = 1;
4620 unsigned char *registers_used,
4634 sym, pc,
gdbarch, registers_used, addr_size,
4656 _(
"Set entry values and tail call frames " 4658 _(
"Show entry values and tail call frames " 4660 _(
"When non-zero, the process of determining " 4661 "parameter values from function entry point " 4662 "and tail call frames will be printed."),
struct frame_info * frame_find_by_id(struct frame_id id)
struct value * value_zero(struct type *type, enum lval_type lv)
void push_dwarf_reg_entry_value(enum call_site_parameter_kind kind, union call_site_parameter_u kind_u, int deref_size) OVERRIDE
struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_cu_off(cu_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu, CORE_ADDR(*get_frame_pc)(void *baton), void *baton)
static enum debug_loc_kind decode_debug_loc_addresses(const gdb_byte *loc_ptr, const gdb_byte *buf_end, const gdb_byte **new_ptr, CORE_ADDR *low, CORE_ADDR *high, enum bfd_endian byte_order, unsigned int addr_size, int signed_addr_p)
CORE_ADDR read_addr_from_reg(int regnum) OVERRIDE
int dwarf2_per_cu_offset_size(struct dwarf2_per_cu_data *cu)
struct dwarf2_per_cu_data * per_cu
static struct value * locexpr_read_variable_at_entry(struct symbol *symbol, struct frame_info *frame)
static void chain_candidate(struct gdbarch *gdbarch, gdb::unique_xmalloc_ptr< struct call_site_chain > *resultp, std::vector< struct call_site *> *chain)
struct type * referenced_type
int ax_goto(struct agent_expr *x, enum agent_op op)
void mark_value_bits_unavailable(struct value *value, LONGEST offset, LONGEST length)
CORE_ADDR get_frame_address_in_block(struct frame_info *this_frame)
struct dwarf2_per_cu_data * per_cu
union dynamic_prop_data data
static void loclist_describe_location(struct symbol *symbol, CORE_ADDR addr, struct ui_file *stream)
struct frame_info * get_selected_frame(const char *message)
struct type * builtin_func_ptr
static void access_memory(struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
CORE_ADDR get_frame_pc(struct frame_info *frame)
#define SYMBOL_PRINT_NAME(symbol)
void set_value_initialized(struct value *val, int status)
void read_mem(gdb_byte *buf, CORE_ADDR addr, size_t len) OVERRIDE
struct call_site * call_site[1]
static int leb128_size(const gdb_byte *buf)
int dwarf2_fetch_cfa_info(struct gdbarch *gdbarch, CORE_ADDR pc, struct dwarf2_per_cu_data *data, int *regnum_out, LONGEST *offset_out, CORE_ADDR *text_offset_out, const gdb_byte **cfa_start_out, const gdb_byte **cfa_end_out)
void dwarf2_compile_property_to_c(string_file &stream, const char *result_name, struct gdbarch *gdbarch, unsigned char *registers_used, const struct dynamic_prop *prop, CORE_ADDR pc, struct symbol *sym)
struct dwarf2_per_cu_data * per_cu
static const char * locexpr_regname(struct gdbarch *gdbarch, int dwarf_regnum)
short dwarf2_version(struct dwarf2_per_cu_data *per_cu)
static struct value * locexpr_read_variable(struct symbol *symbol, struct frame_info *frame)
static void show_entry_values_debug(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
void fputs_unfiltered(const char *buf, struct ui_file *file)
ULONGEST read_unsigned_leb128(bfd *, const gdb_byte *, unsigned int *)
void read_mem(gdb_byte *buf, CORE_ADDR addr, size_t len) OVERRIDE
std::vector< dwarf_expr_piece > pieces
void compile_dwarf_bounds_to_c(string_file &stream, const char *result_name, const struct dynamic_prop *prop, struct symbol *sym, CORE_ADDR pc, struct gdbarch *arch, unsigned char *registers_used, unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, struct dwarf2_per_cu_data *per_cu)
union dwarf_expr_piece::@38 v
void dwarf_call(cu_offset die_offset) OVERRIDE
struct value * value_from_contents(struct type *type, const gdb_byte *contents)
CORE_ADDR dwarf2_read_addr_index(struct dwarf2_per_cu_data *per_cu, unsigned int addr_index)
struct frame_info * get_prev_frame(struct frame_info *this_frame)
LONGEST value_as_long(struct value *val)
#define BMSYMBOL_VALUE_ADDRESS(symbol)
static const struct lval_funcs entry_data_value_funcs
int fputc_filtered(int c, struct ui_file *stream)
LONGEST value_embedded_offset(const struct value *value)
static void throw_bad_regnum_error(ULONGEST dwarf_reg)
CORE_ADDR dwarf2_frame_cfa(struct frame_info *this_frame)
LONGEST value_bitsize(const struct value *value)
struct frame_info * frame
void value_incref(struct value *val)
struct value * value_at(struct type *type, CORE_ADDR addr)
struct type * value_enclosing_type(const struct value *value)
void put_frame_register_bytes(struct frame_info *frame, int regnum, CORE_ADDR offset, int len, const gdb_byte *myaddr)
CORE_ADDR get_frame_cfa()
char * plongest(LONGEST l)
struct value * fetch(int n)
static struct value * loclist_read_variable(struct symbol *symbol, struct frame_info *frame)
#define FIELD_DWARF_BLOCK(thisfld)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
#define TYPE_SPECIFIC_FIELD(thistype)
void mark_value_bytes_unavailable(struct value *value, LONGEST offset, LONGEST length)
constexpr std::underlying_type< E >::type to_underlying(E val) noexcept
static const struct lval_funcs pieced_value_funcs
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
const struct frame_id null_frame_id
void * value_computed_closure(const struct value *v)
static struct piece_closure * allocate_piece_closure(struct dwarf2_per_cu_data *per_cu, std::vector< dwarf_expr_piece > &&pieces, struct frame_info *frame)
const gdb_byte * dwarf2_fetch_constant_bytes(sect_offset, struct dwarf2_per_cu_data *, struct obstack *, LONGEST *)
std::unique_ptr< struct value, value_deleter > gdb_value_up
void value_free(struct value *val)
struct symbol * block_linkage_function(const struct block *bl)
struct type * get_base_type(cu_offset die_offset, int size) OVERRIDE
void type_print(struct type *type, const char *varstring, struct ui_file *stream, int show)
void read_value_memory(struct value *val, LONGEST bit_offset, int stack, CORE_ADDR memaddr, gdb_byte *buffer, size_t length)
void set_value_lazy(struct value *value, int val)
static void func_verify_no_selftailcall(struct gdbarch *gdbarch, CORE_ADDR verify_addr)
static void per_cu_dwarf_call(struct dwarf_expr_context *ctx, cu_offset die_offset, struct dwarf2_per_cu_data *per_cu)
struct value * get_reg_value(struct type *type, int regnum) OVERRIDE
void dwarf_expr_require_composition(const gdb_byte *op_ptr, const gdb_byte *op_end, const char *op_name)
int dwarf2_per_cu_addr_size(struct dwarf2_per_cu_data *cu)
#define SYMBOL_BLOCK_OPS(symbol)
const gdb_byte * safe_read_uleb128(const gdb_byte *buf, const gdb_byte *buf_end, uint64_t *r)
void ax_reg(struct agent_expr *x, int reg)
static void loclist_find_frame_base_location(struct symbol *framefunc, CORE_ADDR pc, const gdb_byte **start, size_t *length)
static int call_site_parameter_matches(struct call_site_parameter *parameter, enum call_site_parameter_kind kind, union call_site_parameter_u kind_u)
#define FIELD_LOC_KIND(thisfld)
const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs
#define bits(obj, st, fn)
const struct symbol_computed_ops dwarf2_locexpr_funcs
const gdb_byte * dwarf2_find_location_expression(struct dwarf2_loclist_baton *baton, size_t *locexpr_length, CORE_ADDR pc)
void get_frame_base(const gdb_byte **start, size_t *length) OVERRIDE
void mark_value_bits_optimized_out(struct value *value, LONGEST offset, LONGEST length)
struct objfile * dwarf2_per_cu_objfile(struct dwarf2_per_cu_data *cu)
struct dwarf_expr_piece::@38::@39 mem
struct value * allocate_value(struct type *type)
const struct block * block_for_pc(CORE_ADDR pc)
static int dwarf2_locexpr_baton_eval(const struct dwarf2_locexpr_baton *dlbaton, struct frame_info *frame, CORE_ADDR addr, CORE_ADDR *valp)
CORE_ADDR get_frame_cfa()
static enum debug_loc_kind decode_debug_loc_dwo_addresses(struct dwarf2_per_cu_data *per_cu, const gdb_byte *loc_ptr, const gdb_byte *buf_end, const gdb_byte **new_ptr, CORE_ADDR *low, CORE_ADDR *high, enum bfd_endian byte_order)
int longest_to_int(LONGEST)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
CORE_ADDR get_addr_index(unsigned int index) OVERRIDE
struct gdbarch * frame_unwind_arch(struct frame_info *next_frame)
#define TYPE_IS_REFERENCE(t)
static void write_pieced_value(struct value *to, struct value *from)
static struct value * dwarf2_evaluate_loc_desc_full(struct type *type, struct frame_info *frame, const gdb_byte *data, size_t size, struct dwarf2_per_cu_data *per_cu, struct type *subobj_type, LONGEST subobj_byte_offset)
scoped_restore_tmpl< T > make_scoped_restore(T *var)
static void rw_pieced_value(struct value *v, struct value *from)
void add_setshow_zuinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
LONGEST value_offset(const struct value *value)
#define MSYMBOL_PRINT_NAME(symbol)
struct value * dwarf2_evaluate_loc_desc(struct type *type, struct frame_info *frame, const gdb_byte *data, size_t size, struct dwarf2_per_cu_data *per_cu)
struct value * value_from_register(struct type *type, int regnum, struct frame_info *frame)
static void locexpr_generate_c_location(struct symbol *sym, string_file &stream, struct gdbarch *gdbarch, unsigned char *registers_used, CORE_ADDR pc, const char *result_name)
enum frame_type get_frame_type(struct frame_info *frame)
void(* find_frame_base_location)(struct symbol *framefunc, CORE_ADDR pc, const gdb_byte **start, size_t *length)
void dwarf2_compile_expr_to_ax(struct agent_expr *expr, struct axs_value *loc, unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, struct dwarf2_per_cu_data *per_cu)
struct frame_id get_frame_id(struct frame_info *fi)
struct type * check_typedef(struct type *type)
int dwarf_reg_to_regnum_or_error(struct gdbarch *arch, ULONGEST dwarf_reg)
const gdb_byte * value_contents(struct value *value)
static struct symbol * func_addr_to_tail_call_list(struct gdbarch *gdbarch, CORE_ADDR addr)
#define CATCH(EXCEPTION, MASK)
static struct value * loclist_read_variable_at_entry(struct symbol *symbol, struct frame_info *frame)
CORE_ADDR get_tls_address(CORE_ADDR offset) OVERRIDE
static void locexpr_describe_location_1(struct symbol *symbol, CORE_ADDR addr, struct ui_file *stream, const gdb_byte *data, size_t size, struct objfile *objfile, unsigned int addr_size, int offset_size, struct dwarf2_per_cu_data *per_cu)
static void locexpr_describe_location(struct symbol *symbol, CORE_ADDR addr, struct ui_file *stream)
static enum symbol_needs_kind loclist_symbol_needs(struct symbol *symbol)
static void free_pieced_value_closure(struct value *v)
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
int fputc_unfiltered(int c, struct ui_file *stream)
static void tailcall_dump(struct gdbarch *gdbarch, const struct call_site *call_site)
struct value * allocate_computed_value(struct type *type, const struct lval_funcs *funcs, void *closure)
objfile(bfd *, const char *, objfile_flags)
const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs
void fprintf_filtered(struct ui_file *stream, const char *format,...)
struct symbol * find_pc_function(CORE_ADDR pc)
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
const struct block * get_frame_block(struct frame_info *frame, CORE_ADDR *addr_in_block)
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
void push_address(CORE_ADDR value, bool in_stack_memory)
static int piece_end_p(const gdb_byte *data, const gdb_byte *end)
void exception_print(struct ui_file *file, struct gdb_exception e)
const gdb_byte * value_contents_all(struct value *value)
#define gdb_assert_not_reached(message)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
std::vector< dwarf_expr_piece > pieces
struct dwarf2_per_cu_data * per_cu
void eval(const gdb_byte *addr, size_t len)
struct gdbarch * get_objfile_arch(const struct objfile *objfile)
char * pulongest(ULONGEST u)
static CORE_ADDR locexpr_get_frame_base(struct symbol *framefunc, struct frame_info *frame)
struct frame_info * frame
void ax_ext(struct agent_expr *x, int n)
static struct value * entry_data_value_coerce_ref(const struct value *value)
static struct value * dwarf_entry_parameter_to_value(struct call_site_parameter *parameter, CORE_ADDR deref_size, struct type *type, struct frame_info *caller_frame, struct dwarf2_per_cu_data *per_cu)
void ax_label(struct agent_expr *x, int patch, int target)
struct gdbarch * get_type_arch(const struct type *type)
static const gdb_byte * gdb_read_uleb128(const gdb_byte *buf, const gdb_byte *buf_end, uint64_t *r)
static void invalid_synthetic_pointer(void)
static struct value * value_of_dwarf_reg_entry(struct type *type, struct frame_info *frame, enum call_site_parameter_kind kind, union call_site_parameter_u kind_u)
struct dwarf2_locexpr_baton locexpr
static struct value * value_of_dwarf_block_entry(struct type *type, struct frame_info *frame, const gdb_byte *block, size_t block_len)
CORE_ADDR gdbarch_adjust_dwarf2_addr(struct gdbarch *gdbarch, CORE_ADDR pc)
#define complaint(COMPLAINTS, FMT,...)
const char * gdbarch_register_name(struct gdbarch *gdbarch, int regnr)
void ax_simple(struct agent_expr *x, enum agent_op op)
struct property_addr_info * next
struct value * value_at_lazy(struct type *type, CORE_ADDR addr)
static CORE_ADDR call_site_to_target_addr(struct gdbarch *call_site_gdbarch, struct call_site *call_site, struct frame_info *caller_frame)
int dwarf_reg_to_regnum(struct gdbarch *arch, int dwarf_reg)
CORE_ADDR dwarf2_per_cu_text_offset(struct dwarf2_per_cu_data *cu)
void set_value_offset(struct value *value, LONGEST offset)
struct type * dwarf2_get_die_type(cu_offset die_offset, struct dwarf2_per_cu_data *per_cu)
struct cmd_list_element * setdebuglist
LONGEST value_bitpos(const struct value *value)
static void entry_data_value_free_closure(struct value *v)
struct dwarf_expr_piece::@38::@41 ptr
void read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
const char * objfile_name(const struct objfile *objfile)
#define TYPE_TAIL_CALL_LIST(thistype)
enum symbol_needs_kind needs
enum dwarf_value_location location
CORE_ADDR address_from_register(int regnum, struct frame_info *frame)
const gdb_byte * safe_read_sleb128(const gdb_byte *buf, const gdb_byte *buf_end, int64_t *r)
CORE_ADDR read_addr_from_reg(int dwarf_regnum) OVERRIDE
void dwarf_call(cu_offset die_offset) OVERRIDE
static const gdb_byte * disassemble_dwarf_expression(struct ui_file *stream, struct gdbarch *arch, unsigned int addr_size, int offset_size, const gdb_byte *start, const gdb_byte *data, const gdb_byte *end, int indent, int all, struct dwarf2_per_cu_data *per_cu)
struct dwarf2_offset_baton offset_info
int value_bits_synthetic_pointer(const struct value *value, LONGEST offset, LONGEST length)
int gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, int dwarf2_regnr)
struct dwarf_expr_piece::@38::@40 literal
int dwarf_block_to_dwarf_reg(const gdb_byte *buf, const gdb_byte *buf_end)
void throw_exception(struct gdb_exception exception)
static struct value * coerce_pieced_ref(const struct value *value)
struct dwarf2_loclist_baton loclist
int get_frame_func_if_available(struct frame_info *this_frame, CORE_ADDR *pc)
struct value * value_from_pointer(struct type *type, CORE_ADDR addr)
__extension__ enum call_site_parameter_kind kind
ULONGEST align_up(ULONGEST v, int n)
int value_optimized_out(struct value *value)
#define TYPE_TARGET_TYPE(thistype)
char * phex_nz(ULONGEST l, int sizeof_l)
static const gdb_byte * locexpr_describe_location_piece(struct symbol *symbol, struct ui_file *stream, CORE_ADDR addr, struct objfile *objfile, struct dwarf2_per_cu_data *per_cu, const gdb_byte *data, const gdb_byte *end, unsigned int addr_size)
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
static CORE_ADDR get_frame_pc_for_per_cu_dwarf_call(void *baton)
void func_get_frame_base_dwarf_block(struct symbol *framefunc, CORE_ADDR pc, const gdb_byte **start, size_t *length)
CORE_ADDR target_translate_tls_address(struct objfile *objfile, CORE_ADDR offset)
struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_sect_off(sect_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu, CORE_ADDR(*get_frame_pc)(void *baton), void *baton)
#define SYMBOL_BLOCK_VALUE(symbol)
#define TYPE_CODE(thistype)
static enum symbol_needs_kind locexpr_get_symbol_read_needs(struct symbol *symbol)
struct type * builtin_data_ptr
struct complaints * symfile_complaints
static struct value * indirect_synthetic_pointer(sect_offset die, LONGEST byte_offset, struct dwarf2_per_cu_data *per_cu, struct frame_info *frame, struct type *type)
const gdb_byte * data_value
void value_contents_copy(struct value *dst, LONGEST dst_offset, struct value *src, LONGEST src_offset, LONGEST length)
struct minimal_symbol * minsym
CORE_ADDR fetch_address(int n)
struct call_site_parameter parameter[1]
static CORE_ADDR get_ax_pc(void *baton)
void compile_dwarf_expr_to_c(string_file &stream, const char *result_name, struct symbol *sym, CORE_ADDR pc, struct gdbarch *arch, unsigned char *registers_used, unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, struct dwarf2_per_cu_data *per_cu)
void _initialize_dwarf2loc(void)
static size_t bits_to_bytes(ULONGEST start, ULONGEST n_bits)
static void loclist_tracepoint_var_ref(struct symbol *symbol, struct agent_expr *ax, struct axs_value *value)
CORE_ADDR get_object_address()
static enum debug_loc_kind decode_debug_loclists_addresses(struct dwarf2_per_cu_data *per_cu, const gdb_byte *loc_ptr, const gdb_byte *buf_end, const gdb_byte **new_ptr, CORE_ADDR *low, CORE_ADDR *high, enum bfd_endian byte_order, unsigned int addr_size, int signed_addr_p)
static LONGEST extract_signed_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
static void loclist_generate_c_location(struct symbol *sym, string_file &stream, struct gdbarch *gdbarch, unsigned char *registers_used, CORE_ADDR pc, const char *result_name)
void require_rvalue(struct agent_expr *ax, struct axs_value *value)
CORE_ADDR get_object_address()
void ax_trace_quick(struct agent_expr *x, int n)
void ax_const_l(struct agent_expr *x, LONGEST l)
gdb::def_vector< gdb_byte > byte_vector
void set_value_stack(struct value *value, int val)
void ax_pick(struct agent_expr *x, int depth)
int get_frame_register_bytes(struct frame_info *frame, int regnum, CORE_ADDR offset, int len, gdb_byte *myaddr, int *optimizedp, int *unavailablep)
enum dynamic_prop_kind kind
#define SYMBOL_NATURAL_NAME(symbol)
#define SYMBOL_LOCATION_BATON(symbol)
enum dwarf_value_location location
struct value * value_parent(const struct value *value)
int gdbarch_bits_big_endian(struct gdbarch *gdbarch)
unsigned long long ULONGEST
static struct call_site_parameter * dwarf_expr_reg_to_entry_parameter(struct frame_info *frame, enum call_site_parameter_kind kind, union call_site_parameter_u kind_u, struct dwarf2_per_cu_data **per_cu_return)
int dwarf_always_disassemble
void release_value(struct value *val)
unsigned int entry_values_debug
static int check_pieced_synthetic_pointer(const struct value *value, LONGEST bit_offset, int bit_length)
struct call_site * call_site_for_pc(struct gdbarch *gdbarch, CORE_ADDR pc)
int register_size(struct gdbarch *gdbarch, int regnum)
struct type * value_type(const struct value *value)
#define SYMBOL_TYPE(symbol)
struct call_site * tail_call_next
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
struct cmd_list_element * showdebuglist
static CORE_ADDR get_frame_address_in_block_wrapper(void *baton)
static void locexpr_find_frame_base_location(struct symbol *framefunc, CORE_ADDR pc, const gdb_byte **start, size_t *length)
CORE_ADDR value_as_address(struct value *val)
int dwarf2_evaluate_property(const struct dynamic_prop *prop, struct frame_info *frame, struct property_addr_info *addr_stack, CORE_ADDR *value)
static struct call_site_chain * call_site_find_chain_1(struct gdbarch *gdbarch, CORE_ADDR caller_pc, CORE_ADDR callee_pc)
void ax_zero_ext(struct agent_expr *x, int n)
gdb_byte * value_contents_raw(struct value *value)
void get_frame_base(const gdb_byte **start, size_t *length) OVERRIDE
static void unimplemented(unsigned int op)
CORE_ADDR get_tls_address(CORE_ADDR offset) OVERRIDE
#define TYPE_LENGTH(thistype)
static void read_pieced_value(struct value *v)
struct dwarf2_per_cu_data * per_cu
CORE_ADDR get_addr_index(unsigned int index) OVERRIDE
static void * copy_pieced_value_closure(const struct value *v)
#define FIELD_STATIC_PHYSADDR(thisfld)
struct value * get_reg_value(struct type *type, int dwarf_regnum) OVERRIDE
CORE_ADDR get_pc_function_start(CORE_ADDR pc)
bool fetch_in_stack_memory(int n)
struct value * allocate_optimized_out_value(struct type *type)
void write_memory_with_notification(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
const struct symbol_computed_ops dwarf2_loclist_funcs
static void copy_bitwise(gdb_byte *dest, ULONGEST dest_offset, const gdb_byte *source, ULONGEST source_offset, ULONGEST nbits, int bits_big_endian)
CORE_ADDR value_address(const struct value *value)
int dwarf2_per_cu_ref_addr_size(struct dwarf2_per_cu_data *cu)
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
static struct value * fetch_const_value_from_synthetic_pointer(sect_offset die, LONGEST byte_offset, struct dwarf2_per_cu_data *per_cu, struct type *type)
virtual CORE_ADDR get_frame_pc()
enum bfd_endian byte_order
struct call_site_target target
int has_stack_frames(void)
void register_test(const std::string &name, selftest *test)
static CORE_ADDR loclist_get_frame_base(struct symbol *framefunc, struct frame_info *frame)
CORE_ADDR get_frame_func(struct frame_info *this_frame)
#define FIELD_STATIC_PHYSNAME(thisfld)
struct dwarf2_per_cu_data * per_cu
void error(const char *fmt,...)
struct call_site_chain * call_site_find_chain(struct gdbarch *gdbarch, CORE_ADDR caller_pc, CORE_ADDR callee_pc)
int dwarf_block_to_fb_offset(const gdb_byte *buf, const gdb_byte *buf_end, CORE_ADDR *fb_offset_return)
union call_site_parameter_u u
static enum symbol_needs_kind dwarf2_loc_desc_get_symbol_read_needs(const gdb_byte *data, size_t size, struct dwarf2_per_cu_data *per_cu)
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
void push_dwarf_reg_entry_value(enum call_site_parameter_kind kind, union call_site_parameter_u kind_u, int deref_size) OVERRIDE
struct type * dwarf2_fetch_die_type_sect_off(sect_offset, struct dwarf2_per_cu_data *)
void throw_error(enum errors error, const char *fmt,...)
static struct value * indirect_pieced_value(struct value *value)
static void locexpr_tracepoint_var_ref(struct symbol *symbol, struct agent_expr *ax, struct axs_value *value)
struct dwarf2_per_cu_data * per_cu
static void * entry_data_value_copy_closure(const struct value *v)