From 1330529e587cb17366dc5ae6fc510f32b19ad123 Mon Sep 17 00:00:00 2001 From: Greg McGary Date: Sun, 2 Jan 2005 22:24:50 +0000 Subject: [PATCH] mf-impl.h (uintptr_t): Get typedef via stdint.h or define explicitly. * mf-impl.h (uintptr_t): Get typedef via stdint.h or define explicitly. * mf-runtime.h: New file, replaces mf-runtime.h.in. * configure.ac (AC_CONFIG_FILES): mf-runtime.h is no longer generated. * Makefile.in: Ditto. * testsuite/lib/libmudflap.exp: Add -I${srcdir}/.. to get mf-runtime.h * testsuite/libmudflap.c/pass32-frag.c: s/uintptr_t/__mf_uintptr_t/ * testsuite/libmudflap.c/fail36-frag.c: New test. * testsuite/libmudflap.c/fail37-frag.c: New test. * testsuite/libmudflap.c/fail38-frag.c: New test. From-SVN: r92815 --- libmudflap/ChangeLog | 12 ++++++++ libmudflap/Makefile.in | 5 +--- libmudflap/configure | 3 +- libmudflap/configure.ac | 2 +- libmudflap/mf-impl.h | 7 ++++- libmudflap/{mf-runtime.h.in => mf-runtime.h} | 28 +++++++----------- libmudflap/testsuite/lib/libmudflap.exp | 2 +- .../testsuite/libmudflap.c/fail36-frag.c | 23 +++++++++++++++ .../testsuite/libmudflap.c/fail37-frag.c | 22 ++++++++++++++ .../testsuite/libmudflap.c/fail38-frag.c | 29 +++++++++++++++++++ .../testsuite/libmudflap.c/pass32-frag.c | 2 +- 11 files changed, 107 insertions(+), 28 deletions(-) rename libmudflap/{mf-runtime.h.in => mf-runtime.h} (91%) create mode 100644 libmudflap/testsuite/libmudflap.c/fail36-frag.c create mode 100644 libmudflap/testsuite/libmudflap.c/fail37-frag.c create mode 100644 libmudflap/testsuite/libmudflap.c/fail38-frag.c diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog index d2fc9ee45aa..ace95ce6062 100644 --- a/libmudflap/ChangeLog +++ b/libmudflap/ChangeLog @@ -1,3 +1,15 @@ +2004-01-02 Greg McGary + + * mf-impl.h (uintptr_t): Get typedef via stdint.h or define explicitly. + * mf-runtime.h: New file, replaces mf-runtime.h.in. + * configure.ac (AC_CONFIG_FILES): mf-runtime.h is no longer generated. + * Makefile.in: Ditto. + * testsuite/lib/libmudflap.exp: Add -I${srcdir}/.. to get mf-runtime.h + * testsuite/libmudflap.c/pass32-frag.c: s/uintptr_t/__mf_uintptr_t/ + * testsuite/libmudflap.c/fail36-frag.c: New test. + * testsuite/libmudflap.c/fail37-frag.c: New test. + * testsuite/libmudflap.c/fail38-frag.c: New test. + 2004-12-08 Kelley Cook * Makefile.am: Add ../config to ACLOCAL_AMFLAGS. diff --git a/libmudflap/Makefile.in b/libmudflap/Makefile.in index 84506f83f8b..b251f2a8ccc 100644 --- a/libmudflap/Makefile.in +++ b/libmudflap/Makefile.in @@ -46,7 +46,7 @@ DIST_COMMON = $(am__configure_deps) $(include_HEADERS) \ $(srcdir)/../ltmain.sh $(srcdir)/../missing \ $(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(srcdir)/mf-runtime.h.in $(top_srcdir)/configure ChangeLog + $(top_srcdir)/configure ChangeLog subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/gcc-version.m4 \ @@ -57,7 +57,6 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = mf-runtime.h am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -347,8 +346,6 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) distclean-hdr: -rm -f config.h stamp-h1 -mf-runtime.h: $(top_builddir)/config.status $(srcdir)/mf-runtime.h.in - cd $(top_builddir) && $(SHELL) ./config.status $@ install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(toolexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(toolexeclibdir)" diff --git a/libmudflap/configure b/libmudflap/configure index d96a46ad944..6bcb2534ef4 100755 --- a/libmudflap/configure +++ b/libmudflap/configure @@ -6854,7 +6854,7 @@ else multilib_arg= fi - ac_config_files="$ac_config_files Makefile testsuite/Makefile testsuite/mfconfig.exp mf-runtime.h" + ac_config_files="$ac_config_files Makefile testsuite/Makefile testsuite/mfconfig.exp" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -7433,7 +7433,6 @@ do "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "testsuite/Makefile" ) CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; "testsuite/mfconfig.exp" ) CONFIG_FILES="$CONFIG_FILES testsuite/mfconfig.exp" ;; - "mf-runtime.h" ) CONFIG_FILES="$CONFIG_FILES mf-runtime.h" ;; "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; diff --git a/libmudflap/configure.ac b/libmudflap/configure.ac index 794fa9bd621..6a771f6bc93 100644 --- a/libmudflap/configure.ac +++ b/libmudflap/configure.ac @@ -231,5 +231,5 @@ else multilib_arg= fi -AC_CONFIG_FILES([Makefile testsuite/Makefile testsuite/mfconfig.exp mf-runtime.h]) +AC_CONFIG_FILES([Makefile testsuite/Makefile testsuite/mfconfig.exp]) AC_OUTPUT diff --git a/libmudflap/mf-impl.h b/libmudflap/mf-impl.h index 55706c13dba..ee582ea7bce 100644 --- a/libmudflap/mf-impl.h +++ b/libmudflap/mf-impl.h @@ -1,6 +1,6 @@ /* Implementation header for mudflap runtime library. Mudflap: narrow-pointer bounds-checking by tree rewriting. - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. Contributed by Frank Ch. Eigler and Graydon Hoare @@ -43,6 +43,11 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #error "Cannot build libmudflapth without pthread.h." #endif +#if HAVE_STDINT_H +#include +#else +typedef __mf_uintptr_t uintptr_t; +#endif /* Private definitions related to mf-runtime.h */ diff --git a/libmudflap/mf-runtime.h.in b/libmudflap/mf-runtime.h similarity index 91% rename from libmudflap/mf-runtime.h.in rename to libmudflap/mf-runtime.h index 0f8f9e3e2b1..b008883c43f 100644 --- a/libmudflap/mf-runtime.h.in +++ b/libmudflap/mf-runtime.h @@ -3,17 +3,9 @@ #ifndef MF_RUNTIME_H #define MF_RUNTIME_H -#if @MF_HAVE_STDINT_H@ /* autoconf HAVE_STDINT_H */ -#include -#endif -#include -#if ! @MF_HAVE_UINTPTR_T@ -typedef unsigned long uintptr_t; -#define HAVE_UINTPTR_T 1 -/* Define this here, in case an autoconf application was run - without CFLAGS=-fmudflap but is being compiled with -fmudflap. */ -#endif - +typedef void *__mf_ptr_t; +typedef unsigned int __mf_uintptr_t __attribute__ ((__mode__ (__pointer__))); +typedef __SIZE_TYPE__ __mf_size_t; /* Global declarations used by instrumentation. When _MUDFLAP is defined, these have been auto-declared by the compiler and we @@ -22,9 +14,9 @@ typedef unsigned long uintptr_t; library's, but the C++ front end has no mechanism for allowing the re-definition of a structure type). */ #ifndef _MUDFLAP -struct __mf_cache { uintptr_t low; uintptr_t high; }; +struct __mf_cache { __mf_uintptr_t low; __mf_uintptr_t high; }; extern struct __mf_cache __mf_lookup_cache []; -extern uintptr_t __mf_lc_mask; +extern __mf_uintptr_t __mf_lc_mask; extern unsigned char __mf_lc_shift; #endif @@ -57,14 +49,14 @@ extern unsigned char __mf_lc_shift; extern "C" { #endif -extern void __mf_check (void *ptr, size_t sz, int type, const char *location) +extern void __mf_check (void *ptr, __mf_size_t sz, int type, const char *location) __attribute((nothrow)); -extern void __mf_register (void *ptr, size_t sz, int type, const char *name) +extern void __mf_register (void *ptr, __mf_size_t sz, int type, const char *name) __attribute((nothrow)); -extern void __mf_unregister (void *ptr, size_t sz, int type) +extern void __mf_unregister (void *ptr, __mf_size_t sz, int type) __attribute((nothrow)); -extern unsigned __mf_watch (void *ptr, size_t sz); -extern unsigned __mf_unwatch (void *ptr, size_t sz); +extern unsigned __mf_watch (void *ptr, __mf_size_t sz); +extern unsigned __mf_unwatch (void *ptr, __mf_size_t sz); extern void __mf_report (); extern int __mf_set_options (const char *opts); diff --git a/libmudflap/testsuite/lib/libmudflap.exp b/libmudflap/testsuite/lib/libmudflap.exp index 8c604e1bc86..4b80716ebbf 100644 --- a/libmudflap/testsuite/lib/libmudflap.exp +++ b/libmudflap/testsuite/lib/libmudflap.exp @@ -83,7 +83,7 @@ proc libmudflap-init { language } { set libs "-L${blddir}/.libs" set cxxflags "-ggdb3 -DDEBUG_ASSERT" - set includes "-I${srcdir} -I.." + set includes "-I${srcdir} -I${srcdir}/.. -I.." if {$language == "c++"} { if {[file exists $cxxflags_file]} then { diff --git a/libmudflap/testsuite/libmudflap.c/fail36-frag.c b/libmudflap/testsuite/libmudflap.c/fail36-frag.c new file mode 100644 index 00000000000..af6851c1d23 --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/fail36-frag.c @@ -0,0 +1,23 @@ +#include + +struct k +{ + int p; + struct { + int m : 31; + } q; +}; + +int +main () +{ + volatile struct k *l = malloc (sizeof (int)); /* make it only big enough for k.p */ + /* Confirm that we instrument this nested construct + BIT_FIELD_REF(COMPONENT_REF(INDIRECT_REF)). */ + l->q.m = 5; + return 0; +} +/* { dg-output "mudflap violation 1.*" } */ +/* { dg-output "Nearby object.*" } */ +/* { dg-output "mudflap object.*" } */ +/* { dg-do run { xfail *-*-* } } */ diff --git a/libmudflap/testsuite/libmudflap.c/fail37-frag.c b/libmudflap/testsuite/libmudflap.c/fail37-frag.c new file mode 100644 index 00000000000..41ce4b91e05 --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/fail37-frag.c @@ -0,0 +1,22 @@ +typedef struct +{ + short f : 3; +} small; + +struct +{ + int i; + small s[4]; +} x; + +main () +{ + int i; + for (i = 0; i < 5; i++) + x.s[i].f = 0; + exit (0); +} +/* { dg-output "mudflap violation 1.*" } */ +/* { dg-output "Nearby object.*" } */ +/* { dg-output "mudflap object.* x.*" } */ +/* { dg-do run { xfail *-*-* } } */ diff --git a/libmudflap/testsuite/libmudflap.c/fail38-frag.c b/libmudflap/testsuite/libmudflap.c/fail38-frag.c new file mode 100644 index 00000000000..9667e213418 --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/fail38-frag.c @@ -0,0 +1,29 @@ +#include +#include +#include +int main () +{ +struct a { + int x; + int y; + int z : 10; +}; + +struct b { + int x; + int y; +}; + +volatile struct b k; +volatile struct a *p; + +p = (struct a*) &k; + +p->z = 'q'; + +return 0; +} +/* { dg-output "mudflap violation 1.*" } */ +/* { dg-output "Nearby object 1.*" } */ +/* { dg-output "mudflap object.*.main. k.*" } */ +/* { dg-do run { xfail *-*-* } } */ diff --git a/libmudflap/testsuite/libmudflap.c/pass32-frag.c b/libmudflap/testsuite/libmudflap.c/pass32-frag.c index 83f121d4fa2..38468642328 100644 --- a/libmudflap/testsuite/libmudflap.c/pass32-frag.c +++ b/libmudflap/testsuite/libmudflap.c/pass32-frag.c @@ -13,6 +13,6 @@ int main () { struct foo k; char *n = get_z (& k); -srand ((int)(uintptr_t) n); /* use the pointer value */ +srand ((int)(__mf_uintptr_)t n); /* use the pointer value */ return 0; }