Constify some commands in cli-cmds.c
[deliverable/binutils-gdb.git] / gdb / minsyms.h
index f201a738f4d8a3591a25a45c2effdc6caaf4c01d..dc517254e9e8eb406b0fc57ffe8c8e740c5c4f1f 100644 (file)
@@ -1,6 +1,6 @@
 /* Minimal symbol table definitions for GDB.
 
-   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+   Copyright (C) 2011-2017 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,6 +20,8 @@
 #ifndef MINSYMS_H
 #define MINSYMS_H
 
+struct type;
+
 /* Several lookup functions return both a minimal symbol and the
    objfile in which it is found.  This structure is used in these
    cases.  */
@@ -53,81 +55,100 @@ struct bound_minimal_symbol
    as opaque and use functions provided by minsyms.c to inspect them.
 */
 
-/* Prepare to start collecting minimal symbols.  This should be called
-   by a symbol reader to initialize the minimal symbol module.
-   Currently, minimal symbol table creation is not reentrant; it
-   relies on global (static) variables in minsyms.c.  */
+struct msym_bunch;
+
+/* An RAII-based object that is used to record minimal symbols while
+   they are being read.  */
+class minimal_symbol_reader
+{
+ public:
 
-void init_minimal_symbol_collection (void);
+  /* Prepare to start collecting minimal symbols.  This should be
+     called by a symbol reader to initialize the minimal symbol
+     module.  */
 
-/* Return a cleanup which is used to clean up the global state left
-   over by minimal symbol creation.  After calling
-   init_minimal_symbol_collection, a symbol reader should call this
-   function.  Then, after all minimal symbols have been read,
-   regardless of whether they are installed or not, the cleanup
-   returned by this function should be run.  */
+  explicit minimal_symbol_reader (struct objfile *);
 
-struct cleanup *make_cleanup_discard_minimal_symbols (void);
+  ~minimal_symbol_reader ();
 
-/* Record a new minimal symbol.  This is the "full" entry point;
-   simpler convenience entry points are also provided below.
-   
-   This returns a new minimal symbol.  It is ok to modify the returned
-   minimal symbol (though generally not necessary).  It is not ok,
-   though, to stash the pointer anywhere; as minimal symbols may be
-   moved after creation.  The memory for the returned minimal symbol
-   is still owned by the minsyms.c code, and should not be freed.
+  /* Install the minimal symbols that have been collected into the
+     given objfile.  */
+
+  void install ();
+
+  /* Record a new minimal symbol.  This is the "full" entry point;
+     simpler convenience entry points are also provided below.
    
-   Arguments are:
-
-   NAME - the symbol's name
-   NAME_LEN - the length of the name
-   COPY_NAME - if true, the minsym code must make a copy of NAME.  If
-   false, then NAME must be NUL-terminated, and must have a lifetime
-   that is at least as long as OBJFILE's lifetime.
-   ADDRESS - the address of the symbol
-   MS_TYPE - the type of the symbol
-   SECTION - the symbol's section
-   appropriate obj_section for the minimal symbol.  This can be NULL.
-   OBJFILE - the objfile associated with the minimal symbol.  */
-
-struct minimal_symbol *prim_record_minimal_symbol_full
-    (const char *name,
-     int name_len,
-     int copy_name,
-     CORE_ADDR address,
-     enum minimal_symbol_type ms_type,
-     int section,
-     struct objfile *objfile);
-
-/* Like prim_record_minimal_symbol_full, but:
-   - uses strlen to compute NAME_LEN,
-   - passes COPY_NAME = 0,
-   - and passes a default SECTION, depending on the type
+     This returns a new minimal symbol.  It is ok to modify the returned
+     minimal symbol (though generally not necessary).  It is not ok,
+     though, to stash the pointer anywhere; as minimal symbols may be
+     moved after creation.  The memory for the returned minimal symbol
+     is still owned by the minsyms.c code, and should not be freed.
    
-   This variant does not return the new symbol.  */
+     Arguments are:
 
-void prim_record_minimal_symbol (const char *, CORE_ADDR,
-                                enum minimal_symbol_type,
-                                struct objfile *);
+     NAME - the symbol's name
+     NAME_LEN - the length of the name
+     COPY_NAME - if true, the minsym code must make a copy of NAME.  If
+     false, then NAME must be NUL-terminated, and must have a lifetime
+     that is at least as long as OBJFILE's lifetime.
+     ADDRESS - the address of the symbol
+     MS_TYPE - the type of the symbol
+     SECTION - the symbol's section
+  */
 
-/* Like prim_record_minimal_symbol_full, but:
-   - uses strlen to compute NAME_LEN,
-   - passes COPY_NAME = 0.  */
+  struct minimal_symbol *record_full (const char *name,
+                                     int name_len,
+                                     bool copy_name,
+                                     CORE_ADDR address,
+                                     enum minimal_symbol_type ms_type,
+                                     int section);
 
-struct minimal_symbol *prim_record_minimal_symbol_and_info
-    (const char *,
-     CORE_ADDR,
-     enum minimal_symbol_type,
-     int section,
-     struct objfile *);
+  /* Like record_full, but:
+     - uses strlen to compute NAME_LEN,
+     - passes COPY_NAME = true,
+     - and passes a default SECTION, depending on the type
+
+     This variant does not return the new symbol.  */
+
+  void record (const char *name, CORE_ADDR address,
+              enum minimal_symbol_type ms_type);
+
+  /* Like record_full, but:
+     - uses strlen to compute NAME_LEN,
+     - passes COPY_NAME = true.  */
+
+  struct minimal_symbol *record_with_info (const char *name,
+                                          CORE_ADDR address,
+                                          enum minimal_symbol_type ms_type,
+                                          int section)
+  {
+    return record_full (name, strlen (name), true, address, ms_type, section);
+  }
+
+ private:
 
-/* Install the minimal symbols that have been collected into the given
-   objfile.  After this is called, the cleanup returned by
-   make_cleanup_discard_minimal_symbols should be run in order to
-   clean up global state.  */
+  /* No need for these.  They are intentionally not defined anywhere.  */
+  minimal_symbol_reader &operator=
+    (const minimal_symbol_reader &);
+  minimal_symbol_reader (const minimal_symbol_reader &);
 
-void install_minimal_symbols (struct objfile *);
+  struct objfile *m_objfile;
+
+  /* Bunch currently being filled up.
+     The next field points to chain of filled bunches.  */
+
+  struct msym_bunch *m_msym_bunch;
+
+  /* Number of slots filled in current bunch.  */
+
+  int m_msym_bunch_index;
+
+  /* Total number of minimal symbols recorded so far for the
+     objfile.  */
+
+  int m_msym_count;
+};
 
 /* Create the terminating entry of OBJFILE's minimal symbol table.
    If OBJFILE->msymbols is zero, allocate a single entry from
@@ -136,13 +157,11 @@ void install_minimal_symbols (struct objfile *);
 
 void terminate_minimal_symbol_table (struct objfile *objfile);
 
-/* Sort all the minimal symbols in OBJFILE.  This should be only be
-   called after relocating symbols; it ensures that the minimal
-   symbols are properly sorted by address.  */
+\f
 
