*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / dwarf2expr.h
index a319ca328122a2df505e304cf591c9921916e434..0c55c109a846ffe037df3ef3e80877ecd8bc1e01 100644 (file)
@@ -1,7 +1,7 @@
 /* DWARF 2 Expression Evaluator.
 
-   Copyright (C) 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005, 2007-2012 Free Software Foundation,
+   Inc.
 
    Contributed by Daniel Berlin <dan@dberlin.org>.
 
 
 struct dwarf_expr_context;
 
+/* Offset relative to the start of its containing CU (compilation unit).  */
+typedef struct
+{
+  unsigned int cu_off;
+} cu_offset;
+
+/* Offset relative to the start of its .debug_info or .debug_types section.  */
+typedef struct
+{
+  unsigned int sect_off;
+} sect_offset;
+
 /* Virtual method table for struct dwarf_expr_context below.  */
 
 struct dwarf_expr_context_funcs
@@ -53,14 +65,14 @@ struct dwarf_expr_context_funcs
   /* Execute DW_AT_location expression for the DWARF expression subroutine in
      the DIE at DIE_OFFSET in the CU from CTX.  Do not touch STACK while it
      being passed to and returned from the called DWARF subroutine.  */
-  void (*dwarf_call) (struct dwarf_expr_context *ctx, size_t die_offset);
+  void (*dwarf_call) (struct dwarf_expr_context *ctx, cu_offset die_offset);
 
   /* Return the base type given by the indicated DIE.  This can throw
      an exception if the DIE is invalid or does not represent a base
      type.  If can also be NULL in the special case where the
      callbacks are not performing evaluation, and thus it is
      meaningful to substitute a stub type of the correct size.  */
-  struct type *(*get_base_type) (struct dwarf_expr_context *ctx, size_t die);
+  struct type *(*get_base_type) (struct dwarf_expr_context *ctx, cu_offset die);
 
   /* Push on DWARF stack an entry evaluated for DW_TAG_GNU_call_site's
      DWARF_REG/FB_OFFSET at the caller of specified BATON.  If DWARF register
@@ -73,6 +85,10 @@ struct dwarf_expr_context_funcs
                                      int dwarf_reg, CORE_ADDR fb_offset,
                                      int deref_size);
 
+  /* Return the address indexed by DW_OP_GNU_addr_index.
+     This can throw an exception if the index is out of range.  */
+  CORE_ADDR (*get_addr_index) (void *baton, unsigned int index);
+
 #if 0
   /* Not yet implemented.  */
 
@@ -160,7 +176,7 @@ struct dwarf_expr_context
 
   /* For DWARF_VALUE_LITERAL, the current literal value's length and
      data.  For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the
-     target DIE.  */
+     target DIE of cu_offset kind.  */
   ULONGEST len;
   const gdb_byte *data;
 
@@ -231,7 +247,7 @@ struct dwarf_expr_piece
     struct
     {
       /* The referent DIE from DW_OP_GNU_implicit_pointer.  */
-      ULONGEST die;
+      cu_offset die;
       /* The byte offset into the resulting data.  */
       LONGEST offset;
     } ptr;
@@ -270,17 +286,18 @@ void dwarf_expr_require_composition (const gdb_byte *, const gdb_byte *,
 
 /* Stub dwarf_expr_context_funcs implementations.  */
 
-CORE_ADDR ctx_no_read_reg (void *baton, int regnum);
 void ctx_no_get_frame_base (void *baton, const gdb_byte **start,
                            size_t *length);
 CORE_ADDR ctx_no_get_frame_cfa (void *baton);
 CORE_ADDR ctx_no_get_frame_pc (void *baton);
 CORE_ADDR ctx_no_get_tls_address (void *baton, CORE_ADDR offset);
-void ctx_no_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset);
-struct type *ctx_no_get_base_type (struct dwarf_expr_context *ctx, size_t die);
+void ctx_no_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset);
+struct type *ctx_no_get_base_type (struct dwarf_expr_context *ctx,
+                                  cu_offset die);
 void ctx_no_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
                                        int dwarf_reg, CORE_ADDR fb_offset,
                                        int deref_size);
+CORE_ADDR ctx_no_get_addr_index (void *baton, unsigned int index);
 
 int dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end);
 
This page took 0.023956 seconds and 4 git commands to generate.