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.


             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: link
Be 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).