X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fdwarf2loc.h;h=d0bc23b37d88e49de8df80e888867499dfc31ae9;hb=202e762b322444344827acbf98162fcb2910e0dd;hp=24e660c8b758ade1d260d3c1073ce763d10f3aff;hpb=61baf725eca99af2569262d10aca03dcde2698f6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/dwarf2loc.h b/gdb/dwarf2loc.h index 24e660c8b7..d0bc23b37d 100644 --- a/gdb/dwarf2loc.h +++ b/gdb/dwarf2loc.h @@ -1,6 +1,6 @@ /* DWARF 2 location expression support for GDB. - Copyright (C) 2003-2017 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -56,6 +56,8 @@ int dwarf2_per_cu_offset_size (struct dwarf2_per_cu_data *cu); offset in the parent objfile. */ CORE_ADDR dwarf2_per_cu_text_offset (struct dwarf2_per_cu_data *cu); +short dwarf2_version (struct dwarf2_per_cu_data *per_cu); + /* Find a particular location expression from a location list. */ const gdb_byte *dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton, @@ -65,7 +67,7 @@ const gdb_byte *dwarf2_find_location_expression 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); + 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, @@ -77,6 +79,9 @@ extern const gdb_byte *dwarf2_fetch_constant_bytes (sect_offset, 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); @@ -130,13 +135,13 @@ struct property_addr_info property. When evaluating a property that is not related to a type, it can be NULL. - Returns 1 if PROP could be converted and the static value is passed back - into VALUE, otherwise returns 0. */ + Returns true if PROP could be converted and the static value is passed + back into VALUE, otherwise returns false. */ -int dwarf2_evaluate_property (const struct dynamic_prop *prop, - struct frame_info *frame, - struct property_addr_info *addr_stack, - CORE_ADDR *value); +bool dwarf2_evaluate_property (const struct dynamic_prop *prop, + struct frame_info *frame, + struct property_addr_info *addr_stack, + CORE_ADDR *value); /* A helper for the compiler interface that compiles a single dynamic property to C code. @@ -151,7 +156,7 @@ int dwarf2_evaluate_property (const struct dynamic_prop *prop, evaluated. SYM the originating symbol, used for error reporting. */ -void dwarf2_compile_property_to_c (struct ui_file *stream, +void dwarf2_compile_property_to_c (string_file *stream, const char *result_name, struct gdbarch *gdbarch, unsigned char *registers_used, @@ -178,6 +183,12 @@ struct dwarf2_locexpr_baton zero. */ size_t size; + /* When true this location expression is a reference and actually + describes the address at which the value of the attribute can be + found. When false the expression provides the value of the attribute + directly. */ + bool is_reference; + /* The compilation unit containing the symbol whose location we're computing. */ struct dwarf2_per_cu_data *per_cu; @@ -217,29 +228,33 @@ struct dwarf2_offset_baton LONGEST offset; /* The type of the object whose property is dynamic. In the example - provided above, this would the the array's index type. */ + provided above, this would the array's index type. */ struct type *type; }; /* A dynamic property is either expressed as a single location expression or a location list. If the property is an indirection, pointing to - another die, keep track of the targeted type in REFERENCED_TYPE. */ + another die, keep track of the targeted type in PROPERTY_TYPE. + Alternatively, if the property location gives the property value + directly then it will have PROPERTY_TYPE. */ struct dwarf2_property_baton { /* If the property is an indirection, we need to evaluate the location - in the context of the type REFERENCED_TYPE. - If NULL, the location is the actual value of the property. */ - struct type *referenced_type; + in the context of the type PROPERTY_TYPE. If the property is supplied + by value then it will be of PROPERTY_TYPE. This field should never be + NULL. */ + struct type *property_type; union { - /* Location expression. */ + /* Location expression either evaluated in the context of + PROPERTY_TYPE, or a value of type PROPERTY_TYPE. */ struct dwarf2_locexpr_baton locexpr; - /* Location list to be evaluated in the context of REFERENCED_TYPE. */ + /* Location list to be evaluated in the context of PROPERTY_TYPE. */ struct dwarf2_loclist_baton loclist; - /* The location is an offset to REFERENCED_TYPE. */ + /* The location is an offset to PROPERTY_TYPE. */ struct dwarf2_offset_baton offset_info; }; }; @@ -265,7 +280,6 @@ extern const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs; extern void dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc, - struct gdbarch *arch, unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end,