mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-16 04:18:50 +00:00
gdb
* opencl-lang.c (lval_func_check_synthetic_pointer): New function. * value.h (struct lval_funcs) <indirect, check_synthetic_pointer>: New fields. (value_bits_synthetic_pointer): Declare. * value.c (value_bits_synthetic_pointer): New function. * valprint.c (valprint_check_validity): Handle synthetic pointers. * valops.c (value_ind): Use new 'indirect' lval_funcs method. * valarith.c (value_ptradd): Use set_value_component_location. * p-valprint.c (pascal_object_print_value_fields): Handle synthetic pointers. * jv-valprint.c (java_print_value_fields): Handle synthetic pointers. * dwarf2read.c (dwarf_stack_op_name): Add DW_OP_GNU_implicit_pointer. (dwarf2_fetch_die_location_block): Add get_frame_pc, baton arguments. Handle location lists. (fill_in_loclist_baton): New function. (dwarf2_symbol_mark_computed): Use it. * dwarf2loc.h (dwarf2_find_location_expression): Declare. (dwarf2_fetch_die_location_block): Add get_frame_pc, baton arguments. * dwarf2loc.c (dwarf2_find_location_expression): Rename from find_location_expression. No longer static. Update all callers. (dwarf_expr_frame_pc): New function. (per_cu_dwarf_call): Add get_frame_pc, baton arguments. Update all callers. (struct piece_closure) <per_cu>: New field. (allocate_piece_closure): Add per_cu argument. (read_pieced_value): Handle DWARF_VALUE_IMPLICIT_POINTER. (check_pieced_value_bits): Remove validity argument, add check_for argument. Handle DWARF_VALUE_IMPLICIT_POINTER. (check_pieced_value_validity, check_pieced_value_invalid): Update. (check_pieced_synthetic_pointer): New function. (get_frame_address_in_block_wrapper): New function. (indirect_pieced_value): New function. (pieced_value_funcs): Update. (invalid_synthetic_pointer): New function. (dwarf2_evaluate_loc_desc_full): Rename from dwarf2_evaluate_loc_desc. Add byte_offset argument. (dwarf2_evaluate_loc_desc): Rewrite. (dwarf2_loc_desc_needs_frame): Set new field on context. (get_ax_pc): New function. (disassemble_dwarf_expression): Handle DW_OP_GNU_implicit_pointer. * dwarf2expr.h (enum dwarf_value_location) <DWARF_VALUE_IMPLICIT_POINTER>: New constant. (struct dwarf_expr_context) <get_frame_pc>: New field. (struct dwarf_expr_piece) <v.ptr>: New field. * dwarf2expr.c (add_piece): Handle DWARF_VALUE_IMPLICIT_POINTER. (execute_stack_op): Handle DW_OP_GNU_implicit_pointer. * dwarf2-frame.c (no_get_frame_pc): New function. (execute_stack_op): Set new field on context. * cp-valprint.c (cp_print_value_fields): Handle synthetic pointers. gdb/testsuite * gdb.dwarf2/implptr.exp: New file. * gdb.dwarf2/implptr.c: New file. * gdb.dwarf2/implptr.S: New file.
This commit is contained in:
@@ -41,7 +41,10 @@ enum dwarf_value_location
|
||||
DWARF_VALUE_LITERAL,
|
||||
|
||||
/* The piece was optimized out. */
|
||||
DWARF_VALUE_OPTIMIZED_OUT
|
||||
DWARF_VALUE_OPTIMIZED_OUT,
|
||||
|
||||
/* The piece is an implicit pointer. */
|
||||
DWARF_VALUE_IMPLICIT_POINTER
|
||||
};
|
||||
|
||||
/* The dwarf expression stack. */
|
||||
@@ -96,6 +99,9 @@ struct dwarf_expr_context
|
||||
/* Return the CFA for the frame. */
|
||||
CORE_ADDR (*get_frame_cfa) (void *baton);
|
||||
|
||||
/* Return the PC for the frame. */
|
||||
CORE_ADDR (*get_frame_pc) (void *baton);
|
||||
|
||||
/* Return the thread-local storage address for
|
||||
DW_OP_GNU_push_tls_address. */
|
||||
CORE_ADDR (*get_tls_address) (void *baton, CORE_ADDR offset);
|
||||
@@ -120,8 +126,9 @@ struct dwarf_expr_context
|
||||
/* Location of the value. */
|
||||
enum dwarf_value_location location;
|
||||
|
||||
/* For VALUE_LITERAL, a the current literal value's length and
|
||||
data. */
|
||||
/* For DWARF_VALUE_LITERAL, a the current literal value's length and
|
||||
data. For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the
|
||||
target DIE. */
|
||||
ULONGEST len;
|
||||
const gdb_byte *data;
|
||||
|
||||
@@ -185,6 +192,15 @@ struct dwarf_expr_piece
|
||||
/* The length of the available data. */
|
||||
ULONGEST length;
|
||||
} literal;
|
||||
|
||||
/* Used for DWARF_VALUE_IMPLICIT_POINTER. */
|
||||
struct
|
||||
{
|
||||
/* The referent DIE from DW_OP_GNU_implicit_pointer. */
|
||||
ULONGEST die;
|
||||
/* The byte offset into the resulting data. */
|
||||
LONGEST offset;
|
||||
} ptr;
|
||||
} v;
|
||||
|
||||
/* The length of the piece, in bits. */
|
||||
|
||||
Reference in New Issue
Block a user