]> gcc.gnu.org Git - gcc.git/blame - gcc/debug.h
In gcc/testsuite/: 2010-10-20 Nicola Pero <nicola.pero@meta-innovation.com>
[gcc.git] / gcc / debug.h
CommitLineData
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. */
25struct 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 170extern const struct gcc_debug_hooks *debug_hooks;
a51d908e
NB
171
172/* The do-nothing hooks. */
f55ade6e
AJ
173extern void debug_nothing_void (void);
174extern void debug_nothing_charstar (const char *);
175extern void debug_nothing_int_charstar (unsigned int, const char *);
ed5ef2e4
CC
176extern void debug_nothing_int_charstar_int_bool (unsigned int, const char *,
177 int, bool);
f55ade6e
AJ
178extern void debug_nothing_int (unsigned int);
179extern void debug_nothing_int_int (unsigned int, unsigned int);
180extern void debug_nothing_tree (tree);
a417cdd9 181extern void debug_nothing_tree_tree (tree, tree);
21d13d83 182extern void debug_nothing_tree_int (tree, int);
a64f5186 183extern void debug_nothing_tree_tree_tree_bool (tree, tree, tree, bool);
9678086d 184extern bool debug_true_const_tree (const_tree);
f55ade6e 185extern void debug_nothing_rtx (rtx);
d0539838 186extern void debug_nothing_rtx_rtx (rtx, rtx);
77831620 187extern void debug_nothing_uid (int);
a51d908e 188
7f905405 189/* Hooks for various debug formats. */
54b6670a
KG
190extern const struct gcc_debug_hooks do_nothing_debug_hooks;
191extern const struct gcc_debug_hooks dbx_debug_hooks;
192extern const struct gcc_debug_hooks sdb_debug_hooks;
193extern const struct gcc_debug_hooks xcoff_debug_hooks;
54b6670a
KG
194extern const struct gcc_debug_hooks dwarf2_debug_hooks;
195extern const struct gcc_debug_hooks vmsdbg_debug_hooks;
a51d908e 196
e2a12aca
NB
197/* Dwarf2 frame information. */
198
f55ade6e 199extern void dwarf2out_begin_prologue (unsigned int, const char *);
67ad2ae7
DR
200extern void dwarf2out_vms_end_prologue (unsigned int, const char *);
201extern void dwarf2out_vms_begin_epilogue (unsigned int, const char *);
f55ade6e
AJ
202extern void dwarf2out_end_epilogue (unsigned int, const char *);
203extern void dwarf2out_frame_init (void);
204extern void dwarf2out_frame_finish (void);
e1772ac0
NB
205/* Decide whether we want to emit frame unwind information for the current
206 translation unit. */
f55ade6e 207extern int dwarf2out_do_frame (void);
058514b3 208extern int dwarf2out_do_cfi_asm (void);
a4b6974e 209extern void dwarf2out_switch_text_section (void);
7a0c8d71 210
f55ade6e
AJ
211extern void debug_flush_symbol_queue (void);
212extern void debug_queue_symbol (tree);
213extern void debug_free_queue (void);
6a08f7b3
DP
214extern int debug_nesting;
215extern int symbol_queue_index;
216
c8aea42c
PB
217const char *remap_debug_filename (const char *);
218void add_debug_prefix_map (const char *);
219
a51d908e 220#endif /* !GCC_DEBUG_H */
This page took 2.028795 seconds and 5 git commands to generate.