diff options
author | Tom Tromey <tromey@redhat.com> | 2010-05-21 21:01:46 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2010-05-21 21:01:46 +0000 |
commit | cb82636715e384dc5e75f3c1a4fd436626ba8dcd (patch) | |
tree | e75f984689d6689f268f025f198b5cc1817780ff /gdb/dwarf2loc.c | |
parent | 74de6778b16fe5429d512d7250747f4d9e1ed374 (diff) | |
download | gdb-cb82636715e384dc5e75f3c1a4fd436626ba8dcd.zip gdb-cb82636715e384dc5e75f3c1a4fd436626ba8dcd.tar.gz gdb-cb82636715e384dc5e75f3c1a4fd436626ba8dcd.tar.bz2 |
gdb
* dwarf2loc.c (read_pieced_value): Exit loop when result is full.
<DWARF_VALUE_OPTIMIZED_OUT>: New case.
* dwarf2expr.h (enum dwarf_value_location)
<DWARF_VALUE_OPTIMIZED_OUT>: New constant.
* dwarf2expr.c (dwarf_expr_stack_empty_p): New function.
(add_piece): Handle empty piece.
(execute_stack_op) <DW_OP_piece>: Handle
DWARF_VALUE_OPTIMIZED_OUT.
gdb/testsuite
* gdb.dwarf2/pieces.exp (pieces_test_f6): New proc.
Call it.
* gdb.dwarf2/pieces.c (struct C): New.
(f6): New function.
* gdb.dwarf2/pieces.S: Replace.
Diffstat (limited to 'gdb/dwarf2loc.c')
-rw-r--r-- | gdb/dwarf2loc.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index f40be6c..fee81a1 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -384,6 +384,16 @@ read_pieced_value (struct value *v) } break; + case DWARF_VALUE_OPTIMIZED_OUT: + /* We just leave the bits empty for now. This is not ideal + but gdb currently does not have a nice way to represent + optimized-out pieces. */ + warning (_("bytes %ld-%ld in computed object were optimized out; " + "replacing with zeroes"), + offset, + offset + (long) this_size); + break; + default: internal_error (__FILE__, __LINE__, _("invalid location type")); } @@ -609,6 +619,9 @@ dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame, } break; + /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context -- + it can only be encountered when making a piece. */ + case DWARF_VALUE_OPTIMIZED_OUT: default: internal_error (__FILE__, __LINE__, _("invalid location type")); } |