41 #if TARGET_CHAR_BIT != 8 || HOST_CHAR_BIT != 8 49 template<
typename T,
typename>
54 const unsigned char *p;
55 const unsigned char *startaddr = addr;
56 const unsigned char *endaddr = startaddr + len;
58 if (len > (
int)
sizeof (T))
60 That operation is not available on integers of more than %d bytes."),
65 if (byte_order == BFD_ENDIAN_BIG)
68 if (std::is_signed<T>::value)
71 retval = ((
LONGEST) * p ^ 0x80) - 0x80;
74 for (; p < endaddr; ++p)
75 retval = (retval << 8) | *p;
80 if (std::is_signed<T>::value)
83 retval = ((
LONGEST) * p ^ 0x80) - 0x80;
86 for (; p >= startaddr; --p)
87 retval = (retval << 8) | *p;
94 enum bfd_endian byte_order);
96 enum bfd_endian byte_order);
105 enum bfd_endian byte_order,
LONGEST *pval)
112 if (byte_order == BFD_ENDIAN_BIG)
115 len > (int)
sizeof (
LONGEST) && p < addr + orig_len;
128 for (p = addr + orig_len - 1;
129 len > (int)
sizeof (
LONGEST) && p >= addr;
139 if (len <= (
int)
sizeof (
LONGEST))
158 _(
"extract_typed_address: " 159 "type is not a pointer or reference"));
166 template<
typename T,
typename>
173 gdb_byte *endaddr = startaddr + len;
177 if (byte_order == BFD_ENDIAN_BIG)
179 for (p = endaddr - 1; p >= startaddr; --p)
187 for (p = startaddr; p < endaddr; ++p)
197 enum bfd_endian byte_order,
201 enum bfd_endian byte_order,
211 _(
"store_typed_address: " 212 "type is not a pointer or reference"));
225 int source_size,
bool is_signed,
226 enum bfd_endian byte_order)
228 signed int size_diff = dest_size - source_size;
232 if (byte_order == BFD_ENDIAN_BIG && size_diff > 0)
233 memcpy (dest + size_diff, source, source_size);
234 else if (byte_order == BFD_ENDIAN_BIG && size_diff < 0)
235 memcpy (dest, source - size_diff, dest_size);
237 memcpy (dest, source, std::min (source_size, dest_size));
246 && ((byte_order != BFD_ENDIAN_BIG && source[source_size - 1] & 0x80)
247 || (byte_order == BFD_ENDIAN_BIG && source[0] & 0x80)))
251 if (byte_order == BFD_ENDIAN_BIG)
252 memset (dest, extension, size_diff);
254 memset (dest + source_size, extension, size_diff);
266 struct value *reg_val;
287 struct value *reg_val;
452 if (framefunc != NULL
456 == upper_frame_base))
479 const struct block *frame_block = NULL;
488 else if (var_block == NULL)
508 while (frame != NULL && frame_block != var_block)
513 if (frame_block == NULL)
536 int could_climb_up = 0;
538 if (static_link != NULL)
544 could_climb_up = frame_block != NULL;
572 error (
_(
"No frame is currently executing in block %s."),
575 error (
_(
"No frame is currently executing in specified" 672 error (
_(
"Unknown argument list address for `%s'."),
684 error (
_(
"Unknown argument list address for `%s'."),
698 error (
_(
"Cannot look up value of a typedef `%s'."),
716 struct value *regval;
725 error (
_(
"Value of register variable not available for `%s'."),
735 error (
_(
"Value of register variable not available for `%s'."),
751 memset (&lookup_data, 0,
sizeof (lookup_data));
765 const char *flavour_name
771 error (
_(
"Missing %s symbol \"%s\"."),
795 error (
_(
"Cannot look up value of a botched symbol `%s'."),
910 int optim, unavail, ok;
961 if (regnum < 0 || regnum >= regnum_max_excl)
962 error (
_(
"Invalid register #%d, expecting 0 <= # < %d"),
regnum,
977 int optim, unavail, ok;
980 buf, &optim, &unavail);
1014 namespace findvar_tests {
1028 for (
int i = 0; i < 2 ; i++)
1032 enum bfd_endian byte_order = i ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
1036 memset (srcbuf, 0xaa,
sizeof (srcbuf));
1043 memset (destbuf, 0xaa,
sizeof (destbuf));
1050 memset (destbuf, 0xaa,
sizeof (destbuf));
1059 copy_integer_to_size_test ()
1062 do_cint_test (0x12345678, 0x12345678, 8, 0x12345678, 4);
1063 do_cint_test (0x345678, 0x345678, 8, 0x12345678, 3);
1066 do_cint_test (0xdeadbeef, 0xffffffffdeadbeef, 8, 0xdeadbeef, 4);
1067 do_cint_test (0xadbeef, 0xffffffffffadbeef, 8, 0xdeadbeef, 3);
1070 do_cint_test (0x5678, 0x5678, 2, 0x12345678, 3);
1071 do_cint_test (0xbeef, 0xbeef, 2, 0xdeadbeef, 3);
1074 do_cint_test (0x8765432112345678, 0x8765432112345678, 8, 0x8765432112345678,
1076 do_cint_test (0x432112345678, 0x432112345678, 6, 0x8765432112345678, 6);
1077 do_cint_test (0xfeedbeaddeadbeef, 0xfeedbeaddeadbeef, 8, 0xfeedbeaddeadbeef,
1079 do_cint_test (0xbeaddeadbeef, 0xbeaddeadbeef, 6, 0xfeedbeaddeadbeef, 6);
1082 do_cint_test (0x3412345678, 0x3412345678, 8, 0x3412345678, 6);
1083 do_cint_test (0xff12345678, 0xff12345678, 8, 0xff12345678, 6);
1084 do_cint_test (0x432112345678, 0x432112345678, 8, 0x8765432112345678, 6);
1085 do_cint_test (0xff2112345678, 0xffffff2112345678, 8, 0xffffff2112345678, 6);
1098 (
"copy_integer_to_size",
1099 selftests::findvar_tests::copy_integer_to_size_test);
enum symbol_needs_kind symbol_read_needs(struct symbol *sym)
int frame_id_p(struct frame_id l)
int extract_long_unsigned_integer(const gdb_byte *addr, int orig_len, enum bfd_endian byte_order, LONGEST *pval)
struct frame_info * frame_find_by_id(struct frame_id id)
static struct frame_info * follow_static_link(struct frame_info *frame, const struct dynamic_prop *static_link)
#define target_has_registers
#define SYMBOL_PRINT_NAME(symbol)
void copy_integer_to_size(gdb_byte *dest, int dest_size, const gdb_byte *source, int source_size, bool is_signed, enum bfd_endian byte_order)
struct frame_info * get_prev_frame(struct frame_info *this_frame)
void unsigned_address_to_pointer(struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
void store_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, T val)
struct bfd_section * the_bfd_section
#define BMSYMBOL_VALUE_ADDRESS(symbol)
#define VALUE_NEXT_FRAME_ID(val)
struct value * value_at(struct type *type, CORE_ADDR addr)
const struct block * block_global_block(const struct block *block)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
void mark_value_bytes_unavailable(struct value *value, LONGEST offset, LONGEST length)
struct value * allocate_value_lazy(struct type *type)
#define SYMBOL_CLASS(symbol)
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
const struct language_defn * language_def(enum language lang)
unsigned int type_length_units(struct type *type)
static int minsym_lookup_iterator_cb(struct objfile *objfile, void *cb_data)
struct value * default_read_var_value(struct symbol *var, const struct block *var_block, struct frame_info *frame)
void value_free(struct value *val)
struct gdbarch * symbol_arch(const struct symbol *symbol)
#define SYMBOL_BLOCK_OPS(symbol)
int gdbarch_num_regs(struct gdbarch *gdbarch)
struct value * allocate_value(struct type *type)
int gdbarch_register_to_value(struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf, int *optimizedp, int *unavailablep)
CORE_ADDR get_frame_locals_address(struct frame_info *fi)
struct objfile * symbol_objfile(const struct symbol *symbol)
int gdbarch_convert_register_p(struct gdbarch *gdbarch, int regnum, struct type *type)
#define SYMBOL_OBJ_SECTION(objfile, symbol)
#define TYPE_IS_REFERENCE(t)
#define BLOCK_FUNCTION(bl)
#define MSYMBOL_OBJ_SECTION(objfile, symbol)
LONGEST value_offset(const struct value *value)
int gdbarch_num_pseudo_regs(struct gdbarch *gdbarch)
#define MSYMBOL_VALUE_RAW_ADDRESS(symbol)
struct value * value_from_register(struct type *type, int regnum, struct frame_info *frame)
struct value * get_frame_register_value(struct frame_info *frame, int regnum)
struct frame_id get_frame_id(struct frame_info *fi)
struct type * check_typedef(struct type *type)
#define SYMBOL_VALUE_ADDRESS(symbol)
struct frame_info * block_innermost_frame(const struct block *block)
struct bound_minimal_symbol result
struct value * value_of_register_lazy(struct frame_info *frame, int regnum)
template ULONGEST extract_integer< ULONGEST >(const gdb_byte *addr, int len, enum bfd_endian byte_order)
struct value * read_var_value(struct symbol *var, const struct block *var_block, struct frame_info *frame)
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)
struct type * register_type(struct gdbarch *gdbarch, int regnum)
void read_frame_register_value(struct value *value, struct frame_info *frame)
template LONGEST extract_integer< LONGEST >(const gdb_byte *addr, int len, enum bfd_endian byte_order)
int symbol_read_needs_frame(struct symbol *sym)
#define gdb_assert_not_reached(message)
struct symbol * get_frame_function(struct frame_info *frame)
#define SYMBOL_REGISTER_OPS(symbol)
#define SYMBOL_COMPUTED_OPS(symbol)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
#define VALUE_REGNUM(val)
struct value * gdbarch_value_from_register(struct gdbarch *gdbarch, struct type *type, int regnum, struct frame_id frame_id)
#define BLOCK_SUPERBLOCK(bl)
CORE_ADDR symbol_overlayed_address(CORE_ADDR address, struct obj_section *section)
struct gdbarch * get_type_arch(const struct type *type)
struct frame_info * get_next_frame_sentinel_okay(struct frame_info *this_frame)
#define SYMBOL_LINKAGE_NAME(symbol)
struct value * value_at_lazy(struct type *type, CORE_ADDR addr)
void gdbarch_iterate_over_objfiles_in_search_order(struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile)
T extract_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
CORE_ADDR get_frame_args_address(struct frame_info *fi)
void set_value_offset(struct value *value, LONGEST offset)
CORE_ADDR gdbarch_pointer_to_address(struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
CORE_ADDR extract_typed_address(const gdb_byte *buf, struct type *type)
LONGEST unpack_long(struct type *type, const gdb_byte *valaddr)
CORE_ADDR address_from_register(int regnum, struct frame_info *frame)
#define SYMBOL_VALUE(symbol)
void address_to_signed_pointer(struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
struct value *(* la_read_var_value)(struct symbol *var, const struct block *var_block, struct frame_info *frame)
void _initialize_findvar(void)
struct dynamic_prop * block_static_link(const struct block *block)
int block_inlined_p(const struct block *bl)
const char * objfile_flavour_name(struct objfile *objfile)
int value_optimized_out(struct value *value)
void value_fetch_lazy(struct value *val)
CORE_ADDR target_translate_tls_address(struct objfile *objfile, CORE_ADDR offset)
void mark_value_bytes_optimized_out(struct value *value, int offset, int length)
#define SYMBOL_BLOCK_VALUE(symbol)
const struct block * block_static_block(const struct block *block)
#define TYPE_CODE(thistype)
struct value * value_of_register(int regnum, struct frame_info *frame)
CORE_ADDR get_frame_base(struct frame_info *fi)
struct type * resolve_dynamic_type(struct type *type, const gdb_byte *valaddr, CORE_ADDR addr)
struct type * builtin_data_ptr
void value_contents_copy(struct value *dst, LONGEST dst_offset, struct value *src, LONGEST src_offset, LONGEST length)
struct minimal_symbol * minsym
struct value * default_value_from_register(struct gdbarch *gdbarch, struct type *type, int regnum, struct frame_id frame_id)
CORE_ADDR signed_pointer_to_address(struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
#define SYMBOL_LANGUAGE(symbol)
static LONGEST extract_signed_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
void store_typed_address(gdb_byte *buf, struct type *type, CORE_ADDR addr)
void error_value_optimized_out(void)
enum overlay_debugging_state overlay_debugging
unsigned long long ULONGEST
CORE_ADDR unsigned_pointer_to_address(struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
void release_value(struct value *val)
int register_size(struct gdbarch *gdbarch, int regnum)
int is_dynamic_type(struct type *type)
struct type * value_type(const struct value *value)
#define SYMBOL_TYPE(symbol)
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)
gdb_byte * value_contents_raw(struct value *value)
static struct frame_info * get_hosting_frame(struct symbol *var, const struct block *var_block, struct frame_info *frame)
#define TYPE_LENGTH(thistype)
#define SYMBOL_VALUE_BYTES(symbol)
struct value * allocate_optimized_out_value(struct type *type)
struct value * value_of_user_reg(int regnum, struct frame_info *frame)
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
void register_test(const std::string &name, selftest *test)
static void store_signed_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, LONGEST val)
void error(const char *fmt,...)
void gdbarch_address_to_pointer(struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
struct type * lookup_pointer_type(struct type *type)
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
#define SELF_CHECK(VALUE)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)