summaryrefslogtreecommitdiff
path: root/coregrind/.svn/text-base/pub_core_redir.h.svn-base
diff options
context:
space:
mode:
authorStephane Marchesin <marchesin@icps.u-strasbg.fr>2009-05-04 19:05:59 +0200
committerStephane Marchesin <marchesin@icps.u-strasbg.fr>2009-05-04 19:05:59 +0200
commit6e410b3bb6ff51580897431105aae14591cbf7fb (patch)
treef8aeba9352710f10cd6b1d5138c8fc3ece91c8c3 /coregrind/.svn/text-base/pub_core_redir.h.svn-base
Initial import of fatgrind.HEADmaster
Diffstat (limited to 'coregrind/.svn/text-base/pub_core_redir.h.svn-base')
-rw-r--r--coregrind/.svn/text-base/pub_core_redir.h.svn-base125
1 files changed, 125 insertions, 0 deletions
diff --git a/coregrind/.svn/text-base/pub_core_redir.h.svn-base b/coregrind/.svn/text-base/pub_core_redir.h.svn-base
new file mode 100644
index 0000000..c993c27
--- /dev/null
+++ b/coregrind/.svn/text-base/pub_core_redir.h.svn-base
@@ -0,0 +1,125 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Function replacement and wrapping. pub_core_redir.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2009 Julian Seward
+ jseward@acm.org
+
+ This program 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 of the
+ License, or (at your option) any later version.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_CORE_REDIR_H
+#define __PUB_CORE_REDIR_H
+
+//--------------------------------------------------------------------
+// PURPOSE: This module deals with:
+// - code replacement: intercepting calls to client functions, and
+// pointing them to a different piece of code.
+// - loading notification: telling the core where certain client-space
+// functions are when they get loaded.
+// - function wrapping: add calls to code before and after client
+// functions execute, for inspection and/or modification.
+//--------------------------------------------------------------------
+
+#include "pub_tool_redir.h"
+
+
+//--------------------------------------------------------------------
+// Notifications - by which we are told of state changes
+//--------------------------------------------------------------------
+
+/* Notify the module of a new DebugInfo (called from m_debuginfo). */
+extern void VG_(redir_notify_new_DebugInfo)( DebugInfo* );
+
+/* Notify the module of the disappearance of a DebugInfo (also called
+ from m_debuginfo). */
+extern void VG_(redir_notify_delete_DebugInfo)( DebugInfo* );
+
+/* Initialise the module, and load initial "hardwired" redirects. */
+extern void VG_(redir_initialise)( void );
+
+
+//--------------------------------------------------------------------
+// Queries
+//--------------------------------------------------------------------
+
+/* This is the crucial redirection function. It answers the question:
+ should this code address be redirected somewhere else? It's used
+ just before translating a basic block. If a redir is found,
+ *isWrap allows to distinguish wrap- from replace- style
+ redirections. */
+extern Addr VG_(redir_do_lookup) ( Addr orig, Bool* isWrap );
+
+
+//--------------------------------------------------------------------
+// Loading notification
+//--------------------------------------------------------------------
+
+/* Functions named with this macro have the property that the core will
+ be told what their address is when they are loaded. This can be useful
+ if the core wants to call them at some point, and so needs to know their
+ address. This is a weaker but more general mechanism than code
+ replacement.
+
+ Functions named with this macro should be in client space, ie. in
+ vgpreload_<tool>.h or vgpreload_core.h. */
+
+#define VG_NOTIFY_ON_LOAD(name) _vgnU_##name
+#define VG_NOTIFY_ON_LOAD_PREFIX "_vgnU_"
+#define VG_NOTIFY_ON_LOAD_PREFIX_LEN 6
+
+
+//--------------------------------------------------------------------
+// Function wrapping
+//--------------------------------------------------------------------
+
+// This is currently not working(?) --njn
+
+/* Wrapping machinery */
+//enum return_type {
+ // RT_RETURN,
+ // RT_LONGJMP,
+ // RT_EXIT,
+ //};
+//
+//typedef struct _FuncWrapper FuncWrapper;
+//struct _FuncWrapper {
+ // void *(*before)(va_list args);
+ // void (*after) (void *nonce, enum return_type, Word retval);
+ //};
+//
+//extern void VG_(wrap_function)(Addr eip, const FuncWrapper *wrapper);
+//extern const FuncWrapper *VG_(is_wrapped)(Addr eip);
+//extern Bool VG_(is_wrapper_return)(Addr eip);
+
+/* Primary interface for adding wrappers for client-side functions. */
+//extern CodeRedirect *VG_(add_wrapper)(const Char *from_lib, const Char *from_sym,
+// const FuncWrapper *wrapper);
+//
+//extern Bool VG_(is_resolved)(const CodeRedirect *redir);
+
+#endif // __PUB_CORE_REDIR_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/