annotate gcc/dbgcnt.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* Debug counter for debugging support
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2006-2020 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify it under
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 the terms of the GNU General Public License as published by the Free
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 Software Foundation; either version 3, or (at your option) any later
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
18 <http://www.gnu.org/licenses/>.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 See dbgcnt.def for usage information. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "config.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 #include "system.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 #include "coretypes.h"
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
25 #include "diagnostic-core.h"
111
kono
parents: 67
diff changeset
26 #include "dumpfile.h"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
27 #include "selftest.h"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
28 #include "intl.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 #include "dbgcnt.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 struct string2counter_map {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 const char *name;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 enum debug_counter counter;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 };
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 #define DEBUG_COUNTER(a) { #a , a },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 static struct string2counter_map map[debug_counter_number_of_counters] =
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 #include "dbgcnt.def"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 };
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 #undef DEBUG_COUNTER
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
45 typedef std::pair<unsigned int, unsigned int> limit_tuple;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
47 static vec<limit_tuple> limits[debug_counter_number_of_counters];
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
48
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 static unsigned int count[debug_counter_number_of_counters];
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
51 static void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
52 print_limit_reach (const char *counter, int limit, bool upper_p)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
54 char buffer[128];
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
55 sprintf (buffer, "***dbgcnt: %s limit %d reached for %s.***\n",
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
56 upper_p ? "upper" : "lower", limit, counter);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
57 fputs (buffer, stderr);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
58 if (dump_file)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
59 fputs (buffer, dump_file);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 dbg_cnt (enum debug_counter index)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
65 unsigned v = ++count[index];
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
66
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
67 if (!limits[index].exists ())
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
68 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
69 else if (limits[index].is_empty ())
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
70 return false;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
71
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
72 unsigned last = limits[index].length () - 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
73 unsigned int min = limits[index][last].first;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
74 unsigned int max = limits[index][last].second;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
75
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
76 if (v < min)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
77 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
78 else if (v == min)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
79 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
80 print_limit_reach (map[index].name, v, false);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
81 if (min == max)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
82 limits[index].pop ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
83 return true;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
85 else if (v < max)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
86 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
87 else if (v == max)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
88 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
89 print_limit_reach (map[index].name, v, true);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
90 limits[index].pop ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
91 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
92 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
93 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
94 return false;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
97 /* Compare limit_tuple intervals by first item in descending order. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
98
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
99 static int
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
100 cmp_tuples (const void *ptr1, const void *ptr2)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
102 const limit_tuple *p1 = (const limit_tuple *)ptr1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
103 const limit_tuple *p2 = (const limit_tuple *)ptr2;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
105 if (p1->first < p2->first)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
106 return 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
107 else if (p1->first > p2->first)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
108 return -1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
109 return 0;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 static bool
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
113 dbg_cnt_set_limit_by_index (enum debug_counter index, const char *name,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
114 unsigned int low, unsigned int high)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
115 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
116 if (!limits[index].exists ())
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
117 limits[index].create (1);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
118
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
119 limits[index].safe_push (limit_tuple (low, high));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
120 limits[index].qsort (cmp_tuples);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
121
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
122 for (unsigned i = 0; i < limits[index].length () - 1; i++)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
123 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
124 limit_tuple t1 = limits[index][i];
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
125 limit_tuple t2 = limits[index][i + 1];
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
126 if (t1.first <= t2.second)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
127 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
128 error ("Interval overlap of %<-fdbg-cnt=%s%>: [%u, %u] and "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
129 "[%u, %u]\n", name, t2.first, t2.second, t1.first, t1.second);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
130 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
131 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
132 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
133
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
134 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
135 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
136
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
137 static bool
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
138 dbg_cnt_set_limit_by_name (const char *name, unsigned int low,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
139 unsigned int high)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
141 if (high < low)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
142 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
143 error ("%<-fdbg-cnt=%s:%d-%d%> has smaller upper limit than the lower",
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
144 name, low, high);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
145 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
146 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
147
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 for (i = debug_counter_number_of_counters - 1; i >= 0; i--)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
150 if (strcmp (map[i].name, name) == 0)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 if (i < 0)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
154 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
155 error ("cannot find a valid counter name %qs of %<-fdbg-cnt=%> option",
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
156 name);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
157 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
158 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
160 return dbg_cnt_set_limit_by_index ((enum debug_counter) i, name, low, high);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
163 /* Process a single "low:high" pair.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 Returns NULL if there's no valid pair is found.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 Otherwise returns a pointer to the end of the pair. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
167 static bool
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
168 dbg_cnt_process_single_pair (char *name, char *str)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
170 char *value1 = strtok (str, "-");
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
171 char *value2 = strtok (NULL, "-");
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
172
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
173 unsigned int high, low;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
174
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
175 if (value1 == NULL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
176 return false;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
178 if (value2 == NULL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
179 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
180 high = strtol (value1, NULL, 10);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
181 /* Let's allow 0:0. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
182 low = high == 0 ? 0 : 1;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
183 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
184 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
185 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
186 low = strtol (value1, NULL, 10);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
187 high = strtol (value2, NULL, 10);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
188 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
190 return dbg_cnt_set_limit_by_name (name, low, high);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 dbg_cnt_process_opt (const char *arg)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
196 char *str = xstrdup (arg);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
197 unsigned int start = 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
198
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
199 auto_vec<char *> tokens;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
200 for (char *next = strtok (str, ","); next != NULL; next = strtok (NULL, ","))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
201 tokens.safe_push (next);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
203 unsigned i;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
204 for (i = 0; i < tokens.length (); i++)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
205 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
206 auto_vec<char *> ranges;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
207 char *name = strtok (tokens[i], ":");
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
208 for (char *part = strtok (NULL, ":"); part; part = strtok (NULL, ":"))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
209 ranges.safe_push (part);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
210
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
211 for (unsigned j = 0; j < ranges.length (); j++)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
212 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
213 if (!dbg_cnt_process_single_pair (name, ranges[j]))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
214 break;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
215 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
216 start += strlen (tokens[i]) + 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
217 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 /* Print name, limit and count of all counters. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
222 void
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 dbg_cnt_list_all_counters (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 int i;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
226 printf (" %-30s %s\n", G_("counter name"), G_("closed intervals"));
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
227 printf ("-----------------------------------------------------------------\n");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 for (i = 0; i < debug_counter_number_of_counters; i++)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
229 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
230 printf (" %-30s ", map[i].name);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
231 if (limits[i].exists ())
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
232 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
233 for (int j = limits[i].length () - 1; j >= 0; j--)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
234 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
235 printf ("[%u, %u]", limits[i][j].first, limits[i][j].second);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
236 if (j > 0)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237 printf (", ");
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
238 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
239 putchar ('\n');
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
240 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
241 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
242 printf ("unset\n");
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
243 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 printf ("\n");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
246
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
247 #if CHECKING_P
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
248
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
249 namespace selftest {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
250
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
251 /* Selftests. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
252
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
253 static void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
254 test_sorted_dbg_counters ()
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
255 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
256 for (unsigned i = 0; i < debug_counter_number_of_counters - 1; i++)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
257 ASSERT_LT (strcmp (map[i].name, map[i + 1].name), 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
258 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
259
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
260 void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
261 dbgcnt_c_tests ()
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
262 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
263 test_sorted_dbg_counters ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
264 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
265
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
266 } // namespace selftest
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
267
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
268 #endif /* #if CHECKING_P */