X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fdwarf2loc.h;h=b35973371fa3803009fb0bb85f07a6bce96eb53e;hb=3a4ae681237c26ac55603f3a92c92fd748108cd2;hp=e94346cea5fe32cd150a47212198ea8c0cc9bb97;hpb=8cf6f0b103e62f41f7cebe50f959a8c15986bd8e;p=binutils-gdb.git diff --git a/gdb/dwarf2loc.h b/gdb/dwarf2loc.h index e94346cea5f..b35973371fa 100644 --- a/gdb/dwarf2loc.h +++ b/gdb/dwarf2loc.h @@ -1,7 +1,6 @@ /* DWARF 2 location expression support for GDB. - Copyright (C) 2003, 2005, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 2003, 2005, 2007-2012 Free Software Foundation, Inc. This file is part of GDB. @@ -21,21 +20,32 @@ #if !defined (DWARF2LOC_H) #define DWARF2LOC_H +#include "dwarf2expr.h" + struct symbol_computed_ops; struct objfile; struct dwarf2_per_cu_data; struct dwarf2_loclist_baton; +struct agent_expr; +struct axs_value; /* This header is private to the DWARF-2 reader. It is shared between dwarf2read.c and dwarf2loc.c. */ +/* `set debug entry-values' setting. */ +extern int entry_values_debug; + /* Return the OBJFILE associated with the compilation unit CU. If CU came from a separate debuginfo file, then the master objfile is returned. */ struct objfile *dwarf2_per_cu_objfile (struct dwarf2_per_cu_data *cu); /* Return the address size given in the compilation unit header for CU. */ -CORE_ADDR dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *cu); +int dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *cu); + +/* Return the DW_FORM_ref_addr size given in the compilation unit header for + CU. */ +int dwarf2_per_cu_ref_addr_size (struct dwarf2_per_cu_data *cu); /* Return the offset size given in the compilation unit header for CU. */ int dwarf2_per_cu_offset_size (struct dwarf2_per_cu_data *cu); @@ -53,10 +63,13 @@ const gdb_byte *dwarf2_find_location_expression CORE_ADDR pc); struct dwarf2_locexpr_baton dwarf2_fetch_die_location_block - (unsigned int offset, struct dwarf2_per_cu_data *per_cu, + (cu_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu, CORE_ADDR (*get_frame_pc) (void *baton), void *baton); +struct type *dwarf2_get_die_type (cu_offset die_offset, + struct dwarf2_per_cu_data *per_cu); + /* Evaluate a location description, starting at DATA and with length SIZE, to find the current location of variable of TYPE in the context of FRAME. */ @@ -75,10 +88,12 @@ struct value *dwarf2_evaluate_loc_desc (struct type *type, struct dwarf2_locexpr_baton { - /* Pointer to the start of the location expression. */ + /* Pointer to the start of the location expression. Valid only if SIZE is + not zero. */ const gdb_byte *data; - /* Length of the location expression. */ + /* Length of the location expression. For optimized out expressions it is + zero. */ unsigned long size; /* The compilation unit containing the symbol whose location @@ -106,4 +121,44 @@ struct dwarf2_loclist_baton extern const struct symbol_computed_ops dwarf2_locexpr_funcs; extern const struct symbol_computed_ops dwarf2_loclist_funcs; +/* Compile a DWARF location expression to an agent expression. + + EXPR is the agent expression we are building. + LOC is the agent value we modify. + ARCH is the architecture. + ADDR_SIZE is the size of addresses, in bytes. + OP_PTR is the start of the location expression. + OP_END is one past the last byte of the location expression. + + This will throw an exception for various kinds of errors -- for + example, if the expression cannot be compiled, or if the expression + is invalid. */ + +extern void dwarf2_compile_expr_to_ax (struct agent_expr *expr, + struct axs_value *loc, + struct gdbarch *arch, + unsigned int addr_size, + const gdb_byte *op_ptr, + const gdb_byte *op_end, + struct dwarf2_per_cu_data *per_cu); + +/* Determined tail calls for constructing virtual tail call frames. */ + +struct call_site_chain + { + /* Initially CALLERS == CALLEES == LENGTH. For partially ambiguous result + CALLERS + CALLEES < LENGTH. */ + int callers, callees, length; + + /* Variably sized array with LENGTH elements. Later [0..CALLERS-1] contain + top (GDB "prev") sites and [LENGTH-CALLEES..LENGTH-1] contain bottom + (GDB "next") sites. One is interested primarily in the PC field. */ + struct call_site *call_site[1]; + }; + +struct call_site_stuff; +extern struct call_site_chain *call_site_find_chain (struct gdbarch *gdbarch, + CORE_ADDR caller_pc, + CORE_ADDR callee_pc); + #endif /* dwarf2loc.h */