Merge in function wrapping support from the FNWRAP branch.  That
branch hereby becomes inactive.  This currently breaks everything
except x86; fixes for amd64/ppc32 to follow.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5520 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/pub_core_dispatch.h b/coregrind/pub_core_dispatch.h
index 25e80cb..aebf210 100644
--- a/coregrind/pub_core_dispatch.h
+++ b/coregrind/pub_core_dispatch.h
@@ -56,18 +56,40 @@
    This code simply handles the common case fast -- when the translation
    address is found in the translation cache.  For anything else, the
    scheduler does the work.
+
+   NOTE, VG_(run_innerloop) MUST NOT BE USED for noredir translations.
+   Instead use VG_(run_a_noredir_translation).
 */
 extern 
 UWord VG_(run_innerloop) ( void* guest_state, UWord do_profiling );
-
 #if defined(VGA_x86) || defined(VGA_amd64)
 /* We need to locate a couple of labels inside VG_(run_innerloop), so
    that Vex can add branches to them from generated code.  Hence the
-   following somewhat bogus decls.  At least on x86 and amd64. */
+   following somewhat bogus decls.  At least on x86 and amd64.  ppc32
+   and ppc64 use straightforward bl-blr to get from dispatcher to
+   translation and back and so do not need these labels. */
 extern void VG_(run_innerloop__dispatch_unprofiled);
 extern void VG_(run_innerloop__dispatch_profiled);
 #endif
 
+
+/* Run a no-redir translation.  argblock points to 4 UWords, 2 to carry args
+   and 2 to carry results:
+      0: input:  ptr to translation
+      1: input:  ptr to guest state
+      2: output: next guest PC
+      3: output: guest state pointer afterwards (== thread return code)
+   MUST NOT BE USED for non-noredir (normal) translations.
+*/
+extern void VG_(run_a_noredir_translation) ( volatile UWord* argblock );
+#if defined(VGA_x86) || defined(VGA_amd64)
+/* We need to a label inside VG_(run_a_noredir_translation), so that
+   Vex can add branches to them from generated code.  Hence the
+   following somewhat bogus decl. */
+extern void VG_(run_a_noredir_translation__return_point);
+#endif
+
+
 #endif   // __PUB_CORE_DISPATCH_H
 
 /*--------------------------------------------------------------------*/