Use a member function to set a symbol's language
[deliverable/binutils-gdb.git] / gdb / dwarf2expr.h
index 39bcea3cab00341e05d9b30b7f4647c7bba3dbb7..2a92a28908d44e16b4304fd15bb80e21b72bbebb 100644 (file)
@@ -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 <dan@dberlin.org>.
 
@@ -62,7 +62,7 @@ struct dwarf_expr_piece
       CORE_ADDR addr;
       /* Non-zero if the piece is known to be in memory and on
         the program's stack.  */
-      int in_stack_memory;
+      bool in_stack_memory;
     } mem;
 
     /* The piece's register number, for DWARF_VALUE_REGISTER pieces.  */
@@ -100,14 +100,17 @@ 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;
 
-  /* Non-zero if the piece is in memory and is known to be
-     on the program's stack.  It is always ok to set this to zero.
-     This is used, for example, to optimize memory access from the target.
-     It can vastly speed up backtraces on long latency connections when
-     "set stack-cache on".  */
-  int in_stack_memory;
+  /* True if the piece is in memory and is known to be on the program's stack.
+     It is always ok to set this to zero.  This is used, for example, to
+     optimize memory access from the target.  It can vastly speed up backtraces
+     on long latency connections when "set stack-cache on".  */
+  bool in_stack_memory;
 };
 
 /* The expression evaluator works with a dwarf_expr_context, describing
@@ -115,20 +118,16 @@ 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, int in_stack_memory);
+  void push_address (CORE_ADDR value, bool in_stack_memory);
   void eval (const gdb_byte *addr, size_t len);
   struct value *fetch (int n);
   CORE_ADDR fetch_address (int n);
-  int fetch_in_stack_memory (int n);
-
-  /* The stack of values, allocated with xmalloc.  */
-  struct dwarf_stack_value *stack;
+  bool fetch_in_stack_memory (int n);
 
-  /* 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<dwarf_stack_value> stack;
 
   /* Target architecture to use for address operations.  */
   struct gdbarch *gdbarch;
@@ -140,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*,
@@ -222,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
@@ -240,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;
 
@@ -250,9 +253,8 @@ struct dwarf_expr_context
 private:
 
   struct type *address_type () const;
-  void grow_stack (size_t need);
-  void push (struct value *value, int in_stack_memory);
-  int stack_empty_p () 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 ();
This page took 0.026057 seconds and 4 git commands to generate.