#endif
        unsigned int markersindex;
        unsigned int markersstringsindex;
 +      unsigned int verboseindex;
+       unsigned int tracepointsindex;
+       unsigned int tracepointsstringsindex;
+       unsigned int mcountindex;
        struct module *mod;
        long err = 0;
        void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
        markersindex = find_sec(hdr, sechdrs, secstrings, "__markers");
        markersstringsindex = find_sec(hdr, sechdrs, secstrings,
                                        "__markers_strings");
 +      verboseindex = find_sec(hdr, sechdrs, secstrings, "__verbose");
+       tracepointsindex = find_sec(hdr, sechdrs, secstrings, "__tracepoints");
+       tracepointsstringsindex = find_sec(hdr, sechdrs, secstrings,
+                                       "__tracepoints_strings");
+ 
+       mcountindex = find_sec(hdr, sechdrs, secstrings,
+                              "__mcount_loc");
  
        /* Now do relocations. */
        for (i = 1; i < hdr->e_shnum; i++) {
                marker_update_probe_range(mod->markers,
                        mod->markers + mod->num_markers);
  #endif
 +      dynamic_printk_setup(sechdrs, verboseindex);
+ #ifdef CONFIG_TRACEPOINTS
+               tracepoint_update_probe_range(mod->tracepoints,
+                       mod->tracepoints + mod->num_tracepoints);
+ #endif
+       }
+ 
+       /* sechdrs[0].sh_size is always zero */
+       mseg = (void *)sechdrs[mcountindex].sh_addr;
+       ftrace_init_module(mseg, mseg + sechdrs[mcountindex].sh_size);
+ 
        err = module_finalize(hdr, sechdrs, mod);
        if (err < 0)
                goto cleanup;