Update copyright to LGPL on all files
[dyninst.git] / symtabAPI / src / debug.C
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32 // $Id: Object-xcoff.C,v 1.32 2008/09/20 03:56:10 jaw Exp $
33
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <stdarg.h>
37
38 #include "debug.h"
39
40 int sym_debug_create = 0;
41 int sym_debug_parsing = 0;
42 int sym_debug_aggregate = 0;
43 int sym_debug_object = 0;
44 int sym_debug_types = 0;
45 int sym_debug_translate = 0;
46
47 bool init_debug_symtabAPI() {
48     static bool initialized = false;
49     if (initialized) return true;
50     initialized = true;
51
52     if (getenv("SYMTAB_DEBUG_PARSING")) {
53         sym_debug_parsing = 1;
54     }
55     if (getenv("SYMTAB_DEBUG_AGG") ||
56         getenv("SYMTAB_DEBUG_AGGREGATE") ||
57         getenv("SYMTAB_DEBUG_AGGREGATES")) {
58         sym_debug_aggregate = 1;
59     }
60     if (getenv("SYMTAB_DEBUG_CREATE")) {
61         sym_debug_create = 1;
62     }
63     if (getenv("SYMTAB_DEBUG_OBJECT")) {
64         sym_debug_object = 1;
65     }
66     if (getenv("SYMTAB_DEBUG_TYPES")) {
67         sym_debug_types = 1;
68     }
69
70     return true;
71 }
72
73 int parsing_printf(const char *format, ...)
74 {
75   if (!sym_debug_parsing) return 0;
76   if (NULL == format) return -1;
77
78   va_list va;
79   va_start(va, format);
80   int ret = vfprintf(stderr, format, va);
81   va_end(va);
82
83   return ret;
84 }
85
86 int create_printf(const char *format, ...)
87 {
88   if (!sym_debug_create) return 0;
89   if (NULL == format) return -1;
90
91   va_list va;
92   va_start(va, format);
93   int ret = vfprintf(stderr, format, va);
94   va_end(va);
95
96   return ret;
97 }
98
99 int aggregate_printf(const char *format, ...)
100 {
101   if (!sym_debug_parsing) return 0;
102   if (NULL == format) return -1;
103
104   va_list va;
105   va_start(va, format);
106   int ret = vfprintf(stderr, format, va);
107   va_end(va);
108
109   return ret;
110 }
111
112 int object_printf(const char *format, ...)
113 {
114   if (!sym_debug_object) return 0;
115   if (NULL == format) return -1;
116
117   va_list va;
118   va_start(va, format);
119   int ret = vfprintf(stderr, format, va);
120   va_end(va);
121
122   return ret;
123 }
124
125 int types_printf(const char *format, ...)
126 {
127   if (!sym_debug_types) return 0;
128   if (NULL == format) return -1;
129
130   va_list va;
131   va_start(va, format);
132   int ret = vfprintf(stderr, format, va);
133   va_end(va);
134
135   return ret;
136 }
137
138 int translate_printf(const char *format, ...)
139 {
140   if (!sym_debug_translate) return 0;
141   if (NULL == format) return -1;
142
143   va_list va;
144   va_start(va, format);
145   int ret = vfprintf(stderr, format, va);
146   va_end(va);
147
148   return ret;
149 }
150
151 int dwarf_printf(const char *format, ...)
152 {
153   static int dyn_debug_dwarf = 0;
154
155   if (dyn_debug_dwarf == -1) {
156     return 0;
157   }
158   if (!dyn_debug_dwarf) {
159     char *p = getenv("DYNINST_DEBUG_DWARF");
160     if (!p)
161       p = getenv("SYMTAB_DEBUG_DWARF");
162     if (p) {
163       fprintf(stderr, "Enabling SymtabAPI dwarf parsing\n");
164       dyn_debug_dwarf = 1;
165     }
166     else {
167       dyn_debug_dwarf = -1;
168       return 0;
169     }
170   }
171
172   if (!format)
173     return -1;
174
175   va_list va;
176   va_start(va, format);
177   int ret = vfprintf(stderr, format, va);
178   va_end(va);
179
180   return ret;
181 }
182