OSDN Git Service

Mark ChangeLog
[pf3gnuchains/gcc-fork.git] / libmudflap / mf-heuristics.c
index 5231a08..020a7c2 100644 (file)
@@ -1,34 +1,28 @@
 /* Mudflap: narrow-pointer bounds-checking by tree rewriting.
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
    Contributed by Frank Ch. Eigler <fche@redhat.com>
    and Graydon Hoare <graydon@redhat.com>
 
 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.
 
-In addition to the permissions in the GNU General Public License, the
-Free Software Foundation gives you unlimited permission to link the
-compiled version of this file into combinations with other programs,
-and to distribute those combinations without any restriction coming
-from the use of this file.  (The General Public License restrictions
-do apply in other respects; for example, they cover modification of
-the file, and distribution when not linked into a combine
-executable.)
-
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or
 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, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
 
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
 
@@ -42,14 +36,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #endif
 
 
-extern char _end;
-extern char _start;
+extern char _end[];
+extern char ENTRY_POINT[];
 
 
-/* Run some quick validation of the given region.  
+/* Run some quick validation of the given region.
    Return -1 / 0 / 1 if the access known-invalid, possibly-valid, or known-valid.
 */
-int 
+int
 __mf_heuristic_check (uintptr_t ptr, uintptr_t ptr_high)
 {
   VERBOSE_TRACE ("mf: heuristic check\n");
@@ -72,7 +66,7 @@ __mf_heuristic_check (uintptr_t ptr, uintptr_t ptr_high)
       uintptr_t stack_segment_base = 0;
 #endif
 
-      VERBOSE_TRACE ("mf: stack estimated as %p-%p\n", 
+      VERBOSE_TRACE ("mf: stack estimated as %p-%p\n",
                     (void *) stack_top_guess, (void *) stack_segment_base);
 
       if (ptr_high <= stack_segment_base &&
@@ -80,7 +74,7 @@ __mf_heuristic_check (uintptr_t ptr, uintptr_t ptr_high)
          ptr_high >= ptr)
        {
          return 1;
-       }            
+       }
     }
 #endif
 
@@ -118,13 +112,13 @@ __mf_heuristic_check (uintptr_t ptr, uintptr_t ptr_high)
       if (! deja_vu)
        {
          /* Time to run the heuristic.  Rescan /proc/self/maps; update the
-            entry[] array; XXX: remove expired entries, add new ones.  
+            entry[] array; XXX: remove expired entries, add new ones.
             XXX: Consider entries that have grown (e.g., stack).  */
          char buf[512];
          char flags[4];
          void *low, *high;
          FILE *fp;
-         
+
          fp = fopen ("/proc/self/maps", "r");
          if (fp)
            {
@@ -145,17 +139,17 @@ __mf_heuristic_check (uintptr_t ptr, uintptr_t ptr_high)
                                  break;
                                }
                            }
-                         
+
                          VERBOSE_TRACE ("mf: registering region #%d "
                                         "%p-%p given %s",
                                         i, (void *) low, (void *) high, buf);
-                         
+
                          __mfu_register ((void *) low, (size_t) (high-low),
-                                         __MF_TYPE_GUESS, 
+                                         __MF_TYPE_GUESS,
                                          "/proc/self/maps segment");
-                         
+
                          return 0; /* undecided (tending to cachable) */
-                       } 
+                       }
                    }
                }
              fclose (fp);
@@ -164,10 +158,11 @@ __mf_heuristic_check (uintptr_t ptr, uintptr_t ptr_high)
     }
 
 
-  /* The third heuristic is to approve all accesses between _start and _end,
-     which should include all text and initialized data.  */
+  /* The third heuristic is to approve all accesses between _start (or its
+     equivalent for the given target) and _end, which should include all
+     text and initialized data.  */
   if (__mf_opts.heur_start_end)
-    if (ptr >= (uintptr_t) & _start && ptr_high <= (uintptr_t) & _end)
+    if (ptr >= (uintptr_t) & ENTRY_POINT && ptr_high <= (uintptr_t) & _end)
       return 1; /* uncacheable */
 
   return 0; /* unknown */