* elf64-ppc.c (dec_dynrel_count): Don't error when elf_gc_sweep_symbol
[external/binutils.git] / sim / ppc / debug.h
1 /*  This file is part of the program psim.
2
3     Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 3 of the License, or
8     (at your option) any later version.
9
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.
14  
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, see <http://www.gnu.org/licenses/>.
17  
18     */
19
20
21 #ifndef _DEBUG_H_
22 #define _DEBUG_H_
23
24 #include "filter_filename.h"
25
26 typedef enum {
27   trace_invalid,
28   trace_tbd,
29   /**/
30   trace_gdb,
31   trace_os_emul,
32   /**/
33   trace_events,
34   trace_device_tree,
35   trace_devices,
36   trace_binary_device,
37   trace_com_device,
38   trace_console_device,
39   trace_core_device,
40   trace_disk_device,
41   trace_eeprom_device,
42   trace_file_device,
43   trace_glue_device,
44   trace_halt_device,
45   trace_htab_device,
46   trace_icu_device,
47   trace_ide_device,
48   trace_memory_device,
49   trace_opic_device,
50   trace_pal_device,
51   trace_pass_device,
52   trace_phb_device,
53   trace_sem_device,
54   trace_shm_device,
55   trace_stack_device,
56   trace_register_device,
57   trace_vm_device,
58   /**/
59   trace_disklabel_package,
60   /**/
61   trace_semantics,
62   trace_idecode,
63   trace_alu,
64   trace_load_store,
65   trace_model,
66   /**/
67   trace_vm,
68   trace_core,
69   trace_interrupts,
70   trace_psim,
71   trace_device_init,
72   trace_cpu,
73   trace_breakpoint,
74   trace_opts,
75   trace_print_info,
76   trace_print_device_tree,
77   trace_dump_device_tree,
78   nr_trace_options
79 } trace_options;
80
81
82
83 extern int ppc_trace[nr_trace_options];
84
85 /* simple */
86 #define TRACE(OBJECT, ARGS) \
87 do { \
88   if (WITH_TRACE) { \
89     if (ppc_trace[OBJECT]) { \
90       printf_filtered("%s:%d: ", filter_filename(__FILE__), __LINE__); \
91       printf_filtered ARGS; \
92     } \
93   } \
94 } while (0)
95
96 /* issue */
97 #define ITRACE(OBJECT, ARGS) \
98 do { \
99   if (WITH_TRACE) { \
100     if (ppc_trace[OBJECT]) { \
101       printf_filtered("%s:%d:0x%08lx:%s ", itable[MY_INDEX].file, itable[MY_INDEX].line_nr, (long)cia, itable[MY_INDEX].name); \
102       printf_filtered ARGS; \
103     } \
104   } \
105 } while (0)
106
107 /* device */
108 #define DTRACE(OBJECT, ARGS) \
109 do { \
110   if (WITH_TRACE) { \
111     int trace_device = device_trace(me); \
112     if (ppc_trace[trace_devices] \
113         || ppc_trace[trace_##OBJECT##_device] \
114         || trace_device) { \
115       printf_filtered("%s:%d:%s:%s%s ", \
116                       filter_filename(__FILE__), __LINE__, #OBJECT, \
117                       trace_device ? device_path(me) : "", \
118                       trace_device ? ":" : ""); \
119       printf_filtered ARGS; \
120     } \
121   } \
122 } while (0)
123
124 /* device instance */
125 #define DITRACE(OBJECT, ARGS) \
126 do { \
127   if (WITH_TRACE) { \
128     device *me = device_instance_device(instance); \
129     int trace_device = device_trace(me); \
130     if (ppc_trace[trace_devices] \
131         || ppc_trace[trace_##OBJECT##_device] \
132         || trace_device) { \
133       printf_filtered("%s:%d:%s:%s%s ", \
134                       filter_filename(__FILE__), __LINE__, #OBJECT, \
135                       trace_device ? device_path(me) : "", \
136                       trace_device ? ":" : ""); \
137       printf_filtered ARGS; \
138     } \
139   } \
140 } while (0)
141
142 /* package */
143 #define PTRACE(OBJECT, ARGS) \
144 do { \
145   if (WITH_TRACE) { \
146     if (ppc_trace[trace_##OBJECT##_package]) { \
147       printf_filtered("%s:%d:%s: ", filter_filename(__FILE__), __LINE__, #OBJECT); \
148       printf_filtered ARGS; \
149     } \
150   } \
151 } while (0)
152
153
154 #define ASSERT(EXPRESSION) \
155 do { \
156   if (WITH_ASSERT) { \
157     if (!(EXPRESSION)) { \
158       error("%s:%d: assertion failed - %s\n", \
159             filter_filename(__FILE__), __LINE__, #EXPRESSION); \
160     } \
161   } \
162 } while (0)
163
164 /* Parse OPTION updating the trace array */
165 extern void
166 trace_option(const char *option, int setting);
167
168 /* Output the list of trace options */
169 extern void trace_usage
170 (int verbose);
171
172
173 #endif /* _DEBUG_H_ */