Handle bit offset and bit size in base types
[deliverable/binutils-gdb.git] / gdb / dwarf2 / loc.h
index 8fff663ebf9cd85a21997e36f7b5e1e859e2a29d..907455b72c1cd3c384c62d4f7047d13078d620f2 100644 (file)
@@ -23,7 +23,7 @@
 #include "dwarf2/expr.h"
 
 struct symbol_computed_ops;
-struct objfile;
+struct dwarf2_per_objfile;
 struct dwarf2_per_cu_data;
 struct dwarf2_loclist_baton;
 struct agent_expr;
@@ -41,27 +41,6 @@ const gdb_byte *dwarf2_find_location_expression
    size_t *locexpr_length,
    CORE_ADDR pc);
 
-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, bool resolve_abstract_p = false);
-
-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);
-
-extern const gdb_byte *dwarf2_fetch_constant_bytes (sect_offset,
-                                                   struct dwarf2_per_cu_data *,
-                                                   struct obstack *,
-                                                   LONGEST *);
-
-struct type *dwarf2_fetch_die_type_sect_off (sect_offset,
-                                            struct dwarf2_per_cu_data *);
-
-struct type *dwarf2_get_die_type (cu_offset die_offset,
-                                 struct dwarf2_per_cu_data *per_cu);
-
 /* Find the frame base information for FRAMEFUNC at PC.  START is an
    out parameter which is set to point to the DWARF expression to
    compute.  LENGTH is an out parameter which is set to the length of
@@ -82,7 +61,8 @@ 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);
+                                       dwarf2_per_cu_data *per_cu,
+                                       dwarf2_per_objfile *per_objfile);
 
 /* A chain of addresses that might be needed to resolve a dynamic
    property.  */
@@ -94,7 +74,7 @@ struct property_addr_info
   struct type *type;
 
   /* If not NULL, a buffer containing the object's value.  */
-  const gdb_byte *valaddr;
+  gdb::array_view<const gdb_byte> valaddr;
 
   /* The address of that object.  */
   CORE_ADDR addr;
@@ -113,12 +93,16 @@ struct property_addr_info
    be NULL.
 
    Returns true if PROP could be converted and the static value is passed
-   back into VALUE, otherwise returns false.  */
+   back into VALUE, otherwise returns false.
+
+   If PUSH_INITIAL_VALUE is true, then the top value of ADDR_STACK
+   will be pushed before evaluating a location expression.  */
 
 bool dwarf2_evaluate_property (const struct dynamic_prop *prop,
                               struct frame_info *frame,
-                              struct property_addr_info *addr_stack,
-                              CORE_ADDR *value);
+                              const struct property_addr_info *addr_stack,
+                              CORE_ADDR *value,
+                              bool push_initial_value = false);
 
 /* A helper for the compiler interface that compiles a single dynamic
    property to C code.
@@ -141,9 +125,6 @@ void dwarf2_compile_property_to_c (string_file *stream,
                                   CORE_ADDR address,
                                   struct symbol *sym);
 
-CORE_ADDR dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu,
-                                 unsigned int addr_index);
-
 /* The symbol location baton types used by the DWARF-2 reader (i.e.
    SYMBOL_LOCATION_BATON for a LOC_COMPUTED symbol).  "struct
    dwarf2_locexpr_baton" is for a symbol with a single location
@@ -166,6 +147,9 @@ struct dwarf2_locexpr_baton
      directly.  */
   bool is_reference;
 
+  /* The objfile that was used when creating this.  */
+  dwarf2_per_objfile *per_objfile;
+
   /* The compilation unit containing the symbol whose location
      we're computing.  */
   struct dwarf2_per_cu_data *per_cu;
@@ -183,6 +167,9 @@ struct dwarf2_loclist_baton
   /* Length of the location list.  */
   size_t size;
 
+  /* The objfile that was used when creating this.  */
+  dwarf2_per_objfile *per_objfile;
+
   /* The compilation unit containing the symbol whose location
      we're computing.  */
   struct dwarf2_per_cu_data *per_cu;
@@ -242,26 +229,6 @@ extern const struct symbol_computed_ops dwarf2_loclist_funcs;
 extern const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs;
 extern const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs;
 
-/* Compile a DWARF location expression to an agent expression.
-   
-   EXPR is the agent expression we are building.
-   LOC is the agent value we modify.
-   ARCH is the architecture.
-   ADDR_SIZE is the size of addresses, in bytes.
-   OP_PTR is the start of the location expression.
-   OP_END is one past the last byte of the location expression.
-   
-   This will throw an exception for various kinds of errors -- for
-   example, if the expression cannot be compiled, or if the expression
-   is invalid.  */
-
-extern 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);
-
 /* Determined tail calls for constructing virtual tail call frames.  */
 
 struct call_site_chain
This page took 0.024747 seconds and 4 git commands to generate.