OSDN Git Service

* cgraph.h (cgraph_local_info): Remove for_functions_valid.
[pf3gnuchains/gcc-fork.git] / gcc / dbgcnt.c
index 8ab5fd0..6c3bd91 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
@@ -15,7 +15,7 @@ for more details.
 
 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.  */
 
@@ -23,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"
 
@@ -58,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);
 }
 
@@ -75,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;
 }
 
@@ -93,10 +101,10 @@ dbg_cnt_set_limit_by_name (const char *name, int len, int value)
 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;
 
@@ -105,7 +113,7 @@ dbg_cnt_process_single_pair (const char *arg)
    if (endptr != NULL && endptr != colon + 1
        && dbg_cnt_set_limit_by_name (arg, colon - arg, value))
      return endptr;
-   
+
    return NULL;
 }
 
@@ -122,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);
@@ -132,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");