diff options
author | Tom Tromey <tromey@redhat.com> | 2011-05-12 17:40:55 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2011-05-12 17:40:55 +0000 |
commit | 8a9b8146fd539229c51c6a4e5a4f682df2a630b0 (patch) | |
tree | 56c7dadd7ba248c915d0bdbf33cb36840d21dc71 /gdb/value.c | |
parent | e8d28ef4f324014dfd424acab461bbf4393b0b69 (diff) | |
download | gdb-8a9b8146fd539229c51c6a4e5a4f682df2a630b0.zip gdb-8a9b8146fd539229c51c6a4e5a4f682df2a630b0.tar.gz gdb-8a9b8146fd539229c51c6a4e5a4f682df2a630b0.tar.bz2 |
gdb
PR gdb/12617:
* value.h (value_from_contents): Declare.
* value.c (value_from_contents): New function.
* dwarf2read.c (dwarf_stack_op_name): Add new values.
(dwarf2_get_die_type): New function.
* dwarf2loc.c (dwarf_expr_get_base_type): New function.
(allocate_piece_closure): Acquire reference to values.
(read_pieced_value): Update for value-based expressions.
(write_pieced_value): Likewise.
(free_pieced_value_closure): Call value_free as needed.
(dwarf2_evaluate_loc_desc_full): Set get_base_type field.
Update for value-based expressions.
* dwarf2loc.h (dwarf2_get_die_type): Declare.
* dwarf2expr.h (struct dwarf_stack_value) <value>: Change type.
<get_base_type>: New field.
(struct dwarf_expr_piece) <v.value>: Change type.
<v.regno>: New field.
(struct dwarf_expr_context) <mark>: New field.
(dwarf_expr_piece, dwarf_expr_fetch): Update.
(dwarf_expr_pop, dwarf_expr_push): Remove.
(dwarf_expr_push_address): Declare.
* dwarf2expr.c (dwarf_arch_cookie): New global.
(struct dwarf_gdbarch_types): New.
(dwarf_gdbarch_types_init, dwarf_expr_address_type): New
functions.
(dwarf_expr_push): Change type of 'value' argument. Update. Now
static.
(dwarf_expr_push_address): New function.
(dwarf_expr_pop): Now static.
(dwarf_expr_fetch): Change return type.
(dwarf_require_integral): New function.
(dwarf_expr_fetch): Simplify.
(add_piece): Update.
(base_types_equal_p, dwarf_get_base_type, get_unsigned_type): New
functions.
(execute_stack_op) <sign_ext>: Remove.
Use values for DWARF stack.
<DW_OP_GNU_const_type, DW_OP_GNU_deref_type,
DW_OP_GNU_regval_type, DW_OP_GNU_convert, DW_OP_GNU_reinterpret>:
New cases.
(_initialize_dwarf2expr): New function.
(add_piece): Update.
(new_dwarf_expr_context): Set new field.
(free_dwarf_expr_context): Call value_free_to_mark.
* dwarf2-frame.c (no_base_type): New function.
(execute_stack_op): Set get_base_type field. Update.
gdb/testsuite
* gdb.dwarf2/typeddwarf.S: New file.
* gdb.dwarf2/typeddwarf.c: New file.
* gdb.dwarf2/typeddwarf.exp: New file.
Diffstat (limited to 'gdb/value.c')
-rw-r--r-- | gdb/value.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gdb/value.c b/gdb/value.c index 2acb1df..cb7cae5 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -2965,6 +2965,19 @@ value_from_contents_and_address (struct type *type, return v; } +/* Create a value of type TYPE holding the contents CONTENTS. + The new value is `not_lval'. */ + +struct value * +value_from_contents (struct type *type, const gdb_byte *contents) +{ + struct value *result; + + result = allocate_value (type); + memcpy (value_contents_raw (result), contents, TYPE_LENGTH (type)); + return result; +} + struct value * value_from_double (struct type *type, DOUBLEST num) { |