]>
Commit | Line | Data |
---|---|---|
a51d908e | 1 | /* Debug hooks for GCC. |
67ad2ae7 | 2 | Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010 |
66647d44 | 3 | Free Software Foundation, Inc. |
a51d908e | 4 | |
9dcd6f09 NC |
5 | This program is free software; you can redistribute it and/or modify it |
6 | under the terms of the GNU General Public License as published by the | |
7 | Free Software Foundation; either version 3, or (at your option) any | |
8 | later version. | |
a51d908e | 9 | |
9dcd6f09 NC |
10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
a51d908e | 14 | |
9dcd6f09 NC |
15 | You should have received a copy of the GNU General Public License |
16 | along with this program; see the file COPYING3. If not see | |
17 | <http://www.gnu.org/licenses/>. */ | |
a51d908e NB |
18 | |
19 | #ifndef GCC_DEBUG_H | |
20 | #define GCC_DEBUG_H | |
21 | ||
22 | /* This structure contains hooks for the debug information output | |
23 | functions, accessed through the global instance debug_hooks set in | |
24 | toplev.c according to command line options. */ | |
25 | struct gcc_debug_hooks | |
26 | { | |
4912a07c | 27 | /* Initialize debug output. MAIN_FILENAME is the name of the main |
e2a12aca | 28 | input file. */ |
f55ade6e | 29 | void (* init) (const char *main_filename); |
a51d908e | 30 | |
e2a12aca | 31 | /* Output debug symbols. */ |
f55ade6e | 32 | void (* finish) (const char *main_filename); |
7f905405 | 33 | |
3df9609a JJ |
34 | /* Called from cgraph_optimize before starting to assemble |
35 | functions/variables/toplevel asms. */ | |
36 | void (* assembly_start) (void); | |
37 | ||
7f905405 | 38 | /* Macro defined on line LINE with name and expansion TEXT. */ |
f55ade6e | 39 | void (* define) (unsigned int line, const char *text); |
7f905405 NB |
40 | |
41 | /* MACRO undefined on line LINE. */ | |
f55ade6e | 42 | void (* undef) (unsigned int line, const char *macro); |
7f905405 NB |
43 | |
44 | /* Record the beginning of a new source file FILE from LINE number | |
45 | in the previous one. */ | |
f55ade6e | 46 | void (* start_source_file) (unsigned int line, const char *file); |
7f905405 NB |
47 | |
48 | /* Record the resumption of a source file. LINE is the line number | |
49 | in the source file we are returning to. */ | |
f55ade6e | 50 | void (* end_source_file) (unsigned int line); |
a5a42b92 NB |
51 | |
52 | /* Record the beginning of block N, counting from 1 and not | |
e2a12aca | 53 | including the function-scope block, at LINE. */ |
f55ade6e | 54 | void (* begin_block) (unsigned int line, unsigned int n); |
a5a42b92 NB |
55 | |
56 | /* Record the end of a block. Arguments as for begin_block. */ | |
f55ade6e | 57 | void (* end_block) (unsigned int line, unsigned int n); |
e2a12aca | 58 | |
e1772ac0 NB |
59 | /* Returns nonzero if it is appropriate not to emit any debugging |
60 | information for BLOCK, because it doesn't contain any | |
61 | instructions. This may not be the case for blocks containing | |
62 | nested functions, since we may actually call such a function even | |
63 | though the BLOCK information is messed up. Defaults to true. */ | |
9678086d | 64 | bool (* ignore_block) (const_tree); |
e1772ac0 | 65 | |
6c52e687 CC |
66 | /* Record a source file location at (FILE, LINE, DISCRIMINATOR). */ |
67 | void (* source_line) (unsigned int line, const char *file, | |
ed5ef2e4 | 68 | int discriminator, bool is_stmt); |
653e276c NB |
69 | |
70 | /* Called at start of prologue code. LINE is the first line in the | |
ed5ef2e4 | 71 | function. */ |
f55ade6e | 72 | void (* begin_prologue) (unsigned int line, const char *file); |
653e276c NB |
73 | |
74 | /* Called at end of prologue code. LINE is the first line in the | |
75 | function. */ | |
f55ade6e | 76 | void (* end_prologue) (unsigned int line, const char *file); |
e2a12aca | 77 | |
67ad2ae7 DR |
78 | /* Called at beginning of epilogue code. */ |
79 | void (* begin_epilogue) (unsigned int line, const char *file); | |
80 | ||
e2a12aca | 81 | /* Record end of epilogue code. */ |
f55ade6e | 82 | void (* end_epilogue) (unsigned int line, const char *file); |
e2a12aca | 83 | |
653e276c | 84 | /* Called at start of function DECL, before it is declared. */ |
f55ade6e | 85 | void (* begin_function) (tree decl); |
653e276c | 86 | |
e2a12aca | 87 | /* Record end of function. LINE is highest line number in function. */ |
f55ade6e | 88 | void (* end_function) (unsigned int line); |
2b85879e NB |
89 | |
90 | /* Debug information for a function DECL. This might include the | |
91 | function name (a symbol), its parameters, and the block that | |
92 | makes up the function's body, and the local variables of the | |
93 | function. */ | |
f55ade6e | 94 | void (* function_decl) (tree decl); |
2b85879e NB |
95 | |
96 | /* Debug information for a global DECL. Called from toplev.c after | |
97 | compilation proper has finished. */ | |
f55ade6e | 98 | void (* global_decl) (tree decl); |
2b85879e | 99 | |
21d13d83 ZW |
100 | /* Debug information for a type DECL. Called from toplev.c after |
101 | compilation proper, also from various language front ends to | |
102 | record built-in types. The second argument is properly a | |
103 | boolean, which indicates whether or not the type is a "local" | |
104 | type as determined by the language. (It's not a boolean for | |
105 | legacy reasons.) */ | |
106 | void (* type_decl) (tree decl, int local); | |
107 | ||
6097b0c3 | 108 | /* Debug information for imported modules and declarations. */ |
a64f5186 JJ |
109 | void (* imported_module_or_decl) (tree decl, tree name, |
110 | tree context, bool child); | |
6097b0c3 | 111 | |
2b85879e NB |
112 | /* DECL is an inline function, whose body is present, but which is |
113 | not being output at this point. */ | |
f55ade6e | 114 | void (* deferred_inline_function) (tree decl); |
e1772ac0 NB |
115 | |
116 | /* DECL is an inline function which is about to be emitted out of | |
117 | line. The hook is useful to, e.g., emit abstract debug info for | |
118 | the inline before it gets mangled by optimization. */ | |
f55ade6e | 119 | void (* outlining_inline_function) (tree decl); |
e1772ac0 NB |
120 | |
121 | /* Called from final_scan_insn for any CODE_LABEL insn whose | |
122 | LABEL_NAME is non-null. */ | |
f55ade6e | 123 | void (* label) (rtx); |
33b49800 | 124 | |
f55ade6e | 125 | /* Called after the start and before the end of writing a PCH file. |
33b49800 | 126 | The parameter is 0 if after the start, 1 if before the end. */ |
f55ade6e | 127 | void (* handle_pch) (unsigned int); |
014a1138 JZ |
128 | |
129 | /* Called from final_scan_insn for any NOTE_INSN_VAR_LOCATION note. */ | |
130 | void (* var_location) (rtx); | |
9e9945c5 | 131 | |
87c8b4be CT |
132 | /* Called from final_scan_insn if there is a switch between hot and cold |
133 | text sections. */ | |
134 | void (* switch_text_section) (void); | |
135 | ||
77831620 CC |
136 | /* Records a direct call to the function DECL, noting the point of call |
137 | and the debug info for the function. Called from final_scan_insn | |
138 | when ICF debugging is enabled. */ | |
139 | void (* direct_call) (tree decl); | |
140 | ||
141 | /* Records the OBJ_TYPE_REF_TOKEN for a virtual call through ADDR, which | |
142 | for C++ is the vtable slot index, noting the INSN_UID for the call | |
143 | instruction. Called from calls.c:emit_call_1 when ICF debugging is | |
144 | enabled. It's necessary to do this during lowering because the | |
145 | call instruction and the OBJ_TYPE_REF become separated after that | |
146 | point. */ | |
147 | void (* virtual_call_token) (tree addr, int insn_uid); | |
148 | ||
d0539838 CC |
149 | /* Copies the OBJ_TYPE_REF_TOKEN for a virtual call from OLD_INSN to |
150 | NEW_INSN. Called from emit-rtl.c:try_split when a CALL_INSN is | |
151 | split, so that the vtable slot index remains associated with the | |
152 | new CALL_INSN. */ | |
153 | void (* copy_call_info) (rtx old_insn, rtx new_insn); | |
154 | ||
77831620 CC |
155 | /* Records a virtual call given INSN_UID, which is the UID of the call |
156 | instruction. The UID is then mapped to the vtable slot index noted | |
157 | during the lowering phase. Called from final_scan_insn when ICF | |
158 | debugging is enabled. */ | |
159 | void (* virtual_call) (int insn_uid); | |
160 | ||
af04e659 CM |
161 | /* Called from grokdeclarator. Replaces the anonymous name with the |
162 | type name. */ | |
a417cdd9 CM |
163 | void (* set_name) (tree, tree); |
164 | ||
9e9945c5 DB |
165 | /* This is 1 if the debug writer wants to see start and end commands for the |
166 | main source files, and 0 otherwise. */ | |
167 | int start_end_main_source_file; | |
a51d908e NB |
168 | }; |
169 | ||
54b6670a | 170 | extern const struct gcc_debug_hooks *debug_hooks; |
a51d908e NB |
171 | |
172 | /* The do-nothing hooks. */ | |
f55ade6e AJ |
173 | extern void debug_nothing_void (void); |
174 | extern void debug_nothing_charstar (const char *); | |
175 | extern void debug_nothing_int_charstar (unsigned int, const char *); | |
ed5ef2e4 CC |
176 | extern void debug_nothing_int_charstar_int_bool (unsigned int, const char *, |
177 | int, bool); | |
f55ade6e AJ |
178 | extern void debug_nothing_int (unsigned int); |
179 | extern void debug_nothing_int_int (unsigned int, unsigned int); | |
180 | extern void debug_nothing_tree (tree); | |
a417cdd9 | 181 | extern void debug_nothing_tree_tree (tree, tree); |
21d13d83 | 182 | extern void debug_nothing_tree_int (tree, int); |
a64f5186 | 183 | extern void debug_nothing_tree_tree_tree_bool (tree, tree, tree, bool); |
9678086d | 184 | extern bool debug_true_const_tree (const_tree); |
f55ade6e | 185 | extern void debug_nothing_rtx (rtx); |
d0539838 | 186 | extern void debug_nothing_rtx_rtx (rtx, rtx); |
77831620 | 187 | extern void debug_nothing_uid (int); |
a51d908e | 188 | |
7f905405 | 189 | /* Hooks for various debug formats. */ |
54b6670a KG |
190 | extern const struct gcc_debug_hooks do_nothing_debug_hooks; |
191 | extern const struct gcc_debug_hooks dbx_debug_hooks; | |
192 | extern const struct gcc_debug_hooks sdb_debug_hooks; | |
193 | extern const struct gcc_debug_hooks xcoff_debug_hooks; | |
54b6670a KG |
194 | extern const struct gcc_debug_hooks dwarf2_debug_hooks; |
195 | extern const struct gcc_debug_hooks vmsdbg_debug_hooks; | |
a51d908e | 196 | |
e2a12aca NB |
197 | /* Dwarf2 frame information. */ |
198 | ||
f55ade6e | 199 | extern void dwarf2out_begin_prologue (unsigned int, const char *); |
67ad2ae7 DR |
200 | extern void dwarf2out_vms_end_prologue (unsigned int, const char *); |
201 | extern void dwarf2out_vms_begin_epilogue (unsigned int, const char *); | |
f55ade6e AJ |
202 | extern void dwarf2out_end_epilogue (unsigned int, const char *); |
203 | extern void dwarf2out_frame_init (void); | |
204 | extern void dwarf2out_frame_finish (void); | |
e1772ac0 NB |
205 | /* Decide whether we want to emit frame unwind information for the current |
206 | translation unit. */ | |
f55ade6e | 207 | extern int dwarf2out_do_frame (void); |
058514b3 | 208 | extern int dwarf2out_do_cfi_asm (void); |
a4b6974e | 209 | extern void dwarf2out_switch_text_section (void); |
7a0c8d71 | 210 | |
f55ade6e AJ |
211 | extern void debug_flush_symbol_queue (void); |
212 | extern void debug_queue_symbol (tree); | |
213 | extern void debug_free_queue (void); | |
6a08f7b3 DP |
214 | extern int debug_nesting; |
215 | extern int symbol_queue_index; | |
216 | ||
c8aea42c PB |
217 | const char *remap_debug_filename (const char *); |
218 | void add_debug_prefix_map (const char *); | |
219 | ||
a51d908e | 220 | #endif /* !GCC_DEBUG_H */ |