public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [tree-ssa mudflap] libmudflap patches
@ 2002-08-14  8:43 Frank Ch. Eigler
  0 siblings, 0 replies; only message in thread
From: Frank Ch. Eigler @ 2002-08-14  8:43 UTC (permalink / raw)
  To: gcc-patches

Hi -

Just committed:


 2002-08-14  Frank Ch. Eigler  <fche@redhat.com>
 
	* mf-hooks.c: Make __wrap string* functions use __real_str[n]len
	instead of plain str[n]len for internal checks.
	* mf-runtime.c (__mf_violation): Print optional stack traceback.

Index: mf-hooks.c
===================================================================
RCS file: /cvs/gcc/gcc/libmudflap/Attic/mf-hooks.c,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 mf-hooks.c
--- mf-hooks.c	14 Aug 2002 14:53:45 -0000	1.1.2.3
+++ mf-hooks.c	14 Aug 2002 15:41:47 -0000
@@ -177,7 +177,7 @@
 __wrap_strcpy (char *dest, const char *src)
 {
   extern char *__real_strcpy (char *dest, const char *src);
-  int n = strlen (src);
+  int n = __real_strlen (src);
 
   /* nb: just because strlen(src) == n doesn't mean (src + n) or (src + n +
      1) are valid pointers. the allocated object might have size < n.
@@ -192,7 +192,7 @@
 __wrap_strncpy (char *dest, const char *src, size_t n)
 {
   extern char *__real_strncpy (char *dest, const char *src, size_t n);
-  int len = strnlen (src, n);
+  int len = __real_strnlen (src, n);
   MF_VALIDATE_EXTENT(src, len);
   MF_VALIDATE_EXTENT(dest, (len + 1));
   return __real_strncpy (dest, src, n);
@@ -202,8 +202,8 @@
 __wrap_strcat (char *dest, const char *src)
 {
   extern char *__real_strcat (char *dest, const char *src);
-  int dest_sz = strlen (dest);
-  int src_sz = strlen (src);  
+  int dest_sz = __real_strlen (dest);
+  int src_sz = __real_strlen (src);  
   MF_VALIDATE_EXTENT(src, (src_sz + 1));
   MF_VALIDATE_EXTENT(dest, (dest_sz + src_sz + 1));
   return __real_strcat (dest, src);
@@ -234,8 +234,8 @@
   this same logic applies to further uses of strnlen later down in this
   file. */
 
-  int src_sz = strnlen (src, n);
-  int dest_sz = strnlen (dest, n);
+  int src_sz = __real_strnlen (src, n);
+  int dest_sz = __real_strnlen (dest, n);
   MF_VALIDATE_EXTENT(src, src_sz);
   MF_VALIDATE_EXTENT(dest, (dest_sz + src_sz + 1));
   return __real_strncat (dest, src, n);
@@ -245,8 +245,8 @@
 __wrap_strcmp (const char *s1, const char *s2)
 {
   extern int __real_strcmp (const char *s1, const char *s2);
-  int s1_sz = strlen (s1);
-  int s2_sz = strlen (s2);  
+  int s1_sz = __real_strlen (s1);
+  int s2_sz = __real_strlen (s2);  
   MF_VALIDATE_EXTENT(s1, s1_sz);
   MF_VALIDATE_EXTENT(s2, s2_sz);
   return __real_strcmp (s1, s2);
@@ -256,8 +256,8 @@
 __wrap_strcasecmp (const char *s1, const char *s2)
 {
   extern int __real_strcasecmp (const char *s1, const char *s2);
-  int s1_sz = strlen (s1);
-  int s2_sz = strlen (s2);  
+  int s1_sz = __real_strlen (s1);
+  int s2_sz = __real_strlen (s2);  
   MF_VALIDATE_EXTENT(s1, s1_sz);
   MF_VALIDATE_EXTENT(s2, s2_sz);
   return __real_strcasecmp (s1, s2);
@@ -267,8 +267,8 @@
 __wrap_strncmp (const char *s1, const char *s2, size_t n)
 {
   extern int __real_strncmp (const char *s1, const char *s2, size_t n);
-  int s1_sz = strnlen (s1, n);
-  int s2_sz = strnlen (s2, n);
+  int s1_sz = __real_strnlen (s1, n);
+  int s2_sz = __real_strnlen (s2, n);
   MF_VALIDATE_EXTENT(s1, s1_sz);
   MF_VALIDATE_EXTENT(s2, s2_sz);
   return __real_strncmp (s1, s2, n);
@@ -278,8 +278,8 @@
 __wrap_strncasecmp (const char *s1, const char *s2, size_t n)
 {
   extern int __real_strncasecmp (const char *s1, const char *s2, size_t n);
-  int s1_sz = strnlen (s1, n);
-  int s2_sz = strnlen (s2, n);
+  int s1_sz = __real_strnlen (s1, n);
+  int s2_sz = __real_strnlen (s2, n);
   MF_VALIDATE_EXTENT(s1, s1_sz);
   MF_VALIDATE_EXTENT(s2, s2_sz);
   return __real_strncasecmp (s1, s2, n);
@@ -289,7 +289,7 @@
 __wrap_strdup (const char *s)
 {
   extern char *__real_strdup (const char *s);
-  int n = strlen (s);
+  int n = __real_strlen (s);
   char *result;
   MF_VALIDATE_EXTENT(s, n);
   result = __real_strdup (s);
@@ -302,7 +302,7 @@
 {
   extern char *__real_strndup (const char *s, size_t n);
   char *result;
-  int sz = strnlen (s, n);
+  int sz = __real_strnlen (s, n);
   MF_VALIDATE_EXTENT(s, sz);
   result = __real_strndup (s, n);
   __mf_register ((uintptr_t) result, sz, __MF_TYPE_HEAP, "strndup region");
@@ -314,7 +314,7 @@
 __wrap_strchr (const char *s, int c)
 {
   extern char *__real_strchr (const char *s, int c);
-  int n = strlen (s);
+  int n = __real_strlen (s);
   MF_VALIDATE_EXTENT(s, n);
   return __real_strchr (s, c);
 }
@@ -323,7 +323,7 @@
 __wrap_strrchr (const char *s, int c)
 {
   extern char *__real_strrchr (const char *s, int c);
-  int n = strlen (s);
+  int n = __real_strlen (s);
   MF_VALIDATE_EXTENT(s, n);
   return __real_strrchr (s, c);
 }
@@ -333,8 +333,8 @@
 __wrap_strstr (const char *haystack, const char *needle)
 {
   extern char *__real_strstr (const char *haystack, const char *needle);
-  int haystack_sz = strlen (haystack);
-  int needle_sz = strlen (needle);
+  int haystack_sz = __real_strlen (haystack);
+  int needle_sz = __real_strlen (needle);
   MF_VALIDATE_EXTENT(haystack, haystack_sz);
   MF_VALIDATE_EXTENT(needle, needle_sz);
   return __real_strstr (haystack, needle);
@@ -400,7 +400,7 @@
 __wrap_index (const char *s, int c)
 {
   extern char *__real_index (const char *s, int c);
-  int n = strlen (s);
+  int n = __real_strlen (s);
   MF_VALIDATE_EXTENT(s, n);
   return __real_index (s, c);
 }
@@ -409,7 +409,7 @@
 __wrap_rindex (const char *s, int c)
 {
   extern char *__real_rindex (const char *s, int c);
-  int n = strlen (s);
+  int n = __real_strlen (s);
   MF_VALIDATE_EXTENT(s, n);
   return __real_rindex (s, c);
 }
Index: mf-runtime.c
===================================================================
RCS file: /cvs/gcc/gcc/libmudflap/Attic/mf-runtime.c,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 mf-runtime.c
--- mf-runtime.c	13 Aug 2002 19:51:22 -0000	1.1.2.2
+++ mf-runtime.c	14 Aug 2002 15:41:47 -0000
@@ -1,7 +1,7 @@
 /* {{{ Copyright */
 
 /* Mudflap: narrow-pointer bounds-checking by tree rewriting.
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002 Free Software Foundation, Inc.
    Contributed by Frank Ch. Eigler <fche@redhat.com>
    and Graydon Hoare <graydon@redhat.com>
 
@@ -36,6 +36,7 @@
 
 /* ------------------------------------------------------------------------ */
 /* {{{ Utility macros */
+
 #define UNLIKELY(e) (__builtin_expect (!!(e), 0))
 #define LIKELY(e) (__builtin_expect (!!(e), 1))
 
@@ -150,7 +151,7 @@
 
   fprintf (stderr, 
 	   "This is a GCC \"mudflap\" memory-checked binary.\n"
-	   "Mudflap is Copyright (C) 2001, 2002 Free Software Foundation, Inc.\n"
+	   "Mudflap is Copyright (C) 2002 Free Software Foundation, Inc.\n"
 	   "\n"
 	   "The mudflap code can be controlled by an environment variable:\n"
 	   "\n"
@@ -350,7 +351,6 @@
 /* ------------------------------------------------------------------------ */
 /* {{{ MODE_CHECK-related globals.  */
 
-
 typedef struct __mf_object
 {
   uintptr_t low, high;
@@ -1208,6 +1208,26 @@
 	      (type == __MF_VIOL_UNREGISTER) ? "unregister" :
 	      "unknown"));
   }
+
+  if (__mf_opts.backtrace > 0)
+    {
+      void *array [__mf_opts.backtrace];
+      size_t bt_size;
+      char ** symbols;
+      int i;
+
+      bt_size = backtrace (array, __mf_opts.backtrace);
+      /* Note: backtrace_symbols calls malloc().  But since we're in
+	 __mf_violation and presumably __mf_check, it'll detect
+	 recursion, and not put the new string into the database.  */
+      symbols = backtrace_symbols (array, bt_size);
+
+      for (i=0; i<bt_size; i++)
+	fprintf (stderr, "      %s\n", symbols[i]);
+
+      /* Calling free() here would trigger a violation.  */
+      __real_free (symbols);
+    }
 
   if (__mf_opts.verbose_violations)
   {

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-08-14 15:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-08-14  8:43 [tree-ssa mudflap] libmudflap patches Frank Ch. Eigler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).