]>
Commit | Line | Data |
---|---|---|
1 | /* Debug hooks for GCC. | |
2 | Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. | |
3 | ||
4 | This program is free software; you can redistribute it and/or modify it | |
5 | under the terms of the GNU General Public License as published by the | |
6 | Free Software Foundation; either version 2, or (at your option) any | |
7 | later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU General Public License | |
15 | along with this program; if not, write to the Free Software | |
16 | Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |
17 | ||
18 | #ifndef GCC_DEBUG_H | |
19 | #define GCC_DEBUG_H | |
20 | ||
21 | /* This structure contains hooks for the debug information output | |
22 | functions, accessed through the global instance debug_hooks set in | |
23 | toplev.c according to command line options. */ | |
24 | struct gcc_debug_hooks | |
25 | { | |
26 | /* Initialize debug output. MAIN_FILENAME is the name of the main | |
27 | input file. */ | |
28 | void (* init) (const char *main_filename); | |
29 | ||
30 | /* Output debug symbols. */ | |
31 | void (* finish) (const char *main_filename); | |
32 | ||
33 | /* Macro defined on line LINE with name and expansion TEXT. */ | |
34 | void (* define) (unsigned int line, const char *text); | |
35 | ||
36 | /* MACRO undefined on line LINE. */ | |
37 | void (* undef) (unsigned int line, const char *macro); | |
38 | ||
39 | /* Record the beginning of a new source file FILE from LINE number | |
40 | in the previous one. */ | |
41 | void (* start_source_file) (unsigned int line, const char *file); | |
42 | ||
43 | /* Record the resumption of a source file. LINE is the line number | |
44 | in the source file we are returning to. */ | |
45 | void (* end_source_file) (unsigned int line); | |
46 | ||
47 | /* Record the beginning of block N, counting from 1 and not | |
48 | including the function-scope block, at LINE. */ | |
49 | void (* begin_block) (unsigned int line, unsigned int n); | |
50 | ||
51 | /* Record the end of a block. Arguments as for begin_block. */ | |
52 | void (* end_block) (unsigned int line, unsigned int n); | |
53 | ||
54 | /* Returns nonzero if it is appropriate not to emit any debugging | |
55 | information for BLOCK, because it doesn't contain any | |
56 | instructions. This may not be the case for blocks containing | |
57 | nested functions, since we may actually call such a function even | |
58 | though the BLOCK information is messed up. Defaults to true. */ | |
59 | bool (* ignore_block) (tree); | |
60 | ||
61 | /* Record a source file location at (FILE, LINE). */ | |
62 | void (* source_line) (unsigned int line, const char *file); | |
63 | ||
64 | /* Called at start of prologue code. LINE is the first line in the | |
65 | function. This has been given the same prototype as source_line, | |
66 | so that the source_line hook can be substituted if appropriate. */ | |
67 | void (* begin_prologue) (unsigned int line, const char *file); | |
68 | ||
69 | /* Called at end of prologue code. LINE is the first line in the | |
70 | function. */ | |
71 | void (* end_prologue) (unsigned int line, const char *file); | |
72 | ||
73 | /* Record end of epilogue code. */ | |
74 | void (* end_epilogue) (unsigned int line, const char *file); | |
75 | ||
76 | /* Called at start of function DECL, before it is declared. */ | |
77 | void (* begin_function) (tree decl); | |
78 | ||
79 | /* Record end of function. LINE is highest line number in function. */ | |
80 | void (* end_function) (unsigned int line); | |
81 | ||
82 | /* Debug information for a function DECL. This might include the | |
83 | function name (a symbol), its parameters, and the block that | |
84 | makes up the function's body, and the local variables of the | |
85 | function. */ | |
86 | void (* function_decl) (tree decl); | |
87 | ||
88 | /* Debug information for a global DECL. Called from toplev.c after | |
89 | compilation proper has finished. */ | |
90 | void (* global_decl) (tree decl); | |
91 | ||
92 | /* Debug information for a type DECL. Called from toplev.c after | |
93 | compilation proper, also from various language front ends to | |
94 | record built-in types. The second argument is properly a | |
95 | boolean, which indicates whether or not the type is a "local" | |
96 | type as determined by the language. (It's not a boolean for | |
97 | legacy reasons.) */ | |
98 | void (* type_decl) (tree decl, int local); | |
99 | ||
100 | /* Debug information for imported modules and declarations. */ | |
101 | void (* imported_module_or_decl) (tree decl, tree context); | |
102 | ||
103 | /* DECL is an inline function, whose body is present, but which is | |
104 | not being output at this point. */ | |
105 | void (* deferred_inline_function) (tree decl); | |
106 | ||
107 | /* DECL is an inline function which is about to be emitted out of | |
108 | line. The hook is useful to, e.g., emit abstract debug info for | |
109 | the inline before it gets mangled by optimization. */ | |
110 | void (* outlining_inline_function) (tree decl); | |
111 | ||
112 | /* Called from final_scan_insn for any CODE_LABEL insn whose | |
113 | LABEL_NAME is non-null. */ | |
114 | void (* label) (rtx); | |
115 | ||
116 | /* Called after the start and before the end of writing a PCH file. | |
117 | The parameter is 0 if after the start, 1 if before the end. */ | |
118 | void (* handle_pch) (unsigned int); | |
119 | ||
120 | /* Called from final_scan_insn for any NOTE_INSN_VAR_LOCATION note. */ | |
121 | void (* var_location) (rtx); | |
122 | }; | |
123 | ||
124 | extern const struct gcc_debug_hooks *debug_hooks; | |
125 | ||
126 | /* The do-nothing hooks. */ | |
127 | extern void debug_nothing_void (void); | |
128 | extern void debug_nothing_charstar (const char *); | |
129 | extern void debug_nothing_int_charstar (unsigned int, const char *); | |
130 | extern void debug_nothing_int (unsigned int); | |
131 | extern void debug_nothing_int_int (unsigned int, unsigned int); | |
132 | extern void debug_nothing_tree (tree); | |
133 | extern void debug_nothing_tree_int (tree, int); | |
134 | extern void debug_nothing_tree_tree (tree, tree); | |
135 | extern bool debug_true_tree (tree); | |
136 | extern void debug_nothing_rtx (rtx); | |
137 | ||
138 | /* Hooks for various debug formats. */ | |
139 | extern const struct gcc_debug_hooks do_nothing_debug_hooks; | |
140 | extern const struct gcc_debug_hooks dbx_debug_hooks; | |
141 | extern const struct gcc_debug_hooks sdb_debug_hooks; | |
142 | extern const struct gcc_debug_hooks xcoff_debug_hooks; | |
143 | extern const struct gcc_debug_hooks dwarf2_debug_hooks; | |
144 | extern const struct gcc_debug_hooks vmsdbg_debug_hooks; | |
145 | ||
146 | /* Dwarf2 frame information. */ | |
147 | ||
148 | extern void dwarf2out_begin_prologue (unsigned int, const char *); | |
149 | extern void dwarf2out_end_epilogue (unsigned int, const char *); | |
150 | extern void dwarf2out_frame_init (void); | |
151 | extern void dwarf2out_frame_finish (void); | |
152 | /* Decide whether we want to emit frame unwind information for the current | |
153 | translation unit. */ | |
154 | extern int dwarf2out_do_frame (void); | |
155 | ||
156 | extern void debug_flush_symbol_queue (void); | |
157 | extern void debug_queue_symbol (tree); | |
158 | extern void debug_free_queue (void); | |
159 | extern int debug_nesting; | |
160 | extern int symbol_queue_index; | |
161 | ||
162 | #endif /* !GCC_DEBUG_H */ |