-void msymbols_sort (struct objfile *objfile);
+/* Return whether MSYMBOL is a function/method.  */
 
-\f
+bool msymbol_is_text (minimal_symbol *msymbol);
 
 /* Compute a hash code for the string argument.  */
 
@@ -164,17 +183,17 @@ unsigned int msymbol_hash_iw (const char *);
 
 /* Look through all the current minimal symbol tables and find the
    first minimal symbol that matches NAME.  If OBJF is non-NULL, limit
-   the search to that objfile.  If SFILE is non-NULL, the only file-scope
-   symbols considered will be from that source file (global symbols are
-   still preferred).  Returns a pointer to the minimal symbol that
-   matches, or NULL if no match is found.  */
+   the search to that objfile.  If SFILE is non-NULL, the only
+   file-scope symbols considered will be from that source file (global
+   symbols are still preferred).  Returns a bound minimal symbol that
+   matches, or an empty bound minimal symbol if no match is found.  */
 
-struct minimal_symbol *lookup_minimal_symbol (const char *,
-                                             const char *,
-                                             struct objfile *);
+struct bound_minimal_symbol lookup_minimal_symbol (const char *,
+                                                  const char *,
+                                                  struct objfile *);
 
-/* Like lookup_minimal_symbol, but searches all files and objfiles
-   and returns a bound minimal symbol.  */
+/* Like lookup_minimal_symbol, but searches all files and
+   objfiles.  */
 
 struct bound_minimal_symbol lookup_bound_minimal_symbol (const char *);
 
@@ -185,13 +204,14 @@ struct bound_minimal_symbol lookup_minimal_symbol_and_objfile (const char *);
 
 /* Look through all the current minimal symbol tables and find the
    first minimal symbol that matches NAME and has text type.  If OBJF
-   is non-NULL, limit the search to that objfile.  Returns a pointer
-   to the minimal symbol that matches, or NULL if no match is found.
+   is non-NULL, limit the search to that objfile.  Returns a bound
+   minimal symbol that matches, or an "empty" bound minimal symbol
+   otherwise.
 
    This function only searches the mangled (linkage) names.  */
 
-struct minimal_symbol *lookup_minimal_symbol_text (const char *,
-                                                  struct objfile *);
+struct bound_minimal_symbol lookup_minimal_symbol_text (const char *,
+                                                       struct objfile *);
 
 /* Look through all the current minimal symbol tables and find the
    first minimal symbol that matches NAME and is a solib trampoline.
@@ -201,7 +221,7 @@ struct minimal_symbol *lookup_minimal_symbol_text (const char *,
 
    This function only searches the mangled (linkage) names.  */
 
-struct minimal_symbol *lookup_minimal_symbol_solib_trampoline
+struct bound_minimal_symbol lookup_minimal_symbol_solib_trampoline
     (const char *,
      struct objfile *);
 
@@ -257,4 +277,11 @@ void iterate_over_minimal_symbols (struct objfile *objf,
 
 CORE_ADDR minimal_symbol_upper_bound (struct bound_minimal_symbol minsym);
 
+/* Return the type of MSYMBOL, a minimal symbol of OBJFILE.  If
+   ADDRESS_P is not NULL, set it to the MSYMBOL's resolved
+   address.  */
+
+type *find_minsym_type_and_address (minimal_symbol *msymbol, objfile *objf,
+                                   CORE_ADDR *address_p);
+
 #endif /* MINSYMS_H */
This page took 0.027229 seconds and 4 git commands to generate.