* [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).