X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmacrotab.h;h=ed863366e4cb21494297be0cacbc69a4693a45f0;hb=93692b589dc7017d5a2fbdffdfad5f84f597d8f1;hp=e929739d53b82e9229e58fb6f19b064d07cb6a79;hpb=4c38e0a4fcb69f8586d8db0b9cdb8dbab5980811;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/macrotab.h b/gdb/macrotab.h index e929739d53..ed863366e4 100644 --- a/gdb/macrotab.h +++ b/gdb/macrotab.h @@ -1,5 +1,5 @@ /* Interface to C preprocessor macro tables for GDB. - Copyright (C) 2002, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 2002-2016 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -22,6 +22,7 @@ struct obstack; struct bcache; +struct compunit_symtab; /* How do we represent a source location? I mean, how should we represent them within GDB; the user wants to use all sorts of @@ -125,7 +126,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 @@ -152,7 +155,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. CUST is a pointer to the containing + compilation unit, or NULL if there isn't one. Note that, if either OBSTACK or BCACHE are non-zero, then removing information from the table may leak memory. Neither obstacks nor @@ -164,7 +168,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, + struct compunit_symtab *cust); /* Free TABLE, and any macro definitions, source file structures, @@ -212,6 +217,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 @@ -261,6 +270,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 @@ -273,12 +293,17 @@ struct macro_definition /* 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 : 31; + 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; }; @@ -305,11 +330,14 @@ struct macro_source_file *(macro_definition_location int *definition_line)); /* Callback function when walking a macro table. NAME is the name of - the macro, and DEFINITION is the definition. USER_DATA is an - arbitrary pointer which is passed by the caller to macro_for_each - or macro_for_each_in_scope. */ + 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. @@ -324,5 +352,14 @@ 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 */