public inbox for archer-commits@sourceware.org help / color / mirror / Atom feed
From: jkratoch@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] archer-jankratochvil-watchpoint3: Merge remote branch 'origin/master' into archer-jankratochvil-watchpoint3 Date: Tue, 30 Nov 2010 00:30:00 -0000 [thread overview] Message-ID: <20101130003053.14637.qmail@sourceware.org> (raw) The branch, archer-jankratochvil-watchpoint3 has been updated via e7e237dc696448e754f77727c2804a61f3a52e54 (commit) via 78e9675f6783611aab8b4e94e046e95c4a18b2ea (commit) via 85c05a4bbc86c4757e0b8a76a2bfd43e80d800ed (commit) via d712a8cd14ef424c3375c4288d4a78f4ecc4166d (commit) via 5a9fa87006fc0437a80a99e7029e602c0a3a30c3 (commit) via 83520a07e6de31319c8ebce35d7ef9ea8abde0b5 (commit) via 904b05782deb53da93b07a60b70193b5a80f6d40 (commit) via d3bf95b7dcbba0d0b07a51c616e195e55554ae02 (commit) via 96584997ad4444e5c3d31a6554020967006a0196 (commit) via c81a691b89389250cd099d1a3f23d852a1ad755c (commit) via e012eb4d0574f51690879f3f7d22b97624751f1d (commit) from c724b37faa40c7f2abab722b0101c01999a4878a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit e7e237dc696448e754f77727c2804a61f3a52e54 Merge: 9658499 78e9675 Author: Jan Kratochvil <jan.kratochvil@redhat.com> Date: Tue Nov 30 01:20:41 2010 +0100 Merge remote branch 'origin/master' into archer-jankratochvil-watchpoint3 commit 96584997ad4444e5c3d31a6554020967006a0196 Author: Jan Kratochvil <jan.kratochvil@redhat.com> Date: Mon Nov 29 05:18:48 2010 +0100 +New disabled testcase - see PR breakpoints/12272. ----------------------------------------------------------------------- Summary of changes: ChangeLog | 5 + bfd/version.h | 2 +- configure.ac | 3 +- gdb/ChangeLog | 74 ++ gdb/cp-valprint.c | 8 + gdb/doc/ChangeLog | 11 + gdb/doc/gdb.texinfo | 8 +- gdb/dwarf2-frame.c | 10 + gdb/dwarf2expr.c | 31 + gdb/dwarf2expr.h | 22 +- gdb/dwarf2loc.c | 291 +++++++- gdb/dwarf2loc.h | 11 +- gdb/dwarf2read.c | 53 ++- gdb/jv-valprint.c | 8 + gdb/opencl-lang.c | 39 ++ gdb/p-valprint.c | 8 + gdb/python/lib/gdb/command/pretty_printers.py | 10 +- gdb/python/lib/gdb/printing.py | 10 +- gdb/python/py-breakpoint.c | 19 + gdb/testsuite/ChangeLog | 17 + gdb/testsuite/gdb.dwarf2/implptr.S | 882 +++++++++++++++++++++++++ gdb/testsuite/gdb.dwarf2/implptr.c | 68 ++ gdb/testsuite/gdb.dwarf2/implptr.exp | 80 +++ gdb/testsuite/gdb.multi/watchpoint-multi.c | 45 ++ gdb/testsuite/gdb.multi/watchpoint-multi.exp | 58 ++ gdb/testsuite/gdb.python/py-breakpoint.exp | 23 + gdb/testsuite/gdb.python/py-pp-maint.exp | 18 +- gdb/valarith.c | 8 +- gdb/valops.c | 13 + gdb/valprint.c | 7 + gdb/value.c | 12 + gdb/value.h | 16 + gdb/version.in | 2 +- libdecnumber/ChangeLog | 5 + libdecnumber/dconfig.h | 7 +- libiberty/ChangeLog | 4 + libiberty/setproctitle.c | 1 + 37 files changed, 1813 insertions(+), 76 deletions(-) create mode 100644 gdb/testsuite/gdb.dwarf2/implptr.S create mode 100644 gdb/testsuite/gdb.dwarf2/implptr.c create mode 100644 gdb/testsuite/gdb.dwarf2/implptr.exp create mode 100644 gdb/testsuite/gdb.multi/watchpoint-multi.c create mode 100644 gdb/testsuite/gdb.multi/watchpoint-multi.exp First 500 lines of diff: diff --git a/ChangeLog b/ChangeLog index fbc94ed..09dba95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-11-29 Andreas Schwab <schwab@redhat.com> + + * configure.ac: Move comment to remove extra space in last argument + of GCC_TARGET_TOOL. + 2010-11-26 Alexandre Oliva <aoliva@redhat.com> PR other/46020 diff --git a/bfd/version.h b/bfd/version.h index 2c78ce5..fad98e6 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -1,4 +1,4 @@ -#define BFD_VERSION_DATE 20101128 +#define BFD_VERSION_DATE 20101130 #define BFD_VERSION @bfd_version@ #define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@ #define REPORT_BUGS_TO @report_bugs_to@ diff --git a/configure.ac b/configure.ac index 7859290..65c0a74 100644 --- a/configure.ac +++ b/configure.ac @@ -3235,8 +3235,9 @@ RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET" GCC_TARGET_TOOL(ar, AR_FOR_TARGET, AR, [binutils/ar]) GCC_TARGET_TOOL(as, AS_FOR_TARGET, AS, [gas/as-new]) GCC_TARGET_TOOL(cc, CC_FOR_TARGET, CC, [gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/]) +dnl see comments for CXX_FOR_TARGET_FLAG_TO_PASS GCC_TARGET_TOOL(c++, CXX_FOR_TARGET, CXX, - [gcc/g++ -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ `if test -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags; then $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes; else echo -funconfigured-libstdc++-v3 ; fi` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs],dnl see comments for CXX_FOR_TARGET_FLAG_TO_PASS + [gcc/g++ -B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ `if test -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags; then $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes; else echo -funconfigured-libstdc++-v3 ; fi` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs], c++) GCC_TARGET_TOOL(c++ for libstdc++, RAW_CXX_FOR_TARGET, CXX, [gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs], diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a7aa825..0286cac 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,77 @@ +2010-11-29 Doug Evans <dje@google.com> + + * python/lib/gdb/printing.py (register_pretty_printer): Change + printer-name:subprinter-name to printer-name;subprinter-name. + * python/lib/gdb/command/pretty_printers.py (parse_printer_regexps): + Ditto. + (InfoPrettyPrinter, EnablePrettyPrinter, DisablePrettyPrinter): Ditto. + +2010-11-29 Tom Tromey <tromey@redhat.com> + + * 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. + +2010-11-29 Phil Muldoon <pmuldoon@redhat.com> + + PR python/12199 + + * python/py-breakpoint.c (bppy_delete_breakpoint): New function. + 2010-11-28 Jan Kratochvil <jan.kratochvil@redhat.com> Fix step_resume_breakpoint unsaved during an infcall. diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index 5f47ec4..e65c12b 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -289,6 +289,14 @@ cp_print_value_fields (struct type *type, struct type *real_type, { fputs_filtered ("<optimized out or zero length>", stream); } + else if (value_bits_synthetic_pointer (val, + TYPE_FIELD_BITPOS (type, + i), + TYPE_FIELD_BITSIZE (type, + i))) + { + fputs_filtered (_("<synthetic pointer>"), stream); + } else if (!value_bits_valid (val, TYPE_FIELD_BITPOS (type, i), TYPE_FIELD_BITSIZE (type, i))) { diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index dd00d1a..6b4f2bb 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,14 @@ +2010-11-29 Doug Evans <dje@google.com> + + * gdb.texinfo (Pretty-Printer Introduction): Change + printer-name:subprinter-name to printer-name;subprinter-name. + +2010-11-29 Phil Muldoon <pmuldoon@redhat.com> + + PR python/12199 + + * gdb.texinfo (Breakpoints In Python): Document "delete" method. + 2010-11-23 Tom Tromey <tromey@redhat.com> * gdb.texinfo (Top): Check SYSTEM_READLINE. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 5550f51..422812c 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -8160,7 +8160,7 @@ pretty-printers with their names. If a pretty-printer can handle multiple data types, then its @dfn{subprinters} are the printers for the individual data types. Each such subprinter has its own name. -The format of the name is @var{printer-name}:@var{subprinter-name}. +The format of the name is @var{printer-name};@var{subprinter-name}. Pretty-printers are installed by @dfn{registering} them with @value{GDBN}. Typically they are automatically loaded and registered when the corresponding @@ -22911,6 +22911,12 @@ watchpoint scope, the watchpoint remains valid even if execution of the inferior leaves the scope of that watchpoint. @end defmethod +@defmethod Breakpoint delete +Permanently deletes the @value{GDBN} breakpoint. This also +invalidates the Python @code{Breakpoint} object. Any further access +to this object's attributes or methods will raise an error. +@end defmethod + @defivar Breakpoint enabled This attribute is @code{True} if the breakpoint is enabled, and @code{False} otherwise. This attribute is writable. diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index d7d8b97..d09a377 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -325,6 +325,15 @@ no_get_frame_cfa (void *baton) _("Support for DW_OP_call_frame_cfa is unimplemented")); } +/* Helper function for execute_stack_op. */ + +static CORE_ADDR +no_get_frame_pc (void *baton) +{ + internal_error (__FILE__, __LINE__, + _("Support for DW_OP_GNU_implicit_pointer is unimplemented")); +} + static CORE_ADDR no_get_tls_address (void *baton, CORE_ADDR offset) { @@ -391,6 +400,7 @@ execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size, ctx->read_mem = read_mem; ctx->get_frame_base = no_get_frame_base; ctx->get_frame_cfa = no_get_frame_cfa; + ctx->get_frame_pc = no_get_frame_pc; ctx->get_tls_address = no_get_tls_address; ctx->dwarf_call = no_dwarf_call; diff --git a/gdb/dwarf2expr.c b/gdb/dwarf2expr.c index b9ae108..29bfcf4 100644 --- a/gdb/dwarf2expr.c +++ b/gdb/dwarf2expr.c @@ -233,6 +233,11 @@ add_piece (struct dwarf_expr_context *ctx, ULONGEST size, ULONGEST offset) p->v.mem.addr = dwarf_expr_fetch_address (ctx, 0); p->v.mem.in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0); } + else if (p->location == DWARF_VALUE_IMPLICIT_POINTER) + { + p->v.ptr.die = ctx->len; + p->v.ptr.offset = (LONGEST) dwarf_expr_fetch (ctx, 0); + } else { p->v.value = dwarf_expr_fetch (ctx, 0); @@ -527,6 +532,26 @@ execute_stack_op (struct dwarf_expr_context *ctx, dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value"); goto no_push; + case DW_OP_GNU_implicit_pointer: + { + ULONGEST die; + LONGEST len; + + /* The referred-to DIE. */ + ctx->len = extract_unsigned_integer (op_ptr, ctx->addr_size, + byte_order); + op_ptr += ctx->addr_size; + + /* The byte offset into the data. */ + op_ptr = read_sleb128 (op_ptr, op_end, &len); + result = (ULONGEST) len; + + ctx->location = DWARF_VALUE_IMPLICIT_POINTER; + dwarf_expr_require_composition (op_ptr, op_end, + "DW_OP_GNU_implicit_pointer"); + } + break; + case DW_OP_breg0: case DW_OP_breg1: case DW_OP_breg2: @@ -884,6 +909,12 @@ execute_stack_op (struct dwarf_expr_context *ctx, no_push:; } + /* To simplify our main caller, if the result is an implicit + pointer, then make a pieced value. This is ok because we can't + have implicit pointers in contexts where pieces are invalid. */ + if (ctx->location == DWARF_VALUE_IMPLICIT_POINTER) + add_piece (ctx, 8 * ctx->addr_size, 0); + ctx->recursion_depth--; gdb_assert (ctx->recursion_depth >= 0); #undef sign_ext diff --git a/gdb/dwarf2expr.h b/gdb/dwarf2expr.h index 61b8f00..68cc667 100644 --- a/gdb/dwarf2expr.h +++ b/gdb/dwarf2expr.h @@ -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. */ diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index b2aecf2..f0e08c7 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -48,7 +48,13 @@ static void dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, const gdb_byte **start, size_t *length); -/* A helper function for dealing with location lists. Given a +static struct value * +dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, + const gdb_byte *data, unsigned short size, + struct dwarf2_per_cu_data *per_cu, + LONGEST byte_offset); + +/* A function for dealing with location lists. Given a symbol baton (BATON) and a pc value (PC), find the appropriate location expression, set *LOCEXPR_LENGTH, and return a pointer to the beginning of the expression. Returns NULL on failure. @@ -56,9 +62,9 @@ dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, For now, only return the first matching location expression; there can be more than one in the list. */ -static const gdb_byte * -find_location_expression (struct dwarf2_loclist_baton *baton, - size_t *locexpr_length, CORE_ADDR pc) +const gdb_byte * +dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton, + size_t *locexpr_length, CORE_ADDR pc) { CORE_ADDR low, high; const gdb_byte *loc_ptr, *buf_end; @@ -79,7 +85,7 @@ find_location_expression (struct dwarf2_loclist_baton *baton, while (1) { if (buf_end - loc_ptr < 2 * addr_size) - error (_("find_location_expression: Corrupted DWARF expression.")); + error (_("dwarf2_find_location_expression: Corrupted DWARF expression.")); if (signed_addr_p) low = extract_signed_integer (loc_ptr, addr_size, byte_order); @@ -193,7 +199,7 @@ dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, struct dwarf2_loclist_baton *symbaton; symbaton = SYMBOL_LOCATION_BATON (framefunc); - *start = find_location_expression (symbaton, length, pc); + *start = dwarf2_find_location_expression (symbaton, length, pc); } else { @@ -225,6 +231,17 @@ dwarf_expr_frame_cfa (void *baton) return dwarf2_frame_cfa (debaton->frame); } +/* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for + the frame in BATON. */ + +static CORE_ADDR +dwarf_expr_frame_pc (void *baton) +{ + struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton; + + return get_frame_address_in_block (debaton->frame); +} + /* Using the objfile specified in BATON, find the address for the current thread's thread-local storage with offset OFFSET. */ static CORE_ADDR @@ -241,11 +258,14 @@ dwarf_expr_tls_address (void *baton, CORE_ADDR offset) static void per_cu_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset, - struct dwarf2_per_cu_data *per_cu) + struct dwarf2_per_cu_data *per_cu, + CORE_ADDR (*get_frame_pc) (void *baton), + void *baton) { struct dwarf2_locexpr_baton block; - block = dwarf2_fetch_die_location_block (die_offset, per_cu); + block = dwarf2_fetch_die_location_block (die_offset, per_cu, + get_frame_pc, baton); /* DW_OP_call_ref is currently not supported. */ gdb_assert (block.per_cu == per_cu); @@ -260,7 +280,8 @@ dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset) { struct dwarf_expr_baton *debaton = ctx->baton; - return per_cu_dwarf_call (ctx, die_offset, debaton->per_cu); + return per_cu_dwarf_call (ctx, die_offset, debaton->per_cu, + ctx->get_frame_pc, ctx->baton); } struct piece_closure @@ -268,6 +289,9 @@ struct piece_closure /* Reference count. */ int refc; + /* The CU from which this closure's expression came. */ + struct dwarf2_per_cu_data *per_cu; + /* The number of pieces used to describe this variable. */ int n_pieces; @@ -282,12 +306,14 @@ struct piece_closure PIECES. */ static struct piece_closure * -allocate_piece_closure (int n_pieces, struct dwarf_expr_piece *pieces, +allocate_piece_closure (struct dwarf2_per_cu_data *per_cu, + int n_pieces, struct dwarf_expr_piece *pieces, int addr_size) { struct piece_closure *c = XZALLOC (struct piece_closure); c->refc = 1; + c->per_cu = per_cu; c->n_pieces = n_pieces; c->addr_size = addr_size; c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece); @@ -622,6 +648,11 @@ read_pieced_value (struct value *v) } break; + /* These bits show up as zeros -- but do not cause the value + to be considered optimized-out. */ + case DWARF_VALUE_IMPLICIT_POINTER: + break; + case DWARF_VALUE_OPTIMIZED_OUT: set_value_optimized_out (v, 1); break; @@ -630,7 +661,8 @@ read_pieced_value (struct value *v) internal_error (__FILE__, __LINE__, _("invalid location type")); } - if (p->location != DWARF_VALUE_OPTIMIZED_OUT) + if (p->location != DWARF_VALUE_OPTIMIZED_OUT + && p->location != DWARF_VALUE_IMPLICIT_POINTER) copy_bitwise (contents, dest_offset_bits, intermediate_buffer, source_offset_bits % 8, this_size_bits, bits_big_endian); @@ -785,13 +817,24 @@ write_pieced_value (struct value *to, struct value *from) do_cleanups (cleanup); } +/* A helper function that checks bit validity in a pieced value. + CHECK_FOR indicates the kind of validity checking. + DWARF_VALUE_MEMORY means to check whether any bit is valid. + DWARF_VALUE_OPTIMIZED_OUT means to check whether any bit is + optimized out. + DWARF_VALUE_IMPLICIT_POINTER means to check whether the bits are an + implicit pointer. */ + static int check_pieced_value_bits (const struct value *value, int bit_offset, - int bit_length, int validity) + int bit_length, + enum dwarf_value_location check_for) { struct piece_closure *c = (struct piece_closure *) value_computed_closure (value); int i; + int validity = (check_for == DWARF_VALUE_MEMORY + || check_for == DWARF_VALUE_IMPLICIT_POINTER); bit_offset += 8 * value_offset (value); if (value_bitsize (value)) @@ -816,7 +859,13 @@ check_pieced_value_bits (const struct value *value, int bit_offset, else bit_length -= this_size_bits; - if (p->location == DWARF_VALUE_OPTIMIZED_OUT) + if (check_for == DWARF_VALUE_IMPLICIT_POINTER) + { + if (p->location != DWARF_VALUE_IMPLICIT_POINTER) + return 0; hooks/post-receive -- Repository for Project Archer.
next reply other threads:[~2010-11-30 0:30 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-11-30 0:30 jkratoch [this message] -- strict thread matches above, loose matches on Subject: below -- 2011-01-17 14:13 jkratoch 2011-01-07 7:34 jkratoch 2011-01-04 5:06 jkratoch 2010-12-06 6:42 jkratoch 2010-11-16 5:53 jkratoch
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20101130003053.14637.qmail@sourceware.org \ --to=jkratoch@sourceware.org \ --cc=archer-commits@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).