/* Debug counter for debugging support
- Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of GCC.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>.
+<http://www.gnu.org/licenses/>.
See dbgcnt.def for usage information. */
#include "system.h"
#include "coretypes.h"
#include "errors.h"
+#include "tm.h"
+#include "rtl.h"
+#include "output.h"
#include "dbgcnt.h"
dbg_cnt (enum debug_counter index)
{
count[index]++;
+ if (dump_file && count[index] == limit[index])
+ fprintf (dump_file, "***dbgcnt: limit reached for %s.***\n",
+ map[index].name);
+
return dbg_cnt_is_enabled (index);
}
{
int i;
for (i = debug_counter_number_of_counters - 1; i >= 0; i--)
- if (!strncmp (map[i].name, name, len))
+ if (strncmp (map[i].name, name, len) == 0
+ && map[i].name[len] == '\0')
break;
if (i < 0)
return false;
- dbg_cnt_set_limit_by_index (i, value);
+ dbg_cnt_set_limit_by_index ((enum debug_counter) i, value);
return true;
}
static const char *
dbg_cnt_process_single_pair (const char *arg)
{
- char *colon = strchr (arg, ':');
+ const char *colon = strchr (arg, ':');
char *endptr = NULL;
int value;
-
+
if (colon == NULL)
return NULL;
if (endptr != NULL && endptr != colon + 1
&& dbg_cnt_set_limit_by_name (arg, colon - arg, value))
return endptr;
-
+
return NULL;
}
if (next == NULL || *next != 0)
{
- char *buffer = alloca (arg - start + 2);
+ char *buffer = XALLOCAVEC (char, arg - start + 2);
sprintf (buffer, "%*c", (int)(1 + (arg - start)), '^');
error ("Can not find a valid counter:value pair:");
error ("-fdbg-cnt=%s", start);
/* Print name, limit and count of all counters. */
-void dbg_cnt_list_all_counters (void)
+void
+dbg_cnt_list_all_counters (void)
{
int i;
printf (" %-30s %-5s %-5s\n", "counter name", "limit", "value");