X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fsymfile.h;h=fb58464f8b5c6076165e50a7ecd4a5e800d07fc9;hb=95830fd17d6ae253d8f6c2595188cadd59058799;hp=6b6ffc99a1312cfe83875172db19557dead84313;hpb=1e3a8f45c5a6e5d922e6e981d1572f2db35fb7a9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/symfile.h b/gdb/symfile.h index 6b6ffc99a1..fb58464f8b 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -1,8 +1,6 @@ /* Definitions for reading symbol files into GDB. - Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 1990-2013 Free Software Foundation, Inc. This file is part of GDB. @@ -24,6 +22,7 @@ /* This file requires that you first include "bfd.h". */ #include "symtab.h" +#include "probe.h" /* Opaque declarations. */ struct target_section; @@ -31,6 +30,11 @@ struct objfile; struct obj_section; struct obstack; struct block; +struct probe; +struct value; +struct frame_info; +struct agent_expr; +struct axs_value; /* Comparison function for symbol look ups. */ @@ -152,22 +156,24 @@ struct quick_symbol_functions /* Forget all cached full file names for OBJFILE. */ void (*forget_cached_source_info) (struct objfile *objfile); - /* Look up the symbol table, in OBJFILE, of a source file named - NAME. If there is no '/' in the name, a match after a '/' in the - symbol table's file name will also work. FULL_PATH is the - absolute file name, and REAL_PATH is the same, run through - gdb_realpath. - - If no such symbol table can be found, returns 0. - - Otherwise, sets *RESULT to the symbol table and returns 1. This - might return 1 and set *RESULT to NULL if the requested file is - an include file that does not have a symtab of its own. */ - int (*lookup_symtab) (struct objfile *objfile, - const char *name, - const char *full_path, - const char *real_path, - struct symtab **result); + /* Expand and iterate over each "partial" symbol table in OBJFILE + where the source file is named NAME. + + If NAME is not absolute, a match after a '/' in the symbol + table's file name will also work. FULL_PATH is the absolute file + name, and REAL_PATH is the same, run through gdb_realpath. + + If a match is found, the "partial" symbol table is expanded. + Then, this calls iterate_over_some_symtabs (or equivalent) over + all newly-created symbol tables, passing CALLBACK and DATA to it. + The result of this call is returned. */ + int (*map_symtabs_matching_filename) (struct objfile *objfile, + const char *name, + const char *full_path, + const char *real_path, + int (*callback) (struct symtab *, + void *), + void *data); /* Check to see if the symbol is defined in a "partial" symbol table of OBJFILE. KIND should be either GLOBAL_BLOCK or STATIC_BLOCK, @@ -176,7 +182,9 @@ struct quick_symbol_functions indicates what sort of symbol to search for. Returns the newly-expanded symbol table in which the symbol is - defined, or NULL if no such symbol table exists. */ + defined, or NULL if no such symbol table exists. If OBJFILE + contains !TYPE_OPAQUE symbol prefer its symtab. If it contains + only TYPE_OPAQUE symbol(s), return at least that symtab. */ struct symtab *(*lookup_symbol) (struct objfile *objfile, int kind, const char *name, domain_enum domain); @@ -258,10 +266,10 @@ struct quick_symbol_functions file is skipped. If FILE_MATCHER is NULL such file is not skipped. Otherwise, if KIND does not match this symbol is skipped. - - If even KIND matches, then NAME_MATCHER is called for each symbol defined - in the file. The symbol's "natural" name and DATA are passed to - NAME_MATCHER. + + If even KIND matches, then NAME_MATCHER is called for each symbol + defined in the file. The symbol "search" name and DATA are passed + to NAME_MATCHER. If NAME_MATCHER returns zero, then this symbol is skipped. @@ -269,11 +277,12 @@ struct quick_symbol_functions DATA is user data that is passed unmodified to the callback functions. */ - void (*expand_symtabs_matching) (struct objfile *objfile, - int (*file_matcher) (const char *, void *), - int (*name_matcher) (const char *, void *), - enum search_domain kind, - void *data); + void (*expand_symtabs_matching) + (struct objfile *objfile, + int (*file_matcher) (const char *, void *), + int (*name_matcher) (const char *, void *), + enum search_domain kind, + void *data); /* Return the symbol table from OBJFILE that contains PC and SECTION. Return NULL if there is no such symbol table. This @@ -296,6 +305,49 @@ struct quick_symbol_functions int need_fullname); }; +/* Structure of functions used for probe support. If one of these functions + is provided, all must be. */ + +struct sym_probe_fns +{ + /* If non-NULL, return an array of probe objects. + + The returned value does not have to be freed and it has lifetime of the + OBJFILE. */ + VEC (probe_p) *(*sym_get_probes) (struct objfile *); + + /* Return the number of arguments available to PROBE. PROBE will + have come from a call to this objfile's sym_get_probes method. + If you provide an implementation of sym_get_probes, you must + implement this method as well. */ + unsigned (*sym_get_probe_argument_count) (struct probe *probe); + + /* Evaluate the Nth argument available to PROBE. PROBE will have + come from a call to this objfile's sym_get_probes method. N will + be between 0 and the number of arguments available to this probe. + FRAME is the frame in which the evaluation is done; the frame's + PC will match the address of the probe. If you provide an + implementation of sym_get_probes, you must implement this method + as well. */ + struct value *(*sym_evaluate_probe_argument) (struct probe *probe, + unsigned n); + + /* Compile the Nth probe argument to an agent expression. PROBE + will have come from a call to this objfile's sym_get_probes + method. N will be between 0 and the number of arguments + available to this probe. EXPR and VALUE are the agent expression + that is being updated. */ + void (*sym_compile_to_ax) (struct probe *probe, + struct agent_expr *expr, + struct axs_value *value, + unsigned n); + + /* Relocate the probe section of OBJFILE. */ + void (*sym_relocate_probe) (struct objfile *objfile, + struct section_offsets *new_offsets, + struct section_offsets *delta); +}; + /* Structure to keep track of symbol reading functions for various object file types. */ @@ -366,6 +418,10 @@ struct sym_fns bfd_byte *(*sym_relocate) (struct objfile *, asection *sectp, bfd_byte *buf); + /* If non-NULL, this objfile has probe support, and all the probe + functions referred to here will be non-NULL. */ + const struct sym_probe_fns *sym_probe_fns; + /* The "quick" (aka partial) symbol functions for this symbol reader. */ const struct quick_symbol_functions *qf; @@ -398,7 +454,8 @@ extern struct symfile_segment_data *default_symfile_segments (bfd *abfd); extern bfd_byte *default_symfile_relocate (struct objfile *objfile, asection *sectp, bfd_byte *buf); -extern struct symtab *allocate_symtab (const char *, struct objfile *); +extern struct symtab *allocate_symtab (const char *, struct objfile *) + ATTRIBUTE_NONNULL (1); extern void add_symtab_fns (const struct sym_fns *); @@ -494,7 +551,7 @@ extern void find_lowest_section (bfd *, asection *, void *); extern bfd *symfile_bfd_open (char *); -extern bfd *bfd_open_maybe_remote (const char *); +extern bfd *gdb_bfd_open_maybe_remote (const char *); extern int get_section_index (struct objfile *, char *); @@ -588,6 +645,7 @@ struct dwarf2_debug_sections { struct dwarf2_section_names str; struct dwarf2_section_names ranges; struct dwarf2_section_names types; + struct dwarf2_section_names addr; struct dwarf2_section_names frame; struct dwarf2_section_names eh_frame; struct dwarf2_section_names gdb_index; @@ -633,4 +691,8 @@ extern void elfmdebug_build_psymtabs (struct objfile *, const struct ecoff_debug_swap *, asection *); +/* From minidebug.c. */ + +extern bfd *find_separate_debug_file_in_section (struct objfile *); + #endif /* !defined(SYMFILE_H) */