]>
Commit | Line | Data |
---|---|---|
a51d908e | 1 | /* Debug hooks for GCC. |
283334f0 | 2 | Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. |
a51d908e NB |
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 | { | |
4912a07c | 26 | /* Initialize debug output. MAIN_FILENAME is the name of the main |
e2a12aca | 27 | input file. */ |
f55ade6e | 28 | void (* init) (const char *main_filename); |
a51d908e | 29 | |
e2a12aca | 30 | /* Output debug symbols. */ |
f55ade6e | 31 | void (* finish) (const char *main_filename); |
7f905405 NB |
32 | |
33 | /* Macro defined on line LINE with name and expansion TEXT. */ | |
f55ade6e | 34 | void (* define) (unsigned int line, const char *text); |
7f905405 NB |
35 | |
36 | /* MACRO undefined on line LINE. */ | |
f55ade6e | 37 | void (* undef) (unsigned int line, const char *macro); |
7f905405 NB |
38 | |
39 | /* Record the beginning of a new source file FILE from LINE number | |
40 | in the previous one. */ | |
f55ade6e | 41 | void (* start_source_file) (unsigned int line, const char *file); |
7f905405 NB |
42 | |
43 | /* Record the resumption of a source file. LINE is the line number | |
44 | in the source file we are returning to. */ | |
f55ade6e | 45 | void (* end_source_file) (unsigned int line); |
a5a42b92 NB |
46 | |
47 | /* Record the beginning of block N, counting from 1 and not | |
e2a12aca | 48 | including the function-scope block, at LINE. */ |
f55ade6e | 49 | void (* begin_block) (unsigned int line, unsigned int n); |
a5a42b92 NB |
50 | |
51 | /* Record the end of a block. Arguments as for begin_block. */ | |
f55ade6e | 52 | void (* end_block) (unsigned int line, unsigned int n); |
e2a12aca | 53 | |
e1772ac0 NB |
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. */ | |
f55ade6e | 59 | bool (* ignore_block) (tree); |
e1772ac0 | 60 | |
653e276c | 61 | /* Record a source file location at (FILE, LINE). */ |
f55ade6e | 62 | void (* source_line) (unsigned int line, const char *file); |
653e276c NB |
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. */ | |
f55ade6e | 67 | void (* begin_prologue) (unsigned int line, const char *file); |
653e276c NB |
68 | |
69 | /* Called at end of prologue code. LINE is the first line in the | |
70 | function. */ | |
f55ade6e | 71 | void (* end_prologue) (unsigned int line, const char *file); |
e2a12aca NB |
72 | |
73 | /* Record end of epilogue code. */ | |
f55ade6e | 74 | void (* end_epilogue) (unsigned int line, const char *file); |
e2a12aca | 75 | |
653e276c | 76 | /* Called at start of function DECL, before it is declared. */ |
f55ade6e | 77 | void (* begin_function) (tree decl); |
653e276c | 78 | |
e2a12aca | 79 | /* Record end of function. LINE is highest line number in function. */ |
f55ade6e | 80 | void (* end_function) (unsigned int line); |
2b85879e NB |
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. */ | |
f55ade6e | 86 | void (* function_decl) (tree decl); |
2b85879e NB |
87 | |
88 | /* Debug information for a global DECL. Called from toplev.c after | |
89 | compilation proper has finished. */ | |
f55ade6e | 90 | void (* global_decl) (tree decl); |
2b85879e | 91 | |
21d13d83 ZW |
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 | ||
6097b0c3 DP |
100 | /* Debug information for imported modules and declarations. */ |
101 | void (* imported_module_or_decl) (tree decl, tree context); | |
102 | ||
2b85879e NB |
103 | /* DECL is an inline function, whose body is present, but which is |
104 | not being output at this point. */ | |
f55ade6e | 105 | void (* deferred_inline_function) (tree decl); |
e1772ac0 NB |
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. */ | |
f55ade6e | 110 | void (* outlining_inline_function) (tree decl); |
e1772ac0 NB |
111 | |
112 | /* Called from final_scan_insn for any CODE_LABEL insn whose | |
113 | LABEL_NAME is non-null. */ | |
f55ade6e | 114 | void (* label) (rtx); |
33b49800 | 115 | |
f55ade6e | 116 | /* Called after the start and before the end of writing a PCH file. |
33b49800 | 117 | The parameter is 0 if after the start, 1 if before the end. */ |
f55ade6e | 118 | void (* handle_pch) (unsigned int); |
014a1138 JZ |
119 | |
120 | /* Called from final_scan_insn for any NOTE_INSN_VAR_LOCATION note. */ | |
121 | void (* var_location) (rtx); | |
a51d908e NB |
122 | }; |
123 | ||
54b6670a | 124 | extern const struct gcc_debug_hooks *debug_hooks; |
a51d908e NB |
125 | |
126 | /* The do-nothing hooks. */ | |
f55ade6e AJ |
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); | |
21d13d83 | 133 | extern void debug_nothing_tree_int (tree, int); |
6097b0c3 | 134 | extern void debug_nothing_tree_tree (tree, tree); |
f55ade6e AJ |
135 | extern bool debug_true_tree (tree); |
136 | extern void debug_nothing_rtx (rtx); | |
a51d908e | 137 | |
7f905405 | 138 | /* Hooks for various debug formats. */ |
54b6670a KG |
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; | |
54b6670a KG |
143 | extern const struct gcc_debug_hooks dwarf2_debug_hooks; |
144 | extern const struct gcc_debug_hooks vmsdbg_debug_hooks; | |
a51d908e | 145 | |
e2a12aca NB |
146 | /* Dwarf2 frame information. */ |
147 | ||
f55ade6e AJ |
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); | |
e1772ac0 NB |
152 | /* Decide whether we want to emit frame unwind information for the current |
153 | translation unit. */ | |
f55ade6e | 154 | extern int dwarf2out_do_frame (void); |
7a0c8d71 | 155 | |
f55ade6e AJ |
156 | extern void debug_flush_symbol_queue (void); |
157 | extern void debug_queue_symbol (tree); | |
158 | extern void debug_free_queue (void); | |
6a08f7b3 DP |
159 | extern int debug_nesting; |
160 | extern int symbol_queue_index; | |
161 | ||
a51d908e | 162 | #endif /* !GCC_DEBUG_H */ |