OSDN Git Service

dbgcnt name matching bug fix
[pf3gnuchains/gcc-fork.git] / gcc / dbgcnt.c
index 660428e..0c496b3 100644 (file)
@@ -1,11 +1,11 @@
 /* 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.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -14,9 +14,8 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  
 
 See dbgcnt.def for usage information.  */
 
@@ -24,6 +23,9 @@ 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"
 
@@ -59,6 +61,10 @@ bool
 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);
 }
 
@@ -76,13 +82,14 @@ dbg_cnt_set_limit_by_name (const char *name, int len, int value)
 {
   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;
 }
 
@@ -123,7 +130,7 @@ dbg_cnt_process_opt (const char *arg)
 
    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);
@@ -133,7 +140,8 @@ dbg_cnt_process_opt (const char *arg)
 
 /* 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");