PR symtab/17559
[deliverable/binutils-gdb.git] / gdb / macrotab.h
index eb546bccf7faa885be28bab7efc983a0d35abc17..aca7fd49b6c190b4d09a260c73b412a4ea8d05cf 100644 (file)
@@ -1,5 +1,5 @@
 /* Interface to C preprocessor macro tables for GDB.
-   Copyright (C) 2002, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2014 Free Software Foundation, Inc.
    Contributed by Red Hat, Inc.
 
    This file is part of GDB.
@@ -72,6 +72,8 @@ struct bcache;
 /* A table of all the macro definitions for a given compilation unit.  */
 struct macro_table;
 
+/* The definition of a single macro.  */
+struct macro_definition;
 
 /* A source file that participated in a compilation unit --- either a
    main file, or an #included file.  If a file is #included more than
@@ -123,7 +125,9 @@ struct macro_source_file
      a part of.  */
   struct macro_table *table;
 
-  /* A source file --- possibly a header file.  */
+  /* A source file --- possibly a header file.  This filename is relative to
+     the compilation directory (table->comp_dir), it exactly matches the
+     symtab->filename content.  */
   const char *filename;
 
   /* The location we were #included from, or zero if we are the
@@ -150,7 +154,8 @@ struct macro_source_file
    xmalloc if OBSTACK is zero.  Use BCACHE to store all macro names,
    arguments, definitions, and anything else that might be the same
    amongst compilation units in an executable file; if BCACHE is zero,
-   don't cache these things.
+   don't cache these things.  COMP_DIR optionally contains the compilation
+   directory of all files for this macro table.
 
    Note that, if either OBSTACK or BCACHE are non-zero, then removing
    information from the table may leak memory.  Neither obstacks nor
@@ -162,7 +167,8 @@ struct macro_source_file
    the same source location (although 'gcc -DFOO -UFOO -DFOO=2' does
    do that in GCC 4.1.2.).  */
 struct macro_table *new_macro_table (struct obstack *obstack,
-                                     struct bcache *bcache);
+                                     struct bcache *bcache,
+                                    const char *comp_dir);
 
 
 /* Free TABLE, and any macro definitions, source file structures,
@@ -189,6 +195,11 @@ struct macro_source_file *macro_set_main (struct macro_table *table,
 /* Return the main source file of the macro table TABLE.  */
 struct macro_source_file *macro_main (struct macro_table *table);
 
+/* Mark the macro table TABLE so that macros defined in this table can
+   be redefined without error.  Note that it invalid to call this if
+   TABLE is allocated on an obstack.  */
+void macro_allow_redefinitions (struct macro_table *table);
+
 
 /* Record a #inclusion.
    Record in SOURCE's macro table that, at line number LINE in SOURCE,
@@ -205,6 +216,10 @@ struct macro_source_file *macro_include (struct macro_source_file *source,
                                          int line,
                                          const char *included);
 
+/* Define any special macros, like __FILE__ or __LINE__.  This should
+   be called once, on the main source file.  */
+
+void macro_define_special (struct macro_table *table);
 
 /* Find any source file structure for a file named NAME, either
    included into SOURCE, or SOURCE itself.  Return zero if we have
@@ -247,7 +262,6 @@ void macro_define_function (struct macro_source_file *source, int line,
 void macro_undef (struct macro_source_file *source, int line,
                   const char *name);
 
-
 /* Different kinds of macro definitions.  */
 enum macro_kind
 {
@@ -255,6 +269,17 @@ enum macro_kind
   macro_function_like
 };
 
+/* Different kinds of special macros.  */
+
+enum macro_special_kind
+{
+  /* Ordinary.  */
+  macro_ordinary,
+  /* The special macro __FILE__.  */
+  macro_FILE,
+  /* The special macro __LINE__.  */
+  macro_LINE
+};
 
 /* A preprocessor symbol definition.  */
 struct macro_definition
@@ -263,16 +288,21 @@ struct macro_definition
   struct macro_table *table;
 
   /* What kind of macro it is.  */
-  enum macro_kind kind;
+  ENUM_BITFIELD (macro_kind) kind : 1;
 
   /* If `kind' is `macro_function_like', the number of arguments it
      takes, and their names.  The names, and the array of pointers to
-     them, are in the table's bcache, if it has one.  */
-  int argc;
+     them, are in the table's bcache, if it has one.  If `kind' is
+     `macro_object_like', then this is actually a `macro_special_kind'
+     describing the macro.  */
+  int argc : 30;
   const char * const *argv;
 
-  /* The replacement string (body) of the macro.  This is in the
-     table's bcache, if it has one.  */
+  /* The replacement string (body) of the macro.  For ordinary macros,
+     this is in the table's bcache, if it has one.  For special macros
+     like __FILE__, this value is only valid until the next use of any
+     special macro definition; that is, it is reset each time any
+     special macro is looked up or iterated over.  */
   const char *replacement;
 };
 
@@ -298,5 +328,37 @@ struct macro_source_file *(macro_definition_location
                             const char *name,
                             int *definition_line));
 
+/* Callback function when walking a macro table.  NAME is the name of
+   the macro, and DEFINITION is the definition.  SOURCE is the file at the
+   start of the include path, and LINE is the line number of the SOURCE file
+   where the macro was defined.  USER_DATA is an arbitrary pointer which is
+   passed by the caller to macro_for_each or macro_for_each_in_scope.  */
+typedef void (*macro_callback_fn) (const char *name,
+                                  const struct macro_definition *definition,
+                                  struct macro_source_file *source,
+                                  int line,
+                                  void *user_data);
+
+/* Call the function FN for each macro in the macro table TABLE.
+   USER_DATA is passed, untranslated, to FN.  */
+void macro_for_each (struct macro_table *table, macro_callback_fn fn,
+                    void *user_data);
+
+/* Call the function FN for each macro that is visible in a given
+   scope.  The scope is represented by FILE and LINE.  USER_DATA is
+   passed, untranslated, to FN.  */
+void macro_for_each_in_scope (struct macro_source_file *file, int line,
+                             macro_callback_fn fn,
+                             void *user_data);
+
+/* Return FILE->filename with possibly prepended compilation directory name.
+   This is raw concatenation without the "set substitute-path" and gdb_realpath
+   applications done by symtab_to_fullname.  Returned string must be freed by
+   xfree.
+
+   THis function ignores the "set filename-display" setting.  Its default
+   setting is "relative" which is backward compatible but the former behavior
+   of macro filenames printing was "absolute".  */
+extern char *macro_source_fullname (struct macro_source_file *file);
 
 #endif /* MACROTAB_H */
This page took 0.027122 seconds and 4 git commands to generate.