X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fdwarf2expr.h;h=2a92a28908d44e16b4304fd15bb80e21b72bbebb;hb=d0801dd8f22a3e739c6a7d126d45829df981794d;hp=a6aec280853f80691cfd42d851a10a1d17b1ece6;hpb=690098826e36cbadf618e15eed5f6ebf606cbf74;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/dwarf2expr.h b/gdb/dwarf2expr.h index a6aec28085..2a92a28908 100644 --- a/gdb/dwarf2expr.h +++ b/gdb/dwarf2expr.h @@ -1,6 +1,6 @@ /* DWARF 2 Expression Evaluator. - Copyright (C) 2001-2017 Free Software Foundation, Inc. + Copyright (C) 2001-2019 Free Software Foundation, Inc. Contributed by Daniel Berlin . @@ -100,6 +100,10 @@ struct dwarf_expr_piece struct dwarf_stack_value { + dwarf_stack_value (struct value *value_, int in_stack_memory_) + : value (value_), in_stack_memory (in_stack_memory_) + {} + struct value *value; /* True if the piece is in memory and is known to be on the program's stack. @@ -114,7 +118,7 @@ struct dwarf_stack_value struct dwarf_expr_context { dwarf_expr_context (); - virtual ~dwarf_expr_context (); + virtual ~dwarf_expr_context () = default; void push_address (CORE_ADDR value, bool in_stack_memory); void eval (const gdb_byte *addr, size_t len); @@ -122,12 +126,8 @@ struct dwarf_expr_context CORE_ADDR fetch_address (int n); bool fetch_in_stack_memory (int n); - /* The stack of values, allocated with xmalloc. */ - struct dwarf_stack_value *stack; - - /* The number of values currently pushed on the stack, and the - number of elements allocated to the stack. */ - int stack_len, stack_allocated; + /* The stack of values. */ + std::vector stack; /* Target architecture to use for address operations. */ struct gdbarch *gdbarch; @@ -139,7 +139,8 @@ struct dwarf_expr_context context and operations depending on DW_FORM_ref_addr are not allowed. */ int ref_addr_size; - /* Offset used to relocate DW_OP_addr and DW_OP_GNU_addr_index arguments. */ + /* Offset used to relocate DW_OP_addr, DW_OP_addrx, and + DW_OP_GNU_addr_index arguments. */ CORE_ADDR offset; /* The current depth of dwarf expression recursion, via DW_OP_call*, @@ -221,6 +222,9 @@ struct dwarf_expr_context subroutine. */ virtual void dwarf_call (cu_offset die_cu_off) = 0; + /* Execute "variable value" operation on the DIE at SECT_OFF. */ + virtual struct value *dwarf_variable_value (sect_offset sect_off) = 0; + /* Return the base type given by the indicated DIE at DIE_CU_OFF. This can throw an exception if the DIE is invalid or does not represent a base type. SIZE is non-zero if this function should @@ -239,7 +243,7 @@ struct dwarf_expr_context union call_site_parameter_u kind_u, int deref_size) = 0; - /* Return the address indexed by DW_OP_GNU_addr_index. + /* Return the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index. This can throw an exception if the index is out of range. */ virtual CORE_ADDR get_addr_index (unsigned int index) = 0; @@ -249,9 +253,8 @@ struct dwarf_expr_context private: struct type *address_type () const; - void grow_stack (size_t need); void push (struct value *value, bool in_stack_memory); - int stack_empty_p () const; + 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 ();