GDB (xrefs)
|
#include "expr.h"
Public Member Functions | |
dwarf_expr_context (dwarf2_per_objfile *per_objfile, int addr_size) | |
virtual | ~dwarf_expr_context ()=default |
void | push_address (CORE_ADDR value, bool in_stack_memory) |
value * | evaluate (const gdb_byte *addr, size_t len, bool as_lval, dwarf2_per_cu_data *per_cu, frame_info_ptr frame, const struct property_addr_info *addr_info=nullptr, struct type *type=nullptr, struct type *subobj_type=nullptr, LONGEST subobj_offset=0) |
Private Member Functions | |
void | eval (const gdb_byte *addr, size_t len) |
struct type * | address_type () const |
void | push (struct value *value, bool in_stack_memory) |
bool | stack_empty_p () const |
void | add_piece (ULONGEST size, ULONGEST offset) |
void | execute_stack_op (const gdb_byte *op_ptr, const gdb_byte *op_end) |
void | pop () |
struct value * | fetch (int n) |
CORE_ADDR | fetch_address (int n) |
bool | fetch_in_stack_memory (int n) |
value * | fetch_result (struct type *type, struct type *subobj_type, LONGEST subobj_offset, bool as_lval) |
void | get_frame_base (const gdb_byte **start, size_t *length) |
struct type * | get_base_type (cu_offset die_cu_off) |
void | dwarf_call (cu_offset die_cu_off) |
void | push_dwarf_reg_entry_value (call_site_parameter_kind kind, call_site_parameter_u kind_u, int deref_size) |
void | read_mem (gdb_byte *buf, CORE_ADDR addr, size_t length) |
Private Attributes | |
std::vector< dwarf_stack_value > | m_stack |
int | m_addr_size = 0 |
int | m_recursion_depth = 0 |
int | m_max_recursion_depth = 0x100 |
dwarf_value_location | m_location = DWARF_VALUE_MEMORY |
ULONGEST | m_len = 0 |
const gdb_byte * | m_data = nullptr |
bool | m_initialized = false |
std::vector< dwarf_expr_piece > | m_pieces |
dwarf2_per_objfile * | m_per_objfile |
frame_info_ptr | m_frame = nullptr |
dwarf2_per_cu_data * | m_per_cu = nullptr |
const struct property_addr_info * | m_addr_info = nullptr |
dwarf_expr_context::dwarf_expr_context | ( | dwarf2_per_objfile * | per_objfile, |
int | addr_size ) |
|
virtualdefault |
|
private |
Definition at line 1201 of file expr.c.
References dwarf_expr_piece::addr, dwarf_expr_piece::data, dwarf_expr_piece::die_sect_off, DWARF_VALUE_IMPLICIT_POINTER, DWARF_VALUE_LITERAL, DWARF_VALUE_MEMORY, DWARF_VALUE_OPTIMIZED_OUT, DWARF_VALUE_REGISTER, fetch(), fetch_address(), fetch_in_stack_memory(), dwarf_expr_piece::in_stack_memory, dwarf_expr_piece::length, dwarf_expr_piece::literal, dwarf_expr_piece::location, m_data, m_len, m_location, m_pieces, dwarf_expr_piece::mem, dwarf_expr_piece::offset, dwarf_expr_piece::ptr, dwarf_expr_piece::regno, dwarf_expr_piece::size, size, stack_empty_p(), dwarf_expr_piece::v, dwarf_expr_piece::value, and value_as_long().
Referenced by execute_stack_op().
|
private |
Definition at line 691 of file expr.c.
References objfile::arch(), dwarf_gdbarch_types::dw_types, dwarf_arch_cookie, registry< T >::get(), init_integer_type(), m_addr_size, m_per_objfile, and dwarf2_per_objfile::objfile.
Referenced by execute_stack_op(), fetch_result(), and push_address().
|
private |
Definition at line 816 of file expr.c.
References dwarf2_locexpr_baton::data, dwarf2_fetch_die_loc_cu_off(), ensure_have_frame(), ensure_have_per_cu(), eval(), get_frame_address_in_block(), m_frame, m_per_cu, and m_per_objfile.
Referenced by execute_stack_op().
|
private |
Definition at line 1245 of file expr.c.
References execute_stack_op(), and m_recursion_depth.
Referenced by dwarf_call(), evaluate(), execute_stack_op(), and push_dwarf_reg_entry_value().
value * dwarf_expr_context::evaluate | ( | const gdb_byte * | addr, |
size_t | len, | ||
bool | as_lval, | ||
dwarf2_per_cu_data * | per_cu, | ||
frame_info_ptr | frame, | ||
const struct property_addr_info * | addr_info = nullptr, | ||
struct type * | type = nullptr, | ||
struct type * | subobj_type = nullptr, | ||
LONGEST | subobj_offset = 0 ) |
Definition at line 1078 of file expr.c.
References eval(), fetch_result(), m_addr_info, m_frame, and m_per_cu.
Referenced by dwarf2_evaluate_loc_desc_full(), dwarf2_locexpr_baton_eval(), and execute_stack_op().
|
private |
Definition at line 1494 of file expr.c.
References add_piece(), property_addr_info::addr, address_type(), objfile::arch(), base_types_equal_p(), CALL_SITE_PARAMETER_DWARF_REG, CALL_SITE_PARAMETER_PARAM_OFFSET, value::contents_all(), dwarf2_frame_cfa(), dwarf2_read_addr_index(), dwarf_block_to_dwarf_reg(), dwarf_block_to_dwarf_reg_deref(), dwarf_call(), dwarf_expr_require_composition(), call_site_parameter_u::dwarf_reg, dwarf_reg_to_regnum_or_error(), dwarf_require_integral(), DWARF_VALUE_IMPLICIT_POINTER, DWARF_VALUE_LITERAL, DWARF_VALUE_MEMORY, DWARF_VALUE_OPTIMIZED_OUT, DWARF_VALUE_REGISTER, DWARF_VALUE_STACK, ensure_have_frame(), ensure_have_per_cu(), eval(), extract_signed_integer(), extract_unsigned_integer(), fetch(), fetch_address(), fetch_in_stack_memory(), gdbarch_byte_order(), get_base_type(), get_frame_arch(), get_frame_base(), get_signed_type(), get_unsigned_type(), type::is_unsigned(), type::length(), m_addr_info, m_addr_size, m_data, m_frame, m_initialized, m_len, m_location, m_max_recursion_depth, m_per_cu, m_per_objfile, m_recursion_depth, m_stack, not_lval, dwarf2_per_objfile::objfile, call_site_parameter_u::param_cu_off, pop(), push(), push_dwarf_reg_entry_value(), QUIT, read_addr_from_reg(), read_mem(), dwarf2_per_cu_data::ref_addr_size(), regnum, dwarf2_per_objfile::relocate(), safe_read_sleb128(), safe_read_uleb128(), sect_variable_value(), size, store_unsigned_integer(), stype, target_translate_tls_address(), objfile::text_section_offset(), type, value::type(), property_addr_info::valaddr, value_as_long(), value_binop(), value_cast(), value_complement(), value_equal(), value_from_contents(), value_from_contents_and_address(), value_from_register(), value_from_ulongest(), value_less(), value_neg(), and value::zero().
Referenced by eval().
|
private |
Definition at line 759 of file expr.c.
References m_stack.
Referenced by add_piece(), execute_stack_op(), fetch_address(), and fetch_result().
|
private |
Definition at line 1150 of file expr.c.
References objfile::arch(), value::contents(), dwarf_require_integral(), extract_unsigned_integer(), fetch(), gdbarch_byte_order(), gdbarch_integer_to_address(), gdbarch_integer_to_address_p(), get_unsigned_type(), m_addr_size, m_per_objfile, dwarf2_per_objfile::objfile, store_unsigned_integer(), and value::type().
Referenced by add_piece(), execute_stack_op(), and fetch_result().
|
private |
Definition at line 1182 of file expr.c.
References m_stack.
Referenced by add_piece(), execute_stack_op(), and fetch_result().
|
private |
Definition at line 914 of file expr.c.
References address_type(), value::allocate(), value::allocate_computed(), value::allocate_optimized_out(), allocate_piece_closure(), objfile::arch(), builtin_type::builtin_data_ptr, builtin_type::builtin_func_ptr, builtin_type(), check_typedef(), type::code(), value::contents_all(), value::contents_copy(), value::contents_raw(), dwarf_reg_to_regnum_or_error(), DWARF_VALUE_IMPLICIT_POINTER, DWARF_VALUE_LITERAL, DWARF_VALUE_MEMORY, DWARF_VALUE_OPTIMIZED_OUT, DWARF_VALUE_REGISTER, DWARF_VALUE_STACK, fetch(), fetch_address(), fetch_in_stack_memory(), gdbarch_byte_order(), get_frame_arch(), invalid_synthetic_pointer(), type::length(), longest_to_int(), m_data, m_frame, m_initialized, m_len, m_location, m_per_cu, m_per_objfile, m_pieces, dwarf2_per_objfile::objfile, value::optimized_out(), pieced_value_funcs, value::set_initialized(), value::set_offset(), value::set_stack(), type, value::type(), value_as_address(), value_as_long(), value_at_lazy(), value_from_pointer(), and value_from_register().
Referenced by evaluate().
|
private |
Definition at line 799 of file expr.c.
References objfile::arch(), builtin_type::builtin_int, builtin_type(), dwarf2_get_die_type(), m_per_cu, m_per_objfile, and dwarf2_per_objfile::objfile.
Referenced by execute_stack_op().
|
private |
Definition at line 771 of file expr.c.
References ensure_have_frame(), func_get_frame_base_dwarf_block(), get_frame_address_in_block(), get_frame_block(), block::linkage_function(), and m_frame.
Referenced by execute_stack_op().
|
private |
|
private |
Definition at line 732 of file expr.c.
References m_stack.
Referenced by execute_stack_op(), and push_address().
void dwarf_expr_context::push_address | ( | CORE_ADDR | value, |
bool | in_stack_memory ) |
Definition at line 740 of file expr.c.
References address_type(), push(), and value_from_ulongest().
Referenced by dwarf2_locexpr_baton_eval(), and execute_stack_op().
|
private |
Definition at line 866 of file expr.c.
References dwarf2_per_cu_data::addr_size(), call_site_parameter::data_value, call_site_parameter::data_value_size, dwarf_expr_reg_to_entry_parameter(), ensure_have_frame(), ensure_have_per_cu(), eval(), get_prev_frame(), m_addr_info, m_addr_size, m_frame, m_per_cu, m_per_objfile, size, call_site_parameter::value, and call_site_parameter::value_size.
Referenced by execute_stack_op().
|
private |
Definition at line 841 of file expr.c.
References property_addr_info::addr, m_addr_info, read_memory(), and property_addr_info::valaddr.
Referenced by execute_stack_op().
|
private |
|
private |
Definition at line 205 of file expr.h.
Referenced by evaluate(), execute_stack_op(), push_dwarf_reg_entry_value(), and read_mem().
|
private |
Definition at line 151 of file expr.h.
Referenced by address_type(), execute_stack_op(), fetch_address(), and push_dwarf_reg_entry_value().
|
private |
Definition at line 165 of file expr.h.
Referenced by add_piece(), execute_stack_op(), and fetch_result().
|
private |
Definition at line 199 of file expr.h.
Referenced by dwarf_call(), evaluate(), execute_stack_op(), fetch_result(), get_frame_base(), and push_dwarf_reg_entry_value().
|
private |
Definition at line 169 of file expr.h.
Referenced by execute_stack_op(), and fetch_result().
|
private |
Definition at line 164 of file expr.h.
Referenced by add_piece(), execute_stack_op(), and fetch_result().
|
private |
Definition at line 159 of file expr.h.
Referenced by add_piece(), execute_stack_op(), and fetch_result().
|
private |
Definition at line 156 of file expr.h.
Referenced by execute_stack_op().
|
private |
Definition at line 202 of file expr.h.
Referenced by dwarf_call(), evaluate(), execute_stack_op(), fetch_result(), get_base_type(), and push_dwarf_reg_entry_value().
|
private |
Definition at line 196 of file expr.h.
Referenced by address_type(), dwarf_call(), execute_stack_op(), fetch_address(), fetch_result(), get_base_type(), and push_dwarf_reg_entry_value().
|
private |
Definition at line 193 of file expr.h.
Referenced by add_piece(), and fetch_result().
|
private |
Definition at line 156 of file expr.h.
Referenced by eval(), and execute_stack_op().
|
private |
Definition at line 148 of file expr.h.
Referenced by execute_stack_op(), fetch(), fetch_in_stack_memory(), pop(), push(), and stack_empty_p().