cgraph_node::add_new_function (vtv_fndecl, false);
if (flag_vtable_verify == VTV_PREINIT_PRIORITY && !TARGET_PECOFF)
- assemble_vtv_preinit_initializer (vtv_fndecl);
-
+ {
+ tree vtv_var
+ = build_decl (BUILTINS_LOCATION, VAR_DECL,
+ get_identifier ("__vtv_preinit"),
+ build_pointer_type (TREE_TYPE (vtv_fndecl)));
+ TREE_STATIC (vtv_var) = 1;
+ DECL_ARTIFICIAL (vtv_var) = 1;
+ DECL_INITIAL (vtv_var) = build_fold_addr_expr (vtv_fndecl);
+ set_decl_section_name (vtv_var, ".preinit_array");
+
+ varpool_node::add (vtv_var);
+ }
}
pop_lang_context ();
}
initial value (that will be done by the caller). */
extern void assemble_variable (tree, int, int, int);
-/* Put the vtable verification constructor initialization function
- into the preinit array. */
-extern void assemble_vtv_preinit_initializer (tree);
-
/* Assemble everything that is needed for a variable declaration that has
no definition in the current translation unit. */
extern void assemble_undefined_decl (tree);
}
}
-
-/* Given a function declaration (FN_DECL), this function assembles the
- function into the .preinit_array section. */
-
-void
-assemble_vtv_preinit_initializer (tree fn_decl)
-{
- section *sect;
- unsigned flags = SECTION_WRITE;
- rtx symbol = XEXP (DECL_RTL (fn_decl), 0);
-
- flags |= SECTION_NOTYPE;
- sect = get_section (".preinit_array", flags, fn_decl);
- switch_to_section (sect);
- assemble_addr_to_section (symbol, sect);
-}
-
/* Return 1 if type TYPE contains any pointers. */
static int