From: Zack Weinberg Date: Mon, 5 Jul 2004 18:12:47 +0000 (+0000) Subject: tree-mudflap.c: Include cgraph.h. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c31b8e1b17c56b489399c674ed242c657dd8bf62;p=gcc.git tree-mudflap.c: Include cgraph.h. gcc: * tree-mudflap.c: Include cgraph.h. (mf_init_extern_trees): Rename to mudflap_init. Export. Rewrite to create synthetic declarations instead of looking up declarations from mf-runtime.h. (mf_make_builtin, mf_make_cache_struct_type): New functions. (mf_cache_shift_decl, mf_cache_mask_decl, mf_unregister_fndecl): Correct commentary. (execute_mudflap_function_decls, mudflap_register_call): Don't call mf_init_extern_trees. (mudflap_finish_file): Use cgraph_build_static_cdtor. * tree-mudflap.h: Update prototypes. * c-mudflap.c: Delete file. * c-common.c: Include tree-mudflap.h. (c_common_nodes_and_builtins): Call mudflap_init if appropriate. * Makefile.in: Remove all references to c-mudflap.o. Update dependencies. gcc/cp: * cp-mudflap.c: Delete file. * Makefile.in: Remove all references to cp-mudflap.o. libmudflap: * mf-runtime.h.in: Wrap declarations of struct __mf_cache, __mf_lookup_cache, __mf_lc_mask, or __mf_lc_shift in #ifndef _MUDFLAP. From-SVN: r84126 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07c54214abf..eefcd34a4e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,23 @@ +2004-07-05 Zack Weinberg + + * tree-mudflap.c: Include cgraph.h. + (mf_init_extern_trees): Rename to mudflap_init. Export. + Rewrite to create synthetic declarations instead of looking + up declarations from mf-runtime.h. + (mf_make_builtin, mf_make_cache_struct_type): New functions. + (mf_cache_shift_decl, mf_cache_mask_decl, mf_unregister_fndecl): + Correct commentary. + (execute_mudflap_function_decls, mudflap_register_call): + Don't call mf_init_extern_trees. + (mudflap_finish_file): Use cgraph_build_static_cdtor. + + * tree-mudflap.h: Update prototypes. + * c-mudflap.c: Delete file. + * c-common.c: Include tree-mudflap.h. + (c_common_nodes_and_builtins): Call mudflap_init if appropriate. + * Makefile.in: Remove all references to c-mudflap.o. + Update dependencies. + 2004-07-05 John David Anglin * pa.md (prefetch, prefetch_32, prefetch_64): Only allow short diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 5da0f951f4b..5a7929ed1ea 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -878,7 +878,7 @@ C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \ c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \ c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \ c-objc-common.o c-dump.o c-pch.o $(C_TARGET_OBJS) \ - c-gimplify.o tree-mudflap.o c-mudflap.o c-pretty-print.o + c-gimplify.o tree-mudflap.o c-pretty-print.o # Language-specific object files for C. C_OBJS = c-parse.o c-lang.o stub-objc.o $(C_AND_OBJC_OBJS) @@ -1414,7 +1414,7 @@ c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ $(OBSTACK_H) $(C_COMMON_H) $(FLAGS_H) toplev.h output.h c-pragma.h intl.h \ $(GGC_H) $(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def \ $(DIAGNOSTIC_H) gt-c-common.h langhooks.h varray.h $(RTL_H) \ - $(TARGET_H) $(C_TREE_H) tree-iterator.h langhooks.h + $(TARGET_H) $(C_TREE_H) tree-iterator.h langhooks.h tree-mudflap.h c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \ $(C_COMMON_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) real.h \ $(DIAGNOSTIC_H) @@ -1713,10 +1713,7 @@ tree-gimple.o : tree-gimple.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(EXPR_H) \ tree-mudflap.o : $(CONFIG_H) errors.h $(SYSTEM_H) $(TREE_H) tree-inline.h \ $(C_TREE_H) $(C_COMMON_H) $(TREE_GIMPLE_H) diagnostic.h $(HASHTAB_H) \ output.h varray.h langhooks.h tree-mudflap.h $(TM_H) coretypes.h \ - $(TREE_DUMP_H) tree-pass.h -c-mudflap.o : $(CONFIG_H) errors.h $(SYSTEM_H) $(TREE_H) tree-inline.h \ - $(C_TREE_H) $(C_COMMON_H) $(TREE_GIMPLE_H) diagnostic.h $(HASHTAB_H) \ - output.h varray.h langhooks.h tree-mudflap.h $(TM_H) coretypes.h + $(TREE_DUMP_H) tree-pass.h cgraph.h tree-nomudflap.o : $(CONFIG_H) errors.h $(SYSTEM_H) $(TREE_H) tree-inline.h \ $(C_TREE_H) $(C_COMMON_H) $(TREE_GIMPLE_H) diagnostic.h $(HASHTAB_H) \ output.h varray.h langhooks.h tree-mudflap.h $(TM_H) coretypes.h diff --git a/gcc/c-common.c b/gcc/c-common.c index fda7126c274..221e07cbb94 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -44,6 +44,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "toplev.h" #include "tree-iterator.h" #include "hashtab.h" +#include "tree-mudflap.h" cpp_reader *parse_in; /* Declared in c-pragma.h. */ @@ -3122,6 +3123,8 @@ c_common_nodes_and_builtins (void) #undef DEF_BUILTIN targetm.init_builtins (); + if (flag_mudflap) + mudflap_init (); main_identifier_node = get_identifier ("main"); } diff --git a/gcc/c-mudflap.c b/gcc/c-mudflap.c deleted file mode 100644 index af1ade9b2de..00000000000 --- a/gcc/c-mudflap.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Mudflap: narrow-pointer bounds-checking by tree rewriting: - C front-end interface. - - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. - Contributed by Frank Ch. Eigler - and Graydon Hoare - -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 -version. - -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. */ - - -#include "config.h" -#include "errors.h" -#include "system.h" -#include "coretypes.h" -#include "tm.h" -#include "tree.h" -#include "tree-inline.h" -#include "c-tree.h" -#include "c-common.h" -#include "diagnostic.h" -#include "output.h" -#include "varray.h" -#include "tree-mudflap.h" -#include "target.h" -#include "flags.h" -#include "rtl.h" -#include "toplev.h" -#include "function.h" - - - -/* ------------------------------------------------------------------------ */ - - -/* Initialize the global tree nodes that correspond to mf-runtime.h - declarations. */ -tree -mflang_lookup_decl (const char* name) -{ - tree decl = lookup_name (get_identifier (name)); - if (decl == NULL_TREE) - internal_error ("mudflap: cannot find declaration of `%s' from mf-runtime.h", - name); - - return decl; -} - - -/* Emit a synthetic CTOR function for the current file. Populate it from - the enqueued __mf_register calls. Compile the function. */ - -void -mflang_flush_calls (tree enqueued_call_stmt_chain) -{ - tree fnname, t1, t2, cs; - - /* Short-circuit! */ - if (enqueued_call_stmt_chain == NULL_TREE) - return; - - fnname = get_identifier ("__mudflap_static_initializer"); - t1 = build_tree_list (NULL_TREE, void_type_node); - t2 = tree_cons (NULL, NULL, t1); - start_function (t1, build_nt (CALL_EXPR, fnname, t2, NULL), NULL); - store_parm_decls (); - - DECL_STATIC_CONSTRUCTOR (current_function_decl) = 1; - TREE_PUBLIC (current_function_decl) = 0; - TREE_USED (current_function_decl) = 1; - mf_mark (current_function_decl); - - cs = c_begin_compound_stmt (true); - c_finish_expr_stmt (enqueued_call_stmt_chain); - add_stmt (c_end_compound_stmt (cs, true)); - - finish_function (); -} diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 77aaf45568b..7a8aebb39c3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2004-07-05 Zack Weinberg + + * cp-mudflap.c: Delete file. + * Makefile.in: Remove all references to cp-mudflap.o. + 2004-07-05 Zack Weinberg * decl.c (cxx_init_decl_processing): Call diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 34fb529fbc8..f8609877e70 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -82,7 +82,7 @@ CXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \ cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o \ cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o \ cp/mangle.o cp/cp-lang.o cp/name-lookup.o cp/cxx-pretty-print.o \ - cp/cp-gimplify.o tree-mudflap.o cp/cp-mudflap.o + cp/cp-gimplify.o tree-mudflap.o # Use strict warnings for this front end. cp-warn = $(STRICT_WARN) $(WERROR) @@ -267,8 +267,6 @@ cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) diagnostic.h gt-cp-parser.h \ output.h cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) toplev.h c-common.h \ $(TM_H) coretypes.h -cp/cp-mudflap.o: cp/cp-mudflap.c $(CXX_TREE_H) toplev.h c-common.h \ - $(TM_H) coretypes.h cp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(CXX_TREE_H) timevar.h gt-cp-name-lookup.h toplev.h \ diff --git a/gcc/cp/cp-mudflap.c b/gcc/cp/cp-mudflap.c deleted file mode 100644 index a9703a76ec2..00000000000 --- a/gcc/cp/cp-mudflap.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Mudflap: narrow-pointer bounds-checking by tree rewriting: - C++ front-end interface. - - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. - Contributed by Frank Ch. Eigler - and Graydon Hoare - -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 -version. - -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. */ - - -#include "config.h" -#include "errors.h" -#include "system.h" -#include "coretypes.h" -#include "tm.h" -#include "tree.h" -#include "tree-inline.h" -#include "cp-tree.h" -#include "c-common.h" -#include "diagnostic.h" -#include "output.h" -#include "varray.h" -#include "tree-mudflap.h" -#include "target.h" -#include "flags.h" -#include "rtl.h" -#include "toplev.h" - - -/* Initialize the global tree nodes that correspond to mf-runtime.h - declarations. */ -tree -mflang_lookup_decl (const char* name) -{ - tree decl = lookup_name (get_identifier (name), 1); - if (decl == NULL_TREE) - internal_error ("mudflap: cannot find declaration of `%s' from mf-runtime.h", - name); - - return decl; -} - - -/* Emit a synthetic CTOR function for the current file. Populate it from - the enqueued __mf_register calls. Register it with the constructors. */ - -void -mflang_flush_calls (tree enqueued_call_stmt_chain) -{ - tree fnname, fndecl, body; - tree type; - - /* Short-circuit! */ - if (enqueued_call_stmt_chain == NULL_TREE) - return; - - /* Create a ctor function declaration. */ - fnname = get_identifier ("__static_initialization_and_destruction_mudflap"); - type = build_function_type (void_type_node, void_list_node); - fndecl = build_lang_decl (FUNCTION_DECL, fnname, type); - - TREE_PUBLIC (fndecl) = 0; - TREE_USED (fndecl) = 1; - DECL_ARTIFICIAL (fndecl) = 1; - mf_mark (fndecl); - - /* Generate the body, one statement at a time. */ - start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED); - body = begin_compound_stmt (BCS_FN_BODY); - - while (enqueued_call_stmt_chain) - { - tree next = TREE_CHAIN (enqueued_call_stmt_chain); - finish_expr_stmt (enqueued_call_stmt_chain); - enqueued_call_stmt_chain = next; - } - - finish_compound_stmt (body); - fndecl = finish_function (0); - - /* NB: We cannot call expand_or_defer_fn here, since that goes through - the callgraph queue. This queue will have already been processed by the - time this function is running. */ - expand_body (fndecl); - if (targetm.have_ctors_dtors) - (* targetm.asm_out.constructor) (XEXP (DECL_RTL (fndecl), 0), - DEFAULT_INIT_PRIORITY); - else - /* By this time, it's too late to do this: - static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors); */ - abort (); -} diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c index dbb994d679a..2320bc9f2d9 100644 --- a/gcc/tree-mudflap.c +++ b/gcc/tree-mudflap.c @@ -44,6 +44,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include "langhooks.h" #include "ggc.h" +#include "cgraph.h" /* Internal function decls */ @@ -52,9 +53,6 @@ static tree mf_build_string (const char *string); static tree mf_varname_tree (tree); static tree mf_file_function_line_tree (location_t); -/* Initialization of all the mf-runtime.h extern decls. */ -static void mf_init_extern_trees (void); - /* Indirection-related instrumentation. */ static void mf_decl_cache_locals (void); static void mf_decl_clear_locals (void); @@ -247,10 +245,10 @@ static GTY (()) tree mf_cache_structptr_type; /* extern struct __mf_cache __mf_lookup_cache []; */ static GTY (()) tree mf_cache_array_decl; -/* extern const unsigned char __mf_lc_shift; */ +/* extern unsigned char __mf_lc_shift; */ static GTY (()) tree mf_cache_shift_decl; -/* extern const uintptr_t __mf_lc_mask; */ +/* extern uintptr_t __mf_lc_mask; */ static GTY (()) tree mf_cache_mask_decl; /* Their function-scope local shadows, used in single-threaded mode only. */ @@ -267,31 +265,98 @@ static GTY (()) tree mf_check_fndecl; /* extern void __mf_register (void *ptr, size_t sz, int type, const char *); */ static GTY (()) tree mf_register_fndecl; -/* extern void __mf_unregister (void *ptr, size_t sz); */ +/* extern void __mf_unregister (void *ptr, size_t sz, int type); */ static GTY (()) tree mf_unregister_fndecl; +/* Helper for mudflap_init: construct a decl with the given category, + name, and type, mark it an external reference, and pushdecl it. */ +static inline tree +mf_make_builtin (enum tree_code category, const char *name, tree type) +{ + tree decl = mf_mark (build_decl (category, get_identifier (name), type)); + TREE_PUBLIC (decl) = 1; + DECL_EXTERNAL (decl) = 1; + lang_hooks.decls.pushdecl (decl); + return decl; +} + +/* Helper for mudflap_init: construct a tree corresponding to the type + struct __mf_cache { uintptr_t low; uintptr_t high; }; + where uintptr_t is the FIELD_TYPE argument. */ +static inline tree +mf_make_mf_cache_struct_type (tree field_type) +{ + /* There is, abominably, no language-independent way to construct a + RECORD_TYPE. So we have to call the basic type construction + primitives by hand. */ + tree fieldlo = build_decl (FIELD_DECL, get_identifier ("low"), field_type); + tree fieldhi = build_decl (FIELD_DECL, get_identifier ("high"), field_type); + + tree struct_type = make_node (RECORD_TYPE); + DECL_CONTEXT (fieldlo) = struct_type; + DECL_CONTEXT (fieldhi) = struct_type; + TREE_CHAIN (fieldlo) = fieldhi; + TYPE_FIELDS (struct_type) = fieldlo; + TYPE_NAME (struct_type) = get_identifier ("__mf_cache"); + layout_type (struct_type); + + return struct_type; +} + +#define build_function_type_3(rtype, arg1, arg2, arg3) \ + build_function_type (rtype, tree_cons (0, arg1, tree_cons (0, arg2, \ + tree_cons (0, arg3, void_list_node)))) +#define build_function_type_4(rtype, arg1, arg2, arg3, arg4) \ + build_function_type (rtype, tree_cons (0, arg1, tree_cons (0, arg2, \ + tree_cons (0, arg3, tree_cons (0, arg4, \ + void_list_node))))) /* Initialize the global tree nodes that correspond to mf-runtime.h declarations. */ -static void -mf_init_extern_trees (void) +void +mudflap_init (void) { static bool done = false; + tree mf_const_string_type; + tree mf_cache_array_type; + tree mf_check_register_fntype; + tree mf_unregister_fntype; if (done) return; done = true; - mf_uintptr_type = TREE_TYPE (mflang_lookup_decl ("uintptr_t")); - mf_cache_array_decl = mf_mark (mflang_lookup_decl ("__mf_lookup_cache")); - mf_cache_struct_type = TREE_TYPE (TREE_TYPE (mf_cache_array_decl)); + mf_uintptr_type = lang_hooks.types.type_for_mode (ptr_mode, + /*unsignedp=*/true); + mf_const_string_type + = build_pointer_type (build_qualified_type + (char_type_node, TYPE_QUAL_CONST)); + + mf_cache_struct_type = mf_make_mf_cache_struct_type (mf_uintptr_type); mf_cache_structptr_type = build_pointer_type (mf_cache_struct_type); - mf_cache_shift_decl = mf_mark (mflang_lookup_decl ("__mf_lc_shift")); - mf_cache_mask_decl = mf_mark (mflang_lookup_decl ("__mf_lc_mask")); - mf_check_fndecl = mflang_lookup_decl ("__mf_check"); - mf_register_fndecl = mflang_lookup_decl ("__mf_register"); - mf_unregister_fndecl = mflang_lookup_decl ("__mf_unregister"); + mf_cache_array_type = build_array_type (mf_cache_struct_type, 0); + mf_check_register_fntype = + build_function_type_4 (void_type_node, ptr_type_node, size_type_node, + integer_type_node, mf_const_string_type); + mf_unregister_fntype = + build_function_type_3 (void_type_node, ptr_type_node, size_type_node, + integer_type_node); + + mf_cache_array_decl = mf_make_builtin (VAR_DECL, "__mf_lookup_cache", + mf_cache_array_type); + mf_cache_shift_decl = mf_make_builtin (VAR_DECL, "__mf_lc_shift", + unsigned_char_type_node); + mf_cache_mask_decl = mf_make_builtin (VAR_DECL, "__mf_lc_mask", + mf_uintptr_type); + mf_check_fndecl = mf_make_builtin (FUNCTION_DECL, "__mf_check", + mf_check_register_fntype); + mf_register_fndecl = mf_make_builtin (FUNCTION_DECL, "__mf_register", + mf_check_register_fntype); + mf_unregister_fndecl = mf_make_builtin (FUNCTION_DECL, "__mf_unregister", + mf_unregister_fntype); } +#undef build_function_type_4 +#undef build_function_type_3 /* ------------------------------------------------------------------------ */ @@ -773,7 +838,6 @@ execute_mudflap_function_decls (void) push_gimplify_context (); - mf_init_extern_trees (); mf_xform_decls (DECL_SAVED_TREE (current_function_decl), DECL_ARGUMENTS (current_function_decl)); @@ -1064,7 +1128,6 @@ mudflap_register_call (tree obj, tree object_size, tree varname) arg = convert (ptr_type_node, arg); args = tree_cons (NULL_TREE, arg, args); - mf_init_extern_trees (); call_stmt = build_function_call_expr (mf_register_fndecl, args); append_to_statement_list (call_stmt, &enqueued_call_stmt_chain); @@ -1181,7 +1244,11 @@ mudflap_finish_file (void) VARRAY_CLEAR (deferred_static_decls); } - mflang_flush_calls (enqueued_call_stmt_chain); + if (enqueued_call_stmt_chain) + { + cgraph_build_static_cdtor ('I', enqueued_call_stmt_chain); + enqueued_call_stmt_chain = 0; + } } diff --git a/gcc/tree-mudflap.h b/gcc/tree-mudflap.h index 700c7341588..554bf6263f9 100644 --- a/gcc/tree-mudflap.h +++ b/gcc/tree-mudflap.h @@ -23,6 +23,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #define TREE_MUDFLAP_H /* Instrumentation. */ +extern void mudflap_init (void); extern void mudflap_c_function_decls (tree); extern void mudflap_c_function_ops (tree); extern void mudflap_enqueue_decl (tree); @@ -33,9 +34,4 @@ extern void mudflap_finish_file (void); extern int mf_marked_p (tree); extern tree mf_mark (tree); -/* To be provided by a front-end interface module. */ -extern tree mflang_lookup_decl (const char *); -extern void mflang_flush_calls (tree); - - #endif /* TREE_MUDFLAP_H */ diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog index 20545cdf9ef..accaec2a856 100644 --- a/libmudflap/ChangeLog +++ b/libmudflap/ChangeLog @@ -1,3 +1,9 @@ +2004-07-05 Zack Weinberg + + * mf-runtime.h.in: Wrap declarations of struct __mf_cache, + __mf_lookup_cache, __mf_lc_mask, or __mf_lc_shift in + #ifndef _MUDFLAP. + 2004-06-29 Frank Ch. Eigler Splay tree implementation fork. @@ -95,7 +101,7 @@ * testsuite/libmudflap.c/pass46-frag.c: Ditto. * configure, Makefile, aclocal.m4, config.h.in, testsuite/Makefile.in: Regenerated with autoconf 2.57 and automake 1.7. - + 2004-06-04 Per Bothner * configure.in (LIBMUDFLAPTH): Fix thinko. @@ -229,8 +235,8 @@ 2003-11-19 Frank Ch. Eigler libstdc++/11696 - * mf-runtime.h.in: Switch to #pragma redefine_extname for - symbols interposed at compile time. + * mf-runtime.h.in: Switch to #pragma redefine_extname for + symbols interposed at compile time. * testsuite/libmudflap.c++/pass41-frag.cxx: New test. libmudflap/12939 @@ -254,7 +260,7 @@ 2003-07-29 Gerald Pfeifer - * configure.in: Update check for union semun. + * configure.in: Update check for union semun. 2003-07-29 Gerald Pfeifer diff --git a/libmudflap/mf-runtime.h.in b/libmudflap/mf-runtime.h.in index b035c7d2d32..afb04a59b7e 100644 --- a/libmudflap/mf-runtime.h.in +++ b/libmudflap/mf-runtime.h.in @@ -15,12 +15,18 @@ typedef unsigned long uintptr_t; #endif -/* Global declarations used by instrumentation. */ - +/* Global declarations used by instrumentation. When _MUDFLAP is + defined, these have been auto-declared by the compiler and we + should not declare them again (ideally we *would* declare them + again, to verify that the compiler's declarations match the + 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; }; extern struct __mf_cache __mf_lookup_cache []; extern uintptr_t __mf_lc_mask; extern unsigned char __mf_lc_shift; +#endif /* Multithreading support. */ #ifdef _MUDFLAPTH